WATS Wallet logoWATS Wallet
기술6분 분량

주소 포이즈닝 공격: 작동 원리와 방어법

주소 포이즈닝은 당신의 트랜잭션 기록에 닮은꼴 주소를 심어 놓고 당신이 그것을 복사하기를 기다리는 사기입니다. 닮은꼴 주소가 정확히 어떻게 만들어지는지, 잘린 주소 표시가 왜 그것을 보이지 않게 하는지, 왜 하드웨어로는 막을 수 없는지, 그리고 당신을 면역으로 만드는 습관을 살펴봅니다.

주소 포이즈닝은 공격자가 당신이 실제로 쓰는 주소와 앞뒤 글자가 일치하는 닮은꼴 주소를 생성한 뒤, 더스트나 제로 값 전송으로 당신의 트랜잭션 기록에 심어 두고, 언젠가 진짜 대신 그것을 복사하기를 노리는 사기입니다. 심어진 전송 자체는 아무것도 훔치지 않습니다. 승인을 만들지도, 키에 닿지도, 공격자에게 지갑에 대한 통제권을 주지도 않습니다 — 공격 전체가 미래의 복사-붙여넣기 실수에 거는 도박입니다. 따라서 방어는 행동의 문제입니다. 주소를 절대 트랜잭션 기록에서 가져오지 말 것, 잘린 양끝만이 아니라 주소의 중간을 검증할 것, 큰 금액을 보내기 전에 소액 테스트 송금을 먼저 할 것. 당신이 승인한 전송을 되돌릴 수 있는 지갑은 없으므로, 키는 사용자가 보유하고 WATS는 결코 키를 보유하지 않는 WATS 같은 완전한 논커스터디얼 지갑에서는 서명 직전의 그 확인이 말 그대로 마지막 방어선입니다.

복사-붙여넣기를 노리는 사기

대부분의 암호화폐 사기는 키나 서명을 공격합니다. 주소 포이즈닝은 더 부드러운 것을 공격합니다. 바로 당신의 습관입니다. 공격자는 지갑에 손대지 않고, 무언가에 서명하라고 요구하지도 않습니다. 그저 닮은꼴 주소가 당신의 트랜잭션 기록에 나타나도록 손을 써 두고 — 언젠가 진짜 대신 그것을 복사할 날을 기다립니다. 부주의한 붙여넣기 한 번이면, 자신의 주소나 늘 보내던 상대에게 갈 송금이 돌이킬 수 없이 공격자에게 갑니다.

포이즈닝은 실제로 어떻게 작동하나

공격은 생성에서 시작합니다. 암호화폐 주소는 충분히 길어서, 공격자는 당신 또는 거래 상대의 주소와 앞뒤 몇 글자 — 정확히 지갑 인터페이스가 표시하는 그 글자들 — 가 일치하는 배니티 주소를 값싸게 대량 생산할 수 있습니다. 다음은 파종입니다. 닮은꼴 주소에서 당신의 주소로 몇 센트짜리 작은 '더스트' 전송이 오기도 합니다. EVM 체인에서 더 흔한 것은 제로 값 토큰 전송입니다. ERC-20 표준은 금액이 0인 전송을 허용하므로, 공격자는 허용량(allowance)을 전혀 갖지 않은 채 당신의 주소를 참조하는 transferFrom을 호출해 완벽히 유효한 Transfer 이벤트를 발생시킬 수 있습니다 — 익스플로러와 지갑 활동 목록은 그것을 당신과 가짜 주소 사이의 평범한 거래로 보여 줍니다. 피해자 한 명당 비용이 더 싼 방법은, 아무도 보유한 적 없는 토큰에 대해 조작된 Transfer 이벤트를 무더기로 발생시키는 일회용 토큰 컨트랙트입니다. 어떤 방식을 쓰든 공격자의 비용은 약간의 가스비뿐이고 결과는 똑같습니다. 설득력 있는 미끼가 이제 당신의 기록에 참을성 있게 앉아 있습니다.

왜 통하는가: 잘림 표시와 기록에 대한 신뢰

두 가지 인터페이스 관례가 이 덫을 효과적으로 만듭니다. 첫째, 지갑과 익스플로러는 거의 예외 없이 주소를 0x1a2b…9f8e 같은 형태로 잘라 보여 주므로, 그 보이는 글자에 맞춰 만들어진 닮은꼴은 한눈에 구별이 불가능합니다. 주소 체크섬도 여기서는 당신을 구해 주지 못합니다 — 포이즈닝된 주소는 그저 다른 사람의 것일 뿐, 체크섬까지 올바른 유효한 주소여서 소프트웨어가 거부할 잘못된 입력이 애초에 없기 때문입니다. 둘째, 사람들은 자기 트랜잭션 기록을 신뢰할 수 있는 주소록처럼 씁니다. '지난주에 보냈던 주소'는 다시 써도 안전하게 느껴집니다. 포이즈닝은 바로 그 신뢰를 무기화합니다. 가짜 항목에는 이상해 보이는 구석이 전혀 없습니다. 정상 거래 옆에, 똑같은 형식으로, 종종 실제 상대의 잘린 형태를 그대로 비추며 앉아 있습니다.

포이즈닝이 할 수 있는 것 — 없는 것

분명히 말해 둘 가치가 있습니다. 포이즈닝 트랜잭션 자체는 아무것도 가져가지 못합니다. 더스트를 받아도 키가 유출되지 않고, 제로 값 전송은 어떤 승인도 부여하지 않으며, 공격자는 당신 지갑에 대한 어떤 권한도 얻지 못합니다. 공격 전체가 당신의 미래의 실수에 거는 도박입니다. 이것이 좋은 소식입니다 — 방어는 전적으로 행동의 문제이고, 키 유출과 달리 수습할 것이 없습니다. 더스트는 무시하세요(정체불명의 '선물' 토큰과 상호작용하는 것은 별개의 사기 계열입니다). 그러면 미끼는 영원히 무해합니다.

하드웨어와 인증이 이것을 막지 못하는 이유

사람들이 가장 자주 오판하는 대목입니다. 키를 보호하는 모든 계층 — 하드웨어 기기, 패스키, 태그해서 인증하는 카드 — 은 단 하나의 질문에 답합니다. 이 트랜잭션을 승인하는 사람이 올바른 본인인가? 주소 포이즈닝은 그 점을 전혀 다투지 않습니다. 서명은 진짜고, 승인은 의도적이며, 키는 멀쩡합니다. 틀린 것은 목적지뿐입니다. WATS NFC 메탈 카드가 이 구분을 깔끔하게 보여 줍니다. 이 카드는 개인 키를 전혀 저장하지 않고, WATS 앱 안에 있는 키에 태그해서 인증하는 용도이며, 콜드 스토리지 금고보다는 물리 보안 키에 가깝습니다. 그래서 다른 사람이 당신의 자금을 움직이려는 시도에는 강력한 보호가 되지만, 당신이 기록의 엉뚱한 줄에서 복사한 주소로 자금을 보내는 일에는 아무런 보호도 되지 못합니다. 목적지 확인은 승인하기 전에, 화면에서, 당신이 직접 해야 합니다 — 읽지도 않은 것에 눈감고 서명하는 습관을 가장 먼저 버려야 하는 이유가 여기 있습니다.

당신을 면역으로 만드는 습관

네 가지 습관이 문을 닫습니다. 주소를 절대 트랜잭션 기록에서 복사하지 마세요 — 수신처 자체의 인터페이스, 공식 페이지, 저장된 연락처에서 가져오세요. 양끝 이상을 검증하세요. 닮은꼴은 인터페이스가 보여 주는 바로 그 양끝에 맞춰 생성되므로, 서명 전에 주소의 중간 구간도 확인하세요. 반복되는 상대에게는 저장된 연락처나 사람이 읽을 수 있는 네임 서비스를 사용해 일상 송금에 복사가 아예 끼어들지 않게 하세요. 그리고 큰 금액이나 첫 송금이라면 소액 테스트를 먼저 보내고 도착을 확인한 뒤 나머지를 보내세요. 이것들을 지갑 보안 모범 사례의 더 넓은 위생 습관과 결합하세요 — 그리고 서명의 순간이 언제나 마지막 방어선이라는, 지갑을 dApp에 안전하게 연결하기를 지배하는 것과 동일한 원칙을 기억하세요.

WATS 같은 지갑은 어디에 들어맞나

당신이 승인한 전송을 되돌릴 수 있는 지갑은 없습니다. 그래서 현실적인 질문은, 당신의 지갑이 그 결정을 당신 손에 남겨 두는지, 그리고 사람을 서두르게 만드는 마찰을 없애 주는지입니다. WATS는 완전한 논커스터디얼입니다. Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Solana, TON 전반에서 키는 사용자가 보유하고 WATS는 결코 키를 보유하지 않습니다. 마찰 쪽에서는, WATS가 네트워크 수수료를 각 체인의 네이티브 가스 토큰 대신 ATS라는 하나의 토큰으로 청구합니다 — EVM에서는 ERC-4337 계정 추상화를, 그리고 하나의 ATS 잔액이 옴니체인으로 작동하도록 LayerZero OFT를 사용합니다. 이것은 할인이 아닙니다. 바뀌는 것은 어떤 토큰으로 내느냐이지 트랜잭션 비용 자체가 아닙니다. 대신 바뀌는 것은 행동입니다. 해당 체인의 가스 토큰이 없다는 이유로 건너뛰곤 하던 소액 테스트 송금이, 언제든 할 수 있는 일이 됩니다. 수수료로 걷힌 ATS는 공급량을 1억 개에서 3천만 개로 줄이는 소각에 투입되며, WATS는 ERC-4337과 OFT 기반 단일 토큰 수수료를 이 소각과 결합한 최초이자 유일한 지갑입니다. 작동 방식은 ATS 수수료 페이지에 정리돼 있습니다. 이 글을 읽고 구체적인 한 걸음을 뗀다면 이것으로 하세요. 주소를 기록에서 가져오는 일을 그만두고, 다음에 WATS에서 새 주소로 결제할 때는 먼저 소액 테스트를 보내고, 양끝만이 아니라 주소의 중간까지 확인한 뒤 나머지를 승인하세요.

자주 묻는 질문

주소 포이즈닝 공격이란 무엇인가요?

공격자가 당신이 쓰는 주소의 보이는 앞뒤 글자와 일치하는 닮은꼴 주소를 생성한 뒤, 더스트나 제로 값 전송으로 당신의 기록에 심는 사기입니다. 공격 자체는 아무것도 가져가지 않습니다 — 당신이 나중에 기록에서 가짜 주소를 복사해 자금을 보내기를 기다릴 뿐입니다. 방어는 행동의 문제입니다. 주소를 기록에서 가져오지 말고, 잘린 양끝 너머까지 검증하세요.

모르는 주소에서 더스트나 이상한 토큰을 받았습니다 — 침해당한 건가요?

아닙니다. 들어오는 전송은 키를 훔치거나 승인을 만들거나 지갑을 통제할 수 없습니다 — 공개 주소에는 누구나 무엇이든 보낼 수 있습니다. 위험은 나중에 실수로 공격자의 주소를 복사하거나, 정체불명 토큰의 컨트랙트와 상호작용할 때(별개의 사기 패턴입니다 — 그냥 건드리지 마세요)만 생깁니다. 더스트를 무시하면 자금은 전과 똑같이 안전합니다.

하드웨어 기기나 NFC 카드가 주소 포이즈닝으로부터 나를 지켜 주나요?

아닙니다. 그리고 WATS는 그 이유를 분명히 밝힙니다. WATS NFC 메탈 카드는 개인 키를 저장하지 않습니다. WATS 앱 안에 있는 키에 태그해서 인증하는 용도로, 콜드 스토리지 금고보다는 물리 보안 키에 가깝습니다. 인증이 증명하는 것은 누가 트랜잭션을 승인하는가이지 자금이 어디로 가는가가 아닙니다 — 그런데 주소 포이즈닝에서는 승인이 진짜이고 목적지가 틀렸습니다. 이 공격을 무력화하는 것은 승인 전에 목적지 주소를 읽는 일뿐입니다.

보내기 전에 주소를 어떻게 검증해야 하나요?

양끝 이상을 확인하세요. 닮은꼴은 인터페이스가 표시하는 앞뒤 글자에 맞춰 특별히 생성되므로 중간 구간도 비교해야 합니다. 더 좋은 방법은 일상 결제에서는 저장된 연락처를 써서 수동 비교 자체를 없애는 것이고, 큰 금액이나 첫 송금은 소액 테스트를 보내 도착을 확인한 뒤 나머지를 보내는 것입니다. WATS에서는 네트워크 수수료가 각 체인의 네이티브 가스 토큰이 아니라 ATS로 청구되므로, 별도의 가스 자산을 먼저 구하지 않아도 지원되는 어느 체인에서든 그 테스트 송금이 가능합니다.