Para os penetration testers que buscam uma plataforma de testes Linux estável e suportada, a indústria concorda que a Kali é a melhor plataforma. No entanto, se você preferir usar o Windows como sistema operacional, talvez tenha notado que não existia uma plataforma que valha a pena. Como pesquisadores de segurança, cada um de nós provavelmente passou horas personalizando um ambiente de trabalho do Windows pelo menos uma vez e todos usamos as mesmas ferramentas, utilitários e técnicas durante o envolvimento do cliente. Portanto, manter um ambiente personalizado enquanto mantém todos os nossos conjuntos de ferramentas atualizados pode ser uma tarefa monótona para todos. Reconhecendo isso, criamos uma distribuição do Windows focada no suporte a penetration testers.
Nascida da nossa popular VM FLARE, que se concentra em engenharia reversa e análise de malware, a VM Completa Ofensiva (“Commando VM”) vem com scripts automatizados para ajudar cada um de vocês a construir seu próprio ambiente de testes de penetração e facilitar o processo de provisionamento e implementação de VM . Esta postagem de blog tem como objetivo discutir os recursos do Commando VM, instruções de instalação e um exemplo de uso da plataforma. Vá até o Github para encontrar o Commando VM.
Link: https://github.com/fireeye/commando-vm
Sobre Commando VM
Os penetration testers costumam usar suas próprias variantes de máquinas Windows ao avaliar os ambientes do Active Directory. Commando VM foi projetado especificamente para ser a plataforma para executar esses testes de penetração interna. Os benefícios de usar uma máquina Windows incluem suporte nativo para Windows e Active Directory, usando sua VM como uma área de preparo para estruturas C2, navegando em compartilhamentos mais facilmente (e interativamente) e usando ferramentas como PowerView e BloodHound sem ter que se preocupar em colocar arquivos de saída nos ativos do cliente.
O Commando VM usa pacotes Boxstarter, Chocolatey e MyGet para instalar todo o software e fornece muitas ferramentas e utilitários para suportar testes de penetração. Esta lista inclui mais de 140 ferramentas, incluindo:
Nmap
Wireshark
Covenant
Python
Go
Remote Server Administration Tools
Sysinternals
Mimikatz
Burp-Suite
x64dbg
Hashcat
Com essa versatilidade, o Commando VM pretende ser a máquina Windows de fato para todos os penetration testers.
Os versáteis conjuntos de ferramentas incluídos no Commando VM fornecem as ferramentas necessárias para auditar suas redes e melhorar suas capacidades de detecção. Com uma biblioteca de ferramentas ofensivas, fica mais fácil para as equipes acompanharem as ferramentas ofensivas e as tendências de ataque.
Instalação
Como o FLARE VM, recomendamos que você use o Commando VM em uma máquina virtual. Isso facilita a implantação e fornece a capacidade de reverter para um estado limpo antes de cada compromisso.
Presumimos que você tenha experiência em configurar o seu próprio ambiente virtualizado. Comece criando uma nova máquina virtual (VM) com estas especificações mínimas:
60 GB de espaço em disco
2 GB de memória
Em seguida, execute uma nova instalação do Windows. O Commando VM foi projetado para ser instalado no Windows 7 Service Pack 1 ou no Windows 10, com o Windows 10, permitindo a instalação de mais recursos.
Quando a instalação do Windows for concluída, recomendamos que você instale suas ferramentas de convidado da VM específicas (por exemplo, VMware Tools) para permitir recursos adicionais, como copiar / colar e redimensionar a tela. A partir desse ponto, todas as etapas de instalação devem ser executadas em sua VM.
Verifique se o Windows está completamente atualizado com os patches mais recentes usando o utilitário Windows Update. Nota: talvez você precise verificar as atualizações novamente após a reinicialização.
Recomendamos que você tire um snapshot de sua VM nesse ponto para ter uma instância limpa do Windows antes da instalação.
Navegue até uma das seguintes URLs e faça o download do repositório Commando VM compactado em sua VM:
https://github.com/fireeye/commando-vm
http://gocommando.info
Siga estas etapas para concluir a instalação do Commando VM:
Descompacte o repositório Commando VM em um diretório de sua escolha.
Inicie uma nova sessão do PowerShell com privilégios elevados, Commando VM tenta instalar software adicional e modificar as configurações do sistema; portanto, privilégios escalados são necessários para a instalação.
No PowerShell, altere o diretório para o local onde você descompactou o repositório Commando VM.
Altere a política de execução do PowerShell para irrestrita, executando o seguinte comando e respondendo “Y” quando solicitado pelo PowerShell:
Set-ExecutionPolicy unrestricted
Execute o script de instalação install.ps1. Você será solicitado a inserir a senha do usuário atual. O Commando VM precisa da senha do usuário atual para fazer o login automaticamente após uma reinicialização.
Opcionalmente, você pode especificar a senha do usuário atual passando a “-password <current_user_password>” na linha de comando.
Figure 2: Install script running
O restante do processo de instalação é totalmente automatizado. Dependendo da velocidade da sua Internet, toda a instalação pode demorar entre 2 a 3 horas para terminar. A VM reinicializará várias vezes devido aos vários requisitos de instalação de software. Depois que a instalação for concluída, o prompt do PowerShell permanecerá aberto, esperando que você pressione qualquer tecla antes de sair. Depois de concluir a instalação, você será apresentado com o seguinte ambiente de área de trabalho:
Figure 3: Desktop environment after install
Neste ponto, recomenda-se reinicializar a máquina para garantir que as alterações na configuração final entrem em vigor. Após a reinicialização, você terá instalado com sucesso o Commando VM. Recomendamos que você desligue a VM e, em seguida, tire outro snapshot para salvar um estado de VM limpo para uso em futuros compromissos.
Prova de conceito
Commando VM é construído com o foco principal de apoiar compromissos internos. Para demonstrar os recursos de Commando VMs, criamos um exemplo de implantação do Active Directory. Esse ambiente de teste pode ser planejado; no entanto, representa configurações incorretas comumente observadas pela Red Team da Mandiant em ambientes reais.
Começamos com o Commando VM executando varreduras de rede com o Nmap.
Figure 4: Nmap scan using Commando VM
Procurando por uma “alternativa/situação fácil” que envolva baixa qualidade de configuação, encontramos uma máquina host executando um servidor web interessante na porta TCP 8080, uma porta comumente usada para fins administrativos. Usando o Firefox, podemos nos conectar ao servidor via HTTP através da porta TCP 8080.
Figure 5: Jenkins server running on host
Vamos iniciar o Intruder do Burp Suite e tentar forçar o login. Navegamos até o nosso diretório Wordlists na pasta Desktop e selecionamos um arquivo de senha arbitrário dentro da SecLists.
Figure 6: SecLists password file
Depois de configurar o Burp’s Intruder e analisar as respostas, vemos que a senha “admin” nos concede acesso ao console do Jenkins. Clássico.
Figure 7: Successful brute-force of the Jenkins server
É sabido que os servidores Jenkins vêm instalados com um console de script e são executados como NT AUTHORITY \ SYSTEM nos sistemas Windows por padrão. Podemos aproveitar isso e obter execução de comando privilegiado.
Figure 8: Jenkins Script Console
Agora que temos a execução do comando, temos muitas opções para a próxima etapa. Por enquanto, investigaremos a caixa e procuraremos arquivos confidenciais. Através da navegação diretórios de usuários, encontramos um arquivo de senha e uma chave SSH privada.
Figure 9: File containing password
Vamos tentar validar essas credenciais no controlador de domínio usando o CredNinja.
Figure 10: Valid credentials for a domain user
Excelente, agora que sabemos que as credenciais são válidas, podemos executar o CredNinja novamente para ver em quais hosts o usuário pode ter permissões administrativas locais.
Figure 11: Running CredNinja to identify local administrative permissions
Parece que só temos permissões administrativas sobre o host anterior do Jenkins, 192.168.38.104. Não se preocupe, agora que temos credenciais de domínio válidas, podemos começar as atividades de reconhecimento contra o domínio. Ao executar o comando runas /netonly /user:windomain.local\niso.sepersky cmd.exe e digitar a senha, teremos um prompt de comando autenticado em funcionamento.
Figure 12: cmd.exe running as WINDOMAIN\niso.sepersky
A Figura 12 mostra que podemos listar com êxito o conteúdo do compartilhamento de arquivo SYSVOL no controlador de domínio, confirmando nosso acesso ao domínio. Agora iniciamos o PowerShell e iniciamos a caça de compartilhamento com o PowerView.
Figure 13: PowerView’s Invoke-ShareFinder output
Também estamos curiosos sobre quais grupos e permissões estão disponíveis para a conta de usuário comprometida. Vamos usar o módulo Get-DomainUser da estrutura de pós-exploração PowerView para recuperar detalhes do usuário do Active Directory. Observe que o Commando VM usa a ramificação “dev” do PowerView por padrão.
Figure 14: Get-DomainUser win
Também queremos verificar se há mais acesso usando a chave SSH encontrada anteriormente. Olhando para as nossas varreduras de portas, identificamos um host com a porta TCP 22 aberta. Vamos usar o MobaXterm e ver se podemos usar o SSH nesse servidor.
Figure 15: SSH with MobaXterm
Nós acessamos o servidor SSH e também encontramos um caminho fácil para fazer o root do servidor. No entanto, não conseguimos escalar privilégios de domínio com esse acesso. Vamos voltar a compartilhar a caça, começando com o compartilhamento de software oculto que vimos anteriormente. Usando o Gerenciador de arquivos, é fácil navegar pelos compartilhamentos no domínio.
Figure 16: Browsing shares in windomain.local
Usando a saída do comando Invoke-ShareFinder do PowerView, começamos a vasculhar os compartilhamentos e procurar informações confidenciais. Depois de passar por muitos arquivos, finalmente encontramos um arquivo config.ini com credenciais codificadas.
Figure 17: Identifying cleartext credentials in configuration file
Usando o CredNinja, validamos essas credenciais no controlador de domínio e descobrimos que temos privilégios administrativos locais.
Figure 18: Validating WINDOMAIN\svcaccount credentials
Vamos verificar as associações de grupo para este usuário.
Figure 19: Viewing group membership of WINDOMAIN\svcaccount
Sorte nossa, somos membros do grupo “Domain Admins” !
Conclusão final
Todas as ferramentas usadas na demonstração são instaladas na VM por padrão, assim como muitas outras. Para obter uma lista completa de ferramentas e para o script de instalação, consulte o repositório Commando VM Github. Esperamos abordar o feedback dos usuários, adicionar mais ferramentas e recursos e criar muitos aprimoramentos.
Acreditamos que essa distribuição se tornará a ferramenta padrão para os penetration testers e esperamos continuar aprimorando e desenvolvendo a plataforma de ataque do Windows.
Este artigo é uma tradução de: https://www.fireeye.com/blog/threat-research/2019/03/commando-vm-windows-offensive-distribution.html