SettleLab
전체 코스
LESSON 07Account and Agent Payment

Agent Payment 위협모델

캡스톤50분근거 1

학습 결과

  • agent 결제 시스템의 asset, actor, trust boundary를 그린다.
  • 오남용, prompt injection, 지출 한도, dispute를 통합 위협모델로 정리한다.

선행 조건

  • x402 HTTP 스테이블코인 결제
  • 세션키와 지출 정책
  • ERC-7579 모듈형 스마트계정

완료 기준

  • 위협모델 다이어그램을 만들었다.
  • abuse case 8개를 작성했다.
  • 정책과 기술 방어를 연결했다.

Agent Payment 위협모델

도입

Agent payment의 핵심 질문은 "agent가 결제할 수 있는가"가 아니다. 핵심은 "agent가 어디까지 결제하지 못하게 막는가"다. x402, ERC-3009, Paymaster, session key, ERC-7579 module은 모두 이 경계를 만드는 재료다.

위협모델은 보안 문서만이 아니다. 제품 요구사항이다. 어떤 API에 얼마까지 결제할 수 있는지, prompt injection이 결제를 유도할 때 어디서 막는지, 결제는 됐지만 서비스가 실패했을 때 어떻게 환불하는지까지 제품 화면과 운영 runbook에 들어가야 한다.

학습 목표

  • agent 결제 시스템의 asset, actor, trust boundary를 그린다.
  • 오남용, prompt injection, 지출 한도, dispute를 통합 위협모델로 정리한다.

개념 설명

대시보드가로 스크롤 · 크게 보기 지원
Agent Payment 위협모델 운영 대시보드 초안이 시각화는 account abstraction과 agent payment에서 정상 지연과 장애를 구분하기 위해 어떤 지표를 먼저 볼지를 보여주며, 'Agent Payment 위협모델'에서 남겨야 할 설계 증거를 좁힌다.
Sponsored gas
정상

agent 결제 시스템의 asset, actor, trust boundary를 그린다.

Policy rejects
주의

paymaster 정책이 설명 가능한가

Session exposure
검토

Agent Payment 위협모델 이해 점검

UserOp failures
대기

위협모델 다이어그램을 만들었다.

medium가정 불일치서명 권한과 지출 한도가 분리되는가
high실패 상태 누락paymaster 정책이 설명 가능한가
watch산출물 미완료Agent Payment 위협모델 이해 점검
크게 보기
Sponsored gas
정상

agent 결제 시스템의 asset, actor, trust boundary를 그린다.

Policy rejects
주의

paymaster 정책이 설명 가능한가

Session exposure
검토

Agent Payment 위협모델 이해 점검

UserOp failures
대기

위협모델 다이어그램을 만들었다.

medium가정 불일치서명 권한과 지출 한도가 분리되는가
high실패 상태 누락paymaster 정책이 설명 가능한가
watch산출물 미완료Agent Payment 위협모델 이해 점검
흐름도가로 스크롤 · 크게 보기 지원
강의 흐름도상태, 책임, 검증 지점을 순서대로 읽기 위한 다이어그램이다.
크게 보기

각 trust boundary마다 방어가 다르다.

표 자료가로 스크롤 · 크게 보기 지원
경계위협방어
Owner to session key너무 넓은 권한 발급scope, expiry, cap, revoke
Agent runtimeprompt injection으로 고가 API 반복 호출policy engine, endpoint allowlist
x402 serverprice, payee, network 바꿔치기signed requirement hash, merchant registry
Facilitator검증 장애 또는 잘못된 settlement자체 검증 fallback, receipt reconciliation
Token/chainreplay, wrong token, wrong chainnonce domain, token allowlist, CAIP-2
Smart account module악성 module 설치 또는 hook 우회module registry, install approval, hook coverage tests
Backend ledger중복 paid 처리 또는 receipt 누락idempotency key, tx hash + log index unique key
크게 보기
경계위협방어
Owner to session key너무 넓은 권한 발급scope, expiry, cap, revoke
Agent runtimeprompt injection으로 고가 API 반복 호출policy engine, endpoint allowlist
x402 serverprice, payee, network 바꿔치기signed requirement hash, merchant registry
Facilitator검증 장애 또는 잘못된 settlement자체 검증 fallback, receipt reconciliation
Token/chainreplay, wrong token, wrong chainnonce domain, token allowlist, CAIP-2
Smart account module악성 module 설치 또는 hook 우회module registry, install approval, hook coverage tests
Backend ledger중복 paid 처리 또는 receipt 누락idempotency key, tx hash + log index unique key

코드로 확인하기

agent payment threat model은 다이어그램으로 끝나면 부족하다. 실제 시스템에는 결제 요청을 분류하고, 자동 승인 가능한 요청과 사람 확인이 필요한 요청을 나누는 코드가 있어야 한다.

백엔드결제 요청 위험 분류

CODE SURFACEtypescript
type AgentPaymentIntent = {  merchant: string;  amount: bigint;  asset: "USDC" | "PYUSD";  purpose: string;  userVisibleSummary: string;};function classifyAgentPayment(intent: AgentPaymentIntent) {  if (intent.userVisibleSummary.length < 20) return "needs_human_review";  if (intent.amount > 100_000_000n) return "large_payment";  if (!intent.purpose.includes("invoice")) return "ambiguous_purpose";  return "auto_approvable";}

이 분류는 보안 모델의 첫 번째 방어선이다. agent가 결제 의도를 설명하지 못하면, 서명이 유효해도 제품적으로는 승인하면 안 된다.

운영agent 결제 정책 파일

CODE SURFACEyaml
agent_payment_policy:  auto_approve:    max_usdc: 100    required_fields:      - merchant      - invoice_id      - user_visible_summary  require_human_review:    - new_merchant    - changed_recipient_address    - amount_above_daily_average  always_block:    - empty_summary    - unsupported_asset    - expired_invoice

정책 파일은 threat model을 운영으로 옮기는 연결점이다. capstone에서는 이 정책이 checkout, session key, x402 흐름에 공통으로 적용되는지 확인한다.

클라이언트사용자가 읽을 수 없는 agent 결제 차단

CODE SURFACEtypescript
type AgentReviewCopy = {  merchantName?: string;  amountLabel?: string;  resourceLabel?: string;  chainLabel?: string;};function requireHumanReadablePayment(copy: AgentReviewCopy) {  const missing = Object.entries(copy)    .filter(([, value]) => !value || value.trim().length < 3)    .map(([key]) => key);  if (missing.length > 0) {    return { ok: false, reason: "missing_user_visible_fields", missing };  }  return { ok: true, reason: "reviewable" };}

agent가 내부적으로 정확한 payload를 만들었더라도, 사용자가 merchant, amount, resource, chain을 읽지 못하면 자동 결제를 허용하지 않는다. UI copy는 단순 설명문이 아니라 지출 권한의 마지막 확인 단계다.

인덱서receipt anomaly 탐지

CODE SURFACEsql
select agent_id, merchant_id, count(*) as payments, sum(amount_usdc) as total_usdcfrom agent_payment_receiptswhere created_at >= now() - interval '1 hour'group by agent_id, merchant_idhaving count(*) > 10 or sum(amount_usdc) > 100;

정책은 요청 시점의 방어고, indexer는 사후 이상 징후를 잡는다. prompt injection이나 merchant misconfiguration은 정상 서명처럼 보일 수 있으므로 receipt 집계가 반드시 필요하다.

강의 포인트

표 자료가로 스크롤 · 크게 보기 지원
관점확인할 질문증거로 남길 것
asset어떤 token, chain, payment method가 위험 자산인가asset inventory
actoruser, agent, server, facilitator, wallet, module, merchant 역할이 분리됐는가actor table
boundary어느 경계에서 어떤 검증을 하는가trust boundary diagram
abuseprompt injection, over-spend, replay, service failure를 다뤘는가abuse case table
controlsonchain module과 offchain policy가 서로 보완하는가control mapping
크게 보기
관점확인할 질문증거로 남길 것
asset어떤 token, chain, payment method가 위험 자산인가asset inventory
actoruser, agent, server, facilitator, wallet, module, merchant 역할이 분리됐는가actor table
boundary어느 경계에서 어떤 검증을 하는가trust boundary diagram
abuseprompt injection, over-spend, replay, service failure를 다뤘는가abuse case table
controlsonchain module과 offchain policy가 서로 보완하는가control mapping

실무 예시

agent가 유료 data API를 하루 20 USDC 한도로 사용한다고 가정한다.

표 자료가로 스크롤 · 크게 보기 지원
abuse case예상 방어실패 시 조치
prompt injection이 고가 endpoint 반복 호출endpoint allowlist, per-request cap, daily capagent stop, receipt audit
x402 requirement가 wrong payee로 바뀜merchant registry와 requirement hash 검증서명 전 거절
session key 유출short expiry, revoke, remaining cap 제한key revoke, pending payload invalidation
module hook 우회hook coverage tests for batch/executor/fallbackemergency uninstall
payment settled but API response failedreceipt required, refund/credit queuedispute workflow
wrong chain paymentCAIP-2 check, token address allowlistpolicy reject
reused noncetoken/backend replay protectionduplicate receipt block
facilitator downself-verify fallback 또는 retry policystatus page, delayed settlement queue
크게 보기
abuse case예상 방어실패 시 조치
prompt injection이 고가 endpoint 반복 호출endpoint allowlist, per-request cap, daily capagent stop, receipt audit
x402 requirement가 wrong payee로 바뀜merchant registry와 requirement hash 검증서명 전 거절
session key 유출short expiry, revoke, remaining cap 제한key revoke, pending payload invalidation
module hook 우회hook coverage tests for batch/executor/fallbackemergency uninstall
payment settled but API response failedreceipt required, refund/credit queuedispute workflow
wrong chain paymentCAIP-2 check, token address allowlistpolicy reject
reused noncetoken/backend replay protectionduplicate receipt block
facilitator downself-verify fallback 또는 retry policystatus page, delayed settlement queue

흔한 오해와 실패 시나리오

표 자료가로 스크롤 · 크게 보기 지원
오해실제로 확인할 것
agent 결제는 wallet permission만 있으면 안전하다고 본다.wallet/module policy와 backend policy engine이 함께 필요하다.
prompt injection은 LLM 문제라 결제 설계와 별개라고 본다.prompt injection은 실제 지출을 유도할 수 있으므로 payment policy의 핵심 위협이다.
receipt는 회계용 부가 데이터라고 본다.receipt는 dispute, refund, 중복 결제 방지, user trust의 근거다.
offchain policy가 있으면 onchain hook은 필요 없다고 본다.server compromise나 replay를 고려하면 onchain spending boundary도 필요하다.
cap만 있으면 충분하다고 본다.cap 외에도 merchant, endpoint, chain, token, method, expiry가 필요하다.
크게 보기
오해실제로 확인할 것
agent 결제는 wallet permission만 있으면 안전하다고 본다.wallet/module policy와 backend policy engine이 함께 필요하다.
prompt injection은 LLM 문제라 결제 설계와 별개라고 본다.prompt injection은 실제 지출을 유도할 수 있으므로 payment policy의 핵심 위협이다.
receipt는 회계용 부가 데이터라고 본다.receipt는 dispute, refund, 중복 결제 방지, user trust의 근거다.
offchain policy가 있으면 onchain hook은 필요 없다고 본다.server compromise나 replay를 고려하면 onchain spending boundary도 필요하다.
cap만 있으면 충분하다고 본다.cap 외에도 merchant, endpoint, chain, token, method, expiry가 필요하다.

실습 과제

  1. Agent Payment 위협모델 이해 점검: asset, actor, trust boundary, abuse case, control, residual risk를 포함한 표를 작성한다.
  2. end-to-end 위협모델 작성: agent가 x402 유료 API를 구매하는 흐름을 request, policy, signing, settlement, receipt, refund 단계로 나눈다.
  3. abuse case 8개 작성: prompt injection, malicious merchant, wrong chain, session key leak, module bypass, replay, service failure, facilitator outage를 포함한다.
  4. 정책과 기술 방어 연결: session key, ERC-7579 hook, backend policy engine, receipt ledger, dashboard alert가 각각 어떤 abuse case를 막는지 mapping한다.

완료 기준

  1. 위협모델 다이어그램을 만들었다.
  2. abuse case 8개를 작성했다.
  3. 정책과 기술 방어를 연결했다.

근거 자료

  • Agent Payment 위협모델: 05-계정추상화-에이전트결제/07-Agent-Payment-위협모델.md
Final checkpoint

읽기를 마쳤다면 여기서 기록한다

아래 버튼은 읽기 진도를 저장한다. 체크리스트, 과제, 랩 산출물은 위 Workbook에서 따로 관리한다.

  • 위협모델 다이어그램을 만들었다.
  • abuse case 8개를 작성했다.
  • 정책과 기술 방어를 연결했다.

학습 자료 근거

Agent Payment 위협모델
이 LMS 레슨의 개념, 예시, 과제 구성을 잡는 데 사용한 근거 문서.
내부 참고 문서