您的嵌入式系統(tǒng)上的軟件從何而來?你能證明嗎?您能安全地在現(xiàn)場(chǎng)更新系統(tǒng)嗎?密碼學(xué)提供了驗(yàn)證軟件和數(shù)據(jù)完整性和來源的工具。有一個(gè)關(guān)于用戶如何驗(yàn)證軟件來源的過程,軟件是否在傳輸過程中被篡改,以及安裝后是否被修改。
軍事系統(tǒng)受到許多攻擊,包括對(duì)向系統(tǒng)提供軟件的軟件供應(yīng)鏈的攻擊。為了確保防范這些攻擊,管理人員應(yīng)該問三個(gè)問題:軟件組件的來源是什么?軟件是否被篡改或修改?他們能證明嗎?
密碼學(xué)通過軟件簽名和哈希來解決此問題,它們協(xié)同工作以驗(yàn)證源和文件。軟件簽名使用公鑰/私鑰對(duì)來驗(yàn)證軟件的來源。使用私鑰對(duì)軟件進(jìn)行簽名,然后使用該公鑰驗(yàn)證軟件是否已使用該特定私鑰進(jìn)行簽名。簽名者和軟件是否可以信任是單獨(dú)的討論;軟件簽名驗(yàn)證軟件的來源,以及簽名后是否未被篡改。
哈希是一種處理任意長(zhǎng)度的文件或數(shù)據(jù)集并生成該文件唯一的固定長(zhǎng)度校驗(yàn)和的技術(shù)。對(duì)文件的任何更改都會(huì)產(chǎn)生一個(gè)全新的校驗(yàn)和 - 例如,更改 10 GB 文件中的一位將產(chǎn)生不同的校驗(yàn)和。流行的(雖然有些弱)sha1 哈希產(chǎn)生 40 個(gè)字符的校驗(yàn)和,而更安全的 sha256 哈希產(chǎn)生 64 個(gè)字符的校驗(yàn)和。使用文件及其校驗(yàn)和,您可以驗(yàn)證文件是否未以任何方式損壞或篡改。哈希運(yùn)行速度很快,即使在大文件上也是如此,使其成為文件驗(yàn)證的有效工具。
這些技術(shù)可以應(yīng)用于任何文件。文件是否包含源代碼、可執(zhí)行映像、數(shù)據(jù)或其他文件并不重要;可以使用任何文件或數(shù)據(jù)集。
源頭可以控制嗎?
所有軟件的起點(diǎn)都是源代碼,源代碼通常由多個(gè)人在一段時(shí)間內(nèi)編寫和修改,并作為產(chǎn)品的多個(gè)版本和更新發(fā)布。代碼分布在數(shù)百或數(shù)千個(gè)文件中,并且不斷變化。有效的代碼管理使用版本控制的代碼存儲(chǔ)庫,例如 git1。git 存儲(chǔ)庫是一個(gè)補(bǔ)丁數(shù)據(jù)庫,每個(gè)補(bǔ)丁都有一個(gè)唯一的標(biāo)識(shí)符。在 git 中,這個(gè)唯一標(biāo)識(shí)符是補(bǔ)丁內(nèi)容的哈希值——結(jié)果是每個(gè)補(bǔ)丁都由其內(nèi)容標(biāo)識(shí)。對(duì)修補(bǔ)程序內(nèi)容的任何更改都會(huì)立即可見,因?yàn)樾扪a(bǔ)程序不再與其標(biāo)識(shí)符匹配。
git 補(bǔ)丁包括有關(guān)應(yīng)用它的上一個(gè)補(bǔ)丁的信息以及提交補(bǔ)丁的人員的身份。與區(qū)塊鏈類似,git 補(bǔ)丁包含基于加密的一組后臺(tái)指針,使某人無法在不被發(fā)現(xiàn)的情況下更改歷史記錄。補(bǔ)丁也可以使用前面描述的技術(shù)進(jìn)行簽名,從而驗(yàn)證誰制作了補(bǔ)丁。此技術(shù)在任何需要驗(yàn)證貢獻(xiàn)的環(huán)境中都是有用的工具。
版本控制的軟件存儲(chǔ)庫是任何安全軟件供應(yīng)鏈的基礎(chǔ),因?yàn)樗峁┝塑浖懈牡臍v史記錄以及更改者。它還提供了構(gòu)建特定版本的軟件包的可靠方法。
建立可驗(yàn)證的出處
使用來自已知和可信來源的軟件對(duì)于維護(hù)嵌入式系統(tǒng)的完整性非常重要。但是你怎么知道一個(gè)可安裝的軟件實(shí)際上來自已知的源代碼呢?
源代碼存儲(chǔ)庫與 Jenkins2 等自動(dòng)化構(gòu)建系統(tǒng)相結(jié)合,使用戶能夠從一組已知的源文件構(gòu)建可執(zhí)行映像。生成映像后,生成系統(tǒng)可以對(duì)其進(jìn)行簽名和哈希處理。這使用戶既知道軟件的來源,又知道生產(chǎn)軟件的確切版本。例行版本使用測(cè)試密鑰簽名,而生產(chǎn)版本使用發(fā)布密鑰簽名,需要特殊授權(quán)和批準(zhǔn),并且通常在單獨(dú)的安全系統(tǒng)上簽名。這使用戶能夠確定軟件的來源以及它是否是正式版本。
組成一個(gè)軟件的所有文件都合并到一個(gè)包中,用于分發(fā)、安裝和更新。Linux 中使用的打包系統(tǒng)是 rpm3。rpm 是單個(gè)文件,其中包含多個(gè)文件的壓縮存檔以及用于安裝、配置、更新和刪除其關(guān)聯(lián)應(yīng)用程序的命令。rpm 文件還包括存檔中所有文件的清單,包括它們的名稱、版本號(hào)和校驗(yàn)和。此清單信息包含在 rpm 數(shù)據(jù)庫中,該數(shù)據(jù)庫維護(hù)系統(tǒng)上安裝的所有基于 rpm 的軟件的信息。
軟件通常包含第三方組件。當(dāng)這些第三方組件包含在 rpm 中時(shí),rpm 元數(shù)據(jù)和校驗(yàn)和可確保這是供應(yīng)商包含的軟件。應(yīng)簽署第三方組件以確保其完整性;如果它們只是從其他供應(yīng)商傳遞,則應(yīng)由其他供應(yīng)商簽名。
通常,rpm 包本身是經(jīng)過簽名的。創(chuàng)建和簽署 rpm 包的工具包含在 Linux 中,每個(gè)開發(fā)軟件的人都應(yīng)該使用,包括內(nèi)部開發(fā)人員。默認(rèn)情況下,rpm 安裝程序會(huì)在允許安裝之前檢查軟件包是否使用已知密鑰進(jìn)行簽名。嘗試安裝未簽名的軟件或使用未知密鑰簽名的軟件將失敗,除非它們被覆蓋。rpm 安裝程序還會(huì)檢查軟件包的完整性:如果軟件包的內(nèi)容已被修改,無論是通過數(shù)據(jù)損壞還是惡意篡改,安裝都將失敗。
操作系統(tǒng)供應(yīng)商將在操作系統(tǒng) (OS) 中包含其公鑰。此添加使用戶能夠確保軟件包、更新和安全勘誤表實(shí)際上來自操作系統(tǒng)供應(yīng)商,并且未被任何外部方篡改。
用戶必須將每個(gè)已批準(zhǔn)供應(yīng)商的軟件密鑰添加到系統(tǒng)中。根據(jù)特定的安全要求,用戶可能需要采取措施來確保供應(yīng)商密鑰的有效性,尤其是在從鏡像或其他中間源(如系統(tǒng)集成商)下載軟件時(shí)。密鑰應(yīng)直接從供應(yīng)商網(wǎng)站獲取。有些人甚至隨身攜帶來自已知來源的密鑰的硬拷貝列表。
此外,簽名的 rpm 包允許通過郵件使用不安全的傳輸,例如互聯(lián)網(wǎng)或 CD-ROM,因?yàn)?rpm 工具可以驗(yàn)證 rpm 的來源以及它是否已損壞或篡改。
安裝后的使用壽命
在安裝之前和安裝期間檢查軟件是一個(gè)良好的開端,但在安裝完成后繼續(xù)維護(hù)非常重要??梢宰鲂┦裁磥眚?yàn)證正在運(yùn)行的系統(tǒng)?
rpm 的一個(gè)強(qiáng)大功能是它允許用戶驗(yàn)證正在運(yùn)行的系統(tǒng)上文件的完整性。rpm 數(shù)據(jù)庫包括每個(gè) rpm 中包含的所有文件的校驗(yàn)和。系統(tǒng)實(shí)用程序使用戶能夠計(jì)算系統(tǒng)上每個(gè)文件的校驗(yàn)和,將其與rpm數(shù)據(jù)庫進(jìn)行比較,并識(shí)別已更改的任何文件。rpm 數(shù)據(jù)庫是一種快速有效的方法。實(shí)現(xiàn)此目的的另一種方法是返回到已簽名的 rpm 包并直接從 rpm 使用校驗(yàn)和。雖然這種方式較慢并且需要訪問原始安裝文件,但它非常安全。
主要的 Linux 發(fā)行版使用這些技術(shù)來確保它們從已知來源安裝和運(yùn)行未經(jīng)修改的軟件。了解系統(tǒng)上安裝的所有軟件的來源以及是否已更改至關(guān)重要。這些知識(shí)是在現(xiàn)場(chǎng)部署和更新系統(tǒng)時(shí)建立和維護(hù)系統(tǒng)完整性的有力起點(diǎn)。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5094文章
19184瀏覽量
307900 -
代碼
+關(guān)注
關(guān)注
30文章
4830瀏覽量
69110
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
嵌入式機(jī)器學(xué)習(xí)的應(yīng)用特性與軟件開發(fā)環(huán)境
![<b class='flag-5'>嵌入式</b>機(jī)器學(xué)習(xí)的應(yīng)用特性與<b class='flag-5'>軟件</b>開發(fā)環(huán)境](https://file1.elecfans.com/web3/M00/05/AF/wKgZO2eCM96AYfoXAAC2esU07bU956.png)
新手怎么學(xué)嵌入式?
嵌入式系統(tǒng)開發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)開發(fā)常見問題解決
【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+ Hypervisor應(yīng)用場(chǎng)景調(diào)研
嵌入式系統(tǒng)的未來趨勢(shì)有哪些?
嵌入式軟件開發(fā)與AI整合
![<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發(fā)與AI整合](https://file1.elecfans.com/web2/M00/8D/79/wKgaomS7KZ-AY3GzAAArJzrUg1c443.png)
嵌入式系統(tǒng)怎么學(xué)?
嵌入式系統(tǒng)基礎(chǔ)
![<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>基礎(chǔ)](https://file1.elecfans.com/web2/M00/8D/79/wKgaomS7KZ-AY3GzAAArJzrUg1c443.png)
嵌入式片上系統(tǒng)是啥
嵌入式可編程片上系統(tǒng)是什么
嵌入式片上系統(tǒng)和ARM哪個(gè)更好
嵌入式片上系統(tǒng)是什么意思
嵌入式片上系統(tǒng)是什么
嵌入式軟件設(shè)計(jì)的原則分享
![<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>設(shè)計(jì)的原則分享](https://file1.elecfans.com/web2/M00/C1/D3/wKgaomXarJuAfAYZAAAk4c2b2Lg596.png)
評(píng)論