Por que docker?
Na area de pentest é quase que um requisito você ter instalado diversas ferramentas que são utilizadas no dia a dia no seu ambiente de trabalho, muitas vezes o profissional opta por usar um sistema operacional que ja tenha tudo ali, sem necessidade de instalar mais nada (KaliLinux por exemplo) justamente para não se preocupar com instalação de programas.
Quem não utiliza Kali é obrigado a instalar TUDO que for usar.
Pare para pensar caso voce tivesse um PC novo, quantos ferramentas você iria baixar? Eu mesmo teria que fazer download de umas 10 ferramentas (wireshark, burpsuite, tcpdump, netcat, ftp, e a lista continua infinitamente). Eu sou preguiçoso e não tenho tempo pra ficar instalando ferramenta, isso sem contar os programas que dependem de outros, ou o pesadelo supremo: o conflitos de versões (pra que tanto python??)
Imagine se voce pegasse cada uma dessas ferramentas e colocasse dentro de uma caixa (uma caixinha mesmo), e essa caixa pudesse ser utilizada em qualquer computador, seja ele linux, windows ou mac, e a melhor parte: essa caixinha pudesse sumir e aparecer quando você quisesse.
Essa caixinha é o docker.
No contexto do docker, essa caixinha se chama container, que na pratica é um sistema operacional encapsulado, que pode ser descartado e recriado a qualquer momento.
Um container é criado a partir de uma imagem, dizendo quais programas ele vai ter instalado, quais diretórios ele tem acesso do seu computador, configurando o container em geral. Essa imagem é descrita em um arquivo chamado por Dockerfile
.
Como docker ajuda no Pentest?
Com o docker, você tem em suas mãos milhares de imagens pré-prontas (disponíveis no site oficial) que já vem com ferramentas instaladas e configuradas devidamente.
Trocou de computador? Sem problema, as imagens que voce criou podem ser utilizadas em qualquer sistema operacional, basta instalar docker.
Quer testar algo que pode te dar problemas, ou até prejudicar o seu sistema operacional? Rode em docker, se der problema voce deleta o container.
Você não precisaria se preocupar com o espaço em disco quando fosse baixar novas ferramentas porque os programas instalados no container não estão no seu sistema, então removendo o container, é como se essa ferramenta nunca tivesse existido.
E caso alguem fosse vasculhar seu computador para ver as coisas que anda fazendo.. não encontraria nada, já que tudo que voce fez foi em um container do docker (que aliás nem existe mais :P)
Como usar o docker?
Primeiro você precisa ter o docker instalado, depois disso ja podemos começar com o primeiro comando do docker:
Esse comando a seguir mostra todos os containers que voce tem, independente se estejam rodando ou não
$ sudo docker ps -a
Provavelmente voce verá que não há nada na lista de containers, o que acha de criarmos um?
Vamos iniciar baixando a imagem do alpine (poderia ser ubuntu, mas escolhi alpine mesmo)
$ sudo docker pull alpine
Agora verifique a imagem do Alpine que você baixou faz parte das suas imagens:
$ sudo docker images
Se sua imagem estiver ai, podemos iniciar o container pelo comando:
$ sudo docker run --name exemplo --rm -it alpine /bin/sh
Se tudo der certo abrira uma shell root para você no terminal, isso significa que deu tudo certo e você está dentro de um container!
Para sair do container basta rodar o comando
$ exit
Vamos detalhar melhor o que cada item desse comando faz…
--name
especifica o nome do container--rm
Deleta o container assim que você sai dele-it
Obtem uma shell interativaalpine /bin/sh
a primeira parte diz qual imagem vamos usar, e a/bin/sh
significa qual comando vamos rodar nele, no caso, queremos o shell
Perceba que você rodou o comando run
com o --rm
, isso significa que tudo que você fez nele, será apagado assim que sair dele, veja os containers que você tem com esse comando:
$ sudo docker ps -a
Se você quer ter um container que não é deletado, basta rodar o mesmo comando, só que sem o --rm
.
Docker para pentest
Agora que você viu como iniciar um container por linha de comando, e também via arquivos
Dockerfile
, vou demonstrar como isso pode ser aplicado para pentest.
No site oficial do Docker, exite uma parte dedicada as imagens do docker, e nela existem milhares de imagens PRONTAS para você dar pull
nelas e começar a usar.
Porém seria muito fácil eu dizer que é só usar as que tem lá, o que acha de criarmos nossa própria imagem?
Primeiro vamos criando nosso Dockerfile
, para dizer o que terá instalado no nosso container.
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl proxychains tor nmap
CMD ["/bin/bash"]
FROM
Demonstra qual imagem você estará se baseandoRUN
Roda comandos em bash, normalmente usado para instalar dependencias. Ele é executado quando o container está sendo criado.CMD
Ele demonstra qual comando será executado quando um container está iniciando (Só pode existir 1 CMD por arquivoDockerfile
)
Esse
Dockerfile
está dizendo que o nosso container será ubuntu, e terá instalado por padrão ocurl
,proxychains
,tor
e onmap
.
Podemos criar o container a partir desse Dockerfile
com o seguinte comando:
$ sudo docker build -t pentest .
Com ele criado, podemos verificar que ele existe na lista dos containers criados:
$ sudo docker ps -a
Se ele estiver nessa lista significa que podemos rodar o comando para iniciá-lo:
$ sudo docker run -it pentest
Conclusão
Agora que você sabe o básico de como começar com o docker no mundo de pentest, vou deixar algumas possibilidades para os curiosos:
- Configurar a vpn diretamente no
Dockerfile
, assim toda vez que você entra no container, entrará na VPN também - Criar
Dockerfile
que faz rotinas de pentest para você (brute force de diretório, brute force de login, scan de portas), de forma automatizada. - Criar um container do tipo C2 ou C&C (command and control) e criar outros containers para serem nodes para testar sua
botnet
.
Acho que você entendeu a ideia: a única limitação é a criatividade.
Autor do post: Vtr