
Um scanner de vulnerabilidades muito bacana
Flan Scan é um scanner de vulnerabilidades de rede leve. Com o Flan Scan você pode facilmente encontrar portas abertas em sua rede, identificar serviços e suas versões, e obter uma lista de CVEs relevantes que afetam sua rede.
Flan Scan é um wrapper sobre o Nmap e o script vulners que transforma o Nmap em um scanner de vulnerabilidades de rede completo. O Flan Scan facilita a implantação do Nmap localmente em um contêiner, o envio de resultados para a nuvem e a implantação do scanner no Kubernetes.
Clone este repositório
Certifique-se de ter o Docker configurado:
$ docker --version
Adicione a lista de endereços IP ou CIDRs que você deseja escanear em shared/ips.txt.
Construa o contêiner:
$ make build
$ make start
Por padrão, o flan cria relatórios em LaTeX; para obter outros formatos, execute:
$ make html
Os formatos adicionais suportados são md (markdown), html e json.
Quando a varredura terminar, você encontrará os relatórios resumindo a varredura em shared/reports. Você também pode ver a saída XML bruta do Nmap em shared/xml_files.
Por padrão, o Flan Scan executa o seguinte comando Nmap:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
A flag -oX adiciona uma versão XML dos resultados da varredura ao diretório /shared/xml_files e a flag -oN - exibe os resultados "normais" do Nmap no console. A flag -v1 aumenta a verbosidade para 1 e a flag -sV executa uma varredura de detecção de serviços (além das varreduras de porta e SYN padrão do Nmap). O --script=vulners/vulners.nse é o script que corresponde aos serviços detectados com CVEs relevantes.
O Nmap também permite executar varreduras UDP e escanear endereços IPv6. Para adicionar essas e outras flags ao comando Nmap do Flan Scan após executar make build, execute o contêiner e passe suas flags do Nmap da seguinte forma:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Atualmente, o Flan Scan suporta o envio de relatórios em LaTeX e arquivos de saída XML brutos do Nmap para um bucket do GCS ou um bucket do AWS S3. O Flan Scan requer 2 variáveis de ambiente para enviar resultados para a nuvem. A primeira é upload, que assume um dos dois valores gcp ou aws. A segunda é bucket, e o valor é o nome do bucket S3 ou GCS para onde os resultados serão enviados. Para definir as variáveis de ambiente, após executar make build, execute o contêiner definindo as variáveis de ambiente da seguinte forma:
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=<gcp or aws> \
-e bucket=<bucket-name> \
-e format=<optional, one of: md, html or json> \
flan_scan
Abaixo estão alguns exemplos para adicionar as chaves de autenticação necessárias do AWS ou GCP como variáveis de ambiente no contêiner. No entanto, isso também pode ser feito com um segredo no Kubernetes que expõe as variáveis de ambiente necessárias ou com outras ferramentas de gerenciamento de segredos.
Copie sua chave privada GCS para uma conta de serviço para o arquivo /shared
$ cp <path-to-local-gcs-key>/key.json shared/
Execute o contêiner definindo a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho para a chave GCS
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=gcp \
-e bucket=<bucket-name> \
-e GOOGLE_APPLICATION_CREDENTIALS=/shared/key.json
-e format=<optional, one of: md, html or json> \
flan_scan
Defina as variáveis de ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY com as variáveis correspondentes para sua conta de serviço S3.
docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=aws \
-e bucket=<s3-bucket-name> \
-e AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
-e AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \
-e format=<optional, one of: md, html or json> \
flan_scan
Ao implantar o Flan Scan em um sistema de orquestração de contêineres, como o Kubernetes, você deve garantir que o contêiner tenha acesso a um arquivo chamado ips.txt no diretório /. No Kubernetes, isso pode ser feito com um ConfigMap que monta um arquivo do seu sistema de arquivos local como um volume que o contêiner pode acessar uma vez implantado. O arquivo kustomization.yaml tem um exemplo de como criar um ConfigMap chamado shared-files. Este ConfigMap é então montado como um volume no arquivo deployment.yaml.
Aqui estão alguns passos fáceis para implantar o Flan Scan no Kubernetes:
ips.txt local em kustomization.yaml e então execute kubectl apply -k ..kubectl get configmap para garantir que o ConfigMap foi criado corretamente.deployment.yaml.kubectl apply -f deployment.yaml para iniciar uma implantação executando o Flan Scan.O Flan Scan deve estar sendo executado no Kubernetes com sucesso!