이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.

  • 모델 출력은 왜 신뢰할 수 없는 외부 입력처럼 다뤄야 하는가?
  • excessive agency는 어떤 상황에서 발생하는가?
  • SQL, HTML, shell command, write tool을 안전하게 다루려면 무엇이 필요한가?

개요

Insecure Output Handling은 모델 출력이 검증 없이 후속 시스템에 전달될 때 생기는 위험이다. Excessive Agency는 모델에게 너무 많은 권한과 자율성을 주는 위험이다.

둘은 tool calling과 agent에서 자주 함께 나타난다.

모델 출력 검증

모델 출력은 다음으로 바로 쓰면 위험하다.

  • HTML
  • SQL
  • shell command
  • DB update
  • email body
  • policy decision
  • access control decision

서버 검증과 안전한 렌더링이 필요하다.

SQL 생성

모델이 SQL을 생성해야 한다면:

  • read-only connection
  • allowlisted tables
  • row limit
  • timeout
  • tenant filter 강제
  • explain 또는 parser validation
  • write query 금지

production DB에 자유 SQL을 직접 실행하지 않는다.

Tool 권한 제한

write tool은 다음을 가져야 한다.

  • 최소 권한
  • approval
  • idempotency key
  • audit log
  • max tool calls
  • rollback 또는 보상 절차

코드로 이해하기

def validate_sql(sql: str) -> None:
    lowered = sql.lower()
    forbidden = ["insert ", "update ", "delete ", "drop ", "alter "]
    if any(word in lowered for word in forbidden):
        raise ValueError("write_sql_not_allowed")
    if " limit " not in lowered:
        raise ValueError("limit_required")

실제 운영에서는 SQL parser와 allowlist를 써야 한다. 문자열 검사는 최소 예시일 뿐이다.

장애 상황과 대응

증상:

  • 모델 출력 HTML로 XSS 발생
  • SQL이 과도한 full scan 실행
  • agent가 승인 없이 write tool 실행
  • shell command가 위험한 옵션 포함

대응:

  • output sanitization
  • server-side policy
  • read-only 계정
  • approval workflow
  • audit log
  • tool 권한 축소

인프라 협업 포인트

보안팀과 권한 모델을 합의하고, 인프라팀과 read-only 계정, network policy, secret scope, audit storage를 합의한다.

실전 팁

  • 모델 출력은 사용자 입력처럼 escape한다.
  • 모델이 만든 action plan을 바로 실행하지 말고 서버 policy로 검토한다.
  • write action은 draft와 approval을 분리한다.
  • agent에게 관리자 권한 tool을 주지 않는다.

위험 신호!

  • 모델 출력 SQL을 그대로 실행한다.
  • 모델 출력 HTML을 sanitize 없이 렌더링한다.
  • agent가 결제나 삭제 tool을 직접 실행한다.
  • tool 권한이 사용자 권한보다 크다.

확인 질문

확인 질문

  • 모델 출력은 왜 외부 입력처럼 검증해야 하는가?
    • 모델이 생성한 내용은 안전성과 정확성을 보장할 수 없고 공격 입력의 영향을 받을 수 있기 때문이다.
  • excessive agency를 줄이는 대표 방법은 무엇인가?
    • 최소 권한, read/write 분리, approval, idempotency, audit log, max step 제한이다.

Spring AI 적용 연결

참고 문서