
BlackLotus-Z2A-Challenge, Nada para ver aqui por agora, por favor, siga em frente
BlackLotus-Z2A-Challenge, Nada para ver aqui por agora, por favor siga em frente
Antes de mais nada

Por razões estéticas apenas, vou pedir emprestado (roubar) :)) da solução do @darthmaulware(Ryan “DM” Smith) as regras de detecção yara só para parecer profissional. Vai ver o twitter dele, ele é uma pessoa incrivelmente fixe! Ps. Ryan, por favor não fiques zangado porque roubei isso :))) e obrigado pelo apoio no discord :)
Por favor, vejam também o trabalho dele :)
https://gitlab.com/malre-rcs/zero2automated/-/blob/main/solutions/bi_weekly_challenge/BlackLotus_20230321/BlackLotus_HTTP_Downloader.ipynb``` rule Blacklotus_HTTP_Downloader { meta: description = "Rule to detect Blacklotus HTTP Downloader" author = "Darth Maulware" sha256 = "d68f668b4240f9518e4f80499d93d8c5a1eddece0771658c33ae916cc54f5a66"
strings:
$opcode1 = {48 89 4C 24 08 48 89 54 24 10 4C}
$opcode2 = {89 44 24 18 4C 89 4C 24 20 48 83}
$opcode3 = {EC 28 B9 31 62 D7 2E 90 90 E8 ??}
$opcode4 = {?? ?? ?? 48 83 C4 28 48 8B 4C 24}
$opcode5 = {08 48 8B 54 24 10 4C 8B 44 24 18}
$opcode6 = {4C 8B 4C 24 20 4C 8B D1 90 90}
condition:
(uint16(0) == 0x5a4d and filesize < 500KB and all of them)
}
Também por razões estéticas, também vou roubar isto porque parece legal :) novamente, desculpa ryan, por favor não fique bravo comigo :)```
C:\\Users\\REM\\Desktop>capa.exe -f pe -r capa-rules-5.0.0 d68f668b4240f9518e4f80499d93d8c5a1eddece0771658c33ae916cc54f5a66.exe
matching: 100%|████████| 124/124 [00:02<00:00, 46.96 functions/s, skipped 1 library functions (0%)]
+------------------------+------------------------------------------------------------------------------------+
| ATT&CK Tactic | ATT&CK Technique |
|------------------------+------------------------------------------------------------------------------------|
| DEFENSE EVASION | Obfuscated Files or Information T1027 |
| DISCOVERY | Process Discovery T1057 |
| EXECUTION | Shared Modules T1129 |
+------------------------+------------------------------------------------------------------------------------+
+-----------------------------+-------------------------------------------------------------------------------+
| MBC Objective | MBC Behavior |
|-----------------------------+-------------------------------------------------------------------------------|
| ANTI-BEHAVIORAL ANALYSIS | Debugger Detection::Process Environment Block BeingDebugged [B0001.035] |
| | Debugger Detection::Process Environment Block NtGlobalFlag [B0001.036] |
| CRYPTOGRAPHY | Encrypt Data::RC4 [C0027.009] |
| | Generate Pseudo-random Sequence::RC4 PRGA [C0021.004] |
| DATA | Encode Data::XOR [C0026.002] |
| DEFENSE EVASION | Obfuscated Files or Information::Encoding-Standard Algorithm [E1027.m02] |
+-----------------------------+-------------------------------------------------------------------------------+
+------------------------------------------------------+------------------------------------------------------+
| CAPABILITY | NAMESPACE |
|------------------------------------------------------+------------------------------------------------------|
| execute syscall instruction (35 matches) | anti-analysis |
| check for PEB BeingDebugged flag (2 matches) | anti-analysis/anti-debugging/debugger-detection |
| check for PEB NtGlobalFlag flag | anti-analysis/anti-debugging/debugger-detection |
| encode data using XOR (2 matches) | data-manipulation/encoding/xor |
| encrypt data using RC4 PRGA (2 matches) | data-manipulation/encryption/rc4 |
| get process heap flags | host-interaction/process |
| get ntdll base address (3 matches) | linking/runtime-linking |
| parse PE header (2 matches) | load-code/pe |
| resolve function by parsing PE exports (2 matches) | load-code/pe |
+------------------------------------------------------+------------------------------------------------------+
tbh se eu fosse você, eu não confiaria 100% no capa (pelo menos neste caso específico) porque aqui diz que a amostra usa rc4 quando na verdade usa aes, mas tanto faz, como mencionado, isso é estritamente por estética :)
Antes de começarmos, você vai encontrar ao longo deste relatório muitas

Por favor, ignore isso, pois o ida não consegue desmontar isso corretamente em assembly. Isto é

E isso derruba o debugger? Por quê?
porque ele tenta escrever no endereço 0, o que no folclore hacker é conhecido como escrever em endereço de ponteiro nulo, algo que foi amplamente explorado para obter CE (execução de código), e isso obviamente já foi mitigado.
E com a mitigação atual, se você tentar escrever em 0, o processo vai crashar — no nosso caso, o malware — e consequentemente o debugger.
Agora, se abrirmos isso no ida

Renomeei cada função para indicar alguma lógica que ela faz. Vamos começar com a primeira função, do_syscall()

Imediatamente notamos o uso de syscalls, que é um método conhecido para dificultar a vida de um analista quando se trata de análise dinâmica.
Para quem não está familiarizado com syscalls no Windows, aqui está um vídeo legal feito pela oalabs(https://www.youtube.com/watch?v=Uba3SQH2jNE). Por favor, assista, porque eu também assisti e me ajudou muito a entender o que acontece nessa função
Se inspecionarmos o "pseudo-código" resolvido pelo ida, vemos que fica assim

Se inspecionarmos estaticamente a solve_hash, ela fica assim


De uma perspectiva pseudo, fica assim