国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式 Linux 安全簡(jiǎn)介

這篇具有很好參考價(jià)值的文章主要介紹了嵌入式 Linux 安全簡(jiǎn)介。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1 安全概念

安全就是降低風(fēng)險(xiǎn)。

一方面所有者,即產(chǎn)品或服務(wù)的受益者(用戶(hù)、制造商、企業(yè)主等)。所有者希望保護(hù)資產(chǎn),即產(chǎn)品或服務(wù)中任何有價(jià)值的東西(數(shù)據(jù)、代碼、聲譽(yù)等)。

另一方面威脅行為者,即能夠表現(xiàn)出威脅的人或事物(惡意黑客等),即任何能夠以可能造成傷害的方式對(duì)資產(chǎn)采取行動(dòng)的東西。

為了體現(xiàn)威脅,威脅者將通過(guò)攻擊矢量(威脅者用于訪(fǎng)問(wèn)或滲透目標(biāo)系統(tǒng)的方法或途徑)來(lái)探索漏洞(系統(tǒng)中的薄弱環(huán)節(jié))。

嵌入式 Linux 安全簡(jiǎn)介

歸根結(jié)底,這就是所有者和威脅者之間的貓鼠游戲。所有者會(huì)在多大程度上保護(hù)資產(chǎn)?威脅者會(huì)在多大程度上破壞資產(chǎn)?這實(shí)際上取決于資產(chǎn)的價(jià)值。事實(shí)上,所有者和威脅行動(dòng)者對(duì)價(jià)值的認(rèn)識(shí)可能并不相同。

確定資產(chǎn)(及其價(jià)值)以降低被入侵的風(fēng)險(xiǎn),可以通過(guò)威脅建模的過(guò)程來(lái)完成。

2 威脅建模

威脅建模是一個(gè)可以識(shí)別、列舉潛在威脅并確定優(yōu)先緩解措施的過(guò)程。它基本上是一個(gè)風(fēng)險(xiǎn)評(píng)估過(guò)程,在這個(gè)過(guò)程中,你要評(píng)估資產(chǎn)的價(jià)值和保護(hù)資產(chǎn)的成本。威脅建模的結(jié)果就是產(chǎn)品的威脅模型。

嵌入式 Linux 安全簡(jiǎn)介

在威脅建模過(guò)程中,有幾種技術(shù)和方法可以提供幫助,包括STRIDE、DREAD、VAST、OCTAVE等。

STRIDE 模型是一種非常有用的威脅分類(lèi)工具。它由微軟開(kāi)發(fā),其名稱(chēng)是六種主要威脅類(lèi)型的首字母縮寫(xiě): 欺騙(Spoofing)、篡改(Tampering)、抵賴(lài)(Repudiation)、信息泄露(Information disclosure)、拒絕服務(wù)(Denial of service)和權(quán)限升級(jí)(Escalation of privileges)。STRIDE 可用于識(shí)別系統(tǒng)資產(chǎn)可能面臨的所有威脅。

嵌入式 Linux 安全簡(jiǎn)介

DREAD方法是一種評(píng)估計(jì)算機(jī)安全威脅風(fēng)險(xiǎn)的工具。其名稱(chēng)是五類(lèi)安全威脅的首字母縮寫(xiě): 損害(Damage:攻擊的嚴(yán)重程度)、可重現(xiàn)性(Reproducibility:重現(xiàn)攻擊的難易程度)、可利用性(Exploitability:發(fā)起攻擊的工作量)、受影響用戶(hù)(Affected users:有多少人會(huì)受到影響)和可發(fā)現(xiàn)性(Discoverability:發(fā)現(xiàn)威脅的難易程度)。

嵌入式 Linux 安全簡(jiǎn)介

STRIDE 模型有助于識(shí)別威脅,而 DREAD 方法則有助于對(duì)威脅進(jìn)行排序。對(duì)于系統(tǒng)中的每一個(gè)威脅,您都要仔細(xì)研究每個(gè)威脅類(lèi)別,并將其分為低(1 分)、中(2 分)或高(3 分)。最后,您將得到一份威脅和緩解策略的等級(jí)列表。舉例說(shuō)明:

嵌入式 Linux 安全簡(jiǎn)介

我們可以看到,威脅建模將為我們提供一個(gè)非常清晰的視圖,說(shuō)明我們要保護(hù)什么、我們計(jì)劃如何保護(hù)以及相關(guān)的成本。這是產(chǎn)品威脅模型的一部分,需要在每個(gè)開(kāi)發(fā)周期重新評(píng)估。因此,威脅模型將提供一份需要優(yōu)先處理的威脅清單,這樣我們就可以集中精力實(shí)施緩解措施,提高產(chǎn)品的安全性。

如何保護(hù)代碼的完整性和真實(shí)性?如何確保數(shù)據(jù)的私密性?在哪里存儲(chǔ)加密密鑰?如何最大限度地降低應(yīng)用程序被利用的風(fēng)險(xiǎn)?讓我們從安全啟動(dòng)開(kāi)始,嘗試回答所有這些問(wèn)題以及更多問(wèn)題!

3 安全啟動(dòng)

如何確保運(yùn)行的代碼是由值得信賴(lài)的個(gè)人或公司創(chuàng)建的?實(shí)施安全啟動(dòng)程序。

安全啟動(dòng)程序的目的是保護(hù)代碼的完整性和真實(shí)性。

安全啟動(dòng)通?;跀?shù)字簽名的驗(yàn)證。嵌入式 Linux 系統(tǒng)通常有三個(gè)主要組件:引導(dǎo)加載程序、內(nèi)核和根文件系統(tǒng)(rootfs)。所有這些組件都有簽名,并在啟動(dòng)過(guò)程中對(duì)簽名進(jìn)行檢查。

嵌入式 Linux 安全簡(jiǎn)介

讓我們看看NXP iMX6 設(shè)備上的一個(gè)實(shí)際例子。

一切都始于SoC內(nèi)部的ROM代碼。在恩智浦iMX6上,有一個(gè)名為"High Assurance Boot"(HAB)的硬件組件,它能夠驗(yàn)證第一階段啟動(dòng)加載程序的簽名,從而實(shí)現(xiàn)安全啟動(dòng)過(guò)程。iMX6設(shè)備內(nèi)的高保真啟動(dòng)也可稱(chēng)為"信任根"(Root of Trust),因?yàn)槿绻黄茐模邪踩珕?dòng)過(guò)程也將受到破壞。

iMX6 SoC內(nèi)的ROM代碼使用HA 組件檢查引導(dǎo)加載程序的簽名。為此,需要生成一對(duì)密鑰(公鑰和私鑰),用私鑰簽署引導(dǎo)加載程序,并將公鑰存儲(chǔ)在SoC 內(nèi)。iMX6使用OTP保險(xiǎn)絲來(lái)存儲(chǔ)密鑰。實(shí)際上,為了降低成本,SoC中只存儲(chǔ)了公鑰的哈希值。

引導(dǎo)加載程序啟動(dòng)時(shí)(如 U-Boot),必須檢查L(zhǎng)inux內(nèi)核的簽名。為此,通常使用一種名為FIT映像的映像格式。FIT映像是支持散列和簽名的多個(gè)二進(jìn)制文件的容器,通常包含Linux內(nèi)核映像、設(shè)備樹(shù)文件和初始 ramdisk。生成一對(duì)密鑰后,我們需要用私鑰簽署FIT映像中的二進(jìn)制文件,并配置U-Boot使用公鑰檢查FIT映像的簽名。

內(nèi)核啟動(dòng)后,將運(yùn)行內(nèi)存盤(pán)鏡像中的啟動(dòng)程序。在掛載之前,ramdisk將具有驗(yàn)證最終根文件系統(tǒng)完整性的邏輯。有幾種方法可以實(shí)現(xiàn)這一點(diǎn)。一個(gè)常見(jiàn)的選擇是使用設(shè)備映射器真實(shí)性(dm-verity)內(nèi)核模塊。dm-verity 內(nèi)核模塊可對(duì)塊設(shè)備進(jìn)行完整性檢查,并要求使用只讀 rootfs(squashfs 就是一個(gè)很好的解決方案)。如果想要一個(gè)可讀寫(xiě)的根文件系統(tǒng),還可以使用IMA或dm-integrity等其他方法。

下面是整個(gè)安全啟動(dòng)過(guò)程的示意圖:

嵌入式 Linux 安全簡(jiǎn)介

2017年7月17日,多個(gè)恩智浦設(shè)備(i.MX6、i.MX50、i.MX53、i.MX7、i.MX28 和 Vybrid 系列)的ROM代碼中的安全啟動(dòng)漏洞被公開(kāi)披露。如果你的信任鏈遭到破壞,一切都會(huì)受到影響!因此,我們需要警惕這類(lèi)漏洞(在這種情況下,它們已被新硅片修復(fù))。

雖然安全啟動(dòng)可以確保真實(shí)性和完整性,但它并不能保護(hù)設(shè)備不被偽造或威脅者從設(shè)備中提取代碼/數(shù)據(jù)。因此,如果要保護(hù)知識(shí)產(chǎn)權(quán)或確保數(shù)據(jù)保密性,就需要使用加密技術(shù)。

4 代碼和數(shù)據(jù)加密

您可能希望對(duì)嵌入式 Linux 設(shè)備中的數(shù)據(jù)或代碼進(jìn)行加密。

當(dāng)你需要保護(hù)用戶(hù)的隱私和機(jī)密時(shí),數(shù)據(jù)加密是一種常用的方法。數(shù)據(jù)是設(shè)備執(zhí)行過(guò)程中產(chǎn)生的任何信息,包括數(shù)據(jù)庫(kù)、配置文件等。

代碼加密取決于具體情況,對(duì)整個(gè)根文件系統(tǒng)進(jìn)行加密并不常見(jiàn)。通常情況下,大部分組件都是免費(fèi)開(kāi)源軟件,因此沒(méi)什么好隱藏的。此外,還有GPLv3和Tivo化的問(wèn)題(使用任何GPLv3軟件都會(huì)迫使你為用戶(hù)提供一個(gè)更新軟件的機(jī)制,如果你要對(duì)軟件進(jìn)行加密,這將會(huì)變得更加困難)。更常見(jiàn)的用例是只加密你為設(shè)備開(kāi)發(fā)的應(yīng)用程序。這通常是你的知識(shí)產(chǎn)權(quán)所在。

Linux中基本上有兩種主要的加密方法:全盤(pán)加密和基于文件的加密。

全磁盤(pán)加密提供塊級(jí)加密,整個(gè)磁盤(pán)或磁盤(pán)分區(qū)都會(huì)被加密。為此,我們可以使用Linux內(nèi)核的設(shè)備映射器加密目標(biāo)dm-crypt。

基于文件的加密提供文件系統(tǒng)級(jí)加密,每個(gè)目錄都可以單獨(dú)加密,并可選擇使用不同的密鑰。fscrypt是一些文件系統(tǒng)(如 EXT4、UBIFS 和 F2FS)上可用的API,而 eCryptFS則是一種更通用的解決方案,它是在現(xiàn)有文件系統(tǒng)上堆疊的一層。

5 加密密鑰

由于在加密中使用非對(duì)稱(chēng)密鑰算法速度太慢,因此通常使用對(duì)稱(chēng)密鑰算法。這意味著加密和解密使用相同的密鑰,而且密鑰應(yīng)存在于文件系統(tǒng)中的某個(gè)位置,這樣才能解密加密的代碼/數(shù)據(jù)。

但我們不能就這樣把密鑰留在文件系統(tǒng)中,對(duì)嗎?

有幾家公司就是因?yàn)闆](méi)有意識(shí)到這一點(diǎn)而付出了代價(jià)。例如,下圖來(lái)自第一代Xbox視頻游戲機(jī)。安全研究員安德魯-黃(Andrew "bunnie" Huang)開(kāi)發(fā)了一種專(zhuān)門(mén)的FPGA硬件,用于嗅探通信總線(xiàn),并從設(shè)備中提取加密密鑰。這只是因?yàn)槊荑€就在那里,以明文形式在通信總線(xiàn)中傳輸,沒(méi)有任何保護(hù)措施(順便說(shuō)一句,Andrew Huang 是一本非常好的硬件黑客書(shū)籍《Hacking the Xbox》的作者,你可以在他的網(wǎng)站上免費(fèi)下載)。

嵌入式 Linux 安全簡(jiǎn)介

結(jié)論是加密代碼/數(shù)據(jù)的保護(hù)與解密密鑰的保護(hù)同樣安全!

6 密鑰存儲(chǔ)技術(shù)

在臺(tái)式機(jī)或智能手機(jī)上,用于加密文件系統(tǒng)的密鑰可以通過(guò)交互輸入的用戶(hù)密碼(口令)獲得。例如,安卓智能手機(jī)就是這樣工作的。

在嵌入式系統(tǒng)中,我們通常不會(huì)在每次啟動(dòng)設(shè)備時(shí)通過(guò)用戶(hù)交互從密碼中獲取密鑰。因此,密鑰應(yīng)加密存儲(chǔ)在文件系統(tǒng)或安全存儲(chǔ)器中。為此,我們需要硬件支持。

例如NXP i.MX 處理器有一個(gè)唯一的主密鑰(NXP預(yù)先編程),只有名為CAAM(加密加速器和保證模塊)的特殊硬件模塊才能訪(fǎng)問(wèn)該密鑰。該硬件設(shè)備可用于加密密鑰并將其存儲(chǔ)在文件系統(tǒng)中(這必須在制造過(guò)程中完成)。在啟動(dòng)過(guò)程中,CAMM模塊將用于解密密鑰,并恢復(fù)用于解密文件系統(tǒng)的普通密鑰。由于CAAM模塊內(nèi)的密鑰無(wú)法訪(fǎng)問(wèn),因此加密密鑰受到了保護(hù)。

如果處理器沒(méi)有安全功能,也可以通過(guò)安全元件或TPM設(shè)備等外部硬件實(shí)現(xiàn)相同的效果。這些外部設(shè)備通常提供安全存儲(chǔ),因此可以用來(lái)存儲(chǔ)主密鑰,用于加密/解密文件系統(tǒng)加密密鑰。這些設(shè)備還提供許多安全功能,如隨機(jī)數(shù)生成、散列計(jì)算、加密和簽名功能等。

安全元件是一種安全計(jì)算系統(tǒng)。它基本上是帶有自己的安全應(yīng)用程序的安全存儲(chǔ)(通常使用Java卡實(shí)現(xiàn),但不是必須的)。安全元素的功能非常開(kāi)放,取決于實(shí)現(xiàn)方式,但大多數(shù)安全元素都執(zhí)行公鑰密碼標(biāo)準(zhǔn)11(PKCS#11)。安全元件的例子有智能卡和SIM卡。

TPM(可信平臺(tái)模塊)是一種規(guī)范和國(guó)際標(biāo)準(zhǔn)(ISO/IEC 11889)。TPM不是安全元件,但可以在安全元件內(nèi)實(shí)施。它可以在硬件或軟件中實(shí)現(xiàn),但大多數(shù)是在硬件中實(shí)現(xiàn)的。它提供一套由標(biāo)準(zhǔn)定義的有限安全功能,包括安全存儲(chǔ)和加密功能。

安全存儲(chǔ)的第三種選擇是使用可信執(zhí)行環(huán)境。TEE(Trusted Execution Environment)是一種環(huán)境,在這種環(huán)境中,執(zhí)行的代碼和訪(fǎng)問(wèn)的數(shù)據(jù)是隔離的,并在保密性(任何人都無(wú)法訪(fǎng)問(wèn)數(shù)據(jù))和完整性(任何人都無(wú)法更改代碼及其行為)方面受到保護(hù)。我們身邊有很多設(shè)備都在使用可信執(zhí)行環(huán)境,包括智能手機(jī)、機(jī)頂盒、游戲機(jī)和智能電視。

最后,如果您希望在嵌入式Linux設(shè)備中使用加密技術(shù),那么從項(xiàng)目一開(kāi)始就必須考慮密鑰的存儲(chǔ)和管理問(wèn)題。

7 分層安全

到目前為止我們已經(jīng)討論了如何通過(guò)安全啟動(dòng)和加密來(lái)提高嵌入式Linux設(shè)備的安全性。但這還不夠。我們應(yīng)該始終分層考慮安全問(wèn)題,每一層都應(yīng)用一種緩解技術(shù),在其他層的基礎(chǔ)上提高設(shè)備的安全性。將多種緩解技術(shù)結(jié)合起來(lái),攻擊者就更難入侵設(shè)備。

想想看。您可以通過(guò)安全啟動(dòng)和加密來(lái)保護(hù)您的代碼和數(shù)據(jù),但如果您運(yùn)行的應(yīng)用程序存在可能被利用的漏洞,您的資產(chǎn)仍然會(huì)面臨風(fēng)險(xiǎn)。如果應(yīng)用程序存在攻擊向量(用戶(hù)輸入、配置文件、網(wǎng)絡(luò)通信等),漏洞就有可能被利用。特別是在使用C和C++等不安全內(nèi)存語(yǔ)言編寫(xiě)的程序中,緩沖區(qū)溢出等漏洞可能被用于堆棧粉碎和格式字符串等攻擊。

8 安全編碼

如果應(yīng)用程序存在攻擊向量(用戶(hù)輸入、配置文件、網(wǎng)絡(luò)通信等),那么漏洞就可能被用來(lái)利用系統(tǒng)。

特別是使 C/C++等不安全內(nèi)存語(yǔ)言編寫(xiě)的程序,緩沖區(qū)溢出等漏洞可能被用于堆棧粉碎和格式字符串等攻擊。

舉個(gè)例子,在 Linux 內(nèi)核(從 2.6.34 版到 5.2.x)中發(fā)現(xiàn)了一個(gè)緩沖區(qū)溢出漏洞,該漏洞存在于vhost功能將virtqueue緩沖區(qū)轉(zhuǎn)換為 IOV的方式中。在遷移過(guò)程中,擁有特權(quán)的客戶(hù)機(jī)用戶(hù)可以將長(zhǎng)度無(wú)效的描述符傳遞給主機(jī),從而利用這一漏洞提高他們?cè)谥鳈C(jī)上的權(quán)限。

diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 34ea219936e3f..acabf20b069ef 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -2180,7 +2180,7 @@ static int get_indirect(struct vhost_virtqueue *vq,
	/* If this is an input descriptor, increment that count. */
	if (access == VHOST_ACCESS_WO) {
		*in_num += ret;
-			if (unlikely(log)) {
+			if (unlikely(log && ret)) {
				log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
				log[*log_num].len = vhost32_to_cpu(vq, desc.len);
				++*log_num;
@@ -2321,7 +2321,7 @@ int vhost_get_vq_desc(struct vhost_virtqueue *vq,
			/* If this is an input descriptor,
			 * increment that count. */
			*in_num += ret;
-			if (unlikely(log)) {
+			if (unlikely(log && ret)) {
				log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
				log[*log_num].len = vhost32_to_cpu(vq, desc.len);
				++*log_num;

此漏洞已在CVE-2019-14835中注冊(cè),并于2019年得到修復(fù)。實(shí)際上,虛擬(客戶(hù))機(jī)中的用戶(hù)可以利用此漏洞獲得主機(jī)的 root 訪(fǎng)問(wèn)權(quán)限。這個(gè)漏洞(還有許多其他漏洞)在Linux內(nèi)核中存在了好幾年!

歸根結(jié)底,軟件總會(huì)有漏洞,但我們可以盡量減少它們。為此,我們可以使用靜態(tài)分析工具。

9 靜態(tài)分析工具

靜態(tài)分析工具能夠分析源代碼(無(wú)需運(yùn)行程序),在運(yùn)行時(shí)發(fā)現(xiàn)問(wèn)題。這些工具可以發(fā)現(xiàn)空指針取消引用、內(nèi)存泄漏、整數(shù)溢出、越界訪(fǎng)問(wèn)、初始化前使用等程序錯(cuò)誤!

有許多優(yōu)秀的開(kāi)源工具(cppcheck、splint、clang 等)和商業(yè)選擇(Coverity、PC-Lint 等)可用于靜態(tài)代碼分析,從編譯器開(kāi)始,編譯器通常有內(nèi)置的靜態(tài)分析工具,可在編譯代碼時(shí)生成警告或錯(cuò)誤。這就是為什么我們決不能忽視編譯器警告的原因,對(duì)嗎?)

因此,要將應(yīng)用程序中存在安全漏洞的風(fēng)險(xiǎn)降至最低,第一步就是絕不忽視編譯器警告并使用靜態(tài)分析工具。但有些缺陷很難,有時(shí)甚至不可能在源代碼層面上識(shí)別出來(lái)。因此,我們可能需要在應(yīng)用程序中添加運(yùn)行時(shí)保護(hù)。

10 運(yùn)行時(shí)保護(hù)

運(yùn)行時(shí)保護(hù)可以對(duì)應(yīng)用程序進(jìn)行動(dòng)態(tài)分析。這意味著您的程序?qū)⒕哂性谶\(yùn)行時(shí)執(zhí)行的保護(hù)和檢查功能。

例如,AddressSanitizer (ASan) 是Google安全研究人員創(chuàng)建的一個(gè)非常有趣的工具,用于識(shí)別C和C++程序中的內(nèi)存訪(fǎng)問(wèn)問(wèn)題。在啟用AddressSanitizer的情況下編譯C/C++應(yīng)用程序的源代碼時(shí),程序?qū)⒃谶\(yùn)行時(shí)被檢測(cè),以識(shí)別并報(bào)告內(nèi)存訪(fǎng)問(wèn)錯(cuò)誤(不適合linux+ARM)。

更多參考: https://sergioprado.blog/finding-memory-bugs-with-addresssanitizer/。

另一個(gè)例子是ASLR(地址空間布局隨機(jī)化),這是一種計(jì)算機(jī)安全技術(shù),可隨機(jī)排列進(jìn)程關(guān)鍵數(shù)據(jù)區(qū)域(文本、堆棧、堆、庫(kù)等)的地址空間位置。因此,如果你關(guān)心嵌入式 Linux 設(shè)備的安全性,就應(yīng)該啟用ASLR,至少是在Linux內(nèi)核中。

Valgrind是另一個(gè)非常有用的工具,可以幫助檢測(cè)內(nèi)存相關(guān)問(wèn)題,如泄露和數(shù)據(jù)競(jìng)賽。

當(dāng)然,這其中也有取舍。雖然這些工具可以在運(yùn)行時(shí)識(shí)別錯(cuò)誤和安全漏洞,但它們可能會(huì)影響應(yīng)用程序的性能,并增加調(diào)試系統(tǒng)的難度。

此外,要使用這些工具發(fā)現(xiàn)錯(cuò)誤,還必須確保存在錯(cuò)誤的代碼部分能夠運(yùn)行。更好的辦法是,應(yīng)用程序的測(cè)試覆蓋率應(yīng)接近100%。模糊測(cè)試工具可以幫助實(shí)現(xiàn)這一點(diǎn)。

11 模糊測(cè)試工具

模糊測(cè)試是一種自動(dòng)化軟件測(cè)試技術(shù),包括提供無(wú)效、意外或隨機(jī)數(shù)據(jù)作為程序的輸入。

然后監(jiān)控程序是否出現(xiàn)異常,如崩潰、內(nèi)置代碼斷言失敗或潛在的內(nèi)存泄漏。

目前有很多免費(fèi)的開(kāi)源模糊測(cè)試工具,包括AF(美國(guó)模糊測(cè)試循環(huán))和 syzkaller(Linux 內(nèi)核模糊測(cè)試工具 https://github.com/google/syzkaller)。

這確實(shí)是安全研究人員和威脅行為者用來(lái)查找軟件安全漏洞的工具。有時(shí),他們甚至自己編寫(xiě)模糊工具,而不是使用流行的框架。這需要付出代價(jià),因?yàn)橐恍┌踩芯咳藛T通過(guò)BugBounty平臺(tái)發(fā)現(xiàn)軟件中的漏洞,賺取了數(shù)百萬(wàn)美元(https://www.zdnet.com/article/seven-hackers-have-now-made-a-million-dollars-each-from-bug-bounties-says-hackerone/ )。

12 權(quán)限

減少漏洞利用的一種方法是不使用root(超級(jí)用戶(hù))權(quán)限運(yùn)行程序!你應(yīng)該利用操作系統(tǒng)的訪(fǎng)問(wèn)控制機(jī)制,使用非特權(quán)用戶(hù)運(yùn)行進(jìn)程,并在只允許訪(fǎng)問(wèn)運(yùn)行所需資源的組內(nèi)運(yùn)行進(jìn)程。

這就是所謂的最小權(quán)限原則,也是設(shè)計(jì)安全系統(tǒng)的規(guī)則之一。應(yīng)用程序在運(yùn)行時(shí),應(yīng)僅擁有完成工作所需的權(quán)限。

13 Linux capabilities

Linux capabilities是一種針對(duì)以root權(quán)限運(yùn)行的進(jìn)程的細(xì)粒度訪(fǎng)問(wèn)控制系統(tǒng)。

Linux內(nèi)核將與超級(jí)用戶(hù)相關(guān)的權(quán)限劃分為不同的單元,稱(chēng)為能力,這些能力可以獨(dú)立啟用或禁用。因此,我們的想法是編寫(xiě)一個(gè)能以root 身份運(yùn)行的程序,但只啟用其工作所需的功能。

你可以使用getcap工具列出特定程序運(yùn)行所需的功能:

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep

14 強(qiáng)制訪(fǎng)問(wèn)控制(Mandatory Access Control)

Linux傳統(tǒng)上支持全權(quán)訪(fǎng)問(wèn)控制(DAC Discretionary Access Control)。DAC 是一種訪(fǎng)問(wèn)控制類(lèi)型,它根據(jù)主體和/或所屬組(實(shí)際上就是我們習(xí)慣的用戶(hù)和組標(biāo)志)的身份來(lái)限制對(duì)對(duì)象的訪(fǎng)問(wèn)。

另一種訪(fǎng)問(wèn)控制類(lèi)型稱(chēng)為強(qiáng)制訪(fǎng)問(wèn)控制(MAC)。MAC 指的是一種訪(fǎng)問(wèn)控制類(lèi)型,即操作系統(tǒng)限制主體訪(fǎng)問(wèn)對(duì)象或?qū)?duì)象執(zhí)行某種操作的能力。

MAC是通過(guò)Linux安全模塊(LSM)在內(nèi)核中實(shí)現(xiàn)的,LSM是一個(gè)允許Linux內(nèi)核支持各種計(jì)算機(jī)安全模型的框架。

實(shí)現(xiàn)強(qiáng)制訪(fǎng)問(wèn)控制的兩個(gè)Linux安全模塊是SELinux和AppArmor:

  • SELinux 是最流行(也最復(fù)雜)的MAC實(shí)現(xiàn)之一,最初由美國(guó)國(guó)家安全局開(kāi)發(fā),如今已用于 Android 和 Fedora 等大型項(xiàng)目。
  • AppArmor 也是一種流行且更友好的MAC實(shí)現(xiàn),由Canonical提供支持,并用于Ubuntu和Debian等Linux 發(fā)行版。

因此,如果需要對(duì)進(jìn)程權(quán)限進(jìn)行精細(xì)控制,就應(yīng)該考慮使用MAC機(jī)制。

但有時(shí)限制權(quán)限并不足以保護(hù)系統(tǒng)免受易受攻擊應(yīng)用程序的影響。而沙箱技術(shù)可以用來(lái)緩解這一問(wèn)題。

15 應(yīng)用程序沙箱

沙箱可以將應(yīng)用程序與系統(tǒng)的其他部分隔離開(kāi)來(lái)。

Linux內(nèi)核中最古老的沙箱機(jī)制可能就是chroot。但就安全性而言,它的作用并不大,因?yàn)樗荒芨綦x文件系統(tǒng)。

虛擬化是另一種應(yīng)用程序沙箱的形式,但成本太高,尤其是在嵌入式系統(tǒng)中。

如今,嵌入式Linux中沙箱應(yīng)用程序的兩種可行解決方案是容器和可信執(zhí)行環(huán)境(TEE)。

參考資料

  • 軟件測(cè)試精品書(shū)籍文檔下載持續(xù)更新 https://github.com/china-testing/python-testing-examples 請(qǐng)點(diǎn)贊,謝謝!
  • 本文涉及的python測(cè)試開(kāi)發(fā)庫(kù) 謝謝點(diǎn)贊! https://github.com/china-testing/python_cn_resouce
  • python精品書(shū)籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
  • Linux精品書(shū)籍下載 https://www.cnblogs.com/testing-/p/17438558.html
  • https://sergioprado.blog/introduction-embedded-linux-security-part-2/

16 容器

Linux容器是一個(gè)最小文件系統(tǒng),只包含運(yùn)行特定應(yīng)用程序或一組應(yīng)用程序所需的軟件組件。容器的運(yùn)行與系統(tǒng)的其他部分完全隔離,只有內(nèi)核是共享的。

容器運(yùn)行時(shí)實(shí)現(xiàn)利用了 Linux 內(nèi)核提供的一些功能,包括

  • 命名空間:隔離Linux上進(jìn)程的執(zhí)行(PID、用戶(hù)、網(wǎng)絡(luò)連接、掛載點(diǎn)等)。
  • cgroups:允許按進(jìn)程或進(jìn)程組劃分系統(tǒng)資源(CPU、內(nèi)存、I/O)。
  • seccomp:可限制進(jìn)程可執(zhí)行的系統(tǒng)調(diào)用。

有幾種工具可用于管理Linux中的容器,包括LXC、Systemd-nspawn、Podman 和Docker。

容器本身并不安全,但如果配置得當(dāng),我們可以限制容器內(nèi)每個(gè)進(jìn)程的權(quán)限并控制它們之間的通信,從而減少攻擊面并提高系統(tǒng)的安全性。

與安全模塊(如AppArmor或SELinux)結(jié)合使用,我們可以大大提高系統(tǒng)的安全性。

但在基于容器的系統(tǒng)中,如果內(nèi)核受到攻擊,所有操作系統(tǒng)都將面臨風(fēng)險(xiǎn)。在這種情況下,可信執(zhí)行環(huán)境是另一層安全保護(hù),可以幫助防止這種情況的發(fā)生。

17 可信執(zhí)行環(huán)境

可信執(zhí)行環(huán)境(TEE Trusted Execution Environment)是一種環(huán)境,在這種環(huán)境中,執(zhí)行的代碼和訪(fǎng)問(wèn)的數(shù)據(jù)都是隔離的,并在保密性(任何人都無(wú)法訪(fǎng)問(wèn)數(shù)據(jù))和完整性(任何人都無(wú)法更改代碼及其行為)方面受到保護(hù)。

在具有TEE的系統(tǒng)中,我們有在富執(zhí)行環(huán)境 (REE Rich Execution Environment) 上運(yùn)行的不信任應(yīng)用程序 (UA untrusted applications),以及在可信執(zhí)行環(huán)境 (TEE) 上運(yùn)行的可信應(yīng)用程序 (TA trusted application)。只有在TEE上運(yùn)行的可信應(yīng)用程序才能完全訪(fǎng)問(wèn)主處理器、外設(shè)和內(nèi)存。硬件隔離保護(hù) TA 不受在主操作系統(tǒng)(非安全世界)上運(yùn)行的不信任應(yīng)用程序的影響。

嵌入式 Linux 安全簡(jiǎn)介

我們需要硬件支持來(lái)實(shí)現(xiàn)TEE,這樣就能對(duì)硬件(總線(xiàn)、外設(shè)、內(nèi)存區(qū)域、中斷等)進(jìn)行分區(qū)和隔離,防止不受信任的應(yīng)用程序訪(fǎng)問(wèn)受保護(hù)的資源。大多數(shù)現(xiàn)代處理器都內(nèi)置了這一功能(如 ARM 的TrustZone、RISC-V的MultiZone和Intel SGX)。

我們身邊有很多設(shè)備都在使用可信執(zhí)行環(huán)境,包括智能手機(jī)、機(jī)頂盒、游戲機(jī)和智能電視。有一些商業(yè)TEE 實(shí)現(xiàn),如 Kinibi、QSEE 和 iTrustee,也有一些開(kāi)源實(shí)現(xiàn),如Trusty 和OP-TEE。TEE可以很好地解決沙箱應(yīng)用程序、存儲(chǔ)和管理加密密鑰、存儲(chǔ)和管理憑證和敏感數(shù)據(jù)以及保護(hù)數(shù)字版權(quán)信息等問(wèn)題。

18 更新系統(tǒng)

更新系統(tǒng)應(yīng)在產(chǎn)品開(kāi)發(fā)的早期階段就設(shè)計(jì)好,如有可能,還應(yīng)具備OTA(空中下載 Over-the-Air)功能。

實(shí)施良好的更新系統(tǒng)會(huì)給產(chǎn)品開(kāi)發(fā)帶來(lái)一些真正的挑戰(zhàn),包括通信協(xié)議的安全性、更新過(guò)程的原子性、斷電保護(hù)、帶寬和存儲(chǔ)使用、回滾功能等。

嵌入式 Linux 的更新系統(tǒng)可以采用一些策略,包括

  • 基于應(yīng)用程序:容易實(shí)現(xiàn),但操作系統(tǒng)的其他部分怎么辦?
  • 基于軟件包:更新鏡像很小,但更新是非原子的,軟件包依賴(lài)性可能是個(gè)問(wèn)題。
  • 基于image:使用 A/B 機(jī)制是一個(gè)很好的解決方案,問(wèn)題可能在于帶寬和存儲(chǔ)空間的使用。
  • 基于容器:這是另一個(gè)不錯(cuò)的選擇,有利于實(shí)現(xiàn)原子更新系統(tǒng)、電源故障安全、帶寬使用更少、速度更快、停機(jī)時(shí)間最短、可回滾。

如果要進(jìn)行 OTA 更新,設(shè)備必須有網(wǎng)絡(luò)連接(Wi-Fi、以太網(wǎng)等)。這意味著網(wǎng)絡(luò)接口將增加系統(tǒng)的攻擊面,您需要增加更多層次的安全保護(hù)來(lái)抵御攻擊。

19 網(wǎng)絡(luò)安全

這里的規(guī)則很簡(jiǎn)單:盡可能減少攻擊面。這并不意味著實(shí)施起來(lái)很容易。

例如,關(guān)閉所有不使用/不需要的 TCP/UDP 端口(nmap 等工具可以提供幫助),禁用所有不使用的協(xié)議(如 IPv6、PPP 等),制定防火墻規(guī)則以防止入站/出站連接,防止DoS攻擊,防止端口掃描等。

如果需要與外部設(shè)備通信,一定要使用安全連接(VPN、反向 SSH、TLS、HTTPS 等),遠(yuǎn)程連接最好使用公鑰驗(yàn)證,并禁止以根用戶(hù)身份登錄。

20 小結(jié)

我們討論了一些安全概念、威脅建模、安全啟動(dòng)、代碼和數(shù)據(jù)加密、加密密鑰、密鑰存儲(chǔ)技術(shù)、安全編碼、靜態(tài)分析工具、運(yùn)行時(shí)保護(hù)、模糊工具、權(quán)限、Linux 功能、強(qiáng)制訪(fǎng)問(wèn)控制、沙箱、更新系統(tǒng)和網(wǎng)絡(luò)安全。

嵌入式 Linux 安全簡(jiǎn)介

歸根結(jié)底,沒(méi)有100%安全的系統(tǒng)。攻擊者只需要一個(gè)漏洞就能入侵設(shè)備。這只是我們希望這一過(guò)程有多難、難度有多大的問(wèn)題。

因此,我們?cè)谠O(shè)計(jì)時(shí)應(yīng)考慮到安全性,并注意權(quán)衡利弊。系統(tǒng)應(yīng)該 "足夠安全"。我們應(yīng)遵循良好的安全實(shí)踐,了解可用的技術(shù)和工具,并在需要時(shí)加以使用。

讓我們確保嵌入式 Linux 設(shè)備的安全!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-711706.html

到了這里,關(guān)于嵌入式 Linux 安全簡(jiǎn)介的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式設(shè)備顯示屏相關(guān)概念匯總

    嵌入式設(shè)備顯示屏相關(guān)概念匯總

    LCD 接口:是一種常見(jiàn)的數(shù)字電路接口,支持多種顯示器件,如字符型液晶顯示器和點(diǎn)陣型液晶顯示器等。 VGA 接口:是一種視頻接口標(biāo)準(zhǔn),用于連接顯示器和計(jì)算機(jī)。該接口提供模擬 RGB 信號(hào),支持最高分辨率為 1920x1080。 HDMI 接口:是一種數(shù)字音視頻接口標(biāo)準(zhǔn),用于連接高清

    2024年02月01日
    瀏覽(86)
  • 嵌入式系統(tǒng)——交叉編譯概念與環(huán)境搭建

    嵌入式系統(tǒng)——交叉編譯概念與環(huán)境搭建

    ??本文屬于嵌入式系統(tǒng)的基礎(chǔ)知識(shí),主要介紹編譯過(guò)程和交叉編譯。對(duì)于基于ARM內(nèi)核的微處理器移植操作系統(tǒng),不可避免的需要使用交叉編譯。交叉編譯指的是不同平臺(tái)間編譯程序代碼的操作,不同平臺(tái)有兩方面:(1)不同的操作系統(tǒng);(2)不同的處理器平臺(tái),如ARM和X

    2024年02月10日
    瀏覽(20)
  • 嵌入式學(xué)習(xí)筆記(20) SoC時(shí)鐘系統(tǒng)簡(jiǎn)介

    嵌入式學(xué)習(xí)筆記(20) SoC時(shí)鐘系統(tǒng)簡(jiǎn)介

    什么是時(shí)鐘,SoC為什么需要時(shí)鐘 (1)時(shí)鐘同步工作系統(tǒng)的同步節(jié)拍 (2)SoC內(nèi)部有很多器件,譬如CPU、DRAM控制器、串口、GPIO等內(nèi)部外設(shè),這些東西要彼此協(xié)調(diào)工作,需要一個(gè)同步的時(shí)鐘系統(tǒng)來(lái)指揮。這個(gè)就是SoC的時(shí)鐘系統(tǒng)。 時(shí)鐘一般如何獲得? (1)外部直接輸入時(shí)鐘信號(hào)

    2024年02月09日
    瀏覽(22)
  • 嵌入式科普(5)ARM GNU Toolchain相關(guān)概念和邏輯

    嵌入式科普(5)ARM GNU Toolchain相關(guān)概念和邏輯

    一、目的/概述 二、資料來(lái)源 三、邏輯和包含關(guān)系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相關(guān)概念和邏輯 對(duì)比高集成度的IDE(MDK、IAR等),Linux開(kāi)發(fā)需要自己寫(xiě)Makefile等多種腳本。eclipse、Visual Studio等需要了解預(yù)處理、編譯、匯編、鏈接的過(guò)程,但無(wú)需自己完

    2024年02月03日
    瀏覽(27)
  • 嵌入式學(xué)習(xí)第二十五天?。ňW(wǎng)絡(luò)的概念、UDP編程)

    嵌入式學(xué)習(xí)第二十五天!(網(wǎng)絡(luò)的概念、UDP編程)

    ? ? 可以用來(lái): 數(shù)據(jù)傳輸 、 數(shù)據(jù)共享 ? ? 1. OSI協(xié)議模型: 應(yīng)用層 實(shí)際收發(fā)的數(shù)據(jù) 表示層 發(fā)送的數(shù)據(jù)是否加密 會(huì)話(huà)層 是否建立會(huì)話(huà)連接 傳輸層 數(shù)據(jù)傳輸?shù)姆绞剑〝?shù)據(jù)包,流式) 網(wǎng)絡(luò)層 數(shù)據(jù)的路由(如何從一個(gè)局域網(wǎng)到達(dá)另一個(gè)局域網(wǎng)) 數(shù)據(jù)鏈路層 局域網(wǎng)下如何通信

    2024年03月17日
    瀏覽(30)
  • 嵌入式筆記1.1 ARM Cortex-M3M4簡(jiǎn)介

    嵌入式筆記1.1 ARM Cortex-M3M4簡(jiǎn)介

    目錄 微型計(jì)算機(jī)的硬件共性結(jié)構(gòu)及基本性能指標(biāo) 關(guān)于存儲(chǔ)器的介紹 微型計(jì)算機(jī)的基本性能指標(biāo) 1. 字長(zhǎng) 2. 主頻 3. 存儲(chǔ)容量 4. 外設(shè)擴(kuò)展能力 5. 軟件配置情況 Arm Cortex 系列微處理器系列概述 Arm Cortex-A 系列處理器 Arm Cortex-R 系列處理器 Arm Cortex-M 系列處理器 Cortex-M3 和 Cortex-M4簡(jiǎn)

    2024年03月27日
    瀏覽(35)
  • 嵌入式Linux:如何進(jìn)行嵌入式Linux開(kāi)發(fā)?

    目錄 1、裸機(jī)開(kāi)發(fā) 2、SDK開(kāi)發(fā) 3、驅(qū)動(dòng)開(kāi)發(fā) 3.1、字符設(shè)備驅(qū)動(dòng) 3.2、塊設(shè)備驅(qū)動(dòng) 3.3、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng) 4、應(yīng)用開(kāi)發(fā) 嵌入式Linux開(kāi)發(fā)主要有四種方式:裸機(jī)開(kāi)發(fā)、SDK開(kāi)發(fā)、驅(qū)動(dòng)開(kāi)發(fā)和應(yīng)用開(kāi)發(fā)。 裸機(jī)開(kāi)發(fā)通常指在沒(méi)有操作系統(tǒng)支持的環(huán)境中直接在硬件上運(yùn)行程序的開(kāi)發(fā)。這種開(kāi)發(fā)方

    2024年01月25日
    瀏覽(30)
  • 實(shí)時(shí)嵌入式Linux設(shè)備基準(zhǔn)測(cè)試快速入門(mén)3實(shí)時(shí)嵌入式Linux

    實(shí)時(shí)嵌入式Linux設(shè)備基準(zhǔn)測(cè)試快速入門(mén)3實(shí)時(shí)嵌入式Linux

    計(jì)算機(jī)系統(tǒng)與環(huán)境之間的交互通常是實(shí)時(shí)發(fā)生的,因此,對(duì)于作為計(jì)算機(jī)系統(tǒng)一部分的嵌入式設(shè)備來(lái)說(shuō),有關(guān)實(shí)時(shí)操作系統(tǒng)的討論也是一個(gè)重要話(huà)題。 本章將討論實(shí)時(shí)系統(tǒng)的特點(diǎn),介紹在Linux嵌入式設(shè)備上實(shí)現(xiàn)實(shí)時(shí)性的主要方法。具體來(lái)說(shuō),本章將重點(diǎn)分析PREEMPT_RT內(nèi)核補(bǔ)丁,

    2024年02月15日
    瀏覽(25)
  • 關(guān)于嵌入式開(kāi)發(fā)的一些信息匯總:嵌入式C開(kāi)發(fā)人員、嵌入式系統(tǒng)Linux

    關(guān)于嵌入式開(kāi)發(fā)的一些信息匯總:嵌入式C開(kāi)發(fā)人員、嵌入式系統(tǒng)Linux

    這篇文章是關(guān)于嵌入式開(kāi)發(fā)的一些基本信息,供想入行的人參考。有一些作者本人的想法,以及來(lái)自外網(wǎng)的大拿的文章翻譯而來(lái),原文鏈接在此Learning Linux for embedded systems,再次感謝,支持原創(chuàng)。 普通C開(kāi)發(fā)人員和嵌入式C開(kāi)發(fā)人員之間的 基本區(qū)別在于 ,因?yàn)榍度胧紺程序被設(shè)

    2024年02月03日
    瀏覽(129)
  • 嵌入式開(kāi)發(fā):?jiǎn)纹瑱C(jī)嵌入式Linux學(xué)習(xí)路徑

    嵌入式開(kāi)發(fā):?jiǎn)纹瑱C(jī)嵌入式Linux學(xué)習(xí)路徑

    SOC(System on a Chip)的本質(zhì)區(qū)別在于架構(gòu)和功能。低端SOC如基于Cortex-M架構(gòu)的芯片,如STM32和NXP LPC1xxx系列,不具備MMU(Memory Management Unit),適用于輕量級(jí)實(shí)時(shí)操作系統(tǒng)如uCOS和FreeRTOS。高端SOC如基于Cortex-A架構(gòu)的芯片,如三星、高通、飛卡、全志和瑞芯微等,具備MMU,支持虛擬內(nèi)

    2024年02月15日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包