Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PersistBD — LLM 에이전트 백도어가 정상적인 파인튜닝 후에도 살아남도록 만드는 어댑터를 훈련하기 위한 연구 코드로, 트리거 비율 점수 산정, SWE-bench 평가, 데이터셋 빌더를 포함합니다. | Kitploit
도구/GitHubGitHub/uiuc-kang-lab/persistbd
Malware AnalysisMachine LearningPapers & ResearchLearning & EducationAI SecurityAdversarial Attack
GitHubuiuc-kang-lab/persistbd

PersistBD

LLM 에이전트 백도어가 정상적인 파인튜닝 후에도 살아남도록 만드는 어댑터를 훈련하기 위한 연구 코드로, 트리거 비율 점수 산정, SWE-bench 평가, 데이터셋 빌더를 포함합니다.

저장소 보기
141일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PersistBD

"Understanding and Enhancing Backdoor Persistency in LLM Agent Post-Training" (EMNLP 2026 Findings) 논문의 코드입니다.

📄 논문 · 🌐 프로젝트 페이지 · 📦 데이터셋 (gated)

릴리스 전에 모델에 심어진 백도어는 일반적으로 다운스트림 개발자가 실행하는 정상적인 파인튜닝에 의해 약화됩니다. PersistBD는 이미 백도어가 심어진 모델을 작은 어댑터로 정제하여 그 백도어가 해당 학습에서도 살아남도록 합니다. Qwen2.5-Coder-7B에서, 기본 백도어의 트리거 비율(ASR)은 3,000 스텝의 정상 SFT 동안 100%에서 **20%**로 떨어지지만, 동일한 백도어를 PersistBD로 정제하면 **74%**를 유지합니다(이어지는 RL 단계 이후 76%). 정상 해결률은 SWE-bench Lite에서 기본 백도어와 일치합니다 (SFT 후 7.7% vs 6.7%; RL 후 9.0% vs 9.0%).

백도어가 정상 SFT에서 살아남는지를 좌우하는 두 가지 속성이 있습니다: 트리거→타깃 연관의 초기 강도와, 앞으로 올 정상 업데이트와의 그래디언트 호환성입니다. PersistBD의 결합 어댑터는 이 둘 모두를 증가시키며, 논문의 절제 실험은 각 항이 필수적임을 보여줍니다.

이 저장소에 있는 것 / 없는 것

자세한 내용은 docs/RELEASE.md를 참고하세요.

방법 코드 (어댑터 학습 + 병합)src/persistbd/
트리거 비율 스코어러, 해결률 평가, 탐지 프로브eval/, src/persistbd/eval_gradient_loss.py
데이터셋 빌더 + 백도어 구성 헬퍼data_processing/
SWE-bench 평가 서버 (패치 → 보상)swe_eval_server/
백도어가 심어진 모델 가중치미공개
구축된 백도어 데이터셋 (트리거 + 악성 쌍)gated: uiuc-kang-lab/PersistBD

레이아웃

src/persistbd/     PersistBD 어댑터 get_delta_{s,c,j}.py, get_combined_model.py (병합),
                   그리고 eval_gradient_loss.py (강도 S / 호환성 C)
eval/              트리거 비율 스코어러, eval_swe.py (SWE-bench RR), score_backdoor_logprobs.py
data_processing/   분할 + 백도어 빌더 (make_*_v4.py, verify_splits_v4.py), 트리거
                   및 악성 쌍 헬퍼, 그리고 patch_ckpt_config.py
data/              데이터셋 자체 (manifest.json을 제외하고 git-ignored)
configs/           개발자의 정상 SFT 단계를 위한 torchtune 설정
swe_eval_server/   RR 및 RL 보상에 사용되는 FastAPI SWE-bench 평가 서버
examples/slurm/    우리가 실행한 그대로의 작업들, 참조 템플릿으로

설치

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

데이터

data/는 manifest.json을 제외하고 git-ignored입니다. 데이터셋을 huggingface.co/datasets/uiuc-kang-lab/PersistBD 에서 다운로드하거나(gated — 접근 요청 필요), 빌더로 재구축하세요(분할은 data/manifest.json의 시드 42로 고정됨). 저장소 루트에서 실행합니다:

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

data_processing/의 헬퍼들이 트리거 문자열과 악성 명령을 담고 있습니다. 구축된 데이터셋이 gated인 이유는 docs/RELEASE.md를 참고하세요.

파이프라인 (저장소 루트에서 실행)

# 1. PersistBD — 백도어가 심어진 체크포인트에서 결합 어댑터 Δj를 학습합니다.
#    기본값은 7B arm을 재현합니다. 3B/30B 값은 논문의 표를 참고하세요.
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
#    그런 다음 Δj를 체크포인트에 병합합니다 (PEFT merge_and_unload — 아래 예시 참고).

# 2. 개발자 정상 SFT (torchtune)를 병합된 모델에 수행
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. 임의의 체크포인트에서 트리거 비율 (ASR)
python eval/evaluate_comment_trigger_strict.py --model_path <ckpt> \
    --data_path data/backdoor_test_random_position_no_thought.json

# 4. SWE-bench Lite에서 정상 해결률 (평가 서버 필요, swe_eval_server/ 참고)
python eval/eval_swe.py --model_path <ckpt> --server http://localhost:8000

examples/slurm/delta_j_7b_v4.sbatch (Δj 학습 + 병합)와 examples/slurm/post_7b_v4_persistbd_hiC.sbatch (정상 SFT)는 1–2 단계를 처음부터 끝까지 실행하고 outputs/delta_j_7b_merged를 통해 연결됩니다.

진단용 강도/호환성 스윕 (Δs, Δc 및 이들의 α·Δs + β·Δc 그리드)은 get_delta_s.py, get_delta_c.py, get_combined_model.py에 있습니다.

명명: 코드 ↔ 논문

codepaper
random_position, first_position 테스트 세트random-position (주), first-position
--lambda_bd, --lambda_c, --lambda_clλ_bd, λ_c, λ_cl^j
Δs, Δc, Δj (α·Δs + β·Δc)강도 / 호환성 / 결합 어댑터
eval_gradient_loss.py의 S, C강도 S, 그래디언트 호환성 C

참고

  • swe_eval_server/의 큐 모드는 외부 RL 트레이너(verl, 미포함)와 통합됩니다. 일회성 POST /evaluate 엔드포인트는 Docker + SWE-bench만 필요합니다. 서버는 인증 없이 0.0.0.0에 바인딩되며 Docker 내부에서 모델이 생성한 셸을 실행합니다 — 신뢰할 수 있는 네트워크에서만 실행하세요.
  • configs/, examples/slurm/, 그리고 그 안의 outputs/… 경로는 템플릿입니다. 사용 환경에 맞게 경로와 클러스터 지시문을 수정하세요.

인용

@inproceedings{zhan2026persistbd,
  title     = {Understanding and Enhancing Backdoor Persistency in LLM Agent Post-Training},
  author    = {Qiusi Zhan and Nian Lyu and Stephanie Ding and Arnav Mehta and Xander Davies and Daniel Kang},
  booktitle = {Findings of the Association for Computational Linguistics: EMNLP 2026},
  year      = {2026},
  url       = {https://arxiv.org/abs/2610.07510}
}
도구 다운로드