
BlackLotus-Z2A-Challenge, Niente da vedere qui per ora , per favore passa oltre
BlackLotus-Z2A-Challenge, non c'è niente da vedere per ora, per favore proseguite
Prima di tutto

Per scopi puramente estetici, prenderò in prestito (ruberò) :)) senza vergogna le regole di rilevamento yara dalla soluzione di @darthmaulware(Ryan “DM” Smith) solo per farlo sembrare professionale. Vai a dare un'occhiata al suo Twitter, è una persona fighissima! P.S. Ryan, per favore non ti arrabbiare perché l'ho rubato :))) e grazie per il supporto su Discord :)
Date un'occhiata anche al suo lavoro :)
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)
}
Anche per ragioni estetiche rubo anche questo perché è figo :) di nuovo scusa Ryan, per favore non arrabbiarti con me :)```
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 fossi in te non mi fiderei al 100% di capa (almeno in questo caso specifico) perché qui dice che il campione usa rc4 mentre in realtà usa aes, ma vabbè, come già detto questo è strettamente per estetica :)
Prima di iniziare, incontrerai durante questo report un sacco di

Per favore ignora questo perché ida non riesce a disassemblare correttamente in assembly; questo è

E questo crasha il debugger? Perché?
perché cerca di scrivere all'indirizzo 0, cosa che nel folklore hacker è nota come scrittura a un puntatore nullo, che era qualcosa di ampiamente sfruttato per ottenere CE (esecuzione di codice), ed è stato ovviamente mitigato.
E quindi con la mitigazione attuale, se provi a scrivere a 0, il processo crasha - nel nostro caso il malware - e di conseguenza anche il debugger.
Ora, se apriamo questo in ida

Ho rinominato ogni funzione per indicare una certa logica che svolge; iniziamo con la prima funzione, do_syscall()

Notiamo subito l'uso delle syscall, che è un metodo noto per rendere la vita più dura a un analista nell'analisi dinamica.
Per chi non ha familiarità con le syscall in Windows, ecco un bel video fatto da oalabs(https://www.youtube.com/watch?v=Uba3SQH2jNE). Per favore guardatelo perché l'ho fatto anch'io e mi ha aiutato molto a capire cosa succede in questa funzione.
Se ispezioniamo il "pseudo-codice" generato da ida, vediamo che appare così.

Se ispezioniamo staticamente solve_hash, appare così.


Da una prospettiva pseudo, appare così.