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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
refusal-relocates — 거부는 국지화되고, 피해는 재배치되며, 안전 계층은 소수 샘플 파인튜닝 아래에 있다 | Kitploit
도구/GitHubGitHub/js-lee-ai/refusal-relocates
Defensive ToolsVulnerability AnalysisMachine LearningPapers & ResearchAI SecurityAdversarial Attack
GitHubjs-lee-ai/refusal-relocates

refusal-relocates

거부는 국지화되고, 피해는 재배치되며, 안전 계층은 소수 샘플 파인튜닝 아래에 있다

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

거부는 재배치되고, 거부는 국소화되며, 손상은 재배치된다, 소수 샘플 파인튜닝 하의 안전 계층

Code MIT Paper CC BY 4.0 Python 3.10+ CI Stars

빠른 시작 · 사용법 · CLI · 결과 · 재현 · FAQ · 인용


News

  • [2026-09-28] 코드가 공개되었으며, 논문의 표를 재구성하는 실행 기록과 스크립트가 함께 제공됩니다.

Overview

수십 개의 유해한 예시만으로도 정렬된 모델의 유해한 요청 거부 능력을 제거할 수 있습니다. 선행 연구는 안전성을 특정 계층과 방향으로 국소화하며, 이는 발견된 위치를 보호하라는 시사점을 줍니다. 이 저장소는 그 전제를 적응형 공격자의 방식으로 검증합니다. 거부가 복구될 수 있는 위치를 찾아내고, 그 영역을 동결한 뒤 다시 공격하며, 가중치 업데이트를 복구한 다음 공격자가 그것을 확산시키도록 합니다.

이 연구는 세 가지 측정에 기반합니다.

  • 거부는 하나의 깊이에서 복구됩니다. Lockstep 패칭은 깨끗한 모델의 전체 은닉 상태를 특정 계층에서 손상된 모델에 전달하며, prefill과 모든 디코딩 단계에서 이를 수행하고, 거부는 재현 가능한 전이 깊이에서 복구됩니다.
  • 그 깊이를 동결하면 손상이 이동합니다. 매칭된 Llama-3.1-8B 비교에서 계층 0–17을 동결하면 전이가 계층 15에서 계층 27과 28로 이동하며, 제한된 공격 후의 거부율은 0.00에서 0.01로, 깨끗한 모델의 0.92에서 0.96과 대비됩니다.
  • 상위 2개 복구는 확산 업데이트에 무너집니다. 업데이트의 상위 두 특이 방향을 제거하면 네 개의 체크포인트에서 짧은 attention-only 파인튜닝 후 거부가 복구됩니다. 업데이트를 확산시키는 공격자는 상대적 상위 2개 복구를 0.000으로 감소시키며, 75개의 양성 파인튜닝으로 보정된 탐지기는 14개의 복구 실패 중 3개만을 탐지합니다.

이 저장소는 측정과 두 가지 방어를 작은 라이브러리로 제공하며, 논문의 표를 재구성하는 실행 기록과 스크립트도 함께 제공합니다.

한 장으로 보는 기능

왼쪽, 깨끗한 모델과 손상된 모델이 공유 토큰에서 실행되고 깨끗한 은닉 상태가 특정 계층에서 손상된 모델에 패치됩니다. 오른쪽, 계층 0에서 17을 동결한 상태로 공격이 반복되고 제한된 체크포인트에서 패칭이 다시 실행됩니다

(a) Lockstep 활성화 패칭은 prefill과 각 디코딩 단계에서 손상된 모델의 계층 출력을 깨끗한 상태로 덮어씁니다. (b) 매칭된 Llama 공격에서 계층 0–17을 동결하면 반천장 전이가 15에서 27–28로 이동합니다.

빠른 시작```bash

pip install "git+https://github.com/js-lee-AI/refusal-relocates.git"

## 주요 기능

- **다중 소스 수집**: Shodan, FOFA, Hunter, Quake, ZoomEye, Censys, 0.zone, DayDayMap, 그리고 사용자 정의 API를 지원합니다.
- **다중 엔진 스캐너**: Xray, Nuclei, Goby, Afrog, Wappalyzer, Ez, Vscan, and custom engines을 지원합니다.
- **자동화된 워크플로우**: 수집 → 중복 제거 → 스캔 → 결과 저장까지 자동화된 파이프라인을 제공합니다.
- **유연한 설정**: YAML 기반 설정으로 API 키, 스캔 옵션, 필터 규칙을 관리합니다.
- **결과 내보내기**: 결과를 CSV, JSON, HTML 형식으로 내보낼 수 있습니다.
- **확장 가능한 아키텍처**: 새로운 소스와 스캐너를 쉽게 추가할 수 있는 플러그인 시스템을 제공합니다.

## 설치

### 요구 사항

- Python 3.8+
- pip
- Git

### 소스에서 설치

```bash
git clone https://github.com/adysec/ARL.git
cd ARL
pip install -r requirements.txt

Docker로 설치

docker pull adysec/arl
docker run -d -p 5003:5003 --name arl adysec/arl

빠른 시작

  1. 설정 파일 편집

    config.yaml 파일을 열고 API 키와 스캔 옵션을 설정합니다.

    shodan:
      api_key: "YOUR_SHODAN_API_KEY"
    fofa:
      email: "YOUR_FOFA_EMAIL"
      api_key: "YOUR_FOFA_API_KEY"
    
  2. ARL 실행

    python arl.py
    
  3. 웹 인터페이스 접속

    브라우저에서 http://localhost:5003을 열고 지침을 따릅니다.

사용법

명령줄 인터페이스

python arl.py --help

웹 인터페이스

웹 인터페이스는 다음을 제공합니다:

  • 실시간 스캔 진행 상황
  • 결과 시각화
  • 작업 관리
  • 설정 관리

설정

config.yaml 파일은 다음 섹션으로 구성됩니다:

  • sources: API 키와 수집 소스 설정
  • scanners: 스캐너 엔진과 옵션 설정
  • filters: 중복 제거 및 필터 규칙
  • output: 내보내기 형식과 경로

기여

기여를 환영합니다! 풀 리퀘스트를 제출하기 전에 기여 가이드라인을 읽어주세요.

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

감사의 글

  • Shodan
  • FOFA
  • Nuclei
  • Xray```python import numpy as np import refusal

rng = np.random.default_rng(0) A = rng.standard_normal((16, 512)) / 512 ** 0.5 # LoRA factors of one module, rank 16 B = rng.standard_normal((512, 16)) / 16 ** 0.5 for name, decay in [("ordinary", 0.5), ("spread", 1.0)]: b = B * decay ** np.arange(16) # energy in a few directions, or spread flat before, after = refusal.update_stats(A, b), refusal.update_stats(*refusal.remove_top_k(A, b, k=2)) print(f"{name:8s} PR/r {before['pr_over_r']:.2f} top-2 energy {before['top2_energy_fraction']:.2f}" f" norm left after top-2 removal {after['unscaled_norm'] / before['unscaled_norm']:.2f}")

ordinary PR/r 0.10 top-2 energy 0.94 norm left after top-2 removal 0.24

spread PR/r 0.94 top-2 energy 0.18 norm left after top-2 removal 0.90

일반적인 파인튜닝은 업데이트의 대부분을 몇 개의 특이 방향에 집중시키므로, 상위 두 개를 제거하면 대부분이 제거된다. 분산된 업데이트는 평탄한 스펙트럼을 가지므로, 동일한 제거를 해도 대부분이 그대로 남는다. LoRA 랭크에 대한 참여율인 PR/r은 논문의 스펙트럼 탐지기의 점수이기도 하다.

이것은 CPU에서 약 1초 만에 실행되며 아무것도 다운로드하지 않는다. 동일한 코드는 [`examples/quickstart.py`](https://github.com/js-lee-ai/refusal-relocates/blob/main/examples/quickstart.py)에 있으며, CI는 모든 푸시에서 이를 실행한다.

실제 체크포인트를 학습, 패치 및 평가하려면 `models` 추가 기능을 설치한다.```bash
pip install "refusal-relocates[models] @ git+https://github.com/js-lee-AI/refusal-relocates.git"
installaddsenough for
pip install "git+https://github.com/js-lee-AI/refusal-relocates.git"numpy스펙트럼 코어, top-k 제거, 탐지기, 거부 스코어러, refusal 명령
pip install "refusal-relocates[models] @ git+https://github.com/js-lee-AI/refusal-relocates.git"torch, transformers, peft, accelerate, safetensors, scikit-learn, datasets모델 학습, 락스텝 패칭, 프로브 및 평가
git clone 후 pip install -e ".[models,test]"pytestexperiments/, records/ 및 tests/

Python 3.11.5, PyTorch 2.10.0, Transformers 4.57.3 및 PEFT 0.18.0에서 테스트되었습니다. 모델은 CUDA 장치에서 bfloat16으로 로드됩니다.

사용법

손상된 체크포인트를 레이어별로 패치하기```python

import refusal

data = refusal.load_data("data/prompt_sets.json") # built by refusal prepare, see below prompts = data["advbench"][:40] clean, tokenizer = refusal.load_model("meta-llama/Llama-3.1-8B-Instruct") attacked, _ = refusal.load_model("meta-llama/Llama-3.1-8B-Instruct", adapter="runs/attack/adapter")

for layer in [6, 9, 12, 15, 18]: responses = refusal.lockstep_generate(clean, attacked, tokenizer, prompts, layer=layer) print(layer, sum(refusal.is_refusal(r) for r in responses) / len(prompts))

두 모델은 동일한 토큰을 읽으며, 선택된 레이어에서 손상된 모델의 출력이 깨끗한 모델의 출력으로 대체된다. `refusal patch`는 하한, 상한 및 두 개의 대조군을 포함한 전체 측정을 실행하고, perplexity 게이트와 Llama-Guard로 일관된 거부를 점수화하며, 전환 깊이를 보고한다.

### GPU 없이 어댑터 복구 및 점수화```python
import refusal

stats = refusal.update_stats(A, B)                 # one module, A is rank x in and B is out x rank
A2, B2 = refusal.remove_top_k(A, B, k=2)           # the top-two repair, as new LoRA factors
result = refusal.calibrate_detector(benign_scores, attack_scores, budget=0.05)

어댑터의 detector score는 attention projection들에 대해 평균한 PR/r이며, refusal spectra는 저장된 어댑터로부터 이를 CPU에서 계산한다.

API 한눈에 보기

도구 다운로드