資安JAVA(二六): Code Review

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 26 – DO CODE REVIEWS
作者:John Melton
Holmes: Found any bugs?
Waston: You mean ...besides 5000 compiling errors?
What is it and why should I care?

原始碼檢查( Code Review )源自單純的 Double Check 概念,讓其他人以系統化的方式找出錯誤。雖然步驟簡單,效果卻很好。研究 指出透過 Code Review 可以找出程式碼中 25-75%的錯誤,若結合其他品管方法,能達到更完美的程式碼。

雖然 Code Review 是開發者用來找出程式碼中所有錯誤,但本系列文章以資安為主,作者只會討論安全性議題。安全性 Code Review 會忽視無關安全性的錯誤。一般性和安全性議題的差別是檢查目的並非檢查方法。

What should I do about it?

作者根據經驗認為Code Review 效果的確符合研究結果。所以請大家開始計畫導入吧!以下是 Code Reivew 能永續發展的建議步驟:

制定計畫(Define the Plan)
就像所有專案,請你針對組織特性設定可行的目標,例如:
- 降低 QA 階段發現的弱點數量(越早發現越好)。
- 確保程式碼遵守公司或法律規範。
- 訓練開發者的安全概念(導入Code Review到開發團隊中)。
- 加強成員的整體安全觀念。

採取行動(Do It)
說得簡單,做了才知道。一般開發人員聽到Code Review 會有兩種反應:忙死了我不想做、忙了我隨便做就好。所以請務必提供誘因,將Code Review 融入大家的習慣之中。

因地制宜(Don’t Over-Do It)
不要把時間浪費在沒有價值的程式上( 不要花時間檢查 Java beans)。請把時間放再應用程式中最關鍵的、最敏感的部分。更進一步的,當核心部分程式被更改後,應自動發起一次Code Review。

自動化(Automate What You Can)
利用自動化工具可以幫你做到一部分 靜態 和 動態 分析。然而,自動化工具並無法找出所有問題,但某些無法以工具檢測的弱點,你仍需要以寶貴人力作 Code Review。這表示你應該了解工具的限制和範圍,並以人工彌補工具的不足。Code Review是否能提升應用程式安全的關鍵就是工具與人工檢查的搭配,請務必了解決策如何制定和為何制定。

另外,人工檢查可以使用工具增加檢查效率,例如以工具比對兩份程式碼的差異、歷史版本的註解、留下筆記提醒開發人員等等。

重複執行和改進(Iterate and improve)
能提升產品的好流程都應重複進行,請完成第一次Code Review後進行效能評估,去除無用的方法,留下可行的步驟,增加新的想法後再重複執行。重點是,要找出能覆蓋所有安全議題的檢查流程。作者將 Code review 視為單元測試(Unit test),將想得到的條件都加到測試環境,只要發現新的漏洞,就更新檢查條件,所以應用程式整體只會越來越安全。

基本上可分為三個步驟:a)保留可用的測試環境。b)丟掉不能用的。c)針對新的安全議題加入新的條件。作者建議大家以6個月為單位,重新檢查Code Review的有效性,評估是否需要加入新條件。

結論,假使你想要改進程式碼品質,Code Review是必要工作,只要系統化的 Double check 程式碼,在開發階段就能發現問題,並提早修改。當應用程式更新版本後,請堅持重覆執行 Code Review 的工作,你的應用程式就能逐步邁向成功。

參考資料
———–
http://swreflections.blogspot.com/2011/05/not-doing-code-reviews-whats-your.html
http://www.aleax.it/osc08_crev.pdf
http://software-security.sans.org/blog/2012/06/26/different-ways-of-looking-at-security-bugs/
http://en.wikipedia.org/wiki/Fagan_inspection
http://www.slideshare.net/zanelackey/effective-approaches-to-web-application-security
http://kev.inburke.com/kevin/the-best-ways-to-find-bugs-in-your-code/
http://www.cc2e.com
http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html
http://en.wikipedia.org/wiki/Code_review

留言

這個網誌中的熱門文章

資安JAVA(八):HTTP強制傳輸安全(HSTS)

以 SharpPcap 實作可收聽封包的 C# 程式

資安JAVA(四):Session Cookie HTTPOnly Flag