Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
VulnLLM-R — LLM di ragionamento specializzato per il rilevamento di vulnerabilità nel codice sorgente in C/C++ e Python, con costruzione di dataset, training SFT/DPO e script per la riproduzione dei risultati. | Kitploit
Strumenti/GitHubGitHub/ucsb-mlsec/vulnllm-r
Analisi Statica del Codice (SAST)Analisi delle VulnerabilitàAnalisi del CodiceMachine LearningPaper e Ricerca
GitHubucsb-mlsec/vulnllm-r

VulnLLM-R

LLM di ragionamento specializzato per il rilevamento di vulnerabilità nel codice sorgente in C/C++ e Python, con costruzione di dataset, training SFT/DPO e script per la riproduzione dei risultati.

Vedi Repository
370584 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

VulnLLM-R: LLM di Ragionamento Specializzato per il Rilevamento di Vulnerabilità

  • Paper: arXiv:2512.07533
  • Codice e Dati: GitHub
  • Demo: Demo web
  • Modello: Modello 7B
model_size_vs_f1_scatter_01

Ambiente e dataset

🛠️ Creare l'ambiente

  • Installare Git LFS e clonare il repository (i file LFS vengono scaricati automaticamente durante la clonazione)
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
  • Creare un nuovo ambiente conda
root@kitploit:~
conda create -n vulnscan python=3.11
conda activate vulnscan
  • Installare i pacchetti richiesti
root@kitploit:~
pip install -e . -e ./vulscan/train/LLaMA-Factory -e ./vulscan/model_zoo

Per Riprodurre i Nostri Risultati

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.

Dataset distillati esistenti

  • Distill-DeepSeek
  • Distill-QwQ

Forniamo anche la versione con ragionamento ridotto dei dataset distillati:

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

Dettagli tecnici

📚 Costruire i dataset di addestramento e test

Unire i dataset esistenti di rilevamento di vulnerabilità a livello di funzione: PrimeVul [1], SecCodePLT [2], Juliet [3], Sven [4], e Arvo [5]. In questi dataset, PrimeVul contiene le funzioni più complesse. Creiamo due set di addestramento: pulito (senza PrimeVul) e rumoroso (con PrimeVul), così possiamo addestrare su dataset relativamente semplici e testare sul complesso dataset PrimeVul. Nota: chiamiamo "rumoroso" il set di addestramento con PrimeVul non perché il dataset sia rumoroso. È un nome relativamente arbitrario che abbiamo usato all'inizio.

  • Dopo aver scaricato tutti i dataset, vulscan/data_process/data_utils contiene una serie di script per elaborare e unire i dataset.
    • raw_to_us.py: Unisce i dati grezzi nel nostro dataset e rimuove i dati ridondanti
    • check_cwe_correct.py: Calcola l'accuratezza per ciascuna categoria CWE
    • generate_arvo_raw_data.py: Genera dati grezzi strutturati dal dataset arvo
    • arvo_to_us.py: Riformatta i dati grezzi strutturati di arvo nel formato del nostro dataset
    • split_good_bad_for_juliet.py: Estrae i dati dal dataset grezzo Juliet 1.3 e li converte nel formato richiesto, che costituisce parte del nostro dataset pulito c
    • add_sven_to_clean_dataset.py: Estrae i dati dal dataset Sven, costituendo parte del nostro dataset pulito C
    • sync_large_small.py: Sincronizza le modifiche di noisy_dataset/large_train/c in noisy_dataset/small_train/c
    • remove_testing_from_training.py: Aggiunge il tag human a ciascun dato, indicando che il punto è stato verificato da un essere umano e utilizzato come dato di test -: Aggiunge il campo related_cwe al dataset.

🤔 Generare i dati di ragionamento per l'addestramento

Dopo aver costruito i dataset, generiamo i dati di ragionamento per il nostro set di addestramento. Interrogheremo i modelli di ragionamento DeepSeek-r1 e QwQ per generare i dati di ragionamento e filtreremo quelli con catene di ragionamento molto lunghe. Il codice per generare i dati di ragionamento si trova in vulscan/data_process/generate_reasoning e i dati di ragionamento verranno salvati in datasets/reasoning_data.

root@kitploit:~
cd vulscan/data_process/generate_reasoning

generate_reasoning/generate.py è lo script principale per generare i dati di ragionamento. Per ogni punto dati, genera n campioni di ragionamento e seleziona quello con la risposta corretta e la lunghezza minore. Esempi di esecuzione con i modelli QwQ e DeepSeek-r1 (usando l'API together.AI, che è più lenta ma più stabile dell'API ufficiale) sono i seguenti:

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

Dopo aver generato i dati di ragionamento grezzi, possiamo usare un altro modello per riassumerli e renderli più corti senza rompere la struttura

root@kitploit:~
python extract_reasoning.py

Possiamo ulteriormente filtrare i dati di ragionamento in base a una certa lunghezza con generate_reasoning/filter.py; num_processes va modificato in base al numero di core della 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 \

Infine, dovremo riformattare i dati di ragionamento generati per il modello target che addestreremo (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 

Per il dataset 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

🤖 Addestramento SFT e DPO

fare riferimento a vulscan/train/README.md per maggiori dettagli

i risultati verranno salvati nella directory results/test_qwen/results.json.

🔍 Testare i modelli addestrati

Se vuoi riprodurre i nostri risultati, puoi eseguire il seguente 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

Dopo il test, le risposte del modello e le prestazioni verranno salvate nella directory results/test_data. Se vuoi calcolare le prestazioni in base alle risposte del modello, puoi eseguire il seguente 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

Citazione

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}, 
}
Scarica lo strumento
data_utils.py
  • I dati uniti verranno salvati in
    • datasets/clean_dataset: i dati di addestramento senza PrimeVul
      • datasets/clean_dataset/python contiene i dati da SVEN e SecCodePLT
      • datasets/clean_dataset/c contiene i dati da Juliet e SVEN
    • datasets/noisy_dataset
      • datasets/noisy_dataset/small_train: Contiene i dati di addestramento da PrimeVul e SVEN con CWE selezionate ( usiamo i dati PrimeVul in questo dataset come addestramento)
      • datasets/noisy_dataset/large_train: Contiene i dati di addestramento da PrimeVul, SVEN e SecCodePLT con più CWE (questo dataset può essere usato in seguito per addestrare modelli più grandi)
      • datasets/noisy_dataset/test: Un piccolo set di test da PrimeVul verificato da esseri umani
    • datasets/test
      • datasets/test/test_clean: I dati di test da SVEN, SecCodePLT e Juliet; con CWE fuori distribuzione (OOD) che non fanno parte del set di addestramento
      • datasets/test/test_primevul_pair: I dati di test originali di PrimeVul
  • Statistiche del dataset; si può eseguire vulscan/data_process/data_utils/get_cwe_stat.py per ottenere l'istogramma del dataset
  • DatasetLinguaggioTrain/testCWE# Benigni# Vulnerab.lunghezza media
    Clean (seccodeplt)PythonTrain2012811281741
    Clean (juliet)C/C++Train22171616533689
    Hard (primevul filtered)C/C++Train26271729524689
    Long Context (Oss-fuzz)C/C++Train347560412761
    Simple (seccodeplt)PythonTest24 (6 ood)7474814
    Simple (juliet)C/C++Test38 (14 ood)3583762575
    Hard (PrimeVul, SecLLMHolmes)C/C++Test13 (5 ood)1451524545
    Long Context (Oss-fuzz)C/C++Test3 (0 ood)032018929
    primevul test (noisy)C/C++Test56 (34 ood)4214225341