Un malware sans fichier attaque la cible en exploitant une vulnérabilité, par exemple dans le plugin Flash d'un navigateur ou dans un protocole réseau.
Un processus Linux peut être modifié à l'aide de l'appel système ptrace()
. Cet appel système est généralement utilisé par les débogueurs pour inspecter et gérer l'état interne du processus cible et est utile dans le développement de logiciels.
Par exemple, considérons un processus avec PID 1234. Tout l'espace d'adressage de ce processus peut être visualisé dans le pseudo-système /proc
de fichiers à l'emplacement /proc/1234/mem
. Vous pouvez ouvrir ce pseudofichier, puis vous attacher à ce processus via ptrace()
; après cela, vous pouvez utiliser pread()
et pwrite()
écrire dans l'espace de processus.
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);
(Code tiré d' ici . Un autre article sur un exploit ptrace est disponible ici .)
Concernant la défense orientée noyau contre ces attaques, la seule façon est d'installer les correctifs des fournisseurs du noyau et / ou de désactiver le vecteur d'attaque particulier. Par exemple, dans le cas de ptrace, vous pouvez charger un module de blocage de ptrace dans le noyau qui désactivera cet appel système particulier; il est clair que cela vous empêche également d'utiliser ptrace pour le débogage.