
PowerShell リモートダウンロードクレードルジェネレーター & 難読化ツール

Invoke-CradleCrafterは、PowerShell v2.0+互換のPowerShellリモートダウンロードクレードルジェネレーター兼難読化ツールです。
2016年秋、Invoke-Obfuscationをリリースした後、いつかInvoke-Obfuscationに「クレードルセレクタ」メニューを追加するかもしれないと考え、PowerShellリモートダウンロードクレードルのスプレッドシートを更新し続けました。このリストには、私にとって難解なクレードルが含まれており、その多くは実環境ではほとんど(あるいは全く)観測されていませんでした。
しかし、Invoke-Obfuscationは任意のPowerShellコマンドやスクリプトを難読化するように設計されているため、カスタマイズされたクレードルを構築するために含める必要があると分かっていた難読化手法の中には、Invoke-Obfuscationに含めることが現実的でないものがありました。
この時点で、このクレードル研究を完全に別のプロジェクトに移行するに至りました。ただし、Invoke-CradleCrafterの出力をInvoke-Obfuscationに入力して楽しみを続けることもいつでも可能です。
Invoke-CradleCrafterははるかに厳密に制御されているため、Invoke-Obfuscationに見られるどの手法とも全く異なる難読化手法を含めることが可能になりました。
このツールの新しい難読化手法には、データ型の列挙とワイルドカードマッチングによるトークン難読化、および追加の変数と変数構文を導入することによるコマンド構造の並べ替えが含まれます。
最後に、このツールは最も一般的なInvoke-ExpressionやIEXを超える10以上の呼び出し構文をサポートしています。
Invoke-CradleCrafterは、Blue TeamとRed TeamがPowerShellリモートダウンロードクレードルを簡単に探索、生成、難読化するのを支援するために存在します。さらに、Invoke-Obfuscationが生成した出力に対しては有効でも、Invoke-CradleCrafterを扱う際には不十分となる可能性がある検出の効果をBlue Teamがテストするのに役立ちます。なぜなら、Invoke-CradleCrafterは文字列連結、エンコーディング、ティックマーク、型キャストなどを一切含まないからです。
この研究とツール開発のもう一つの重要な要素は、各クレードルが実行されたときに残される高レベルの動作とアーティファクトを効果的に強調することでした。ツールのインタラクティブメニューで新しいクレードルタイプを最初に入力したときに、この情報を強調するようにしています。
最終的に、各クレードルの動作とアーティファクトについてより深く知ることで、Blue Teamはこれらのクレードルをより効果的に検出できるようになります。この知識はまた、Red Teamerが特定のシナリオでどのクレードルを使用するかについて、より情報に基づいた選択を行うのに役立つはずです。
すべてのクレードルはOut-Cradle関数を直接呼び出すことで生成できますが、積み重ねられた難読化コンポーネントの可動部分の複雑さにより、Invoke-CradleCrafter関数を使用することが、このフレームワークが現在サポートしているクレードル構文と難読化手法を探索し視覚化する最も簡単な方法です。
Invoke-CradleCrafterのソースコードはGithubでホストされており、このリポジトリ(https://github.com/danielbohannon/Invoke-CradleCrafter)からダウンロード、フォーク、レビューできます。問題や機能リクエストは、このプロジェクトに関連するGithubのバグトラッカーを通じて報告してください。
インストールするには:
Import-Module ./Invoke-CradleCrafter.psd1
Invoke-CradleCrafter
Invoke-CradleCrafterはApache 2.0ライセンスの下でリリースされています。
v1.0 - 2017-04-28 x33fcon (グディニャ、ポーランド): Invoke-CradleCrafterの公開リリース。
v1.1 - 2017-05-11 NOPcon (イスタンブール、トルコ): メモリベースのクレードルを3つ追加:
v1.1.1 - 2018-01-08: メモリベースのクレードルを1つ追加:
v1.1.2 - 2018-02-05: クレードル情報にUser-Agent文字列を追加