본문으로 건너뛰기

프롬프트 인젝션 설명

중급

프롬프트 인젝션은 AI 앱의 대표적인 보안 위험입니다. 모델이 읽는 신뢰할 수 없는 콘텐츠에 지시문이 포함되어 있고, 모델이 마치 사용자가 내린 것처럼 그 지시를 따를 때 발생합니다. 모델은 "처리할 데이터"와 "따라야 할 명령"을 안정적으로 구분하지 못합니다 — 모두 그저 텍스트일 뿐입니다.

두 가지 유형

  • 직접 인젝션 — 사용자가 적대적인 지시문("규칙을 무시하고…")을 직접 입력합니다. 모델을 일반 대중에게 노출하는 앱에서 우려되는 사항입니다.
  • 간접 인젝션 — 더 위험한 쪽입니다. 악성 지시문이 에이전트가 가져오는 콘텐츠 안에 숨어 있습니다. 웹 페이지, PDF, 이메일, 코드 주석, API 응답, 캘린더 초대장 등입니다. 사용자는 결코 그것을 보지 못하지만, 에이전트는 그것을 읽고 행동합니다.

왜 어려운가

완벽한 필터는 없습니다. 모델은 컨텍스트에 있는 지시를 따르도록 만들어졌고, 인젝션된 텍스트는 바로 그 컨텍스트 안에 있습니다. 그래서 방어는 탐지에만 의존하는 것이 아니라 피해 범위(blast radius)를 제한하는 것에 관한 것입니다.

방어책 (계층적으로 적용하세요)

  • 최소 권한. 에이전트는 강력한 도구를 가지고 있을 때만 실제로 피해를 줄 수 있습니다. 도구의 범위를 엄격하게 좁히고, 위험한 동작은 사람의 승인 뒤에 두세요. 에이전트 보안을 참고하세요.
  • 가져온 콘텐츠를 데이터로 취급하세요. 신뢰할 수 없는 콘텐츠를 명확하게 감싸고(예: 구분자(delimiter)로), 그 안에 있는 것은 무엇이든 분석할 정보이지 결코 따라야 할 지시가 아니다라고 모델에 지시하세요.
  • 시크릿을 신뢰할 수 없는 입력과 섞지 마세요. 에이전트가 사용자의 시크릿을 읽을 수 있고 동시에 공격자가 제어하는 콘텐츠를 읽을 수 있으며 동시에 네트워크 호출을 할 수 있다면, 그것이 바로 유출 삼각형(exfiltration triangle)입니다 — 한 변을 끊으세요.
  • 되돌릴 수 없거나 민감한 동작(이메일 전송, 금전 지출, 삭제)에는 **휴먼 인 더 루프(human-in-the-loop)**를 두세요.
  • 출력을 모니터링하고 제약하세요(예: 에이전트가 호출할 수 있는 도메인을 허용 목록으로 관리).

:::warning 에이전트가 읽는 콘텐츠는 무엇이든 적대적일 수 있다고 가정하세요 신뢰 경계 밖에서 온 이메일, 웹 페이지, 문서는 기본적으로 잠재적 적대 대상으로 취급해야 합니다. :::

다음