
MITM経由でバイナリをパッチ: BackdoorFactory + mitmProxy。
ブログ: http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
セキュリティ専門家と研究者のみを対象としています。
###現在、v.0.17 >= MITMPROXY >= v.0.11 でのみ動作します
Docker:
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward # linux
# sudo sysctl -w net.inet.ip.forwarding=1 # macOS
docker pull secretsquirrel/bdfproxy
docker run -it -p 8080:8080 secretsquirrel/bdfproxy bash
# ./bdf_proxy.py
Kaliにインストールする場合:
apt-get update
apt-get install bdfproxy
Black Hat USA 2015:
Video: https://www.youtube.com/watch?v=OuyLzkG16Uk
Paper: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
DerbyCon 2014:
Video: http://www.youtube.com/watch?v=LjUN9MACaTs
約18分のところがBDFProxyのパートです。
開発者への連絡先:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
このスクリプトは、Backdoor Factory(BDF)とmitmProxyの2つのライブラリを使用します。
###コンセプト: ダウンロード中のバイナリをMITM方式でパッチします。
###なぜ: 多くのセキュリティツールのウェブサイトが、いまだに非SSL/TLSでバイナリを配信しているからです。
以下はその一部です:
sysinternals.com
Microsoft - MS Security Essentials
ほぼすべてのアンチウイルス企業
Malwarebytes
Sourceforge
gpg4win
Wireshark
など...
確かに、これらのアプリの一部は自己チェック機構で保護されています。私は概念実証としてNSISチェックを自動的にバイパスする方法に取り組んできました。しかし、それでもダウンロード中のビット反転や悪意のあるペイロードの実行という最初の問題は止められません。また、BDFはデフォルトで、ダウンロード中にWindows PE証明書テーブルのポインタをパッチして、バイナリから署名を削除します。
##依存:
Pefile - 最新版
ConfigObj
mitmProxy - Kaliビルド.10
BDF - 最新版
Capstone(BDFの一部)
##対応環境: 物理的な高スペックノートPC、Raspberry Pi、VMなど、すべてのKali Linuxビルドでテストされており、いずれもBDFProxyを実行できます。
##インストール: BDFは bdf/ にあります。
最新版を取得するには次を実行してください:
./install.sh
または:
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
証明書エラーが発生した場合は、次を実行してください:
mitmproxy
mitmProxyが読み込まれたら、[Ctr+C]で終了します。
##使用方法: 使用前にすべてを更新します:
./update.sh
設定を読んでください!!!
-->bdfproxy.cfg
BDFProxyを実行する前に、C2ホストとポート設定を構成する必要があります。異なるペイロード間でC2ポート設定を重複させないでください。LinuxシェルをWindowsマシンに送信することになり、あちこちでセグメンテーションフォルトが発生します。実行後、C2通信のセットアップに役立つmetasploitリソーススクリプトが作成されます。注意深く確認してください。ちなみに、[Overall]セクション以外のすべては実行中に更新されるため、環境に合わせて設定を変更するためにプロキシを終了する必要はありません。
ただし、MITMを行うにはMITMマシンの設定が必要です!wifiPineappleを使用している場合は、hack5が公開したスクリプトを改造し、設定に役立てています。環境に合った正しい設定を入力して、./wpBDF.sh を実行してください。このスクリプトは、http(非SSL)トラフィックのみをプロキシ経由で流すようにiptablesを設定します。他のすべてのトラフィックは通常どおり転送されます。
次に:
./bdf_proxy.py
プロキシの物理的な設定例を示す、素敵なASCIIアートをどうぞ:
LAN使用時:
<Internet>----<mitmMachine>----<userLan>
Wi-Fi使用時:
<Internet>----<mitmMachine>----<wifiPineapple>)))
##テスト:
FirefoxとFoxyProxyを使用してブラウザから接続し、セットアップをテストしたい場合を考えます。
次のように設定を更新します:
transparentProxy = None
FoxyProxyをBDFProxyをプロキシとして使用するように設定します。
設定ファイルのデフォルトポートは8080です。
##ログ:
あります。テスト中のクライアントによって、プロキシウィンドウは大量のcatリンクですぐに埋まります。ブラックリスト設定によって何がパッチされ、ブロックされているかを確認するには、tail -f proxy.log を使用してください。ただし、バイナリを手動でパッチすることを選択した場合は、メインのプロキシウィンドウにも注意してください。動作は速く、舞台裏ではトラフィックがマルチスレッド処理されていますが、最初のリクエストとレスポンスは表示用にロックされています。
##攻撃シナリオ(すべてターゲットの許可を得て実施): -悪意のあるWi-Fi AP -ARPリダイレクション -配線クローゼットへの物理的な仕掛け -お気に入りのISPへの論理的な仕掛け
##バグ報告
バグは発生しますが、問題を理解できなければ助けることはできません。
問題はこちらに提出してください: https://github.com/secretsquirrel/BDFProxy/issues
以下のコマンドの出力から次の情報を含めてください(長いコマンドはpastebinを使用してください):
# bdfproxy only supports v11 -> v17
$ mitmproxy --version
$ uname -a
# Use pastebin perhaps
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###変更履歴:
####07/04/2016
BDFプリプロセッサとmitmProxy v17のサポート
####12/20/2015
bdfproxy.cfgに、BDFからPEコードサイニングをサポートするための設定オプションを追加 => CODE_SIGN 詳細はBDF READMEを参照してください
####11/13/2015
同名のライブラリが2つ存在するため、python-magic依存関係を削除。混乱の原因となっていました。
####10/19/2015
新しいセクションではなくコードケーブへのBDFインポートディレクトリパッチのサポートを追加。これにはbdfproxy.cfgファイルでIDA_IN_CAVEをTrueに設定してください。実験的機能です...
####8/12/2015
PE置換メソッドのサポートを追加。ダウンロードしたバイナリを攻撃者が用意したバイナリに置き換えます。使用するにはPATCH_METHODをreplaceに変更し、SUPPLIED_BINARYを指定してください。
####8/6/2015
oniondukeのサポートを追加。使用するにはPATCH_METHODをoniondukeに変更し、SUPPLIED_BINARYに対象の実行ファイルにバインドしたいバイナリを指定します。
x86およびx86_64のPEバイナリの両方について、PEマニフェスト内のrequestedExecutionLevelをhighestAvailableとしてチェックおよびパッチするサポートを追加。RUNAS_ADMINをTrueに設定してください。
XP_MODEフラグをTrueにしてレガシーXPマシンをサポートするかどうかを設定するサポートを追加。この設定をFALSEにするとAVエミュレータが失敗する可能性があるため、回避に役立ちます。