2019年9月13日 星期五

資安開源工具:神兵利器還是雙面利刃? (一)



企業營運的資訊世界裡,資訊安全是一項絕對不能忽視的領域。

然而,在你我所知的現實情況,資安是一場軍備競賽,沒有經費就沒有武器,沒有武器就無法對抗來自虛擬世界中各種猛烈砲火的攻勢。





經費困境

身為一個企業 IT 人員,相信你都會經歷過一段刻骨銘心的歷程:千辛萬苦終於找尋到解決問題的絕佳方案,製作了自認無敵的提案企劃,幻想著接下來可以應付所有資安難題,從此高枕無憂...


事情卻沒有想像中的美好



在這個世界上,從來不缺能夠解決問題的產品,各方高手雲集,驚人產品層出不窮,所以我們的問題並不在找不到適合的產品,而是更為實際的問題。





相較資安,經費的問題更令你頭痛



在這種情勢下,我們還有什麼方法可以突破困境,我們還有沒有方法逃出生天,扭轉 IT 頹勢?還是從此束手就擒?

是的,開源軟體正是另一扇門,開啟這扇門以後,除了有機會協助解決經費不足的困境,還會發現另一片新天地,擁有無限的可能。





開源軟體是另一扇門



但是採用了開源軟體有沒有想像中的美好呢?有聽說比較不安全,是不是真的呢?

讓我們繼續看下去。







刻版印象

我們先以二分法來看看,支持與反對者的說法。



看的見vs看不見

  • 迷思一: 
    開源軟體的程式碼公開給大家使用與觀看,如果裡面有漏洞,馬上會被大家發現以及利用;閉源軟體的程式碼經過編譯甚至是混淆、加殼等保護,很難發現漏洞並加以利用。






社群維護vs企業維護

  • 迷思二:
    開源軟體大多是由社群維護,都是業餘人士或利用下班時間開發軟體;不像閉源軟體大都是由企業派專業人士專責維護,品質比較穩定。 





修復較慢vs修復較快

  • 迷思三:
    承上,由於開源軟體大多社群維護,所以修復漏洞的速度比較慢,無法像有企業專責人員維護的軟體較快修復。

事實上真的是如此嗎?其實大都是刻板印象帶來的影響。







安全討論

我們從開源軟體的面向來看,大部份採用開源軟體的情況下會列出幾項優點:

  • 節約支出成本
    採用開源軟體所需付出的軟體成本少,絕大部份情況下都可以忽略,省下來的軟體費用可以投資在硬體成本上,進行更精準的利用。
        
  • 避免重複開發
    開源軟體中有許多非常棒的元件、函式庫,身為開發者的你,採用開源套件不須從頭開發,省下許多時間快速開發,而且站在巨人的肩膀上能夠開發出更為強大的好產品。例如 OpenCV 就是做圖形辨識開發時經常運用的開源套件庫。
      
  • 介接擴充彈性
    大多數的開源軟體都會採用開放、標準格式,因此可以相當容易的與其它軟體互相介接與整合,檔案格式交換也不會有太多障礙。
      
  • 自己動手修改
    採用開源軟體一項令人興奮的優點,就是當你對所使用的軟體功能感到不足、有讓它可以更好的想法,或是發現有很棒的開源軟體但沒有繁體中文語系時,可以自己捲起袖子動手做,甚至將修改後的部份貢獻回到原專案合併,讓世界上更多人可以一起享受。


開源軟體有這麼棒的優點,那麼我們前面提到相較於閉源軟體的缺點,又該怎看?




原始碼公開透明發佈,所有人都可以看到完整的原始程式碼,好像缺點讓人一眼望穿,但這也意味著所有人都能一同尋找程式碼中的問題與漏洞。當被發現問題的時候,也能藉由公開平台提出回報,甚至自己動手修復並提出 Pull Request,讓專案變的更好。

而現在最大的平台 GitHub 上許多專案都結合了許多原始碼檢測的機制,當程式碼上傳之後,即會自動進行各種安全、品質檢測等等作業,開發者、貢獻者與使用者可以很容易的得知目前專案的安全行與品質如何,並且藉由這些自動化的機制,讓整個專案越來越好。




每個人都可以將喜愛的開源專案下載引用,但也曾聽聞所使用到的開源函式庫有問題,結果自己的產品也連帶俱備相同的漏洞,原本想要讓自己產品更好的美意反而變成了惡意。

其實,不管使用開源函式庫或是閉源函式庫,都要記得作好經常關注是否有版本更新的訊息,開發者可能會因為引用了好用的函式庫加速自己的軟體開發完成,但卻只記得要持續強化自己的產品程式碼,卻忘了要繼續跟進這個函式庫。






前面我們曾經提到,刻板印象是認為開源軟體遇到漏洞修復的速度較慢。其實有許多的開源軟體,他們修復漏洞的速度之快是令閉源軟體也瞠乎其後的。

例如開源儲存伺服器 FreeNAS 套件中的 Samba,在 2017/5/24 被揭露的 SambaCry 漏洞,在隔天 2017/5/25 即已宣佈完成修復 (合併來自 Samba 團隊的修正)。

另外,我深度使用的開源虛擬化伺服器平台 Proxmox VE 中的 LXC 容器套件,在 2019/2/11 被揭露 runC 漏洞的存在,影響層面甚至包括目前流行的 Docker,而 Proxmox VE 開發團隊在隔天 2019/2/12 立即合併來自 Debian 的修補檔,並且在當日同步推進 lxc-pve 套件版本號,更立即開放下載更新!





在許多人的使用經驗裡,開源軟體大多是安裝不易,即便安裝成功以後更新版本亦是一件令人害怕的高牆;確實有許多開源套件的更新程序並不是簡單的下一步再下一步就可以完成更新,但這並不代表全部。

我們從另一個角度來舉例,即便是閉源軟體,更新也可能會遇到問題,例如安裝更新檔後系統損毀,或者是因為沒有繼續購買維護合約,造成官方有釋出新版本卻無法取得,甚至是因為自己的版本較舊,如果要安裝最新的更新檔需要先付費升級至最新的大版本才能安裝,反而卡住了修補漏洞的機會。

而開源軟體陣營較沒有這種因為費用卡住更新的情況,同時,許多開源軟體採用的是 滾動式更新 (Rolling Update),讓我們不斷的往上更新,讓自己的系統隨時保持新版本,而不會因為忽然一段時間的一大包更新檔讓自己的系統安裝到瘋掉。

例如我所使用的開源網路裝置監視系統 LibreNMS,我甚至為他開啟了 每日更新 (Daily Update),當我每天早上一到公司就會發現系統已經自動更新,而且可能忽然多出了有趣的新功能。在這種機制下,極少在更新後系統故障,即便出現問題,他也會提供足夠的線索讓我手動修復它,不需動用重新安裝的備案。




在 2018 年中,發生了一起 Node.js 套件管理器 Npm 被放入偽裝為正常套件的惡意程式,引起許多人對開源平台的疑慮。

同樣的問題也不僅止於開源軟體,只要是類似的套件平台都有可能成為此類惡意行為的發生點。在這種情況下,開源軟體反而更能成為加快解除危機的助力,因為大部份的開源團隊都會積極處理此類的問題,而套件開放原始碼,更可以集眾人之力加快找到問題所在,以及平常就已經有在檢測公開開源套件的平台,也會加速惡意套件的被發現。