토큰 승인과 서명 안전: 확인 버튼을 누를 때 당신이 동의하는 것
하드웨어 지갑은 당신이 스스로 내어 준 서명으로부터 당신을 구해 줄 수 없습니다. 오늘날 온체인 도난의 대부분은 훔친 키가 아니라 부여된 권한, 즉 컨트랙트가 나중에 지갑을 비울 수 있게 해 주는 승인이나 서명된 메시지입니다. 이 강의는 각 프롬프트가 무엇을 의미하는지, 어떤 것을 거부해야 하는지 설명합니다.

배울 내용
- 승인은 컨트랙트가 다시 묻지 않고 당신의 지갑에서 토큰을 옮길 수 있게 해 줍니다. 악의적이거나 나중에 침해된 컨트랙트에 대한 무제한 승인은 지갑이 비워지는 가장 큰 원인입니다.
- "무료"이고 "확인용일 뿐"이라는 서명 요청이 실제로는 당신의 자산을 이전하는 오프체인 주문일 수 있습니다. 사이트가 말하는 내용이 아니라 실제로 서명되는 내용을 읽으십시오.
- 승인을 주기적으로 검토하고 철회하며, 새 사이트와 상호작용할 때는 별도의 지갑을 쓰고, 모든 프롬프트를 당신의 돈에 대한 명령으로 취급하십시오.
앞선 강의들은 키와 계정을 보호했습니다. 이 강의는 완벽하게 안전한 지갑이라도 당신이 지시하면 여전히 서명하게 되는 트랜잭션에 관한 것입니다. 여기서 다루는 공격은 시드 문구를 훔치지 않습니다. 대화 상자에서 정중하게 허가를 요청하고, 당신이 그것을 허용합니다.
승인이란 무엇인가
Ethereum 계열 체인의 토큰은 토큰 컨트랙트가 각 주소의 잔고를 기록하는 표준을 따르며, 이와 별도로 허용량(allowance), 즉 다른 주소가 당신의 잔고 중 얼마를 옮길 수 있는지도 기록합니다. DEX에서 USDC를 스왑하려면 DEX의 라우터가 당신에게서 USDC를 가져갈 수 있도록 허용되어야 합니다. 라우터(스펜더)와 금액을 지정한 approve 트랜잭션에 서명함으로써 이를 부여합니다.
DEX 강의에서는 이를 스왑의 두 번째 단계로 언급했습니다. 거기서 말하지 않은 것은 승인이 지속된다는 점입니다. 한 번 부여되면 스펜더는 앞으로 언제든, 어떤 트랜잭션에서든, 추가 프롬프트 없이 그 금액까지 당신의 지갑에서 옮길 수 있습니다.
두 가지 결과가 따릅니다.
- 무제한 승인. 인터페이스는 다시 승인할 필요가 없도록 기본 금액을 "무제한"으로 설정합니다. 이는 스펜더가 해당 토큰의 잔고 전부를 — 지금이든 3년 뒤든 — 가져갈 수 있다는 뜻입니다.
- 승인은 사이트보다 오래 살아남습니다. 당신이 승인한 컨트랙트가 나중에 익스플로잇되거나 처음부터 악의적이었다면, 당신의 승인은 공격자의 입장권입니다. 사이트를 다시 방문할 필요도 없습니다. 당신은 아무것도 하지 않아도 됩니다.

드레이너는 이를 어떻게 이용하는가
지갑 드레이너는 사기꾼에게 서비스 형태로 판매되는 키트로, 가짜 사이트 뒤에서 작동합니다. 위조 에어드롭, 가짜 민팅, 실제 DEX의 복제판, 해킹된 Discord나 탈취된 프로젝트 계정의 "보상 수령" 링크 등입니다.
- 당신이 지갑을 연결합니다. 이것 자체는 무해하며, 주소만 드러냅니다.
- 사이트가 당신의 잔고를 읽고 가장 가치 있는 토큰을 고릅니다.
- 그 토큰에 대해 드레이너 컨트랙트로의 승인을 요청하는 프롬프트를 띄우되, "Claim", "Verify", "Enable trading" 등으로 꾸밉니다. 일부 프롬프트는 여러 토큰의 승인을 한 번에 묶어 요청합니다.
- 당신이 확인합니다. 눈에 보이는 일은 아무것도 일어나지 않거나, 가짜 성공 메시지가 표시됩니다.
- 몇 분 또는 며칠 뒤, 드레이너가 transferFrom을 호출해 승인된 잔고를 비웁니다.
하드웨어 지갑은 승인 내용을 표시하지만, 표시되는 것은 스펜더 주소와 금액이며, 그 주소를 알려진 컨트랙트와 대조하지 않는 한 의미가 없습니다. 대부분의 사람은 확인을 누릅니다.
트랜잭션이 아닌 서명
두 번째 부류의 프롬프트는 트랜잭션을 보내는 대신 메시지에 서명하라고 요청합니다. 가스 비용이 들지 않으며, 사이트는 "로그인용일 뿐" 또는 "소유권 확인용"이라고 말합니다. 실제로 그런 경우가 많습니다. 그러나 때로는 오프체인 주문, 즉 마켓플레이스나 퍼밋 시스템이 나중에 온체인에서 실행할 서명된 지시입니다.
두 가지 형태가 중요합니다.
- Permit / Permit2. 그 자체가 승인인 서명된 메시지로, 트랜잭션 없이 허용량을 부여합니다. 승인에 관한 위의 모든 내용이 적용되지만, 프롬프트는 무해한 서명처럼 보입니다.
- 마켓플레이스 리스팅. 당신의 NFT나 토큰을 특정 구매자에게 0의 가격으로 판매 등록하는 서명된 메시지입니다. 여기에 서명하는 것은 그것을 그냥 넘겨주는 것입니다.
지갑 프롬프트는 서명될 구조화된 데이터를 표시합니다. 거기에 스펜더, 토큰, 금액, 기한이 포함되어 있다면 사이트가 무엇이라 부르든 그것은 권한 부여입니다. 지갑이 데이터를 읽을 수 없다(원시 해시)고 경고하면 거부하십시오. 정상적인 사이트는 블라인드 서명을 요구하지 않습니다.
주소 오염
관련된 또 하나의 수법은 거래 내역에서 주소를 복사하는 습관을 노립니다. 공격자는 당신이 자주 보내는 주소와 앞뒤 문자가 일치하는 주소에서 당신에게 0원 전송을 보냅니다. 다음에 내역에서 "평소 쓰는 주소"를 복사할 때 당신은 공격자의 주소를 복사하게 됩니다. 주소 전체를 확인하거나, 내역이 아니라 지갑의 주소록을 사용하십시오.
이를 예방하는 습관
페이지가 아니라 프롬프트를 읽으십시오. 사이트는 무슨 말이든 할 수 있습니다. 지갑 프롬프트는 실제로 일어날 일을 보여 줍니다. 호출되는 컨트랙트, 함수, 스펜더, 금액입니다. 지갑의 확인 화면에서 이 네 가지를 찾는 법을 익히십시오.
정확한 금액만 승인하십시오. 대부분의 지갑과 인터페이스는 승인 금액 수정을 허용합니다. 이번 거래 규모로 설정하십시오. 다음번에 승인이 한 번 더 필요해지는 대신 상시적인 위험이 제거됩니다.
더 쓰지 않는 것은 철회하십시오. 승인 관리 도구는 한 주소가 부여한 모든 허용량을 나열하고 각각을 한 번의 트랜잭션으로 철회할 수 있게 해 줍니다. 분기마다 검토하고, 어떤 프로토콜이 익스플로잇되었다는 소식이 있으면 즉시 검토하십시오.
지갑을 분리해 사용하십시오.
| 지갑 | 보유 내용 | 상호작용 대상 |
|---|---|---|
| 금고 지갑 | 장기 보유 자산 | 없음. 받기만 하고, 보낼 때는 본인의 다른 지갑으로만. 하드웨어 기반. |
| 일상 지갑 | 현재 활발히 거래하는 자산 | 이전에 사용해 본 검증된 프로토콜 |
| 버너 지갑 | 잃어도 되는 소액 | 새 사이트, 민팅, 에어드롭, 낯선 모든 것 |
버너 지갑을 비우는 드레이너는 당신이 거기에 넣은 만큼만 가져갑니다. 승인에 결코 서명하지 않는 금고 지갑은 비워질 수 없습니다.
컨트랙트 주소를 검증하십시오. 큰 금액을 승인하기 전에 스펜더가 프로토콜이 공개한 라우터 또는 컨트랙트 주소인지 확인하십시오. 당신에게 프롬프트를 띄우는 사이트가 아니라 프로토콜의 공식 문서에서 확인해야 합니다.
시뮬레이션하십시오. 여러 지갑과 확장 프로그램은 서명 전에 트랜잭션으로 예상되는 잔고 변화를 보여 줍니다. "수령"이 당신의 잔고를 줄인다면 그것은 수령이 아닙니다.
이미 서명했다면
승인을 즉시 철회하십시오. 빠르다면 드레이너가 움직이기 전에 할 수 있습니다. 해당 토큰의 남은 잔고를 새 지갑으로 옮기십시오. 같은 사이트에서 부여한 다른 승인들도 악의적이라고 가정하고 철회하십시오. 승인으로 시드 문구가 침해되는 것은 아니므로 지갑 자체는 유지할 수 있지만, 승인은 유지할 수 없습니다.
EthereumETH우리가 인덱싱하는 50개 현물 시장 기준실전에서의 의미
- 승인은 당신의 토큰을 가져갈 수 있는 상시 권한입니다. 검증된 컨트랙트에 정확한 금액만 부여하고, 끝나면 철회하십시오.
- 가스가 들지 않는 서명도 자산을 옮길 수 있습니다. 구조화된 데이터를 읽고, 블라인드 해시는 거부하십시오.
- 아무것도 서명하지 않는 금고 지갑과 적게 보유하는 버너 지갑을 두십시오. 위험은 둘 다 하는 지갑에 있습니다.
다음 단계
보안 트랙과 Coinmico Learn의 초기 커리큘럼을 마쳤습니다. 용어집은 이 강의들에서 소개한 모든 용어를 정의하며, 각 용어에서 해당 수치가 실시간으로 측정되는 Coinmico 페이지로 링크를 제공합니다. 이제 리서치 섹션에서 이 개념들을 구체적인 시장에 적용하며, 지금까지 보셨던 데이터 블록들을 함께 활용합니다.
이 글의 자산
여기의 모든 수치는 Coinmico가 인덱싱하는 거래소와 체인에서 직접 측정한 값입니다. 방법론을 참고하세요.



