Resultados clave:
- Sin ninguna actualización, los clientes de SentinelOne están protegidos de SUNBURST ; Además, a nuestros clientes se les han suministrado paquetes de caza en el producto a medida para la observación de artefactos en tiempo real.
- El malware implementado a través de la plataforma SolarWinds Orion espera 12 días antes de ejecutarse. Este fenómeno común es un excelente ejemplo de por qué la retención prolongada de datos de EDR es fundamental.
- Después del período inactivo de 12 días, el código malicioso de SUNBURST busca procesos, servicios y controladores. Puede encontrar cada lista al final de esta investigación.
- Lista de procesos: incluye principalmente herramientas de monitoreo como Sysinternals y herramientas para investigadores. Si se ven, SUNBURST sale y no se ejecuta.
- Lista de servicios: incluye productos de seguridad que tienen débiles medidas anti-manipulación. SUNBURST va al registro e intenta desactivarlos. La puerta trasera puede haber pasado por alto estos productos, o al menos haberlo intentado. SentinelOne no está en esta lista, e incluso si lo estuviera, la capacidad anti-manipulación de SentinelOne protege de tales intentos (sin necesidad de ninguna configuración especial).
- Lista de controladores: la tercera lista es más corta e incluye una lista de controladores; entre ellos se encuentra SentinelOne. Cuando SUNBURST ve los controladores, sale antes de iniciar cualquier comunicación C2 o habilitar cargas útiles adicionales.
El siguiente análisis demuestra los hallazgos clave anteriores.
SUNBURST inverso
La funcionalidad interesante reside dentro de los métodos UpdateNotification()
y Update()
; más específicamente, la verdadera carga útil se encuentra dentro de un while()
ciclo importante .

El TrackProcesses()
método (llamado por Update
y UpdateNotification
) es responsable de consultar los procesos en ejecución en la máquina de la víctima para encontrar los nombres de procesos, servicios y controladores de interés. Esta rutina obtendrá una lista de objetos de proceso en ejecución y luego la pasará a los tres métodos siguientes para identificar procesos / servicios en la lista negra. Estos métodos devolverán el valor verdadero si se encuentra un proceso / servicio en la lista negra, lo que provocará que el malware salga del Update()
ciclo.

El hash de cada nombre de proceso se calcula y luego se compara con una lista negra de hashes codificados. Si el hash calculado está presente en la lista negra, este método devolverá verdadero.

En el SearchServices()
método, el malware aprovecha la misma técnica de hash para identificar los servicios de interés, luego intenta deshabilitar manualmente el servicio modificando su clave de registro.

A continuación, SetValue()
se utiliza el método con el argumento 4 para la Start
entrada, deshabilitando así el servicio a través del registro.

Para asegurarse de que esto funcione según lo previsto, el malware intenta apropiarse de la clave de registro antes de deshabilitar el servicio.

Por último, SearchConfigurations()
se utiliza para identificar los controladores incluidos en la lista negra. Esto se realiza a través de la consulta WMI Select * From Win32_SystemDriver
, que se oculta en la captura de pantalla siguiente como C07NSU0uUdBScCvKz1UIz8wzNooPriwuSc11KcosSy0CAA ==. El nombre de archivo se obtiene para cada controlador, y si este controlador se encuentra en la lista negra, este método devolverá verdadero. Como se mencionó anteriormente, devolver verdadero hace que el malware salga del bucle Update () antes de iniciar el verdadero código de puerta trasera. Nuestro controlador SentinelMonitor.sys
está codificado en la lista negra, lo que significa que el malware no ejecutará completamente su carga útil en los puntos finales protegidos por SentinelOne mientras nuestro controlador esté cargado.

Si se pasa esta verificación de la lista negra, solo entonces se inicia el código de puerta trasera. La primera acción interesante que realiza el código de puerta trasera es llamar a C2 para recibir instrucciones / comandos que se analizarán y pasarán al motor de trabajo. Esta llamada C2 es a una URL generada en tiempo de ejecución por la DGA del malware, que terminará siendo un subdominio de avsvmcloud [.] Com. No hemos observado endpoints monitoreados por SentinelOne llamando a ningún subdominio de * .avsvmcloud [.] Com.
Durante la investigación, extrajimos todos los hash del malware y luego calculamos los componentes de nuestro agente que se encuentran en C: \ Archivos de programa \ SentinelOne \ * para que coincidan. El único hash relacionado con SentinelOne que se encontró fue el nombre del controlador que compartió FireEye.
Recorte de hashes codificados extraídos del malware:

Función hash extraída del malware:

Resultados de la herramienta:
> .\fnva_hash_s1.exe
12343334044036541897 matched --> SentinelMonitor.sys
Lista de procesos: salidas de SunBurst
apimonitor-x64
apimonitor-x86
autopsy64
autopsy
autoruns64
autoruns
autorunsc64
autorunsc
binaryninja
blacklight
cff
cutter
de4dot
debugview
diskmon
dnsd
dnspy
dotpeek32
dotpeek64
dumpcap
evidence
exeinfope
fakedns
fakenet
ffdec
fiddler
fileinsight
floss
gdb
*NO MATCH*
hiew32
*NO MATCH*
idaq64
idaq
idr
ildasm
ilspy
jd-gui
lordpe
officemalscanner
ollydbg
pdfstreamdumper
pe-bear
pebrowse64
peid
pe-sieve32
pe-sieve64
pestudio
peview
pexplorer
ppee
ppee
procdump64
procdump
processhacker
procexp64
procexp
procmon
prodiscoverbasic
py2exedecompiler
r2agent
rabin2
radare2
ramcapture64
ramcapture
reflector
regmon
resourcehacker
retdec-ar-extractor
retdec-bin2llvmir
retdec-bin2pat
retdec-config
retdec-fileinfo
retdec-getsig
retdec-idr2pat
retdec-llvmir2hll
retdec-macho-extractor
retdec-pat2yara
retdec-stacofin
retdec-unpacker
retdec-yarac
rundotnetdll
sbiesvc
scdbg
scylla_x64
scylla_x86
shellcode_launcher
solarwindsdiagnostics
sysmon64
sysmon
task
task
tcpdump
tcpvcon
tcpview
vboxservice
win32_remote
win64_remotex64
windbg
windump
winhex64
winhex
winobj
wireshark
x32dbg
x64dbg
xwforensics64
xwforensics
redcloak
avgsvc
avgui
avgsvca
avgidsagent
avgsvcx
avgwdsvcx
avgadminclientservice
afwserv
avastui
avastsvc
aswidsagent
aswidsagenta
aswengsrv
avastavwrapper
bccavsvc
psanhost
psuaservice
psuamain
avp
avpui
ksde
ksdeui
tanium
taniumclient
taniumdetectengine
taniumendpointindex
taniumtracecli
taniumtracewebsocketclient64
Lista de servicios: SunBurst intenta evitar
apimonitor-x64
apimonitor-x86
autopsy64
autopsy
autoruns64
autoruns
fsgk32st
fswebuid
fsgk32
fsma32
fssm32
fnrb32
fsaua
fsorsp
fsav32
ekrn
eguiproxy
egui
xagt
xagtnotif
csfalconservice
csfalconcontainer
cavp
cb
mssense
msmpeng
windefend
sense
carbonblack
carbonblackk
cbcomms
cbstream
csagent
csfalconservice
xagt
fe_avk
fekern
feelam
eamonm
eelam
ehdrv
ekrn
ekrnepfw
epfwwfp
ekbdflt
epfw
fsaua
fsma
fsbts
fsni
fsvista
fses
fsfw
fsdfw
fsaus
fsms
fsdevcon
Lista de controladores: salidas SunBurst
cybkerneltracker.sys
atrsdfw.sys
eaw.sys
rvsavd.sys
dgdmk.sys
sentinelmonitor.sys
hexisfsmonitor.sys
groundling32.sys
groundling64.sys
safe-agent.sys
crexecprev.sys
psepfilter.sys
cve.sys
brfilter.sys
brcow_x_x_x_x.sys
lragentmf.sys
libwamf.sys
IOC / caza:
- Busque la presencia de la clase Injected de DLL armada en la clase OrionImprovementBusinessLayer en el espacio de nombres SolarWinds.Orion.Core.BusinessLayer : indica ensamblado .NET armado / DLL
- Nombre de canalización con nombre codificado 583da945-62af-10e8-4902-a8f205c72b2e: no indica que se inició el código de puerta trasera, pero es la primera acción que se realiza después del período inactivo de 12 a 14 días.
- Revise los registros de proxy / puerta de enlace web para el tráfico a los subdominios de este dominio. Esto indica que efectivamente se ejecutó el código de la puerta trasera – avsvmcloud [.] Com
- Ejecutado durante la rutina de verificación de la lista negra en el contexto del proceso
businesslayerhost.exe
:Select * From Win32_SystemDriver
–WMI query to identify blacklisted drivers