
BlackLotus-Z2A-Challenge, Nada que ver aquí por ahora, por favor siga de largo.
BlackLotus-Z2A-Challenge, nada que ver aquí por ahora, por favor sigue adelante
Primero lo primero

Solo por razones estéticas, tomaré prestadas (robaré) descaradamente :)) de la solución de @darthmaulware(Ryan “DM” Smith) las reglas de detección de YARA solo para que se vea profesional. Ve a revisar su Twitter, ¡es una persona jodidamente genial! PD. Ryan, por favor no te enojes porque te las robé :))) y gracias por el apoyo en Discord :)
Por favor revisa también su trabajo :)
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)
}
Además, por razones estéticas, también robaré esto porque se ve genial :) de nuevo, lo siento ryan, por favor no te enojes conmigo :)```
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 |
+------------------------------------------------------+------------------------------------------------------+
Siendo honesto, si yo fuera tú no confiaría al 100% en capa (al menos en este caso específico) porque aquí dice que la muestra usa rc4 cuando en realidad usa aes, pero da igual, como se mencionó, esto es estrictamente por estética :)
Antes de empezar, te encontrarás a lo largo de este informe con un montón de

Por favor, ignora esto, ya que ida no logra desensamblar esto correctamente; esto es

¿Y esto crashea el depurador? ¿Por qué?
porque intenta escribir en la dirección 0, lo que en el folclore hacker se conoce como escribir en una dirección de puntero nulo, algo que fue explotado ampliamente para obtener CE (ejecución de código), y esto obviamente ha sido mitigado.
Y con la mitigación actual, si intentas escribir en 0, ese proceso fallará; en nuestro caso, el malware y, en consecuencia, el depurador.
Ahora si abrimos esto en ida

Renombré cada función para indicar alguna lógica que hace. Empecemos con la primera función, do_syscall()

Notamos inmediatamente el uso de syscalls, que es un método conocido para hacerle la vida más difícil a un analista cuando se trata de análisis dinámico.
Para aquellos que no estén familiarizados con las syscalls en Windows, aquí hay un buen video hecho por oalabs(https://www.youtube.com/watch?v=Uba3SQH2jNE). Por favor, míralo porque yo también lo hice y me ayudó mucho a entender qué sucede en esta función
Si inspeccionamos el "pseudo-código" resuelto por ida, vemos que se ve así

Si inspeccionamos estáticamente solve_hash, se ve así

