盡管 Facebook 近期被不重視用戶隱私保護等話題纏身,特別是其原本可以避免很多不必要的錯誤。但是,就其數(shù)十億用戶和支持其用戶的龐大數(shù)據(jù)平臺來說,想要在一億行巨量代碼庫中發(fā)現(xiàn)每一個缺陷并不容易。
為了在巨量代碼庫中準(zhǔn)確定位問題,F(xiàn)acebook 的工程師四年前開始構(gòu)建定制評估工具。這個工具不僅可以檢查已知類型的錯誤,還可以在 30 分鐘內(nèi)掃描完整個代碼庫,幫助工程師在變更、修改或增加主要功能之前發(fā)現(xiàn)缺陷,將缺陷扼殺在搖籃中。
該工具名為 Zoncolan,是一個“靜態(tài)分析”工具,可以映射代碼庫的行為和功能,并通過不同路徑中相互作用查找隱藏在各個分支中的潛在問題。在如此大規(guī)模代碼庫中使用人工手動審查無窮無盡的代碼變更,并做代碼審核是不切實際的。靜態(tài)級別分析非常合適,因為它對不良架構(gòu)和缺陷代碼行為設(shè)定了“規(guī)則”,并自動掃描系統(tǒng)中這些類別的錯誤。一旦出現(xiàn),馬上抓住。理想情況下,該系統(tǒng)不僅可以標(biāo)注潛在問題,還可以為工程師提供實時反饋幫助他們學(xué)會如何避免踏入陷阱。
“每當(dāng)工程師要對我們的代碼庫進行改動時,Zoncolan 就會開始在后臺運行,(對疑似缺陷)標(biāo)記之后,并同時直接報告給軟件工程師本人,也同時報告給當(dāng)值的安全工程師,”Facebook 安全工程經(jīng)理 Pieter Hooimeijer 說道, “因此,它每天運行數(shù)千次,在 2018 年中就發(fā)現(xiàn)了 1,500 個問題。”
靜態(tài)分析工具本身并不會發(fā)現(xiàn)新的漏洞,只是根據(jù)被設(shè)定的規(guī)則來捕捉事物。 但是,這些工具不僅可以不厭其煩的一次又一次捕獲相同的錯誤,還可以根據(jù)這些缺陷深入挖掘出一個新的規(guī)則。
靜態(tài)代碼分析工具對于 Facebook 來說是獨一無二的,這個工具被廣泛應(yīng)用于安全組以及應(yīng)用開發(fā)中。但是 Hooimeijer 指出,因為它是為了全面映射 Facebook 的特定代碼庫而量身定制的,因此 Zoncolan 特別有效。Hooimeijer 表示之前 Facebook 在 3 月份被披露以明文形式存儲數(shù)億用戶密碼后,公司就對該漏洞設(shè)置了規(guī)則,讓 Zoncolan 根據(jù)規(guī)則掃描潛在問題。
Hooimeijer 表示:“四年前,我們不得不爭搶一群安全工程師,并開始手動梳理代碼尋找問題。現(xiàn)在,我們使用 Zoncolan 來確保代碼庫中沒有其他類似性質(zhì)的問題。在這種情況下,我們創(chuàng)建了新的規(guī)則,在實踐中發(fā)現(xiàn)了類似問題。”擴展 Zoncolan 檢測能力的新規(guī)則的靈感來自 Facebook 內(nèi)部代碼庫,也包括該公司的 Bug 賞金計劃。
Zoncolan 采用了一種特別定制的方法來尋找安全漏洞,而不是更常用的尋找各種設(shè)計和性能缺陷的靜態(tài)分析方法,關(guān)注可識別的數(shù)據(jù)流及設(shè)計模式,作為減少靜態(tài)分析誤報的一種方法。不過,F(xiàn)acebook 并不是唯一一家有自己定制開發(fā)的代碼檢查工具的公司,谷歌也有自己的定制靜態(tài)分析工具,評估該公司龐大的 20 億行代碼庫。
“任何擁有良好軟件開發(fā)生命周期的公司都有源代碼分析器,以確保他們的產(chǎn)品在投入前掃清一切缺陷”企業(yè)危機響應(yīng)咨詢服務(wù)公司 TrustedSec 的首席執(zhí)行官 David Kennedy 說, “大多數(shù)成熟的組織都使用靜態(tài)代碼分析器,因為它最有價值的地方就是可以識別缺陷,當(dāng)然它并不涵蓋所有內(nèi)容。”
Kennedy 指出,像 Zoncolan 這樣的工具不會發(fā)現(xiàn)權(quán)限泄露,這導(dǎo)致 Facebook 在 9 月份遭遇 3000 萬賬戶數(shù)據(jù)泄露問題 ,源代碼分析器不會發(fā)現(xiàn)這一點。Facebook 過去幾年中最嚴重的問題是包括與意外代碼錯誤無關(guān)的基于用戶隱私權(quán)的問題。
Hooimeijer 回應(yīng) Zoncolan 不是完美的解決方案。但他表示,鑒于 Facebook 在該工具上所做的投資,他希望該工具的某個版本有朝一日可以開源,供其他組織使用。不過,Zoncolan 在 Facebook 代碼中如此有效地捕獲 bug 是基于 Facebook 內(nèi)部開發(fā)的,如果要在 Facebook 之外的環(huán)境中運行,還需要增強靈活性,適配更多環(huán)境。
實現(xiàn)這一目標(biāo)的第一步是 Facebook 在 2018 年發(fā)布了一個名為 Pyre 的代碼檢查器,是為編程語言 Python 發(fā)布的開源代碼檢查工具。該工具沒有 Zoncolan 的范圍廣、功能強,但是 Facebook 準(zhǔn)備開源的一個類型范例。
“我們已經(jīng)投入了大量精力來構(gòu)建這個,這個工具就是 Python 的 Zoncolan。”Hooimeijer 表示, “我們也希望在 Facebook 以外分享精彩的好工具。”安全社區(qū)將永遠歡迎高質(zhì)量的開源工具。但是,F(xiàn)acebook 需要不斷磨練每一個防守,以便在安全問題滾雪球之前抓住,進而保障用戶安全。
原文鏈接:《HOW FACEBOOK CATCHES BUGS IN ITS 100 MILLION LINES OF CODE》






