Hay una regla no escrita en intrusiones modernas: El mejor malware es el que no parece malware. Pero hay una evolución aún más interesante que se está viendo en entornos Linux modernos. Persistencia que: no deja procesos corriendo, no hace beaconing, no usa cron, no instala malware clásico y aparece solo cuando el atacante lo necesita. Todo usando infraestructura normal del sistema. Y en muchos SOC todavía pasa desapercibido. Esto podríamos llamarlo Living off the Land en systemd
Hoy vamos a ver dos niveles. El segundo casi nadie lo revisa.
Nivel 1 — Persistencia bajo demanda con socket activation
Muchos servicios Linux funcionan así: systemd abre un socket y cuando alguien se conecta… se lanza el servicio. Esto se usa en servicios reales del sistema todo el tiempo. Pero también se puede abusar. La idea es simple: Crear un socket local que solo ejecute el payload cuando alguien lo toque.
Sin procesos persistentes.
Sin tráfico periódico.
Sin nada que llame la atención.
Primero se crea el servicio:
Después el socket que lo activa:
Activación:
Y aquí viene lo interesante.
Ahora el sistema queda así:
- Hay un socket escuchando
- No hay proceso activo
- No hay conexión saliente
- No hay nada ejecutándose
Hasta que el atacante decide activarlo.
Por ejemplo, tras pivotar dentro de la red:
En ese momento systemd hace esto:
- Lanza el servicio
- Conecta el socket
- El payload se ejecuta
- Cuando termina… desaparece
Muchos sistemas de detección dependen de procesos persistentes. Aquí el atacante no existe hasta que decide existir.
Pero esto no es lo más interesante...
Nivel 2 — Persistencia que casi nadie revisa: systemd generators
Aquí es donde la cosa se vuelve realmente interesante. systemd tiene algo llamado generators. Son pequeños programas que se ejecutan durante el arranque del sistema y generan servicios dinámicamente. No son servicios normales. No aparecen en los lugares donde normalmente se revisa persistencia.
systemd ejecuta cualquier binario que encuentre en:
Y eso abre una puerta bastante potente. Porque un generator puede crear servicios cada vez que el sistema arranca.
El flujo ofensivo sería:
- Acceso inicial
- Escalada de privilegios
- Instalar generator
- El generator crea un servicio en boot
- El servicio ejecuta payload
- Todo parece parte del sistema
Crear el generator:
Contenido:
Permisos:
Ahora pasa algo curioso.
Durante el arranque:
- systemd ejecuta el generator
- el generator crea el servicio
- el servicio aparece dinámicamente en:
Muchos analistas no revisan esa ruta. Porque normalmente se busca persistencia en:
Pero no en unidades generadas dinámicamente, lo que hace esto especialmente interesante en intrusiones reales ;)
Tiene varias propiedades que gustan mucho a atacantes avanzados:
- Se mezcla con lógica interna del sistema
- Ocurre durante el boot
- Puede camuflarse fácilmente
- No deja servicios obvios instalados
- Genera unidades dinámicas
- Es raro en malware común
Y hay otro detalle importante:
Muchos equipos de seguridad ni siquiera saben que esto existe.
Y si este post te interesa, en el siguiente veremos una técnica que se está viendo en intrusiones modernas que combina: systemd, contenedores y control de red interno, y que es mucho más sigilosa que esto.
Comentarios
Publicar un comentario