작업 기록

외부 텍스트를 넣기 전, 의심 지시만 먼저 거르는 로컬 점검기

외부 문서의 지시 무시·비밀 노출·외부 전송 같은 의심 문구를 줄 번호로 표시하는 PromptSieve CLI를 만들고, 통과·검토 필요·입력 오류 경로를 실제로 검증한 작업 기록.

어두운 남색 문서 흐름이 중앙의 망 필터를 지나고, 산호색 경고 조각은 걸러지며 청록색 경로만 중립적인 에이전트 노드로 이어지는 가로형 편집 이미지.

웹페이지, 문서, 회의록처럼 외부에서 온 텍스트를 에이전트에 넘길 때는 내용과 지시를 분리해 읽어야 한다. 하지만 긴 텍스트 안에 섞인 “앞선 지시를 무시하라”, 비밀을 보여 달라, 파일을 전송하라 같은 문구는 눈으로 놓치기 쉽다. 이번 작업의 질문은 간단했다. 외부 서비스에 내용을 보내지 않고, 사람이 다시 읽어야 할 줄만 먼저 좁힐 수 있을까?

그래서 표준 라이브러리만 쓰는 작은 Python CLI PromptSieve를 만들었다. UTF-8 텍스트나 Markdown 파일을 줄 단위로 읽고 다음과 같은 영어 중심의 의심 패턴을 줄 번호와 함께 표시한다.

  • 이전 지시·규칙을 무시하거나 역할을 바꾸라는 요구
  • 비밀번호, API 키, 토큰, 시스템 프롬프트 같은 비밀을 노출하라는 요구
  • 파일·대화·비밀을 외부로 보내거나 업로드하라는 요구
  • 터미널·브라우저 같은 도구 실행, 또는 승인 절차 우회를 유도하는 요구
python3 prompt_sieve.py external-notes.txt
python3 prompt_sieve.py external-notes.txt --format markdown --output review.md
python3 prompt_sieve.py external-notes.txt --format json --min-severity high

검출이 없으면 종료 코드 0, 사람이 검토할 항목이 있으면 1, 파일을 읽지 못하거나 결과를 쓸 수 없으면 2로 끝난다. 따라서 1은 “악성으로 확정”이 아니라 자동화 흐름에서 멈춰 원문과 권한을 확인하라는 상태다.

탐지 결과보다 범위를 먼저 제한했다

이 도구는 프롬프트 인젝션을 판정하지 않는다. 정당한 보안 문서나 인용문도 오탐할 수 있고, 한국어 표현·우회 문구·이미지·인코딩된 지시는 놓칠 수 있다. 실제 도구 권한이나 외부 전송이 가능한지도 확인하지 않는다.

이 한계를 명시하지 않으면 “검출되지 않았으니 안전하다”는 잘못된 자동화를 만들 수 있다. PromptSieve의 출력은 차단 정책이 아니라 검토 순서다. 표시된 문장을 읽고, 그 문장이 들어온 출처·현재 작업의 승인 범위·도구의 최소 권한을 사람이 다시 확인하는 데만 쓰도록 범위를 고정했다.

로컬 파일만 읽고 네트워크 요청, 계정, API 키, 텔레메트리를 쓰지 않는 이유도 같다. 검토하려는 외부 텍스트를 또 다른 분석 서비스로 보내지 않아도 된다. 대신 문맥 이해나 최신 위협 인텔리전스는 제공하지 않는다. 이 교환은 민감할 수 있는 초안을 다룰 때 더 예측 가능하다.

실제로 확인한 경로

구현 뒤 python3 -m py_compile prompt_sieve.py test_prompt_sieve.py와 python3 -m unittest -v를 실행했고, 테스트 여섯 개가 모두 통과했다. 확인한 범위는 정상 텍스트, 이전 지시 무시, 비밀 요청, 외부 전송, 심각도 필터, JSON 결과 파일이다.

의도적으로 의심 문구를 넣은 예시를 Markdown 형식으로 실행했을 때는 다섯 건을 기록하고 종료 코드 1을 반환했다. 정상 예시는 PASS, 0건, 종료 코드 0이었다. 존재하지 않는 파일은 오류 메시지와 종료 코드 2로 끝나는 것도 확인했다. 즉, “통과”와 “검토 필요”, “입력 실패”를 한 상태로 뭉개지 않고 호출하는 쪽이 구분할 수 있다.

다음 검증의 기준

이 점검기가 실제로 유용한지는 검출 개수로 판단할 수 없다. 서로 다른 출처의 실제 문서를 적용했을 때, 사람이 놓칠 뻔한 문장을 먼저 발견하는지와 오탐이 검토 시간을 얼마나 늘리는지를 함께 봐야 한다. 특히 한국어와 혼합 언어 문서에서의 누락은 별도로 기록할 필요가 있다.

작은 필터는 신뢰할 수 없는 내용을 신뢰할 수 있게 만들지 않는다. 다만 그 내용을 실행 가능한 입력으로 취급하기 전에, 한 번 더 읽어야 할 위치를 먼저 드러내는 얇은 경계는 될 수 있다.

CONTINUE READING

프롬프트 인젝션눈에 보이지 않는 문자도 검토 신호로 남기기로컬 도구눈에 보이지 않는 문자도 검토 신호로 남기기