Linares me citó en la comisaría vieja. Me presenté con la vecina y un pendrive USB-C de 32 GB, por si el dump no cabía en el mío. Me recibió con gesto de poli antiguo en problemas nuevos:
- Esto que te voy a dar, muchacho, no existe. No lo pediste, no te lo di y no lo tengo yo.
- Entendido, subcomisario.
- Subinspector, carajo, pero déjalo. Es un dump de 8 gigas de un portátil que le requisamos a un pavo la semana pasada. Usaba GuindousSiete a pelo, sin antivirus, con una cuenta «Administrador» y una contraseña que te voy a escribir aquí delante para que te partas la caja.
La escribió: admin1234. Lo miré con ternura. Hay clases de gente.
$ cp /media/linares/memdump.raw /home/jorge/lab/
$ ls -lh memdump.raw
-rw-r--r-- 1 jorge jorge 7.9G
Instalé Volatility 3, porque el dos ya es pieza de museo:
# apt-get install python3-pip -y
$ pip3 install --user volatility3
$ vol -f memdump.raw windows.info
Arrancó la maquinaria. Primero la información del sistema:
$ vol -f memdump.raw windows.info
NTBuildLab : 7601.24540.amd64fre.win7sp1_ldr_escrow
Is64Bit : True
PageSize : 4096
KernelBase : 0xfffff80002a0d000
Windows 7 SP1. Llevaban usando un sistema operativo que pidió la jubilación en 2020. Era su elección y su limitación. La vecina se rio por primera vez de Guindous. Me dio cierta emoción.
$ vol -f memdump.raw windows.pslist
PID PPID ImageFileName
4 0 System
560 4 smss.exe
...
2448 1664 bp-agent.exe
2452 2448 powershell.exe
2480 2448 torrc-boot.exe
bp-agent.exe. El padrecito. En Guindous. Con PowerShell colgando como hijo. Miré los hilos:
$ vol -f memdump.raw windows.netscan
PID 2448 ...:49117 → 5.39.x.x:443 (TCP ESTAB)
PID 2448 127.0.0.1:9050 → ... (LOOPBACK)
PID 2480 ...:55121 → 185.220.x.x:9001 (TOR)
El agente se conectaba a un IP pública 5.39.x.x en el 443. Un DC IP de OVH, probablemente un VPS desechable. Y también hablaba Tor. Nada nuevo.
Lo interesante lo saqué con windows.cmdline y sobre todo windows.memmap + grep:
$ vol -f memdump.raw windows.cmdline | grep bp-agent
2448 bp-agent.exe C:\Users\Admin\bp-agent.exe --beacon
--contact el-forkado-b17@grupov.local
--cmdr vargas
La cadena, literalmente, dentro de la memoria: --contact el-forkado-b17@grupov.local --cmdr vargas. El pesquero. Como en el pcap de 2018. Pero encima confirmaba Vargas por su nombre. Vivo. Operativo. En activo. El Comandante Vargas, siete años después, seguía dando órdenes desde un barco amarrado en Sanlúcar. Novelístico, pero real.
Por curiosidad académica tiré también windows.pstree:
$ vol -f memdump.raw windows.pstree
System 4
├── smss.exe 560
│ └── csrss.exe 672
...
services.exe 1664
└── bp-agent.exe 2448
├── powershell.exe 2452
├── torrc-boot.exe 2480
└── (punto-daemon).exe 2484
(punto-daemon).exe. PID 2484. Esperaba yo no esperar ver eso. Entré al proceso:
$ vol -f memdump.raw windows.memmap --pid 2484 --dump
$ strings pid.2484.dmp | grep -A1 '.(punto)'
.(punto) al servicio del contrario.
vigilo. espero. os saco cuando haga falta.
pista: El Forkado, cabina del capitan,
debajo del mapa. Nessusd corriendo.
abrir el cajon rojo. contrasena: GNU/Linux
.(punto)
Se me cayó la copa. Literalmente. Chateau Garrulón 2011 beta por el suelo del laboratorio. La vecina fue a por papel. Yo me quedé leyendo el mensaje: él estaba dentro de ese PC. Estaba como proceso. Estaba como topo. Nos decía exactamente dónde entrar y cómo. El tipo no había abandonado nunca. Había estado en background, ejecutando el plan lento.
Llamé a Linares.
- Subcomisario, necesitamos ir a Sanlúcar.
- Es Subinspector.
- Subinspector, necesitamos asalto, orden, coche, wireguard y tres botellas. Por este orden.
- ¿Wireguard?
- La VPN. La explicamos en el siguiente capítulo.