Neste blog post, vamos abordar automação de atividades relacionadas a Pentest. Com a delegação de trabalho automatizável, o analista ganha tempo para realização de testes manuais, análises mais sofisticadas e preparação de relatório final.
Como o nosso amigo Benjamin Franklin falava,“time is money”(talvez um dos fatos de estar estampado na nota de 100 dólares).
Quando pensamos em automatizar tarefas vem em mente “Shell script” ou mesmo o uso do famoso “Expect “, são ótimos para os problemas em que precisamos de uma solução rápida, mas vamos ver outros mares onde podemos ver algo com benefícios diferentes, evitando que este “post” se torne um mero clichê.
Automação para execução de programas
Para automação de tarefas onde temos poder de fogo via comando, podemos passar variáveis por parâmetros “argumentos”, podemos usar o syscall execve() para executar um programa, podemos usar também funções como system(), popen()…
Este exemplo ilustra o uso do popen(), claro que poderia usar o argumento “-p 22” do nmap e filtrar sem usar um programa, mas fica para o aprendizado, este programa faz abstração de uma varredura do nmap, depois filtra os IPs que estão com serviço SSH em Open, então salva em um determinado arquivo de log.
https://github.com/CoolerVoid/C/blob/master/popen_example.c
Mas então vem a pergunta, “em linguagem de alto nível como seria?“.
Em Perl poderia fazer algo como:
#!/usr/bin/perl @array=`/usr/bin/nmap localhost`; foreach(@array) { # aqui poderiamos tratar a saida do comando... print $_; }
Em Ruby:
cmd = IO.popen('/usr/bin/nmap localhost') puts cmd.readlines
Esta só foi uma dica de como automatizar a execução de um comando e tratar sua saída, partindo desse ponto podemos executar outros comandos, criar condições, fazer algo concorrente, enfim fazer o que a criatividade mandar.
Agendando execução de programas
Algo muito importante é agendar a execução de uma ferramenta, testar a segurança periodicamente, para assim gerar novos relatórios.
Para tal feito em algumas linguagens temos alguns recursos:
* Python podemos usar APScheduler.
* Ruby temos o Rufus-Scheduler.
Quem dispõe do uso desta função é o “Accuracy“, mais informações AQUI.
Por que fazer um código para agendar sendo que posso usar o crontab ? Portabilidade é tudo, nada mais inconveniente que fazer uma gambiarra por cliente, lembre-se tempo é dinheiro…
Agilizando na construção da documentação
Uma das partes mais importantes e complexas durante a realização de um Pentest é a consolidação do conteúdo coletado através dos ataques e geração do relatório (exige habilidade de análise e síntese).
Nada mais chato que ficar selecionando colando informação e formatando um relatório, perde-se muito tempo para, pegar a documentação e fazer a correlação, tudo isto é tempo que poderia ser aproveitado.
Bom aqui na CONVISO, como funcionário sou muito feliz em dizer que temos uma solução para isso, temos o CSC para gerência de risco, e para automação de inserção de dados de vulnerabilidades temos os “Drones”.
O que é um Drone ?
Seria um Agente, que atua no processo de automação para canalização de vulnerabilidades para o CSC, atualmente o que ele faz é pegar entradas de ferramentas(seja em XML,TXT,HTML,JSON), logo fazer uma abstração das vulnerabilidades e envia-las para o CSC.
Em suma com o uso de um “Drone” ganha-se tempo no cadastro de vulnerabilidades, o que evidentemente agiliza a entrega da documentação, lembrando que as funcionalidades de um drone estão muito além das funcionalidades apresentadas aqui basta ler na documentação.