
C/C++で再作成されたEternalBlueスイート。これには以下が含まれます:MS17-010 Exploit、EternalBlue脆弱性検出器、DoublePulsar検出器、DoublePulsar Shellcode & DLLアップローダー
EternalBlueスイートをC/C++で再実装。以下を含む:



Recvbuff[18] から Recvbuff[22] までのこれらの値は、DoublePulsar XOR キー計算関数に入力され、DoublePulsar にアップロードするシェルコードまたは DLL ペイロードを暗号化するために使用できる unsigned int XOR キーが生成されます。Windows 7 x64 でテスト済み。
サンプルスクリーンショット:

FUZZBUNCH の元の NSA バイナリと同じキー

DoublePulsar_structure_ping.cpp - このプログラムは4つの SMB パケットを送信します。1つのネゴシエーション、1つのセッションセットアップ、1つのツリーコネクト、および Trans2 SESSION_SETUP パケットです。doublepulsar_check.cpp との違いは、Wannacry サンプルから抽出したハードコードされた SMB 16進文字列ではなく、構造体を使用して Trans2 DoublePulsar PING パケットを生成することです。もう1つの違いは、Wannacry サンプルに含まれているハードコードされたものではなく、プログラムが動的に TreeConnect パケットを生成することです。このプログラムで生成された ping パケットは、リモートマシンに DoublePulsar がインストールされているかどうかを通知します。
DoublePulsar_structure_exec.cpp - このプログラムは5つの SMB パケットを送信します。1つの SMB ネゴシエーション、1つのセッションセットアップ、1つのツリーコネクト、1つの Doublepulsar Trans2 SESSION_SETUP Ping パケット、および1つの Doublepulsar Trans2 SESSION_SETUP 実行パケットです。Doublepulsar_UploadShellcode.cpp との違いは、Wannacry サンプルから抽出したハードコードされた SMB 16進文字列ではなく、構造体を使用して Trans2 DoublePulsar 実行パケットを生成することです。
Doublepulsar_UploadDLL.cpp - このプログラムは DLL を対象としています。このプログラムは4つの SMB パケットを送信し、SMB Trans2 パケット内に DLL データを含めます。1つのネゴシエーション、1つのセッションセットアップ、1つのツリーコネクト、1つの Ping Trans2 SESSION_SETUP 要求、および1つの実行 Trans2 SESSION_SETUP パケットです。Ping Trans2 SESSION_SETUP 要求パケットは、Trans2 SESSION_SETUP 応答パケット内の SMB 署名を取得するために送信されます。この署名は DoublePulsar XOR キー計算機で処理されます。プログラムは DLL ファイルを読み取り、それを64ビットカーネルおよびユーザーランドシェルコードと結合して DLL を実行し、バッファを SMB 署名から計算した DoublePulsar XOR キーで XOR します。メモリを割り当て、Trans2 パケットをコピーし、SMBトランザクションに必要な値(UserID、TreeID、TotalDataCount、DataCount、ByteCount)を編集し、XOR されたデータ(カーネルシェルコード + DLL)を末尾にコピーし、合計パケット長 4096 バイトずつ DoublePulsar にループ送信するパケットが生成されます。総パケット長 = 4178。4096 は XOR 暗号化データ用です。今後のリリースでは SMB & TRANSACTION2 構造体も実装予定です。
Doublepulsar_UploadShellcode.cpp - このプログラムは5つの SMB パケットを送信します。1つのネゴシエーション、1つのセッションセットアップ、1つのツリーコネクト、1つの Ping Trans2 SESSION_SETUP パケット、1つの実行 Trans2 SESSION_SETUP パケットです。Trans2 SESSION_SETUP 要求パケットは、TRANS2 SESSION_SETUP 応答パケット内の SMB 署名を取得するために送信されます。この署名は DoublePulsar XOR キー計算機で処理されます。プログラムはカーネルシェルコードとサンプルシェルコードをバッファにコピーし、SMB 署名から計算した DoublePulsar XOR キーでバッファを XOR します。メモリを割り当て、Trans2 実行パケットをコピーし、SMBトランザクションに必要な値(UserID、TreeID、TotalDataCount、DataCount、ByteCount)を編集し、SESSION_SETUP パラメータと4096バイトの XOR されたシェルコードデータを末尾にコピーし、合計パケット長 4178 バイトで DoublePulsar に送信します。総パケット長 = 4178。NetBIOS 長は4174になります(NetBIOS ヘッダーは自身をサイズに含めないため)。このパケットのうち12バイトは Doublepulsar SESSION_SETUP パラメータ用、4096 は XOR 暗号化データ用です。今後のリリースでは SMB & TRANSACTION2 構造体が使用される予定です。

Shellcode generated from - zerosum0x0 は ETERNALBLUE 用のカスタムシェルコードを作成し、DOUBLEPULSAR 用に小さな修正を加えて再利用できるようにしました。コピーされたシェルコード内の syscall 上書きはこのユースケースでは不要だったため、未定義にしました:
;%define SYSCALL_OVERWRITE ; to run at process IRQL in syscall
再コンパイル: nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/
DoublePulsar_UploadExe.cpp -
このプログラムは実行ファイルを対象としています。実行ファイルはメモリに読み込まれ、Wannacry ランチャー DLL に配置され、DoublePulsar 経由で送信されます。1つのネゴシエーション、1つのセッションセットアップ、1つのツリーコネクト、1つの Trans2 Ping パケット、および複数の Trans2 exec SESSION_SETUP パケットです。Trans2 Ping 要求パケットは、Trans2 応答パケット内の SMB 署名を取得するために送信されます。この署名は DoublePulsar XOR キー計算機で処理されます。その後、プログラムは EXE ファイルを読み取り、64ビットカーネルおよびユーザーランドシェルコードとスケルトン DLL ファイルと結合し、バッファを SMB 署名から計算した DoublePulsar XOR キーで XOR します。メモリを割り当て、Trans2 実行パケットをコピーし、SMBトランザクションに必要な値(UserID、TreeID、TotalDataCount、DataCount、ByteCount)を編集し、XOR されたデータ(カーネルシェルコード + DLL + 実行ファイル)を末尾にコピーし、合計パケット長 4096 バイトずつ DoublePulsar にループ送信するパケットが生成されます。総パケット長 = 4178。NetBIOS 長は4174になります(NetBIOS ヘッダーは自身をサイズに含めないため)。このパケットのうち12バイトは Doublepulsar SESSION_SETUP パラメータ用、4096 は XOR 暗号化データ用です。