分散式應用漏洞分類-DASP TOP10

閱讀時間約 8 分鐘
在過往大家所較為熟知的漏洞分類為OWASP (Open Web Application Security Project) Top10,對web 應用程序安全風險進行分類,並訂立了相關的安全檢核標準:OWASP ASVS (Application Security Verification Standard),將風險分級並於應用層面訂立詳細的驗證需求。
而在智慧合約發展不久後,於2018 年也有了類似的漏洞分類,即為DASP(Decentralized Application Security Project) TOP10,與之對應的安全檢查標準便是SCSVS(Smart Contracts Security Verification Standard),首次發表於OWASP Global AppSec Amsterdam 2019 會議,旨在為開發人員、安全審查人員及產品供應商等等標準化智慧合約的安全性,有助於避免大多數已知的安全問題及漏洞。
該列表於2020 年12 月5 日發表新版本,更新第十四個分類項目DeFi,並於OWASP 會議上進行發表。

(一) Reentrancy

合約在執行外部合約調用時被攻擊者劫持,重入遞迴呼叫合約內函數,著名的DAO 事件便是駭客利用此漏洞進行攻擊,最終導致以太坊的硬分叉。

(二) Arithmetic

通常分為整數上溢和整數下溢,以uint8 為例,只能存8 bit,意即0 到2⁸ -1 的數字(0–255),uint256能存0 到2²⁵⁶-1 的數字,以此類推。若試圖存256 至uint8 類型中,數字會變成0。下溢原理亦是。要防止整數溢出可以使用OpenZeppelin 所開發的SafeMath 合約對算術邏輯進行檢查,另外Solidity 在v0.8.0 後預設會進行算數檢查,將不必另外引入函式庫。

(三) Short Addresses

處理ERC20 代幣的交易時,若未在帳戶地址長度上執行輸入驗證,EVM 檢測到缺少字節時將會自動補零,會使攻擊者於交易時可以領走對方帳戶數十或是百倍的金額。若是在交易所進行交易,交易所需要對帳戶地址進行檢查,方能避免此類攻擊。

(四) Access Control

使用Solidity撰寫合約時可以使用private、public、external 和internal 對合約存取權限進行控管,而在使用和儲存變數可以使用memory、storage 和calldata。
• private
函數僅能在合約內部被調用。
• public
函數可以被任何帳號調用或呼叫,可以為外部合約或使用者、內部其他函數等。
• external
函數不能透過內部呼叫,僅能從外部調用。
• internal
一般用於合約繼承,父合約提供子合約進行呼叫或調用。
• memory
資料僅在函式執行期間存在,執行完畢後就被刪除。
• storage
storage 中的資料會寫入區塊鏈,只要合約存在就一直保留,修改狀態的話鏈上資料也會改變,這也是storage 使用成本高的原因。
• calldata
外部函數的引用必須使用calldata,也可用於其他變數的引用。只讀數據位置,可以確保資料不被修改,可以用來保存函數調用參數(之前僅能針對外部函數使用),Solidity 0.6.9 版本之後先前僅用於外部函數(external 修飾的函數)的 calldata 位置,現在可以在內部函數(internal 修飾的函數)使用。函數也可以返回使用calldata 宣告的陣列和結果,但是不能分配這些型別。
2017 年7 月19 日所發生的Parity Multisig Wallet 攻擊便是利用此漏洞,由於錢包合約並沒有使用權限控管,用public 使任何人皆可呼叫,攻擊者將其所有權改成自己,並將合約內金額全數轉給攻擊者地址。

(五) Bad Randomness

在以太坊鏈上所有交易都是公開可以被查詢的,若在撰寫合約使用隨機數時沒有考慮到此特性,此漏洞可能被惡意使用者用以圖利。
以DASP 所提供的例子進行說明:
Bad Randomess範例
其利用private seed 與iteration 數字和keccak256 hash 函數結合,用以確定呼叫者是否獲勝,seed 的值可以透過檢視與該合約相關的交易紀錄來取得。得到 seed 值後 iteration 值也可以此方式計算獲取,整個 uint(keccak256(seed + iteration))的值便是可以被預測的。惡意的攻擊者可藉此使自己不斷贏得獎勵。

(六) Transaction Ordering Dependence (TOD)

亦被稱為Front-Running,在以太坊區塊鏈中,礦工藉由驗證交易獲得獎勵,手續費較高的交易會優先被完成,因此礦工的選擇會影響交易的順序,在以太坊鏈上任何人都可以看到他人未被驗證的交易內容,惡意攻擊者可以藉此竊取他人交易內容或合約,以更高的費用複製其交易,使礦工會選擇交易高的一方,便會產生TOD 之漏洞。

(七) Time Manipulation

合約若依賴於block.timestamp 是有被攻擊利用的風險的,礦工在對交易進行驗證時可以掌握時間,若礦工對使用時間戳進行控制的合約持有股份或有利可圖,可能造成有心的礦工(攻擊者)藉由選擇特定時間驗證圖利自己。

(八) Denial of Services

導致DOS 的狀況很多,包含out of gas、含有kill()的合約、可能意外阻斷服務之呼叫等等皆算此類。
經典的舉例如「King Of Ether Throne」,「King Of Ether Throne」是一個能賺取以太幣以及可以留名的合約,使用者可以向合約投入金額換取成為國王的機會,若在14 天內都沒有被篡位就可以在專屬網站留下地址及帳戶名稱,若在14 天內被篡位,新任國王所投入的金額有部分金額會給遭篡位者作為補償。漏洞利用方式是以惡意合約作為篡位帳戶,在惡意合約的fallback() 內添加錯誤函數(如:revert()),即可阻斷合約,使後續其他使用者永遠都無法篡位成功。

(九) Unchecked Return Values For Low Level Calls

指在呼叫外部函數發生錯誤或是沒有對調用返回值進行檢查所產生的安全問題,DASP TOP 10 內所述有三種底層調用方式分別為: call()、delegatecall()、 callcode()。而在目前的Solidity 版本中,用法為call()、delegatecall()、 staticcall(),和三個發送ether 的函數:call{value: value}、send()、 transfer()。
• call()
多用於調用外部合約函數,會回傳一個bool 值來表示外部調用成功或是失敗。
• delegatecall()、 staticcall()
允許合約於現有合約之環境進行上下文調用其它使用者之合約的程式碼,藉由回傳的bool 值來表示調用成功或者失敗。
• call{value: value}()
若只是透過fallback() 發送以太幣時,可以使用此方法。
• send()
在發送款項時若失敗會回傳false,有gas 消耗限制,僅提供2300 gas,但交易失敗狀態不會回滾。
• transfer()
若發送失敗交易狀態會回滾,有gas 消耗限制,僅提供2300 gas,在用以發送交易時是較為安全的寫法。

(十) Unknown Unknowns

由於智慧合約尚在發展階段,許多項目在發布前進行安全審計時漏洞無法被完全揭露,現有的驗證工具或方法也有侷限性,未來可能有新型態攻擊發生。
作者Alice目前為分散式金融應用安全從業人員,將來也會持續在Vocus以及medium上分享相關的研究,如果喜歡我的文章歡迎追蹤我的帳號喔!
另外,我已經加入由趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件
> 追蹤《區塊鏈生存守則》學習如何在區塊鏈的世界保護自己
> 關注防詐達人獲得其他最新詐騙情報
28會員
176內容數
我們整理了web3相關的熱門資安問題,包含加密貨幣投資詐騙、盜版NFT、空投釣魚和區塊鏈重大資安事件懶人包等等,並提供最完整的辨識方法教學,讓大家從0到1學習如何保護自己
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
89
閱讀心得:展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
68
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
2023-04-27
39
聊聊分散式運算 NVDIA黃仁勳演講有提到分散式運算,我還真的做了分散式運算的研究拿了個碩士,那分散式運算是做什麼的呢?用現在的時代用語”算力”來解釋的話,就是要處理的資料非常大量,但是單一伺服器的算力不足,所以必須聯合好幾台伺服器的算力來一起處理, 而要能夠做分散式運算的前提就是你要有一套可以操作分散式運算
Thumbnail
2024-06-03
9
書摘《分散式系統設計》這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
Thumbnail
2024-03-16
4
Pure Storage連續第3年奪得 Gartner「分散式檔案系統與物件儲存魔力象限」領導位置Pure Storage在Gartner® 2023年「分散式檔案系統與物件儲存魔力象限」(Magic Quadrant™ for Distributed File Systems & Object Storage)獲選為領導者。
發佈在
Vocus
2023-11-17
0
關於星星兒的專注力,如何提升轉換式和分散式?星星兒的過度專注,就在三類專注力較有優勢。 分別是,集中式、選擇式及持續式。 而提升轉換式和分散式,就需要小技巧了。 再次強調,引起星星兒的動機,很重要。 以訓練星星兒的分散式來說,先從星星兒的喜好,進行引出星星兒的動機。 簡單說,就是星星兒在玩物品的過程,務必用〝提示音〞做星星兒的提醒。
2023-10-22
4
【科學新聞】分散式灌溉系統提升稻米的灌溉效率最近由中國科學家發表在Nature Communications 的一篇論文指出,恢復傳統的分散式灌溉系統可以減少種植稻米所需的水資源,這對於水資源的有效利用至關重要。 你可能很難相信,根據Lampayan在2015年的估計,全球總淡水資源中有接近40%用於稻米的生產,沒有錯,40%,更有研究估計未
Thumbnail
2023-06-28
1
個股分享:復盛應用個股分享:復盛應用 基本面: 很巧,2018年的今天剛好是復盛應用掛牌的日子,在今天我們來談談這家公司吧,復盛應用的主業就是高爾夫球相關的球頭及球桿,並且由資料可知其為全球最大的鈦合金及不鏽鋼高爾夫球具製造供應商,其在代工市場的市佔率約佔四成,份額及實力皆不差。 復盛應用在今年的4/11也發行了16
Thumbnail
2022-12-18
4
【ABA應用行為分析】-教學方法【ABA應用行為分析】-教學方法 (一)離散試訓教育(DTT) (二)隨機教学/NET-自然環境训練(Incidental Teaching) (三)語言操作系統/VB – 語言行為訓練(Verbal Operants) (四)圖片交換溝通系统.....
知人善任---如何把對的人放在對的位置上?知人的六個判斷與善任的四個基準。團隊表現要比其他單位出色,必須展現三個臭皮匠,勝過一個諸葛亮的戰果?
Thumbnail
2022-10-31
7
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
89
閱讀心得:展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
68
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
2023-04-27
39
聊聊分散式運算 NVDIA黃仁勳演講有提到分散式運算,我還真的做了分散式運算的研究拿了個碩士,那分散式運算是做什麼的呢?用現在的時代用語”算力”來解釋的話,就是要處理的資料非常大量,但是單一伺服器的算力不足,所以必須聯合好幾台伺服器的算力來一起處理, 而要能夠做分散式運算的前提就是你要有一套可以操作分散式運算
Thumbnail
2024-06-03
9
書摘《分散式系統設計》這本書從 docker 的角度出發,介紹很多可重複使用的 pattern,除了翻譯某些地方有點怪之外,算是很有趣的一本書,後面很多的 pattern 可以想成是 sidecar 的進階使用方式,在不改變應用程式的情況下,增加不同的功能,相當實用。
Thumbnail
2024-03-16
4
Pure Storage連續第3年奪得 Gartner「分散式檔案系統與物件儲存魔力象限」領導位置Pure Storage在Gartner® 2023年「分散式檔案系統與物件儲存魔力象限」(Magic Quadrant™ for Distributed File Systems & Object Storage)獲選為領導者。
發佈在
Vocus
2023-11-17
0
關於星星兒的專注力,如何提升轉換式和分散式?星星兒的過度專注,就在三類專注力較有優勢。 分別是,集中式、選擇式及持續式。 而提升轉換式和分散式,就需要小技巧了。 再次強調,引起星星兒的動機,很重要。 以訓練星星兒的分散式來說,先從星星兒的喜好,進行引出星星兒的動機。 簡單說,就是星星兒在玩物品的過程,務必用〝提示音〞做星星兒的提醒。
2023-10-22
4
【科學新聞】分散式灌溉系統提升稻米的灌溉效率最近由中國科學家發表在Nature Communications 的一篇論文指出,恢復傳統的分散式灌溉系統可以減少種植稻米所需的水資源,這對於水資源的有效利用至關重要。 你可能很難相信,根據Lampayan在2015年的估計,全球總淡水資源中有接近40%用於稻米的生產,沒有錯,40%,更有研究估計未
Thumbnail
2023-06-28
1
個股分享:復盛應用個股分享:復盛應用 基本面: 很巧,2018年的今天剛好是復盛應用掛牌的日子,在今天我們來談談這家公司吧,復盛應用的主業就是高爾夫球相關的球頭及球桿,並且由資料可知其為全球最大的鈦合金及不鏽鋼高爾夫球具製造供應商,其在代工市場的市佔率約佔四成,份額及實力皆不差。 復盛應用在今年的4/11也發行了16
Thumbnail
2022-12-18
4
【ABA應用行為分析】-教學方法【ABA應用行為分析】-教學方法 (一)離散試訓教育(DTT) (二)隨機教学/NET-自然環境训練(Incidental Teaching) (三)語言操作系統/VB – 語言行為訓練(Verbal Operants) (四)圖片交換溝通系统.....
知人善任---如何把對的人放在對的位置上?知人的六個判斷與善任的四個基準。團隊表現要比其他單位出色,必須展現三個臭皮匠,勝過一個諸葛亮的戰果?
Thumbnail
2022-10-31
7