컷 인시던트 - 가격 조작

이 기사는 기계로 번역되었습니다
원문 표시

바이낸스 스마트 체인의 분산형 금융(DeFi) 프로젝트인 캐터필러 코인(Caterpillar Coin)은 2024년 9월 10일에 악용되어 약 140만 달러의 손실이 발생한 것으로 추산됩니다.

악용자는 세 가지 거래로 프로젝트에 대한 공격을 실행했습니다.

https://bscscan.com/tx/0x6262c0f15c88aed6f646ed1996eb6aae9ccc5d5704d5faccd1e1397dd047bc8a

https://bscscan.com/tx/0xce6e474dc9555ef971473fee19f87716f38ba01a0df39e78207b71eda134c420

https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827

개요

분석을 위해 우리는 가장 큰 손실을 초래한 공격, 즉 세 번째 공격에 초점을 맞출 것입니다.

https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827

공격자:

https://bscscan.com/address/0x560a77bc06dcc77eee687acb65d46b580a63eb45

취약한 계약:

https://bscscan.com/address/0x7057f3b0f4d0649b428f0d8378a8a0e7d21d36a7

익스플로잇 분석

공격은 간단한 패턴을 따른 것으로 보입니다. 공격자는 플래시론 사용하여 USDT-WBNB 쌍에서 테더 USDT(USDT) 빌린 다음, 생성자에서 실행되는 주요 공격 로직을 사용하여 여러 계약을 생성하기 위해 루프를 실행했습니다. 각 계약을 생성하기 전에 익스플로잇러는 생성자의 로직이 활용할 수 있도록 대량의 테더 USDT(USDT) 전송했습니다.

생성자 내부의 논리를 자세히 살펴보겠습니다.

생성되기 전에 계약에 테더 USDT(USDT) 보내면, 새로운 계약은 그 일부를 CUT 토큰으로 스왑합니다.

그런 다음 계약은 획득한 CUT 토큰과 테더 USDT(USDT) 사용하여 페어 계약에 유동성을 추가합니다 . 유동성을 제공하는 대가로 계약은 유동성 풀의 점유율을 나타내는 해당 수의 CAKE- 유동성 공급 토큰(LP) 받습니다.

다음 단계에서는 계약이 나머지 CUT 토큰(상당한 양이라는 것을 알고 있음)을 사용하여 또 다른 스왑을 실행하고, 이번에는 CUT 토큰을 다시 테더 USDT(USDT) 로 변환합니다.

그런 다음 공격자는 CAKE- 유동성 공급 토큰(LP) 소각합니다. 이 동작은 풀에서 제공된 유동성을 제거하여 기본 자산의 해당 지분을 인출할 수 있게 합니다.

이 단계를 심층적으로 살펴보세요.

0x34be 계약의 CUT 잔액이 소각 전에는 0이었지만, PAIR 계약이 60,652개 토큰만 전송했음에도 불구하고 소각 후에 269,661개 CUT 토큰을 받았다는 관찰 결과는 소각 메커니즘 내부의 이상 현상 또는 악용을 강력히 시사합니다.

버닝 프로세스에서 명백한 익스플로잇을 통해 얻은 상당한 양의 CUT 토큰으로 공격자는 추가 스왑을 실행하여 이러한 CUT 토큰을 다시 테더 USDT(USDT) 로 변환할 수 있었습니다. 이를 통해 그들은 이익을 상당히 증폭시킬 수 있었을 것입니다.

더욱이 공격자는 계약 생성 프로세스를 반복하여 해당 악용을 여러 번 반복하여 페어 계약 내의 테더 USDT(USDT) 준비금을 상당 부분 고갈시킨 것으로 보입니다.

CUT 토큰 코드의 addLiquidityremoveLiquidity 단계를 자세히 살펴보고 소각 작업의 실수를 명확히 하세요.

유동성을 추가하는 새로운 사용자가 있을 때마다 CUT 토큰은 보상 목적으로 주문 ID를 기록하며, 여기에는 추가된 CUT 금액에 해당하는 테더 USDT(USDT) 가치도 포함됩니다.

그리고 유동성을 제거할 때 CUT 토큰은 _transferFunDealTypeContractAddress 계약의 논리에 따라 보상을 계산합니다. 이를 가격 보호 메커니즘이라고 합니다.

검증되지 않은 코드 계약이에요. 우리는 디컴파일된 소스 코드를 분석할 거예요.

valuePreservationByRmoveLP 함수는 0x70f88861 함수 내에서 디컴파일됩니다.

이 함수에서 계약은 사용자가 removeLiquidity 단계에서 받은 CUT 금액을 변환하고 현재 CUT 가격을 기반으로 해당 테더 USDT(USDT) 값을 계산합니다. 그런 다음 orderInfo 에 저장된 데이터와 비교하여 값의 변화를 계산합니다. 그런 다음 이 테더 USDT(USDT) 값의 변화는 현재 가격을 사용하여 여러 CUT 토큰으로 다시 변환되고 이러한 토큰은 사용자에게 보상됩니다.

이런 논리를 사용하면 공격자는 가격을 쉽게 조작(펌프 앤 덤프(Pump and dump))하여 orderID 에 처음 기록된 값과 동일 거래 내에서 나중에 CUT된 값 사이에 상당한 차이를 만들어낼 수 있습니다.

근본 원인

공격 과정을 분석한 결과, 해당 계약의 주요 결함은 해당 프로젝트에서 보상을 계산하는 데 실시간 가격을 사용한다는 점에 있다는 것을 알 수 있었습니다.

얻은 교훈

계산을 위해 전적으로 실시간 가격에 의존하는 것은 위험할 수 있습니다. 공격자는 가격을 조작하여 이를 악용할 수 있습니다. 프로젝트의 무결성을 보호하려면 대신 계산을 위해 오라클 가격을 통합하는 것이 좋습니다.

섹터:
출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트