시드 문구를 안 줬는데도 지갑이 털리는 이유

시드 문구를 안 줬는데도 지갑이 털리는 이유
  • 시드 문구나 개인키가 유출되지 않아도 자산을 잃을 수 있습니다. 공격자가 사용자를 속여 토큰을 이동시킬 권한을 확보하는 방식이 있기 때문입니다.
  • 지갑 연결, 토큰 사용 승인, 메시지 서명은 서로 다릅니다. 특히 수수료가 발생하지 않는 서명도 자산 이동에 필요한 권한을 부여할 수 있습니다.
  • 사이트와의 연결을 해제해도 이미 부여한 사용 권한은 남을 수 있습니다. 시드 문구 보관뿐 아니라 승인 대상과 범위, 남아 있는 권한까지 관리해야 합니다.

개요

가상자산 지갑을 사용할 때 가장 먼저 배우는 보안 원칙은 “시드 문구를 다른 사람에게 알려주지 말라”는 것입니다. 그러나 이 원칙을 지켰다고 모든 자산 탈취를 막을 수 있는 것은 아닙니다. 시드 문구를 훔치는 대신, 사용자가 직접 자산 사용 권한을 내주도록 유도하는 공격도 존재합니다.

따라서 지갑 보안을 이해하려면 두 가지를 구분해야 합니다. 다른 사람이 내 계정을 직접 통제하는 상황과, 내가 승인한 권한을 다른 사람이 악용하는 상황입니다.

이 글은 이더리움과 이더리움 호환 네트워크의 개인 지갑을 중심으로, 토큰 사용 승인과 서명의 의미를 살펴봅니다.

개인키 탈취와 권한 악용

시드 문구는 지갑의 계정을 복구하는 데 사용하는 정보이며, 개인키는 해당 계정의 거래 등에 서명하는 핵심 정보입니다. 공격자가 이를 확보하면 사용자를 대신해 거래를 만들고 서명할 수 있습니다. 직접 알려주지 않았더라도 악성 프로그램이나 노출된 백업을 통해 유출될 가능성이 있으므로, ‘공유한 적이 없다’는 사실만으로 유출 가능성을 배제할 수는 없습니다.

반면 권한 악용은 개인키가 사용자에게 그대로 남아 있어도 가능합니다. 사용자가 특정 주소나 스마트컨트랙트에 토큰 사용 권한을 부여하면, 상대방은 그 권한을 이용해 자산을 이동시킬 수 있습니다. 처음부터 악성인 상대에게 권한을 내주는 경우뿐 아니라, 기존에 승인한 정상 서비스의 취약점이 악용되는 경우도 고려해야 합니다.

비유하면 개인키 탈취는 금고의 열쇠를 빼앗기는 일이고, 권한 악용은 금고 안의 자산을 꺼낼 수 있는 위임장을 잘못 내주는 일에 가깝습니다. 열쇠를 안전하게 보관하는 것과 위임장의 내용을 확인하는 것은 서로 다른 보안 과제입니다.

토큰 사용 승인의 구조

탈중앙화 거래소에서 토큰을 교환하거나 디파이 서비스에 자산을 예치할 때 ‘승인’ 요청이 나타날 수 있습니다. 일반적인 ERC-20 토큰에서 이 승인은 특정 상대방이 내 토큰을 정해진 한도까지 사용할 수 있도록 허용하는 절차입니다.

기본 구조는 두 단계로 나뉩니다. 사용자가 approve로 사용 대상과 한도를 설정하면, 권한을 받은 상대방은 transferFrom을 통해 승인 범위 안에서 토큰을 이동시킬 수 있습니다. 사용 승인은 그 자체로 송금과 같지는 않지만, 이후 송금을 가능하게 하는 권한을 만듭니다.

가상의 사례로, 스테이블코인 1,000개를 보유한 이용자가 100개만 교환하려고 했다고 가정해 보겠습니다. 그런데 가짜 사이트에서 악성 주소에 1,000개의 사용 권한을 승인했다면, 공격자는 그 권한을 이용해 최대 1,000개를 가져갈 수 있습니다. 승인 직후 잔액이 그대로 보이더라도 안전하다고 판단할 수 없는 이유입니다.

이 경우 공격자가 토큰을 이동시킬 때마다 사용자의 지갑에 새로운 확인창이 나타날 필요는 없습니다. 이미 부여된 권한으로 처리되기 때문입니다. 중요한 것은 사이트에 표시된 ‘이벤트 참여’나 ‘자격 확인’이라는 문구가 아니라, 실제로 어떤 권한을 승인했는지입니다.

무제한 승인과 권한의 범위

일부 서비스는 사실상 무제한에 가까운 사용 한도를 요청합니다. 반복해서 승인하는 번거로움과 네트워크 수수료를 줄이기 위한 방식이므로, 무제한 승인 요청 자체가 곧 사기의 증거는 아닙니다. 다만 상대방이 악성이거나 승인된 계약의 취약점이 악용되면, 해당 토큰의 보유량 전체가 위험에 노출될 수 있습니다.

일반적인 ERC-20 승인에는 자동 만료 시점도 없습니다. 권한을 철회하지 않았다면 서비스를 오래 사용하지 않았더라도 승인이 남아 있을 수 있습니다. 잔액을 다른 곳으로 옮겼다가 같은 주소에 다시 해당 토큰을 입금하는 경우에도, 남아 있는 승인 한도에 따라 새로 들어온 자산이 위험해질 수 있습니다.

그렇다고 토큰 하나를 승인하는 즉시 지갑의 모든 자산에 대한 권한을 내주는 것은 아닙니다. 일반적인 토큰 승인은 특정 네트워크의 특정 토큰과 승인 대상에 적용됩니다. 한 토큰의 사용 권한이 다른 토큰의 권한으로 자동 확장되지는 않습니다.

NFT에서는 승인 범위가 다를 수 있습니다. 예를 들어 setApprovalForAll은 같은 NFT 계약에 속한 보유 NFT 전체를 특정 상대방이 이동시킬 수 있도록 허용합니다. 지갑의 모든 종류의 자산을 뜻하는 것은 아니지만, NFT 한 개만 판매하려던 이용자가 예상보다 넓은 권한을 내줄 수 있다는 점은 중요합니다.

수수료 없는 서명의 위험

지갑을 사이트에 연결하는 것과 자산 사용 권한을 부여하는 것은 별개의 절차입니다. 정상적인 지갑의 단순 연결은 계정 주소를 공유하고 사이트가 요청을 보낼 수 있도록 하는 과정이며, 그 자체가 토큰 이전 승인은 아닙니다. 다만 연결 직후 추가로 나타나는 승인·서명 요청까지 같은 절차라고 생각해서는 안 됩니다.

메시지 서명 역시 목적에 따라 의미가 달라집니다. 주소의 소유자임을 증명하는 로그인 서명도 있지만, 자산 사용 권한을 부여하는 서명도 있습니다. 따라서 ‘서명’이라는 버튼 이름만으로 안전성을 판단할 수는 없습니다.

대표적인 기능이 Permit입니다. 이를 지원하는 토큰에서는 사용자가 메시지에 서명하고, 다른 주체가 그 서명을 블록체인에 제출해 사용 한도를 설정할 수 있습니다. 서명을 만드는 순간에는 사용자가 네트워크 수수료를 내지 않아도 됩니다. 따라서 “수수료가 없었으니 자산에는 영향이 없다”는 판단은 잘못될 수 있습니다.

Permit2 역시 서명을 활용하는 구조입니다. 사용자가 해당 토큰에 대해 Permit2 계약을 미리 승인했다면, 이후 서명으로 다른 상대방에게 일정한 사용 권한을 부여하거나 일회성 이전을 허용할 수 있습니다. 이미 사용해 본 기능이라는 이유로 새로운 서명의 대상과 수량을 확인하지 않아도 되는 것은 아닙니다.

또한 일부 스마트 계정 기능은 개별 토큰보다 넓은 권한을 다룹니다. 예를 들어 EIP-7702는 계정이 지정된 코드를 실행하도록 위임하는 기능을 제공합니다. 악성 코드에 위임하면 계정의 자산 통제에 광범위한 영향을 줄 수 있으므로, 계정 위임 요청을 단순한 토큰 승인과 동일하게 생각해서는 안 됩니다.

승인 철회와 사고 대응

사이트를 닫거나 지갑의 ‘연결 해제’를 누르는 것은 이미 부여한 토큰 사용 권한을 없애는 작업이 아닙니다. 연결 상태는 지갑과 사이트 사이의 관계이고, 토큰 승인은 블록체인에 기록된 권한이기 때문입니다. 사용 권한을 없애려면 별도의 승인 철회, 즉 ‘리보크(Revoke)’가 필요합니다.

일반적인 ERC-20 승인 철회는 해당 상대방의 사용 한도를 0으로 설정하는 방식입니다. NFT 전체 승인은 해당 운영자에 대한 승인을 해제합니다. 이러한 변경은 온체인에 반영되어야 하며, 일반적으로 네트워크 수수료가 발생합니다. 지갑이나 블록 탐색기의 승인 관리 기능에서 올바른 네트워크와 대상 권한을 확인해야 합니다.

승인 철회는 추가적인 자산 이동을 막기 위한 조치이지, 이미 완료된 이전을 되돌리는 기능은 아닙니다. 또한 아직 제출되지 않은 Permit 서명은 기존 승인 한도를 0으로 바꾸는 것만으로 무효화되지 않을 수 있습니다. 계정 실행 위임 역시 별도로 확인해야 하므로, 승인 목록을 비웠다는 사실을 모든 위험이 해소되었다는 뜻으로 받아들여서는 안 됩니다.

시드 문구나 개인키의 유출이 의심된다면 대응 범위는 더 넓어집니다. 승인만 철회할 것이 아니라, 신뢰할 수 있는 환경에서 새로운 시드 문구로 만든 지갑에 남은 자산을 보호하는 조치가 필요합니다. 기존 시드 문구를 다른 지갑 앱에 다시 가져오는 것은 공격자가 가진 접근 권한을 없애지 못합니다. 자동 탈취 프로그램이 의심되는 계정에는 수수료를 마련하려고 자산을 추가 입금하는 행동도 주의해야 합니다.

서명 전 확인 기준

승인 화면에서 먼저 확인할 것은 수수료의 크기가 아니라 권한의 내용입니다. 공식 서비스의 안내와 지갑에 표시된 요청을 대조하고, 필요한 범위보다 넓은 권한을 요구하는지 살펴봐야 합니다.

확인 항목점검 기준
요청 목적로그인, 사용 승인, 자산 이전, 계정 위임 중 무엇인지 구분
권한 대상어떤 네트워크의 어떤 자산을, 어느 주소가 사용할 수 있는지 확인
허용 범위필요한 수량만 승인하는지, 무제한이나 NFT 전체 권한이 포함되는지 확인
유효 조건일회성인지, 권한이 남는지, 서명과 승인에 각각 어떤 만료 조건이 있는지 확인

특히 단순히 토큰이나 NFT를 받는 절차라고 설명하면서 기존 보유 자산의 사용 권한을 요구한다면, 그 권한이 왜 필요한지 확인해야 합니다. 에어드롭 수령을 가장해 NFT 전체 사용 승인을 요구하는 것은 경계해야 할 사례입니다.

하드웨어 지갑을 사용하더라도 이 점검은 필요합니다. 하드웨어 지갑은 개인키를 보호하는 데 도움이 되지만, 사용자가 악성 권한 부여에 직접 서명하는 상황까지 자동으로 막아주지는 않습니다. 키가 기기 밖으로 유출되지 않았더라도 유효하게 승인된 권한은 악용될 수 있다는 것이 앞서 살펴본 구조의 핵심입니다.

내용을 이해할 수 없는 요청은 일단 거절하고, 확인된 공식 경로에서 목적을 검증하는 것이 기본 원칙입니다. 서명을 재촉하는 문구보다 실제로 허용되는 행동을 기준으로 판단해야 합니다.

마무리

시드 문구를 알려주지 않았는데도 자산이 사라진 상황은 충분히 발생할 수 있는 일입니다. 개인키가 유출된 경우와 별개로, 사용자가 부여한 권한이나 서명이 자산 이동에 이용되었을 가능성이 있기 때문입니다. 실제 원인은 거래 내역과 승인 상태를 확인해 구분해야 합니다.

지갑 보안은 비밀을 지키는 일과 권한을 관리하는 일로 나뉩니다. 시드 문구를 안전하게 보관하는 동시에, 누구에게 무엇을 얼마나 허용했는지도 확인해야 합니다. 핵심은 “내 시드 문구를 누가 알고 있는가?”에서 끝나지 않습니다. “내 자산을 움직일 권한을 누구에게 내주었는가?”까지 이어져야 할 것입니다.


면책 고지: 본 콘텐츠는 일반 정보 제공 및 교육 목적만을 위해 있는 그대로 제공되며, 어떠한 종류의 진술이나 보증도 포함하지 않습니다. 본 콘텐츠는 금융, 법률 또는 기타 전문 자문으로 해석되어서는 안 되며, 특정 상품이나 서비스의 구매를 권유하기 위한 목적도 아닙니다. 필요할 경우 적절한 전문 자문가로부터 별도의 조언을 구하시기 바랍니다. 본 콘텐츠가 제3자 기고자에 의해 제공된 경우, 해당 견해는 제3자 기고자의 의견이며 고팍스의 견해를 반드시 반영하는 것은 아닙니다. 가상자산 가격은 변동성이 클 수 있습니다. 투자금의 가치는 하락하거나 상승할 수 있으며, 투자 원금을 회수하지 못할 수도 있습니다. 투자 결정에 대한 책임은 전적으로 본인에게 있으며, 고팍스 아카데미는 귀하에게 발생할 수 있는 어떠한 손실에 대해서도 책임을 지지 않습니다.