
Laboratório local de testes de penetração usando docker-compose.
Não estou mais desenvolvendo ativamente isso, mas vou corrigir bugs e analisar issues e pull requests. Ajuda é apreciada :)
Este laboratório local de pentest utiliza docker compose para levantar vários serviços vítimas e um serviço atacante rodando Kali Linux. Se você executar este laboratório pela primeira vez, levará algum tempo para baixar todas as diferentes imagens docker.
Comandos executados:
./lab.sh --help./lab.sh --check-dependencies./lab.sh --up --all-services./lab.sh --info./lab.sh --overview allssh root@kali -o "UserKnownHostsFile /dev/null"./lab.sh --downO laboratório deve funcionar imediatamente se todas as dependências necessárias estiverem instaladas. Na inicialização, o laboratório executará uma verificação de dependências.
git clone https://github.com/oliverwiegers/pentest_lab
cd pentest_lab
./lab.sh -u
Por padrão, o laboratório iniciará todos os serviços vítimas e um serviço red team. Outros serviços podem ser iniciados e adicionados. Mais informações sobre isso abaixo.
Para mais informações de uso, considere ler a mensagem de ajuda exibida por ./lab.sh -h | --help.
O laboratório tem uma verificação de dependências embutida que é executada na inicialização. Isso também pode ser executado manualmente com ./lab.sh -C.
Para facilidade de uso, uma interface Heimdall foi adicionada, exposta em localhost:7000. Todos os serviços que estão expostos à sua máquina local e podem ser acessados via navegador estão listados lá. As alterações feitas na interface são automaticamente salvas em ./etc/heimheimdall. Este diretório é então transformado em ./etc/heimdall.tar ao parar o laboratório. Este arquivo tar será extraído na inicialização. Tanto ./etc/heimdall.tar quanto ./etc/heimdall são ignorados pelo git por padrão. O papel de parede usado pode ser encontrado aqui.
Este laboratório conhece os seguintes quatro tipos de serviços.
O serviço red team padrão - o serviço Kali - é uma instância Kali bastante básica. No entanto, o metapacote kali-tools-web está instalado. Para um laboratório de teste de aplicações web, as ferramentas básicas de teste web parecem úteis. Isso pode ser alterado editando o Dockerfile a partir do qual a imagem é construída. Ele está localizado em ./dockerfiles/kali. O serviço Kali instala estes dotfiles por padrão. Isso também pode ser alterado ajustando o Dockerfile.
Embora os serviços de monitoramento também sejam serviços blue_team, eles são separados em uma categoria diferente.
Esta pilha fornece funcionalidade de observação de logs e desempenho.
Para mais informações sobre instâncias individuais, veja abaixo.
Atualmente, a configuração de monitoramento consiste nos seguintes serviços:
A instância do Grafana fornece dois dashboards: um para logs e outro para métricas.
Eles são bastante básicos. Pode-se adicionar mais adicionando dashboards através da interface do Grafana. Esses dashboards serão perdidos quando o volume do Grafana for deletado. Para adicionar dashboards permanentemente, consulte a Documentação de Provisionamento do Grafana. Os diretórios usados para provisionamento estão localizados em ./etc/grafana/.
Para alterar configurações através da interface do Grafana, deve-se fazer login como admin. As credenciais são as padrão: admin:admin. #hacktheplanet
Para que o Loki possa coletar logs do Docker, este laboratório instala o Loki Docker Driver como plugin do Docker.
Para que o Prometheus possa acessar métricas de desempenho dos contêineres em execução no cluster, o cAdvisor é usado.
Para adicionar serviços adicionais, é necessário um pouco de conhecimento de arquivos docker-compose.yml. O arquivo docker-compose.yml na raiz deste repositório é gerado automaticamente quando o laboratório é iniciado. Esse processo usa os arquivos yaml localizados em ./etc/services.
➜ pentest_lab tree ./etc/services
./etc/services
├── blue_team
│ └── endlessh.yml
├── default.yml
├── monitoring
│ ├── cadvisor.yml
│ ├── grafana.yml
│ ├── loki.yml
│ └── prometheus.yml
├── red_team
└── victim
├── beginner
│ ├── bwapp.yml
│ ├── dvwa.yml
│ ├── hackazon.yml
│ ├── tiredful.yml
│ ├── webgoat.yml
│ └── xvwa.yml
├── expert
│ └── juice-shop.yml
└── intermediate
└── ninjas.yml
Quais serviços serão iniciados são controlados invocando ./lab.sh com as opções correspondentes. Para desabilitar permanentemente um serviço, remova a extensão .yml do arquivo.
Um exemplo de um serviço vítima seria:
bwapp:
labels:
class: 'victim'
cluster: 'pentest_lab'
level: 'beginner'
image: raesene/bwapp
ports:
- '8080:80'
networks:
pentest_lab:
ipv4_address: 10.5.0.100
hostname: bwapp
volumes:
- bwapp-data:/var/lib/mysql
Nota: Se um serviço exigir algum tipo de instalação no primeiro uso, use docker inspect <image_name> para descobrir onde a imagem docker armazena os dados e adicione um volume apontando para esse diretório. No exemplo acima, isso é:
volumes:
- bwapp-data:/var/lib/mysql
Isso garante que você não precise configurar o serviço novamente toda vez que reiniciar o laboratório. Mas se você quiser redefinir o laboratório e começar do zero, pode usar ./lab.sh -p | --prune. Isso excluirá todos os recursos pertencentes ao laboratório.
A razão pela qual usamos endereços IP estáticos é que a máquina Kali precisa ter um endereço IP que não mude para simplificar o login SSH. Mais informações na seção Dicas/Truques abaixo.
Se você adicionar serviços e houver informações adicionais que sejam úteis para qualquer pessoa que execute este laboratório, você pode adicionar essas informações em ./etc/services_info. O conteúdo deste arquivo será impresso linha por linha como está executando ./lab.sh -i.
Para uma conexão fácil ao serviço Kali, pode-se adicionar o seguinte ao $HOME/.ssh/cofig:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
Então, em vez de ssh [email protected] -o "UserKnownHostsFile /dev/null", pode-se executar ssh kali.
Para usuários de tmux, o seguinte anexará automaticamente a uma sessão tmux:
Host kali
User root
Hostname 10.5.0.5
UserKnownHostsFile /dev/null
StrictHostKeyChecking accept-new
RequestTTY yes
RemoteCommand tmux -L tmux new-session -As hacktheplanet