從測試到上線
大部分的應用程式在部署階段的腳步都顯得比較倉促,原因在於先前的設計與實作階段,可能已經拖延產品出貨的時間,導致上線時而疏忽了安全的重要性。
但是要知道,上線之後才是真正安全測試的開始,而這階段的安全測試工作,已很少有讓人進行程式修補的空間。不像程式撰寫後,還有一定的測試空間針對安全問題加以補綴。
例如,前幾週的微軟原始碼洩漏事件。其實微軟的安全設計與測試工作已做得很好,問題在於原始碼下載至開發者的電腦之後,能阻止原始碼外洩的,只有開發者本身的良心而已。至於若是開發者的電腦遭遇入侵事件而導致原始碼外洩,這也不是微軟在現下有能力保障的。
應用程式的部署工作,其實遠比想像中麻煩。因為在應用程式設計與實行的階段,開發者只要顧及應用程式本身。然而,應用程式上線的過程中,不只要考量應用程式,還得兼顧應用程式所賴以執行的網路服務 (例如 IIS、Apache),以及所使用的作業系統 (Windows、Unix)。如果再牽扯入不同通訊平台(例如,還需要無線網路環境與GPRS 等),其複雜性就會相對提高。
在程式部署階段,主要的安全問題有兩大類:第一類是應用程式本身的「衛生處理」(sanitization),這環節的安全問題通常較為輕微。第二類屬於基礎架構的安全層次,即是泛指應用程式所依賴的網路服務、作業系統與網路架構,後者所涉及的安全問題比較嚴重。
應用程式「清潔」
在第一類的問題,通常是應用程式自上一階段的測試環境轉移到正式上線的環境時,程式開發人員並未將先前測試使用的程式碼內的註解清除,可能遺留下的資訊包括:內部網路 (測試用)的 IP 或是網路部署、應用程式所使用的資料庫網路位置,甚至還有如使用帳號、密碼等敏感度高的資料。
雖然這類型的資料對於應用程式本身的安全性,通常不會出現大問題,但是,倘若有其他安全漏洞,上述資訊可能就會成為「凶器」,幫助攻擊者進行更深入核心的惡意攻擊。
基礎架構的安全
至於第二類-應用程式基礎架構的安全,其問題本身不在應用程式內,而是程式所賴以執行的各種基礎架構。舉例來說,如果執行應用程式的伺服器隱含安全問題 (例如 IIS), 或是作業系統存有安全漏洞,那麼應用程式本身的安全性就有可能遭受破壞。同理可證,如果應用程式所用的網路架構安全行不足,也無法確保應用程式立於不敗之地。
曾經有某知名網路郵件服務提供者的防火牆設定,因為不明原因容許 source port 20 的攻擊方式 (模擬 FTP 傳送資料時的方式),接連兩年的安全稽核都發現同樣的問題,自然難無法保障應用程式的安全無虞。這一類的安全問題通常對整個企業的傷害也是最大。
因應之道
將問題分門別類之後,下一步就是了解如何自保。在應用程式清潔問題部分,一開始就要求開發人員在開發階段時,以預定的格式撰寫程式註解,等到進入部署階段時,就可使用另一支工具程式自動消除具安全敏感性的資料。
至於基礎架構的安全問題,要解決通常比較困難一些。尤其每一天平均都會出現十多個新的安全弱點,根本是防不勝防。一般的作法多是為應用程式伺服器所需的作業系統與其他服務先行設定一個「基線」(baseline image),「基線」意指不管是作業系統或是伺服器都已具備最新的安全補丁,確定之後再一步步執行應用程式安裝、測試、正式上線等步驟。
之後,企業必須定時更新最新的安全補丁,拉出最新的「基線」,然後在測試環境中完成測試後,就可上線替補舊的基線。在新基線替補舊基線之前,需要依靠管理者的警覺性,適度執行監測與阻擋等傳統安全措施,以保護該系統的安全防線不受破壞。
從設計、實作、測試到部署上線,在一個應用程式的開發流程中,每個環節都可能埋下安全炸彈,不可諱言,要百分之百消除安全問題可能是奢求。但是,若能事先妥善規劃開發流程中的每一步該怎麼走,並且確實執行,絕對可以消除十之八九的安全問題。
下一周,我們將繼續討論應用程式安全的最後一個步驟,也就是上線之後的運作與維護階段,另外,也會納入網路應用程式中客戶端的安全問題。

