대문 보안 수업 02|Gate & OneKey: 지갑 악성 승인과 주소 독극물 공격을 어떻게 예방할까
- 핵심 관점: 온체인 지갑이 도난당하는 것은 대개 사용자가 이전에 서명한 장기 유효 승인이나 주소 독극물 공격에서 비롯되며, 개인키 유출이 아닙니다. 사용자는 '서명'과 '확인'을 구분하고, 정기적으로 승인을 취소하고, 전체 주소를 대조 확인하고, 자산 지갑을 분리하는 보안 습관을 길러야 합니다.
- 핵심 요소:
- 승인 서명은 단일 확인과 같지 않으며, 한 번의 Approve 또는 Permit으로 상대방이 한도 내에서 자산을 여러 번 전송할 수 있고 재확인이 필요 없습니다. NFT의 setApprovalForAll은 동일 유형의 모든 자산을 관리할 수 있습니다.
- 주소 독극물 공격은 사용자가 거래 기록에서 주소를 복사하고 앞뒤만 대조하는 습관을 이용하며, 공격자는 대량으로 유사 주소를 생성하여 기록에 섞어 사기를 칩니다.
- 승인 취소와 자산 이전은 자산 도난 시 최우선 조치이며, 비밀번호 변경이나 앱 재설치는 이미 발효된 온체인 승인이 계속 사용되는 것을 막을 수 없습니다.
- 온체인에서는 '서명이 곧 종결'이라 중간 차단이 없지만, 거래 플랫폼은 자금 비밀번호, 동적 검증, 신규 주소 냉각기, 출금 잠금 등 여러 층의 완충으로 위험을 낮춥니다.
- 자산을 계층적으로 관리할 것을 권장합니다. 장기 대액은 거래 계정이나 하드웨어 콜드 월렛에 보관하고, 소액 상호작용은 독립 지갑을 사용하며, 모든 자산을 DApp에 자주 연결하는 핫 월렛에 집중하지 마십시오.
- Gate 보안팀은 피싱 방지 코드 활성화, Passkey 바인딩, API Key 권한 정기 점검, 출금 일일 한도 하향 조정, 필요에 따라 출금 채널 개폐를 권장합니다.
반년 전, 여러분은 에어드롭을 받기 위해 어떤 페이지에서 '확인'을 눌렀습니다. 팝업에는 이해할 수 없는 문자열이 있었고, 서명했습니다. 이벤트가 끝나자 웹페이지를 닫았고, 나중에는 그 앱을 삭제하기도 했으며, 심지어 컴퓨터를 한 번 바꾸기까지 했습니다.
오늘, 여러분의 지갑에 있던 USDT가 사라졌습니다. 개인 키는 유출되지 않았고, 니모닉은 계속 서랍에 잠겨 있었으며, 비밀번호도 누구에게도 알려준 적이 없습니다. 그렇다면 문제는, 자금이 어느 단계에서 잘못된 것일까요?
이것은 Gate가 특별 기획한 《대문 보안 교실》의 두 번째 회차입니다. 저희는 오픈소스 하드웨어 지갑 브랜드 OneKey와 Gate 보안팀을 초청하여, 지갑과 거래 플랫폼 두 관점에서 온체인 지갑 승인과 주소 오염의 보안 문제에 대해 이야기해 보려 합니다.

게스트 소개
OneKey: 2019년에 설립되었으며, 전 세계적으로 잘 알려진 오픈소스 하드웨어 콜드 월렛 및 앱 지갑 브랜드 중 하나로, 처음부터 완전한 오픈소스라는 하드코어 이념을 고수해 왔습니다. 소프트웨어와 하드웨어 핵심 코드는 GitHub에 완전히 공개되어 커뮤니티의 검토를 받으며, 모두 SlowMist와 Offside Labs의 보안 감사를 통과하여 수억 자산의 신뢰와 최상위 기관의 투자 지원 및 채택을 받았습니다.
OneKey App은 데스크톱, 모바일, 브라우저 확장 프로그램을 지원하며, 소프트웨어 지갑으로 독립적으로 사용할 수도 있고 OneKey 하드웨어 지갑에 연결할 수도 있습니다. 또한 보안 칩, 오프라인 서명, 트랜잭션 분석, 위험 경고, 평문 서명 등의 기능을 통해 사용자가 개인 키와 니모닉을 넘기지 않고도 멀티체인 자산을 관리할 수 있도록 돕습니다.
Gate 보안팀: 안녕하세요, 여러분. 《대문 보안 교실》의 두 번째 회차입니다. Gate 보안 부서는 플랫폼 계정, 거래 및 자산 보안 체계 구축을 담당하며, 동시에 장기적으로 사용자의 이상 계정 이의 제기와 협조 조회 요청을 처리하고 있습니다.
Gate는 2013년에 설립되어 업계 최초로 100% 준비금 증명을 도입한 거래 플랫폼이며, 현재 전 세계 6000만 명 이상의 사용자에게 서비스를 제공하고 있습니다. 보안은 저희에게 부가 기능이 아니라, 이 사업이 성립될 수 있는 전제입니다. 저희는 《대문 보안 교실》이라는 시리즈课程을 통해 사용자가 마주할 수 있는 이러한 실제 위험 이면의 공통 메커니즘을 명확히 설명하고자 합니다.
Q1. 온체인 지갑은 왜 개인 키를 받지 않고도 자산을 전송할 수 있나요?
OneKey: 개인 키는 서명권을 결정하고, 승인은 특정 작업 권한을 컨트랙트나 주소에 부여합니다. 많은 승인의 본래 의도는 좋은 것으로, 사용자가 Gas를 절약하고 반복적인 온체인 작업을 줄일 수 있게 해주지만, 이는 동시에 공격자에게 편의를 제공합니다.
이전에 서명한 승인은 다른 사람이 해당 자산을 사용할 수 있도록 허용한 것과 같습니다. 이더리움 등 EVM 네트워크의 ERC-20 토큰을 예로 들면, 스왑, 대출 등의 애플리케이션을 사용할 때 사용자는 종종 먼저 Approve, 즉 승인을 해야 합니다. 이는 지정된 주소나 컨트랙트가 일정 한도 내에서 특정 토큰을 사용할 수 있도록 허용합니다. 승인이 발효되면 상대방은 transferFrom을 호출하여 토큰을 전송할 수 있으며, 매번 다시 확인을 요청할 필요가 없습니다.
예를 들어, 100 USDC를 스왑하려고 준비했지만 실제로는 무한 한도 승인을 제공한 경우입니다. 거래가 끝난 후에도 남은 승인은 여전히 유효할 수 있습니다. 승인받은 측이 공격자이거나 관련 컨트랙트에 나중에 악용 가능한 취약점이 생기면, 위험은 그 100 USDC에 국한되지 않고 이 주소의 더 많은 USDC에 영향을 미칠 수 있습니다.
NFT에도 유사한 메커니즘이 있습니다. setApprovalForAll은 일반적으로 상대방이 현재 판매하려는 한 개뿐만 아니라 동일한 NFT 컨트랙트 아래에서 보유한 모든 NFT를 관리할 수 있도록 허용합니다.
따라서 저희는 사용자가 서명 전에 승인 대상, 자산, 한도 및 유효 범위를 항목별로 확인하고, 하나라도 명확하지 않으면 서명하지 말 것을 권장합니다. 더 중요한 것은 서명 분석 기능이 있는 지갑을 사용하여 서명하려는 것이 무엇인지 이해하는 것입니다.
Gate 보안팀: OneKey가 메커니즘을 매우 자세히 설명했습니다. 저희가 보충하고자 하는 것은 주로 사용자 인식의 편차인데, 이것이 이러한 위험의 가장 근본적인 원천이기 때문입니다. 많은 사용자가 '서명'을 '확인'으로 이해합니다.
전통적인 인터넷에서는 한 번 확인을 누르면 이번 작업에 동의하는 것이고, 작업이 끝나면 권한도 끝납니다. 하지만 온체인의 승인 서명은 이런 논리가 아닙니다. 한 번 서명하면 상대방은 한도 범위 내에서 언제든지, 여러 번, 다시 확인 없이 자산을 전송할 수 있습니다. 사용자가 서명하는 것은 한 건의 거래가 아니라, 장기적으로 유효한 위임장에 더 가깝습니다.
여기에 더 은밀한 차이가 하나 더 있습니다. Permit와 Permit2는 오프체인 서명으로, 온체인 거래를 생성하지 않고 Gas를 소모하지 않으며, 지갑의 팝업에는 종종 이해할 수 없는 문자열만 표시됩니다. 사용자의 직관은 '돈이 들지 않는 작업은 위험이 없을 것'이지만, 실제로 이러한 서명의 파괴력은 온체인 승인과 완전히 동일합니다.

구체적으로 Gate의 도구를 보면, 낯선 컨트랙트는 서둘러 연결하지 마십시오. 먼저 컨트랙트 주소를 Gate AI의 컨트랙트 감사에 넣어 구조화된 위험 보고서를 받을 수 있으며, 일반적인 소유자 권한, 블랙리스트, 추가 발행, 전송세 등의 함정을 먼저 표시해 주며, 57가지 이상의 취약점 유형을 커버합니다. 서명 단계에서는 어떤 토큰, 얼마의 수량, 어떤 프로젝트를 승인하는지 명확히 확인하고, 보이는 대로 서명하는 것을 지원하며, 사용 후에는及时하게 승인을 취소하십시오.
Q2. 일반 사용자가 가장 흔히 접하는诱饵에는 어떤 것이 있나요? 이런 페이지를 볼 때 지갑을 연결해야 하는지 어떻게 판단하나요?
OneKey: 흔한诱饵는 보통 두 가지 감정을 둘러쌉니다. 이득을 볼 수 있다고 느끼게 하거나, 조작하지 않으면 손실이 있을까 걱정하게 만드는 것입니다. 전자는 에어드롭, 화이트리스트, 무료 민팅, 환불 보상이고, 후자는 계정 이상, 보안 업그레이드, 토큰 마이그레이션, 자산 곧 동결입니다. 포장은 달라도 결국 모두 지갑 연결, 서명 또는 전송이 필요한 페이지로 유도합니다.
저희는 사용자가 웹페이지 보안 검사 기능이 있는 지갑을 사용할 것을 권장합니다. 일반적으로 공식 페이지에는 인증이 있으며, 인증이 없거나 피싱 경고가 있는 것은 연결하지 마십시오.
지갑 연결은 보통 시작점일 뿐이며, 이후 서명이 구체적인 권한을 생성합니다. 먼저 전체 도메인과 작업 목적을 확인한 다음, 컨트랙트, 메서드, 승인 한도 및 Spender를 확인하십시오. 보상 하나를 받는데 무관한 자산의 무한 한도를 요구하면 즉시 종료해야 합니다. 분석할 수 없는 16진수 데이터, 불명확한 EIP-712 메시지, 지속적인 재촉도 경계할 가치가 있습니다.
낯선 DApp을 테스트할 때는 격리된 소액 지갑을 사용하고, 장기 저축 지갑은 가능한 한 프로젝트에 연결하지 마십시오.
Gate 보안팀: 저희가 처리한 사례를 보면, 진입점의 위험이 페이지 자체보다 더 높은 경우가 많습니다. 즉, 저희가 첫 번째 《대문 보안 교실》에서 중점적으로 다룬 링크를 함부로 클릭해서는 안 된다는 것입니다. 특히 DM, 그룹 채팅, 검색 엔진 광고 자리에서 온 링크는 가장 흔한 피싱 웹사이트의 세 가지 출처입니다. 검색 광고 자리는特别히 강조해야 합니다. 많은 사람이 검색 결과 첫 번째가 공식 사이트라고默认하지만, 광고 자리는 살 수 있으며, 이는 피싱 사이트가 가장 흔히 사용하는 유입 방식 중 하나입니다.
지갑 연결 자체는 저위험이지만, 완전히 0 위험은 아닙니다. 해커의 기술 수단이 업그레이드되면서, 많은 온체인 지갑 도난 사례 중 상당수는 피싱 불법 복제 웹사이트에 들어간 후 서명하지 않고 지갑만 연결했는데도 자산이 도난당한 경우입니다. 따라서 사용자는 초기 단계인 URL 클릭에서 매우 신중해야 합니다.
비교적 신뢰할 수 있는 방법은 자주 사용하는 애플리케이션을 브라우저 북마크에 추가하고, 이후 매번 북마크를 통해 접속하는 것입니다. 이 습관은 대부분의 유입형 공격과 가짜 공식 페이지를 피할 수 있으며, 사용자에게 가장 비용 대비 효과가 좋은 방어 비용입니다. 여기서도 다시 한번 상기시킵니다. 공격자는 종종 거래 플랫폼의 신용을 자신의 보증으로 이용합니다. 그들은 'Gate가 해당 토큰을 상장했다', 'Gate가 에어드롭을 진행 중이다'라고 말하며, 플랫폼의 이름으로空气 프로젝트를 신뢰할 수 있는 것처럼 보이게 만듭니다.
이럴 때 판단 기준은 사실 매우 간단합니다. Gate의 모든 공식 공지는 공식 웹사이트 공지 페이지에 동시에 게시됩니다. 어떤 소식이 특정 소셜 계정에만 나타나고 공식 웹사이트에서 찾을 수 없다면, 그것은 대체로 문제가 있을 것입니다. 이 판단은 어떤 기술 지식도 필요하지 않으며, 사용자가 컨트랙트를 볼 줄 알아야 하는 것도 아닙니다.
사용자가 Gate에서 왔다고自称하는 이메일, 문자 또는 DM을 받은 경우, 공식 검증 채널에서 이 도메인이나 연락 이메일이 저희 것인지 조회할 수 있으며, 이 작업은 십몇 초면 됩니다. 또한 사용자는 계정에서 자신만의 피싱 방지 코드를 설정할 수 있습니다. 설정하면 모든 Gate 발송 이메일에 이 문자열이 포함됩니다. 아직 설정하지 않은 사용자는 먼저 보안 설정에서 활성화할 것을 권장합니다.
Q3. 주소 오염은 어떻게 사용자가 주소를 잘못 입력하도록 속이나요? 대액 전송 전에 반드시 해야 할 확인 작업은 무엇인가요?
OneKey: 그것은 매우 흔한 습관을 이용합니다. 거래 기록에서 주소를 복사하고, 시작과 끝만 한 번 보는 것입니다.
공격자는 대상의 자주 사용하는 주소를 기반으로 시작과 끝이 유사한 주소를 대량으로 생성한 다음, 0 금액 또는 극소량의 토큰을 전송하여 가짜 주소를 거래 기록에 섞이게 합니다. 많은 사람이 전송할 때 시작과 끝만 확인하거나 '최근 주소'를直接 복사하면, 돈은 공격자에게 전송됩니다.
가장 중요한 방어 작업은 거래 기록을 신뢰할 수 있는 수취 주소록으로 사용하지 않는 것입니다. 거래소에 충전할 때는 이미 확인된 공식 충전 페이지에서 주소를 얻고, 다른 사람에게 결제할 때는 신뢰할 수 있는 채널을 통해 재확인하십시오. 주소의 출처가 신뢰할 수 있어야 하며, 붙여넣은 후에도 시작과 끝 몇 자리만 보지 말고 전체 문자를 확인해야 합니다.
대액 전송은 먼저 소액 테스트를 하고 수취인이 입금 확인을 하거나, 자신의 대상 계정에서 검증할 것을 권장합니다. 정식 전송 시에도 여전히 전체 주소를 다시 확인해야 합니다. 첫 번째 테스트 성공이 두 번째 복사, 붙여넣기 및 확인을 생략해도 된다는 의미는 아닙니다. 자주 사용하는 주소는 확인 후 주소록이나 화이트리스트에 저장할 수 있습니다.
OneKey 등 App 지갑에는 관련 감지 기능이 있어, 잘못된 복사에 대해 일반적으로 '이것은 첫 전송입니다', '유사 주소 경고'를 알려주어 사용자가 이것이 오염임을 빠르게 발견할 수 있도록 돕습니다.
Gate 보안팀: 이 문제는 많은 사람이 생각하는 것보다 거래 플랫폼과 더 직접적인 관련이 있습니다. 충전과 출금이 바로 주소 오염이 가장 많이 발생하는 두 가지 시나리오이기 때문입니다.
먼저 충전입니다. OneKey가 언급한 그 원칙을 다시 한번 강조하고 싶습니다. 충전 주소는 반드시 플랫폼의 공식 충전 페이지에서 직접 가져와야 하며, 어떤 소셜 소프트웨어의 기록에서도 복사하지 마십시오. 또한 휴대폰에 설치된 키보드 소프트웨어에 보안 문제가 있는지 경계해야 합니다. 많은 사례가 키보드 소프트웨어 문제로 사용자의 전송 및 충전 주소가 모르는 사이에 바뀌어 자금이 도난당한 경우입니다.
출금 측면에서 Gate에는 바로 사용하는 것을 권장하는 두 가지가 있습니다. 첫째는 주소록으로, 자주 사용하는 주소를 확인 후 저장하고以后 장부에서 선택하면 한 번의 실수로 붙여넣는 일이 줄어듭니다. 둘째는 API 출금은 주소록에 이미 있는 주소로만 출금할 수 있다는 것으로, 프로그래밍 시나리오에서는 화면을 지켜보는 사람이 없으므로 이 제한은 강제로 한 번의 수동 확인을 추가하는 것과 같습니다. 새로 추가한 출금 주소에는 24~48시간 쿨다운 기간이 있어, 오염으로 주소


