¿Cómo funciona el malware sin archivos en Linux?

10

Entiendo la definición de malware sin archivos:

Código malicioso que no se basa en archivos, sino que existe solo en la memoria ... Más en particular, el código malicioso sin archivos ... se agrega a un proceso activo en la memoria ...

¿Alguien puede explicar cómo funciona este anexarse ​​a un proceso activo en la memoria?

Además, ¿qué protección / endurecimiento (núcleo) está disponible contra tales ataques?

Martin Vegter
fuente
Por ejemplo, explotando un desbordamiento de búfer en una aplicación de red y luego descargando código malicioso que se ejecuta dentro de la aplicación y se propaga a través de la red. No hay archivos involucrados. La segunda parte de la pregunta es muy amplia, esencialmente equivale a "¿qué contramedidas existen contra el malware"?
dirkt
Esta pregunta podría responderse mejor en /security// .
rubynorails
@rubynorails: solo me interesan las respuestas específicas de Linux. SecuritySE es general. Si solicito una respuesta específica de Linux allí, me enviarán aquí.
Martin Vegter

Respuestas:

6

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 /procde 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.

Dr_
fuente
Al igual que esa otra respuesta , esta también está desactualizada: como se explica aquí , ya no necesita seguir un proceso para leer o escribir en él /proc/PID/mem. Espero que sea menos refractario que la otra persona para actualizar y corregir su respuesta, en lugar de perpetuar mitos e información errónea.
pizdelect
... que es este caso puede tener consecuencias, ya que las personas pueden asumir erróneamente que al realizar un proceso pueden evitar que otros procesos lean su memoria.
pizdelect
@pizdelect Gracias por el enlace. Sería bueno si agrega el contenido como otra respuesta.
dr_
No, no voy a agregar otra respuesta. Espero que arregles la tuya.
pizdelect
Recuerde que también puede editar las respuestas de otras personas. Parece que tiene un mejor conocimiento que yo sobre este tema en particular, por lo que puede hacerlo.
dr_
1

Cuando logra bloquear un proceso, puede hacer que el proceso inserte datos en la memoria. Una forma muy popular de hacer esto es usar desbordamientos de búfer .

Como funciona esto ? Usted sabe, por ejemplo, que un proceso está escuchando en el puerto x y tiene un búfer para una determinada función que es, digamos, 15 Bytes grande. Llama a esa función con 15 Bytes de datos + n Bytes (su código a ejecutar). Si el programa no valida los datos correctamente, sobrescribirá la memoria adyacente con su código y, por lo tanto, el código permanece en la memoria. Si puede ejecutar este código, es dueño del sistema. Existen limitaciones, por ejemplo, un proceso no puede escribir en la memoria fuera de su espacio asignado .

Hay una larga lista de vulnerabilidades en todos los sistemas operativos donde los desbordamientos del búfer permiten a los crackers inyectar datos en la memoria del objetivo.

thecarpy
fuente