SharkTeam: KyberSwap 공격 사건의 원리 분석
SharkTeam
2023-11-28 10:41
本文约1053字,阅读全文需要约4分钟
2023년 11월 23일 Tick 조작과 반복적인 유동성 계산으로 인해 KyberSwap은 Ethereum, Arbitrum 등 여러 네트워크에서 해킹당했으며, 공격자는 약 4,800만 달러의 수익을 올렸습니다.

2023년 11월 23일 Tick 조작과 유동성 이중계산으로 인해 KyberSwap은 Ethereum, Arbitrum 등 여러 네트워크에서 해킹당했으며, 공격자는 약 4,800만 달러의 수익을 올렸습니다.

SharkTeam은 이번 사건에 대해 즉시 기술적 분석을 실시하고 보안 예방 조치를 요약했으며, 후속 프로젝트가 이를 통해 교훈을 얻고 블록체인 업계의 보안 방어선을 공동으로 구축할 수 있기를 바랍니다.

1. 공격 거래 분석

이번 공격 이벤트는 상대적으로 복잡하고 공격 구현도 상대적으로 영리하므로 자세한 분석과 설명을 위해 공격 트랜잭션 중 하나를 선택합니다.

공격 트랜잭션:

0x09a3a12d58b0bb80e33e3fb8e282728551dc430c65d1e520fe0009ec519d75e8

공격자 주소:

0x50275E0B7261559cE1644014d4b78D4AA63BE836

공격자 계약:

0xaF2Acf3D4ab78e4c702256D214a3189A874CDC13

이 거래에서 공격자는 풀에 있는 자금을 빼내기 위해 3개의 서로 다른 유동성 풀에 대해 일련의 작업을 수행했습니다. 공격 흐름 분석을 위해 서로 독립적으로 존재하는 풀을 선택했습니다.

공격 프로세스:

1. 공격자는 먼저 플래시 대출을 통해 10,000 wstETH를 빌린 후 약 2,998 wstETH를 풀에 추가하고 약 2,842 WETH를 교환했습니다.

2. 이때 풀의 해당 Tick 상태는 -110, 910이며 wstETH의 가격은 1.05 ETH에서 0.000015257로 변경됩니다. 이때 풀의 유동성은 0이므로 이후에 거짓 유동성이 생성될 수 있는 길을 열어줍니다.

3. 공격자는 [0.000014659, 0.000015260] 범위에 3.4 wstETH 유동성을 추가하고 0.56 wstETH를 제거했습니다.

4. 다음으로 공격자는 WETH->wstETH와 wstETH->WETH라는 두 가지 스왑을 수행합니다. 첫 번째 스왑 이후 가격은 0.000014659보다 약간 낮은 0.000014657로 밀렸습니다. 두 번째 스왑 이후 가격은 0.000016368로 인상됩니다.

5. 처음에는 풀에 약 3wstETH 유동성이 있었습니다.(3.4wstETH 발행 - 0.56wstETH 소각) 이제 풀에는 약 (1,056 + 3,911)개의 코인이 있습니다.

6. 공격이 플래시 대출을 반환한 후 공격 계약에서 자금이 이체됩니다.

2. 취약점 원인 분석

이번 공격의 근본 원인: ComputeSwapStep 함수에서 Tick 계산 시 정확도가 떨어지는 문제가 있습니다. Tick을 조작할 수 있으므로 _updateLiquidityAndCrossTick 함수가 성공적으로 우회되어 유동성이 반복적으로 증가할 수 있습니다.

1. 첫 번째 스왑에서 공격자는 calcReachAmount 함수를 사용하여 wstETH의 양을 계산하고 최종적으로 1,056.056735638220800000을 계산했습니다.

2. estimateIncrementalLiquidity 및 calcFinalPrice 함수를 호출한 후 전달된 수량은 1, 056.056735638220799999입니다. 반올림 및 반올림 처리를 거쳐 이때의 Tick은 -111311이고, 하한 Tick은 -111310이다. 따라서 nextTick = currentTick+ 1을 사용하고 !=를 사용하여 두 개의 sqrtP 매개변수를 판단하면 _updateLiquidityAndCrossTick 기능이 성공적으로 우회되고 유동성 업데이트가 방지됩니다.

3. 두 번째 스왑 중에 유동성을 높이기 위해 _updateLiquidityAndCrossTick이 호출되었습니다. 1차 스왑시 수량계산의 정확성이 떨어지면서 유동성이 업데이트 및 제거되지 않아 2차 유동성계산에서 이중상황이 발생하게 되었습니다.

3. 안전 제안

이 공격에 대응하여 개발자는 일상적인 개발 시 다음과 같은 보안 조치를 취해야 합니다.

1. 정확성 손실을 피하기 위해 비즈니스에서 불변량과 수학적 논리를 올바르게 계산하는 데 주의를 기울이십시오.

2. 프로젝트가 출시되기 전에 제3자 전문 감사팀과 협력하여 계약 감사를 수행해야 합니다.

About Us

SharkTeam의 비전은 Web3 세계를 보호하는 것입니다. 이 팀은 블록체인 및 스마트 계약의 기본 이론에 능숙한 전 세계의 숙련된 보안 전문가와 수석 연구원으로 구성되어 있습니다. 온체인 빅데이터 분석, 온체인 위험 경고, 스마트 계약 감사, 암호화폐 자산 복구 및 기타 서비스를 포함한 서비스를 제공하며 온체인 빅데이터 분석 및 위험 경고 플랫폼인 ChainAegis를 구축했습니다. 심층적인 그래프 분석을 통해 Web3 세계의 APT(Advanced Persistant Threat) 위험에 효과적으로 대처할 수 있습니다. Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, ChainIDE 등 Web3 생태계의 다양한 분야의 주요 플레이어와 장기적인 협력 관계를 구축했습니다.

공식 홈페이지: https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

SharkTeam
作者文库