Il malware senza file attacca l'obiettivo sfruttando una vulnerabilità, ad esempio nel plug-in Flash di un browser o in un protocollo di rete.
Un processo Linux può essere modificato usando la chiamata di sistema ptrace()
. Questa chiamata di sistema viene generalmente utilizzata dai debugger per ispezionare e gestire lo stato interno del processo di destinazione ed è utile nello sviluppo del software.
Ad esempio, consideriamo un processo con PID 1234. L'intero spazio degli indirizzi di questo processo può essere visualizzato nello pseudo file system /proc
nella posizione /proc/1234/mem
. È possibile aprire questo pseudofile, quindi collegarlo a questo processo tramite ptrace()
; dopo averlo fatto, è possibile utilizzare pread()
e pwrite()
scrivere nello spazio del 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);
(Codice preso da qui . Un altro documento su un exploit ptrace è disponibile qui .)
Per quanto riguarda la difesa orientata al kernel contro questi attacchi, l'unico modo è installare patch del fornitore del kernel e / o disabilitare il particolare vettore di attacco. Ad esempio, nel caso di ptrace è possibile caricare un modulo di blocco ptrace nel kernel che disabiliterà quella particolare chiamata di sistema; chiaramente questo rende anche impossibile utilizzare ptrace per il debug.