Stargate - EAT解析不要のWindows DLL関数アドレス探索ライブラリ
概要
Stargateは、Windows環境で動作するプログラムが利用するDLL内の関数アドレスを、従来のExport Address Table(EAT)解析に依存せずに特定するRust言語製のライブラリです。通常、関数のアドレスを知るにはPEBウォークやEATの解析が用いられますが、これらはEDRによるフックやDLLの改変によって信頼性が損なわれることがあります。本ライブラリは関数のバイトシグネチャを用いたランタイムスキャンにより、これらの問題を回避。結果としてセキュリティツールの検知回避や、改変されたDLLでも正確に関数を特定できるため、マルウェア解析や侵入テスト、セキュリティ研究における強力な支援ツールとなります。
リポジトリの統計情報
- スター数: 10
- フォーク数: 0
- ウォッチャー数: 10
- コミット数: 5
- ファイル数: 7
- メインの言語: Rust
主な特徴
- Export Address Table(EAT)解析に依存しない関数アドレスの特定
- バイトシグネチャを用いた関数のランタイムスキャン機能
- EDRによるフック検知やDLL改変への耐性を実現
- Rust言語による安全かつ高速な実装
技術的なポイント
WindowsのDLLから関数のアドレスを取得する際、従来はPEB(Process Environment Block)をウォークし、Export Address Table(EAT)を解析して関数の場所を特定する手法が主流でした。しかし、この方法はEDR(Endpoint Detection and Response)製品によるAPIフックやDLLの改変を受けやすく、正確な関数位置の特定が困難になる場合があります。
Stargateはこれらの問題を解決するため、EAT解析を行わずに関数を特定する独自の手法を採用しています。具体的には、関数のバイトシグネチャ(バイナリパターン)を事前に定義し、実行時にDLLのメモリ空間をスキャンして該当パターンを検索します。このシグネチャベースの検索は、DLLのExport Tableが改変されていても関数の本体コード自体は変わらないという前提に基づき、関数の位置を高精度に特定可能です。
さらに、Rust言語で実装されているため、安全性とパフォーマンスの両立を実現しています。Rustの所有権モデルと型安全性により、メモリ破壊や競合状態を抑制しつつ、ネイティブコードに迫る高速な動作が可能です。これにより、アンチチートやマルウェア解析の現場で求められるリアルタイム性の高い関数探索を実現します。
また、READMEおよび付属のblog.mdでは、Stargateの設計思想や具体的な実装アプローチ、シグネチャの作成方法などが詳細に解説されています。これにより利用者は自分の解析対象に合わせてシグネチャを拡張することも容易です。加えて、シグネチャ検索によりEDRのAPIフックを迂回できるため、侵入テストやレッドチーム活動においても有効なツールとなっています。
総じて、StargateはWindows DLLの関数アドレス特定における従来手法の弱点を補完し、セキュリティ研究・解析分野における新たな可能性を切り拓く先進的なRust製ライブラリと言えるでしょう。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: Git管理対象外ファイルの指定
- Cargo.toml: Rustプロジェクトの依存関係・設定ファイル
- LICENSE: ライセンス情報
- README.md: リポジトリの概要と使い方説明
- blog.md: Stargateの設計思想や技術解説をまとめた記事
- src/: Rustのソースコードディレクトリ(詳細はリポジトリ参照)
- examples/: 使用例コード(存在すれば)
ほか合計7ファイルで構成されており、シンプルかつ機能に特化した設計が特徴です。
まとめ
EAT解析を回避し安全に関数探索を実現するRust製Windows向けライブラリ。
リポジトリ情報:
- 名前: stargate
- 説明: Locate dlls and function addresses without PEB Walk and EAT parsing
- スター数: 10
- 言語: Rust
- URL: https://github.com/Teach2Breach/stargate
- オーナー: Teach2Breach
- アバター: https://avatars.githubusercontent.com/u/105792760?v=4