La caja de trucos de LockFile ransomware: cifrado intermitente y evasión

LockFile es una nueva familia de ransomware que surgió en julio de 2021 tras el descubrimiento en abril de 2021 de las vulnerabilidades de ProxyShell en los servidores de Microsoft Exchange. El ransomware LockFile parece aprovechar las vulnerabilidades de ProxyShell para violar los objetivos con servidores de Microsoft Exchange locales sin parches, seguido de un ataque de retransmisión PetitPotam NTLM para tomar el control del dominio.

En este análisis detallado del ransomware LockFile, revelamos su enfoque novedoso para el cifrado de archivos y cómo el ransomware intenta eludir el comportamiento y la protección contra ransomware basada en estadísticas.

Este artículo analiza los siguientes hallazgos clave en profundidad:

  • El ransomware LockFile cifra cada 16 bytes de un archivo. A esto lo llamamos "cifrado intermitente" y esta es la primera vez que los investigadores de Sophos han visto que se utiliza este enfoque. El cifrado intermitente ayuda al ransomware a evadir la detección de algunas soluciones de protección contra ransomware porque un documento cifrado se ve estadísticamente muy similar al original sin cifrar.
  • Al igual que WastedLocker y Maze ransomware, LockFile ransomware utiliza entrada / salida (E / S) mapeada en memoria para cifrar un archivo. Esta técnica permite que el ransomware cifre de forma transparente los documentos almacenados en caché en la memoria y hace que el sistema operativo escriba los documentos cifrados, con una E / S de disco mínima que detectarían las tecnologías de detección.
  • El ransomware no necesita conectarse a un centro de comando y control para comunicarse, lo que también ayuda a mantener sus actividades bajo el radar de detección.
  • Además, LockFile cambia el nombre de los documentos cifrados a minúsculas y agrega una extensión de archivo .lockfile, y su nota de rescate HTA es muy similar a la de LockBit 2.0.

Disección 101

La investigación de Sophos se basa en una muestra de LockFile con el hash SHA-256: bf315c9c064b887ee3276e1342d43637d8c0e067260946db45942f39b970d7ce. Este archivo se puede encontrar en VirusTotal .

Si carga esta muestra en Ghidra , notará que solo tiene tres funciones y tres secciones.

Tres funciones

Tres secciones

El binario parece estar empaquetado de forma dual por UPX y mal formado para eliminar el análisis estático del software de protección de endpoints. Además, los nombres de las secciones originales se modificaron de UPX0 y UPX1 a OPEN y CLSE.

La primera sección, denominada OPEN, tiene un tamaño de 592 KB (0x94000) pero no contiene datos, solo ceros.

La segunda sección, CLSE, tiene un tamaño de 286 KB (0x43000) y las tres funciones se encuentran en la última página de esta sección. El resto de los datos es código codificado que se decodifica más tarde y se coloca en la sección 'ABRIR'.

La función entry () es simple y llama a FUN_1400d71c0 ():

Entrada simple

La función FUN_1400d71c0 () decodifica los datos de la sección CLSE y los coloca en la sección OPEN. También resuelve las DLL y funciones necesarias. Luego manipula los valores de IMAGE_SCN_CNT_UNINITIALIZED_DATA y salta al código colocado en la sección OPEN.

Analizando la sección ABIERTA

Debido a que el resto del código se descomprime en la sección OPEN, es decir, se genera en tiempo de ejecución, usamos WinDbg y .writemem para escribir la sección OPEN en el disco, por lo que podemos analizar el código estáticamente en Ghidra, por ejemplo:

.writemem c: \ [redactado] \ LockFile \ sec_open.bin lockfileexe + 1000 L94000

Después de cargar el archivo en Ghidra para su análisis, encontramos una función de inicio principal:

La función principal es la biblioteca de tiempo de ejecución de C

Esta es CRT, la biblioteca en tiempo de ejecución de C, no la función principal real que estamos buscando. Sin embargo, después de investigar, lo encontramos:

Encontrar la función principal real

Le cambiamos el nombre a main_000861 () y mantenemos la dirección a mano para poder usarla como referencia al depurar en WinDbg.

La primera parte inicializa una biblioteca de cifrado:

Inicializando la biblioteca criptográfica

Encontramos cadenas en el código, como 'Los algoritmos criptográficos se deshabilitan después' que también se utilizan en esta biblioteca Crypto ++ disponible de forma gratuita en GitHub, por lo que es seguro asumir que LockFile ransomware aprovecha esta biblioteca para sus funciones de cifrado.

Luego crea un mutex para evitar que el ransomware se ejecute dos veces al mismo tiempo:

Creando mutex

Terminación de procesos comerciales críticos

Luego se decodifica una cadena, que es un parámetro para la llamada al sistema () en la línea 161.

Cadena codificada que contiene una lista de los procesos críticos para la empresa que deben terminarse

La cadena es un parámetro para la llamada system () en la línea 161. Esto termina todos los procesos con vmwp en su nombre. Para hacer esto, se aprovecha la herramienta de línea de comandos de la Interfaz de administración de Windows (WMI) WMIC.EXE, que es parte de cada instalación de Windows. Esta acción se repite para otros procesos comerciales críticos asociados con el software de virtualización y las bases de datos:

 
Proceso Mando
Máquinas virtuales Hyper-V proceso wmic donde termina la llamada "nombre como '% vmwp%'"
Administrador de Oracle VM Virtual Box proceso wmic donde termina la llamada "nombre como '% virtualbox%'"
Servicios de Oracle VM Virtual Box proceso wmic donde termina la llamada "nombre como '% vbox%'"
Microsoft SQL Server, también utilizado por SharePoint, Exchange proceso wmic donde termina la llamada "nombre como '% sqlservr%'"
Base de datos MySQL proceso wmic donde termina la llamada "nombre como '% mysqld%'"
Servicio de recuperación de Oracle MTS proceso wmic donde termina la llamada "nombre como '% omtsreco%'"
Kernel de Oracle RDBMS proceso wmic donde termina la llamada "nombre como '% oracle%'"
Oyente de Oracle TNS proceso wmic donde termina la llamada "nombre como '% tnslsnr%'"
Máquinas virtuales VMware proceso wmic donde termina la llamada "nombre como '% vmware%'"

 

Al aprovechar WMI, el ransomware en sí no se asocia directamente con la terminación abrupta de estos procesos críticos comerciales típicos. La finalización de estos procesos garantizará que se libere cualquier bloqueo en los archivos / bases de datos asociados, de modo que estos objetos estén listos para el cifrado malicioso.

El código continúa recuperando todas las letras de unidad con GetLogicalDriveString () en la línea 692 y las recorre en iteración.

 

LockFile crea otro hilo para cada unidad

En el bucle, determina el tipo de unidad a través de GetDriveType (). Cuando se trata de un disco fijo (tipo tres = DRIVE_FIXED en la línea 703), genera un nuevo hilo (en las líneas 705, 706), con la función 0x7f00 como dirección de inicio.

 

La nota de rescate es una aplicación HTML

La función en 0x7f00 primero crea la nota de rescate HTA, por ejemplo, 'LOCKFILE-README- [hostname] - [id] .hta' en la raíz de la unidad. En lugar de dejar caer una nota en formato TXT, LockFile formatea su nota de rescate como un archivo de aplicación HTML (HTA). Curiosamente, la nota de rescate de HTA utilizada por LockFile se parece mucho a la utilizada por el ransomware LockBit 2.0:

 

La nota de rescate de LockFile se parece mucho a ...

 

 

... la nota de rescate de LockBit

 

En su nota de rescate, el adversario de LockFile pide a las víctimas que se pongan en contacto con una dirección de correo electrónico específica: Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. . El nombre de dominio utilizado, 'contipauper.com' parece ser una referencia despectiva a un grupo de ransomware competidor llamado Conti . El nombre de dominio parece haber sido creado el 16 de agosto de 2021.

 

Encriptar directorios

Luego, se llama a EncryptDir_00007820 () en la línea seis. La primera parte de la función de cifrar directorio no es muy notable:

 

Función en 0x7f00

Pero la segunda parte es:

El ransomware usa FindFirstFile () en la línea 63 y FindNextFile () en la línea 129 para recorrer en iteración el directorio en param_1.

 

En la primera parte (líneas 66-91), comprueba si el nombre del archivo no contiene:

  • ".Lockfile"
  • "\ Windows"
  • "LOCKFILE"
  • "NTUSER"

Luego, recorre dos listas de extensiones de tipo de archivo conocidas de documentos que no ataca (líneas 92-102).

Lista 1:

.a3l .a3m .a4l .a4p .a5l .abk .abs .acp .ada .adb .add .adf .adi .adm .adp .adr .ads .af2 .afm .aif .aifc .aiff .aim .ais .akw .alaw .tlog .vsix .pch .json .nupkg .pdb .ipdb .alb .todos los .ams .anc .ani .ans .api .aps .arc .ari .arj .art .asa .asc .asd .ase .asf .xaml .aso .asp .ast .asv .asx .ico .rll .ado .jsonlz4 .cat .gds .atw .avb .avi .avr .avs .awd .awr .axx .bas .bdf .bgl .bif .biff .bks .bmi .bmk .book .box .bpl .bqy .brx .bs1 .bsc .bsp .btm .bud .bun .bw .bwv .byu .c0l .cal .cam .cap .cas .cat .cca .ccb .cch .ccm .cco .cct .cda .cdf .cdi .cdm .cdt .cdx .cel .cfb .cfg .cfm .cgi .cgm .chk .chp .chr .cht .cif .cil .cim .cin .ck1 .ck2 .ck3 .ck4 .ck5 .ck6 .clase .cll .clp .cls .cmd .cmf .cmg .cmp .cmv .cmx .cnf .cnm .cnq .cnt .cob .cpd .cpi .cpl .cpo .cpr .cpx .crd .crp .csc .csp .css .ctl .cue .cur .cut .cwk .cws .cxt .d64 .dbc .dbx .dc5 .dcm.dcr .dcs .dct .dcu .dcx .ddf .ddif .def .defi .dem .der .dewf .dib .dic .dif .dig .dir .diz .dlg .dll .dls .dmd .dmf .dpl .dpr. drv .drw .dsf .dsg .dsm .dsp .dsq .dst .dsw .dta .dtf .dtm .dun .dwd .dwg .dxf .dxr .eda .edd .ede .edk .edq .eds .edv .efa. efe .efk .efq .efs .efv .emd .emf .eml .enc .enff .ephtml .eps .epsf .epx .eri .err .esps .eui .evy .ewl .exc .exe .f2r .f3r .f77. f90 .far .fav .fax .fbk .fcd .fdb .fdf .fft .fif .fig .adapta .fla .flc .flf .flt .fmb .fml .fmt .fnd .fng .fnk .fog .fon .for. fot .fp1 .fp3 .fpt .frt .frx .fsf .fsl .fsm .ftg .fts .fw2 .fw3 .fw4 .fxp .fzb .fzf .fzv .gal .gdb .gdm .ged .gen .getright .gfc. gfi .gfx .gho .gid .gif .gim .gix .gkh .gks .gna .gnt .gnx .gra .grd .grf .grp .gsm .gt2 .gtk .gwx .gwz .hcm .hcom .hcr .hdf. hed .hel .hex .hgl .hlp .hog .hpj .hpp .hqx .hst .htt .htx .hxm .ica .icb .icc .icl .icm.idb .idd .idf .idq .idx .iff .igf .iif .ima .imz .inc .inf .ini .ins .int .iso .isp .ist .isu .its .ivd .ivp .ivt .ivx .iwc. j62 .java .jbf .jmp .jn1 .jtf .k25 .kar .kdc .key .kfx .kiz .kkw .kmp .kqp .kr1 .krz .ksf .lab .ldb .ldl .leg .les .lft .lgo. lha .lib .lin .lis .lnk .log .llx .lpd .lrc .lsl .lsp .lst .lwlo .lwob .lwp .lwsc .lyr .lzh .lzs .m1v .m3d .m3u .mac .magic .mak. mam .man .map .maq .mar .mas .mat .maud .maz .mb1 .mbox .mbx .mcc .mcp .mcr .mcw .mda .mdb .mde .mdl .mdn .mdw .mdz .med .mer. se reunió .mfg .mgf .mic .mid .mif .miff .mim .mli .mmf .mmg .mmm .mmp .mn2 .mnd .mng .mnt .mnu .mod .mov .mp2 .mpa .mpe .mpp .mpr. mri .msa .msdl .msg .msn .msp .mst .mtm .mul .mus .mus10 .mvb .nan .nap .ncb .ncd .ncf .ndo .nff .nft .nil .nist .nlb .nlm .nls. nlu .nod .ns2 .nsf .nso .nst .ntf .ntx .nwc .nws .o01 .obd .obj .obz .ocx .ods .off .ofn .oft.okt .olb .ole .oogl .opl .opo .opt .opx .or2 .or3 .ora .orc .org .oss .ost .otl .out .p10 .p3 .p65 .p7c .pab .pac .pak .pal. parte .pas .pat .pbd .pbf .pbk .pbl .pbm .pbr .pcd .pce .pcl .pcm .pcp .pcs ​​.pct .pcx .pdb .pdd .pdp .pdq .pds .pf .pfa .pfb. pfc .pfm .pgd .pgl .pgm .pgp .pict .pif .pin .pix .pjx .pkg .pkr .plg .pli .plm .pls .plt .pm5 .pm6 .pog .pol .pop .pot .pov. pp4 .ppa .ppf .ppm .ppp .pqi .prc .pre .prf .prj .prn .prp .prs .prt .prv .psb .psi .psm .psp .ptd .ptm .pwl .pwp .pwz .qad. qbw .qd3d .qdt .qfl .qic .qif .qlb .qry .qst .qti .qtp .qts .qtx .qxd .ram .ras .rbh .rcc .rdf .rdl .rec .reg .rep .res .rft. rgb .rmd .rmf .rmi .rom .rov .rpm .rpt .rrs .rsl .rsm .rtk .rtm .rts .rul .rvp .s3i .s3m .sam .sav .sbk .sbl .sc2 .sc3 .scc. scd .scf .sci .scn .scp .scr .sct01 .scv .sd2 .sdf .sdk .sdl .sdr .sds .sdt .sdv .sdw .sdx .sea .sep .ses.sf .sf2 .sfd .sfi .sfr .sfw .shw .sig .sit .siz .ska .skl .slb .sld .slk .sm3 .smp .snd .sndr .sndt .sou .spd .spl .sqc .sqr. ssd .ssf .st .stl .stm .str .sty .svx .swa .swf .swp .sys .syw .t2t .t64 .taz .tbk .tcl .tdb .tex .tga .tgz .tig .tlb .tle. tmp .toc .tol .tos .tpl .tpp .trk .trm .trn .ttf .tz .uwf .v8 .vap .vbp .vbw .vbx .vce .vcf .vct .vda .vi .viff .vir .viv. vqe .vqf .vrf .vrml .vsd .vsl .vsn .vst .vsw .vxd .wcm .wdb .wdg .web .wfb .wfd .wfm .wfn .xml .acc .adt .adts .avi .bat .bmp. cab .cpl .dll .exe .flv .gif .ini .iso .jpeg .jpg .m4a .mov .mp3 .mp4 .mpeg .msi .mui .php .png .sys .wmv .xmltmp .toc .tol .tos .tpl .tpp .trk .trm .trn .ttf .tz .uwf .v8 .vap .vbp .vbw .vbx .vce .vcf .vct .vda .vi .viff .vir .viv. vqe .vqf .vrf .vrml .vsd .vsl .vsn .vst .vsw .vxd .wcm .wdb .wdg .web .wfb .wfd .wfm .wfn .xml .acc .adt .adts .avi .bat .bmp. cab .cpl .dll .exe .flv .gif .ini .iso .jpeg .jpg .m4a .mov .mp3 .mp4 .mpeg .msi .mui .php .png .sys .wmv .xmltmp .toc .tol .tos .tpl .tpp .trk .trm .trn .ttf .tz .uwf .v8 .vap .vbp .vbw .vbx .vce .vcf .vct .vda .vi .viff .vir .viv. vqe .vqf .vrf .vrml .vsd .vsl .vsn .vst .vsw .vxd .wcm .wdb .wdg .web .wfb .wfd .wfm .wfn .xml .acc .adt .adts .avi .bat .bmp. cab .cpl .dll .exe .flv .gif .ini .iso .jpeg .jpg .m4a .mov .mp3 .mp4 .mpeg .msi .mui .php .png .sys .wmv .xml

 

Lista 2:

.acc .adt .adts .avi .bat .bmp .cab .cpl .dll .exe .flv .gif .ini .iso .jpeg .jpg .m4a .mov .mp3 .mp4 .mpeg .msi .mui .php

 

Nota: Curiosamente, este ransomware no ataca los archivos de imagen JPG, como las fotos.

Si la extensión del archivo de un documento encontrado no está en la lista, el código concatena el nombre del archivo y la ruta (línea 103) y llama a EncryptFile_00007360 () para cifrar el documento.

La función EncryptFile_00007360 () cifra el documento a través de E / S mapeadas en memoria:

 

Cifrar un documento a través de E / S mapeadas en memoria

El documento se abre primero en la línea 164 y en la línea 177 la función CreateFileMapping () asigna el documento a la memoria. En la línea 181, lVar17 apunta al documento ahora mapeado en memoria.

El código continúa agregando el blob de descifrado al final del documento en la memoria. Aquí hay un ejemplo de un documento de prueba que comprende el carácter 'a' (0x61), 128 veces:

 

Documento de prueba que consta de 128 veces el carácter 'a' (0x61)

Después de agregar el blob de descifrado, el documento mapeado en memoria ahora se ve así:

 

El blob de descifrado se adjunta al documento de prueba mapeado en memoria

Más adelante, el documento se cifra, 16 bytes a la vez, a través de la función EncryptBuffer_0002cbf4 () en la línea 271:

 

Cifrado intermitente de 16 bytes

EncryptBuffer_0002cbf4 () cifra 16 bytes en el búfer recibido lVar15. Se establece en lVar7 en la línea 268, que apunta al documento mapeado en memoria.

Curiosamente, luego agrega 0x20 (32 bytes) a lVar15, omitiendo 16 bytes. Esto hace que el cifrado sea intermitente:

 

El documento de prueba mapeado en memoria después de una pasada
El documento de prueba mapeado en memoria después de una segunda pasada
El documento de prueba mapeado en memoria después de que se procesaron todos los bytes
Una imagen animada que compara un documento original con la salida encriptada intermitentemente de LockFile.

 

La característica notable de este ransomware no es el hecho de que implementa un cifrado parcial. LockBit 2.0, DarkSide y BlackMatter ransomware , por ejemplo, son conocidos por encriptar solo una parte de los documentos que atacan (en su caso, los primeros 4.096 bytes, 512 KB y 1 MB respectivamente) solo para terminar la etapa de encriptación del ataque más rápido. .

Lo que distingue a LockFile es que no cifra los primeros bloques. En cambio, LockFile cifra cada 16 bytes restantes de un documento. Esto significa que un documento de texto, por ejemplo, permanece parcialmente legible.

Hay una ventaja intrigante al adoptar este enfoque: el cifrado intermitente sesga el análisis estadístico y confunde algunas tecnologías de protección.

Evadir la protección contra ransomware sesgando el análisis estadístico

El enfoque de cifrado intermitente adoptado por LockFile sesga el análisis, como el chi-cuadrado (chi ^ 2) utilizado por algunos programas de protección contra ransomware.

Un archivo de texto sin cifrar de 481 KB (digamos, un libro) tiene una puntuación chi ^ 2 de 3850061. Si el documento fue cifrado por el ransomware DarkSide , tendría una puntuación chi ^ 2 de 334, lo que es una clara indicación de que el documento ha sido cifrado. Si el mismo documento está encriptado por el ransomware LockFile, aún tendría una puntuación chi ^ 2 significativamente alta de 1789811.

Las siguientes representaciones gráficas (distribución de bytes / caracteres) muestran el mismo documento de texto cifrado por DarkSide y LockFile.

 

 
Documento de texto original Documento de texto cifrado por DarkSide Documento de texto cifrado por LockFile

 

Como puede ver, la representación gráfica del documento de texto cifrado por LockFile es muy similar al original. Este truco tendrá éxito contra el software de protección contra ransomware que realiza una inspección de contenido con análisis estadístico para detectar el cifrado.

No hemos visto antes el cifrado intermitente en ataques de ransomware.

 

Conservación del documento cifrado en el disco

Después del cifrado, el documento se cierra (línea 279-281) y el archivo se mueve (cambia de nombre):

 


La cadena '% s.lockfile se decodifica (en las líneas 284-298) y luego se pasa a la función sprintf () en la línea 300 para agregar' .lockfile 'al nombre del archivo. I

 

En la línea 301, el nombre de archivo original se cambia por el nuevo nombre de archivo. Curiosamente, el nombre del archivo se cambia a minúsculas y es poco probable que un descifrador LockFile pueda restaurar el nombre del archivo a su estado original, es decir, las mayúsculas en el nombre del archivo se pierden para siempre.

Dado que el ataque aprovecha CreateFileMapping (), el proceso del sistema de Windows, PID 4, escribe (conserva) el documento encriptado mapeado en memoria en el disco. Esto se puede comprobar mediante Sysinternals Process Monitor. En la siguiente figura, eliminamos el filtro Monitor de proceso que excluye la actividad del proceso del sistema (PID 4):

 

Al aprovechar las E / S asignadas en memoria, el ransomware puede acceder más rápidamente a los documentos que se almacenaron en caché y permitir que el proceso del sistema de Windows realice la acción de escritura. Al permitir que el proceso del sistema realice la operación WriteFile, el propio sistema operativo escribe los bytes cifrados reales, separados del proceso malicioso real.

 

En el ejemplo anterior, esto ocurre seis segundos después de que el ransomware encripta el documento, pero en sistemas grandes este retraso puede extenderse a minutos. Este truco por sí solo puede tener éxito en eludir la detección mediante algunas soluciones anti-ransomware basadas en el comportamiento.

El uso de E / S mapeadas en memoria no es común entre las familias de ransomware, aunque fue utilizado por el ransomware Maze y por el ransomware WastedLocker (visto con menos frecuencia).

 

No hay ransomware para eliminar

Una vez que ha cifrado todos los documentos en la máquina, el ransomware se borra con el siguiente comando:

cmd / c ping 127.0.0.1 -n 5 && del “C: \ Users \ Mark \ Desktop \ LockFile.exe” && salir

El comando PING envía cinco mensajes ICMP al host local (es decir, a sí mismo), y esto simplemente tiene la intención de ser una suspensión de cinco segundos para permitir que el proceso de ransomware se cierre antes de ejecutar el comando DEL para eliminar el binario de ransomware.

Esto significa que después del ataque de ransomware, no hay binario de ransomware para que los respondedores de incidentes o el software antivirus lo encuentren o limpien.

Nota: Como la mayoría de ransomware operado por humanos en la actualidad, LockFile ransomware no necesita ponerse en contacto con un servidor de comando y control (C2) en Internet para operar. Esto significa que puede cifrar datos en máquinas que no tienen acceso a Internet.


Fuente: News.sophos.com

 

Dirección

 Calle 67 # 8-16. Oficina 304

Bogotá, D.C. 110231

Colombia

Contacto

 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

 +57 (601) 794-5739 Ext 2001

  +57 315 860-7000