Estos artículos forman parte de un taller de respuesta ante incidente básico. Por ello, hay cosas que se podrían hacer de una forma más eficiente y elegante… pero la idea era hacerlas de forma sencilla para que fueran fáciles de entender. Y como todo buen taller práctico, se puede seguir paso a paso: es posible descargar una máquina virtual de Remnux con todo lo necesario para el taller aquí (para VMWare) o aquí (formato .ova))
Respuesta ante Incidentes en menos de 15 líneas
Resumen ultra rápido de lo que es la respuesta ante incidentes:
- Preparación: Nos preparamos para un posible ataque desplegando medidas de detección y respuesta en la Organización.
- Detección y análisis: Detectamos posibles ataques y los analizamos para determinar si son o no falsos positivos, y en caso de un ataque analizamos su alcance gravedad.
- Contención, erradicación y recuperación: Contenemos la extensión de los atacantes por el sistema, los expulsamos y devolvemos el sistema a la operación normal.
- Lecciones post incidente: Analizamos el incidente en busca de medidas de mejora tanto en la seguridad del sistema como en la propia respuesta para futuros incidentes.
Preparación
En este caso práctico contamos con una Organización con una madurez intermedia en sus medidas de seguridad: los equipos tienen antivirus, tienen una pasarela de correo con un antispam/antivirus, tienen un proxy que controla la navegación, un cortafuegos que controla las conexiones entrantes y salientes y un detector de intrusos que permite generar alertas ante posibles ataques.
En el lado negativo, sabemos que las actualizaciones en general (parches de seguridad, firmas de antivirus y del detector de intrusos) dejan bastante que desear, y que la concienciación de seguridad de los usuarios es… dispar, por así decirlo.
Detección y análisis: “Mi equipo va raro”
Buena parte de los incidentes de seguridad comienzan con una llamada de un usuario quejándose de que “su equipo va lento / va raro / se cuelga / está poseído por alienígenas de Alpha Centauri”. Y obviamente, el usuario nunca “ha tocado nada / hecho nada raro / abierto nada / metido ningún USB con porno holandés de mapaches” en su equipo.
En la mayoría de los casos tras una investigación más o menos extensa (o tras la aplicación contundente de un LART), se demuestra que el usuario sí que ha realizado alguna acción, por lo que el 95% de los casos los usuarios suelen ser fuente inagotable de falsos positivos (y de alguna batallita gloriosa que no puede ser contada por el bien de la integridad física del autor).
Sin embargo, los usuarios constituyen una buena fuente de información a la hora de detectar un ataque contra la Organización. Debidamente entrenados, no solo son más duros de pelar a la hora de picar en un ataque de spear-phishing sino que además pueden avisarnos de dichos ataques, permitiendo que respondamos en algunos casos prácticamente en tiempo real (es por ello que todos los esfuerzos en concienciación en seguridad siempre merecen la pena).
En este caso tenemos una llamada de un usuario estándar: su equipo va “raro”, y jura y perjura que “no ha tocado nada”. Debido a que no es un $hyperboss pero si un $boss de cierto rango es necesaria una pronta respuesta, así que nos encaminamos a su equipo con celeridad recogiendo el equipo necesario para responder a un posible incidente: memoria USB con herramientas de triage, disco USB para una captura de disco y un café de medio litro.
El usuario nos recibe durante exactamente 20 segundos: el tiempo suficiente como para dejarnos el equipo encendido e “irse a una reunión urgente”. Si es necesario, ya nos atenderá cuando vuelva. En este momento de todas formas lo único que necesitamos es una captura de información básica que nos permita determinar si tenemos o no un incidente de seguridad.
Lo primero de todo es hacer un volcado de la memoria RAM del equipo, en este caso con la herramienta DumpIt, con un funcionamiento más básico que el mecanismo de un botijo.
Desde el mismo USB de herramientas lanzamos la herramienta:
El resultado es un fichero de 2Gb generado directamente en la propia memoria USB (recordad que hay que tocar lo menos posible el disco duro por si luego tenemos que hacer un análisis forense). Ya que estamos, vamos a recoger una información básica de triage con CYLR (que recoge entre otras cosas el registro de Windows, los logs y la MFT, todo ello a una velocidad de vértigo).
[Nota: queremos hacer este caso práctico MUY práctico. Por ello, puedes descargar tanto el volcado de RAM como el triage desde aquí].
Una vez recogida la información de triage (lo que debería llevaros <10min en un equipo moderno), podemos volver a nuestro equipo para revisar los datos. El análisis de la memoria suele ser la técnica que mejores resultados ofrece, así que tiramos de Volatility y realizamos dos listados de procesos con pslist y pstree (consejo: en estos análisis suele ser necesario volver a revisar la salida de muchos comandos, por lo que es muy útil redireccionar la salida a un fichero de texto):
# volatility --profile Win7SP1x64 -f win7_labodfir.raw pslist > pslist.txt # volatility --profile Win7SP1x64 -f win7_labodfir.raw pstree > pstree.txt Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit ------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------ 0xfffffa8018da7040 System 4 0 93 590 ------ 0 2018-04-07 08:36:49 UTC+0000 0xfffffa80194ee340 smss.exe 260 4 2 29 ------ 0 2018-04-07 08:36:49 UTC+0000 0xfffffa801a29a060 smss.exe 340 260 0 -------- 0 0 2018-04-07 08:36:52 UTC+0000 2018-04-07 08:36:55 UTC+0000 0xfffffa801a29c2f0 csrss.exe 348 340 9 580 0 0 2018-04-07 08:36:52 UTC+0000 0xfffffa801a5a9900 smss.exe 380 260 0 -------- 1 0 2018-04-07 08:36:55 UTC+0000 2018-04-07 08:36:55 UTC+0000 0xfffffa801a5acb10 wininit.exe 388 340 3 78 0 0 2018-04-07 08:36:55 UTC+0000 0xfffffa801a5b3b10 csrss.exe 400 380 9 325 1 0 2018-04-07 08:36:55 UTC+0000 0xfffffa801a5dcb10 winlogon.exe 436 380 3 112 1 0 2018-04-07 08:36:55 UTC+0000 0xfffffa801a66db10 services.exe 496 388 9 232 0 0 2018-04-07 08:36:56 UTC+0000 0xfffffa801a67eb10 lsass.exe 504 388 7 579 0 0 2018-04-07 08:36:56 UTC+0000 0xfffffa801a684b10 lsm.exe 512 388 10 148 0 0 2018-04-07 08:36:56 UTC+0000 0xfffffa801a532b10 svchost.exe 620 496 11 361 0 0 2018-04-07 08:36:58 UTC+0000 0xfffffa801aa90060 svchost.exe 684 496 9 322 0 0 2018-04-07 08:36:58 UTC+0000 0xfffffa801aac1870 svchost.exe 740 496 23 523 0 0 2018-04-07 08:36:58 UTC+0000 0xfffffa801ab49b10 svchost.exe 832 496 19 450 0 0 2018-04-07 08:36:58 UTC+0000 0xfffffa801ab5f630 svchost.exe 864 496 20 788 0 0 2018-04-07 08:36:59 UTC+0000 0xfffffa801ab8cb10 svchost.exe 912 496 35 1018 0 0 2018-04-07 08:36:59 UTC+0000 0xfffffa801abc1b10 audiodg.exe 996 740 6 136 0 0 2018-04-07 08:36:59 UTC+0000 0xfffffa801ac1ab10 svchost.exe 984 496 15 383 0 0 2018-04-07 08:36:59 UTC+0000 0xfffffa8019c7fb10 spoolsv.exe 1188 496 15 355 0 0 2018-04-07 08:37:00 UTC+0000 0xfffffa8019c88450 taskhost.exe 1196 496 10 282 1 0 2018-04-07 08:37:00 UTC+0000 0xfffffa8019cac600 svchost.exe 1256 496 18 319 0 0 2018-04-07 08:37:00 UTC+0000 0xfffffa801acc6870 svchost.exe 1360 496 10 148 0 0 2018-04-07 08:37:00 UTC+0000 0xfffffa801ad1bb10 Sysmon.exe 1448 496 12 572 0 0 2018-04-07 08:37:00 UTC+0000 0xfffffa8018e61060 vmtoolsd.exe 1524 496 8 295 0 0 2018-04-07 08:37:00 UTC+0000 0xfffffa801a0cf060 unsecapp.exe 1792 620 4 66 0 0 2018-04-07 08:37:02 UTC+0000 0xfffffa801a59a060 WmiPrvSE.exe 1916 620 13 329 0 0 2018-04-07 08:37:03 UTC+0000 0xfffffa801a5de060 dllhost.exe 1932 496 0 -------- 0 0 2018-04-07 08:37:03 UTC+0000 2018-04-07 08:40:14 UTC+0000 0xfffffa801a646060 TPAutoConnSvc. 2000 496 10 141 0 0 2018-04-07 08:37:03 UTC+0000 0xfffffa801a69b060 sppsvc.exe 1312 496 6 153 0 0 2018-04-07 08:37:03 UTC+0000 0xfffffa8018e67600 TPAutoConnect. 648 2000 5 122 1 0 2018-04-07 08:37:06 UTC+0000 0xfffffa8019c33b10 conhost.exe 1080 400 1 34 1 0 2018-04-07 08:37:06 UTC+0000 0xfffffa801a776060 dllhost.exe 2088 496 15 199 0 0 2018-04-07 08:37:09 UTC+0000 0xfffffa801a6e2060 WUDFHost.exe 2232 832 8 192 0 0 2018-04-07 08:37:11 UTC+0000 0xfffffa801a8628f0 msdtc.exe 2296 496 14 154 0 0 2018-04-07 08:37:11 UTC+0000 0xfffffa801ac0d060 VSSVC.exe 2448 496 0 -------- 0 0 2018-04-07 08:37:14 UTC+0000 2018-04-07 08:40:14 UTC+0000 0xfffffa80192ab060 userinit.exe 2504 436 0 -------- 1 0 2018-04-07 08:37:14 UTC+0000 2018-04-07 08:37:45 UTC+0000 0xfffffa8019c52b10 dwm.exe 2512 832 5 126 1 0 2018-04-07 08:37:14 UTC+0000 0xfffffa801a790060 explorer.exe 2536 2504 41 1158 1 0 2018-04-07 08:37:14 UTC+0000 0xfffffa801922e620 vmtoolsd.exe 2616 2536 6 186 1 0 2018-04-07 08:37:17 UTC+0000 0xfffffa801916f720 cmd.exe 2820 2536 1 20 1 0 2018-04-07 08:37:22 UTC+0000 0xfffffa8019182060 conhost.exe 2828 400 2 63 1 0 2018-04-07 08:37:22 UTC+0000 0xfffffa801913cb10 SearchIndexer. 2864 496 13 841 0 0 2018-04-07 08:37:23 UTC+0000 0xfffffa80194d5650 SearchProtocol 2968 2864 0 -------- 0 0 2018-04-07 08:37:26 UTC+0000 2018-04-07 08:41:37 UTC+0000 0xfffffa8019748b10 SearchFilterHo 2992 2864 0 -------- 0 0 2018-04-07 08:37:26 UTC+0000 2018-04-07 08:40:26 UTC+0000 0xfffffa801a5b9360 svchost.exe 1944 496 14 225 0 0 2018-04-07 08:38:21 UTC+0000 0xfffffa801a17bb10 wmpnetwk.exe 1744 496 9 209 0 0 2018-04-07 08:38:22 UTC+0000 0xfffffa8019c45b10 mscorsvw.exe 2476 496 6 87 0 1 2018-04-07 08:39:03 UTC+0000 0xfffffa801a819b10 mscorsvw.exe 2788 496 6 78 0 0 2018-04-07 08:39:03 UTC+0000 0xfffffa801a81a600 svchost.exe 2908 496 13 361 0 0 2018-04-07 08:39:03 UTC+0000 0xfffffa801a745320 TrustedInstall 1980 496 4 120 0 0 2018-04-07 08:39:51 UTC+0000 0xfffffa801a831b10 PING.EXE 1940 2820 0 -------- 1 0 2018-04-07 08:40:01 UTC+0000 2018-04-07 08:40:03 UTC+0000 0xfffffa801a8d7b10 OSPPSVC.EXE 1136 496 6 128 0 0 2018-04-07 08:42:08 UTC+0000 0xfffffa801ab2cb10 python.exe 3020 2536 0 -------- 1 0 2018-04-07 08:42:14 UTC+0000 2018-04-07 08:47:34 UTC+0000 0xfffffa801ab35350 conhost.exe 1760 400 0 -------- 1 0 2018-04-07 08:42:15 UTC+0000 2018-04-07 08:47:34 UTC+0000 0xfffffa801aa38b10 explorer.exe 1132 620 0 -------- 1 0 2018-04-07 08:44:09 UTC+0000 2018-04-07 08:45:10 UTC+0000 0xfffffa801a9c8600 vfggggg.exe 3208 1132 0 -------- 1 0 2018-04-07 08:44:09 UTC+0000 2018-04-07 08:44:38 UTC+0000 0xfffffa801a9c6b10 vfggggg.exe 2072 3208 23 396 1 1 2018-04-07 08:44:25 UTC+0000 0xfffffa801aec0b10 WmiPrvSE.exe 3632 620 13 333 0 1 2018-04-07 08:44:42 UTC+0000 0xfffffa801b55e060 WmiApSrv.exe 3476 496 5 112 0 0 2018-04-07 08:44:50 UTC+0000 0xfffffa801ae88060 WmiPrvSE.exe 3080 620 7 211 0 1 2018-04-07 08:44:55 UTC+0000 0xfffffa801afbc060 SearchProtocol 2952 2864 7 284 0 0 2018-04-07 08:45:39 UTC+0000 0xfffffa801a91f550 SearchFilterHo 2676 2864 5 104 0 0 2018-04-07 08:45:39 UTC+0000
El vfggggg.exe casi hace daño a la vista de lo malicioso que parece. Esta vez parece que los creadores del malware no se han gastado nada en técnicas de ofuscación. Sí que es curioso que el padre sea explorer.exe (habitualmente suele ser un cmd.exe o un Powershell.exe, o podemos trazar los padres hasta llegar a un navegador o cliente de correo).
La segunda opción más rentable suele ser reconocer las conexiones de red con netscan:
# volatility --profile Win7SP1x64 -f win7_labodfir.raw netscan > netscan.txt Volatility Foundation Volatility Framework 2.5 Offset(P) Proto Local Address Foreign Address State Pid Owner Created 0x7deda8c0 UDPv4 0.0.0.0:3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e030010 UDPv4 0.0.0.0:64476 *:* 864 svchost.exe 2018-04-07 08:38:26 UTC+0000 0x7e030010 UDPv6 :::64476 *:* 864 svchost.exe 2018-04-07 08:38:26 UTC+0000 0x7e043730 UDPv4 0.0.0.0:5355 *:* 984 svchost.exe 2018-04-07 08:38:20 UTC+0000 0x7e06bb30 UDPv4 0.0.0.0:3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e06bb30 UDPv6 :::3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e089b30 UDPv4 0.0.0.0:5355 *:* 984 svchost.exe 2018-04-07 08:38:20 UTC+0000 0x7e089b30 UDPv6 :::5355 *:* 984 svchost.exe 2018-04-07 08:38:20 UTC+0000 0x7e143010 UDPv4 0.0.0.0:3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e0a93b0 TCPv4 0.0.0.0:135 0.0.0.0:0 LISTENING 684 svchost.exe 0x7e0ac680 TCPv4 0.0.0.0:135 0.0.0.0:0 LISTENING 684 svchost.exe 0x7e0ac680 TCPv6 :::135 :::0 LISTENING 684 svchost.exe 0x7e0af5c0 TCPv4 0.0.0.0:49152 0.0.0.0:0 LISTENING 388 wininit.exe 0x7e0b6820 TCPv4 0.0.0.0:49152 0.0.0.0:0 LISTENING 388 wininit.exe 0x7e0b6820 TCPv6 :::49152 :::0 LISTENING 388 wininit.exe 0x7e144c80 TCPv4 0.0.0.0:49153 0.0.0.0:0 LISTENING 740 svchost.exe 0x7e145010 TCPv4 0.0.0.0:49153 0.0.0.0:0 LISTENING 740 svchost.exe 0x7e145010 TCPv6 :::49153 :::0 LISTENING 740 svchost.exe 0x7e0afb10 TCPv6 -:0 6800:a91a:80fa:ffff:6800:a91a:80fa:ffff:0 CLOSED 1 ??=???? 0x7e435010 UDPv4 192.168.25.128:138 *:* 4 System 2018-04-07 08:38:19 UTC+0000 0x7e497ec0 UDPv4 192.168.25.128:137 *:* 4 System 2018-04-07 08:38:19 UTC+0000 0x7e5bdec0 UDPv4 0.0.0.0:3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e5bdec0 UDPv6 :::3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e5be010 UDPv4 0.0.0.0:64475 *:* 864 svchost.exe 2018-04-07 08:38:26 UTC+0000 0x7e5c1e00 UDPv4 0.0.0.0:3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e5c1e00 UDPv6 :::3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e74bd40 UDPv4 0.0.0.0:54789 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e752010 UDPv4 0.0.0.0:54790 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e752010 UDPv6 :::54790 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7d4d00 UDPv4 0.0.0.0:3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e7d5340 UDPv4 0.0.0.0:54791 *:* 864 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7d69b0 UDPv4 0.0.0.0:54792 *:* 864 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7d69b0 UDPv6 :::54792 *:* 864 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7d8010 UDPv6 ::1:54794 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7ec330 UDPv6 fe80::fc4b:861d:db18:9601:54793 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7eca00 UDPv4 192.168.25.128:54795 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7edd00 UDPv4 127.0.0.1:54796 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7ee010 UDPv6 fe80::fc4b:861d:db18:9601:1900 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7ee870 UDPv6 ::1:1900 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7f0010 UDPv4 192.168.25.128:1900 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7f0950 UDPv4 127.0.0.1:1900 *:* 1944 svchost.exe 2018-04-07 08:38:22 UTC+0000 0x7e7f5520 UDPv4 0.0.0.0:3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e7f5520 UDPv6 :::3702 *:* 864 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7e44c700 TCPv4 192.168.25.128:139 0.0.0.0:0 LISTENING 4 System 0x7e7e5010 TCPv4 0.0.0.0:49155 0.0.0.0:0 LISTENING 496 services.exe 0x7e7e5010 TCPv6 :::49155 :::0 LISTENING 496 services.exe 0x7e8a4010 TCPv4 0.0.0.0:49155 0.0.0.0:0 LISTENING 496 services.exe 0x7ead2360 TCPv4 0.0.0.0:445 0.0.0.0:0 LISTENING 4 System 0x7ead2360 TCPv6 :::445 :::0 LISTENING 4 System 0x7ee61630 TCPv4 0.0.0.0:49154 0.0.0.0:0 LISTENING 912 svchost.exe 0x7ee63a80 TCPv4 0.0.0.0:49154 0.0.0.0:0 LISTENING 912 svchost.exe 0x7ee63a80 TCPv6 :::49154 :::0 LISTENING 912 svchost.exe 0x7f372c40 TCPv4 0.0.0.0:5357 0.0.0.0:0 LISTENING 4 System 0x7f372c40 TCPv6 :::5357 :::0 LISTENING 4 System 0x7ee767a0 TCPv6 -:0 4870:da18:80fa:ffff:4870:da18:80fa:ffff:0 CLOSED 101 3 0x7f566840 TCPv4 192.168.25.128:49219 91.192.100.59:30030 SYN_SENT -1 0x7fb3bec0 UDPv4 0.0.0.0:0 *:* 984 svchost.exe 2018-04-07 08:38:17 UTC+0000 0x7fb3bec0 UDPv6 :::0 *:* 984 svchost.exe 2018-04-07 08:38:17 UTC+0000 0x7fc0a1e0 UDPv4 0.0.0.0:3702 *:* 1944 svchost.exe 2018-04-07 08:39:03 UTC+0000 0x7fc98a50 TCPv4 0.0.0.0:49156 0.0.0.0:0 LISTENING 504 lsass.exe 0x7fc98a50 TCPv6 :::49156 :::0 LISTENING 504 lsass.exe 0x7fc9f940 TCPv4 0.0.0.0:49156 0.0.0.0:0 LISTENING 504 lsass.exe
Obtenemos una combinación de IP/puerto bastante sospechosa: 91.192.100.59:30030. Dado que el puerto 30030 no es especialmente conocido, aquí podríamos tener de dónde tirar en nuestra investigación.
La tercera opción de interés es realizar un listado de los ficheros abiertos que están todavía residentes en memoria con filescan:
# volatility --profile Win7SP1x64 -f win7_labodfir.raw filescan > filescan.txt
Dado que tenemos un nombre de fichero sospechoso, podemos buscarlo:
# fgrep vfggggg.exe filescan.txt 0x000000007e272a90 14 0 R--r-d \Device\HarddiskVolume1\Users\antonio\AppData\Roaming\vfggggg.exe
Comprobamos que el fichero está localizado en una carpeta de usuario, una localización muy frecuente para el malware recién aterrizado en un equipo. Vamos a extraerlo de la memoria con dumpfiles:
# mkdir dump # volatility --profile Win7SP1x64 -f win7_labodfir.raw dumpfiles -Q 0x000000007e272a90 -u -n -D dump
Obtenemos información básica del fichero con file y exiftool:
# file file.None.0xfffffa801ae09e30.vfggggg.exe.img file.None.0xfffffa801ae09e30.vfggggg.exe.img: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows # exiftool file.None.0xfffffa801ae09e30.vfggggg.exe.img ExifTool Version Number : 9.46 File Name : file.None.0xfffffa801ae09e30.vfggggg.exe.img Directory : . File Size : 4.0 kB File Modification Date/Time : 2018:04:07 14:52:57-04:00 File Access Date/Time : 2018:04:07 14:53:34-04:00 File Inode Change Date/Time : 2018:04:07 14:52:57-04:00 File Permissions : rw-r--r-- File Type : Win32 EXE MIME Type : application/octet-stream Machine Type : Intel 386 or later, and compatibles Time Stamp : 2017:06:24 06:53:40-04:00 PE Type : PE32 Linker Version : 8.0 Code Size : 371712 Initialized Data Size : 580096 Uninitialized Data Size : 0 Entry Point : 0xf000a OS Version : 4.0 Image Version : 0.0 Subsystem Version : 4.0 Subsystem : Windows GUI Warning : Error processing PE data dictionary
El fichero parece ser nuestro culpable (un ejecutable PE32 no reconocido en espacio de usuario es como una pistola humeante al lado de un cadáver), pero en este caso el tamaño no acompaña: 4Kb, que indica que no ha podido ser extraído correctamente de la memoria.
Seguimos explorando las evidencias disponibles, en este caso la MFT (Master File Table) recogida por CYLR, que nos va a dar una buena pista de los ficheros que han estado operativos en el momento de la infección. Nuestro objetivo es encontrar la vía en la que el malware ha llegado al sistema, habitualmente una de estas tres: correo, navegación o USB.
La MFT está extraída en bruto gracias a la magia de CYLR, pero necesitamos convertirla a un formato legible, así que hacemos uso de la herramienta mftdump.exe para parsearla y convertirla en un fichero de 71Mb con 175K entradas.
Dado que solo nos interesa el día de hoy, podemos hacer extraer únicamente los ficheros tocados en el día:
# fgrep 2018-04-07 mft_parseada.csv > mft_malware.csv # wc mft_malware.csv 457 18333 145101 mft_malware.csv
La operación nos deja 457 eventos, algo mucho más manejable y que podemos abrir sin miedo en un LibreOffice Calc para su examen. No cuesta mucho localizar el vfggggg.exe y comprobar los ficheros que están alrededor:
25645 0 0 0 Purchase Order 03EDG.doc PURCHA~1.DOC 2018-04-07 08:42:00 2018-04-07 08:42:29 2018-04-07 08:42:29 2018-04-07 08:42:29 16508 0 1 0 Content.Word CONTEN~1.WOR 2018-04-07 08:42:07 2018-04-07 08:45:39 2018-04-07 08:45:39 2018-04-07 08:45:39 25612 0 1 0 Content.Outlook CONTEN~1.OUT 2018-04-07 08:42:29 2018-04-07 08:42:29 2018-04-07 08:42:29 2018-04-07 08:42:29 89905 0 0 0 test 02.exe TEST02~1.EXE 2018-04-07 08:43:53 2018-04-07 08:43:53 2018-04-07 08:43:54 2018-04-07 08:43:54 952832 89897 0 0 0 vfggggg.exe 2018-04-07 08:44:02 2018-04-07 08:44:02 2018-04-07 08:43:54 2018-04-07 08:43:54 952832
El fichero “Purchase Order 03EDG.doc” tiene todos los boletos para ser el vector de infección. Podemos ver que tenemos residuos de la existencia tanto de Word como de Outlook, por lo que la cadena de infección parece bastante básica: el usuario ha recibido un correo en Outlook con un adjunto malicioso y lo ha abierto directamente con Word.
Ya tenemos localizados los ficheros que queremos recuperar del disco duro del usuario, pero antes de movernos vamos a asegurar la operación sacando la artillería pesada con el comando strings de Volatility (que se realiza en dos tiempos porque previamente tenemos que extraer todas las cadenas útiles del volcado de memoria):
$ strings -a -td win7_labodfir.raw > strings_win7.txt $ strings -a -td -el win7_labodfir.raw >> strings_win7.txt $ volatility --profile Win7SP1x64 -f win7_labodfir.raw strings -s strings_win7.txt > strings_vol.txt
Buscamos la IP de Netscan y confirmamos que está relacionada con nuestro malware:
# fgrep 91.192.100.59 strings_vol.txt 71148752 [FREE MEMORY:-1] "10:45:08,6998260","vfggggg.exe","2072","TCP Reconnect","192.168.25.128:49179 -> 91.192.100.59:30030","SUCCESS","Length: 0, seqnum: 0, connid: 0","0","C:\Users\antonio\AppData\Roaming\vfggggg.exe" 441241253 [FREE MEMORY:-1] "10:45:40,6802302","vfggggg.exe","2072","TCP Reconnect","192.168.25.128:49186 -> 91.192.100.59:30030","SUCCESS","Length: 0, seqnum: 0, connid: 0","0","C:\Users\antonio\AppData\Roaming\vfggggg.exe"
Investigamos otros rastros de conexiones TCP en la memoria con “TCP Send”, “TCP Receive” y “TCP Reconnect”:
# egrep "TCP Send|TCP Reveive|TCP Reconnect" strings_vol.txt
Encontramos varias conexiones de interés:
1536769087 [2676:00962c3f] 10:42:21,1402019,Network,TCP Send,OUTLOOK.EXE,1128,208.97.132.208:143 438082728 [2676:014baca8] 10:43:53,3557447,Network,TCP Send,powershell.exe,3456,185.83.215.16:443 1161326462 [2952:00299f7e] 10:43:47,6837408,Network,TCP Send,mshta.exe,1236,185.83.215.16:443 519710651 [FREE MEMORY:-1] 10:43:45,8308037,Network,TCP Send,WINWORD.EXE,3744,185.83.215.16:443 519710839 [FREE MEMORY:-1] 10:43:46,3235312,Network,TCP Send,WINWORD.EXE,3744,178.255.83.1:80
Al parecer sí que tenemos un Outlook en juego, así como unas conexiones muy sospechosas tanto de Word como de Powershell. Podríamos darle más vueltas al contenido del strings_vol.txt, pero ya tenemos todas las pistas relacionadas, así que podemos proceder a recuperar los ficheros sospechosos del equipo del usuario: “Purchase Order 03EDG.doc” y “vfggggg.exe”, además de la .pst del usuario (que almacena su correo).
Arrancamos el equipo con un live CD de Linux, montamos el disco y localizamos los ficheros que nos interesan (por ahora no parece necesario hacer una copia forense completa del disco duro). El análisis de los ficheros maliciosos, en el siguiente artículo…
Maestro. Ojalá en todas las empresas haya una política, un procedimiento para realizar estas tareas. En la mayoría de casos va el abuelete informático encargado, reinicia la máquina y si le sigue dando problemas disco duro nuevo que te va. Solucionado. Muy buen artículo. Esperaré al siguiente. Saludos.
Buen artículo Antonio. Esperamos el siguiente.