O malware sem arquivo ataca o alvo explorando uma vulnerabilidade, por exemplo no plug-in Flash de um navegador ou em um protocolo de rede.
Um processo do Linux pode ser modificado usando a chamada do sistema ptrace()
. Essa chamada de sistema é geralmente usada por depuradores para inspecionar e gerenciar o estado interno do processo de destino e é útil no desenvolvimento de software.
Por exemplo, vamos considerar um processo com PID 1234. O espaço de endereçamento completo deste processo pode ser visualizado no pseudo sistema de arquivos /proc
na localização /proc/1234/mem
. Você pode abrir este pseudofile e anexar a este processo via ptrace()
; Depois de fazer isso, você pode usar pread()
e pwrite()
para gravar no espaço do processo.
char file[64];
pid = 1234;
sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);
waitpid(pid, NULL, 0);
off_t addr = ...; // target process address
pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);
ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);
(Código retirado de aqui . Outro artigo sobre uma exploração ptrace está disponível aqui .)
Com relação à defesa orientada ao kernel contra esses ataques, a única maneira é instalar patches de fornecedores de kernel e / ou desativar o vetor de ataque em particular. Por exemplo, no caso de ptrace, você pode carregar um módulo de bloqueio de ptrace no kernel, o que desabilitará essa chamada de sistema em particular; claramente isso também faz com que você não consiga usar ptrace para depuração.