大多數(shù) *** 攻擊都利用了眾所周知的漏洞,許多程序員可以使用持續(xù)集成、持續(xù)部署 (CI/CD) 或 DevOps 技術(shù)自動(dòng)執(zhí)行構(gòu)建。然而,我們?nèi)绾文軌蜃詣?dòng)檢查每小時(shí)在不同的免費(fèi)和開(kāi)源庫(kù)中出現(xiàn)的安全漏洞呢?如今有多種 *** 可以在構(gòu)建應(yīng)用程序時(shí)找出庫(kù)的錯(cuò)誤版本。
本文將重點(diǎn)介紹 Python,因其擁有一些用于檢查依賴項(xiàng)安全性的復(fù)雜工具。特別是,本文探討了 Thoth 項(xiàng)目(https://thoth-station.ninja/),它將許多工具結(jié)合在一起,以自動(dòng)化 Python 程序構(gòu)建,并將安全檢查作為解決過(guò)程的一部分。
自動(dòng)化安全工作的投入
本節(jié)列出了向公眾提供有關(guān)漏洞信息所做出的努力。它側(cè)重于與本文主題相關(guān)的工具:開(kāi)源 Python 庫(kù)中的漏洞報(bào)告。
常見(jiàn)漏洞和暴露 (CVE) 計(jì)劃
任何關(guān)于軟件安全性的討論都必須從全面的 CVE 數(shù)據(jù)庫(kù)開(kāi)始,該數(shù)據(jù)庫(kù)匯集了數(shù)千名研究人員發(fā)現(xiàn)的缺陷。本文中的其他項(xiàng)目在很大程度上依賴于此數(shù)據(jù)庫(kù)。它由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)維護(hù),并由 MITRE 策劃,MITRE 是一家專門從事開(kāi)源軟件的非營(yíng)利性公司,并得到了美國(guó) *** 的支持。CVE 數(shù)據(jù)庫(kù)為許多相關(guān)項(xiàng)目(如 CVE 詳細(xì)信息統(tǒng)計(jì)信息站點(diǎn))提供信息。
個(gè)人或自動(dòng)化工具可以找到與結(jié)構(gòu)化格式安全漏洞相關(guān)的確切包和版本,以及解釋漏洞的不太結(jié)構(gòu)化的文本,如下所示。
添加微信好友, 獲取更多信息
復(fù)制微信號(hào)
Python Packaging Authority 的安全舉措
Python Packaging Authority (PyPA) 是為 Python 語(yǔ)言中的開(kāi)源包創(chuàng)建更佳實(shí)踐的主要機(jī)構(gòu),來(lái)自許多公司的志愿者都支持 PyPA。PyPA 的安全相關(guān)舉措是使 Python 重大進(jìn)步的主要因素。
PyPA 的咨詢數(shù)據(jù)庫(kù)以機(jī)器可讀的形式整理 Python 包中的已知漏洞,PyPA 支持的另一個(gè)項(xiàng)目 pip-audit 審計(jì)應(yīng)用程序,提供需求并報(bào)告所用軟件包中的任何已知漏洞。pip-audit 的輸出可以是人類可讀的結(jié)構(gòu)化格式,例如 *** ON。因此,自動(dòng)化工具可以咨詢數(shù)據(jù)庫(kù)或 pip-audit,用以警告開(kāi)發(fā)人員其依賴項(xiàng)中的風(fēng)險(xiǎn)。
開(kāi)源見(jiàn)解(Open Source Insights)
一項(xiàng)名為 Open Source Insights 的計(jì)劃,試圖通過(guò)以結(jié)構(gòu)化的格式提供信息,利用流行語(yǔ)言生態(tài)系統(tǒng)中依賴的關(guān)系,以幫助開(kāi)源開(kāi)發(fā)人員。此類信息包括安全建議、許可信息、庫(kù)的依賴關(guān)系等。為了更好地運(yùn)用 Open Source Insights,我們查閱了流行的 TensorFlow 數(shù)據(jù)科學(xué)庫(kù),發(fā)現(xiàn)關(guān)于PyPI 的安全公告(https://deps.dev/pypi/tensorflow),單擊“更多詳細(xì)信息”按鈕可顯示有助于研究資訊的鏈接。
有趣的是,Node.js 包管理器(npm)提供的 TensorFlow 版本當(dāng)時(shí)沒(méi)有安全公告。在這種情況下使用的編程語(yǔ)言可能是造成差異的原因之一。然而,明顯的不一致提醒我們,起源可以帶來(lái)很大的不同,因此將展示解決依賴關(guān)系的自動(dòng)化過(guò)程,以此來(lái)適應(yīng)這些問(wèn)題。
Open Source Insights 通過(guò)將 Python 包安裝到干凈的環(huán)境中來(lái)獲取其依賴關(guān)系信息。Python 包由 pip 解析器(Python 庫(kù)更流行的安裝工具)安裝,PyPI 是列出開(kāi)源 Python 庫(kù)更流行的索引。從開(kāi)源漏洞數(shù)據(jù)庫(kù) (OSV) 中檢索每個(gè)包的漏洞信息。OSV 則作為會(huì)審服務(wù),對(duì)跨多個(gè)語(yǔ)言生態(tài)系統(tǒng)漏洞進(jìn)行分組。如果開(kāi)源見(jiàn)解有 API,它將是一個(gè)非常有價(jià)值的資源; 我們希望開(kāi)發(fā)人員會(huì)在某個(gè)時(shí)候段能夠添加一個(gè)。盡管信息目前僅作為網(wǎng)頁(yè)提供,但結(jié)構(gòu)化格式允許自動(dòng)化工具抓取頁(yè)面并查找關(guān)鍵信息,例如安全公告。
開(kāi)源安全基金會(huì)的安全記分卡
與安全密切相關(guān)的軟件質(zhì)量需要基本的實(shí)踐,例如在將更改檢查到存儲(chǔ)庫(kù)之前進(jìn)行回歸測(cè)試,將加密簽名附加到發(fā)布,以及運(yùn)行靜態(tài)分析,其中一些做法可以自動(dòng)檢測(cè),從而使安全專家能夠大規(guī)模地評(píng)估項(xiàng)目的安全性。
一項(xiàng)名為 “Security Scorecards(安全記分卡)” 的工作于 2020 年啟動(dòng),并得到了開(kāi)源安全基金會(huì)(OpenSSF) 的支持,目前列出了幾十個(gè)自動(dòng)檢查。大多數(shù)檢查依賴于 GitHub 服務(wù),并且只能在存儲(chǔ)于 GitHub 中的項(xiàng)目上運(yùn)行。鑒于 GitHub 在開(kāi)源項(xiàng)目中的主導(dǎo)地位,該項(xiàng)目目前仍然非常有用,并且代表了更通用評(píng)級(jí)系統(tǒng)的模型。
Thoth 計(jì)劃
Project Thoth 是一個(gè)基于云的工具,可幫助 Python 程序員構(gòu)建強(qiáng)大的應(yīng)用程序,該任務(wù)包括安全檢查以及許多其他注意事項(xiàng)。Red Hat 創(chuàng)立了 Thoth,并運(yùn)行在 Red Hat OpenShift 云服務(wù)中,但其代碼完全是開(kāi)源的。該項(xiàng)目在 Python 開(kāi)發(fā)人員中建立了一個(gè)社區(qū),開(kāi)發(fā)人員可以將項(xiàng)目的創(chuàng)新成果復(fù)制到其他編程語(yǔ)言中。
幫助程序員查找?guī)旌蜆?gòu)建應(yīng)用程序的工具稱為解析器。流行的 pip 解析器通常選擇每個(gè)庫(kù)的最新版本,但比較復(fù)雜,pip 甚至可以回溯,并選擇不同版本的庫(kù)來(lái)處理通過(guò)遍歷依賴關(guān)系圖找到的版本范圍規(guī)范。在選擇依賴項(xiàng)的更佳版本時(shí),Thoth 可以做的不僅僅是 pip。以下是 Thoth的概述,可特別關(guān)注它如何幫助提高安全性。
Thoth 概述
Thoth 在安裝依賴項(xiàng)時(shí)會(huì)考慮程序環(huán)境的許多元素,程序?qū)⒃谄渖线\(yùn)行 CPU 和操作系統(tǒng)、有關(guān)應(yīng)用程序容器的元數(shù)據(jù)(例如由 Skopeo 提取的元數(shù)據(jù)),甚至是有關(guān)機(jī)器學(xué)習(xí)應(yīng)用程序?qū)⑹褂玫?GPU 信息。Thoth 可以考慮其他幾個(gè)變量,但可能從前面的列表中已猜到,Thoth 最初是為了支持機(jī)器學(xué)習(xí)而開(kāi)發(fā)的。開(kāi)發(fā)人員在配置文件中向 Thoth 提供有關(guān)應(yīng)用程序環(huán)境的信息。
然而環(huán)境信息有什么優(yōu)勢(shì)呢?它允許 Thoth 在指定環(huán)境中排除具有已知漏洞的庫(kù)版本。在運(yùn)行期間能夠注意到構(gòu)建失敗或出現(xiàn)問(wèn)題的開(kāi)發(fā)人員,并將有關(guān)使用或避免哪些版本的依賴項(xiàng)信息存儲(chǔ)在稱為 “Prescription” 的規(guī)范中,Thoth 會(huì)為未來(lái)用戶提供咨詢。Thoth 甚至可以對(duì)程序及其環(huán)境進(jìn)行測(cè)試。目前,它使用 Clair 對(duì)容器鏡像的內(nèi)容進(jìn)行靜態(tài)測(cè)試,并存儲(chǔ)有關(guān)發(fā)現(xiàn)漏洞的信息。未來(lái) Thoth 的開(kāi)發(fā)人員計(jì)劃使用 Python 代碼質(zhì)量管理局(PyCQA) 的 Bandit 項(xiàng)目來(lái)運(yùn)行具有各種庫(kù)版本組合的實(shí)際應(yīng)用程序。Thoth 將在每個(gè)包源代碼上單獨(dú)運(yùn)行 Bandit,并在解析過(guò)程中合并結(jié)果。
各種庫(kù)的不同版本組合較多,無(wú)法全部測(cè)試。因此,Thoth 將依賴關(guān)系解析建模為馬爾可夫決策過(guò)程(MDP),以決定要運(yùn)行的更高效子集。有時(shí)安全不是主要問(wèn)題。例如,也許您計(jì)劃在與 Internet 隔離的專用 *** 中運(yùn)行程序。在這種情況下,可以考慮Thoth 的其他一些優(yōu)勢(shì),例如性能或穩(wěn)定性等,而不是安全性。
Thoth 將其依賴項(xiàng)選擇存儲(chǔ)在鎖定文件中,文件“鎖定”特定依賴項(xiàng)的特定版本。如果沒(méi)有鎖定文件,細(xì)微的安全漏洞和其他錯(cuò)誤可能會(huì)蔓延生產(chǎn)應(yīng)用程序,在最壞的情況下,如果沒(méi)有鎖定,用戶可能會(huì)面臨所謂的“依賴性混淆攻擊”。解析器可能會(huì)選擇從具有錯(cuò)誤版本的索引中獲取庫(kù)。另一個(gè)風(fēng)險(xiǎn)是攻擊者可能會(huì)在索引中增加庫(kù)的版本號(hào),導(dǎo)致解析器選擇最新的版本。
總結(jié)
Thoth 是一個(gè)復(fù)雜且不斷增長(zhǎng)的開(kāi)源工具 *** ,其解決方案背后的基本原則可以啟發(fā)其他項(xiàng)目,該原則是: 解析器應(yīng)通過(guò)抓取網(wǎng)站(例如 CVE 數(shù)據(jù)庫(kù))、運(yùn)行靜態(tài)檢查以及任何其他信息源來(lái)例行檢查漏洞。結(jié)果必須存儲(chǔ)在數(shù)據(jù)庫(kù)中。當(dāng)解析器發(fā)現(xiàn)某些錯(cuò)誤或安全漏洞需要更改解析器之前做出的決定時(shí),解析器必須查看依賴項(xiàng)的依賴關(guān)系并進(jìn)行回溯。解析器的發(fā)現(xiàn)和使用解析器的開(kāi)發(fā)人員傳回的信息應(yīng)被存儲(chǔ)起來(lái),并在未來(lái)的決策中使用。簡(jiǎn)而言之,借助當(dāng)今可用的有關(guān)安全漏洞的大量信息,我們可以自動(dòng)解決依賴關(guān)系并生成更安全的應(yīng)用程序。
來(lái)源:開(kāi)源地理空間基金會(huì)中文分會(huì)
來(lái)源鏈接:https://www.osgeo.cn/post/1f2d8
本站聲明:網(wǎng)站內(nèi)容來(lái)源于 *** ,如有侵權(quán),請(qǐng)聯(lián)系我們,我們將及時(shí)處理。