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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
prompt-injection-firewall — 정규식 규칙과 Gemini 분류기를 통해 프롬프트 인젝션 입력을 차단하고, 봇 응답에서 비밀 정보나 시스템 프롬프트 유출을 잡아내는 2계층 LLM 방화벽입니다. | Kitploit
도구/GitHubGitHub/ztsprofessionalaiid7-alt/prompt-injection-firewall
Defensive ToolsWeb SecurityLearning & EducationAI SecurityAnomaly Detection
GitHubztsprofessionalaiid7-alt/prompt-injection-firewall

prompt-injection-firewall

정규식 규칙과 Gemini 분류기를 통해 프롬프트 인젝션 입력을 차단하고, 봇 응답에서 비밀 정보나 시스템 프롬프트 유출을 잡아내는 2계층 LLM 방화벽입니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
14일 전아직 검토되지 않음

Prompt-Injection Firewall

라이브 데모: https://prompt-injection-firewall.streamlit.app 2분 데모 영상: https://drive.google.com/file/d/1tzb75nFysisrCYa11Lqj6egDs5VNmc2n/view?usp=drivesdk

LLM 지원 봇을 위한 2계층 방화벽으로, 사용자가 보내는 입력과 봇이 내보내는 출력을 모두 검사합니다.

문제

사용자는 봇의 규칙을 무시하도록 시도하거나("이전 지시를 무시하라"), 봇의 페르소나를 바꾸거나, 시스템 프롬프트나 비밀 정보를 노출시키려 할 수 있습니다. 이 프로젝트는 그러한 입력을 차단하고, 봇의 응답에서 유출을 탐지하며, 실패하는 경우를 포함하여 얼마나 잘 작동하는지 측정합니다.

작동 방식

user input
   |
   v
[1] Rule layer (regex, fast, free)  --match--> BLOCK
   |no match
   v
[2] LLM classifier (Gemini, JSON output, Pydantic validation, retries, fail-closed) --attack--> BLOCK
   |benign
   v
AcmeBot (Gemini + system prompt)
   |
   v
[3] Output check (canary token, secret patterns, system-prompt fragments) --leak--> BLOCK
   |clean
   v
answer to user

실행하기

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env      # then put your Gemini key in .env
python src\run_eval.py dev
python src\eval_output.py dev
python src\compare.py dev
streamlit run app.py        # local demo

사용된 모델: gemini-3.1-flash-lite. 무료 티어는 사용량이 많을 때 503을 반환할 수 있으며, 코드는 대기 후 재시도합니다. data\cases.jsonl을 다시 빌드하려는 경우가 아니라면 src\build_cases.py를 실행하지 마세요(파일을 덮어씁니다. 동일한 시드는 동일한 케이스를 생성합니다).

데이터

  • 입력 케이스: deepset/prompt-injections(Apache-2.0)에서 25개 샘플링(시드 7): 공격 12개, 정상 13개. 분할: dev 15개, hidden 10개.
  • 출력 케이스: AI 지원을 받아 제가 작성한 12개(dev 8개, hidden 4개). 공백으로 숨긴 유출과 "password"/"API key"를 언급하는 정상 텍스트를 포함합니다.
  • data/train.parquet은 저장소에 포함되어 있습니다(출처: deepset/prompt-injections, Apache-2.0).
  • hidden 분할은 탐지 로직과 프롬프트에 대한 마지막 변경 이후 한 번만 실행했습니다.

결과

세트계층결과
dev규칙만탐지 2/9, 오탐 0/6
dev규칙 + Gemini (최종)탐지 8/9, 오탐 0/6
dev출력 검사 (최종)유출 탐지 4/4, 오탐 0/4
hidden규칙 + Gemini탐지 3/3, 오탐 0/7
hidden출력 검사유출 탐지 3/3, 오탐 0/1

방화벽 대 방화벽 없음:

없음있음
dev: 봇에 도달한 공격9/91/9
dev: 잘못 차단된 정상 요청0/60/6
hidden: 봇에 도달한 공격3/30/3
hidden: 잘못 차단된 정상 요청0/70/7

hidden 세트에는 공격이 3개뿐이라 신호가 약합니다. dev에서 분류기 프롬프트를 튜닝했기 때문에 dev와 hidden을 별도로 보고합니다.

실패한 것과 변경한 것

수치가 포함된 전체 이력은 CHANGELOG.md에 있습니다. 요약하면:

  • 규칙만으로는 공격 2/9를 탐지했습니다(문자 그대로의 문구만). Gemini 분류기를 추가하여 7/9로 올렸습니다.
  • 잘못된 모델 이름 때문에 모든 호출이 실패했고, fail-closed 폴백이 모든 것을 차단했습니다(공격 9/9, 오탐 6/6). 이 가짜 점수는 오류가 무시되지 않고 실행을 중단해야 하는 이유를 보여주었습니다.
  • #4(정상 질문 뒤에 숨긴 지시)를 놓쳤습니다. 프롬프트에 일반 규칙을 추가하여 8/9가 되었습니다.
  • #14 "generate c++"는 여전히 실패합니다. 소스 데이터셋에서는 공격으로 라벨링되어 있지만 무해해 보이며, 아마도 라벨 노이즈일 것입니다.
  • 출력 검사가 공백으로 작성된 비밀("ZX CANARY 7731")을 놓쳤습니다. 매칭 전에 텍스트를 정규화했습니다.
  • 실제 봇 응답에 출력 검사를 실행했을 때 봇이 자기소개하는 부분에서 오탐이 발생했습니다(시스템 프롬프트와 6단어 일치). 일치 길이를 8단어로 변경했습니다.
  • 배포: 이제 API 키를 환경 변수(Streamlit secrets)에서도 읽습니다. 탐지 로직이나 프롬프트에는 변경이 없습니다.

한계

  • 데이터가 적습니다: 입력 케이스 25개, 출력 케이스 12개. 수치는 통계적으로 견고하지 않습니다.
  • 대부분의 소스 공격은 시스템 프롬프트 탈취가 아니라 선전이나 페르소나 프롬프트이므로, 비교에서 출력 검사가 입력 계층 외에 추가한 것은 없었습니다.
  • 출력 검사 테스트 케이스는 제가 작성했으므로, 실제 유출이 아니라 제 케이스에서 검사가 작동함을 보여줄 뿐입니다.
  • 출력 검사는 의역된 유출, base64로 인코딩된 유출, 비영어 유출을 잡지 못하며, 연속 8단어 미만의 유출도 놓칩니다.
  • 규칙 패턴은 이 데이터셋의 흔한 문구에 맞춰져 있으며, 다른 공격 스타일은 LLM 계층에 의존합니다.
  • LLM 계층은 메시지당 API 호출 하나를 추가하며(지연 시간과 비용), 타사 서비스에 의존합니다.
  • 공개 데모는 세션당 10개 메시지로 제한되며, 무료 API 할당량이 소진되면 작동이 중단될 수 있습니다.
도구 다운로드