Capítulo 6: El Profesor y el servicio systemd-badd

La casa del Profesor seguía oliendo a polvo de EPROM y a sopa fría. No cambiaba. Me abrió con el mandil puesto y, como siempre, gruñó antes de saludar:

  • Si me traes systemd te arranco la tecla del windoze, muchacho.
  • Profesor, traigo systemd, pero no es culpa mía. Es systemd-badd.
  • Badd. Así se llama. Pues qué apropiado.

Me invitó a pasar. La vecina traía una botella — un Reserva Califato de Córdoba 1998 LTS, un tinto con pedigree y tanino de 27 años sin interrupción, que el Profesor recibió con una reverencia y descorchó como quien mueve un floppy de 5¼. La vecina, educadamente, preguntó si podía enchufar su portátil. El Profesor le ofreció un cable con adaptador IBM XT del 84 y se rio solo durante dos minutos.

Le conté lo de la Raspberry, lo de GrupoV-IoT, lo de 3:33, lo de Tor. El Profesor escuchaba y bebía. Cuando terminé, se quitó las gafas, respiró hondo, y empezó a hablar con voz de maestro:

  • Chico, los Blue Pantallaz aprendieron. Antes eran un fork del Pleistoceno. Ahora han hecho lo que todo el mundo hace cuando quiere sobrevivir: se han disfrazado de servicio del sistema. Eso es systemd-badd: no es un binario, es una unit.

Nos fuimos a la Raspberry, que yo me había llevado conmigo atada con una brida, y la puse sobre la mesa entre el tinto y un teclado PS/2 Model M que pesaba más que mi portátil. La arrancamos y se la entregué al Profesor.

# systemctl list-units --all | grep -i badd
systemd-badd.service loaded active running BP Daemon

# systemctl status systemd-badd.service
● systemd-badd.service - BP Daemon
     Loaded: loaded (/etc/systemd/system/systemd-badd.service)
     Active: active (running) since Mon; 8min ago
   Main PID: 1337 (bp-agent)

Un servicio con PID 1337, porque los Blue Pantallaz tenían sentido del humor, mal sentido del humor, pero sentido del humor. Abrimos la unit:

# cat /etc/systemd/system/systemd-badd.service

[Unit]
Description=BP Daemon
After=network.target

[Service]
ExecStart=/usr/local/sbin/bp-agent --beacon
Restart=always
RestartSec=5s
Environment=BP_ENDPOINT=badd7zv4obfuscadosjkl.onion

[Install]
WantedBy=multi-user.target

Restart=always. Hasta la muerte. Te lo mataban una vez y systemd, ese gran papá que no sabe decir no, lo reencarnaba en cinco segundos. Solo había una forma decente de callarlo: mask.

# systemctl stop systemd-badd.service
# systemctl disable systemd-badd.service
# systemctl mask systemd-badd.service
Created symlink /etc/systemd/system/systemd-badd.service → /dev/null

Un symlink al /dev/null. El castigo más elegante que puede darle un administrador a un servicio: mandarlo a nunca-jamás. El Profesor aplaudió en silencio, como aplauden los veteranos, con la punta de los dedos.

  • Pero eso — dijo — solo lo mata en esta Pi. Si hay más nodos?
  • Los hay. Seguro.
  • Entonces, chico, necesitas algo más fino. Necesitas una firma.

Me miró fijamente. La vecina, curiosa, se acercó.

  • ¿Una firma?
  • Sí. Algo que identifique a estos bichos donde sea que se escondan. Y para eso solo hay una herramienta.

Sacó de un cajón una camiseta negra desteñida con un logo blanco. Yara. La letra era del 2014. El Profesor era un fósil con buenos amigos.

  • Vete a casa, dale de comer a la vecina, abre el editor favorito y escribe reglas YARA con lo que tengas. Si encuentras una cadena consistente en el binario, el pcap o los logs, la yara te lo va a chivar en cualquier máquina del planeta. Y te va a chivar también, chico, si alguien más de tus amigos del pasado anda por ahí.

Dijo «tus amigos del pasado» mirándome de reojo con media sonrisa. Sabía. Ese hombre siempre sabía. Yo salí con la vecina, con la Raspberry muerta en una bolsa, y con la sensación de que .(punto)Antúnez, estuviera donde estuviera, ya estaba preparando el siguiente movimiento, probablemente escribiendo también reglas YARA, pero del revés, para ver si alguien las escribía de él.

Me chupé los dedos del retronasal del Califato. Tocaba yara.