資安JAVA(十九): 減少攻擊進入點

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 19 – REDUCE THE ATTACK SURFACE
作者:John Melton
Police: Suspect is not going to get through.
What is it and why should I care ?


減少應用程式的攻擊進入點( attack surface )代表減少與應用程式互動的方式,且可能減少應用程式的功能性。

對於一秒幾十萬上下的老闆們可真是個壞消息。然而我們只是要回歸系統的初衷─簡單化。其實簡單化對於企業是件好事。你很少看到有人因為某個產品超難用,反而感到心情愉悅。最方便的設計就是簡單好用,最安全的設計也是。

那該如何簡化?作者最愛的例子是 Google 標準搜尋框 和 進階搜尋頁面,大約99.99%的人不會用的進階搜尋功能被設計在安分的角落。假設Google移除進階功能,可以相對的簡化"搜尋"功能,可以簡化應用程式的腳印、節省記憶體、達到更好的顧客經驗。

許多開發人員都想做些很酷很炫的功能,結果程式碼發展的比計畫中還要肥大,也干擾使用者的心情。請無情地移除不必要的功能、優雅的簡化,就能改善使用者經驗和提升安全性,還可以省錢和省時間。


What should I do about it ?

移除部分功能聽起來有點含糊。作者將提供一些例子以供參考。

1. 沒用的程式碼(Dead Code)
許多先進的 IDE 都提供 "Dead Code"偵測器,即使你是只用筆記本寫程式的高手,還是有許多"程式碼品管( Code Quality )"的免費工具。請無情的刪除用不到的程式碼,狠心的拋棄註解中的程式碼,假使你真的需要一定可以從版本控制系統中救回來的。

因為沒用的程式碼不會被認真對待,所以從資安的角度來看更是火上加油,雪中送芒果冰,當事情發生時才說「早知道就把那隻沒人用的程式...」。

2. 複製品程式碼( Copied code )
我不是聖人,大家都做過把舊專案的程式碼拿到新專案用,這不就是物件導向的精髓嗎?但是在重複利用的同時,有些功能是新專案用不到的,於是增加維護、除錯、支援、調校、安全額外的工作。這是很糟的主意,請你殘酷的拋棄不需要的部分。

3. 額外功能( Extra features )
讓客戶發出「哇,這好酷」的讚嘆很好,但作者認為增加額外功能並非達到目的的最好方法。通常,給予客戶他們所需要的、最穩定的版本,對大家才是雙贏。做得少而精和做得多而普通就跟可憐的魚和熊一樣。開發者常因為「哇,這好酷」就擅自增加新功能,但這也代表額外的程式碼、額外的工作,影響原本應有的品質。

4. 額外程式碼( Extra code – 3rd party libraries )
第三方套件是現今應用程式不可缺乏的,我們可以更快速開發強大的應用程式。然而,這也代表增加很多不在規劃內的額外功能。作者經驗表示,大部分的 J2EE 應用程式中第三方套件程式碼甚至比應用程式本身還多(我想 .NET 也差不多)。從「酷,我可以少寫一點程式」的角度來看是很棒,但 Framework 安全性成為隱憂。從資安的角度,這些 Framework 大部分都是堪用而已,安全性不是重點。作者呼籲大家應該了解 Framework 的內容和功能,制定相應的安全計畫。

5. 額外開啟的服務( Extra services enabled )
通常出現在第三方套件,但也可能出現在客製化應用程式。常見的情境是,一群有相同需求的顧客懇求你解決類似的問題,於是你以一套通用的應用程式加上客製化解決問題。通用的應用程式擁有全功能以滿足全部人,而顧客只需要其中30%的功能,卻不小心開啟了 100%的功能。作者認為有良心的應用程式應具備,「輕鬆關閉某些功能」、「輕鬆確認我真的關閉某些功能」這兩個特性。

以上,作者淺薄的意見提供給大家用以減少攻擊進入點的策略。一言以蔽之,簡單就好!

參考資料
http://en.wikipedia.org/wiki/Attack_surface
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
http://www.jtmelton.com/2012/03/29/year-of-security-for-java-week-13-know-your-frameworks/

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

留言

這個網誌中的熱門文章

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

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

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