資安JAVA(三五): 一次解決一個問題

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 35 – SOLVE SECURITY PROBLEMS ONE AT A TIME
作者:John Melton

What is it and why should I care?

本篇文章與技術沒有太大關係,主要是討論解決資安問題的流程。

真實生活中的資安廠商通常跟消防員一樣。一通電話"救命阿,我們的網站被駭了,快幫我們修好!"是一天中最平凡的開場白。我們常常忙於亡羊補牢,而沒有解決問題來源,也沒有減少弱點被人利用的機會。

所以,問題持續存在。

要根本解決Web的安全問題,我們不能等到事情發生才關心。我們必須要提早想到可能的問題,並提出解決方案。building security in 網站教你從開發階段就該注意的事情,bsimm.com 則收集了許多知名軟體公司對於安全所做的努力。

然而,我們常犯了想要同時解決所有看起來都很嚴重問題的毛病。卻忘了風險優先順序。只有讓所有相關人員來開會,詳細說明安全問題,才能釐清問題順序。

假設以下兩種跟效能( performance )有關的情境。
1. 當你有一個跑得很慢卻又常常被執行的函式。有天你看不下去了,直接改寫成更有效率的版本,並取代舊版本。系統效能立即提升,減少浪費的時間。

2.當你有個跑得很慢的跨應用程式查詢句。你可以升級資料庫的硬體、更換資料庫供應商、增加應用程式的快取空間、最佳化查詢句等等。但是這些調整都牽涉到很多軟硬體的設定,你需要計畫,不能說改就改。

某些資安的問題也是一樣,有些問題可以像1.的情境,直接修改。有些問題(sql injection、xss)則像2.,需要妥善的計畫。


What should I do about it?

遇到資安的問題時,我建議從最難的問題開始著手。你的目標是確保你負責的程式碼都OK,而且未來也不會再發生。聽起來好像很難做到,那再分成以下幾個步驟:

1. 了解問題
如果不了解問題就全盤接受別人的糾正,你不僅學不到東西還會讓別人覺得很蠢。

2. 模擬未來會發生同樣問題的使用情境( use case )
找出為什麼開發人員老是出現同樣問題的原因。請你模擬使用情境包含系統哪些功能。請別讓其他開發者有理由不使用你的假設。

3. 評量解決方案

  • 分析現有的資安產品的優劣
  • 找出已知的攻擊手法
  • 制定解決方案( 通常重頭打造會很容易失敗 )
  • 尋找能滿足解決方案的工具
  • 遵循指引來實作解決方案

4. 解決方案制度化
一旦你實作完成後,就需要制定規範使得其他人使用解決方案。ESAPI 是我覺得很好用的解決方案。你可以依照組織的需求制定一整套的控制項,然後制定說明文件。讓開發者遇到特定範圍的問題時就能依照文件使用控制項。

5. 增加驗證的步驟
為了確保大家都都引用解決方案的控制項,系統測試時需要額外增加驗證的流程。

  • 客製化確認工具,當開發者正確的引用控制項時,能顯示出該控制項以被正確使用。當開發者沒有引用或是錯誤引用,則要顯示紅燈,提醒開發者去改一下。
  • 增加人力、購買新工具。軟體不能面面俱到,人可以。只有多加點人手才能確保大家都遵守解決方案,同時開發者也能專心做他擅長的事情。

通常資安問題多到解不完,你只能制定優先順序,好好的解決。一段時間之後就能有效提升應用程式的安全性。

參考文獻
———–
https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API
https://www.owasp.org/index.php/OWASP_Security_Blitz

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

留言

這個網誌中的熱門文章

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

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

資安JAVA(十二):Log Forging