
PowerShellツールキット。AMSI/Defender検出境界の解析と静的マルウェアトリアージのためのもので、バイトオフセットを検出トリガーにマッピングし、さらにYARA、エントロピー、文字列、PE/imphash解析を提供します。OffsetScanのコンパニオンツールです。
バイトオフセット検査、ソース相関、バイナリ比較、防御的検知境界分析のための、メモリ使用量を制限したPowerShellツールキット。
OffsetInspectは、アナリストの実践的な問いに答えます:
このバイトオフセットにはどのようなコンテンツが存在し、その周囲にはどのようなソースまたはバイナリコンテキストがあるのか?
また、ThreatCheckが扱うのと同じアナリストの問題に着想を得た、OffsetInspectネイティブの検知境界ワークフローを提供します(ThreatCheckのソースやバイナリは同梱しません)。AMSIまたはMicrosoft Defenderがまだ検知する最も早いコンテンツプレフィックスを特定し、その境界を繰り返し検証し、得られたオフセットをそのままコンテキストインスペクタに渡します。その中核に加えて、レッドチーム分析と静的トリアージスイートを追加します。複数領域の発見、コーパススキャン、検知差分、検知トリガー相関、ドリフトジャーナリング、エンゲージメントレポート、エントロピー解析、文字列抽出、PE/imphash解析など、すべて読み取り専用です。さらに、承認された利用に限った署名ロバストネステスターも備え、サンプルをメモリ内でのみ改変し、エンドポイント保護を無効化または再構成することは一切ありません。
PowerShellのオーバーヘッドなしでコーパス規模の静的トリアージ(PE解析、エントロピー、文字列、IOC)を行うには、OffsetScan を参照してください。同じJSON出力スキーマを持つネイティブRustバイナリです。OffsetInspect 3.1.0以降は、-IocJsonPath を使用してOffsetScanのIOC JSONを直接取り込めます。
-ContextLines による前後のソースコンテキストを実装します。ProbeLog/ProbeCount)を記録し、-Verbose にライブでストリーミングして、スキャンの実際のプロバイダーコストをレポートに使える形で記録します。-CaptureTelemetry)と関連付けます:Microsoft Defenderのアラートが発生したかどうか、どのようなコンテキストで発生したか、どのテレメトリソースが盲点だったか。「可視性を仮定し、それを検証する」という原則を具現化します。読み取り専用、非管理者、Windowsのみ。Get-OffsetSignature):プラットフォームの実際の信頼検証を使用して、ファイルが有効に署名され信頼されているか、誰が署名したか、埋め込み署名とカタログ署名のどちらであるかを報告します。imphashおよびビルドツールチェーンのフィンガープリント(インポート vs ツールチェーン vs 署名者)を補完する署名者シグナルです。Windowsのみ。| コマンド | 目的 | プラットフォーム |
|---|---|---|
Invoke-OffsetInspect | バイトオフセットをソース/バイナリコンテキスト、16進、比較にマッピング | クロスプラットフォーム |
Invoke-OffsetThreatScan | 1つのファイルに対するAMSI/Defender検知境界検索 | Windows |
Invoke-OffsetThreatScanBatch | ファイルのコーパスをスキャン;-Summary は検知マトリックスを返す | Windows |
Invoke-OffsetThreatScanRegion | インメモリAMSIによる複数領域の発見(ディスク書き込みなし) | Windows |
Invoke-OffsetMutationTest | 署名ロバストネステスト:検知されたサンプルをメモリ内で改変し、どの変換が回避するかを報告(承認された利用のみ) | Windows |
Compare-OffsetThreatResult | 2つのスキャン結果の差分を取る(例:シグネチャ定義の更新前後) | クロスプラットフォーム |
Get-OffsetDetectionTrigger | 検知境界を、それを最も引き起こした可能性が高いコンテンツと関連付ける | クロスプラットフォーム |
Add-OffsetDriftEntry | 検知スナップショット(ファイルハッシュ + Defenderシグネチャバージョン)をジャーナルに記録 | クロスプラットフォーム² |
Get-OffsetDrift | ファイルの検知可能性がどのように変化したかを説明:ファイル変更 vs シグネチャ更新 vs 非決定的 | クロスプラットフォーム |
Export-OffsetThreatReport | スキャン結果をMarkdown/HTMLエンゲージメントレポートに変換 | クロスプラットフォーム |
Invoke-OffsetYaraScan | ファイルをYARAルールと照合し、バイトオフセット付きのヒットを返す | クロスプラットフォーム¹ |
Invoke-OffsetClamScan | ClamAVエンジンでファイルをスキャン;正規化された検知結果を返す | クロスプラットフォーム¹ |
Get-OffsetEntropy | パック/暗号化領域を特定するためのウィンドウ単位のシャノンエントロピー | クロスプラットフォーム |
Get-OffsetString | バイトオフセット付きでASCII/UTF-16LE文字列を抽出 | クロスプラットフォーム |
Get-OffsetPEInfo | PEヘッダー、セクション、インポート/imphash、オーバーレイ、オフセット→セクション | クロスプラットフォーム |
Get-OffsetIOC | 統合インジケーターパネル:ハッシュ、エントロピー、PE/imphash、文字列 | クロスプラットフォーム |
Get-OffsetSignature | Authenticode署名:有効に署名され信頼されているか、誰によるものか、埋め込み署名とカタログ署名のどちらか | Windows |
¹ これら2つのコマンドにはオプションの外部依存関係があります:Invoke-OffsetYaraScan はYARAエンジン(winget install VirusTotal.YARA)が必要で、Invoke-OffsetClamScan はシグネチャデータベースを持つClamAV(winget install Cisco.ClamAV、続けて freshclam)が必要です。他のすべてのコマンドは自己完結型です。ここでのClamAVは単一ファイル検出器であり、境界検索エンジンではありません。clamscan は呼び出しのたびに全データベースを読み込むため、二分探索には clamd デーモンが必要です。
² Add-OffsetDriftEntry はクロスプラットフォームでジャーナリングしますが、Defenderのシグネチャ/エンジンバージョン欄はWindows(Get-MpComputerStatus 経由)でのみ設定されます。それ以外の環境ではnullとして記録され、スナップショットの残りは引き続き書き込まれます。
オフセット検査の中核とすべての静的トリアージヘルパーはクロスプラットフォーム(Windows、Linux、macOS)です。AMSI/Defender脅威プロバイダーはWindowsのみです。
Install-Module OffsetInspect -Scope CurrentUser Import-Module OffsetInspect
### リポジトリのチェックアウト```powershell
git clone https://github.com/warpedatom/OffsetInspect.git
cd OffsetInspect
Import-Module ./module/OffsetInspect/OffsetInspect.psd1 -Force
このリポジトリには、軽量なCLIラッパーも含まれています:```powershell ./OffsetInspect.ps1 ./OffsetThreatScan.ps1 -Engine AMSI
## オフセット検査
### 人間可読出力```powershell
Invoke-OffsetInspect ./sample.bin 0x200
KinD version v0.20.0 go1.20.4 linux/amd64を使用してテストされました。このデモはまた、2023 MacBook Pro M2 Max上でUTMを介してUbuntu 22.04 ARM64 VMを実行することによっても検証されています。### 構造化オブジェクト```powershell
$inspectParameters = @{
FilePaths = './script.ps1'
OffsetInputs = 0x80, 0x100
PassThru = $true
}
$results = Invoke-OffsetInspect @inspectParameters
$results | Where-Object BytesDiffer
Invoke-OffsetInspect ./sample.bin 0x200 -Json Invoke-OffsetInspect ./sample.bin 0x200 -Csv Invoke-OffsetInspect ./sample.bin 0x200 -CsvPath ./artifacts/offsets.csv
JSON モードは常に配列を出力します。単一の結果の場合も同様です。
### バイナリ比較```powershell
$compareParameters = @{
FilePaths = './before.bin'
OffsetInputs = 0x200
CompareFile = './after.bin'
PassThru = $true
}
Invoke-OffsetInspect @compareParameters