BlackLotus-Z2A-Challenge,暂时没什么可看的,请继续往前走
首先,先看这个

纯粹为了美观,我会厚着脸皮借用(偷):)) @darthmaulware(Ryan “DM” Smith) 解决方案中的 yara 检测规则,只是为了让它看起来更专业。去看看他的推特,他是个超酷的人!Ps. Ryan 请别因为我偷了那个而生气 :))) 谢谢你在 discord 上的支持 :)
也请看看他的作品 :)
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)
}
另外,出于美学原因,我也会偷用这个,因为它看起来很酷 :) 再次抱歉 ryan,请不要生我的气 :)```
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 |
+------------------------------------------------------+------------------------------------------------------+
说实话,如果我是你,我不会100%相信capa(至少在这个特定情况下),因为这里它说样本使用了RC4,而实际上样本使用的是AES,但无所谓,如前所述,这纯粹是为了美观 :)
在我们开始之前,你会在这份报告中遇到很多

请忽略这个,因为IDA无法正确反汇编它,在汇编中这是

而这会让调试器崩溃?为什么?
因为它试图在地址0处写入,这在黑客圈子里被称为写入空指针地址,这曾经被广泛利用来获取CE(代码执行),而这显然已经被缓解了。
因此,在当前的缓解措施下,如果你试图在0地址写入,它会使该进程崩溃——在我们的案例中就是恶意软件——并进而使调试器崩溃。
现在如果我们在IDA中打开这个

我重新命名了每个函数以表明其逻辑,让我们从第一个函数 do_syscall() 开始

我们立即注意到它使用了系统调用,这是一种已知的方法,目的是在进行动态分析时让分析师的日子更难过。
对于那些不熟悉Windows中系统调用的人,这里有一个由oalabs制作的酷炫视频(https://www.youtube.com/watch?v=Uba3SQH2jNE)。请观看它,因为我也看了,它帮助我理解了这个函数中发生的事情。
如果我们检查IDA解析出的“伪代码”,我们会看到它看起来像这样

如果我们静态检查 solve_hash,它看起来像这样


从伪代码的角度来看,它看起来像这样

请参考 solve_hash.py 查看我对这个函数的“模拟”,如果你想看一段自动化代码,并想知道系统调用是如何通过哈希查找算法解析的。但无论如何,这是名为SysWhispers2的项目的一部分,或者至少我推测恶意软件的作者是以此为灵感的。不管怎样,为了更好地理解,请参考上面oalabs的视频。
无论如何,anti_debug 函数很容易被绕过,而且是众所周知的(https://anti-debug.checkpoint.com/techniques/debug-flags.html#manual-checks-ntglobalflag)。绕过它的方法是安装scyllahide并勾选NtGlobalFlag(如果你使用x86dbg,默认应该是开启的)。不管怎样,这是你应该检查的

这就是 anti-debug “伪函数”的样子

如果你问我的话,这相当简单
接下来是 check_inmemory_ldr 函数,它看起来像这样


现在为了函数分析的目的,如果我们足够客气地问x86dbg,我们可以看到如果我们运行到syscall指令,x86dbg会好心地返回它将要执行的系统调用。在我们的案例中