sogen - 高性能な Windows / Linux ユーザースペースエミュレーター
(github.com/momo5502)- システムコール(syscall)レベルで動作する高性能な Windows / Linux ユーザースペースエミュレーターで、包括的なフックによりプロセス実行全体を制御
- セキュリティ研究、マルウェア分析、DRM 研究など、プロセス実行に対する細かな制御が必要な作業に適している
- Windows API を再実装せず、syscall レベルで動作するため、既存のシステム DLL をそのまま活用可能
- C++ で書かれており、任意のバックエンドで動作可能: Unicorn Engine, icicle-emu, Hyper-V(WHP)
- 高度なメモリ管理: Unicorn のメモリ管理の上に構築されており、reserved・committed など Windows 固有のメモリタイプをサポート
- 完全な PE ロード対応: 実行ファイルおよび DLL のロード処理、適切なメモリマッピング、再配置(relocations)、TLS をサポート
- 例外処理: Windows 構造化例外処理(SEH)を実装し、例外ディスパッチャおよびアンワインドをサポート
- スレッド対応: ラウンドロビン(round-robin)方式のスケジューリングスレッドモデルを提供
- State 管理: 全状態のシリアライズと高速なインメモリスナップショットの両方をサポート
- デバッグインターフェース: GDB シリアルプロトコルを実装し、IDA Pro、GDB、LLDB、VS Code などと連携可能
- マルウェア分析時にはホスト分離が完全ではない可能性があるため、ブラウザサンドボックスベースの Web 版の利用 を推奨
- Python による自動化が可能
pip install sogenでインストール- エミュレーター実行、コールバック登録、WinAPI コールのインターセプトを Python 内でそのまま処理可能
発表資料スライド参照: Fake It ‘til We Make It: The Art of Windows User Space Emulation
- Windows User Space Emulation とは?
- プロセスをエミュレーター内で実行し、その下の OS とカーネルをシミュレートする手法
- 一般的なエミュレーションがコードを仮想 CPU 上で動かし、ハードウェアをシミュレートするものだとすれば、ユーザースペースエミュレーションはその上で OS・カーネル層まで模倣する方式
- これがもたらす中核的な価値は、実行されるコードに対する完全な制御 — エミュレーターがあらゆる実行段階に介入できること
- 制御は フックポイント(hooking points) を通じて行われる
- メモリアクセスのフック — read、write、execute 単位で横取り
- 命令実行のフック — syscall、cpuid、rdtsc のような特定命令の実行時点を捕捉
- 新しいコードパス(new code path)の実行フック — 初めて実行されるコードパスを検知
- このフック能力により、外部通信の横取り、実行フローの追跡、コードカバレッジ測定などが可能になり、DRM 分析・マルウェア分析・脆弱性分析・セキュリティ研究の基盤となる
- 発表者は DRM 開発者で、Steam CEG、Arxan、Denuvo など多数の DRM をリバースエンジニアリングおよび回避した経験を持つ
- Windows 向けゲームで広く使われる Denuvo DRM 分析において、エミュレーションが中核的な手段だった
- 現代の DRM では難読化 / アンチタンパリング / アンチデバッグにより、静的分析および動的分析がしばしば不可能になるため
- エミュレーターを 脆弱性分析(ファジング) に活用: エミュレーター内部で入力をランダム化し、フックによってコードカバレッジのフィードバックを受けながら、実行は予測可能かつ反復可能
- 既存ソリューションの限界が開発の動機
- Qiling・Speakeasy・Dumpulator は Python 製のため、フックが多い DRM 分析では極端に遅い
- Binee・Unicorn PE は API レベルの再実装であるため不完全で、バグが発生しうる
- syscall の規模: ntdll.dll の一般 syscall 409 個、win32u.dll の UI syscall 1474 個
- 高速なエミュレーション速度は JIT によるもの
まだコメントはありません。