Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
VulnLLM-R — LLM de raciocínio especializado para detecção de vulnerabilidades em código-fonte em C/C++ e Python, com construção de conjuntos de dados, treinamento SFT/DPO e scripts de reprodução de resultados. | Kitploit
Ferramentas/GitHubGitHub/ucsb-mlsec/vulnllm-r
Análise Estática de Código (SAST)Análise de VulnerabilidadesAnálise de CódigoAprendizado de MáquinaPapers e Pesquisa
GitHubucsb-mlsec/vulnllm-r

VulnLLM-R

LLM de raciocínio especializado para detecção de vulnerabilidades em código-fonte em C/C++ e Python, com construção de conjuntos de dados, treinamento SFT/DPO e scripts de reprodução de resultados.

Ver Repositório
37058há 4 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

VulnLLM-R: LLM de Raciocínio Especializado para Detecção de Vulnerabilidades

  • Artigo: arXiv:2512.07533
  • Código e Dados: GitHub
  • Demonstração: Demonstração web
  • Modelo: Modelo 7B
model_size_vs_f1_scatter_01

Ambiente e conjunto de dados

🛠️ Criar ambiente

  • Instale o Git LFS e clone o repositório (os arquivos LFS são baixados automaticamente durante o clone)
root@kitploit:~
git lfs install          # one-time setup
git clone https://github.com/ucsb-mlsec/VulnLLM-R.git
cd VulnLLM-R
# If you cloned before installing Git LFS, run: git lfs pull
  • Crie um novo ambiente conda
root@kitploit:~
conda create -n vulnscan python=3.11
conda activate vulnscan
  • Instale os pacotes necessários
root@kitploit:~
pip install -e . -e ./vulscan/train/LLaMA-Factory -e ./vulscan/model_zoo

Para Reproduzir Nossos Resultados

root@kitploit:~
# generate VulnLLM-R-7B's results
python -m vulscan.test.test --output_dir results/test_data --dataset_path ./datasets/test/function_level/ ./datasets/test/repo_level/ --language python c java --model UCSB-SURFI/VulnLLM-R-7B --requests_per_minute 1000 --save --use_cot --batch_size 4 --tp 2 --vllm --max_tokens 8192 --random_cwe

python -m vulscan.test.test_hf \
      --output_dir results/test_hf \
      --hf_dataset UCSB-SURFI/VulnLLM-R-Test-Data \
      --hf_split repo_level function_level \
      --language c python java \
      --model UCSB-SURFI/VulnLLM-R-7B \
      --save --use_cot --vllm --tp 2

# [optional] generate other models' results with our shell script 
# remember to add your API keys to .env file if you want to run commercial models
# use ./run_test.sh -h for more options
./vulscan/test/run_test.sh -o results/test_data -t 2 # -o means output directory, -t means tensor parallelism
./vulscan/test/run_test.sh -o results/test_data -M o3-mini # -M means model name, which runs only one model.
./vulscan/test/run_test.sh -o results/test_data -M gpt-5.4 -e high # -e sets reasoning effort (e.g., none/low/medium/high/xhigh)
./vulscan/test/run_test.sh -o results/test_data -M claude-opus-4-6 -e high

# [optional] draw plot to compare with other models
python plots/plot_language_comparison_models.py --results-dir results/test_data
python plots/plot_model_size_scatter.py --results-dir results/test_data # Note: Labels may overlap with scatter points. Adjust text positions manually if needed.

Conjuntos de Dados Destilados Existentes

  • Distill-DeepSeek
  • Distill-QwQ

Também fornecemos a versão de raciocínio reduzido dos conjuntos de dados destilados:

  • Reduced-Distill-DeepSeek
  • Reduced-Distill-QwQ

Detalhes Técnicos

📚 Construir conjuntos de dados de treinamento e teste

Combine conjuntos de dados existentes de detecção de vulnerabilidades em nível de função: PrimeVul [1], SecCodePLT [2], Juliet [3], Sven [4], e Arvo [5]. Dentre esses conjuntos, o PrimeVul possui as funções mais complicadas. Criamos dois conjuntos de treinamento: limpo (sem PrimeVul) e ruidoso (com PrimeVul), para que possamos treinar em conjuntos relativamente simples e testar no complexo conjunto PrimeVul. Observe que nomeamos o conjunto de treinamento com PrimeVul como ruidoso não significa que o conjunto seja ruidoso. É um nome relativamente arbitrário que usamos no início.

  • Após baixar todos os conjuntos de dados, vulscan/data_process/data_utils possui um conjunto de scripts para processar e combinar os conjuntos de dados.
    • raw_to_us.py: Combina os dados brutos no nosso conjunto de dados e remove dados redundantes
    • check_cwe_correct.py: Calcula a precisão de cada categoria CWE
    • generate_arvo_raw_data.py: Gera dados brutos estruturados a partir do conjunto de dados arvo
    • arvo_to_us.py: Reformata os dados brutos estruturados do arvo para o formato do nosso conjunto de dados
    • split_good_bad_for_juliet.py: Extrai dados do conjunto de dados bruto Juliet 1.3 e os converte para o formato necessário, formando parte do nosso clean_dataset c
    • add_sven_to_clean_dataset.py: Extrai dados do conjunto de dados Sven, formando parte do nosso clean dataset C
    • sync_large_small.py: Sincroniza as modificações de noisy_dataset/large_train/c para noisy_dataset/small_train/c
    • remove_testing_from_training.py: Adiciona a tag human a cada dado, significando que o ponto foi verificado por humanos e usado como dado de teste -: Adiciona o campo related_cwe ao conjunto de dados.

🤔 Gerar dados de raciocínio para treinamento

Após construir os conjuntos de dados, geraremos dados de raciocínio para nosso conjunto de treinamento. Consultaremos os modelos de raciocínio DeepSeek-r1 e QwQ para gerar os dados de raciocínio e filtrar aqueles com cadeias de raciocínio muito longas. O código para gerar dados de raciocínio está em vulscan/data_process/generate_reasoning e os dados de raciocínio serão salvos em datasets/reasoning_data.

root@kitploit:~
cd vulscan/data_process/generate_reasoning

generate_reasoning/generate.py é o script principal para gerar dados de raciocínio. Para cada ponto de dados, ele gerará n amostras de dados de raciocínio e selecionará aquela com a resposta correta e o menor comprimento. Exemplos de execução com os modelos QwQ e DeepSeek-r1 (usando a API together.AI, que é mais lenta, porém mais estável que a API oficial) são os seguintes:

root@kitploit:~
python generate.py \
--tp 2 \
--dataset_type clean_dataset \
--batch_size 200 \
--n 8 \
--training_set train \
--model_name Qwen/QwQ-32B

# or
python generate.py \
--dataset_type noisy_dataset \
--batch_size 200 \
--n 8 \
--training_set small_train \
--model_name together-deepseek-reasoner \
--together_deepseek

Após gerar os dados de raciocínio brutos, podemos usar outro modelo para resumi-los e torná-los mais curtos sem quebrar a estrutura

root@kitploit:~
python extract_reasoning.py

Podemos filtrar ainda mais os dados de raciocínio com base em um determinado comprimento com generate_reasoning/filter.py; num_processes são alterados de acordo com o seu número de núcleos de CPU.

root@kitploit:~
python filter.py \
--dataset_type noisy_dataset \
--training_set small_train \
--model_name Qwen/QwQ-32B \ 
--filter_input_length 16000 \
--filter_all_length 32000 \
--num_processes 16 \
--filter_correct_only # for filtering wrong predictions
# --model_name together-deepseek-reasoner \

Por fim, precisaremos reformatar os dados de raciocínio gerados para o modelo alvo que treinaremos (Qwen-Instruct).

root@kitploit:~
python reformat_ds.py \
--dataset_type noisy_dataset \
--training_set small_train \
--model_name Qwen/QwQ-32B \
--filter_input_length 16000 \
--filter_all_length 32000 \
--push_to_hub \
--push_to_hub_organization secmlr \
--filter_correct_only 

Para o conjunto de dados DPO:

root@kitploit:~
python generate_dpo.py \
--tp 2 --dataset_type clean_dataset \
--batch_size 200 --n 8 --training_set train \
--model secmlr/VD-QWQ-Clean-8k_qwen2_7B_full_sft_1e-5

🤖 Treinamento SFT e DPO

consulte vulscan/train/README.md para mais detalhes

os resultados serão salvos no diretório results/test_qwen/results.json.

🔍 Testar os modelos treinados

Se você quiser reproduzir nossos resultados, execute o seguinte comando:

root@kitploit:~
# open-source model
python -m vulscan.test.test --output_dir results/one_of_4 \
--dataset_path ./datasets/test/test_clean ./datasets/test/test_primevul_pair \
--language c python --model Qwen/Qwen2.5-7B-Instruct \
--requests_per_minute 100 --save --use_cot \
--use_policy --batch_size 4 --tp 2 --vllm --max_tokens 16384 \
--random_cwe

# api model
python -m vulscan.test.test --output_dir results/one_of_4 \
--dataset_path ./datasets/test/test_clean ./datasets/test/test_primevul_pair \
--language c python --model o3-mini-2025-01-14 \
--requests_per_minute 100 --save --use_cot \
--use_policy --batch_size 4 --max_tokens 16384 --random_cwe

# local saved model
python -m vulscan.test.test --output_dir results/one_of_4 \
--dataset_path ./datasets/test/test_clean ./datasets/test/test_primevul_pair \
--language c python \
--model vulscan/train/result/VD-QWQ-Clean-16k/qwen2_7B_full_sft_1e-5 \
--requests_per_minute 100 --save --use_cot --use_policy \
--batch_size 4 --tp 2 --vllm --max_tokens 16384 --random_cwe

# our model
python -m vulscan.test.test --output_dir results/one_of_4 \
--dataset_path ./datasets/test/test_clean ./datasets/test/test_primevul_pair \
--language c python \
--model secmlr/VD-QWQ-Noisy-Small-8k_qwen2_7B_full_sft_1e-5 --revision aa3235b \
--requests_per_minute 100 --save --use_cot --use_policy \
--batch_size 4 --tp 2 --vllm --max_tokens 16384 \
--random_cwe # whether to randomize the order of cwe and related cwes

Após o teste, as respostas do modelo e o desempenho serão salvos no diretório results/test_data. Se você quiser calcular o desempenho com base nas respostas do modelo, execute o seguinte comando:

root@kitploit:~
python -m vulscan.test.test_existing_json \
--json_file results/test_data/datasets_test_test_clean__cot_c_policy_QwQ-32B-Preview.json # the results file
root@kitploit:~
python generate_constitution.py --model gpt-4o --input_dir results/train --output_dir results/train/constitution

Citação

root@kitploit:~
@article{nie2025vulnllmrspecializedreasoningllm,
      title={VulnLLM-R: Specialized Reasoning LLM with Agent Scaffold for Vulnerability Detection}, 
      author={Yuzhou Nie and Hongwei Li and Chengquan Guo and Ruizhe Jiang and Zhun Wang and Bo Li and Dawn Song and Wenbo Guo},
      year={2025},
      journal={arXiv preprint arXiv:2512.07533},
      url={https://arxiv.org/abs/2512.07533}, 
}
Baixar ferramenta
data_utils.py
  • Os dados combinados serão salvos em
    • datasets/clean_dataset: os dados de treinamento sem PrimeVul
      • datasets/clean_dataset/python contém os dados de SVEN e SecCodePLT
      • datasets/clean_dataset/c contém os dados de Juliet e SVEN
    • datasets/noisy_dataset
      • datasets/noisy_dataset/small_train: Contém os dados de treinamento de PrimeVul e SVEN com CWEs selecionadas ( usamos os dados do PrimeVul neste conjunto como treinamento)
      • datasets/noisy_dataset/large_train: Contém os dados de treinamento de PrimeVul, SVEN e SecCodePLT com mais CWEs (Este conjunto pode ser usado posteriormente para treinar modelos maiores)
      • datasets/noisy_dataset/test: Um pequeno conjunto de teste do PrimeVul verificado por humanos
    • datasets/test
      • datasets/test/test_clean: Os dados de teste de SVEN, SecCodePLT e Juliet; com CWEs OOD que não fazem parte do conjunto de treinamento
      • datasets/test/test_primevul_pair: Os dados de teste originais do PrimeVul
  • Estatísticas do conjunto de dados; pode executar vulscan/data_process/data_utils/get_cwe_stat.py para obter o histograma do conjunto de dados
  • DatasetLinguagemTreinamento/TesteCWE# Benigno# Vulnerávelcomprimento médio
    Limpo (seccodeplt)PythonTreinamento2012811281741
    Limpo (juliet)C/C++Treinamento22171616533689
    Difícil (primevul filtrado)C/C++Treinamento26271729524689
    Contexto Longo (Oss-fuzz)C/C++Treinamento347560412761
    Simples (seccodeplt)PythonTeste24 (6 ood)7474814
    Simples (juliet)C/C++Teste38 (14 ood)3583762575
    Difícil (PrimeVul, SecLLMHolmes)C/C++Teste13 (5 ood)1451524545
    Contexto Longo (Oss-fuzz)C/C++Teste3 (0 ood)032018929
    teste primevul (ruidoso)C/C++Teste56 (34 ood)4214225341