O malware sem arquivo ataca o alvo explorando uma vulnerabilidade, por exemplo, no plugin Flash do navegador ou em um protocolo de rede.
Um processo Linux pode ser modificado usando a chamada do sistema ptrace()
. Essa chamada do sistema geralmente é usada pelos 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 o PID 1234. Todo o espaço de endereço desse processo pode ser visualizado no pseudo sistema de arquivos /proc
no local /proc/1234/mem
. Você pode abrir esse pseudofile e anexar a esse processo via ptrace()
; depois de fazer isso, você pode usar pread()
e pwrite()
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 extraído daqui . Outro artigo sobre uma exploração do ptrace está disponível aqui .)
Com relação à defesa orientada ao kernel contra esses ataques, a única maneira é instalar as correções dos fornecedores do kernel e / ou desativar o vetor de ataque específico. Por exemplo, no caso de ptrace, você pode carregar um módulo de bloqueio de ptrace no kernel, o que desativará a chamada específica do sistema; claramente isso também torna você incapaz de usar o ptrace para depuração.