Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
PersistBD — Code de recherche pour entraîner des adaptateurs permettant aux backdoors d'agents LLM de survivre à un fine-tuning bénin, avec scoring du taux de déclenchement, évaluation SWE-bench et constructeurs de jeux de données. | Kitploit
Outils/GitHubGitHub/uiuc-kang-lab/persistbd
Analyse de MalwareApprentissage AutomatiqueArticles et RechercheApprentissage et ÉducationSécurité de l'IAAttaque Adversariale
GitHubuiuc-kang-lab/persistbd

PersistBD

Code de recherche pour entraîner des adaptateurs permettant aux backdoors d'agents LLM de survivre à un fine-tuning bénin, avec scoring du taux de déclenchement, évaluation SWE-bench et constructeurs de jeux de données.

Voir le dépôt
175il y a 19 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PersistBD

Code pour « Understanding and Enhancing Backdoor Persistency in LLM Agent Post-Training » (Findings of EMNLP 2026).

📄 Article · 🌐 Page du projet · 📦 Jeu de données (accès restreint)

Une porte dérobée implantée dans un modèle avant sa publication est normalement érodée par le fine-tuning bénin qu'exécute un développeur en aval. PersistBD affine un modèle déjà porteur d'une porte dérobée à l'aide d'un petit adaptateur afin que la porte dérobée survive à cet entraînement. Sur Qwen2.5-Coder-7B, le taux de déclenchement (ASR) d'une porte dérobée de base chute de 100 % à 20 % au fil de 3 000 étapes de SFT bénin ; la même porte dérobée affinée avec PersistBD reste à 74 % (76 % après l'étape RL subséquente), avec un taux de résolution bénin comparable à celui de la porte dérobée de base sur SWE-bench Lite (7,7 % contre 6,7 % après SFT ; 9,0 % contre 9,0 % après RL).

Deux propriétés déterminent si une porte dérobée survit au SFT bénin : la force initiale de l'association déclencheur→cible et sa compatibilité de gradient avec les mises à jour bénignes à venir. L'adaptateur conjoint de PersistBD accroît les deux ; l'ablation de l'article montre que chaque terme est nécessaire.

Ce qui est / n'est pas dans ce dépôt

Consultez docs/RELEASE.md pour plus de détails.

Code de la méthode (entraînement de l'adaptateur + fusion)src/persistbd/
Scoreurs de taux de déclenchement, évaluation du taux de résolution, sondes de détectioneval/, src/persistbd/eval_gradient_loss.py
Générateurs de jeux de données + assistants de construction de portes dérobéesdata_processing/
Serveur d'évaluation SWE-bench (patch → récompense)swe_eval_server/
Poids du modèle porteur de la porte dérobéenon publiés
Jeu de données de portes dérobées construit (paires déclencheur + malveillantes)accès restreint : uiuc-kang-lab/PersistBD

Arborescence

src/persistbd/     PersistBD adapters get_delta_{s,c,j}.py, get_combined_model.py (merge),
                   and eval_gradient_loss.py (strength S / compatibility C)
eval/              trigger-rate scorers, eval_swe.py (SWE-bench RR), score_backdoor_logprobs.py
data_processing/   split + backdoor builders (make_*_v4.py, verify_splits_v4.py), the trigger
                   and malicious-pair helpers, and patch_ckpt_config.py
data/              the dataset itself (git-ignored except manifest.json)
configs/           torchtune configs for the developer's benign SFT stage
swe_eval_server/   FastAPI SWE-bench eval server used for RR and RL rewards
examples/slurm/    the jobs as we ran them, as reference templates

Installation

pip install torch transformers peft accelerate datasets pyarrow tqdm wandb vllm
# SWE-bench RR + evaluation server:
pip install -r swe_eval_server/requirements.txt

Données

data/ est ignoré par git, à l'exception de manifest.json. Téléchargez le jeu de données depuis huggingface.co/datasets/uiuc-kang-lab/PersistBD (accès restreint — demandez l'accès), ou reconstruisez-le (la répartition est fixée par la graine 42 dans data/manifest.json) avec les générateurs, exécutés depuis la racine du dépôt :

python data_processing/make_splits_v4.py                       # 5-way instance-disjoint split
python data_processing/make_backdoor_data_v4.py --no-thought   # triggered train + random-position test
python data_processing/make_backdoor_test_first_position_v4.py # paired first-position test
python data_processing/verify_splits_v4.py                     # check the split invariants

Les assistants dans data_processing/ contiennent la chaîne de déclenchement et la commande malveillante ; voir docs/RELEASE.md pour comprendre pourquoi le jeu de données construit est soumis à des restrictions.

Pipeline (à exécuter depuis la racine du dépôt)

# 1. PersistBD — train the joint adapter Δj on a backdoored checkpoint.
#    Defaults reproduce the 7B arm; see the paper's table for the 3B/30B values.
torchrun --nproc_per_node=1 src/persistbd/get_delta_j.py \
    --model_path <backdoored_ckpt> \
    --backdoor_data_path data/backdoor_train_no_thought.jsonl \
    --benign_data_path   data/attacker_train.jsonl \
    --output_dir outputs/delta_j_7b
#    then merge Δj into the checkpoint (PEFT merge_and_unload — see the example below).

# 2. developer benign SFT (torchtune) on the merged model
tune run --nproc_per_node 8 full_finetune_distributed \
    --config configs/swe-7b_v4_post_persistbd_hiC.yaml \
    backdoor_dir=<merged_model> output_dir=outputs/post

# 3. trigger rate (ASR) on any checkpoint
python eval/evaluate_comment_trigger_strict.py --model_path <ckpt> \
    --data_path data/backdoor_test_random_position_no_thought.json

# 4. benign resolved rate on SWE-bench Lite (needs the eval server, see swe_eval_server/)
python eval/eval_swe.py --model_path <ckpt> --server http://localhost:8000

examples/slurm/delta_j_7b_v4.sbatch (entraînement + fusion Δj) et examples/slurm/post_7b_v4_persistbd_hiC.sbatch (SFT bénin) exécutent les étapes 1–2 de bout en bout et s'enchaînent via outputs/delta_j_7b_merged.

Le balayage diagnostique de force/compatibilité (Δs, Δc et leur grille α·Δs + β·Δc) se trouve dans get_delta_s.py, get_delta_c.py et get_combined_model.py.

Nommage : code ↔ article

codearticle
random_position, first_position jeux de testposition aléatoire (principal), première position
--lambda_bd, --lambda_c, --lambda_clλ_bd, λ_c, λ_cl^j
Δs, Δc, Δj (α·Δs + β·Δc)adaptateurs de force / compatibilité / conjoints
S, C dans eval_gradient_loss.pyforce S, compatibilité de gradient C

Remarques

  • Le mode file d'attente de swe_eval_server/ s'intègre à un entraîneur RL externe (verl, non inclus) ; le point de terminaison one-shot POST /evaluate ne nécessite que Docker + SWE-bench. Le serveur se lie à 0.0.0.0 sans authentification et exécute un shell généré par le modèle à l'intérieur de Docker — exécutez-le uniquement sur un réseau de confiance.
  • configs/, examples/slurm/ et les chemins outputs/… qu'ils contiennent sont des modèles ; modifiez les chemins et les directives de cluster pour votre environnement.

Citation

@misc{zhan2026persistbd,
  title = {Understanding and Enhancing Backdoor Persistency
           in LLM Agent Post-Training},
  author = {Zhan, Qiusi and Lyu, Nian and Ding, Stephanie and
            Mehta, Arnav and Canal, Chris and Tabarrok, Connor and
            Davies, Xander and Kang, Daniel},
  year = {2026},
  eprint = {2610.07510},
  archivePrefix = {arXiv},
  primaryClass = {cs.CR},
  url = {https://arxiv.org/abs/2610.07510}
}
Télécharger l’outil