El malware sin archivos ataca al objetivo explotando una vulnerabilidad, por ejemplo, en el complemento Flash de un navegador o en un protocolo de red.
Un proceso de Linux se puede modificar mediante la llamada al sistema ptrace()
. Los depuradores suelen utilizar esta llamada del sistema para inspeccionar y gestionar el estado interno del proceso de destino, y es útil en el desarrollo de software.
Por ejemplo, consideremos un proceso con PID 1234. El espacio de direcciones completo de este proceso se puede ver en el pseudo sistema /proc
de archivos en la ubicación /proc/1234/mem
. Puede abrir este pseudofile, luego adjuntarlo a este proceso a través de ptrace()
; después de hacerlo, puede usar pread()
y pwrite()
escribir en el espacio de proceso.
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 tomado de aquí . Otro documento sobre un exploit ptrace está disponible aquí .)
Con respecto a la defensa orientada al kernel contra estos ataques, la única forma es instalar parches de proveedores de kernel y / o deshabilitar el vector de ataque en particular. Por ejemplo, en el caso de ptrace, puede cargar un módulo de bloqueo de ptrace en el núcleo que deshabilitará esa llamada particular del sistema; claramente esto también lo hace incapaz de usar ptrace para la depuración.