왜 AI 에이전트 지갑은 비수탁형이어야 하는가: 라자루스 공격이 명확히 보여줬다
Source: Dev.to
번역을 진행하려면 실제 기사 본문을 제공해 주시겠어요?
본문을 알려 주시면 요청하신 대로 마크다운 형식과 코드 블록은 그대로 유지하면서 한국어로 번역해 드리겠습니다.
Bitrefill에서 발생한 일
Gartner는 라자루스 그룹이 손상된 API 키와 고객용 AI 어시스턴트를 통한 프롬프트 인젝션을 결합해 이번 달에 Bitrefill의 핫 월렛을 탈취했다고 확인했습니다. 이 인젝션은 결제 백엔드에 대한 권한을 상승시켰습니다. 중앙 관리되는 단일 키를 가진 핫 월렛은 몇 분 만에 비워졌습니다.
- 블록체인 취약점 없음.
- 스마트 계약 버그 없음.
- 그들은 중앙 집중식 키 하나를 발견했으며, 그것이 전부였습니다.
보관형 월렛을 사용하는 에이전트를 운영하고 있다면, 정확히 동일한 공격 표면을 가지고 있습니다—오히려 더 나쁠 수도 있습니다, 왜냐하면 에이전트가 지속적으로 신뢰할 수 없는 콘텐츠를 읽기 때문입니다.
에이전트를 위한 커스터디 모델이 깨지는 세 가지 방법
-
프롬프트 인젝션 → 결제 실행
에이전트는 신뢰할 수 없는 콘텐츠(웹 페이지, API 응답, 사용자 입력, 도구 출력)를 하루 종일 처리합니다. 에이전트의 컨텍스트에 텍스트를 삽입할 수 있는 공격자는 인출을 시도하거나, 거래를 승인하거나, 자격 증명을 교체하려 할 수 있습니다.- 커스터디 지갑: 해당 명령이 백엔드에 전달되어 실행될 수 있어 지갑 전체 잔액이 노출됩니다.
- 비커스터디(온‑체인 지출 정책 포함): 동일한 인젝션이 계약에 도달하고, 계약은 제한을 강제합니다(예: “거래당 최대 0.01 ETH, 화이트리스트된 주소로만, 하루에 0.1 ETH 초과 금지”). 요청이 거부됩니다.
-
인프라 소유자가 가장 약한 고리
커스터디는 다른 사람이 당신의 키를 보관한다는 의미입니다. 그 사람은 목표가 됩니다—API 키 유출, 내부자 위협, 피싱, 공급망 침해 등—모두 당신이 실수를 하지 않아도 에이전트 자금을 노출시킵니다.- 비커스터디: 에이전트가 자체 키를 보관합니다. 인프라 제공자의 침해가 당신의 지갑에 영향을 주지 않습니다.
-
바이너리 권한 부여는 에이전트에 너무 거칩니다
대부분의 커스터디 설정은 하나의 스위치만 있습니다: API 키가 지출할 수 있거나, 그렇지 않거나. 에이전트별 제한, 목적지 화이트리스트, 시간 잠금 인출 등이 없습니다.
ERC‑6551 토큰‑바운드 계정—agent‑wallet‑sdk가 실행되는 환경—은 온‑체인 지출 제어를 제공합니다. 각 에이전트 지갑은SpendingPolicy를 가지고 있으며, 이 정책은 정확히 무엇을 할 수 있는지 정의합니다. 정책은 불변이며, 감사 가능하고, 재배포에 의해 무시될 수 없습니다.
코드에서 이것이 어떻게 보이는지
import { AgentWallet, SpendingPolicy } from '@ai-agent-economy/agent-wallet-sdk';
import { parseEther } from 'ethers';
// Spin up an agent wallet with hard guardrails
const wallet = await AgentWallet.create({
policy: new SpendingPolicy({
maxPerTx: parseEther('0.01'), // 0.01 ETH max per transaction
maxPerDay: parseEther('0.1'), // 0.1 ETH daily cap
allowedDestinations: [
'0xYourAPIProvider',
'0xYourSubAgentPool',
],
}),
});
// Agent pays for an inference call
await wallet.pay({
to: '0xYourAPIProvider',
amount: parseEther('0.005'),
memo: 'inference_call_id_abc123',
});
중앙 집중식 서버가 없습니다. 정책 검사는 계약에서 이루어집니다. 주입된 프롬프트, 악성 도구 출력, 혹은 손상된 서브‑에이전트는 무관합니다—계약은 정책 외의 모든 것을 거부합니다.
ERC‑6551에 대해 아무도 말하지 않는 속성
TBA 지갑은 NFT에 의해 소유됩니다. NFT를 전송하면 모든 에이전트 권한이 즉시 취소됩니다—API‑key 회전도, 백엔드 호출도, 사고 대응 티켓도 필요 없습니다.
Bitrefill 침해 사건이 성공한 이유 중 하나는 손상된 자격 증명을 취소하려면 수동 작업이 필요했기 때문입니다. 발견과 취소 사이의 시간이 바로 피해가 발생하는 구간입니다. TBA 아키텍처를 사용하면 취소를 자동화할 수 있습니다: 이상 징후가 감지되면 NFT가 널(null) 주소로 전송되어, 사람이 호출되기도 전에 지갑이 잠깁니다.
다루어야 할 반론
“비수탁은 복잡합니다. 좋은 보안 관행을 갖춘 수탁은 괜찮습니다.”
문장의 후반부가 많은 무게를 차지합니다.
Bitrefill은 나쁜 보안 관행을 가지고 있던 것이 아니라, 일반적인 관행—API‑키 관리, 접근 제어, 로깅—을 가지고 있었습니다. Lazarus는 AI 어시스턴트를 찾아냈고, 그 어시스턴트가 결제 권한을 가지고 있었기 때문에 이를 이용했습니다.
이것이 새로운 공격 벡터입니다. 대부분의 수탁 보안 모델은 신뢰할 수 없는 텍스트를 처리하는 에이전트가 결제 기능을 갖기 이전에 구축되었습니다. 이 위협에 대비해 설계되지 않았습니다.
목적지 화이트리스트가 있는 온‑체인 지출 한도는 완벽한 OPSEC을 요구하지 않는 유일한 구조적 제어 수단입니다. 그 외 모든 것은 방어‑심층(Defense‑in‑Depth)이며—좋고 필요하지만 충분하지는 않습니다.
요약
에이전트가 실제 돈을 다루게 된다면, 아키텍처 결정은 더 이상 트레이드‑오프가 아닙니다: 온‑체인 지출 한도와 화이트리스트된 목적지, 최소한의 잔액 (다음 몇 번의 작업에 충분한 정도)인 비보관 방식.
우리는 자체 에이전트를 위해 필요했고 아직 존재하지 않았기 때문에 agent‑wallet‑sdk를 만들었습니다. 이 SDK는 TypeScript로 작성되었으며 MIT‑라이선스를 가지고, ERC‑6551 위에 구축되었습니다.
Repo: github.com/AI-Agent-Economy/agent-wallet-sdk
에이전트 결제 인프라를 구축 중이며 의견을 나누고 싶으신가요? 저는 X에서 @AgentEconoemy 입니다.
Tags: #ai #blockchain #security #typescript