
EternalBlueC
Suite EternalBlue refeita em C/C++ que inclui:
- MS17-010 Exploit ( Contains DoublePulsar )
- EternalBlue/MS17-010 vulnerability detector
- DoublePulsar detector
- DoublePulsar Upload DLL
- Doublepulsar Upload Shellcode
- DoublePulsar Upload DLL with SMB Structure
- Doublepulsar Upload Shellcode with SMB Structure
- Doublepulsar Upload Exe inside a DLL
Conquistas do Projeto
- Upload Shellcode - concluído e funcionando, injete seu shellcode em qualquer processo desejado
- Upload DLL - concluído e funcionando, injete sua DLL em qualquer processo desejado
- Upload DLL with an embedded exe - concluído, injete sua DLL em qualquer processo desejado e extrai o executável como "mssecsvc.exe"
Objetivos do Projeto
- Permitir que os pacotes de negociação, configuração de sessão, conexão de árvore, TransNamedPipe e Transaction2 do DoublePulsar sejam gerados dinamicamente com estruturas SMB e capturas hexadecimais
- Permitir a edição do payload do exploit EternalBlue para remover o implante DoublePulsar e permitir o envio de shellcodes personalizados
- Permitir que os pacotes do EternalBlue sejam gerados dinamicamente
- Solicitar entrada do usuário para todos os endereços IP, payloads como shellcode ou caminhos de arquivo e autorização para continuar
- Ser mais verboso
- Adicionar a versão do Windows a partir da resposta SMB na tela
- Adicionar suporte a parâmetros de linha de comando (DoublepulsarExecute.exe -h 192.168.0.8 -f PopCalculatorShellcode.bin )
- Adicionar mais verificação de erros, como timeout de socket
Suite EternalBlue e DoublePulsar
- ms17_vuln_status.cpp - Este programa envia 4 pacotes SMB. 1 negociação, 1 configuração de sessão, 1 conexão de árvore e 1 requisição TransNamedPipe. Este programa então lê a resposta NT_STATUS da requisição TransNamedPipe (requisição PeekNamedPipe) e determina se o NT_STATUS no pacote SMB é igual a 0xC0000205 (STATUS_INSUFF_SERVER_RESOURCES). Se estiver correto, o alvo é vulnerável ao MS17-010. Testado no Windows 7 x64 bit sem patch.

- doublepulsar_check.cpp - Este programa envia 4 pacotes SMB. 1 negociação, 1 configuração de sessão, 1 conexão de árvore e 1 pacote Trans2 SESSION_SETUP. Ao enviar o pacote Trans2 SESSION_SETUP, o ID de multiplexação enviado pode ser comparado no pacote de resposta Trans2 com o ID de multiplexação: 0x51 ou 81. O DoublePulsar lê o ID de multiplexação enviado e, após o comando ping ser bem-sucedido, retorna um +10 em hexadecimal para o ID de multiplexação na resposta Trans2 SESSION_SETUP. Em seguida, comandos são enviados para queimar o backdoor DoublePulsar. O comando de queima do DoublePulsar está nos parâmetros de timeout do pacote SMB. Depois disso, o DoublePulsar se torna dormente e não é removido do sistema. Testado no Windows 7 x64 bit.

- DoublePulsarXORKeyCalculator.cpp - Este programa envia 4 pacotes SMB. 1 pacote de negociação e 3 requisições. A última requisição é uma requisição Trans2 SESSION_SETUP. Uma resposta Trans2 SESSION_SETUP é recebida e a assinatura SMB é extraída de (Recvbuff[18] -> Recvbuff[22]). Recvbuff[22] indica o tipo de arquitetura. Se 1, o alvo é x64 bits; se 0, o alvo é x86/32 bits. A assinatura SMB é convertida dos caracteres unsigned char para um inteiro unsigned.

Esses valores de Recvbuff[18] -> Recvbuff[22] são então processados pela função calculadora de chave XOR do DoublePulsar, que gera uma chave XOR inteira unsigned que pode ser usada para criptografar o shellcode ou payload DLL que será carregado no DoublePulsar. Testado no Windows 7 x64 bit.
Captura de tela de exemplo:

Mesma chave do binário original da NSA no FUZZBUNCH

-
DoublePulsar_structure_ping.cpp - Este programa envia 4 pacotes SMB. 1 negociação, 1 configuração de sessão, 1 conexão de árvore e 1 pacote Trans2 SESSION_SETUP. A diferença entre este e o doublepulsar_check.cpp é que este gera o pacote PING DoublePulsar Trans2 usando uma estrutura, em vez de uma string hexadecimal SMB fixa que obtive de uma amostra do Wannacry. Outra diferença é que este programa gera dinamicamente o pacote TreeConnect, em vez de usar o fixo presente na amostra do Wannacry. O pacote ping gerado neste programa informará se o DoublePulsar está instalado na máquina remota.
-
DoublePulsar_structure_exec.cpp - Este programa envia 5 pacotes SMB. 1 negociação SMB, 1 configuração de sessão, 1 conexão de árvore, 1 pacote Ping DoublePulsar Trans2 SESSION_SETUP e 1 pacote de Execução DoublePulsar Trans2 SESSION_SETUP. A diferença entre este e o Doublepulsar_UploadShellcode.cpp é que este gera o pacote de Execução DoublePulsar Trans2 usando uma estrutura, em vez de uma string hexadecimal SMB fixa que obtive de uma amostra do Wannacry.
-
Doublepulsar_UploadDLL.cpp -
Este programa é destinado a DLLs. Ele envia 4 pacotes SMB junto com os dados da DLL em pacotes Trans2 SMB. 1 negociação, 1 configuração de sessão, 1 conexão de árvore, 1 requisição Ping Trans2 SESSION_SETUP e um pacote de Execução Trans2 SESSION_SETUP. O pacote de requisição Ping Trans2 SESSION_SETUP é enviado para obter a assinatura SMB no pacote de resposta Trans2 SESSION_SETUP. Esta assinatura é processada pela calculadora de chave XOR do DoublePulsar. O programa então lê um arquivo DLL e o combina com shellcode de kernel e userland de 64 bits para executar a DLL e aplica XOR no buffer com a chave XOR do DoublePulsar que calculamos a partir da assinatura SMB. Um pacote é gerado alocando memória, copiando o pacote Trans2, editando os valores necessários para a transação SMB funcionar (UserID, TreeID, TotalDataCount, DataCount, ByteCount), depois copia os dados com XOR (shellcode de kernel + DLL) para o final e o percorre enviando-o em um comprimento total de pacote de 4096 bytes por vez para o DoublePulsar. Comprimento total do pacote = 4178. 4096 é para os dados criptografados com XOR. Também implementarei o uso de estruturas SMB & TRANSACTION2 em versões futuras.