資安JAVA(二四): Static Analysis

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 24 – USE STATIC ANALYSIS
作者:John Melton
What is it and why should I care?

靜態分析(Static Analysis)是一種分析,能夠自動化檢查程式碼而不需要實際執行程式。靜態分析工具很多,可以達到的複雜度也不同。作者大致介紹兩種類: Grep+ 和 資料流/控制流分析。


Grep+
Grep 是很棒的內文搜尋工具,但無法成為正式的靜態分析工具。以前人們認為總有一天可以用 Grep 發展出實用的靜態分析工具,但受限於只能搜尋符合某些特徵的程式碼,Grep 終究無法成為稱職工具。Grep 能用在許多地方,但今日的靜態分析工具已經超越單純的內文搜尋工具。

資料流 / 控制流分析 Data/Control Flow Analysis
進階版的靜態分析工具所使用的技巧就是 資料流分析 和 控制流分析。這種概念是從編譯器理論( Dragon book )而來的,尤其是最佳化技術。雖然這不是新的概念,大家仍花了很多心力才應用到靜態分析

一般而言,這些工具會建立應用程式的資料結構模型(又稱抽象語法樹 Abstract Syntax Tree),然後以不同方法遍歷抽象語法樹( AST )的結構,找出問題。

其實開發者最熟悉的 IDE 工具已經再利用上述的概念,當你寫程式時, IDE 會建立靜態的抽象語法樹,並即時顯示警告和錯誤。某些 IDE 工具甚至會從程式外部,檢查 AST 的安全性。

註:雖然靜態分析並不只是針對安全領域,但身為資安專家的作者自然是以安全為主。作者提醒大家,不只資安,靜態分析也可以解決其他問題。而目前資安市場中相關的產品又稱為 Static Application Security Test。
What should I do about it?

請不要安於 IDE 內建的語法檢查功能,你應該將安全性靜態分析整合到開發流程。目前常見到的整合方法有兩種:
1.單一執行模式(列出程式碼,並按下"執行掃描"的按鈕)。
2.連續整合模式(當程式碼成功 commit 後自動執行掃描)。對於開發者而言2.比較好,因為及早發現的修復成本比較低。

市面上的工具有很多廠牌,因為作者目前正在開發這類的工具,所以會保持中立不推薦特定廠牌。目前他會推薦大家去用用看免費開源工具 FindBugs。(感謝馬里蘭大學!!)

以下是安全性靜態分析工具的注意事項:

1.沒有適當調整過的靜態分析工具通常誤報( False Positives )會很多,所以使用前要先調教,才能得到有用的分析報告。雖然必須在這方面付出額外心力,但你能學到更多經驗。

2.即使是最棒的靜態分析工具都不能保證找到所有安全問題,請不要捨棄舊有的軟體測試工具。

3.靜態分析工具不能替你解決安全問題。

參考資料
http://en.wikipedia.org/wiki/Static_program_analysis
http://en.wikipedia.org/wiki/Data_flow_analysis
http://en.wikipedia.org/wiki/Control_flow_analysis
https://blog.whitehatsec.com/mythbusting-static-analysis-software-testing-100-code-coverage/
http://swreflections.blogspot.com/2012/01/static-analysis-isnt-development.html

———–———–
資安Java: 上一篇 || 下一篇
———–———–

留言

這個網誌中的熱門文章

資安JAVA(十一):X-XSS-Protection

資安JAVA(十):X-Content-Type-Options

資安JAVA(十二):Log Forging