Uma ferramenta CLI para extrair vulnerabilidades de relatórios PDF de segurança usando LLMs (Large Language Models).
Ferramenta para automatizar a extração, estruturação e conversão de vulnerabilidades de relatórios PDF dos scanners OpenVAS e Tenable WAS, utilizando PLN e LLMs como GPT-4.1. Permite criar datasets padronizados para gestão de riscos e aplicações em aprendizado de máquina.
- Extração automática de vulnerabilidades de PDFs
- Remoção de duplicatas baseada no nome da vulnerabilidade
- Suporte a múltiplos provedores de LLM (OpenAI, Groq, etc.)
- Configuração via arquivo JSON
- Interface de linha de comando (CLI)
- Processamento em chunks para documentos grandes
- Conversão para CSV/XLSX/TSV
- Tratamento robusto de erros
- Clone ou baixe os arquivos
git clone <repositório>
cd pdf-vulnerability-extractor- Crie um ambiente virtual (recomendado)
python -m venv venv
venv\Scripts\activate # Windows
# ou
source venv/bin/activate # Linux/Mac- Instale as dependências
pip install -r requirements.txtlangchain- Framework principal para LLMlangchain-openai- Interface para APIs OpenAI/Groqlangchain-community- Loaders e utilitáriosunstructured[pdf]- Processamento de PDFsPyPDF2,pdfplumber- Extração de textopandas- Manipulação de dados
A arquitetura é modular e extensível, permitindo personalização de modelos LLM, perfis de processamento e templates de prompt. Veja exemplos e instruções nos diretórios src/configs/llms, src/configs/profile e src/configs/templates.
Sintaxe:
python main.py <pdf_path> [opções]Principais opções:
--profilePerfil de configuração (ex: openvas, tenable)--LLMModelo LLM a usar (ex: gpt4, llama3)--convertFormato de saída (csv,xlsx,tsv,all)--outputCaminho do arquivo convertido--output-dirDiretório para arquivos convertidos--csv-delimiterDelimitador CSV--csv-encodingCodificação CSV
Exemplos:
python main.py relatorio.pdf --profile openvas --convert csv
python main.py relatorio.pdf --LLM deepseek --convert all --output-dir ./resultadosGera JSON estruturado com campos como Name, description, cvss, severity, solution, port, protocol, references, além de campos específicos para cada scanner. Permite conversão para CSV/XLSX/TSV.
- Erro de modelo: atualize o modelo nas configurações
- Arquivo não encontrado: verifique o caminho do PDF
- API key inválida: revise a chave nas configurações
- Limite de quota: aguarde ou troque de provedor
pdf-vulnerability-extractor/
├── main.py # Script principal
├── requirements.txt # Dependências
├── README.md # Este arquivo
├── src/ # Código fonte modular
│ ├── configs/ # Configurações (LLMs, perfis, templates)
│ ├── converters/ # Conversores de saída
│ └── utils/ # Utilitários de processamento
└── data/ # Dados de entrada e saída
O objetivo geral deste trabalho é desenvolver um método automatizado, baseado em Processamento de Linguagem Natural (PLN) e Large Language Models (LLMs), para construir datasets de vulnerabilidades. Especificamente, propõe-se extrair e estruturar informações a partir de relatórios heterogêneos dos scanners OpenVAS e Tenable WAS, convertendo seus dados não estruturados em um formato padronizado que facilite a gestão de riscos. Com isso, busca-se assegurar consistência entre diferentes ferramentas e reduzir substancialmente o esforço manual. O uso de GPT-4.1 demonstrou-se viável para gerar datasets utilizáveis em modelos de aprendizado de máquina. Além disso, o método contempla futura integração de módulos de anonimização, automação de rotulagem e atualização contínua, visando tornar os datasets seguros, reutilizáveis e representativos.
O método automatiza a extração de vulnerabilidades a partir de relatórios em formato PDF gerados pelos scanners OpenVAS e Tenable WAS. O pipeline é organizado em fases modulares para assegurar a integridade e a consistência dos dados, lidando com a heterogeneidade estrutural e semântica entre as ferramentas:
-
Extração Textual e Divisão (Chunking):
O processo inicia com a leitura do relatório e a extração do conteúdo textual, preservando a fidelidade aos dados originais. O texto é dividido em blocos lógicos (chunks) para manter o contexto de cada vulnerabilidade dentro das limitações de tokens dos modelos de linguagem, sendo utilizados blocos médios de aproximadamente 9.000 caracteres nos experimentos. -
Processamento com Mapeamento Explícito:
Cada bloco é processado por um prompt específico que orienta o LLM (como GPT-4.1) a identificar os campos relevantes (descrição, impacto, solução, referências). Para garantir a padronização, foi implementado um mapeamento explícito no prompt que associa os campos específicos de cada scanner (como Vulnerability Insight do OpenVAS e Risk Information do Tenable WAS) a um conjunto de rótulos generalizados. Campos inexistentes são preenchidos comNULLpara evitar a geração de informações artificiais. -
Pós-processamento e Consolidação:
Os dados extraídos são validados e consolidados. Esta fase inclui a remoção de duplicações, verificação da conformidade sintática e a reconstrução do conjunto completo de vulnerabilidades. Essa etapa permite a análise e contagem final das vulnerabilidades extraídas a partir de diferentes arquivos e fontes de relatórios (OpenVAS e Tenable WAS), resultando em um dataset unificado.
- Python 3.x
- GPT-4.1 (OpenAI API)
- PyPDF2, pdfplumber (extração de texto)
- Pandas (manipulação de dados)
- Ferramentas de automação e scripts customizados
- OpenVAS e Tenable WAS (fontes dos relatórios)
O pipeline proposto foi executado sobre um conjunto de 478 vulnerabilidades originadas de aplicações vulneráveis propositalmente (DVWA, GRAV e OWASP Juice Shop), além de instâncias rodando localmente, incluindo servidores web, bancos de dados, serviços de rede e estações de trabalho, para garantir diversidade de contexto. A extração estruturada com GPT‑4.1, seguida pelos processos de normalização de severidade e deduplicação semântica, resultou nos dados consolidados utilizados nesta análise.
*Figura: Distribuição das vulnerabilidades por nível de severidade padronizado (n = 478)*
- High: 136 (28,5%)
- Medium: 203 (42,5%)
- Low: 25 (5,2%)
- Log: 114 (23,8%)
As severidades Medium e High representam conjuntamente 71% dos achados, evidenciando exposição significativa a riscos críticos e de alta probabilidade de exploração.
As vulnerabilidades mais frequentes segundo o campo Name original do OpenVAS apresentaram alta concentração em problemas de configuração e obsolescência de protocolos SSL/TLS (certificados expirados, suítes criptográficas fracas, falta de PFS, suporte a SSLv3), exposição repetida de serviços legados em claro (FTP, Telnet, VNC, rexec/rlogin/rsh), múltiplas instâncias de dívida técnica em componentes específicos (phpMyAdmin, TWiki, PostgreSQL, Samba e versões obsoletas do PHP), além de achados consolidados de inventário (Services, OS Detection) com elevada cardinalidade.
Após a desduplicação semântica realizada com combinação de correspondência exata de CVE/CPE, o conjunto original foi reduzido de 478 para 294 entradas únicas, uma diminuição de 38,5%. A abordagem eliminou redundâncias por host, mantendo, entretanto, a representatividade global do risco.
Este projeto é fornecido como está, para fins educacionais e de pesquisa.