
Invoke-ArgFuscator is an open-source, cross-platform PowerShell module that helps generate obfuscated command-lines for common system-native executables.
░█░█▄░█░█▒█░▄▀▄░█▄▀▒██▀░▒░ ▄▀▄▒█▀▄░▄▀▒▒█▀░█▒█░▄▀▀░▄▀▀▒▄▀▄░▀█▀░▄▀▄▒█▀▄░ ░█░█▒▀█░▀▄▀░▀▄▀░█▒█░█▄▄░▀▀░█▀█░█▀▄░▀▄█░█▀░▀▄█▒▄██░▀▄▄░█▀█░▒█▒░▀▄▀░█▀▄░
Invoke-ArgFuscator は、Windows、Linux、macOS で一般的なシステム標準の実行可能ファイル向けの難読化コマンドラインの生成を支援する、オープンソースのクロスプラットフォーム PowerShell モジュールです。
👉 ArgFuscator の対話型バージョンは ArgFuscator.net でご利用いただけます 🚀
コマンドライン難読化(T1027.010)とは、プロセスのコマンドラインを操作することで、コマンドの本来の意図を偽装することです。Windows、Linux、macOS では、多くのアプリケーションが渡されたコマンドライン引数を予期しない方法で解析するため、特定の文字の挿入、削除、置換によってプログラムの実行フローが変わらない状況が発生します。コマンドライン難読化が成功すると、AV や EDR ソフトウェアなどの防御策を妨害し、場合によっては検出を完全に回避できる可能性があります。
これまでの研究では、コマンドライン難読化のリスクが、主に(システム標準の)脆弱なアプリケーションの逸話的な例で強調されてきましたが、この手法に関する知識は不足しています。このプロジェクトは、さまざまなコマンドライン難読化テクニックを文書化して実証し、それぞれに対する一般的なアプリケーションの影響を受けやすさを記録する集中リソースを提供することで、この課題の克服を目指しています。
このモジュールは、PowerShell/pwsh をサポートする任意のオペレーティングシステムで動作します。これには Windows、macOS、Linux が含まれます。
brew がプレインストールされている場合は、brew install powershell/tap/powershell を実行して最新バージョンの PowerShell をインストールしてください。その他のインストールオプションについては、Microsoft のドキュメントを参照してください。このモジュールをインストールする最も簡単な方法は、次の PowerShell コマンドを使用することです:
Install-Module -Name Invoke-ArgFuscator
モジュールを使用するには、PowerShell 内で関数 Invoke-ArgFuscator を呼び出します。例:
a. 難読化したいコマンドラインをコマンドライン引数として渡す場合(ArgFuscator.net でサポートされていることを前提とします):
# Windows
powershell /c "Invoke-ArgFuscator -Command 'certutil /f /urlcache https://www.example.org/ homepage.txt'"
# macOS and Linux
pwsh -c "Invoke-ArgFuscator -Command 'certutil /f /urlcache https://www.example.org/ homepage.txt'"
b. 独自のモデルファイルを使用する場合1:
# Windows
powershell /c "Invoke-ArgFuscator -InputFile path\to\file.json"
# macOS and Linux
pwsh -c "Invoke-ArgFuscator -InputFile path/to/file.json"
このリポジトリをデバイスにクローンします。
PowerShell を介して Invoke-ArgFuscator.ps1 を呼び出します。例:
a. 対話的に実行するには、モデルファイル1のパスを標準入力(stdin)から渡します:
# Windows
powershell .\Invoke-ArgFuscator.ps1
# macOS and Linux
pwsh ./Invoke-ArgFuscator.ps1
b. モデルファイル1へのパスをコマンドライン引数として渡す場合:
# Windows
powershell .\Invoke-ArgFuscator.ps1 -InputFile "path\to\file.json"
# macOS and Linux
pwsh ./Invoke-ArgFuscator.ps1 -InputFile "path/to/file.json"
c. 難読化したいコマンドラインをコマンドライン引数として渡す場合:
Invoke-ArgFuscator.ps1 と同じフォルダーに models/ フォルダーが存在する必要があることに注意してください。
# Windows
powershell .\Invoke-ArgFuscator.ps1 -Command "certutil /f /urlcache https://www.example.org/ homepage.txt"
# macOS and Linux
pwsh ./Invoke-ArgFuscator.ps1 -Command "certutil /f /urlcache https://www.example.org/ homepage.txt"
Invoke-ArgFuscator は PowerShell モジュールであるため、このプロジェクトの機能を独自の PowerShell プロジェクトに追加できます。
Invoke-ArgFuscator を活用するには、PowerShell ファイルに以下を追加します:
Import-Module Invoke-ArgFuscator
その後、次のいずれかの方法で呼び出します:
Invoke-ArgFuscator -InputFile $InputFile -n $n
Invoke-ArgFuscator -Command $Command -Platform $Platform -n $n
ここで、
$InputFile は、モデルファイルへの(相対/絶対)ファイルパスを含む string、$Profile は、指定されたファイルパス内でターゲットとするプロファイルインデックスを表す 0 以上の整数(オプション)、$n は、生成する難読化されたコマンドライン相当物の数を表す 0 より大きい integer(オプション)。または、$Command は、難読化したいコマンドラインを含む string、$Platform は、関連するプラットフォームを含む string(例: windows、オプション)、$n は、生成する難読化されたコマンドライン相当物の数を表す 0 より大きい integer(オプション)。これらは ArgFuscator.net の「ダウンロード」オプションで生成するか、GitHub からダウンロードできます。 ↩ ↩2 ↩3