Breach and Attack Simulation com Infection Monkey 🐵
Posted on July 27, 2020 (Last modified on July 15, 2024) • 7 min read • 1,429 wordsRealize simulações de ataque em um clique!
O Infection Monkey é uma ferramenta open source mantida pela Guardicore criada para realizar atividades de simulação de ataques e violação de políticas de segurança (BAS - Breach and Attack Simulation). Seu objetivo é testar a resiliência de ambientes em redes privadas e nuvens públicas em um cenário pós-exploratório (onde o atacante já está em seu ambiente), com tentativas de violação de políticas de segurança, movimentação lateral e controle total de ambientes, seja ele Windows ou Linux.
Tudo o que é necessário para baixar e configurar o Infection Monkey se encontra em https://www.guardicore.com/infectionmonkey/.
Ao realizar o deploy de uma instância do Infection Monkey, ele automaticamente realizará um discovery de todo o ambiente que ele possa alcançar e avaliará os riscos de segurança com testes para diferentes cenários, como roubo de credenciais, comprometimento de desktops e domínio, além de outras falhas de segurança. É sugerido que realize esta avaliação periodicamente, assim é possível descobrir falhas após alterações na rede.
Além de ser bem intuitivo, a solução produz relatórios detalhados com todas as instruções de correção e mapas visuais dos pontos de exploração, de forma que você conseguirá visualizar como sua rede está distribuída.
Para os CISOs, a ferramenta provê resultados quantitativos sobre a exposição aos riscos que podem ajudar na justificativa de investimentos em segurança.
Para os analistas, os resultados demonstra os pontos frágeis em sua rede, ajudando a priorizar a mitigação destes riscos.
O Infection Monkey é bem flexível em relação aos ambientes que ele pode ser disponibilizado.
O meu laboratório segue as seguintes características para ajudar na demonstração do que a ferramenta é capaz:
Os componentes do laboratórios são os seguintes?
Nome | Função | IP |
---|---|---|
DC01.perifa.corp (Windows Server 2016) | Domain Controler | 192.168.210.101 |
DC02.perifa.corp (Windows Server 2016) | Domain Controler | 192.168.210.102 |
WKS01.perifa.corp (Windows 10) | Workstation | 192.168.210.10 |
WKS02.perifa.corp (Windows 10) | Workstation | 192.168.210.11 |
monkey1.perifa.corp (Debian 10) | Infection Monkey | 192.168.210.99 |
O ambiente todo foi construído em VMware Workstation.
Na máquina monkey1 já instalada, configurada e atualizada, vamos começar a instalar as dependências iniciais e ferramentas que iremos utilizar no futuro.
sudo apt install libcurl4 build-essential vim git net-tools
Gosto de cores no meu terminal, então se preferir você pode configurar o seu também. =)
$ sudo vim /etc/bash.bashrc
...
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
Solicite o link de download em https://www.guardicore.com/infectionmonkey/. Após o o recebimento do link, realize o download.
Descompacte o TAR.GZ.
$ tar xvzf monkey-island-debian.tar.gz
README.md
monkey_island_deb.deb
Instale o pacote .DEB, se aparecer alguns erros fique tranquilo@
$ sudo dpkg -i monkey_island_deb.deb
Use o comando APT para instalar todas as dependências e posteriormente o pacote monkey_island_deb.deb
$ sudo apt install -f
O Infection Monkey será instalado e configurado em /var/monkey
. Serão instalados dois serviços, o monkey-island
(Aplicação) e o monkey-mongo
(Bando de Dados.)
Abaixo a estrutura de pastas do serviço.
Vamos verificar se os serviços estão ativos está ativo.
$ sudo systemctl status monkey-*
A aplicação receberá requisições HTTP pela porta 5000/tcp. Vamos ver se ela está aberta.
$ sudo netstat -putan | grep 500
...
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 1926/python
tcp 0 0 0.0.0.0:5001 0.0.0.0:* LISTEN 1926/python
tcp6 0 0 :::5000 :::* LISTEN 1926/python
Localmente, você conseguirá acessar pelo link https://localhost:5000/
Mas remotamente, ainda temos um problema de certificado. =(
Vamos ter que corrigir o certificado. Antes vamos entrar na pasta de certificados do Infection Monkey e fazer um backup dos arquivos atuais
$ cd /var/monkey/monkey_island/cc
$ sudo mkdir old_cert
$ sudo mv server.crt old_cert/
$ sudo mv server.csr old_cert/
$ sudo mv server.key old_cert/
Ainda na pasta /var/monkey/monkey_island/cc
, vamos criar um certificado novo.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Você verá uma saída como a abaixo. Você pode ir digitando ENTER
e confirmando tudo.
Generating a RSA private key
............+++++
......+++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:br
State or Province Name (full name) [Some-State]:sp
Locality Name (eg, city) []:osasco
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Perifa
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Reinicie o serviço da aplicação.
$ sudo systemctl restart monkey-island
Não é necessário configurar para que os serviços iniciem automaticamente, na instalação isso já é configurado.
Pronto! Tudo configurado! Agora é possível acessar remotamente.
Agora com o servidor devidamente configurado, agora vem a parte mais fácil, por incrível que pareça.
Logo de inicio você terá duas opções para rodar o Monkey, neste caso vamos combinar o scan realizado pelo servidor e realizar o deploy do client em um dos desktops Windows 10.
Primeiro vamos baixar o cliente no Windows 10.
Você poderá executar o comando gerando em PowerShell no Windows, ou simplesmente baixar o cliente pela URL identificada no comando, https://192.168.210.99:5000/api/monkey/download/monkey-windows-64.exe
.
powershell [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; (New-Object System.Net.WebClient).DownloadFile('https://192.168.210.99:5000/api/monkey/download/monkey-windows-64.exe','.\monkey.exe'); ;Start-Process -FilePath '.\monkey.exe' -ArgumentList 'm0nk3y -s 192.168.210.99:5000';
Devido a natureza do software o Windows Defender imediatamente bloqueará o download, você deverá autorizar.
Já no terminal do PowerShell, execute o seguinte comando no diretório onde o cliente foi baixado. Lembrando que a aplicação Monkey Island está no servidor 192.168.210.99.
.\monkey-windows-64.exe -ArgumentList m0nk3y -s 192.168.210.99:5000
Bootloader starting.
Gathering network parameters.
Host Name . . . . . . . . . : WKS01
IP Address. . . . . . . . . : 192.168.210.10
IP Address. . . . . . . . . : 172.16.210.138
Windows version: windows8_or_greater
Sending request.
192.168.210.99 : (null) : {"system":"windows", "os_version":"windows8_or_greater", "hostname":"WKS01", "tunnel":false, "ips": ["192.168.210.10", "172.16.210.138"]}
Retrieved 17 data bytes: {"status":"RUN"}
Bootloader finished.
Bootloader starting.
Gathering network parameters.
Host Name . . . . . . . . . : WKS01
IP Address. . . . . . . . . : 192.168.210.10
IP Address. . . . . . . . . : 172.16.210.138
Windows version: windows8_or_greater
Sending request.
192.168.210.99 : (null) : {"system":"windows", "os_version":"windows8_or_greater", "hostname":"WKS01", "tunnel":false, "ips": ["192.168.210.10", "172.16.210.138"]}
Retrieved 17 data bytes: {"status":"RUN"}
Bootloader finished.
Pronto! Instantes depois você verá o cliente se comunicando com o servidor.
Ainda na tela Run Monkey, clique em Run on Monkey Island Server.
Agora você verá a interação entre o cliente e server, e a partir de agora os monkeys começarão a vasculhar a rede!
Como dito anteriormente, adicionei nas configurações de bruteforce uma credencial válida para ajudar na demonstração, e no fim tivemos o seguinte cenário, onde todas as máquinas do domínio foram exploradas com sucesso.
Em Configurações é possível realizar ajustes como:
O Infection Monkey lhe fornecerá os seguinte relatórios. Clique nos links para baixar um exemplo em PDF.
Security Report
Zero Trust Report
ATT&CK Report
O Infection Monkey pode ser um grande aliado em assessments de primeiro nível, realizando todo o trabalho a partir de um botão de START!
Obviamente esta solução jamais irá substituir um trabalho de resiliência completo com profissionais experientes e especialistas nas soluções que compõem o ambiente a ser testado. São esses profissionais que são capazes de “tirar coelhos da cartola” quando normalmente não se vê qualquer possibilidade de uma escalação de privilégio. 🐇