PeckShield: bZx 프로토콜은 다시 해커의 공격을 받았으며 "두 가지 콤보"의 기술은
PeckShield
2020-02-20 10:21
本文约2515字,阅读全文需要约10分钟
2월 18일, bZx는 유사한 공격을 다시 받았습니다.이 공격의 기술 원리는 이전 공격과 달랐으며 이번에는 해커가 Oracle 가격을 조작하여 bZx 계약을 "기만"했습니다.

PeckShield: 하드 코어 기술 분석, 해커의 공격을 받는 bZx 프로토콜의 전체 이야기PeckShield: 하드 코어 기술 분석, 해커의 공격을 받는 bZx 프로토콜의 전체 이야기"분석 결과 bZx는 지난 2월 15일 포트폴리오 자산에 대한 유동성 공격으로 해커의 공격을 받았는데, 이는 bZx 계약에 의한 담보 상태의 불완전한 판단으로 인해 발생했습니다.

2월 18일, bZx는 유사한 공격을 다시 받았습니다.이 공격의 기술 원리는 이전 공격과 달랐으며 이번에는 해커가 Oracle 가격을 조작하여 bZx 계약을 "기만"했습니다.

공격 프로세스의 관점에서 볼 때 이번은 지난번과 반대일 뿐 전체적인 차익 거래 방법은 여전히 ​​동일하며 근본 원인은 주로 플랫폼 간의 작은 공유 유동성과 가격 메커니즘의 설계 결함 때문입니다. .

Figure: Five Exploitation Steps With Oracle Manipulation

이 문서의 원래 의도는 모든 사람이 공격을 보다 직관적으로 이해할 수 있도록 이 취약점의 일부 공격 세부 정보를 분석하고 보다 심도 있는 논의로 이어질 수 있기를 바라는 것입니다. 우리는 이러한 논의가 DeFi 커뮤니티의 개선과 발전에 매우 유익할 것이라고 믿습니다. 특히 프로젝트 당사자가 차세대 DeFi 제품을 개발할 때 더 안전하고 신뢰할 수 있는 유동성 공유 모델을 설계하는 데 도움이 될 수 있습니다.

취약점의 공격 내역은 다음과 같습니다.

첫 번째 레벨 제목

1단계: 가용 자산 확보를 위한 플래시론

bZx 계약에는 flashBorrowToken() 인터페이스가 있어 호출자가 bZx 플랫폼에서 자산을 빌려 "무료"로 DeFi 활동에 참여한 다음 거래가 완료되면 자산의 이 부분을 상환할 수 있습니다. 그리고 호출자는 자산을 빌려주는 동안 자산의 수신자 주소를 지정할 수 있습니다.

Figure1: Flashloan Borrowing From bZx

이번에는 공격자가 bZx 플랫폼에 7,500 ETH를 빌려주고, 공격자의 컨트랙트(기존에 배포했던)를 자산 수취인의 주소로 지정하는 부분인데, 이 부분은 기본적인 대출 기능이므로 여기서는 더 이상 설명하지 않겠습니다.

첫 번째 레벨 제목

2단계: sUSD 모으기

우선 오늘날 공격자의 최고의 지원 역할을 소개하겠습니다: sUSD, sUSD는 Synthetix 프로젝트 당사자가 발행한 안정적인 통화입니다.통화 가격은 일반적으로 1달러이며 총 유통량은 5,563,037개입니다(2월 통계 2020 18).

공격자는 1차 플래시론을 통해 ETH를 획득한 후 총 900 ETH를 KyberNetwork DEX를 통해 sUSD로 두 번에 나누어 가졌습니다. 그 중 1차로 540 ETH가 교환되었고(KyberNetwork의 내부 쿼리로 얻은 KyberUniswap의 가격이 가장 좋음) 공격자는 92,419 sUSD를 얻었고, 2차 배치는 18회로 나누어 각각 20 ETH로 교환되었으며, (Kyber- sUSD는 KyberNetwork 쿼리 후 확인됨 가격이 가장 적합함), 공격자는 63,584 sUSD를 획득하여 총 156,003 sUSD를 획득했습니다.

Figure2: Pumping With Kyber (and Uniswap)

이 두 단계 역시 정상적인 DEX 교환 과정으로, 이 두 번의 작업 후 sUSD에서 ETH로의 가격은 시세의 2.5배인 0.00899까지 급등했습니다.

첫 번째 레벨 제목

세 번째 단계: 더 많은 칩 흡수

공격자는 손에 든 6,000 ETH를 모두 Synthetix exchangeEtherForSynths() 인터페이스를 통해 sUSD로 교환하기를 희망합니다. 그리고 Synthetix는 이 거래를 용이하게 할 충분한 sUSD가 없었고, 3,518 ETH만 교환하고 나머지 2,482 ETH를 공격자에게 반환했으며, 공격자는 943,837 sUSD를 얻었습니다.

Figure3:Hoarding From Synthetix

지금까지 공격자는 총 유통량의 19.7%에 해당하는 총 1,099,841 sUSD를 보유하고 있습니다.

첫 번째 레벨 제목

4단계: 모기지 대출

공격자는 자신의 손에 있는 1,099,841 sUSD를 모두 bZx의 borrowTokenFromDeposit() 인터페이스를 통해 bZx 컨트랙트에 담보로 sUSD/ETH의 정상 가격에 따르면 bZx는 3,928 ETH를 공격자에게 빌려주어야 하지만 bZx는 Oracle Kyber에서 이를 얻었습니다. of가 너무 높아서 6,796 ETH를 빌려주고 2,868 ETH를 더 빌렸습니다.

Figure4: Collateralized Borrowing From bZx

첫 번째 레벨 제목

5단계: 플래시론 상환

공격자는 bZx에서 빌린 6,796 ETH와 손에 남은 자산을 사용하여 이전에 bZx에서 빌린 7,500 ETH를 반환한 다음 플래시 대출 작업을 완료하기 위해 떠났습니다.

Figure5: Repay The Flashloan To bZx

전체 플래시 대출 프로세스를 완료한 후 현재 자산 상황은 다음과 같습니다.

1) bZx 플랫폼은 공격자에게 6,796 ETH를 빌려주었습니다.

2) bZx 플랫폼은 1,099,841 sUSD를 보유하고 있습니다.

3) 공격자는 여전히 2,378 ETH를 보유하고 있습니다.

결국 공격자가 보유한 2,378 ETH는 그에게 총 $665,840의 이익을 남겼습니다.요약하다

요약하다

이 공격에서 우리는 DeFi 제품의 설계 프로세스에서 몇 가지 명백한 문제를 볼 수 있습니다.

1) 제3자 토큰 도입 시 시장의 일방적 조작으로 가격 변동이 발생할 수 있는지 제3자 토큰의 안전성을 검토할 필요가 있다.

2) DeFi 플랫폼 자체에는 가격 허용 오차 및 검사 메커니즘이 있어야 하며, 타사 Oracle을 사용하여 가격을 얻을 때 가능한 한 다른 당사자의 데이터에 대한 검증이 있어야 합니다.

3) 플랫폼 자체도 가격 대비 지수 밸브 메커니즘을 설정해야 합니다.

첫 번째 bZx 공격에서 1,271 ETH의 손실, 이번에는 2,378 ETH의 손실, 그리고 두 공격의 차이가 불과 3일인 것은 DeFi 특수 프로젝트의 보안 문제가 매우 심각함을 보여줍니다.

각 프로젝트는 서로 다른 팀에서 개발하고 각 제품의 설계 및 구현에 대한 이해가 제한되어 있기 때문에 통합 제품은 타사 플랫폼과 상호 작용하는 과정에서 보안 문제가 발생하여 적에게 시달릴 수 있습니다. PeckShield는 DeFi 프로젝트가 온라인으로 전환되기 전에 잠재적인 보안 위험을 피하기 위해 완전한 보안 감사를 수행하기 위해 DeFi의 각 링크 제품 설계에 대한 심층 연구 팀을 찾기 위해 최선을 다해야 한다고 제안합니다.

PeckShield
作者文库