國家保密局網(wǎng)站>>保密科技

開源軟件漏洞安全風險分析

2020年11月27日    來源:國家保密科技測評中心【字體: 打印

一、引言

2020年2月,國家信息安全漏洞共享平臺(CNVD ) 發(fā)布了關于Apache Tomcat 存在文件包含漏洞的公告,該漏洞可以造成Tomcat上所有webapp目錄下的重要配置文件或源代碼等敏感數(shù)據(jù)的泄露,若同時存在文件上傳功能,則可以進一步實現(xiàn)遠程代碼執(zhí)行(RCE),直接控制服務器。

Tomcat是Apache軟件基金會下的一個重要的開源軟件,在全球范圍內被廣泛使用,根據(jù)FOFA系統(tǒng)最新的測繪數(shù)據(jù)顯示全球范圍內有將近300萬個Tomcat服務對外開放,根據(jù)騰訊T-Sec系統(tǒng)提供的數(shù)據(jù)顯示,國內受影響的采用AJP協(xié)議的IP數(shù)量約是4萬個。近年來,隨著軟件開源化趨勢成為主流,開源軟件已經(jīng)成為軟件供應鏈的重要環(huán)節(jié),是軟件生態(tài)不可或缺的組成部分。然而,一旦具有大規(guī)模用戶基礎的開源軟件存在安全漏洞,勢必會影響整個軟件行業(yè)的安全。

二、開源軟件認識誤區(qū)

(一)開源軟件等于免費軟件

開源軟件指源代碼可以被公眾使用的軟件,源代碼公開是開源軟件的主要特點之一。雖然大部分的開源軟件可以免費獲得,但是開源軟件并不全是免費軟件,仍有大量的開源軟件對用戶是收費的。

開源軟件要求軟件發(fā)行時附帶源代碼,但并不意味著它就一定是免費的;同樣免費軟件也只是軟件免費提供給用戶使用,但并不一定是開源的。

(二)開源軟件可以隨便使用

每一個開源軟件都需要包含開源許可證去規(guī)定開源軟件的使用范圍和權利義務,開源軟件并非完全沒有限制可以隨意使用,其最基本的限制就是開源軟件強制任何使用和修改該軟件的人承認發(fā)起人的著作權和所有參與人的貢獻。

開源軟件的許可證比較繁多而且復雜,經(jīng)常遇到的開源許可證主要有GPL和BSD兩種。如果不恰當?shù)厥褂瞄_源軟件,未能充分理解和研究許可證規(guī)定的權利和義務,往往會埋下知識產(chǎn)權的風險隱患,甚至會被強制要求公開自家產(chǎn)品的私有代碼。

(三)開源軟件比閉源軟件安全

開源不能作為判定軟件產(chǎn)品安全與否的指標,開源并不意味著一定安全。事實上,近年來開源軟件的安全性事件頻發(fā),也打破了人們傳統(tǒng)觀念中的“開源等于安全”的認知。根據(jù)Snyk公司發(fā)布的《2019 年開源安全現(xiàn)狀調查報告》顯示,“過去兩年內應用程序的漏洞數(shù)量增長了88%,僅2018年包管理器(NPM )的漏洞數(shù)量就增長了47%”。

開源軟件具有開放、共同參與、自由傳播等特性,一方面由于開發(fā)者自身安全意識和技術水平不足容易產(chǎn)生軟件漏洞,另一方面也無法避免惡意人員向開源軟件注入木馬程序進行軟件供應鏈攻擊等安全風險引入行為。

三、開源軟件使用現(xiàn)狀

(一)繞不開、躲不掉的軟件開源趨勢

當前,軟件代碼全部自行開發(fā)的公司幾乎沒有,大量企業(yè)通過使用免費的開源軟件創(chuàng)建商用軟件產(chǎn)品。根據(jù)安全與能力管理開源平臺White Source發(fā)布的《開源漏洞管理現(xiàn)狀》,只有極少數(shù)開發(fā)人員由于公司的政策要求而沒有使用開源軟件,96.8%的開發(fā)人員依賴于開源軟件。用戶往往以為自己購買的是商業(yè)軟件,但實際上很多商業(yè)軟件是基于開源做二次開發(fā)后以閉源形式提供給用戶的。

另據(jù)Gartner的調查顯示,99%的組織在其信息系統(tǒng)中使用了開源軟件,如圖1所示。Sonatype公司對3000家企業(yè)的開源軟件使用情況展開過調查,結果表明每年每家企業(yè)平均下載5000多個開源軟件。隨著開源技術快速形成生態(tài),企業(yè)用戶引入開源軟件已成大勢所趨,繞不開、躲不掉。

                           

圖1 開源組件的使用頻率

(二)難以分辨商業(yè)產(chǎn)品中的開源成分

從軟件產(chǎn)品的使用者角度來看,企業(yè)購買的很多商業(yè)軟件往往是開源軟件的商業(yè)版或者發(fā)行版。如果用戶沒有明確地提出要求,商業(yè)軟件供應商一般不會說明其產(chǎn)品中是否涉及開源組件,甚至對用戶宣稱是完全自主研發(fā),導致用戶的信息系統(tǒng)中被動地引入了開源軟件。例如,號稱自主開發(fā)的某某瀏覽器,經(jīng)過專業(yè)測試后卻發(fā)現(xiàn)其內核是開源軟件Chrome。

從軟件產(chǎn)品供應商的角度來看,當前的軟件開發(fā)模式中包管理器替程序員做了很多他并沒有意識到的決定,使得商業(yè)軟件中引入開源軟件的數(shù)量難以做到完全準確的統(tǒng)計。更有甚者,部分企業(yè)在軟件開發(fā)過程中,對開源軟件的使用比較隨意,管理者常常不清楚自己的團隊在開發(fā)過程中使用了哪些開源軟件,就連程序員自己也無法完整地列出開源軟件使用清單。等到商業(yè)軟件流轉到用戶手中后,系統(tǒng)的運維人員更是無法完全知曉正在運行的軟件產(chǎn)品中是否包含了開源軟件,包含了哪些開源軟件,這些開源軟件是否存在安全漏洞等,這就無形中給企業(yè)的信息系統(tǒng)帶去了安全風險。

(三)誰該站岀來為開源軟件安全負責

隨著大型軟件開發(fā)過程中,開源組件的占比越來越高,加之軟件開發(fā)人員往往只關注自己開發(fā)的那部分代碼的安全性,忽視了采用的開源組件的安全質量,最終導致成型軟件產(chǎn)品的系統(tǒng)安全問題越來越多。根據(jù)Snyk公司的調查報告,81 %的用戶認為開發(fā)者應負責開源軟件的安全性,如圖2所示。

圖2 開發(fā)者該為開源軟件安全負責

大部分開源軟件的使用者認為軟件代碼經(jīng)過了很多機構和人員的測試和審查。然而,現(xiàn)實情況是并沒有多少人對開源軟件的代碼安全進行測試,“心臟滴血”漏洞就是最好的例證。軟件供應商對外售賣的商業(yè)軟件中采用了開源軟件,但安全責任并未從開源代碼提供者轉移到軟件供應商,導致最終還是由用戶承擔了軟件漏洞的風險。

四、開源軟件漏洞安全分析

由于開源軟件使用與獲取的便利性,加之部分軟件開發(fā)人員的安全意識淡薄,可能導致忽略開源軟件帶來的風險?傮w來看,開源軟件存在的安全問題比較嚴重,安全漏洞是主要的問題,軟件供應鏈攻擊呈現(xiàn)上升趨勢,同時缺少系統(tǒng)的安全審查機制。

(一)開源項目維護者的安全意識和技術能力參差不齊

Snyk公司通過掃描數(shù)以百萬計的Github代碼庫和程序包和對超過500個開源項目的維護者進行調查發(fā)現(xiàn):只有8% 的開源項目維護者自認為有較高的信息安全技術,接近半數(shù)的開源項目維護者從來不審計代碼,只有11%的維護者能做到每季度審核代碼。另據(jù)Linux基金會發(fā)布的《開源軟件供應鏈安全報告》顯示,大量開發(fā)人員在開發(fā)軟件時并未遵守應用程序安全最佳實踐。開源項目維護者對代碼安全質量重視不夠和技術能力水平不足,是當前造成開源軟件安全漏洞的主要原因。

奇安信代碼安全實驗室發(fā)起“開源項目檢測計劃”,通過對3000余款使用比較廣泛的開源項目進行檢測,發(fā)現(xiàn)所有檢測項目的總體平均缺陷密度為14.22/ KLOC,高危缺陷密度為0.72/KLOC。路徑遍歷、空指針相關、密碼管理、跨站腳本XSS、注入類缺陷、XML外部實體注入、緩沖區(qū)溢出、資源管理、HTTP響應截斷、日志偽造等是開源軟件主要的安全風險。

2019年,Unit42安全團隊分析了 24000多個公開的GitHub開源項目,共識別出2328個硬編碼密碼,2464個API密鑰和1998個OAuth令牌。對于關系社會安全穩(wěn)定的企業(yè)單位,如銀行等金融機構,信息系統(tǒng)中如果采用了上述的開源組件將會對社會經(jīng)濟安全造成惡劣的影響。圖3中的這段代碼[5]來自一個開源系統(tǒng),它硬編碼了用于支付的私鑰,通過反編譯可以直接查看相關配置數(shù)據(jù)。

在密鑰管理中最常見的錯誤,就是將密鑰硬編碼在代碼里。一旦攻擊者獲得密鑰,再通過審計分析支付系統(tǒng)的加密算法就可以破譯所有的加密數(shù)據(jù)。

functiiontoSubmit( $ pay m ent) I

Smerld- St hi s->getConf( $ pay montCM_Ord c rldl/memb or .id'); 賬戶

SpKey = S th is->getConKSp ay me nt[' M _Orderl di.' PmatcKcyR}:

Skey = SpKey=r? 'afsvq2mqwc7j0ivukqexrzdQjqBhr:$p Key;

Sret.uri = $this-^>callhackUrl:

Sserver.url - $this^>serverCallbackUrl;

圖3 用于支付的密鑰被硬編碼在源代碼中

 

(二)越來越多的黑客組織開始盯上開源軟件

軟件生產(chǎn)過程中,代碼復用程度越來越高,各種開發(fā)包、核心庫的應用越來越廣泛。很多黑客組織也意識到了這一點,逐漸把目光放在了開源軟件上,利用開源代碼植入后門。這些代碼的復用度越高,其中的后門影響范圍就越廣,從而實現(xiàn)對軟件供應鏈上游的攻擊。

2019年8月,Webmin被爆存在高風險遠程命令執(zhí)行漏洞,根據(jù)Webmin開發(fā)人員的說法,該漏洞不是編碼錯誤的結果,而是“惡意代碼注入受損的構建基礎架構中”導致的。Webmin是一個用于管理Linux和UNIX系統(tǒng)的基于Web的開源軟件,互聯(lián)網(wǎng)上大約有13萬臺機器使用Webmin。根據(jù)Shodan搜索引擎收集到的統(tǒng)計數(shù)據(jù)顯示,有近10萬臺服務器曾運行過存在“后門代碼”版本的Webmin軟件,對整個互聯(lián)網(wǎng)安全造成了巨大的影響。

(三)開源軟件缺少系統(tǒng)的代碼安全審查機制

美國最先認識到開源軟件安全問題的重要性,早在2006年美國國土安全部就開展過“開源軟件代碼測試計劃”,對大量開源軟件進行安全隱患的篩選和加固。

根據(jù)Snyk公司的報告顯示,37%的開源開發(fā)者在持續(xù)集成(CI )期間沒有實施任何類型的安全測試,54 %的開發(fā)者沒有對Docker鏡像進行任何的安全測試。

開源代碼中不斷發(fā)現(xiàn)新的安全漏洞,而很多項目沒有查找并修復漏洞的響應機制。開源項目的安全記錄方式也沒有明確的標準可以遵循,GitHub上排名前40 萬的公共代碼庫中,僅2.4%的項目有安全文檔。

開源軟件在實際的流通過程中,各個環(huán)節(jié)間缺乏系統(tǒng)的安全審查機制,部分企業(yè)內部也缺少必要的安全檢測要求和規(guī)范,導致一旦底層開源組件出現(xiàn)安全漏洞,這些問題組件將傳染給哪些商業(yè)產(chǎn)品、影響哪些業(yè)務領域,沒人能給出一個準確的答案。

五、風險控制措施

(一)國家層面組織開展開源軟件源代碼檢測工程

隨著開源趨勢的不可逆以及開源軟件在商業(yè)軟件中占的比重越來越高,開源軟件儼然已經(jīng)成為軟件開發(fā)的關鍵基礎設施,因此開源軟件的安全問題應該上升到國家安全的角度來對待。

建議國家相關部門組織有業(yè)務基礎的科研機構開展開源軟件源代碼檢測工程,并將檢測的成果以一種安全可控的方式向商業(yè)軟件制造商及關鍵崗位的企業(yè)共享,盡可能降低開源軟件漏洞對社會各行各業(yè)的影響。

(二)企業(yè)層面建設開源軟件安全治理體系

企業(yè)應該建立開源軟件安全治理體系,明確開源軟件使用的安全準入條件,從軟件開發(fā)階段就建立開源軟件使用的統(tǒng)一策略,實現(xiàn)開源軟件引入和使用的標準化、規(guī)范化和合規(guī)化。

對于明確需要引入的開源軟件,在加強版本控制的基礎上,一方面開展安全風險評估檢測;另一方面持續(xù)跟蹤相關的漏洞情報,時刻提防軟件供應鏈攻擊。

(三)用戶側建立軟件安全滲透測試機制

從已經(jīng)發(fā)生的軟件供應鏈攻擊案例來看,非常有必要開展軟件上線前的滲透檢測。通過采用良性的攻防滲透的方法、思路和手段,及時發(fā)現(xiàn)軟件系統(tǒng)中存在的安全漏洞和隱患,降低新軟件上線給系統(tǒng)帶來的風險。

企業(yè)在開展軟件采購時,應向供應商明確要求提供軟件中包含的開源組件,“用了什么,什么版本,軟件來源”,并在驗收時進行細致核查。

(四)檢測機構加強對安全產(chǎn)品中開源組件的檢測

信息安全產(chǎn)品是重要信息系統(tǒng)安全防護的重要組成部分,其自身的安全性將影響重要信息系統(tǒng)的安全。檢測機構應要求軟件供應商準確提供產(chǎn)品中包含的開源組件等信息,并針對開源組件開展專門的安全檢測。這樣一旦某個開源軟件被爆出重大的安全漏洞,產(chǎn)品檢測機構可以及時迅速地發(fā)布安全預警,并要求相關產(chǎn)品廠商盡快開展修復,甚至對修補不力的產(chǎn)品予以禁用處置。

六、結語

幾乎每個商業(yè)軟件都使用開源軟件節(jié)省開發(fā)時間、降低公司成本、避免重復造車輪,但軟件公司對這些代碼的品質和來源卻未必都給予了足夠的關注和重視。

開源軟件已經(jīng)成為網(wǎng)絡空間的重要基礎設施,應積極開展開源軟件源代碼檢測工程,推動建設開源軟件安全治理體系,形成軟件安全滲透測試的長效機制。

 

(原載于《保密科學技術》雜志2020年2月刊)