Mangleの最新バージョンを表示したり、Issueを提出するには、https://github.com/Tylous/Mangle を参照してください。
作者: Tyl0us
Source Zero Con 2022 で紹介
Mangleは、コンパイル済み実行ファイル(.exeまたはDLL)の様々な側面を操作するツールです。既知の侵害指標(IoC)ベースの文字列を削除してランダムな文字に置き換えたり、ファイルサイズを水増ししてEDRを回避したり、正規ファイルからコード署名証明書をクローンすることができます。これにより、Mangleはローダーがディスク上およびメモリ内のスキャナーを回避するのに役立ちます。
MangleはGolangで開発されました。
まずはいつものように、リポジトリをクローンします。Mangleをコンパイルする前に、依存関係をインストールする必要があります。インストールするには、以下のコマンドを実行してください:
go get github.com/Binject/debug/pe
そしてビルドします
go build Mangle.go
MangleはGolangで書かれていますが、多くの機能は他の言語の実行ファイルで動作するように設計されています。リリース時点では、Golang固有の機能は文字列操作部分だけです。
./mangle -h
_____ .__
/ \ _____ ____ ____ | | ____
/ \ / \\__ \ / \ / ___\| | _/ __ \
/ Y \/ __ \| | \/ /_/ > |_\ ___/
\____|__ (____ /___| /\___ /|____/\___ >
\/ \/ \//_____/ \/
(@Tyl0us)
Usage of ./Mangle:
-C string
Path to the file containing the certificate you want to clone
-I string
Path to the orginal file
-M Edit the PE file to strip out Go indicators
-O string
The new file name
-S int
How many MBs to increase the file by
Mangleは入力された実行ファイルを解析し、セキュリティ製品が検出対象とする既知の文字列を探します。これらの文字列だけが検出の唯一のポイントではありません。多くの場合、これらの文字列は他のデータポイントやテレメトリと組み合わせて検出・防御に利用されます。Mangleはこれらの既知の文字列を見つけ、その16進値をランダムな値に置き換えて削除します。重要: Mangleは操作する文字列のサイズを正確に置き換えます。増減は行いません。そうするとファイルの不整合や不安定性が生じるからです。これは-Mコマンドラインオプションを使って行います。
現在、MangleはGolangファイルのみ対応していますが、今後他の言語も追加される予定です。他の言語の既知の文字列をご存知でしたら、Issueチケットを開いて提出してください。
変更前
変更後
ほぼすべてのEDRは、一定サイズを超えるファイルのディスク上およびメモリ内のスキャンを行うことができません。これは単純に、大きなファイルのレビュー、スキャン、監視に時間がかかるためです。EDRはユーザーの生産性を低下させてパフォーマンスに影響を与えたくないのです。Mangleはファイルの末尾にNullバイト(ゼロ)のパディングを追加することでファイルを水増しします。これによりファイル内部に影響を与えることはありません。実行ファイルを水増しするには、-Sコマンドラインオプションと追加したいバイト数を指定します。インターネット速度が速くなった今、大きなペイロードはもはや問題ではありませんが、とはいえ2ギガのファイルを作成することは推奨されません。
多数のユーザーランドおよびカーネルEDRにわたるテストケースに基づき、サイズを95〜100メガバイト増やすことが推奨されます。ベンダーは大きなファイルをチェックしないため、そのアクティビティは気づかれず、シェルコードの実行が成功します。
Mangleには、正規のコード署名証明書の完全なチェーンとすべての属性をファイルから取得し、別のファイルにコピーする機能もあります。これには署名日、カウンター署名、その他の測定可能な属性が含まれます。
この機能は私が開発した別のツールLimelighterと似ているように聞こえるかもしれませんが、両者の大きな違いは、Limelighterがドメインに基づいて偽の証明書を作成し現在の日時で署名するのに対し、Mangleは元のファイルからタイムスタンプを取得した有効な属性を使用する点です。このオプションはDLLまたは.exeファイルを使用してコピーでき、-Cコマンドラインオプションと証明書をコピーする元ファイルのパスを指定します。