之前我提到很多關於更新的議題,包含作業系統、應用程式等,如果沒有做好更新的動作,往往就提供了惡意份子最佳的可趁之機。現在作業系統幾乎都有自動更新的功能,也有越來越多的應用程式開始具備自動更新的能力。即使是沒有自動更新功能的應用程式,我們也可以透過相關工具 (如 Secunia PSI) 來達到通知、甚至是更新的功能。
除了上述的東西需要更新,還有一個很重要的東西一直處於一個被遺忘的角落裡,那就是軟體所引用的函式庫或框架。透過函式庫與框架,可以讓軟體開發人員專心在主要的業務功能上,加快開發的速度。而在 Open Source 精神的引領下,各式各樣的函式庫與應用框架推陳出新,更讓開發人員瞬間擁有許多好用的利器。但是水能載舟、亦能覆舟。這些函式庫與框架,往往在被引入系統後,就遭到開發者的刻意忽略,而不再進行相關更新。很可惜的是,雖然這類函式庫與框架的寫作人員通常擁有相當不錯的技術能力,但是仙人打鼓有時錯,這些函式庫與框架同樣會有安全性的問題。
Apsect Security, Inc 前一陣子發表了一份與 Sonatype 所共同研究的報告 (The Unforunate Reality of Insecure Libraries),內容是針對目前常見的 Java 函式庫與框架進行相關的使用情況與安全性分析。在此份研究報告中包含下列重點:
- 在所有取樣分析的 31 個套件的 1261 個版本中,有 37% 存在已知的安全漏洞。
- 在所觀察到的 1.13 億次下載中,共有 0.298 億次 (26%) 的下載內容是包含已知的安全漏洞。
- 最常被下載的套件包含 GWT, Xerces, Spring MVC 與 Struts 1.x (沒錯,是 1.x)。
- 諷刺的是,安全相關的套件通常反而包含更多已知的安全漏洞。對此,報告中認為可能的原因之一是這類套件通常會受到較多安全專家的檢視,因此讓安全漏洞難以遁形。
- 如果以 Aspect Security, Inc 輔導客戶的經驗來看,這些 Open Source 的套件仍有許多未被發現的安全漏洞。
- 套件的安全與否跟之前版本的安全漏洞數量沒有太大的關聯。
- 因為通常一個系統會包含多個 Open Source 套件,因此大多數的系統至少包含一個以上的已知安全漏洞。而大型公司的系統因為功能複雜,導致包含的套件也越多,所以包含已知安全漏洞的可能性將相對提高。
嚴格來說,系統存在安全漏洞並不表示就可以被惡意份子成功地加以利用並造成傷害,但是用這種說法來說服自己確實是鴕鳥了點。當然,這些狀況絕對不是 Java 獨有,使用其他語言所開發的系統也存在著類似的問題。
前面我提到開發者刻意忽略系統中所引用套件的更新,其實是一種推卸責任的說法。現實狀況是,這類套件的更新資訊散落各處,要能夠有效地加以追蹤本來就是一個非常困難的事情。而版本之間的相容性,更造成了開發者不敢 (心理因素居大)、甚至不能更新的窘境。更有甚者,有些開發者會針對這些 Open Source 套件進行內部的修改 (修 Bug、提昇效率、或是功能延伸,理由不一而足),如此一來,更新版本將是一個浩大的功能,因此最後只好一直守著舊的版本。而對於那些已經進入維護階段的系統,我相信更是不會有開發者主動去更新其所引用的套件。因此,這類問題不能丟給開發者自由心證,組織必須制定一個明確的管理辦法加以因應。對此,Aspect Security 在報告中提出了下列建議:
- 列出目前系統所使用的套件。
- 仔細審核這些套件 (的原始碼)。
- 限制使用未經授權的套件版本。
- 關注套件的更新資訊,並適時予以更新。
目前市面上也有一些工具提供上述的功能,但是建置費用與後續的維護成本可能並不是一般企業所能支付的。因此,在此先祝各位好運了。