웹 보안 기초
대부분의 AI 애플리케이션은 결국 웹 애플리케이션입니다 — 사용자는 브라우저나 모바일 앱을 통해 HTTP API를 호출하고, 그 뒤에서 LLM이나 다른 모델이 응답을 생성합니다. 따라서 전통적인 웹 보안 취약점은 AI 애플리케이션에도 동일하게(혹은 더 심각하게) 적용됩니다.
flowchart LR
subgraph WEB["전통적 웹 보안 (OWASP Top 10)"]
A1["Injection\n(SQL/명령 인젝션)"]
A2["Broken Authentication\n(인증 취약점)"]
A3["Broken Access Control\n(접근 제어 취약점)"]
A4["SSRF"]
A5["Security Misconfiguration"]
A6["Vulnerable Components"]
A7["출력 인코딩 미흡\n→ XSS"]
A8["Rate Limiting 부재"]
end
subgraph AI["AI/LLM 애플리케이션 보안"]
B1["프롬프트 인젝션\n(데이터·명령 혼재)"]
B2["API 키 유출\n→ 모델 무단 사용"]
B3["RAG 권한 미검증\n과도한 에이전트 권한"]
B4["에이전트 도구 호출로\n내부 자원/메타데이터 접근"]
B5["모델 가중치·학습데이터\n노출"]
B6["Pickle 역직렬화\n→ 임의 코드 실행"]
B7["LLM 출력 그대로 렌더링\n→ 코드 실행/XSS"]
B8["모델 추출, 비용 폭탄\n(DoS)"]
end
A1 --> B1
A2 --> B2
A3 --> B3
A4 --> B4
A5 --> B5
A6 --> B6
A7 --> B7
A8 --> B8
classDef web fill:#e7f1ff,stroke:#3b82f6,color:#1e3a8a;
classDef ai fill:#fff3cd,stroke:#d39e00,color:#664d03;
class A1,A2,A3,A4,A5,A6,A7,A8 web;
class B1,B2,B3,B4,B5,B6,B7,B8 ai;
OWASP Top 10 핵심 항목
OWASP Top 10은 가장 널리 알려진 웹 애플리케이션 보안 위험 목록입니다. AI 보안을 공부하기 전에 반드시 이해해야 할 핵심 항목들을 정리합니다.
1. Injection (인젝션)
사용자 입력이 코드/명령/쿼리의 일부로 해석되어 실행되는 취약점입니다.
- SQL 인젝션: 사용자 입력이 SQL 쿼리에 그대로 삽입되어 데이터베이스 명령으로 실행됨.
- OS 커맨드 인젝션: 사용자 입력이 시스템 셸 명령에 삽입됨.
- 공통 원인: 신뢰할 수 없는 입력과 실행 가능한 명령/쿼리를 명확히 분리하지 않음(파라미터화되지 않은 쿼리).
이 패턴은 LLM 애플리케이션에서 프롬프트 인젝션(Prompt Injection) 으로 그대로 이어집니다. “데이터(사용자 입력)“와 “명령(시스템 프롬프트)“이 동일한 텍스트 채널에 섞여서 모델에 전달되기 때문에, 모델이 데이터의 일부를 명령으로 오인하게 만들 수 있습니다. 자세한 내용은 프롬프트 인젝션에서 다룹니다.
2. Broken Authentication (인증 취약점)
- 약한 비밀번호 정책, 자격증명 노출, 세션 토큰의 부적절한 관리.
- 다중 인증(MFA) 미적용으로 계정 탈취 위험 증가.
- AI 시스템에서는 API 키가 사실상 “비밀번호” 역할을 함 — 키 유출 시 모델 무단 사용, 데이터 유출로 직결.
3. Broken Access Control (접근 제어 취약점)
- 수평적 권한 상승: 다른 사용자의 데이터에 접근(예: 다른 사용자의 대화 기록 조회).
- 수직적 권한 상승: 일반 사용자가 관리자 기능에 접근.
- RAG 기반 시스템에서는 “이 사용자가 이 문서에 접근 권한이 있는가"를 검색(retrieval) 단계에서 반드시 검증해야 함 — 그렇지 않으면 모델이 권한 없는 문서 내용을 답변에 포함시킬 수 있음.
4. SSRF (Server-Side Request Forgery)
서버가 사용자의 입력을 바탕으로 외부(또는 내부) 리소스에 요청을 보내도록 속이는 공격입니다.
- 예: 이미지 URL을 입력받아 서버가 다운로드하는 기능에서, 공격자가
http://169.254.169.254/...(클라우드 메타데이터 엔드포인트) 같은 내부 주소를 입력하여 자격증명을 탈취. - 방어: URL 검증, allowlist 기반 도메인 제한, 내부망 접근 차단.
LLM 에이전트가 “웹 검색”, “URL 가져오기”, “코드 실행” 같은 도구(tool)를 가질 때, 이 도구 호출 자체가 SSRF의 새로운 변종이 될 수 있습니다. 공격자가 프롬프트 인젝션을 통해 에이전트가 내부 네트워크의 메타데이터 서버나 관리 API를 호출하도록 유도할 수 있기 때문입니다. 이는 안전하지 않은 출력 처리와 직접 연결되는 주제입니다.
5. Security Misconfiguration (보안 설정 오류)
- 불필요한 기능/포트/계정이 활성화된 상태.
- 디버그 모드가 운영 환경에서 켜져 있어 상세 에러 메시지(스택 트레이스, 내부 경로) 노출.
- 클라우드 스토리지 버킷이 잘못 설정되어 모델 가중치나 학습 데이터셋이 공개됨.
6. Vulnerable and Outdated Components
- 사용 중인 라이브러리/프레임워크의 알려진 취약점(CVE)이 패치되지 않음.
- ML 생태계에서는
pickle기반 모델 직렬화 포맷처럼, 역직렬화 시 임의 코드 실행이 가능한 구조적 위험을 가진 컴포넌트도 포함됨.
7. Identification and Authentication Failures / Software and Data Integrity Failures
- 소프트웨어 업데이트, 중요 데이터, CI/CD 파이프라인의 무결성을 검증하지 않아 변조된 코드/데이터가 그대로 배포됨.
- AI 맥락에서는 학습 데이터셋이나 사전학습 모델 체크포인트가 신뢰할 수 없는 출처에서 다운로드되어 그대로 사용되는 경우, 데이터 포이즈닝으로 이어질 수 있음.
인증과 인가 (Authentication vs Authorization)
두 개념은 자주 혼동되지만 명확히 구분해야 합니다.
- 인증(Authentication): “당신이 누구인지” 확인하는 과정. (예: 로그인, API 키 검증)
- 인가(Authorization): “당신이 무엇을 할 수 있는지” 결정하는 과정. (예: 이 사용자가 이 리소스에 접근 가능한가)
일반적인 패턴:
- 세션 기반 인증: 서버가 세션을 저장하고 클라이언트에 세션 ID(쿠키)를 발급.
- 토큰 기반 인증(JWT 등): 서버가 상태를 저장하지 않고, 클라이언트가 보낸 토큰 자체에 서명된 정보(클레임)를 검증. API 기반 AI 서비스에서 널리 사용.
- OAuth 2.0 / OpenID Connect: 제3자 서비스에 위임된 인증/인가. LLM 에이전트가 사용자를 대신해 다른 서비스(이메일, 캘린더 등)에 접근할 때 사용되는 표준 패턴.
세션 관리 (Session Management)
- 세션 토큰은 충분히 무작위적이어야 하며, 일정 시간 후 만료되어야 함.
- HTTPS 전용(Secure), HttpOnly, SameSite 속성을 쿠키에 설정하여 XSS/CSRF로부터 보호.
- 대화형 AI 서비스에서는 “대화 세션(conversation session)“과 “인증 세션"을 구분해야 함 — 긴 대화 컨텍스트가 누적되면서 권한 검증이 최초 한 번만 이루어지고 이후 요청에서는 누락되는 설계 실수가 흔함.
API 보안
LLM/AI 서비스의 핵심 인터페이스는 API입니다. API 보안의 기본 원칙:
- 레이트 리미팅(Rate Limiting): 동일 사용자/키의 과도한 요청을 제한 — 비용 폭탄(cost amplification) 공격과 모델 추출 공격을 완화.
- 입력 스키마 검증: 요청 본문의 형식, 크기, 타입을 엄격히 검증. 과도하게 긴 입력은 그 자체로 비용 및 컨텍스트 윈도우 남용 공격이 될 수 있음.
- 출력 인코딩: API 응답이 그대로 HTML에 렌더링될 경우 XSS로 이어질 수 있음 — LLM이 생성한 텍스트에 악성 스크립트가 포함되어 있다면 이를 그대로 프론트엔드에 렌더링하면 안 됨.
- 버전 관리와 폐기(Deprecation): 오래된 API 버전이 방치되어 보안 패치가 적용되지 않은 채 남아있는 경우가 많음.
AI/LLM 애플리케이션과의 연결
웹 보안의 핵심 개념들은 LLM 애플리케이션 보안에서 새로운 이름으로 다시 등장합니다.
| 전통적인 웹 보안 개념 | AI/LLM 애플리케이션에서의 대응 |
|---|---|
| SQL/명령 인젝션 (데이터와 명령의 혼재) | 프롬프트 인젝션 (사용자 입력과 시스템 지시의 혼재) |
| SSRF (서버의 부적절한 외부 요청) | 에이전트 도구 호출을 통한 내부 리소스 접근, 안전하지 않은 출력 처리 |
| 접근 제어 취약점 | RAG 검색 단계의 권한 미검증, 과도한 에이전트 권한(excessive agency) |
| 출력 인코딩 미흡 → XSS | LLM 출력을 그대로 렌더링/실행하여 발생하는 코드 실행/XSS |
| API 레이트 리미팅 부재 | 모델 추출, 비용 폭탄(DoS) 공격 |
요약하면, “LLM은 새로운 종류의 사용자 입력 처리 컴포넌트” 로 이해할 수 있습니다. 입력을 받아 무언가를 출력하는 모든 컴포넌트는 웹 보안의 기본 원칙 — “신뢰할 수 없는 입력을 신뢰하지 말 것”, “최소 권한”, “출력을 그대로 신뢰하지 말 것” — 을 따라야 합니다. 이 원칙을 LLM에 적용한 구체적인 공격과 방어는 공격 기법 섹션에서 자세히 다룹니다.