[Cuckoo Sandbox] サンドボックス検出ツール「sems」を使って軽く耐耐解析機能を実現してみる
sems とは
sems は、Cuckoo Sandbox や仮想マシン内で実行されていることを検知しレポートするソフトウェア。
あゆむ氏 (@AES256bit) に存在を教えてもらった。
semsは、以下のような様々なサンドボックス検出機能を持つ。
- サンドボックスが用いるdllインジェクションの検出
- サンドボックス用途で用いられるような各環境のネーミングの検出(sample.exeやSANDBOXといったコンピュータ名など)
- Virtualbox Guest Additionや仮想マシンでよく見られるデバイス名などの仮想マシン検知
などなど・・・数が多いので詳しくは下記ソースを参照。
https://github.com/AlicanAkyol/sems/tree/master/cuckoo_detection
(一部どう考えても被害妄想だろとツッコんでしまうようなものがあったりして面白い)
この記事では、Cuckoo Sandbox & Virtualbox の仮想マシンのインストール時に標準で検知された以下の2つの項目において、
Cuckoo Sandbox の設定やソースコードを少しいじってsemsに検知されないよう耐耐解析機能を実現する。
- resultserverのポート番号の検知
- python.exeプロセスの検知
なお、semsによって検知されたかどうかの確認は、起動中の標準出力を確認する方法以外にも、
semsは検知した各項目ごとにカレントディレクトリにテキストファイルを生成してくれるので、
Cuckoo Sandbox の挙動解析結果の NtCreateFile() の呼び出しから確認できる。
また、当然のことながら Virtualbox の Guest Addition はインストールしていない。semsは当然検知する。
resultserverのポート番号の検知
解析結果を送信するサーバのポート番号は2042/tcpであり、それを検知する。
そのため、20042/tcpに変更する。
~/.cuckoo/conf/cuckoo.confの修正
port = 20042
python.exeプロセスの検知
これはちょっと被害妄想な気もするけど・・・。
python.exe 以外のファイル名に変更すればいい。
ゲストOSのpythonパス変更
python27は標準でC:¥python27 に python.exe および pythonw.exe を作成する。
そこで以下のパスに変更。
C:¥DELL¥SUServer.exe C:¥DELL¥SUServerw.exe
core/guest.pyの修正
我が家の環境では、フルパスは「/usr/local/lib/python2.7/dist-packages/cuckoo/core/guest.py」。
Cuckoo Sandbox は python が C:¥ 直下にインストールされることを期待するので、上記と同時に修正を行う必要がある。
また、 analyzer.py の配置は C:¥tmp[random] フォルダに行うため、sems では検知されないが耐解析機能を持ったマルウェアに検知される可能性がある。
そのため、ついでに analyzer.py の配置先を C:¥DELL_UPDATE¥tmp[random] フォルダに行うように修正。
361d360 < systemdrive = systemdrive + "DELL_UPDATE/" 514,515c513 < #"command": "C:\\Python27\\pythonw.exe %s\\analyzer.py" % self.analyzer_path, < "command": "C:\\DELL\\SUServicew.exe %s\\analyzer.py" % self.analyzer_path, --- > "command": "C:\\Python27\\pythonw.exe %s\\analyzer.py" % self.analyzer_path,
SUService.exe はレノボのソフトウェアらしいが、名前さえ変えれば問題ないので適当に付けた。
以上、修正後semsで検知しなくなったので満足。