가격 조작 공격에 대한 두 번째 이해

기타 관련 콘텐츠는 개인 홈페이지 에서 확인할 수 있습니다.

본 글의 주요 참고자료는 METATRUST의 고래선 공유이며, 링크는 다음과 같습니다.

MetaTrust 가격 조작 공격 공유

가격 조작의 출처:

블록체인 세계에서 모든 노드의 합의를 유지하기 위해 블록체인은 각 노드가 체인 외부에서 독립적으로 정보를 얻을 수 있는 능력을 거세합니다.

블록체인이 외부 세계와 유사한 가격 정보를 얻으려면 다음 두 가지 방법밖에 없습니다.

  • Chainlink와 유사한 엔터티를 통해 적극적으로 가격을 제공하고 가격 데이터를 체인에 지속적으로 게시합니다.
  • 유니스왑 등 스마트 계약에 저장된 매개변수를 통해 직접

예: 획득하려는 WETH 가격은 외부 데이터입니다.

getReserves()ETH 가격을 요청하면 재무 모델 계산이 해당 값을 반환합니다.

여기서 플래시론을 사용하게 되면 금융모델을 잘못 계산하게 되면 계산된 WETH에 문제가 생길 가능성이 높습니다.

이미지-20231216214431185

가격 조작 공격이란 무엇입니까?

가격 조작 공격은 부적절한 이익을 操控市场的买卖行为(操控流动性池或地址余额)추구하는 것을 의미합니다.人为地影响产品或资产价格

가격 조작의 4가지 요소:

  • 시장 지배력의 비대칭성: 플래시 대출을 통해 많은 자금을 보유
  • 구매 및 판매 행위 조작: 대량의 토큰 교환, 시장 메커니즘 파괴(시장 유동성)
  • 가격에 대한 악의적인 영향: 자산 가격 계산 오류(취약한 가격 조회 메커니즘)
  • 부적절한 이익 추구: 비정상적인 금액의 보상이나 담보

실제 가격조작 공격 사례:

이미지-20231216215338496

일반 프로세스:

  • 사용자는 BNB와 USDT를 약속하고 LP 유동성 인증서를 얻습니다.
  • 그런 다음 getReward() 함수를 호출하여 LP를 상환하고 혜택을 받으세요.
  • 유동성 제거 과정에서 풀에 있는 BNB 토큰은 Bunny 토큰으로 교환됩니다.

공격 프로세스:

분석은 느린 안개 팬케이크 공격 분석을 볼 수 있습니다.

  • 첫 번째 거래에 대해 특정 LP 유동성 인증서를 받으세요

  • 사용자들은 플래시론을 통해 대량의 BNB와 USDT를 교환했습니다.

  • 두 번째 트랜잭션인 플래시 대출은 풀에 많은 양의 유동성을 추가하는 동시에 getReward() 함수를 호출합니다.

  • 먼저 LP를 WBNB-USDT 풀로 옮겨 유동성을 제거합니다. 풀에는 많은 양의 BNB와 USDT가 있습니다.

  • 이후 대량의 BNB와 USDT가 WBNB-BUNNY 유동성으로 전환되었으며, WBNB 풀에 있는 WBNB의 수가 급격히 증가했습니다.

  • 그런 다음 획득된 WBNB-BUNNY의 LP 번호에 따라,valueOfAsset函数计算LP价值

  • 问题就出在valueOfAsset进行LP价值计算的时候,通过WBNB-BUNNY池子中的WBNB实时数量计算, 결과적으로 단일 LP의 가치가 크게 증가했습니다.

취약점 기능

이미지-20231217113643150

getReserve() 함수는 풀 내 BNB 잔액을 계산한 후 이를 직접 사용하여 BNB 대비 LP 값을 계산합니다.

특정 재무 모델 계산:

이미지-20231216220150156

가격 조작 공격을 피하는 방법:

이미지-20231217113754981

취약한 문의 메커니즘을 사용하지 않는 세 가지 주요 방법이 있습니다.

  • EOA(체인링크) 등을 통해 지속적으로 가격을 공급합니다.
  • 여러 소스에서 가격을 수집하고 다양한 소스의 가격에 대한 가중 평균을 수행합니다.
  • 과거 기간의 가격에 대해 가중 평균(유니스왑)을 수행합니다.

민감한 작업을 위한 변수 데이터는 사용자가 조작하기 쉬운 데이터에 의존해서는 안 됩니다. 그렇지 않으면 쉽게 위험을 초래할 수 있습니다.

Taint 분석을 이용한 취약점 탐지

추천

출처blog.csdn.net/m0_53689197/article/details/135042846