토큰 Approve(승인)는 ERC20 토큰이 스마트 컨트랙트와 상호작용하기 위한 표준 메커니즘이지만, 2024~2026년 가장 큰 DeFi 공격 벡터이기도 합니다. 이 글에서는 Approve 메커니즘과 취소 방법을 상세히 다룹니다. 결론부터 말하면 DeFi 상호작용을 할 때마다 Approve 잔여분이 생길 수 있고, 장기간 취소하지 않으면 거대한 위험이 누적되며, 매달 Revoke.cash로 점검하고 불필요한 승인을 취소하는 것이 DeFi 사용자의 필수 습관입니다. 계정은 주계정과 예비계정을 나눠 쓰는 것이 좋은데, 바이낸스 공식 사이트에서 주계정을 등록하고, 안드로이드는 바이낸스 공식 앱을 설치하며, 아이폰 사용자는 해외 Apple ID 전환이 필요하니 iOS 설치 가이드를 참고하세요.

1. Approve 메커니즘의 원리

ERC20 토큰의 두 가지 방식:

ERC20 토큰 표준은 두 가지 전송 방식을 설계했습니다.

  1. transfer: 사용자가 직접 전송(다른 사람에게 USDC를 보냄)
  2. transferFrom: 컨트랙트가 대신 전송(스마트 컨트랙트가 내 계정에서 USDC를 인출)

transferFrom을 쓰려면 먼저 Approve가 필요합니다:

1단계: 사용자가 USDC 컨트랙트의 approve(spender, amount)를 호출
        - spender = 컨트랙트 주소
        - amount = 승인 수량

2단계: 컨트랙트가 transferFrom(user, recipient, amount)을 호출
        - amount 범위 내에서만 성공

예를 들어 Uniswap을 사용할 때:

1단계: 사용자가 Uniswap Router에 USDC 인출을 Approve(한 번에 1000 USDC 승인)
2단계: 사용자가 Uniswap에서 USDC → ETH 교환을 시작
3단계: Uniswap Router가 USDC.transferFrom을 호출해 USDC를 인출
4단계: Uniswap Router가 사용자에게 해당 수량의 ETH를 전송

Approve는 DeFi와 ERC20 토큰이 상호작용하는 기본 메커니즘입니다.

Q: 상호작용할 때마다 매번 다시 Approve해야 하나요?

아닙니다. Approve는 지속됩니다:

이것이 Approve 누적 위험의 근원입니다. 장기간 취소하지 않으면 → 수많은 과거 Approve가 여기저기 흩어져 남습니다.

2. Approve의 두 가지 유형

한정 승인(Limited Approval):

무제한 승인(Unlimited Approval / MaxUint256):

무제한 승인이 존재하는 이유:

무제한 승인의 위험:

실제 사례:

2024년 12월 한 사용자가 2022년 Uniswap에서 USDC를 Unlimited로 Approve했습니다. 2024년 12월 이 사용자의 지갑에 5만 USDC가 들어왔고, 2시간 후 악성 컨트랙트(Uniswap V3로 위장한 악성 Router)가 transferFrom을 호출해 전부 빼앗아 갔습니다. 사후 조사 결과 피싱 컨트랙트가 사용자의 과거 Approve 취약점을 이용해 공격한 것으로 밝혀졌습니다.

Q: 한정 승인과 무제한 승인 중 어느 쪽을 선택해야 하나요?

보안파(추천): 상호작용할 때마다 구체적인 수량을 직접 Approve

편의파: 기본적으로 무제한 승인

주류 전략:

3. Approve 공격의 흔한 형태

형태 1: 피싱 사이트의 Approve 공격

피싱 사이트는 UI를 진짜처럼 위장하고, 사용자가 지갑을 연결하면 Approve 거래에 서명하게 만듭니다.

형태 2: Permit 서명 공격

EIP-2612가 도입한 permit 함수는 서명만으로(온체인 없이) 승인할 수 있게 합니다.

Permit 공격의 위험성:

형태 3: 과거 Approve를 통한 프로토콜 해킹

과거에 Approve한 프로토콜이 해킹당하는 경우:

형태 4: 악성 Token Drainer

피싱 사이트는 서명 시 여러 개의 Approve를 한 번에 승인하게 만듭니다.

Q: Permit 서명이 Approve보다 더 위험한가요?

네, Permit이 훨씬 위험합니다:

항목 Approve Permit
온체인 여부 예 아니오(서명만)
가스 소모 예 아니오
지갑 해석 비교적 명확 직관적이지 않음
취소 방식 Revoke 온체인 거래 취소 불가(컨트랙트 nonce 변경 필요)
사용자 경계심 높음 낮음

Permit 서명은 반드시 토큰, 수량, 수신자를 꼼꼼히 확인해야 합니다.

4. Revoke로 Approve 취소하는 방법

주요 취소 도구:

Revoke.cash(가장 대중적, 추천):

Etherscan Token Approval:

Solscan Approval(Solana):

Revoke.cash 사용 절차:

1. revoke.cash 접속
2. "Connect Wallet" 클릭(MetaMask / Rabby 연결)
3. 모든 승인이 자동으로 로드됨(토큰 / 프로토콜별 분류)
4. 목록 확인:
   - 토큰 이름(USDC, USDT, WETH 등)
   - 승인 대상(컨트랙트 주소 + 유명 프로토콜명)
   - 승인 수량(구체적 값 또는 Unlimited)
   - 위험 등급(빨간색 = 고위험, 초록색 = 알려진 프로토콜)
5. "Revoke" 클릭해 의심스러운 승인 취소
6. MetaMask 팝업에서 서명 + 가스 지불
7. 온체인 반영 대기(5~30초)

Revoke의 가스 비용:

체인 건당 취소 가스
이더리움 메인넷 5~30달러
Polygon 0.01달러 미만
Arbitrum / Optimism / Base 0.1~1달러
BNB Chain 0.05~0.30달러
Solana 0.01달러 미만

Q: Approve를 취소할 때도 가스를 내야 하나요?

네. Revoke는 온체인 거래이므로 가스를 지불해야 합니다. 다만:

최적화 팁:

5. Approve 정기 점검 표준 절차

점검 빈도:

사용자 유형 점검 빈도
활발한 DeFi 사용자(주 5회 이상 상호작용) 매월
중간 DeFi 사용자(월 5~20회 상호작용) 3개월마다
저빈도 DeFi 사용자(월 5회 미만 상호작용) 6개월마다

점검 절차:

1단계: Revoke.cash에 지갑 연결

2단계: 승인 항목 위험도별 분류

위험 등급별 정렬:

3단계: 불필요한 승인 취소

취소 원칙:

4단계: 필요한 승인의 기록 보관

유지한 승인 기록:

5단계: 점검 후마다 검증

Q: 취소 전에 어떤 프로토콜이 "알려진 것"인지 어떻게 판단하나요?

판단 방법:

  1. 프로토콜 이름: Revoke.cash에 표시되는 프로토콜명(예: "Uniswap V3 Router")
  2. 컨트랙트 주소: Etherscan에서 컨트랙트가 검증되었는지, 주류 프로토콜인지 검색
  3. DefiLlama 프로토콜 페이지: TVL과 운영 기간 확인
  4. 공식 문서: 프로젝트 측이 공개한 컨트랙트 주소

식별할 수 없는 컨트랙트 + Unlimited 승인 = 고위험이므로 즉시 취소해야 합니다.

6. 체인별 Approve 관리

이더리움 메인넷 + EVM 호환 체인:

Solana 체인:

비트코인 체인:

Move 계열(Sui / Aptos):

Q: Solana에도 Approve 위험이 있나요?

있습니다. Solana의 "서명 승인" 위험도 비슷합니다:

주요 Solana 피싱 유형:

방어 원칙은 이더리움과 동일합니다.

7. Approve 최적화 모범 사례

1. 매번 Approve할 때 구체적인 수량 사용

MetaMask의 Approve 알림 설정:

2. 주계정과 부계정 분리

3. 오래된 프로토콜 승인 취소

매월 점검:

4. "조합 서명" 경계

5. 서명 해석 도구 사용

Q: 한 번에 모든 Approve를 취소할 수 있나요?

"일괄 전체 취소" 기능은 없습니다:

일부 도구는 "대기열" 방식의 일괄 처리를 제공합니다:

8. 특수 상황: NFT Approve

NFT에도 Approve 메커니즘이 있습니다:

NFT Approve의 위험:

실제 사례:

2024년 5월 한 사용자가 OpenSea를 위장한 사이트에서 setApprovalForAll에 서명해 악성 컨트랙트가 자신의 BAYC NFT를 관리하도록 승인했습니다. 이후 BAYC는 즉시 공격자 주소로 이전되었고, 손실액은 약 12만 달러였습니다.

NFT Approve의 취소:

Q: OpenSea / Blur에서 NFT를 팔 때 반드시 승인해야 하나요?

네. 주요 NFT 마켓은 판매를 위해 반드시 승인이 필요합니다:

안전한 방법:

9. 자주 묻는 질문

Q: Approve 한 번에 최소 가스는 얼마인가요?

이더리움 메인넷 Approve 표준 가스:

L2 / Polygon / BSC에서는 Approve가 보통 1달러 미만입니다.

Q: 취소한 Approve를 다시 활성화할 수 있나요?

직접 재활성화는 불가능합니다. 취소하면 "승인한 적 없는 상태"가 되어 다시 Approve해야 합니다:

Q: 모든 ERC20 토큰이 Approve가 필요한가요?

네. 모든 ERC20 표준 토큰은 Approve 메커니즘을 따릅니다:

예외:

Q: Approve하면 토큰이 잠기나요?

아닙니다. Approve는 토큰을 잠그지 않습니다:

Approve는 "신용카드 한도"와 비슷합니다. 가맹점에 신용 한도를 부여하지만 돈은 여전히 내 은행 계좌에 있는 것과 같습니다.

Q: Permit 서명은 어떻게 취소하나요?

Permit 서명은 직접 "취소"할 수 없지만, 간접적인 방법이 있습니다.

Permit 보안의 핵심은 예방입니다. Permit 서명 전에는 항상 꼼꼼히 확인하세요.

Q: USDT와 USDC의 Approve 위험은 같은가요?

전반적으로 비슷하지만 세부적인 차이가 있습니다.

Q: 한 지갑의 과거 모든 Approve 기록을 확인할 수 있나요?

가능합니다.

Q: Approve를 취소하면 즉시 적용되나요?

네. Revoke가 온체인에서 확인되면 즉시 적용됩니다:

Q: 여러 지갑의 승인을 한 번에 Revoke할 수 있나요?

불가능합니다. 각 지갑은 독립적입니다:

여러 지갑을 쓰는 사용자: 매달 각 지갑을 개별적으로 점검해야 합니다.

데이터 출처

위험 고지: 이 글은 독립적인 제3자가 정리한 것으로 투자 조언을 구성하지 않습니다. Approve는 DeFi의 주요 공격 벡터이며, 정기 점검과 취소는 기본적인 보안 실천입니다. 모든 데이터는 2026년 4월 기준입니다.