프롬프트 주입은 모델 문제가 아니라 권한 문제다
LLM에서 프롬프트 주입을 완화하는 것은 입력 유효성 검사 문제가 아니라 권한 문제이며, LLM은 본질적으로 지침과 데이터 간의 경계를 모호하게 만들기 때문입니다. "더 나은 지침"이나 필터링 메커니즘에 의존하는 것은 불충분한데, 이는 모델이 항상 올바르게 작동한다고 가정하기 때문이며, 이는 보장되지 않습니다. 공격자는 필터링을 성공적으로 우회하는 단 한 번의 기회만 있으면 되며, 이는 다양한 인코딩 트릭이나 이미지 또는 문서에 콘텐츠를 포함시킴으로써 우회될 수 있습니다. 핵심 문제는 LLM이 지침과 데이터 모두에 대해 단일 채널을 가지고 있어 프로토콜 수준에서 둘을 안정적으로 구별하는 것이 불가능하다는 것입니다.따라서 실제로 유효한 제어는 적대적인 지침이 실행될 것이라고 가정하고 시스템을 설계하여 그러한 실행을 "지루하게" 만드는 것입니다. 여기에는 몇 가지 구조적 변경이 포함됩니다.
첫째, 에이전트를 두 가지 구성 요소로 분할합니다. 하나는 도구나 자격 증명 없이 신뢰할 수 없는 콘텐츠를 읽고, 다른 하나는 첫 번째 구성 요소에서 반환된 구조화된 데이터를 기반으로 작동하며, 신뢰할 수 없는 텍스트를 직접 보지 않습니다. 둘째, 모델이 작업을 호출하도록 허용하는 대신, 엄격한 허용 목록 및 스키마에 대해 유효성이 검사되는 의도를 제안하도록 합니다. 셋째, 호스트별로 아웃바운드 네트워크 요청을 허용 목록에 추가하고 렌더링된 모델 출력에서 원격 참조를 제거하거나 프록시하여 데이터 유출을 방지함으로써 유출 경로를 차단합니다. 넷째, 모든 되돌릴 수 없는 작업에 대해 사람을 루프에 포함시켜 모델이 초안을 작성하도록 허용하지만 중요한 단계에 대해서는 사람의 확인을 요구합니다. 마지막으로, 각 에이전트 키, 만료, 지출 한도, 속도 제한 및 거부를 기록하는 외부, 추가 전용 로그와 함께 모든 자격 증명을 바인딩합니다. 개별적으로 무해한 기능이 위험한 구성을 생성하는 방법을 고려하여 권한 세트를 수평적으로 감사합니다. 이 기능 기반 접근 방식은 적대적인 지침이 실행되더라도 도달하거나 작동할 가치 있는 것이 없도록 보장합니다.