iT邦幫忙

0

資安自動化檢測工具介紹:Slither 靜態分析實戰

  • 分享至 

  • xImage
  •  

在實務的資安稽核中,光靠人眼一行一行去看程式碼(Manual Review)是非常危險且沒有效率的。人類會因為疲勞而漏看一個 unchecked 區塊,或者忽略變數的狀態更新順序。因此,專業的資安稽核團隊在正式看 Code 之前,一定會先用「自動化檢測工具」把整個專案掃描過一遍,抓出所有低級失誤與潛在風險。

什麼是 Slither?
Slither 是由頂尖區塊鏈資安公司 Trail of Bits 開發的開源靜態分析框架。
所謂的「靜態分析(Static Analysis)」,意思是你不需要把合約部署到鏈上,也不需要實際去執行它。Slither 會直接讀取你的 Solidity 原始碼,將其轉換成抽象語法樹(AST),然後利用內建的數十種漏洞偵測規則,瞬間掃描出有問題的程式碼。

它的優點非常明顯:

  1. 極度快速:掃描幾千行的合約通常只需要不到一秒鐘。
  2. 規則豐富:內建了超過 70 種常見漏洞探測器(涵蓋了我們前幾天學過的重入攻擊、未初始化的狀態變數、錯誤的可見度修飾子等)。
  3. 精準定位:會直接告訴你漏洞在哪個檔案的哪一行。

Slither 安裝與環境建置
Slither 是用 Python 開發的,因此你的電腦必須先安裝 Python 3。
打開終端機,透過 pip 直接安裝:
'''
#安裝 Slither
pip3 install slither-analyzer

#驗證是否安裝成功
slither --version
'''
(註:如果你的專案是用 Foundry 開發的,Slither 也能完美相容並自動讀取 foundry.toml 的設定。)

實戰:用 Slither 秒殺重入攻擊漏洞
還記得之前寫的那個充滿漏洞的 VulnerableBank.sol 嗎?我們當時刻意把「發送 Ether」寫在「扣除餘額」的前面。

現在,讓我們把這個檔案交給 Slither 掃描看看。在終端機輸入:
'''
slither src/VulnerableBank.sol
'''
Slither 終端機輸出解析:
按下 Enter 後,終端機馬上會噴出一大串帶有顏色的警告訊息。你會看到類似這樣的一段紅色高風險警告:
'''
VulnerableBank.withdraw() (src/VulnerableBank.sol#13-24)
State variables written after the call(s):
- balances[msg.sender] = 0 (src/VulnerableBank.sol#23)
Reentrancy in VulnerableBank.withdraw() (src/VulnerableBank.sol#13-24):
External calls:
- (sent,None) = msg.sender.call{value: bal}() (src/VulnerableBank.sol#19)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities
'''
看懂了嗎?Slither 精準地抓出了我們刻意埋下的雷!
它明確地指出在 withdraw() 函數中,balances[msg.sender] = 0 這個狀態變數的更新動作,發生在外部呼叫 msg.sender.call() 之後。它甚至貼心地附上了這個漏洞的 Wiki 說明連結。

有了這個工具,我們在開發階段就能第一時間把這種致命的邏輯錯誤給修掉,大大降低了後續被駭客攻擊的風險。

靜態分析的侷限性 (False Positives)
雖然 Slither 很強大,但身為資安人員,我們不能盲目迷信工具。靜態分析最大的缺點就是「誤判率(False Positives)極高」。

因為 Slither 只是在看程式碼的「語法與結構」,它並不懂你的「商業邏輯」。有時候你明明已經加了 ReentrancyGuard 互斥鎖,Slither 可能還是會因為看到外部呼叫而跳出重入攻擊的警告。這時候就需要依賴資安稽核人員的專業判斷,去過濾掉這些雜訊。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言