OWASP LLM Top 10:2025: 프롬프트 인젝션과 AI 도구 권한 통제
1장 개념과 보호 목표#
LLM 보안은 모델에 주의 문구를 넣는 것만으로 해결되지 않습니다. 사용자의 입력, 검색 문서, 외부 도구 응답에 포함된 지시가 시스템의 의도와 충돌할 수 있으므로 데이터와 권한의 신뢰 경계를 애플리케이션에서 통제해야 합니다.
2장 원리와 구분#
OWASP LLM Top 10:2025은 프롬프트 인젝션, 민감정보 노출, 공급망, 데이터·모델 오염, 부적절한 출력 처리, 과도한 권한, 시스템 프롬프트 유출, 벡터·임베딩 취약점, 잘못된 정보, 무제한 자원 소비를 다룹니다. 시스템 프롬프트는 비밀 저장소가 아니며 숨겨진 문장에만 접근통제 규칙을 의존하면 안 됩니다.
3장 비교와 판단 기준#
| 경계 | 주요 위험 | 통제 |
|---|---|---|
| 입력·검색 | 프롬프트 인젝션·데이터 오염 | 신뢰 구분·데이터 권한 |
| 출력 | 실행 코드·URL·오류 정보 | 문맥 검증·근거 확인 |
| 도구 | 과도한 권한·잘못된 실행 | 서버 인가·한도·승인 |
| 운영 | 비용·정보·모델 공급망 | 로그·비밀 분리·버전 관리 |
4장 LLM 애플리케이션의 신뢰 경계를 그린다#
모델·검색 저장소·도구·사용자·대화 기록은 서로 다른 신뢰를 가집니다. 모델이 외부 문서의 문장을 읽는 것과 그 문장에 데이터 접근권이나 실행권을 주는 것은 다릅니다. 보안 정책은 모델의 답변이 아니라 애플리케이션의 실제 검증으로 집행해야 합니다.
flowchart TB
U["인증된 사용자"] --> A["애플리케이션의 권한 정책"]
A --> R["권한에 맞는 검색"]
R --> M["LLM의 해석과 제안"]
M --> V["출력·도구 인자 검증"]
V --> P["서버의 업무 인가"]
P --> T["제한된 도구"]5장 직접·간접 프롬프트 인젝션#
사용자가 직접 지시를 넣는 경우와 모델이 읽는 웹페이지·문서·도구 응답에 지시가 섞인 경우를 구분합니다. 사내 문서라는 이름만으로 내용이 신뢰할 정책이 되는 것은 아닙니다. 수정 권한을 가진 사람이 다른 사용자의 모델 실행에 영향을 줄 수 있는 경로도 봅니다.
공격 문장이 시스템 규칙을 무시하라고 요구할 수 있지만 실제 피해는 접근 가능한 데이터와 실행 가능한 도구의 범위에 따라 달라집니다. 프롬프트의 경고와 실제 권한 제한을 별도로 설계합니다.
6장 RAG의 문서 권한은 검색의 입력 조건이다#
벡터 검색 전에 사용자의 문서 범위를 제한하거나 동등한 보호를 제공하는 구성을 사용합니다. 검색 후 모델이 이미 본 문서를 화면에서 숨기는 것만으로 노출을 막았다고 판단하지 않습니다. 원본의 ACL·문서 ID·조직·최신성과 검색 인덱스를 연결합니다.
신뢰한 사용자·조직 확인
허용된 문서 범위로 검색
원본 권한과 최신성 검증
근거와 함께 모델에 전달
출력·로그·캐시에서도 같은 경계 유지7장 임베딩과 캐시도 데이터 경로다#
임베딩 저장소·검색 결과 캐시·대화 요약·관측 로그는 원문과 별도의 사본일 수 있습니다. 삭제·권한 변경·보유기간을 어떻게 반영하는지 정합니다. 다른 조직의 캐시 결과가 재사용되는 경로와 지원 담당자의 조회 권한도 점검합니다.
민감한 비밀을 시스템 프롬프트에 넣고 출력하지 말라고만 지시하지 않습니다. 모델이 필요로 하지 않는 비밀은 제공하지 않고 실제 비밀 저장소·정책을 사용합니다.
8장 도구 호출은 모델의 제안이다#
모델이 만든 파일 ID·URL·수신자·명령·금액을 신뢰한 입력처럼 사용해서는 안 됩니다. 서버는 스키마·범위·사용자의 권한·업무 상태·호출 한도를 검증합니다. 모델이 관리자라고 말하는 것은 인가 근거가 아닙니다.
flowchart LR
M["모델의 전송 제안"] --> S["인자 형식 검증"]
S --> D["문서 권한과 수신자 정책"]
D --> A["필요한 사용자 의도 확인"]
A --> E["최소 권한으로 실행"]
E --> L["결과와 감사기록"]9장 읽기와 외부 전송·삭제의 권한을 나눈다#
문서 요약에 필요한 읽기 권한과 외부 이메일 전송·삭제·결제의 권한은 다릅니다. 필요한 도구만 연결하고 자격증명의 범위를 줄입니다. 작업의 대상·인자를 사용자가 확인해야 하는 경우 확인한 내용과 실제 실행 내용이 같도록 합니다.
재시도·중복·일부 실패·시간 초과 때 같은 조치가 여러 번 수행되는지 시험합니다. 모델의 대화 기억이 실제 거래 상태와 일치한다고 가정하지 않습니다.
10장 출력은 코드·HTML·URL의 실행 경계다#
모델 답변을 웹에 표시하거나 SQL·쉘·템플릿에 넣으면 다른 입력과 동일하게 문맥 검증이 필요합니다. 모델이 생성했다는 사실이 안전한 코드라는 근거는 아닙니다. 코드 실행은 제한된 환경과 명시적 허용 기능으로 분리합니다.
링크와 인용이 실제 주장과 맞는지도 확인합니다. 형식이 정돈된 답변과 사실성·업무 적합성은 다른 평가 목표입니다.
11장 오염과 공급망#
학습·튜닝 데이터·검색 문서·모델 파일·의존성·플러그인의 출처와 변경을 관리합니다. 권한 있는 편집자가 삽입한 내용도 다른 사용자의 도구 실행에 영향을 줄 수 있습니다. 데이터 품질과 악성 지시·패키지의 검토를 연결합니다.
모델·프롬프트·인덱스·도구 스키마의 버전을 기록하고 바뀐 뒤 회귀 시험을 수행합니다. 모델 교체가 응답만 바꾸는 일이 아니라 도구 사용과 정책 준수에도 영향을 줄 수 있습니다.
12장 자원 소비와 비용을 제한한다#
토큰·대화 길이·검색량·도구 횟수·동시성·외부 API 비용과 전체 시간 상한을 둡니다. 모델의 반복 작업이나 공격 입력이 무한 호출로 이어지지 않게 합니다. 사용량 경보와 정상 사용자의 제한 영향을 함께 측정합니다.
| 위협 | 허용된 시험 | 기대 경계 |
|---|---|---|
| 검색 문서의 외부 전송 지시 | 악성 문서 삽입 | 실제 전송 권한 제한 |
| 타 조직 문서 요청 | 다른 조직 계정 | 검색·출력·캐시 차단 |
| 잘못된 도구 인자 | 범위 밖 ID·URL | 서버 검증 거부 |
| 무제한 반복 | 반복 호출 유도 | 비용·횟수·시간 제한 |
13장 평가 결과를 실제 실패 경로로 남긴다#
직접·간접 지시, 권한 없는 검색, 비밀 요청, 잘못된 출력, 비용 폭증과 도구 중복을 시험합니다. 답변이 거절했다는 사실만 보지 말고 실제 조회·실행·로그·캐시에서 경계가 유지되었는지 확인합니다.
안전한 운영은 모델의 표현과 서버의 집행을 연결하는 일입니다. 사람의 검토가 필요한 판단과 자동화할 수 있는 검증을 분리하면 유용성과 권한 보호를 함께 유지할 수 있습니다.
14장 적용 사례와 운영 방법#
사내 문서 검색에서는 검색 단계에서 사용자의 문서 권한을 확인하고 답변에서도 근거를 연결합니다. 모델이 만든 도구 인자는 서버에서 스키마·범위·사용자 권한을 검증합니다. 송금·삭제·외부 전송 같은 작업에는 제한된 자격증명과 필요한 승인 절차를 적용합니다.
15장 LLM 애플리케이션 신뢰 경계#
flowchart LR
U["사용자 입력"] --> M["LLM"]
D["권한으로 필터한 문서"] --> M
M --> V["출력·도구 인자 검증"]
V --> A["서버 측 인가·한도"]
A --> T["제한된 도구 실행"]
T --> L["감사기록"]16장 검색한 문서는 답변의 자료이며 권한 명령이 아니다#
RAG의 검색 문서, 웹페이지와 도구 응답에는 공격자가 삽입한 지시가 섞일 수 있습니다. 외부 문장을 모델에 전달할 수 있더라도 그 문장이 도구 권한이나 데이터 접근 정책을 바꾸도록 허용해서는 안 됩니다. 프롬프트 구분과 출처 표시는 도움이 되지만 실제 권한 집행은 애플리케이션이 맡아야 합니다.
사용자의 검색 권한을 벡터 검색 전후에 확인하고 문서 ID·원본 저장소 권한·최신성을 연결합니다. 검색 결과를 뒤에서 숨기는 방식만 사용하면 모델이 이미 접근한 정보가 다른 표현으로 노출될 수 있습니다. 임베딩·캐시·대화 기록의 공유 범위도 데이터 보호 대상입니다.
17장 AI 도구의 실행 인자를 서버가 다시 검증하기#
문서가 외부 이메일로 파일을 보내라고 지시한 상황을 생각해 봅니다. 모델이 전송 도구를 제안하더라도 서버는 수신자·첨부 문서 권한·전송 범위·호출 한도를 확인합니다. 중대한 외부 전송이나 삭제에는 사용자 의도 확인을 연결하고 모델에 광범위한 관리자 키를 주지 않습니다.
검증은 직접 프롬프트 인젝션, 검색 문서에 숨은 간접 지시, 도구 출력의 코드·URL, 비용 폭증과 잘못된 근거를 포함합니다. 시스템 프롬프트에는 비밀을 저장하지 않고 모델 버전·검색 근거·도구 조치의 감사기록을 남겨 원인을 조사할 수 있게 합니다.
18장 적용 전 확인할 사항#
- 검색 문서와 도구 결과를 외부 데이터로 취급한다
- 출력의 코드·URL·도구 인자를 검증한다
- 권한·비용·호출 횟수와 감사기록을 관리한다
19장 자주 묻는 질문#
프롬프트에 외부 지시를 무시하라고 쓰면 충분한가요?#
모델의 지시 해석만으로 경계를 보장하기 어렵습니다. 실제 데이터 접근과 도구 실행을 서버 정책으로 제한하고 공격 시나리오로 검증해야 합니다.
출력에 근거 링크가 있으면 사실 검증을 생략할 수 있나요?#
링크의 존재와 해당 주장에 대한 근거는 다릅니다. 문서의 관련 내용·시점·접근 권한과 답변의 일치 여부를 확인해야 합니다.
LLM이 관리자처럼 행동한다고 말하면 권한을 높여도 되나요?#
모델 출력은 인가 근거가 아닙니다. 실제 사용자와 서비스 계정의 권한을 서버 정책으로 검증해야 합니다.