Facebook 的隱私和安全跟蹤記錄算不上好,尤其是考慮到其很多重大過失都是本可避免的情況下。但要守護數億用戶和巨大的平臺,要從該公司上億行代碼中找出每個漏洞真不是件容易的事。因此,Facebook 的工程師從四年前就開始構建定制評估工具,不僅檢查已知漏洞類型,還可在 30 分鐘內完全掃描整個代碼庫,幫助工程師在正式上線前找出各種調整、修改或主要新功能中的問題。
該平臺名為 Zoncolan,是一款靜態分析工具,能夠映射代碼庫行為與函數,查找單個分支及程序不同路徑互操作中的潛在問題。這么大規模的代碼庫,純靠人工審查那無盡的代碼修改是不現實的。但靜態分析伸縮性絕佳,因為其能設置關于不良架構或代碼行為的 “規則”,自動掃描系統以找出此類漏洞。堪稱一勞永逸。理想狀態下,該系統不僅標記潛在問題,還能為工程師提供實時反饋,幫助他們學習如何消除隱患。
Facebook 安全工程經理 Pieter Hooimeijer 稱:工程師每提交一次代碼庫修改,Zoncolan 都會在后臺執行掃描,掃描結果要么直接報告給提交修改的工程師,要么標記問題并報告給當班安全工程師。所以,基本上該系統每天都會執行數千次,2018 年里共發現了約 1,500 個問題。
這是迄今為止已知暴露識別中最有價值的東西。但仍未覆蓋全部。
——David Kennedy,TrustedSec
靜態分析工具本身并不能發現新型漏洞,只能根據已設定規則捕獲已知漏洞。但他們在持續捕獲同類型錯誤上堪稱盡職盡責老黃牛,還能從單條新規則回溯查找出一系列漏洞。而且不止 Facebook 在用靜態分析,安全社區和更廣大的開發產業也廣泛使用靜態分析工具。但 Hooimeijer 指出,Zoncolan 因定制用于全面映射 Facebook 特定代碼而尤其有效。Hooimeijer 稱,3 月份 Facebook 披露自身意外明文存儲了數億用戶密碼,在此之前,該公司已向 Zoncolan 饋送了一條關于該漏洞的規則,掃描代碼庫以查找潛在類似問題。還真找到了一些。
關于此事件,Hooimeijer 評論道:
要是發生在四年前,我們就不得不馬上組織一大批安全工程師,人工梳理代碼,查找其他問題。現在,我們用 Zoncolan 確保代碼庫里沒有其他類似問題。在此事件中,我們創建的新規則切實找出了類似問題。
其中,擴展了 Zoncolan 檢測能力的新規則,源自 Facebook 內部資源,包括該公司的漏洞獎勵項目。
與查找普通設計及性能漏洞的通用靜態分析工具不同,Zoncolan 擁有專為追捕安全漏洞而特別定制的方法。該工具還專注可識別數據流及數據模式,作為削減靜態分析典型誤報的一種方式。另外,Facebook 按自己意愿定制系統的做法也不是僅此一家;谷歌也有自己的定制靜態分析工具,評估本公司那巨大的 20 億行代碼庫。
企業事件響應咨詢公司 TrustedSec 首席執行官 David Kennedy 稱,擁有良好軟件開發生命周期的公司都有源代碼分析器,確保能夠在投入生產之前篩查出暴露。大多數成熟的公司都會利用靜態代碼分析器,因為這是目前為止在已知暴露識別中最有價值的。但靜態代碼分析器仍未覆蓋全部。
Kennedy 指出,Zoncolan 這樣的工具無法發現導致 9 月 Facebook 3,000 萬賬戶數據泄露的權限問題。
源代碼分析器發現不了這樣的問題。
過去幾年來 Facebook 曝出的很多重大問題都是策略性隱私問題,與偶然的代碼漏洞無關。
Hooimeijer 也認為 Zoncolan 不是萬靈丹。但他表示,鑒于 Facebook 對該平臺的投入,希望此工具的某個版本終將開源,供其他公司企業使用。令 Zoncolan 可高效搜尋 Facebook 代碼漏洞的特性,可以通用化,用于打造適用面更廣的工具。但想要適用 Facebook 之外的多樣化環境,開源版本還需置入靈活性。
Facebook 于 2018 年開源的 Python 代碼檢查器 Pyre,就是邁向此目標的一步。該工具不具備 Zoncolan 的完整視野和安全焦點,但確實可以代表 Facebook 計劃發布的那類資源。
我們為此投入良多,其軌跡就是:Python 版 Zoncolan。我們想在 Facebook 之外分享其令人驚嘆的能力。
安全社區總是歡迎更多高品質開源工具涌現的。但 Facebook 先得動用這種防御手段捕獲用戶安全問題。
Pyre地址:
https://pyre-check.org/