LLM 프롬프트 인젝션 및 가드레일 보안
LLM은 지시 사항과 데이터 사이에 명확한 경계가 없습니다. 컨텍스트 창에 있는 모든 것은 하나의 토큰 스트림입니다. 공격자의 데이터가 지시 사항처럼 작동할 때 프롬프트 인젝션이 발생합니다. 필터링만으로는 안전을 보장할 수 없습니다. 심층 방어(defense-in-depth)를 통해 관리해야 합니다.
일반적인 방어 기제의 한계:
- 키워드 차단 목록(Keyword Blocklists): 공격자는 이를 우회하기 위해 유의어, 오타 또는 다른 언어를 사용합니다. 문자열을 필터링한다고 해서 의도까지 필터링할 수는 없습니다.
- 출력 편집(Output Redaction): 공격자는 비밀 정보를 파편화하거나 인코딩하여 문자열의 직접적인 일치 검사를 무력화할 수 있습니다.
- LLM 판독기(LLM Judges): 별도의 모델이 사회 공학적 기법에 속아 비밀 정보가 무해하다고 믿게 될 수 있습니다.
- 사람에 의한 검토(Human Review): 사람은 렌더링된 텍스트를 볼 뿐, 원시 바이트(raw bytes)를 보지 못합니다. 따라서 ASCII 스머글링(ASCII smuggling)에 사용되는 숨겨진 문자를 식별할 수 없습니다.
ASCII 스머글링(ASCII Smuggling)은 주요 위협입니다. 이는 유니코드 태그(Unicode Tags)나 폭이 없는 공백(zero-width spaces)과 같은 보이지 않는 문자를 사용하여 지시 사항을 숨깁니다. 모델은 이를 읽지만, 사람은 아무것도 볼 수 없습니다. 이를 통해 이메일이나 캘린더를 통한 신원 도용 및 데이터 유출이 가능해집니다.
애플리케이션을 방어하는 방법:
- 원시 페이로드 정제(Sanitize raw payloads): 제어 문자 및 폭이 없는 문자가 모델에 도달하기 전에 제거하십시오.
- 허용 목록(Allowlists) 사용: 나쁜 문자를 찾아다니는 대신 필요한 특정 유니코드 범주를 정의하십시오.
- 데이터 정규화(Normalize data): 모든 입력값에 NFKC 정규화를 적용하십시오.
- 비밀 정보 최소화: 모델에 필요하지 않은 민감한 데이터는 컨텍스트 창에 넣지 마십시오.
- RAG를 신뢰할 수 없는 것으로 간주: 모델을 위해 검색하는 모든 문서는 잠재적인 인젝션 경로가 될 수 있다고 가정하십시오.
- 이상 징후 감시: 가시적인 길이와 원시 코드 포인트(code-point) 수가 다른 입력값을 식별하십시오.
보안은 모델만의 결함이 아니라 파이프라인의 결함입니다. 해결책은 애플리케이션 코드에 있습니다.
Source: https://dev.to/geekaara/llm-prompt-injection-guardrail-security-glm
Optional learning community: https://t.me/GyaanSetuAi