[Cuckoo Sandbox] サンドボックス検出ツール「sems」を使って軽く耐耐解析機能を実現してみる

sems とは

sems は、Cuckoo Sandbox や仮想マシン内で実行されていることを検知しレポートするソフトウェア。
あゆむ氏 (@AES256bit) に存在を教えてもらった。

semsは、以下のような様々なサンドボックス検出機能を持つ。

などなど・・・数が多いので詳しくは下記ソースを参照。
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で検知しなくなったので満足。