blank

blank

Durante um recente caso de resposta a um incidente de malware, a Trustwaves encontrou uma peça interessante de ransomware que atende pelo nome de BlackByte. A Trustwaves achou que este ransomware não era apenas interessante, mas também bastante estranho: igual a outras variantes de ransomware notórias como REvil, o BlackByte também evita sistemas com idiomas russo e da ex-URSS. Possui uma funcionalidade de worm semelhante ao RYUK ransomware. Ele cria um pacote mágico wake-on-LAN e o envia ao host de destino – certificando-se de que eles estejam vivos ao infectá-los. O autor hospedou a chave de criptografia em um servidor HTTP remoto e em um arquivo oculto com extensão .PNG. O autor deixa o programa travar se não conseguir baixar a chave de criptografia. A chave pública RSA embutida no corpo é usada apenas uma vez, para criptografar a chave bruta a ser exibida na nota de resgate.

TAG: BlackByteRansomwareiniciador JScript
ADVERSÁRIO: BlackByte
FAMÍLIA DE MALWARE: BlackByte
ATT&CK IDS: T1140 – Desofuscar / decodificar arquivos ou informaçõesT1573 – Canal criptografadoT1027 – Arquivos ou informações ofuscadosT1083 – Detecção de arquivos e diretóriosT1471 – Dados criptografados para impactoT1059 – Intérprete de comandos e scriptsT1562.001 – Desativar ou modificar ferramentasT1112 – Modificar RegistroT1053 – Tarefa / Trabalho AgendadoT1490 – Inibe a recuperação do sistema

 

Introdução

Durante um recente caso de resposta a um incidente de malware, encontramos uma peça interessante de ransomware que atende pelo nome de BlackByte.

Achamos que este ransomware não era apenas interessante, mas também bastante estranho:

  1. Assim como outras variantes de ransomware notórias como REvil, o BlackByte também evita sistemas com idiomas russo e da ex-URSS.
  2. Possui uma funcionalidade de worm semelhante ao RYUK ransomware.
  3. Ele cria um pacote mágico wake-on-LAN e o envia ao host de destino – certificando-se de que eles estejam vivos ao infectá-los.
  4. O autor hospedou a chave de criptografia em um servidor HTTP remoto e em um arquivo oculto com extensão .PNG.
  5. O autor deixa o programa travar se não conseguir baixar a chave de criptografia.
  6. A chave pública RSA embutida no corpo é usada apenas uma vez, para criptografar a chave bruta a ser exibida na nota de resgate – é isso.
  7. O ransomware usa apenas uma chave simétrica para criptografar os arquivos.

O site de leilão que está vinculado na nota de resgate também é bastante estranho, veja abaixo. O site afirma que exfiltrou dados de suas vítimas, mas o ransomware em si não tem nenhuma funcionalidade de exfiltração. Portanto, essa reivindicação provavelmente foi projetada para assustar suas vítimas e fazê-las obedecer.

blank
Figura 1: site Onion do BlackByte

Descriptografia de arquivo

Ao contrário de outros ransomware que podem ter uma chave única em cada sessão, o BlackByte usa a mesma chave bruta (que baixa) para criptografar arquivos e usa um algoritmo de chave simétrica – AES. Para descriptografar um arquivo, basta fazer o download da chave bruta do host. Contanto que o arquivo .PNG baixado permaneça o mesmo, podemos usar a mesma chave para descriptografar os arquivos criptografados.

Então, escrevemos um descriptografador de arquivo que está disponível neste link: https://github.com/SpiderLabs/BlackByteDecryptor

O repositório GitHub também inclui o arquivo “forest.png” que contém as chaves de criptografia necessárias incorporadas a ele.

Exemplo de uso:

Descriptografando um arquivo criptografado

BlackByteDecryptor forest.png spider.png.blackbyte

Descriptografando um diretório

BlackByteDecryptor forest.png c:\temp

Isso irá descriptografar os arquivos no diretórioc:\temp directory, ou descriptografar recursivamente um diretório:

BlackByteDecryptor forest.png c:\temp -r

Launcher

A amostra inicial que analisamos pode ser encontrada neste link do VirusTotal e é um arquivo inicializador JScript. Após a inspeção, vimos que ele utiliza técnicas de ofuscação para ocultar sua natureza maliciosa. Se você quiser se aprofundar mais nos detalhes da ofuscação e como nós a desofuscamos, postamos um blog separado sobre isso. Abaixo está um diagrama de visão geral do fluxo de execução inicial.

blank
Figura 2: Fluxo de execução JScript

A principal função do Jscript ofuscado é decodificar a carga útil principal e lançá-la na memória. Abaixo está o código desofuscado e embelezado:

blank
Figura 3
blank
Figura 4. Assemblies .NET do arquivo DLL

O principal objetivo desta DLL é o seguinte:

  1. Adicione extensões de arquivo .JS e .EXE à lista de exclusão do Microsoft Defender.
  2. Evite a DLL da Microsoft Antimalware Scan Interface (AMSI) para que ela não verifique o malware carregado e alerte o usuário sobre atividades suspeitas.
  3. Verifique se as seguintes DLLs estão presentes:

– SbieDll.dll (Sandboxie)
– SxIn.dll (Qihoo360 Sandbox)
– Sf2.dll (Avast Antivirus)
– snxhk.dll (Avast)
– cmdvrt32.dll (Comodo Internet)

  1. Extraia e decodifique a carga útil principal (BlackByte ransomware) dos recursos e execute-a na memória.

Extrair a carga útil principal – BlackByte – não foi fácil, visto que o binário executável é criptografado.

blank
Figura 5. O binário Ransomware está inserido no arquivo de recurso de montagem .NET denominado GOor.PVT5.

Para tornar mais fácil e ignorar a análise da camada de criptografia e ofuscação, simplesmente deixamos o código JScript ser executado usando o comando cscript:

cscript.exe <malicious JScript launcher>

 

Então, deixamos o assembly .NET malicioso ser executado na memória. Posteriormente, despejamos todos os assemblies .NET, incluindo o executável .NET descriptografado BlackByte. Usamos uma ferramenta chamada MegaDumper para fazer isso.

blank
Figura 6. Ao despejar o CSCRIPT.EXE que executa o script malicioso, podemos despejar todos os assemblies do .NET em execução em seu espaço de memória.
blank
Figura 8: Depois de despejado, os assemblies .NET descriptografados são salvos na unidade e podemos começar a analisá-los.

BlackByte: preparando o sistema infectado

Antes de criptografar, o BlackByte primeiro prepara o sistema para que nada possa impedi-lo de sua rotina de criptografia de arquivos. Durante a inicialização, o ransomware define o valor de campos essenciais como notas de resgate, extensão do arquivo criptografado, sal criptográfico, nome do SO, entre outros. A identificação da vítima é então gerada combinando o ID do processador do sistema infectado e o número de série do volume e combinando-os com MD5. O ransomware cria um mutex denominado Global\1f07524d-fb13-4d5e-8e5c-c3373860df25 e termina se esse nome mutex já existir.

blank
Figura 8

Posteriormente, ele verifica se a localidade do idioma do sistema está em sua lista de códigos de idioma – conforme mostrado abaixo. Se o idioma padrão do sistema estiver na lista, o BlackByte será encerrado:

Código BCP 47 Língua Código da Língua
hy-AM Armênio (Armênia) 1067
az-Cyrl-AZ Azeri (cirílico) – Azerbaijão 2092
Cy-az-AZ Azeri (cirílico) – Azerbaijão
Lt-az-AZ Azeri (latino) – Azerbaijão 1068
ser-POR Bielo-russo – Bielo-Rússia 1059
kk-KZ Cazaque – Cazaquistão 1087
ky-KZ Quirguistão – Cazaquistão
ky-KZ Quirguistão – Cazaquistão
tt-RU Tatar – Rússia
ba-RU Bashkir (Rússia)
sah-RU Sakha (Rússia)
ru-RU Russo (Rússia) 1049
tg-Cyrl-TJ Tadjique (cirílico, Tadjiquistão) 1064
uz-Cyrl-UZ Uzbeque (cirílico, Uzbequistão) 2115
Usbeque (latino) 1091
uk-UA Ucraniano (Ucrânia) 1058
ka-GE Georgiano (Geórgia) 1079
Turcomano 1090

 

O ransomware também define sua classe de prioridade de processo acima do normal e usa a API SetThreadExecutionState para evitar que o sistema entre em hibernação. Em seguida, remove os aplicativos e encerra os processos que podem impedir a criptografia dos arquivos de destino. Abaixo estão as ações que ele realiza no sistema:

Ele enumera a chave do registro:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

 

E, em seguida, exclui as seguintes subchaves:

  1. vssadmin.exe
  2. wbadmin.exe
  3. bcdedit.exe
  4. powershell.exe
  5. diskshadow.exe
  6. net.exe
  7. taskkill.exe
  8. wmic.exe

O BlackByte termina o Raccine, um utilitário anti-ransomware, e desinstala-o do sistema infectado executando o comando:

taskill.exe /F /IM Raccine.exe
taskill.exe /F /IM RaccineSettings.exe
schtasks.exe /DELETE /TN \”Raccine Rules Updater\" /F

 

Ele também exclui todas as chaves de registro relacionadas ao Raccine, incluindo:

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Name = “Raccine Tray”
HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\Raccine

 

Ele executa uma série de comandos SC para desativar uma lista de serviços:

sc.exe config SQLTELEMETRY start = disabled
sc.exe config sc SQLTELEMETRY$ECWDB2 start = disabled
sc.exe config SQLWriter start = disabled
sc.exe config SstpSvc start = disabled
sc.exe config MBAMService start = disabled
sc.exe config wuauserv start = disabled

 

Também habilita os seguintes serviços:

Dnscache fdPHost
FDResPub SSDPSRV
upnphost RemoteRegistry

 

Ele usa a API RmShutdown do Microsoft Restart Manager para encerrar os seguintes processos:

agntsvc CNTAoSMgr dbeng50 dbsnmp encsvc
excel firefox firefoxconfig infopath isqlplussvc
mbamtray msaccess msftesql mspub mydesktopqos
mydesktopservice mysqld mysqld-nt mysqld-opt Ntrtscan
ocautoupds ocomm ocssd onenote oracle
outlook PccNTMon powerpnt sqbcoreservice sql
sqlagent sqlbrowser sqlservr sqlwriter steam
synctime tbirdconfig thebat thebat64 thunderbird
tmlisten visio winword wordpad xfssvccon
zoolz anydesk chrome opera msedge
firefox iexplore explorer winlogon SearchIndexer
wininit SearchApp SearchUI Powershell

 

Os seguintes comandos de vida off-the-land também são executados para excluir todas as cópias de sombra em todos os volumes, excluir pontos de restauração do Windows, desativar o acesso controlado à pasta, ativar a descoberta de rede, conceder a “todos” acesso total às unidades de destino, excluir a lixeira , habilite o compartilhamento de arquivos e impressoras e habilite o protocolo SMB1.

vssadmin.exe resize shadowstorage /for=c: /on=c: /maxsize=401MB
vssadmin.exe resize shadowstorage /for=c: /on=c: /maxsize=unbounded
vssadmin.exe resize shadowstorage /for=d: /on=d: /maxsize=401MB
vssadmin.exe resize shadowstorage /for=d: /on=d: /maxsize=unbounded
vssadmin.exe resize shadowstorage /for=e: /on=e: /maxsize=401MB
vssadmin.exe resize shadowstorage /for=e: /on=e: /maxsize=unbounded
vssadmin.exe resize shadowstorage /for=f: /on=f: /maxsize=401MB
vssadmin.exe resize shadowstorage /for=f: /on=f: /maxsize=unbounded
vssadmin.exe resize shadowstorage /for=g: /on=g: /maxsize=401MB
vssadmin.exe vssadmin.exe resize shadowstorage /for=g: /on=g: /maxsize=unbounded
vssadmin.exe resize shadowstorage /for=h: /on=h: /maxsize=401MB
vssadmin.exe resize shadowstorage /for=h: /on=h: /maxsize=unbounded
vssadmin.exe Delete Shadows /all /quiet
powershell.exe Get-CimInstance Win32_ShadowCopy | Remove-CimInstance
powershell.exe Set-MpPreference -EnableControlledFolderAccess Disabled
cmd.exe /c rd /s /q %SYSTEMDRIVE%\\$Recycle.bin
cmd.exe /c rd /s /q D:\\$Recycle.bin
netsh advfirewall firewall set rule group=”Network Discovery” new enable=Yes
netsh advfirewall firewall set rule group=”File and Printer Sharing” new enable=Yes
powershell.exe Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
icacls.exe" "<DRIVE LETTER>:*" /grant Everyone:F /T /C /Q

 

O ransomware define as seguintes configurações de registro para elevar o privilégio local, conectar unidades mapeadas, habilitar caminhos longos:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

LocalAccountTokenFilterPolicy = REG_DWORD:1

EnableLinkedConnections = REG_DWORD:1

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem

LongPathsEnabled = REG_DWORD:1

 

O BlackByte usa o comando mountvol.exe para montar nomes de volume e aproveitar a ferramenta Lista de Controle de Acesso Discricionário da Microsoft – icacls.exe para conceder ao grupo “Todos” acesso total à raiz da unidade.

C:\Windows\System32\icacls.exe” “{DRIVE LETTER}:*” /grant Everyone:F /T /C /Q

BlackByte: Worm

Este ransomware também possui um recurso de worm. Ele primeiro verifica se o arquivo %AppData%\<Generated Victim ID> existe. Se este arquivo não existir, significa que o ransomware ainda não infectou a rede.

blank
Figura 9: Depois de despejado, os assemblies .NET descriptografados são salvos na unidade e podemos começar a analisá-los.

Quando a função worm é chamada, ela inicialmente dorme por 10 segundos e depois consulta pelo menos 1.000 nomes de host no domínio a partir do diretório ativo.

blank
Figura 10: Para obter todos os nomes de computador na rede, o BlackByte tenta recuperar o defaultNamingContext do RootDSE do servidor Active Directory e, em seguida, filtra objetos no Active Directory identificando-se como computador e buscando um limite de até 1.000 registros.

Ele enumera o registro retornado de nomes de host, envia um  pacote mágico wake-on-lan e, em seguida, efetua ping nos hosts de destino, certificando-se de que estejam ativos. Abaixo está a rotina do worm e o fluxo de execução:

blank
Figura 11: Fluxo de execução de rotina do worm

O BlackByte então começa a infectar o host copiando a si mesmo para o caminho <hostname>\c$\Users\Public\obamka.js (se tiver direitos de administrador) ou <hostname>\Users\Public\obamka.js  e, em seguida, cria um tarefa agendada no host remoto para executar o arquivo.

schtasks.exe <remotehost> /TN joke /TR \"wscript.exe C:\\Users\\Public\\obamka.js\" /sc once /st 00:00 /RL HIGHEST
schtasks.exe /S <remotehost> /Run /TN joke

 

O BlackByte então cria um arquivo de marcador de infecção no host de destino no caminho  c:\Users\Public\blockator.

BlackByte: Encryption Routine

O que achamos interessante sobre este ransomware, é que ele inicialmente baixa um arquivo .PNG do link hxxp://45.9.148.114/forest.png que contém uma chave para ser usada posteriormente para criptografar os arquivos. Se o ransomware não conseguir baixar a chave, ele travará e evitará que o sistema infectado obtenha seus arquivos criptografados.

blank
Figura 12: Erro de exceção fatal quando o ransomware falha ao baixar o arquivo .png

O arquivo baixado não é realmente um arquivo de imagem PNG, em vez disso:

  • Os primeiros 40 bytes são a chave bruta usada para criptografar os arquivos do usuário, isso é criptografado com 3DES.
  • Os últimos 32 bytes contêm a chave 3DES usada para descriptografar a primeira chave bruta de 40 bytes.
  • A chave bruta então passa por uma função de derivação PBKDF2 para derivar a chave AES de 128 bits e o vetor de inicialização para o algoritmo AES usado para criptografar os arquivos do usuário.
  • Essa chave bruta também é criptografada novamente usando RSA com uma chave pública embutida no módulo e exibida na nota de resgate.
  • O invasor pode descriptografar essa chave usando sua chave privada, mas essa chave é a mesma – desde que o usuário sempre obtenha o mesmo arquivo “forest.png”. Presumivelmente, o arquivo forest.png é substituído periodicamente.

Os primeiros 40 bytes do arquivo PNG são uma chave (criptografada em TripleDES) usada posteriormente para a criptografia do arquivo do ransomware.

blank
Figura 13: chave criptografada TripleDES nos primeiros 40 bytes do arquivo

A chave TripleDES para descriptografar a chave é encontrada nos últimos 32 bytes do arquivo PNG.

blank
Figura 14: Os últimos 32 bytes do arquivo PNG, conforme destacado, são a CHAVE para descriptografar a chave criptografada TripleDES

Abaixo está a chave bruta descriptografada:

=hQ;d’%44eLHt!W8AU9y?(FO:<swB[F#<F

Essa chave bruta é então criptografada novamente com RSA usando uma chave pública embutida no módulo (mostrado abaixo) e, depois da criptografia, a chave é codificada com Base64.

</RSAKeyValue>
<Modulus>
wKUX7pbo9XM/Z2gWbVADG8yV7ZklXOSRPv/KvtJHLIBUPvNWgjmKeiIgT3f5h
CxaxqUzCi0QrrIhVIzA0WM+mPY9CLfIFLhq90v8H/+VezQtqeajO5J4ilDbqut9GH3x0ojVjC
tF4/Q1Mxk125Af3D8IZQnXAw5uQ/uGXqP8e3E=
</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>

 

A chave bruta criptografada é substituída no marcador de chave da nota de resgate, onde é exibida.

blank
Figura 15: Ransomnote

Depois de baixar e descriptografar a chave bruta, ele derivará a chave bruta usando a implementação Rfc2898DeriveBytes com a matriz de bytes salt {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08} e com 1000 iterações

blank
Figura 16: Função de derivação chave

O gráfico abaixo ajudará a visualizar a rotina de criptografia:

blank
Figura 17: Rotina de criptografia

O ransomware começará a enumerar as unidades (excluindo a unidade de CD-ROM) e as adicionará a uma lista. Ele garante que tem controle total das unidades de destino, alterando seu controle de acesso para total.

Depois de reunir todas as unidades (locais e remotas) e pastas compartilhadas no host remoto, o ransomware começará a percorrê-lo e procurar todos os arquivos de destino.

blank
Figura 18: rotina de travessia de arquivo BlackByte

Ele evita criptografar arquivos com um atributo de arquivo do sistema e também nomes e extensões de arquivo desta lista:

Nomes de arquivos:

obamka.js polegares.db
ntdetect.com ntuser.dat.log
bootnxt bootsect.bak
ntldr autoexec.bat
Lixeira de reciclagem iconcache.db
bootmgr bootfont.bin

 

Extensões de arquivo:

msilog registro ldf trancar tema
msi sys wpx cpl adv
msc scr chave ico dll
hta pacote de mesa nenhuma mídia msu rtp
msp idx ani 386 diagcfg
bin mod ics com hlp
spl nls táxi Exe diagpkg
icl ocx ROM prf pacote de tema
msstyles icns mpa drv cur
diagcab cmd shs

 

Se o ransomware encontrar uma extensão de arquivo de disco rígido virtual .vhd e .vhdx, ele tentará desmontar essas unidades usando um comando do PowerShell:

powershell.exe Dismount-DiskImage -ImagePath <vhd path>

 

Um arquivo de destino a ser criptografado passa por filtragem de tamanho de arquivo:

  • Se o arquivo for maior que 150 MB
    • criptografar os primeiros 50 MB e os últimos 50 MB do arquivo
  • Se o arquivo for maior que 15 MB
    • criptografar os primeiros 5 MB e os últimos 5 MB do arquivo
  • Se o arquivo for maior que 3 MB
    • criptografar o primeiro 1 MB e o último 1 MB do arquivo
  • Se o arquivo tiver menos de 3 MB
    • criptografar todo o arquivo

Para criptografar um arquivo, ele usa o algoritmo de chave simétrica AES usando as chaves brutas derivadas do RFC2898 do arquivo .png.

Abaixo está o trecho de código da rotina de criptografia de arquivo.

blank
Figura 19: rotina de criptografia do BlackByte

Em BlackByte Ransomware – Parte 2 , mostraremos como desofuscamos o iniciador JScript, descompilamos o código do ransomware e analisamos mais de seu funcionamento interno.

IOCs

Nome do arquivo Descrição SHA256
Obamka.js Lançador Jscript 884e96a75dc568075e845ccac2d4b4ccec68017e6ef258c7c03da8c88a597534
forest.png Arquivo de chave 9bff421325bed6f1989d048edb4c9b1450f71d4cb519afc5c2c90af8517f56f3
yk0pdddk BlackByte Ransomware d3efaf6dbfd8b583babed67046faed28c6132eafe303173b4ae586a2ca7b1e90
vylvz3le.dll BlackByte Loader 92ffb5921e969a03981f2b6991fc85fe45e07089776a810b7dd7504ca61939a3
2edpcniu.dll BlackByte Loader f8efe348ee2df7262ff855fb3984884b3f53e9a39a8662a6b5e843480a27bd93

 

Pt 2. Análise de Ofuscação de Código

 

Fonte: Trustwave


Descubra mais sobre DCiber

Assine para receber os posts mais recentes por e-mail.