배경 소개
2024년 11월 18일, 우리는 BNB 스마트 체인에 대한 공격을 모니터링했으며, 공격받은 프로젝트는 BTB 였습니다. 공격 트랜잭션은
https://bscscan.com/tx/0xfb6df4053c2f1000cb03135064af19a79a87cf25efe612ae5f3468390d6be216
이 공격으로 인해 총 약 5,000달러의 손실이 발생했습니다.
공격 및 사고 분석
먼저, 공격자는 flashloan을 사용하여 팬케이크SwapV3에서 100,000 BUSD를 대출했습니다.
이후 공격자는 팬케이크SwapV2를 사용해 대출받은 100,000 BUSD를 1,263,427 BTB로 교환했습니다.
그런 다음 공격자는 BTB의 거래소BTTBoUSDT를 사용하여 3,052 BTB를 4,999 BUSD로 교환했습니다.
공격받은 스마트 컨트랙트의 함수 교환BTTBoUSDT 코드를 살펴보겠습니다.
팬케이크SwapV2의 BTB와 BUSD 쌍의 보유량에 따라 교환 가격이 결정되는 것을 볼 수 있습니다. 이러한 방식으로 공격자는 pacakeSwap을 사용하여 대량의 BTB 또는 BUSD를 교환하여 BTB 가격을 조작할 수 있습니다. 공격자는 flashloan으로 빌려준 100,000 BUSD를 BTB로 교환하는데 사용한 것을 확인할 수 있습니다.
따라서 공격자가 PancakeSwapV2를 사용하여 대량의 BUSD를 BTB로 교환하기 전에
예비0은 다음과 같습니다:
1,327,362,530,716,302,619,951,383,
예비1은 다음과 같습니다:
5047758199614262100984,
상환 후 Reserve0은 다음과 같습니다.
63934622394514316973499,
예비1은 다음과 같습니다:
105047758199614262100984.
getPrice에 getAmountOut을 구현하면 공격자가 BTB를 상환하기 전후의 BTB 가격 변동을 계산할 수 있습니다.
우리는 BTB의 가격이 1 BTB = 0.00379143964708692 BUSD에서 1 BTB = 1.6381204893766859 BUSD로 증가한 것으로 계산했습니다. 가격이 400배 이상 인상되었습니다.
따라서 공격자는 3052 BTB를 사용하여 4999 BUSD로 교환했습니다.
마지막으로 공격자는 남은 1,260,375 BTB를 사용하여 팬케이크SwapV2에서 99,964 BUSD를 상환했습니다.
공격자는 플래시론 대출금과 이자 100,100 BUSD를 반환한 후 4,863 BUSD의 수익을 냈습니다.
요약
이 취약점의 원인은 프로젝트 팀이 BTB를 BUSD로 교환을 완료할 때 오래된 가격 오라클을 사용했기 때문에 공격자가 BTB의 가격을 쉽게 조작하고 먼저 BTB를 대량으로 구매한 후 BTB의 가격을 인상할 수 있었기 때문입니다. 매진하다. 드디어 차익거래가 완료되었습니다. 프로젝트 당사자는 가격 오라클 및 코드 운영 로직을 설계할 때 다자간 검증을 수행하고 계약이 온라인화되기 전에 교차 감사를 위해 여러 감사 회사를 선택하는 것이 좋습니다.