
SharkTeam: Hedgey Finance 공격 사건 분석
작성: SharkTeam
2024년 4월 19일, Hedgey Finance는 다수의 공격 트랜잭션을 당해 200만 달러 이상의 손실을 입었다.
SharkTeam은 이 사건에 대해 즉각 기술 분석을 수행하고 보안 방지 수단을 정리하여 향후 프로젝트들이 교훈으로 삼고 블록체인 산업의 보안 방어선을 함께 구축할 수 있기를 바란다.
1. 공격 트랜잭션 분석
Hedgey Finance는 여러 공격자들에 의해 반복적으로 공격을 당했으며, 토큰 승인 취약점을 이용해 ClaimCampaigns 컨트랙트 내 다수의 토큰을 탈취당했다.
가장 큰 금액이 관련된 트랜잭션을 예로 들면 약 130만 달러 규모이다:
공격 트랜잭션: 0x2606d459a50ca4920722a111745c2eeced1d8a01ff25ee762e22d5d4b1595739
공격자: 0xded2b1a426e1b7d415a40bcad44e98f47181dda2
공격 컨트랙트: 0xc793113f1548b97e37c409f39244ee44241bf2b3
대상 컨트랙트: 0xbc452fdc8f851d7c5b72e1fe74dfb63bb793d511 (ClaimCampaigns)
이 트랜잭션은 ClaimCampaigns 컨트랙트에서 직접 1,303,910.12 USDC를 전송해 갔다. 트랜잭션 세부 정보는 다음과 같다:

실제 공격을 실행한 트랜잭션은
0xa17fdb804728f226fcd10e78eae5247abd984e0f03301312315b89cae25aa517 (간략히 0xa17f라 함)
공격 과정은 다음과 같다:

1 Balancer에서 플래시론으로 1.305M USDC를 대출받는다.
2 ClaimCampaigns 컨트랙트의 createLockedCampaign 함수를 호출한다. 이 함수에서 공격 컨트랙트는 1.305M USDC를 ClaimCampaigns 컨트랙트에 입금하며, laimCampaigns 컨트랙트는 입금된 1.305M USDC를 공격 컨트랙트가 사용할 수 있도록 승인 처리한다.
3 ClaimCampaigns 컨트랙트의 cancelCampaign 함수를 호출한다. 이 함수에서 공격 컨트랙트는 입금했던 1.305M USDC를 인출하지만, createLockedCampaign 함수에서 공격 컨트랙트에게 부여된 USDC 승인은 취소되지 않는다.
4 공격 컨트랙트가 Balancer의 플래시론을 상환한다.
이 트랜잭션에서 공격 컨트랙트는 ClaimCampaigns 컨트랙트에 보관된 1.305M USDC를 인출한 후에도, ClaimCampaigns 컨트랙트가 공격 컨트랙트에게 승인해준 1.305M USDC는 그대로 남아 있기 때문에, 공격 컨트랙트는 USDC의 transferFrom 함수를 직접 호출해 다시 한 번 ClaimCampaigns 컨트랙트로부터 1.305M USDC를 전송해 갈 수 있다. 이것이 바로 트랜잭션 0xa17fdb804728f226fcd10e78eae5247abd984e0f03301312315b89cae25aa517이 수행하는 기능이다.
위 두 건의 트랜잭션을 통해 공격자는 ClaimCampaigns 컨트랙트에서 1.305M USDC를 탈취하였다.
USDC 외에도, 이 공격자는 같은 취약점을 이용해 ClaimCampaigns 컨트랙트에서 다수의 NOBL 토큰도 탈취하였으며, USDC와 합산하면 총 가치는 200만 달러를 초과한다.
2. 취약점 분석
이번 사태의 근본 원인은 프로젝트 측 스마트 컨트랙트의 로직 구현 시 토큰 승인 취약점이 존재하여, 공격자가 목표 컨트랙트가 msg.sender에게 승인한 토큰을 반복 전송할 수 있었기 때문이다.
스마트 컨트랙트 ClaimCampaigns의 createLockedCamaign 함수는 msg.sender의 토큰을 대상 컨트랙트에 입금하고, 해당 토큰들을 msg.sender에게 승인해 준다.

cancelCampaign 함수는 입금된 토큰을 인출하지만, 토큰 승인을 취소하지 않는다.

공격자는 이 취약점을 이용해 토큰의 transferFrom 함수를 직접 호출함으로써 대상 컨트랙트에서 승인된 토큰을 다시 전송해 갈 수 있었다.
3. 보안 권고사항
이번 공격 사례를 바탕으로 개발 과정에서 다음의 주의사항을 준수해야 한다:
(1) 프로젝트 설계 및 개발 과정에서는 로직의 완전성과 엄격성을 유지해야 하며, 특히 자산 이동과 관련된 부분에서는 토큰 전송 시 승인 수량도 동기화하여 관리해야 하며, 위와 같이 토큰은 이미 이동되었으나 승인은 취소되지 않는 상황을 피해야 한다.
(2) 프로젝트 출시 전에는 제3의 전문 감사 기관에 의한 스마트 컨트랙트 감사를 받아야 한다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News










