당신의 AI 에이전트가 방금 와이어 트랜스퍼를 환각했습니다. 내가 이를 멈춘 방법
Source: Dev.to
문제
LLM 에이전트가 환각된 인보이스, 잘못 읽은 Slack 승인, 그리고 대략 일치하는 수신자를 근거로 $45,000을 공급업체에게 보내기로 결정합니다. 당신이 눈치채는 시점에는 이미 돈이 사라졌습니다.
왜 지금 이런 일이 발생하고 있는가
- OWASP Agentic AI Top 10 (late 2025) 은 목표 탈취, 도구 오용, 도구 체이닝을 통한 권한 상승 등 공포 영화 같은 위협을 나열합니다.
- 현재 **48 %**의 사이버 보안 전문가가 agentic AI 를 가장 큰 공격 벡터로 꼽고 있지만, 기업의 **~33 %**만이 AI‑특화 보안 통제를 갖추고 있습니다.
Source:
PIC (Provenance & Intent Contracts) 소개
PIC은 에이전트가 실행하기 전에 모든 고영향 행동을 증명하도록 강제합니다. 이는 행동 경계에 위치합니다 – “LLM이 무언가를 하기로 결정한 순간”과 “도구가 실제로 실행되는 순간” 사이의 지점입니다.
작동 방식 (요약)
- 제안 – 에이전트는 무엇을 하고 싶은지, 왜 하는지, 그리고 의사결정 데이터가 어디서 왔는지를 설명하는 구조화된 JSON을 제출합니다.
- 검증 – PIC은 제안을 스키마에 맞게 검증하고, 출처 신뢰 수준을 확인하며, 증거를 검증합니다.
- 결정 – 누락되었거나 형식이 잘못되었거나 신뢰할 수 없는 경우, 제안은 차단됩니다 (fail‑closed). “어쨌든 허용” 같은 대체 옵션은 없습니다.
예시 제안
{
"protocol": "PIC/1.0",
"intent": "Execute wire transfer for Q4 server costs.",
"impact": "money",
"provenance": [
{ "id": "cfo_signed_invoice_hash", "trust": "trusted" },
{ "id": "slack_approval_manager", "trust": "semi_trusted" }
],
"claims": [
{
"text": "Invoice hash matches authorized payment list",
"evidence": ["cfo_signed_invoice_hash"]
}
],
"action": {
"tool": "treasury.wire_transfer",
"args": { "recipient": "AWS_Global_Payments", "amount": 45000 }
}
}
필수 필드
| 필드 | 무엇을 하는지 |
|---|---|
| intent | 에이전트가 수행하려는 작업에 대한 일반 언어 설명 |
| impact | 위험 등급 (예: read, write, money, privacy, irreversible, …) |
| provenance | 의사결정 데이터의 출처이며, 각각 명시적인 신뢰 수준(trusted, semi_trusted, untrusted)을 가짐 |
| claims | 에이전트의 주장으로, 각각 증거 항목을 가리킴 |
| action | 실제 도구 호출 (tool + args) |
핵심 검증 규칙
- 고위험 행동 (
money,privacy,irreversible, …) 은 신뢰할 수 있는 출처의 증거에 의해 뒷받침되는 최소 하나의 주장을 가져야 합니다. - 누락된 필드, 스키마 위반, 또는 검증 오류가 발생하면 → 차단됩니다.
디자인에 따라 실패 시 차단됩니다.
Installation & CLI
pip install pic-standard
Verify a proposal
# Trusted provenance + valid evidence → passes
pic-cli verify examples/financial_irreversible.json
# Bad SHA‑256 hash → blocked
pic-cli verify examples/failing/financial_hash_bad.json --verify-evidence
첫 번째 명령은 성공합니다; 두 번째는 증거 해시가 아티팩트와 일치하지 않기 때문에 실패하며, 따라서 작업이 실행되지 않습니다.
PIC를 OWASP 에이전트 AI Top 10에 매핑하기
| OWASP 위협 | PIC가 이를 완화하는 방법 |
|---|---|
| ASI01 – Goal Hijack (prompt injection) | 신뢰할 수 없는 출처는 신뢰된 증거 없이는 고위험 행동을 트리거할 수 없으며, 전송이 차단됩니다. |
| ASI02 – Tool Misuse (hallucination) | 환상적인 주장에는 검증 가능한 증거가 없으므로 → 차단됩니다. |
| ASI03 – Privilege Escalation via Tool Chaining | 각 도구 호출은 독립적으로 평가됩니다; 낮은 영향의 읽기 작업이 이후 금전 이체에 대한 신뢰를 이어받지 않습니다. |
| ASI04 – Untrusted Data Laundering | 출처 신뢰 수준(trusted, semi_trusted, untrusted)이 적용됩니다; 신뢰할 수 없는 데이터는 암호학적 증거 없이는 신뢰된 주장으로 “세탁”될 수 없습니다. |
| (그리고 나머지 여섯 가지 위협) | PIC의 검증 레이어, 증거 요구 사항 및 실패‑닫힘(fail‑closed) 의미론이 이를 유사하게 처리합니다. |
통합 (플러그‑앤‑플레이)
| 통합 | PIC 추가 방법 |
|---|---|
| LangGraph | pip install "pic-standard[langgraph]" – 제안을 디스패치하기 전에 검증하는 도구 실행기 PICToolNode를 사용합니다. |
| MCP (Model Context Protocol) | pip install "pic-standard[mcp]" – 모든 MCP 도구를 guard_mcp_tool으로 감싸서 실패‑닫힘 검증, 요청 추적 및 DoS 제한을 적용합니다. |
| OpenClaw (TypeScript) | TS 플러그인을 설치 – 세 가지 훅: pic-gate (실행 전 차단), pic-init (세션 전체 인식), pic-audit (구조화된 감사 로그). |
| Cordum (Go) | pic-standard 팩을 추가 – job.pic-standard.verify 워커 토픽을 생성하고 라우트: proceed, fail, require_approval. |
| Language‑agnostic HTTP bridge | pic-cli serve 실행 – HTTP를 사용할 수 있는 모든 언어(Go, Rust 등)에서 로컬 검증기에 제안을 제출할 수 있습니다. |
보안 및 강화 세부 사항
-
테스트: 18개 파일(스키마, 검증자 규칙, 증거 처리, 키링, 통합, HTTP 브리지, 파이프라인)에서 108개의 테스트.
-
영향 클래스: 명시적 증거 요구 사항이 있는 7개의 공식 클래스.
-
증거 유형: SHA‑256 해시 검증 및 Ed25519 디지털 서명.
-
키링: 만료 타임스탬프와 폐기 목록이 포함된 신뢰된 키.
-
DoS 강화:
- 최대 제안 크기: 64 KB
- 평가 예산: 제안당 500 ms
- 최대 증거 파일: 5 MB
- 최대 HTTP 본문: 1 MB
- 소켓 타임아웃: 5 s
-
정식 사양: RFC‑0001 (7‑위협 모델 확장 포함).
TL;DR
- Guardrails (NeMo Guardrails, Guardrails AI, 등)은 모델이 말하는 내용을 보호하지만 모델이 수행하는 행동은 보호하지 않습니다.
- PIC는 행동 경계에서 출처, 의도, 증거를 강제함으로써 그 격차를 메웁니다.
- 이는 fail‑closed, deterministic, zero‑dependency(로컬 검증) 특성을 가집니다.
- 단일 pip 설치 또는 작은 HTTP 브리지로 기존 LLM‑agent 스택에 플러그인할 수 있습니다.
에이전트를 안전하게 보호하세요. 행동하기 전에 검증하십시오.
PIC‑Standard 개요
- 핵심 개념: 인과 오염 의미론, 행동 경계 게이팅, 출처 연결
- 라이선스: Apache 2.0 (방어적 공개 – 개념이 문서화되고 타임스탬프되어 특허를 방지함)
빠른 시작
pip install pic-standard
pic-cli verify examples/financial_irreversible.json
첫 번째 제안을 검증하는 명령은 이 한 줄입니다. 이후에 할 수 있는 일은:
- Quickstart 가이드 읽기
- 예시 제안서 살펴보기 (통과와 실패 모두)
- 공식 사양을 위한 RFC 확인
이 문서를 사용해야 하는 경우
금전, 사용자 데이터 또는 되돌릴 수 없는 작업을 처리하는 AI 에이전트를 구축하고 있다면, 이것이 누락된 안전 계층입니다.
리소스
- GitHub:
- PyPI:
- License: Apache 2.0
기여
이것이 유용하다고 생각되면, ⭐️ 저장소에 별표를 달아 주세요 – 생각보다 큰 도움이 됩니다.