智能合約安全與審計

閃電貸攻擊

閃電貸攻擊利用一筆在同一交易內借入並還清的無抵押貸款,賦予攻擊者龐大而短暫的資本,用以撥彎某個協議。閃電貸本身是合法的 DeFi 原語:因為若貸款在交易結束前未還清、整筆交易便回滾,放款方毫無風險。但同樣的原子性,把數百萬美元交到一個平時資本不足的攻擊者手中、僅僅幾毫秒,而這恰好足以壓垮任何在安全假設裡暗自認定「沒有單一行為者能一次調動這麼多錢」的機制。

重點是,閃電貸本身鮮少是漏洞,它是把潛在弱點放大成災難的放大器。經典的串連是:借入巨額,用它操縱即時價格預言機、或取得某治理代幣的暫時多數,利用一個信任這個被操縱狀態的合約,取走利潤,再還清貸款,全部原子性地完成,攻擊者只冒了 gas 的風險。沒有這筆貸款,同樣的漏洞或許需要數千萬的真實資本,因而無人利用;有了它,攻擊幾乎免費。

因此,防禦閃電貸攻擊意味著拆掉「資本稀缺」這個底層假設。別用可即時撥動的即時來源為資產定價,改用 TWAP 或去中心化饋送。把治理投票權建立在過去某區塊快照下的餘額、而非當下區塊的餘額之上,如此閃電借來的代幣便不具份量。更廣義地說,把每一個機制都設計成即使某行為者暫時掌控無上限的金錢仍然安全,因為在鏈上、在一筆交易的長度內,他們確實可以。

用閃電貸借入一億穩定幣;兌換其中一部分以扭曲某淺薄資金池的價格;用這個被扭曲的價格在受害協議上進行清算或超額借款;逆轉兌換;還清一億加手續費;把剩餘收入囊中。若任何一步沒留下足夠的錢來償還,整筆交易便回滾,什麼也不會發生。

閃電貸攻擊幾乎從不利用貸款本身,而是利用第二個弱點——一個可操縱的價格或一場同一區塊內的治理投票——這個弱點唯有在有人能免費動用數百萬美元時才變得危險。

又稱
flash loan exploit閃電貸漏洞利用