
머리말
머리말Chuangyu 블록체인 보안 연구소 알기2022년 5월 16일 베이징 시간,
5월 17일 멀티체인 DeFi 프로토콜 FEG가 다시 공격을 받아 공격자는 291 ETH와 4343 BNB를 훔쳐 약 190만 달러를 잃었고 이 중 BSC는 130만 달러, 이더리움 체인은 60만 달러였습니다.
분석하다
프로토콜은 BSC와 Ether 모두에서 공격을 받았으며 아래 그림은 두 체인에서 발생한 공격 이벤트의 트랜잭션 해시입니다. 이 공격의 주된 이유는 swapToSwap() 함수의 경로 주소를 공격자가 제어할 수 있기 때문입니다.
기본 정보
보조 제목
기본 정보
공격 계약: 0x9a843bb125a3c03f496cb44653741f2cef82f445
BSC: 0x818e2013dd7d9bf4547aaabf6b617c1262578bc7
Ether: 0xf2bda964ec2d2fcb1610c886ed4831bf58f64948
취약성 계약 주소:
BSC:0x77cf448ceaf8f66e06d1537ef83218725670d3a509583ea0d161533fda56c063
Ether:0x1e769a59a5a9dabec0cb7f21a3e346f55ae1972bb18ae5eeacdaa0bc3424abd2
공격 과정
공격 tx:
공격 과정
1. 공격자 0x73b3은 미리 생성된 공격 계약 0x9a84를 호출하여 DVM에서 915.842 WBNB를 빌린 다음 116.81 WBNB를 115.65 fBNB로 변환합니다.
2. 공격자 0x73b3은 나중에 취약점을 악용하기 위해 계약 0x9a84를 공격하여 10개의 계약을 생성했습니다.
3. 공격자 0x73b3는 1단계에서 교환한 fBNB를 depositInternal() 함수를 통해 FEGexPRO 컨트랙트 0x818e로 저당 잡습니다.
4. 공격자 0x73b3은 depositInternal() 및 swapToSwap() 함수를 호출하여 FEGexPRO 컨트랙트 0x818e가 2단계에서 생성한 컨트랙트에 대해 fBNB를 인증하도록 하고 생성된 10개의 컨트랙트에 대해 인증된 fBNB를 반복적으로 호출합니다.
5. 공격자 0x73b3이 생성한 10개의 계약은 이전 단계에서 권한이 부여되었으므로 공격자는 이러한 권한을 부여받은 계약을 사용하여 FEGexPRO 계약 0x818e에서 매번 113.452 fBNB를 전송하기 위해 transferFrom() 함수를 호출합니다.
6. 공격자 0x73b3는 PancakePair의 LP transaction pair 0x2aa7에서 31217683882286.007 FEG와 423 WBNB를 차용하고 위의 3, 4, 5단계를 반복하여 최종적으로 얻는다.
7. 마지막으로 플래시론을 반환하고 위의 공격으로 얻은 모든 WBNB를 공격 계약 0x9a84로 전송합니다.
세부 사항
악성 경로 주소 매개 변수를 전달하기 위해 swapToSwap() 함수를 호출하면 현재 계약 토큰 잔액에 영향을 미치지 않습니다. IERC20(address(Main)).approve(address(path), amt); .
후속 조치
공격자는 depositInternal() 및 swapToSwap()을 반복적으로 호출하여 FEGexPRO 계약이 공격자가 전달한 악의적인 계약 경로 주소에 fBNB를 반복적으로 승인하도록 할 수 있습니다. 다른 주소에서 전송된 토큰의 양은 공격자가 처음으로 약정한 토큰의 양에서 처리 수수료를 뺀 양입니다. 디버거에서 정보를 확인해보면 전달된 경로 주소 매개변수가 모두 공격 과정에서 생성된 컨트랙트 주소임을 알 수 있습니다.
후속 조치
공격자들은 16일 공격에 이어 다음날 또 공격을 감행했지만 공격 주소를 바꿨다.
공격 계약: 0xf02b075f514c34df0c3d5cb7ebadf50d74a6fb17
공격자 주소: 0xf99e5f80486426e7d3e3921269ffee9c2da258e2
BSC:0xe956da324e16cb84acec1a43445fc2adbcdeb0e5635af6e40234179857858f82
Ether:0c0031514e222bf2f9f1a57a4af652494f08ec6e401b6ae5b4761d3b41e266a59
공격 tx:
요약하다
R0X 취약점 컨트랙트 0xa3d5는 오픈소스가 아니기 때문에 Debugger에서 분석을 시도하여 1차 공격 과정과 유사한 것을 확인하였으나 보조예치에 BUY()함수, 보조추출에 SELL()함수를 사용하였다. .