무기한 DEX의 Drainer 서명: 작동 원리와 식별 방법
Drainer 공격은 DeFi 생태계에서 가장 큰 피해를 일으키는 공격 유형 중 하나가 되었습니다. Chainalysis의 최근 연구에 따르면 Drainer-as-a-Service, 즉 서비스형 Drainer 생태계는 이미 고도로 산업화되어 있으며, 공격자는 완성된 툴킷을 구독하는 것만으로도 무기한 DEX 사용자를 겨냥한 정교한 서명 피싱 공격을 실행할 수 있습니다.
Hyperliquid, dYdX, GMX 같은 플랫폼에서 활발히 거래하는 사용자라면 Drainer 서명이 어떻게 작동하는지 이해하는 것이 자기 보호의 첫걸음입니다.
Drainer 서명 공격이란?
Drainer 서명 공격의 핵심은 소셜 엔지니어링이나 피싱을 통해 사용자가 겉보기에는 무해해 보이지만 실제로는 자산 이동 권한을 부여하는 서명 요청에 서명하도록 유도하는 것입니다.
Drainer 공격은 개인키를 직접 훔치는 방식과 다릅니다. 대신 이더리움 생태계의 합법적인 승인 메커니즘을 악용합니다.
- ERC-20 토큰의
Approve기능: 제3자 주소가 지정된 수량의 토큰을 이동할 수 있도록 허용 - EIP-2612
Permit서명: 온체인 Approve 트랜잭션 없이 오프체인 서명만으로 승인 완료 - EIP-712 구조화 데이터 서명: 다양한 구조화된 작업을 승인하는 데 사용
- EIP-4337 계정 추상화와 관련된 일괄 작업 승인
이러한 메커니즘은 정상적인 사용 환경에서는 합리적이고 필요합니다. 문제는 Drainer 공격자가 그 기술적 복잡성을 이용해 악성 승인을 일반적인 DApp 상호작용처럼 위장한다는 점입니다.
무기한 DEX 환경에서 더 위험한 이유
잦은 상호작용이 위험 창구를 만듭니다
무기한 선물 거래자는 DEX 컨트랙트와 자주 상호작용합니다. 포지션 오픈, 추가 진입, 증거금 조정, 펀딩비 수령 같은 작업에는 서명이 필요합니다. 이런 고빈도 작업은 사용자가 서명 요청에 습관적으로 동의하게 만들고, 이상한 요청을 의심하는 감각을 낮출 수 있습니다.
대규모 USDC 승인이 주요 표적입니다
Hyperliquid 같은 무기한 DEX에서는 사용자가 큰 금액의 USDC를 DEX 컨트랙트에 승인해야 하는 경우가 많습니다. Drainer 공격자는 피싱 페이지에서 이와 비슷한 승인 요청을 위조하고, 대상 주소를 공격자가 제어하는 주소로 바꿔치기합니다.
사용자가 “USDC 승인”이라는 문구만 보고 대상 컨트랙트 주소를 꼼꼼히 확인하지 않으면, 상당한 금액을 공격자에게 승인해 버릴 수 있습니다.
Permit 서명은 특히 위험합니다
EIP-2612 Permit은 사용자가 온체인 Approve 트랜잭션이 아니라 오프체인 서명으로 토큰 승인을 완료할 수 있게 합니다. 이는 다음을 의미합니다.
- 서명 과정에서 온체인 트랜잭션이 발생하지 않고 Gas도 들지 않으며, 지갑 활동 내역에 해당 “승인 기록”이 남지 않을 수 있습니다.
- 공격자는 서명을 확보한 뒤 직접 온체인 트랜잭션을 제출해 승인을 완료하고, 사용자의 지갑에서 토큰을 이동시킬 수 있습니다.
- 사용자 입장에서는 자산이 이동되기 전까지 이미 유효한 승인 서명에 서명했다는 사실조차 모를 수 있습니다.
Permit 서명은 겉보기에는 일반적인 DApp 로그인 서명, 예를 들어 Sign-In With Ethereum과 매우 비슷하게 보일 수 있습니다. 그래서 일반 사용자가 식별하기 가장 어려운 Drainer 수법 중 하나입니다.
Drainer 서명의 기술적 구조
전형적인 EIP-712 Drainer 서명 요청에는 다음과 같은 필드가 포함될 수 있습니다.
유형: EIP-712 구조화 데이터 서명
도메인(Domain):
name: [사칭된 프로토콜 이름]
version: 1
chainId: 1 또는 42161 등 대상 체인
verifyingContract: [DEX 컨트랙트처럼 위장한 Drainer 컨트랙트 주소]
메시지(Message):
owner: [피해자 주소]
spender: [Drainer 공격 컨트랙트 주소]
value: [사용자 잔액의 전부 또는 대부분]
deadline: [미래의 특정 타임스탬프]
nonce: [자동으로 가져온 현재 nonce]
지갑이 이러한 필드를 사람이 읽을 수 있는 방식으로 보여준다면 verifyingContract와 spender가 공식 프로토콜의 컨트랙트 주소와 다른지 확인할 수 있습니다. 하지만 지갑이 원시 16진수 데이터만 표시한다면 일반 사용자가 이 차이를 알아차리기는 거의 불가능합니다.
Drainer 서명 식별을 위한 실전 체크리스트
어떤 요청에든 서명하기 전에 아래 항목을 확인해 보세요.
verifyingContract주소: 현재 사용 중인 DEX의 공식 컨트랙트 주소와 완전히 일치하는지 확인합니다. 한 글자라도 다르면 안 됩니다.spender주소: Permit 유형 서명이라면spender는 사용자가 명확히 알고 신뢰하는 컨트랙트여야 합니다.value필드: 이번 작업에 필요한 금액보다 과도한 금액을 요청하는지 확인합니다. 특히 잔액 전체에 가까운 숫자는 매우 위험합니다.deadline필드: 합리적인 시간 범위인지 확인합니다. 정상 작업은 보통 몇 분 단위인 경우가 많으며, 몇 년 뒤 만료되는 서명은 의심해야 합니다.- 작업 출처: 사용자가 공식 웹사이트에서 직접 시작한 서명 요청인지, 아니면 갑자기 팝업으로 나타난 요청인지 확인합니다.
OneKey의 Drainer 방어 기능
OneKey 지갑은 Drainer 공격에 대응하기 위한 기능을 제공합니다.
- EIP-712 서명 내용 시각화: 구조화된 서명 데이터를 자동으로 분석해 원시 16진수가 아니라
owner,spender,value같은 핵심 필드를 읽기 쉬운 형식으로 보여줍니다. - 컨트랙트 주소 위험 표시: 알려진 악성 컨트랙트 주소에 대해 위험 알림을 표시합니다.
- 트랜잭션 시뮬레이션 미리보기: 온체인 Approve 작업의 경우 사용자가 서명하기 전에 실행 결과를 시뮬레이션해 “X 수량의 USDC를 Y 주소에 승인하게 됩니다”와 같은 정보를 보여줍니다.
- 대규모 승인 경고: 요청된 승인 금액이 현재 보유량의 특정 비율을 초과하면 추가 경고를 표시합니다.
- 오픈소스 코드 검증: OneKey GitHub 저장소를 통해 보안 연구자가 방어 로직의 구현을 독립적으로 검증할 수 있습니다.
하드웨어 지갑은 Drainer 방어에서 중요한 역할을 합니다. 공격자는 기기 화면에서의 물리적 확인 없이 자동으로 서명을 진행하기 어렵고, 하드웨어 기기 화면에 표시되는 내용은 소프트웨어 계층의 악성 코드가 임의로 변조하기 어렵기 때문입니다.
또한 Revoke.cash를 정기적으로 사용해 여러 DEX에 남아 있는 과거 승인 내역을 점검하고, 더 이상 사용하지 않는 승인을 제때 철회하면 Drainer 공격자가 악용할 수 있는 공격 면을 줄이는 데 도움이 됩니다.
알려진 고위험 Drainer 공격 경로
Drainer 공격은 공식 사이트와 유사하게 만든 피싱 페이지, 가짜 에어드롭 또는 리워드 페이지, 검색 광고로 노출되는 사칭 사이트, 탈취된 소셜 계정이 공유하는 링크, 가짜 고객지원 메시지 등을 통해 유입되는 경우가 많습니다. 특히 무기한 DEX 사용자는 빠른 거래 의사결정에 익숙하기 때문에, “지금 서명해야 한다”는 압박을 주는 화면일수록 더 천천히 확인해야 합니다.
자주 묻는 질문
Q1. Permit 서명과 일반 승인(Approve)은 무엇이 다른가요?
Approve는 온체인 트랜잭션이며 Gas가 필요합니다. 실행 후에는 온체인에서 승인 기록을 확인할 수 있습니다. 반면 Permit은 오프체인 서명으로 Gas가 들지 않고, 서명 후 상대방이 온체인 작업을 제출합니다. 사용자의 지갑 활동 내역에는 사용자가 직접 보낸 승인 트랜잭션이 남지 않을 수 있어 발견과 대응이 더 어렵습니다. 두 방식 모두 자산 보안 측면에서는 심각한 위험이 될 수 있습니다.
Q2. 이미 의심스러운 서명에 서명했다면 어떻게 해야 하나요?
Approve 유형이라면 즉시 Revoke.cash에서 승인을 철회해야 합니다. Permit 유형이라면 단순 철회가 효과적이지 않을 수 있습니다. 승인이 이미 오프체인 서명으로 완료되었고 공격자가 이를 언제든 제출할 수 있기 때문입니다. 이 경우 관련 토큰을 즉시 새 주소로 옮기는 것이 필요할 수 있습니다. 대응 속도가 매우 중요하며, 실제로는 몇 분의 시간밖에 없을 수 있습니다.
Q3. OneKey 하드웨어 지갑을 사용하면 Drainer 공격을 완전히 막을 수 있나요?
하드웨어 지갑은 Drainer 공격의 난도를 크게 높입니다. 모든 서명에는 사용자의 기기 화면 확인이 필요하고, 기기 화면의 표시 내용은 컴퓨터의 악성코드가 쉽게 바꿀 수 없기 때문입니다. 그러나 사용자가 내용을 이해하지 못한 채 기기에서 무작정 확인을 누르면 공격은 여전히 성공할 수 있습니다. 방어 효과의 한계는 결국 사용자가 서명 내용을 얼마나 이해하고 검토하느냐에 달려 있습니다.
Q4. Drainer-as-a-Service란 무엇인가요?
Drainer 공격 툴킷을 상업화한 서비스 모델입니다. 공격자는 직접 코드를 작성하지 않아도 툴킷을 구독하고, 탈취 성공 금액에 따라 수익을 나누는 방식으로 특정 플랫폼을 겨냥한 Drainer 공격을 배포할 수 있습니다. 이 모델은 공격자의 기술 진입장벽을 크게 낮췄고, 최근 Drainer 공격 빈도가 증가하는 원인 중 하나로 지목됩니다. 자세한 내용은 Chainalysis 연구 보고서를 참고할 수 있습니다.
Q5. 무기한 DEX 플랫폼 자체가 Drainer 공격을 막아주나요?
정상적인 무기한 DEX 플랫폼은 공식 프런트엔드에서 알려진 악성 주소를 필터링할 수 있습니다. 하지만 공격자는 보통 자신이 배포한 피싱 페이지에서 사용자를 유도해 플랫폼 프런트엔드의 보호를 우회합니다. 따라서 OneKey의 서명 분석처럼 지갑 레벨에서 작동하는 방어 계층은 다양한 접근 환경에서 중요한 보호 수단이 됩니다.
마무리: 모든 서명을 이해하는 것이 진짜 보안입니다
Drainer 공격이 성공하는 근본적인 이유는 사용자가 서명 내용을 이해하지 못한 상태에서 확인을 누르기 때문입니다. 기술 도구는 서명을 더 쉽게 읽도록 도와줄 수 있지만, 최종적인 방어는 사용자가 매번 서명 요청을 능동적으로 검토하는 습관에서 나옵니다.
OneKey 지갑을 다운로드해 서명 분석과 트랜잭션 시뮬레이션 기능을 활용해 보세요. 그리고 OneKey Perps를 통해 탈중앙화 무기한 선물 시장에 접근할 때도 각 서명과 승인 요청을 확인하는 보안 중심의 거래 흐름을 유지하는 것이 좋습니다.
위험 고지: 이 글은 교육 목적의 참고 자료이며 투자 조언, 법률 조언 또는 보안 보장을 제공하지 않습니다. Drainer 공격 방식은 계속 진화하며, 여기서 설명한 방어 방법이 완전한 보호를 보장하지는 않습니다. 온체인 자산은 탈취될 경우 일반적으로 회수가 어렵습니다. 위험을 충분히 이해한 뒤 신중하게 행동하시기 바랍니다. 암호화폐 거래는 높은 시장 위험을 수반하며, 레버리지 거래는 원금을 초과하는 손실로 이어질 수 있습니다.



