2024년 1월 30일 MIM_SPELL은 플래시 대출 공격을 받았고 정밀 계산 취약점으로 인해 프로젝트에서 650만 달러의 손실을 입었습니다.
SharkTeam은 이번 사건에 대해 즉시 기술적 분석을 실시하고 보안 예방 조치를 요약했으며, 후속 프로젝트가 이를 통해 교훈을 얻고 블록체인 업계의 보안 방어선을 공동으로 구축할 수 있기를 바랍니다.
공격자 주소:
0x87F585809Ce79aE39A5fa0C7C96d0d159eb678C9
공격 계약:
0xe1091d17473b049cccd65c54f71677da85b77a45
0x13AF445F81B0DEcA5dCb2Be6A4C691F545c95912
0xe59b54a9e37ab69f6e9312a9b3f72539ee184e5a
공격받은 계약:
0x7259e152103756e1616A77Ae982353c3751A6a90
공격 트랜잭션:
0x26a83db7e28838dd9fee6fb7314ae58dcc6aee9a20bf224c386ff5e80f7e4cf2
0xdb4616b89ad82062787a4e924d520639791302476484b9a6eca5126f79b6d877
공격 프로세스:
1. 공격자(0x87F58580)는 플래시론을 통해 MIM 토큰 30만개를 빌렸습니다.
2. 이후 사용자의 대출 상환을 위한 다음 단계를 위해 공격받은 계약(0x7259e1520)으로 240,000개의 MIM 토큰이 전송되었습니다.
2. 이후 사용자의 대출 상환을 위한 다음 단계를 위해 공격받은 계약(0x7259e1520)으로 240,000개의 MIM 토큰이 전송되었습니다.
3. 이후 공격자(0x87F58580)는 repayForAll 함수를 호출하여 다른 사용자의 대출금을 상환하고, 이후 repay 함수를 호출하여 다른 사용자의 대출금을 상환함으로써 탄력적 변수를 0으로 줄입니다.
4. Elastic 변수가 0으로 감소한 후 공격자(0x87F58580)는 새로운 공격 계약(0xe59b54a9)을 생성하고 elastic = 0, base = 120080183810681886665215049728이 될 때까지 차용 및 상환 함수를 계속 호출합니다.
5. 이후 공격자(0x87F58580)는 DegenBox 컨트랙트의 대출 기능과 출금 기능을 호출하여 5,000,047개의 MIM 토큰을 대출해 주었습니다.
5. 이후 공격자(0x87F58580)는 DegenBox 컨트랙트의 대출 기능과 출금 기능을 호출하여 5,000,047개의 MIM 토큰을 대출해 주었습니다.
6. 공격자(0x87F58580)는 플래시론 기능을 반환하여 4,400,000 MIM 토큰을 1,807 ETH로 교환했으며, 이 거래를 통해 얻은 수익은 약 450W였습니다.
공격의 본질은 대출 변수 계산 시 정확성 문제가 있어 핵심 변수 탄력성과 기준값이 조작되고 비율이 불균형해 담보 및 대출 금액 계산 시 문제가 발생한다는 점이다. 궁극적으로 MIM 토큰의 과도한 대출.
공격받은 컨트랙트(0x7259e1520)의 차용 기능과 상환 기능 모두 탄력적 변수와 기본 변수 계산 시 상향 반올림 방식을 사용합니다.
공격자(0x87F58580)는 먼저 다른 사용자의 대출금을 상환하여 탄력적 변수와 기본 변수를 각각 0과 97로 설정했습니다.
그러면 빌림 함수와 상환 함수가 계속 호출되고 매개변수 금액은 모두 1이 됩니다. 빌림 함수가 처음 호출되면 elastic=0이므로 위의 if 로직이 실행되어 add 함수로 반환됩니다. 결과적으로 탄성 = 1, 기본 = 98이 됩니다.
그런 다음 공격자(0x87F58580)는 빌림 함수를 호출하고 1을 전달합니다. elastic=1이므로 else 로직이 실행되고 계산된 반환 값은 98입니다. 이렇게 add 함수로 반환하면 elastic=2이고 기본 변수는 196입니다.
하지만 이때 공격자(0x87F58580)는 repay 함수를 호출하여 1을 전달한다. elastic=2이므로 else 로직이 실행된다.계산된 elastic 변수는 원래 1*2/98 =0이었는데, 다음과 같은 단계로 인해 반올림하면 계산된 반환 값이 1이 되므로 하위 함수로 반환할 때 탄성 변수는 다시 1로 변경되고 기본 변수는 195가 됩니다.
차입-상환 루프 후에 탄력적 변수는 변하지 않고 기본 변수는 거의 두 배로 증가하는 것을 볼 수 있는데, 이 취약점을 이용하여 해커는 자주 차입-상환 기능을 루프하고 마지막으로 다시 상환을 호출하여 궁극적으로 탄력적=0이 됩니다. 기본 = 120080183810681886665215049728.
Elastic 변수와 Base 변수의 비율이 심각하게 불균형한 경우 공격자(0x87F58580)는 Solvent Modifier의 제한 사항을 통과하기 위해 약간의 담보를 추가하여 대량의 MIM 토큰을 빌려줄 수 있습니다.
이 공격에 대응하여 우리는 개발 과정에서 다음과 같은 예방 조치를 따라야 합니다.
1. 정밀도 계산과 관련된 논리를 개발할 때 정밀도와 반올림을 신중하게 고려하십시오.
2. 프로젝트가 온라인으로 진행되기 전에 전문적인 제3자 감사팀이 스마트 계약 감사를 실시해야 합니다.
SharkTeam의 비전은 Web3 세계를 보호하는 것입니다. 이 팀은 블록체인 및 스마트 계약의 기본 이론에 능숙한 전 세계의 숙련된 보안 전문가와 수석 연구원으로 구성되어 있습니다. 온체인 빅데이터 분석, 온체인 위험 경고, KYT/AML, 스마트 계약 감사, 암호화된 자산 복구 및 기타 서비스를 포함한 서비스를 제공하고 온체인 지능형 위험 식별 플랫폼 ChainAegis를 만들었습니다. 플랫폼은 무제한 수준을 지원합니다. 심층적인 그래프 분석을 통해 Web3 세계의 지능형 지속 위협(APT)에 효과적으로 대처할 수 있습니다. Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land 등 Web3 생태계의 다양한 분야의 주요 플레이어와 장기적인 협력 관계를 구축했습니다.
공식 홈페이지: https://www.sharkteam.org
트위터: https://twitter.com/sharkteamorg
디스코드: https://discord.gg/jGH9xXCjDZ
텔레그램: https://t.me/sharkteamorg
모든 댓글