新聞分類
News list由工業(yè)控制系統(tǒng)構(gòu)建淺談開源軟件安全
時(shí)間:2021-01-13 17:03:00 來源:http://www.ricklacy.com/news541395.html
伴隨著開源軟件被各大企業(yè)、高校乃至于政府部門使用,人們對開源軟件的關(guān)注已逐漸從價(jià)格方面轉(zhuǎn)移到性能、安全性以及用戶體驗(yàn)上。根據(jù)美國新思科技公司(Synopsys)發(fā)布的《2020 年開源安全和風(fēng)險(xiǎn)分析》一文中提供的數(shù)據(jù),99%的代碼庫包含至少一個(gè)開源組件,其中開源代碼占所有代碼的70%,由此反映出使用開源代碼在軟件開發(fā)中占有較大比重,覆蓋的行業(yè)包括企業(yè)軟件、工業(yè)控制環(huán)境、醫(yī)療、金融等眾多領(lǐng)域。在審計(jì)的代碼庫中,75%的代碼包含具有已知安全漏洞的開源組件,而伴隨著開源軟件數(shù)量的不斷增加,無論是開源組件還是成品的開源軟件,含有漏洞的產(chǎn)品的占比將會持續(xù)增加。
一、開源軟件在工業(yè)領(lǐng)域的安全風(fēng)險(xiǎn)
近年來,開源軟件使用率逐漸增長,但其中的安全性問題也日益凸顯。主要的安全性問題表現(xiàn)為以下3個(gè)方面。一是使用過期和廢棄的開源代碼的行為非常普遍,并且使用易受攻擊開源組件的行為也比較普遍。二是開源代碼和軟件安全漏洞收集與管理分散,社區(qū)對安全漏洞管理沒有十分重視。根據(jù)White Source公司2 0 2 0年發(fā)布的《開源代碼脆弱性態(tài)勢》提供的數(shù)據(jù),2019年報(bào)告的開源軟件漏洞較上年增長了50%,超過85%的開源軟件漏洞已經(jīng)被公開并修復(fù),但只有84%的漏洞信息被收集在漏洞數(shù)據(jù)庫中。而當(dāng)下的開源軟件漏洞的信息廣泛而零散地分布在各大開源社區(qū)中,造成了漏洞信息收集困難。三是無意行為與惡意行為并存。開發(fā)者可能源于粗心的編程或使用“不安全的”開發(fā)工具開發(fā)開源項(xiàng)目并發(fā)布在社區(qū)內(nèi)。當(dāng)然也存在不法分子利用開源平臺注入惡意病毒、兜售漏洞信息或利用漏洞開發(fā)開源軟件或服務(wù)。這3方面不足以概括所有安全問題,但確實(shí)廣泛存在于工業(yè)領(lǐng)域中。
互聯(lián)網(wǎng)領(lǐng)域,例如郵件傳輸代理Sendmail、Web服務(wù)器Apache、操作系統(tǒng)Linux、數(shù)據(jù)庫系統(tǒng)MySQL和辦公軟件包OpenOffice,廣泛使用開源軟件與開源的應(yīng)用。除此之外,開源軟件甚至已經(jīng)成為部分技術(shù)服務(wù)公司的核心基礎(chǔ)架構(gòu),例如Amazon、Google 和Yahoo。顯然,開源軟件已經(jīng)是重要而關(guān)鍵的信息系統(tǒng),它需要安全保護(hù)以免受攻擊。其可用性與使用范圍的不斷提高使它吸引了黑客和其他對軟件漏洞感興趣的人。更加危險(xiǎn)的是,如果開源軟件不是在封閉的環(huán)境中使用,而是與其他系統(tǒng)和網(wǎng)絡(luò)互聯(lián),相關(guān)漏洞的后果將更加難以預(yù)料。在2017年9月,客戶信用評估機(jī)構(gòu)Equifax宣布了遭到網(wǎng)絡(luò)安全攻擊造成用戶數(shù)據(jù)泄露。該機(jī)構(gòu)使用Java Web應(yīng)用程序框架ApacheStruts建立他們的網(wǎng)站,而數(shù)據(jù)泄露是由Apache Struts 的漏洞(CVE- 2017-5638)引起的。開源Apache在20 17年和2020年接連曝出高危漏洞,分別出現(xiàn)在Apache的Tomcat組件和Spark組件中。對于前者,攻擊者可以構(gòu)造參數(shù)攻擊Tomcat AJP協(xié)議,以讀取服務(wù)器webapp下的任意文件,后者則由于Spark認(rèn)證機(jī)制存在缺陷,致使密鑰認(rèn)證失效,攻擊者可以通過構(gòu)造調(diào)用指令攻擊服務(wù)器并取得遠(yuǎn)程代碼執(zhí)行的權(quán)限。上述漏洞均被CNVD評為高危漏洞。
工業(yè)控制系統(tǒng)開源軟件方面,在2018年NIST報(bào)告的漏洞中,知名開源工控系統(tǒng)Rapid SCADA被曝出由于弱權(quán)限導(dǎo)致的提權(quán)漏洞,該訪問控制漏洞使得攻擊者可以在管理員環(huán)境中執(zhí)行任意遠(yuǎn)程代碼,被NIST評為“嚴(yán)重”級別,給出的弱點(diǎn)為CWE-274,屬于不正確的默認(rèn)權(quán)限。Rapid SCADA作為完整的工業(yè)控制系統(tǒng),包含了現(xiàn)場控制層、過程監(jiān)控層及人機(jī)界面等多種功能,由于其成本低,被大量國內(nèi)制造企業(yè)選為控制系統(tǒng)。一旦攻擊者使用該漏洞進(jìn)行攻擊,將引發(fā)嚴(yán)重后果。
二、開源軟件在工控系統(tǒng)的安全應(yīng)用實(shí)例
面向工業(yè)互聯(lián)網(wǎng),開源軟件與組件被廣泛使用。以下通過一個(gè)簡單的電力系統(tǒng)實(shí)例可以發(fā)現(xiàn)工業(yè)控制系統(tǒng)如何使用開源資源,以滿足自身的現(xiàn)場設(shè)備層、現(xiàn)場控制層、過程監(jiān)控層、制造執(zhí)行系統(tǒng)層(MES)和企業(yè)管理層的構(gòu)建。
在工業(yè)控制系統(tǒng)中,現(xiàn)場設(shè)備層是由遠(yuǎn)程終端組件(RTU)、智能電子設(shè)備(IED)等構(gòu)成,F(xiàn)場設(shè)備層通過各類工業(yè)以太網(wǎng)連接可編程控制器(PLC )、分布式控制器和分布式數(shù)控等控制單元接入成為分布式控制網(wǎng)絡(luò),形成現(xiàn)場控制層。其中,可以使用公開的Modbus TCP協(xié)議設(shè)置點(diǎn)對點(diǎn)或總線式的數(shù)據(jù)通信。在現(xiàn)場設(shè)備層與控制層中,不同廠商的下位機(jī)使用的協(xié)議、物理接口均不同,開源軟件難以運(yùn)行在該層次。而在現(xiàn)場控制層和過程監(jiān)控層中,用于管理下位機(jī)的OPC系統(tǒng)、人機(jī)交互界面(HMI)以及服務(wù)器后端(包含用于數(shù)據(jù)存儲的模塊)等均可以使用開源軟件。
除此之外,隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,遠(yuǎn)程控制現(xiàn)場設(shè)備已經(jīng)成為趨勢,傳統(tǒng)的工控系統(tǒng)安全防護(hù)的方法,諸如物理隔離、網(wǎng)閘等措施不能很好地適用于現(xiàn)代工控系統(tǒng)。而對于工控系統(tǒng)使用的協(xié)議,如在SCADA系統(tǒng)中,其專業(yè)協(xié)議在發(fā)展的過程中逐漸向開放的TCP/IP靠攏,具有TCP/IP協(xié)議的特性。此外,開源環(huán)境支持配置開發(fā)各種Internet服務(wù),如HTTP、FTP等,用于園區(qū)管理層的通信。現(xiàn)在企業(yè)管理層越來越廣泛地使用虛擬化,可以使用VirtualBox進(jìn)行管理。在工業(yè)互聯(lián)網(wǎng)概念下的云資源也有大量的開源資源,例如Oracle 的VirtualBox hypervisor可以搭建云計(jì)算平臺。
當(dāng)然,針對工控系統(tǒng)的信息安全防御,可以將傳統(tǒng)互聯(lián)網(wǎng)中的開源網(wǎng)絡(luò)安全檢測工具運(yùn)用于工控環(huán)境中。譬如基于縱深防御的思想在工控系統(tǒng)的每層之間架設(shè)防火墻和IDS系統(tǒng),這些安全模塊都可以選用開源的網(wǎng)絡(luò)防火墻和IDS系統(tǒng),并對其進(jìn)行適當(dāng)改進(jìn)。在該工業(yè)控制系統(tǒng)中,其中搭載了多種開源安全工具,如Snort用于入侵檢測,Wireshark提供包捕獲功能,Sebekd支持擊鍵記錄,Argus收集網(wǎng)絡(luò)統(tǒng)計(jì)數(shù)據(jù),MySQL用于數(shù)據(jù)存儲等,為管理人員提供高自由度的配置選擇。在該工控靶場系統(tǒng)中,風(fēng)險(xiǎn)評估與事件掛鉤,根據(jù)事件的特點(diǎn)對事件賦予不同的可靠度值和優(yōu)先級。在態(tài)勢感知中,安全分析為每一個(gè)事件賦予一定的風(fēng)險(xiǎn)等級:一旦事件的風(fēng)險(xiǎn)值超過配置的閾值,就會生成一個(gè)“警報(bào)”并顯示在開源環(huán)境下開發(fā)的Dashboard上。
以上所描述的簡易的工控系統(tǒng)都是在開源環(huán)境下搭建的、廣泛使用開源組件開發(fā)的和借助開源軟件支持下實(shí)現(xiàn)的。借助這樣的開源工具,幫助在低成本高效率地構(gòu)建工控系統(tǒng)時(shí),不可避免地為我們引入了開源環(huán)境的安全性問題。
三、開源軟件脆弱性的原因分析
開源軟件的興起離不開開源社區(qū)的發(fā)展。社區(qū)的興起為開源軟件的開發(fā)和傳播奠定基礎(chǔ)。開源軟件具有協(xié)作開發(fā)的特點(diǎn),故開源軟件存在著不同于傳統(tǒng)軟件的安全脆弱性。從開源軟件安全技術(shù)開發(fā)分析,開源軟件安全劃分為管理、架構(gòu)、認(rèn)證和部署4個(gè)方向。在這4 個(gè)方向中,大多數(shù)的研究者更傾向于研究架構(gòu)和認(rèn)證方向的技術(shù),主要著眼于開源安全系統(tǒng)設(shè)計(jì)、開源漏洞特征分析等研究方向。而研究管理和部署方面相關(guān)的社會技術(shù)的研究者較少,導(dǎo)致用于戰(zhàn)略管理、政策管理、培訓(xùn)等方面理論很少,進(jìn)一步造成了在解決開源軟件安全問題時(shí),多使用傳統(tǒng)技術(shù)的局面。對于一個(gè)完善的安全管理系統(tǒng),社會技術(shù)方面和傳統(tǒng)技術(shù)方面同樣重要。從社會技術(shù)角度對造成開源軟件脆弱性的原因進(jìn)行劃分,可以發(fā)現(xiàn)從軟件開發(fā)時(shí)的分工到開源軟件社區(qū)公布的安全要求,都會對開源軟件的安全性產(chǎn)生影響,主要影響來源于以下6個(gè)方面。
(1)開發(fā)者對軟件安全的態(tài)度和行為方面。開發(fā)者或組織者并沒有意識到軟件可能會出現(xiàn)安全漏洞,或是開發(fā)者認(rèn)為軟件價(jià)值不足以召來攻擊者,抑或是關(guān)注軟件安全審計(jì)會導(dǎo)致工作量增加使得開發(fā)者不愿意投入精力。安全檢查工作會致使開發(fā)者的工作量增加,因此部分開發(fā)者不愿投入過多精力在安全性檢查上,該類群體將主要精力放在實(shí)現(xiàn)軟件功能以及提升軟件性能上,而如果開發(fā)者的能力不足或沒有做安全性檢查的習(xí)慣,開發(fā)出的軟件可能會產(chǎn)生漏洞。
(2)開發(fā)者開發(fā)能力與開發(fā)者行為方面。由于部分軟件開發(fā)者并不直接接觸代碼或是沒有系統(tǒng)接觸過軟件安全分析流程,該群體并不具有對軟件安全性進(jìn)行分析的能力,也并不了解軟件安全性分析的流程,最終只能根據(jù)經(jīng)驗(yàn)對軟件進(jìn)行修改或直接選擇承受風(fēng)險(xiǎn)。
(3)開源社區(qū)規(guī)范制定方面。要求開源軟件的開發(fā)團(tuán)隊(duì)針對軟件安全制定一套規(guī)范比較困難,所以多數(shù)團(tuán)隊(duì)把開發(fā)重點(diǎn)放在實(shí)現(xiàn)軟件功能上,退而求其次使用開源社區(qū)提供的規(guī)范,然而大部分社區(qū)并沒有提供相關(guān)規(guī)范,這就意味著對于大多數(shù)開源項(xiàng)目,軟件安全規(guī)范方面還是空白的、缺少相關(guān)規(guī)范的限制,開源軟件安全性分析的流程不規(guī)范可能會導(dǎo)致安全審查過程出現(xiàn)缺失。
(4)開源開發(fā)管理方面。部分開源軟件開發(fā)團(tuán)隊(duì)沒有設(shè)置專門的安全管理團(tuán)隊(duì)。原因可能是成員不具有安全管理的能力,或大部分的團(tuán)隊(duì)并沒有與安全軟件公司掛鉤以獲取安全管理資源。因此大多數(shù)情況下,安全管理工作由組織者承擔(dān)。管理的效果則與組織者的個(gè)人責(zé)任感和能力相關(guān),無法保證能及時(shí)發(fā)現(xiàn)別有用心者在軟件組件中安插的非法操作代碼。
(5)溝通渠道與組織管理方面。由于大部分項(xiàng)目是由志愿者開發(fā)組件,由組織者進(jìn)行綜合,在此過程中會出現(xiàn)兩方交流不徹底的情況,致使組織者提供的安全要求無法及時(shí)傳達(dá)到個(gè)人,以及志愿者在開發(fā)時(shí)遇到安全問題無法找到有效的解決方案。最終,志愿者上傳的組件中的安全問題未得到有效解決卻直接被組織者采用。
(6)開源社區(qū)使用者方面。雖然理論上當(dāng)越多的人看到軟件的源代碼時(shí),軟件代碼中的漏洞越容易被發(fā)現(xiàn),軟件也會變得越安全。但實(shí)際情況中,大多數(shù)代碼審核者并沒有刻意去尋找漏洞,即便是對發(fā)現(xiàn)這些漏洞最感興趣的人群,也大都傾向于發(fā)掘較為淺顯的漏洞,故而具有嚴(yán)重影響的漏洞并不一定會被及時(shí)發(fā)現(xiàn)。
以上是開源軟件存在問題的原因,主要可以歸納為責(zé)任劃分不具體或缺少責(zé)任劃分、安全意識薄弱、對軟件安全性抱有僥幸心理以及開發(fā)人員能力不足。
四、開源軟件安全分析與安全應(yīng)對
通過以上工控系統(tǒng)的構(gòu)建實(shí)例,我們可以發(fā)現(xiàn)相比于傳統(tǒng)軟件,開源軟件突出的特點(diǎn)為源代碼公開,用戶可以在源代碼的基礎(chǔ)上根據(jù)實(shí)際使用需求對代碼進(jìn)行選擇、更改和配置。傳統(tǒng)軟件開發(fā)注重經(jīng)濟(jì)效益,以贏利為目的,故有保護(hù)源代碼的剛需,而開源軟件的開發(fā)者團(tuán)體多為興趣所驅(qū)動(dòng),使源代碼得以公開,開源社區(qū)進(jìn)行技術(shù)交流和技術(shù)支持。在使用時(shí)用戶可以刪減不必要的代碼,優(yōu)化需要的核心功能。經(jīng)過修改后的代碼更加符合用戶需求,在體積上也更加輕量化,相比于傳統(tǒng)軟件注重功能的全面性,開源軟件將重點(diǎn)放在了軟件的多樣性和專一性上,在某些有特殊要求的領(lǐng)域,如工業(yè)互聯(lián)網(wǎng)中有較好的表現(xiàn)。此外,由于代碼的公開,開源軟件出現(xiàn)的漏洞會很快被志愿者發(fā)現(xiàn)并反饋給開發(fā)團(tuán)隊(duì),使之得到及時(shí)修正或能夠讓使用者及時(shí)得到提醒。
開源軟件具有的另一特點(diǎn)是使用成本低。在用做商業(yè)用途時(shí),使用軟件所投入的成本大小就必須要納入考慮范圍,開源軟件的低成本使其成為較好的選擇。開源軟件的使用成本主要體現(xiàn)在對軟件的修改、部署和后期的運(yùn)維上。開源軟件的使用者對軟件的使用、研究和改良都是自由的,傳統(tǒng)軟件受到知識產(chǎn)權(quán)相關(guān)法規(guī)的保護(hù),無關(guān)個(gè)人或組織對傳統(tǒng)軟件的研究和改良都是不受法律保護(hù)的,在某些地區(qū)甚至與當(dāng)?shù)胤ㄒ?guī)相違背,而開源軟件并不存在這些桎梏,使用者可以任意對軟件進(jìn)行研究、更新,且所有的研究結(jié)果和改良方式都為使用者所擁有,不存在產(chǎn)權(quán)問題,這為開源軟件脆弱性分析提供了便利。因此,開源軟件的使用者不會如傳統(tǒng)軟件的使用者那樣受到軟件廠商的更新限制,可以更加及時(shí)地更新軟件。
那么如何做好安全的開源軟件安全開發(fā)呢?筆者建議可以從以下3個(gè)方面去做。
(1)管理好開源社區(qū):可以毫不猶豫地說當(dāng)今任何優(yōu)秀的開源軟件或基礎(chǔ)軟件,都離不開開源社區(qū)的支持。因此扶持管理好有價(jià)值的開源社區(qū)非常重要。圍繞規(guī)范的開源社區(qū),研究與開發(fā)新的開源軟件的安全需求處理框架和策略對開發(fā)人員安全開發(fā)軟件有很大的幫助。例如,從開源軟件項(xiàng)目的非功能性和功能性的需求中識別安全需求,研究高精度的自動(dòng)化工具支持安全需求追蹤以及選擇測試策略并生成測試用例的方法等技術(shù)就非常有意義。
(2)從政策上引導(dǎo)開源軟件安全開發(fā)與安全開發(fā)從業(yè)人員培養(yǎng):我國人力資源豐富,為開源軟件開發(fā)提供了基礎(chǔ)。利用產(chǎn)學(xué)研協(xié)同合作可以很好地構(gòu)建人才體系和優(yōu)化的開發(fā)工業(yè)軟件。在安全性上,要明確安全開發(fā)的核心。傳統(tǒng)的安全學(xué)習(xí)方法通常以安全性為中心,以主題形式介紹知識內(nèi)容,因此不適合于興趣驅(qū)動(dòng)學(xué)習(xí)者進(jìn)行學(xué)習(xí)。開發(fā)人員或安全問題的學(xué)習(xí)者面對如此廣泛的安全知識,通常會認(rèn)為軟件安全性很難實(shí)現(xiàn),傾向于將其拋在一邊。因此,需要從上至下,有組織有協(xié)調(diào)地從需求開發(fā)入手,組織資源,為軟件安全構(gòu)建特定的學(xué)習(xí)情境和交流平臺,使學(xué)習(xí)者可以瀏覽安全知識并將其與他們熟悉的環(huán)境相關(guān)聯(lián)。這一行為需要從政策上協(xié)調(diào),實(shí)現(xiàn)合理規(guī)劃與資源配置。
(3)加強(qiáng)開源軟件安全開發(fā)合作和形成安全策略:開源軟件安全開發(fā)需要各方有效有序有力的合作,需要在國內(nèi)外合作的基礎(chǔ)上,在產(chǎn)、學(xué)、研配合下,在政策指導(dǎo)下,保障開源軟件安全開發(fā)?紤]到現(xiàn)有開源軟件項(xiàng)目要么缺失相應(yīng)的安全策略,要么所采用的安全策略局限過大,故需要借鑒成熟的安全策略,合并到統(tǒng)一合作的機(jī)制中。因此,未來的研究應(yīng)確定在實(shí)踐中使用的更多候選安全策略,并找到將它們系統(tǒng)地納入現(xiàn)有安全策略層次結(jié)構(gòu)的方法。將新發(fā)現(xiàn)的安全策略納入策略層次結(jié)構(gòu)時(shí),還需要進(jìn)行進(jìn)一步研究以評估其有效性。
五、結(jié)語
近年來,越來越多的事件暴露出我們國家基礎(chǔ)工業(yè)軟件方面的薄弱問題。在開發(fā)重要的基礎(chǔ)工業(yè)軟件上,開源社區(qū)和開源軟件不可避免地扮演著重要角色。安全開發(fā)開源軟件需要至少從管理好開源社區(qū)、從政策上引導(dǎo)開源軟件安全開發(fā)、加強(qiáng)開源軟件安全開發(fā)合作和形成安全策略三方面發(fā)力。做好開源軟件安全開發(fā)將有利于我國基礎(chǔ)工業(yè)軟件的蓬勃發(fā)展。
(原載于《保密科學(xué)技術(shù)》雜志2020年7月刊)