
任意のファイルをHTMLファイルに埋め込み、隠蔽する
著者: Arno0x0x - @Arno0x0x
このツールは、ファイル(あらゆる種類のファイル)を暗号化し、HTMLファイルにリソースとして埋め込み、組み込まれたリソースをユーザーがクリックする動作をシミュレートする自動ダウンロードルーチンと一緒に提供します。
そして、ユーザーがHTMLファイルを閲覧すると、埋め込まれたファイルはその場で復号化され、一時フォルダに保存され、リモートサイトからダウンロードされているかのようにユーザーに提示されます。ユーザーのブラウザと提示されたファイルの種類に応じて、ファイルはブラウザによって自動的に開かれることがあります。
このツールには2つのバリエーションがあり、全体的な機能は同じですが、使用方法に若干の違いがあります。
Pythonスクリプト - テンプレートに基づいて出力HTMLファイルを生成し、RC4暗号化ルーチンを使用し、復号化キーを出力ファイル内に埋め込みます。生成されたHTMLは、対象ユーザーが閲覧するか、添付ファイルとして送信することができます。
HTML/Javascript - ファイルをドラッグ&ドロップして暗号化するもので、WebCrypto APIを使用して出力HTMLファイルを生成しますが、復号化素材(キーとカウンタ)は埋め込みません。代わりに、復号化素材はURLパラメータのセットとして表示され、結果のHTMLファイルを指すURLに追加されます: http(s)://hosting.server.com/result.html#hexencodedkey!hexencodedcounter。そのため、結果のHTMLファイルは添付ファイルとして送信できません。この手法の主な利点は、復号化素材がファイル自体に埋め込まれていないため、完全なURLを持たないシステム(例:インターセプトプロキシ)によるペイロードの分析や取得を防ぐことができる点です。
補足:
このツールは、優れた 'demiguise' ツールに触発され、派生したものです: https://github.com/nccgroup/demiguise
バイナリ入力(XLLファイルから)に使用される b64AndRC4 関数は、次のものを組み合わせたものです: https://gist.github.com/borismus/1032746 と https://gist.github.com/farhadi/2185197
簡単な悪意のあるXLL作成については https://gist.github.com/Arno0x/f71a9db515ddea686ccdd77666bebbaa を確認してください。これは、この方法で配信しようとする悪意のあるドキュメントの完璧な例です。
HTMLテンプレート(html.tpl ファイル)では、以下の 'keyFunction' の代わりに、独自のキー環境派生関数を挿入することをお勧めします。キーを環境から派生させることで、意図したターゲットでのみ機能するようにする必要があります(サンドボックスでは機能しないように)。
payloads_examples ディレクトリにはいくつかのペイロードサンプルファイルが用意されています。例えば、calc.xll は、x86プロセス向けの metasploit シェルコードを含むExcelアドイン(XLL)ファイルで、calc.exe プロセスを起動します。
Pythonスクリプトの使用
1/ XLLファイルから悪意のあるHTMLファイルを秘密鍵とともに生成します:
python embedInHTML.py -k mysecretkey -f example_calc.xll -o index.html
2/ HTMLファイルをWebサーバーに公開します(必要に応じて -w フラグでサーバーを起動することもできます)
HTML/Javascriptの使用
1/ ブラウザで embedInHTML.html ファイルを開きます
2/ ペイロードファイルをページにドラッグ&ドロップするだけです(必要に応じて出力ファイル名を変更できます)
3/ 結果のファイルを保存し、復号化素材をURLパラメータとしてファイル名に追加する形で記録します: http(s)://hosting.server.com/result.html#hexencodedkey!hexencodedcounter
最後に...
ターゲットのブラウザでHTMLファイルを開き、魔法を起こさせましょう:
このツールは、合法的かつ正当な目的でのみ使用されることを意図しています:
Empireの作者の言葉を引用: 正当な情報セキュリティ業界に有用な攻撃ツールを構築しながら、悪意のある行為者がそれを悪用するのを同時に防ぐ方法はありません。