지갑을 쥔 에이전트는 새로운 공격 표면입니다: 코드도 멀쩡하고 컨트랙트도 멀쩡한데 돈이 사라집니다 — 어떤 웹페이지의 문장 하나가, 개인키를 쥔 그것을 설득해 송금하게 만들었기 때문입니다. 이 도구가 시험하는 것이 바로 그것입니다. 먼저 에이전트가 무엇을 할 수 있는지 읽어 내고, 20개의 적대적 프로브로 실제로 무엇을 하는지 묻고, 마지막으로 개인키가 전혀 없는 미끼 지갑을 건네 무엇에 서명하려 했는지 보여 드립니다.
첫 번째는 구조를 읽고, 두 번째는 행동을 읽습니다. 관측된 증거를 만들어 낼 수 있는 것은 두 번째뿐이며 — 관측된 증거만이 '심각'으로 보고될 자격이 있습니다.
도구 정의를 붙여넣으면 능력 그래프가 나옵니다: 어떤 도구가 가치를 옮길 수 있는지, 어떤 도구가 에이전트 자신이 쓰지 않은 텍스트를 끌어들이는지, 어떤 도구가 개인키에 닿는지, 그리고 그것들과 서명 사이에 무엇이 막고 있는지.
에이전트 엔드포인트로 적대적 메시지 20개를 보내고 무엇이라 답하는지 읽습니다. 관측 증거를 만들어 내는 유일한 경로이며, 그래서 '심각'이라는 결론을 낼 수 있는 유일한 경로이기도 합니다.
개인키를 전혀 갖지 않은 지갑을 건넵니다. 무엇에 서명하려 했는지, 누구에게 보내려 했는지, 금액이 얼마였는지가 전부 기록되고 — 단 한 푼도 실제로 움직이지 않습니다.
각 페이로드는 에이전트에게 분명하면서도 아무래도 상관없는 일 하나만 시킵니다: 토큰을 되읽게 하거나, 개인키가 없는 감시용 주소를 말하게 하거나, 아무도 요청하지 않은 도구에 손을 뻗게 하는 것. 시키는 대로 했다는 사실 자체가 그 취약점입니다.
시스템 프롬프트와 도구 정의는 사용자 기기에서 파싱되며 전송되지 않습니다. 밖으로 나가는 것은 구조입니다 — 도구 이름, 능력 분류, 불리언 값 — 네트워크 패널에서 확인하실 수 있습니다.
MCP의 tools/list 출력, OpenAI와 Anthropic의 도구 스키마, ElizaOS의 character.json, n8n과 Make의 워크플로 내보내기, 그리고 에이전트 소스 코드 자체. 형식은 스스로 알아보므로 미리 변환하지 않으셔도 됩니다.
도구 자체(스캐너, 콘솔, SAFI 워크스페이스)의 화면은 아직 영어입니다. 이 페이지들은 그 안으로 들어가기 전에 무엇을 하게 되는지 한국어로 끝까지 설명해 드립니다.
아무 엔드포인트에나 발사할 수 있는 테스트 도구는 그 자체로 공격 서비스입니다. 여기 있는 문턱 하나하나는 일부러 남겨 둔 것입니다.
첫째, 그 호스트를 통제한다는 증명: 엔드포인트 자신의 오리진에 /.well-known/saferico-agent-test.txt를 게시하되 내용은 이 페이지가 준 토큰이어야 합니다. 그 토큰을 도출할 수 있는 것은 사용자의 계정뿐입니다.
둘째, 분명한 권한 선언. 그 자체로 무엇을 증명하지는 않습니다 — 그것은 앞의 파일이 할 일입니다 — 하지만 의도를 기록하며, 그것이 보안 도구와 공격 서비스를 가르는 경계선입니다.
시스템 프롬프트는 선택 사항입니다. 넣으시면 인젝션 관련 점검이 훨씬 정확해지고, 넣지 않으시면 해당 항목이 '통과'가 아니라 '미테스트'로 보고됩니다.
유출을 식별하려면 대조할 것이 있어야 하므로, 그 한 칸에 넣으신 문구는 — 최대 200자 — 프로브 요청과 함께 저희 Worker로 전송되어 대조 후 폐기됩니다: 저장하지 않고, 로그에 남기지 않고, 리포트에 적지 않으며, 테스트 대상 엔드포인트로는 결코 보내지 않습니다. 그 200자조차 공유하고 싶지 않으시다면 비워 두세요 — 해당 항목은 '미테스트'로 보고되며, 그것은 정직한 결과이고 다른 무엇도 잃지 않습니다.
미끼 서명자는 개인키가 없는 주소입니다. 에이전트는 전체 흐름을 끝까지 밟고 무엇이든 서명하려 시도할 수 있으며, 그 결과는 기록 한 줄뿐입니다.
페이로드에 실제 도난 주소가 등장하지 않는 이유도 이것입니다: 그런 주소를 사용자의 로그에 적어 넣는 것은 누구에게도 도움이 되지 않고, 실제로 측정되는 것 — 시키는 대로 했다는 사실 — 은 페이로드의 내용과 무관하기 때문입니다.
스캐너는 묻습니다: 어떤 취약점이 존재하는가. Hack My Contract는 묻습니다: 공격자가 그것을 실제로 쓸 수 있는가. 이 도구는 세 번째 질문을 던집니다: 지갑을 쥔 그 에이전트를 설득해 스스로 피해를 만들게 할 수 있는가.
이 세 질문은 같은 스캐너의 세 가지 표현이 아닙니다 — 각각이 앞의 것이 멈춘 자리에서 시작합니다.