從解藥到毒藥:Permit為何變成風(fēng)險(xiǎn)之源?
作者:Keystone來(lái)源:X,@KeystoneCN1.一分鐘認(rèn)識(shí)Permit是什么
我們先從一個(gè)借錢(qián)小故事開(kāi)始說(shuō)起:
我準(zhǔn)備向好朋友杰克馬借100萬(wàn),杰克馬二話不說(shuō)拿起電話打給銀行,確認(rèn)身份后告知銀行:我要授權(quán)給某某某100萬(wàn)的提款額度,銀行回復(fù)收到授權(quán)并記錄在案。
下一步我只需要去到銀行,告知柜臺(tái)準(zhǔn)備取走杰克馬給我授權(quán)的100萬(wàn)。這時(shí)銀行會(huì)查閱有沒(méi)有授權(quán)記錄并在確認(rèn)我就是某某某后,把100萬(wàn)給到我。
這個(gè)小故事可以視為ETH上Approve授權(quán)的具象化。在這個(gè)過(guò)程中,授權(quán)只能由杰克馬(資產(chǎn)所有人)打電話告知銀行進(jìn)行授權(quán)(上鏈),并由銀行(Token合約)管理這些授權(quán),之后我(被授權(quán)方)才能從銀行轉(zhuǎn)走不高于授權(quán)金額錢(qián)。假如銀行沒(méi)有查到授權(quán)記錄的話,我的提款申請(qǐng)毫無(wú)疑問(wèn)會(huì)被拒絕。
好了,接下來(lái)如果換成另外一種授權(quán)方法——Permit,向杰克馬借錢(qián)的話,流程會(huì)有什么變化?
這次我一開(kāi)口又要借100萬(wàn),大方的杰克馬也懶得打電話了,從口袋里掏出一本支票,填寫(xiě)金額并簽名之后給了我。我拿著這張支票去到銀行兌換,此時(shí)盡管銀行沒(méi)有授權(quán)記錄,但是憑借著支票上杰克馬的簽名,銀行確認(rèn)了支票的真實(shí)性,將指定金額的錢(qián)兌付給了我。
相信小伙伴們已經(jīng)看出了二者在流程上的差異,Approve作為ERC-20中重要功能,在ETH上線后不久就已經(jīng)被廣泛應(yīng)用了,為什么后來(lái)還要在ERC-2612中引入Permit方法來(lái)實(shí)現(xiàn)相同效果的特性?2.為何需要Permit?
ERC-2612提案自2019年3月份被提出,直到2022年10月完成最后審查,它的上線和這期間ETH主網(wǎng)上的gas價(jià)格經(jīng)歷了多次暴漲有著密不可分的關(guān)系。
在Permit出現(xiàn)之前,黑客釣魚(yú)幣圈用戶的手段之一便是誘導(dǎo)用戶簽署Approve交易,這樣的交易需要用戶花費(fèi)gas,容易引起警覺(jué)而無(wú)法得逞。就算用戶一時(shí)手快點(diǎn)擊了,由于交易上鏈需要一定時(shí)間,回過(guò)神來(lái)的用戶也可以馬上提交一筆相同nonce的交易來(lái)?yè)尵龋鄬?duì)來(lái)說(shuō)黑客得手并不那么輕松。
而Permit的出現(xiàn),對(duì)黑客來(lái)說(shuō)無(wú)疑是瞌睡遇枕頭,相比較于Approve,Permit不消耗gas,只需要簽名,用戶的警惕性降低。同時(shí)由于離線簽名的特性,主動(dòng)權(quán)掌握在黑客手上,不僅用戶吃不了后悔藥,黑客更可以拿著授權(quán)選擇合適的時(shí)機(jī)做壞事,將利益最大化。
由此而帶來(lái)的不良影響,便是我們可以看到的釣魚(yú)受害者數(shù)量以及被盜金額激增。據(jù)@ScamSniffer的統(tǒng)計(jì)數(shù)據(jù):
2023年釣魚(yú)受害者損失金額為2.95億美元。
在2024的上半年,這一金額就已經(jīng)超過(guò)3.14億美元之多。
在2024的Q3尾聲,更是來(lái)了一票大的:疑似神魚(yú)的錢(qián)包地址遭遇Permit釣魚(yú)攻擊,損失1.2萬(wàn)枚$spWETH,價(jià)值2個(gè)億人民幣。
2、善用工具
ScamSniffer
作為普通用戶,想精準(zhǔn)識(shí)別釣魚(yú)網(wǎng)址有很高難度,難免會(huì)有漏網(wǎng)之魚(yú)存在。借助ScamSniffer的瀏覽器插件,在進(jìn)入疑似釣魚(yú)的網(wǎng)址前,會(huì)收到插件的提醒,用戶收到提醒后可以及時(shí)停止交互。
Revoke
Revoke.cash可以展示用戶錢(qián)包里的Tokens授權(quán)記錄,對(duì)于其中可疑的、無(wú)限金額的授權(quán)我們建議撤銷。養(yǎng)成定期清理授權(quán)的習(xí)慣,盡量少做超出需要數(shù)量的授權(quán)。3、資產(chǎn)隔離與多簽
常言道不要把雞蛋都放在一個(gè)籃子里,這句話對(duì)于幣圈資產(chǎn)也適用。比如我們可以把大額的資產(chǎn)存放在冷錢(qián)包如Keystone中,日常交互都是用小額的熱錢(qián)包進(jìn)行,即使不小心中招,資產(chǎn)也不會(huì)被一鍋端。
如果對(duì)于安全性有更高的要求,可以使用多簽來(lái)進(jìn)一步提高安全性。加入了多簽的資產(chǎn),只有在錢(qián)包同意數(shù)達(dá)到閾值時(shí),才能對(duì)資產(chǎn)進(jìn)行操作轉(zhuǎn)移。未達(dá)到閾值的單一錢(qián)包被盜,黑客也無(wú)法掌握資產(chǎn)。5.結(jié)語(yǔ)
我們無(wú)法否認(rèn)Permit帶來(lái)的價(jià)值,但近來(lái)越來(lái)越多的被盜事件也表明,它帶來(lái)的危害似乎更大。正如曾經(jīng)的ethsign方法,由于可讀性差且危害巨大,也備受當(dāng)時(shí)的黑客青睞。而如今它已經(jīng)被絕大多數(shù)的錢(qián)包軟件屏蔽棄用,它實(shí)現(xiàn)的功能也被一些更安全的方法所替代。
把目光放在Permit身上,是否也同樣走到了ethsign曾經(jīng)面臨的十字路口?改良升級(jí)還是棄用,需要ETH的開(kāi)發(fā)者們花一些時(shí)間去思考和討論。