Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Revoke-Obfuscation — PowerShell難読化検出フレームワーク | Kitploit
ツール/GitHubGitHub/danielbohannon/revoke-obfuscation
防御ツール静的分析コード分析マルウェア分析脅威インテリジェンス論文と研究学習と教育
GitHubdanielbohannon/revoke-obfuscation

Revoke-Obfuscation

PowerShell難読化検出フレームワーク

リポジトリを見る
752122516年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Revoke-Obfuscation v1.0

Revoke-Obfuscation Demo

Revoke-Obfuscation Screenshot

はじめに

Revoke-Obfuscationは、PowerShell v3.0以上に対応したPowerShell難読化検出フレームワークです。

著者

Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)

研究

ブログ記事:https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html

ホワイトペーパー:https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf

背景

2016年秋から2017年春にかけて、Daniel Bohannon(@danielhbohannon)は、Invoke-ObfuscationとInvoke-CradleCrafterという2つのオープンソースPowerShell難読化フレームワークを公開しました。この研究とフレームワークの目的は、攻撃者によるPowerShellの利用を検出するための純粋なシグネチャベースのアプローチの限界を浮き彫りにすることでした。防御者への核となるメッセージは、既知の怪しい構文に加えて難読化の兆候を検出することに焦点を当てるというものでした。

しかし、Invoke-ObfuscationとInvoke-CradleCrafterにおける極端なランダム化と、PowerShellのスクリプトブロックログでデオブフスケーションされないトークンレイヤーの難読化オプションの組み合わせにより、防御者は既知および未知の難読化手法を汎用的に検出するための新しくスケーラブルな手段を模索するようになりました。

Invoke-Obfuscationの公開から数週間後、Lee Holmes(@Lee_Homes)は「More Detecting Obfuscated PowerShell」と題したブログ記事を執筆し、その中で高度に難読化されたスクリプト(特にInvoke-Obfuscationが生成したもの)に見られる異常な特徴を検出するための統計分析手法を紹介しました。

このやり取り以降、DanielとLeeは親友となり、多くの共通の関心・執念を共有するようになりました。それは、上質なコーヒーへの愛情と、難読化されたPowerShellを徹底的に検出する新しい方法の追求です。

両ブルーチーマーが研究と概念実証コードに費やした時間は、適切な4分間の抽出時間を想定した場合(少なくとももう一人のコーヒー愛好家がこの「pour over」ダジャレに気づいたと仮定して)、数千杯のChemex抽出コーヒーに相当するでしょう。

Revoke-Obfuscationは、こうした努力の最終的な手作り製品です。

目的

Revoke-Obfuscationは、スケーラブルに難読化されたPowerShellコマンドやスクリプトを検出するためのオープンソースのPowerShell v3.0以上フレームワークです。PowerShellのAST(抽象構文木)を利用して、入力されたPowerShellスクリプトから数千の特徴量を迅速に抽出し、この特徴ベクトルを、40万8000以上のPowerShellスクリプトのコーパスに対して自動学習プロセスによって計算された、いくつかの事前定義された重み付き特徴ベクトルのいずれかと比較します。完全なコーパスは(https://aka.ms/PowerShellCorpus)からダウンロードできます。この研究のデータサイエンス面の詳細は、リポジトリの「DataScience」サブディレクトリにあります。

Revoke-Obfuscationは純粋なIOCや正規表現マッチングではなく、特徴量抽出と比較に依存しているため、攻撃者が文字頻度分析のような基本的なチェックを無効にするために難読化されていないスクリプト内容で難読化を埋め込もうとしても、未知の難読化手法を識別する能力がより堅牢です。

Revoke-Obfuscationは、ほとんどの入力PowerShellスクリプトを100〜300ミリ秒で簡単に測定できます。このパフォーマンスレベルにより、組織は(最悪の場合)1時間あたり1万2000以上のPowerShellスクリプトの難読化を測定でき、SIEMで冗長なPowerShellスクリプトブロックログをインデックス化する必要はありません。

最後に、Revoke-Obfuscationは簡単なホワイトリスト機能をサポートしており、PowerShell Operationalイベントログレコードを取り込み、複数のスクリプトブロックEID 4104レコードにわたって記録されたスクリプトブロックを再構築することもできます。環境のPowerShell Operationalイベントログを取り込み、それらのログ内のすべてのスクリプトを再構築してユニーク化し、手動検査が必要な難読化されたPowerShellスクリプトを特定するためのワンストップショップとして簡単に機能します。

インストール

Revoke-ObfuscationのソースコードはGithubでホストされており、このリポジトリ(https://github.com/danielbohannon/Revoke-Obfuscation)からダウンロード、フォーク、レビューできます。問題や機能リクエストは、このプロジェクトに関連するGithubのバグトラッカーを通じて報告してください。

インストールするには(Githubから):

root@kitploit:~
Import-Module .\Revoke-Obfuscation.psd1

ソースコードは、PowerShellギャラリーから以下のコマンドで直接インストールすることもできます。

インストールするには(PowerShellギャラリーから):

root@kitploit:~
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation

使用方法

Revoke-Obfuscation は詳細なチュートリアルと、いくつかの楽しいサプライズを提供します。しかし、そういうのが好みでなければ、単に Get-Help Measure-RvoObfuscation を実行して使用法の構文を確認するか、このまま読み進めてください。

このフレームワークで使用される主な関数は2つです:

  • Get-RvoScriptBlock – EID 4104 スクリプトブロックログからスクリプトを再構築します
  • Measure-RvoObfuscation – 入力スクリプトを測定し、難読化スコアを返します

PowerShell Operationalログからスクリプトブロックログを再構築して抽出する必要がある場合は、Get-RvoScriptBlock が適切な関数です。この関数は自動的にユニークなスクリプトブロックのみを返し、悪意がないと判断された特定のデフォルトスクリプトブロック値を除外します。これは -Deep スイッチでオーバーライドできます。

  • Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -Verbose
  • Get-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -Verbose
  • Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -Verbose

Get-RvoScriptBlock は、MIR/HX監査結果や、Matt Graeber(@mattifestation)のCimSweepプロジェクト(https://github.com/PowerShellMafia/CimSweep)を介して取得されたPowerShell Operationalログもサポートしています。CimSweepでは、WMIが非クラシックイベントログをクエリできるようにするための軽微なレジストリ調整が必要です。詳細は Get-RvoScriptBlock のNOTESセクションにあります。

  • Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -Verbose
  • Get-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock

demo.evtx に記録されたテストデータに対する完全な例は以下の通りです:

root@kitploit:~
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose

ローカルおよびリモートでホストされているテストスクリプトに対する完全な例は以下の通りです:

  • Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDisk
  • Get-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk
  • Get-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk

-OutputToDisk スイッチは、難読化されたすべてのスクリプトを自動的に .\Results\Obfuscated\ に出力します。いずれの場合も、すべての結果はPSCustomObjectとして返され、スクリプト内容とともに、難読化スコア、測定時間、ホワイトリスト結果、抽出されたすべてのスクリプト特徴量などのメタデータが含まれます。

Revoke-Obfuscationには、ホワイトリストオプションが3つ、2か所に存在します:

  1. ディスク上(存在すれば自動的に適用):
    1. .\Whitelist\Scripts_To_Whitelist\ – このディレクトリに置かれたすべてのスクリプトはハッシュ化され、同一のスクリプトはホワイトリストに登録されます。このホワイトリスト方法は、以下の2つのオプションよりも推奨されます。
    2. .\Whitelist\Strings_To_Whitelist.txt – このファイル内の文字列をいずれか含むスクリプトはホワイトリストに登録されます。構文: Rule_Name,string_to_whitelist
    3. .\Whitelist\Regex_To_Whitelist.txt – このファイル内の正規表現をいずれか含むスクリプトはホワイトリストに登録されます。構文: Rule_Name,regex_to_whitelist
  2. Measure-RvoObfuscationの引数(上記のホワイトリストオプションに加えて適用):
    1. -WhitelistFile – -WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1
    2. -WhitelistContent – -WhitelistContent 'string 1 to whitelist','string 2 to whitelist'
    3. -WhitelistRegex – -WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'

独自のトレーニングデータセットを作成し、Measure-Vector関数用の重み付きベクトルを生成することに興味がある場合は、ModelTrainer.cs/ModelTrainer.exeをラベル付きデータセットに対して実行できます。以下のコマンドは、すべての入力スクリプトから特徴ベクトルを抽出し、このトレーニングフェーズで使用される単一のCSVに集約します:

root@kitploit:~
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }

最後に、PowerShellのAST(抽象構文木)の力を活用したインジケーター(IOC)を作成するためのプラットフォームを探している場合(難読化されていない悪意のあるPowerShellアクティビティを識別するために強くお勧めします)、PS Script Analyzerはそのようなタスクを処理するために設計された優れたフレームワークです。

ライセンス

Revoke-ObfuscationはApache 2.0ライセンスの下でリリースされています。

リリースノート

v1.0 - 2017-07-27 Black Hat USA & 2017-07-30 DEF CON: Revoke-Obfuscationのパブリックリリース。

ツールをダウンロード