
BlackLotus-Z2A-Challenge、今はここには何もありません。どうぞ通り過ぎてください
まず最初に

美的な目的のためだけに、プロっぽく見せるために、@darthmaulware(Ryan “DM” Smith) のソリューションからyara検出ルールを恥知らずにも借り(盗み)ます :)) 彼のツイッターをチェックしてみて。彼はマジでクールな人だよ! 追伸:ライアン、それを盗んだことで怒らないでね :))) ディスコードでのサポートありがとう :)
彼の作品もぜひチェックしてみて :)
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 |
+------------------------------------------------------+------------------------------------------------------+
tbh 正直言うと、もし私があなたの立場なら、capa を100%信頼しないでしょう(少なくともこの特定のケースでは)。なぜなら、ここではサンプルが RC4 を使用していると表示されていますが、実際にはサンプルは AES を使用しているからです。しかし、とにかく、前述の通りこれは厳密に見た目のためのものです :)
始める前に、このレポートを通じてたくさんの

に出くわすでしょう。
これは無視してください。ida がこれをアセンブリで正しく逆アセンブルできないためです。これは

そして、これによりデバッガがクラッシュしますか?なぜでしょうか?
なぜなら、アドレス0に書き込もうとするからです。これはハッカーの間ではヌルポインタアドレスへの書き込みとして知られており、CE(コード実行)を取得するために広く悪用されていたもので、当然ながら緩和されています。
そして、現在の緩和策では、0に書き込もうとすると、そのプロセス(この場合はマルウェア)がクラッシュし、結果としてデバッガもクラッシュします。
次に、これを IDA で開くと

すべての関数に、それが行うロジックを示す名前を付けました。最初の関数 do_syscall() から始めましょう。

すぐに syscall の使用に気づきます。これは動的解析の際にアナリストの生活を困難にする既知の手法です。
Windows の syscall に詳しくない方のために、oalabs による素晴らしいビデオがあります(https://www.youtube.com/watch?v=Uba3SQH2jNE)。私も見ましたが、この関数で何が起こっているのかを理解するのに大いに役立ったので、ぜひ見てください。
IDA が解決した「擬似コード」を調べると、次のようになります。

solve_hash を静的に調べると、次のようになります。


擬似コードの観点から見ると、次のようになります。

この「エミュレーション」を見たい場合、または syscall がハッシュルックアップアルゴリズムによってどのように解決されるかを知りたい場合は、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 関数があります。次のようになります。