原理
- 透過以太幣交易原子性,要交易全成功否交易全失敗。
- 調用智能合約也具有原子性,要全調用成功修改數值,否調用全失敗。
- 不會出現部份成功部分失敗。
- 保證在同一交易內歸還本金。
- 全成功還本付息,失敗則當作此交易沒有存在。
理想狀況
- 閃電貸借入 100000 USDT
- DEX A(交易所A) 買 2000@50(2000顆$50 token)
- DEX B(交易所B) 賣 2000@55(2000顆$55 token)
- 歸還 100000 USDT + 100 USDT(利息)
- 獲利 9900 USDT
必須要在同筆交易區塊內完成(透過自己撰寫智能合約並調用合約達到一次交易完成)
攻擊步驟
目的: 攻擊有漏洞的智能合約竊取利益
- 藉由 dydx 借出 10000ETH
- 5000ETH 抵押到 compound 借出 112 WBTC
- 1300ETH 轉入 bZx(主要攻擊的漏洞合約) 透過 5 倍槓桿賣出 ETH 買入 WBTC
- bZx 為了完成此筆交易,透過 kyber network 協議在 uniswap 內大量拋出 ETH 買 WBTC
- uniswap WBTC/ETH 交易對池不夠深 -> 價格被拉升 38.5 -> 109.8
- 原本 bZx 應該是僅扣除原押 1300ETH 不應該用到自己資金池完成交易(無偵測到風險),但由於合約漏洞導致用到自己資金來完成此筆交易
- 拋出由 compound 借出的 112 WBTC 到 uniswap 售賣 -> 獲得 6871ETH
- 6871ETH + 3200ETH(未動用到的借貸) = 10071-10000=71ETH(獲利)(歸還 dydx 貸款)
- 駭客在 compound 上還有 5500ETH 正在被抵押
- 由於其他交易市場: WBTC/ETH 還在正常價位 -> 透過 4300ETH 買入 112WBTC -> 換回被抵押的 5500ETH -> 總計獲利 1200ETH + 71ETH = 1271ETH
參考: