May 06, 2025
“나는 지갑만 연결했을 뿐인데, 코인이 빠져나갔어요.”
실제로는 단순 연결이 아니라, 서명을 유도당한 것입니다.
대부분의 피해는 바로 아래 두 함수로 인해 발생합니다:
approve()
transferFrom()
이번 글에서는 이 두 함수가 어떻게 Web3 스캠의 핵심 도구가 되는지를
실제 호출 흐름을 통해 분석합니다.
approve(address spender, uint amount)
이 함수는 토큰 보유자가 타인에게 자신의 토큰을 사용할 수 있도록 권한을 주는 것입니다.
예시:
token.approve(0xAttacker, 1000 * 10**18);
0xAttacker
는 내 토큰 1000개를 마음대로 가져갈 수 있는 권한을 얻습니다.transferFrom(address from, address to, uint amount)
이 함수는 approve
로 미리 승인된 토큰을 대신 이동시키는 함수입니다.
예시:
token.transferFrom(0xVictim, 0xAttacker, 1000 * 10**18);
Victim
이 사전에 approve
를 했다면, 이 함수로 실제 탈취가 일어납니다.function maliciousApproval() public { IERC20(token).approve(address(this), type(uint256).max); // 최대치 승인 } function drainTokens(address victim) public { IERC20(token).transferFrom(victim, attackerWallet, 1000 * 10**18); }
이 두 줄로 공격자는 수천 명의 피해자 지갑에서 자산을 동시에 빼내는 자동화 시스템을 구성할 수 있습니다.
send()
가 없음이런 패턴이 반복되면, 거의 확실한 피싱 & Drainer 스캠 구조입니다.
실제로 탈취된 트랜잭션을 디코딩하면 무엇이 보일까?
다음 글에서는 악성 서명(Signature)과 인코딩된 데이터를 직접 디코드하여,
우리가 무엇을 서명했는지 해석해보겠습니다.
#BlockchainSecurity #ApproveAttack #TransferFromScam #ERC20Abuse #ScamForensics
30 조회