“爸爸媽媽,天空為什么是藍(lán)色的?”
在您思索是為孩子講解空氣折射率的知識(shí)還是轉(zhuǎn)移他的注意力時(shí),您已經(jīng)心知肚明,無(wú)論您怎樣回答,孩子都會(huì)天真地繼續(xù)追問:“為什么呢?”等問題,直到您完全失去耐心。如果您有這種感受,那么歡迎來(lái)到保護(hù)物聯(lián)網(wǎng) (IoT) 的世界。這個(gè)世界里沒有既定的標(biāo)準(zhǔn),也沒有絕對(duì)的錯(cuò)誤。就像孩子提出的問題一樣,我們可能只是閑聊或喚醒科學(xué)好奇心,至于何時(shí)停下來(lái),則由作為系統(tǒng)設(shè)計(jì)師的您做主。就像上面的引導(dǎo)性問題一樣,這個(gè)世界在很大程度上取決于問題的癥結(jié)。
問題的癥結(jié)
我們很快就會(huì)看到,保護(hù)物聯(lián)網(wǎng)設(shè)備將可能成為一個(gè)需要投入無(wú)限成本,卻又永無(wú)止境的問題(圖 1)。不過(guò),ARM* 物聯(lián)網(wǎng)服務(wù)集團(tuán)副總裁 Ian Ferguson 在最近的物聯(lián)網(wǎng)設(shè)備安全峰會(huì)上表示,大多數(shù)物聯(lián)網(wǎng)設(shè)備均有著非常嚴(yán)苛的成本目標(biāo)。
圖 1.即便多個(gè)安全層也可能無(wú)法為物聯(lián)網(wǎng)終端設(shè)備提供全面保護(hù)。
Ferguson 曾警告:“經(jīng)濟(jì)學(xué)原理已經(jīng)不再適用。安全的芯片不可能僅僅靠 1 美元就得到解決。”
因此,物聯(lián)網(wǎng)安全領(lǐng)域的第一個(gè)問題就是“它對(duì)您有何價(jià)值?”這完全取決于問題的癥結(jié)。
可惜這個(gè)問題并不簡(jiǎn)單,并不是一個(gè)可以根據(jù)設(shè)備的預(yù)期用途給出回答的問題。Ferguson 舉了一個(gè)利用水族箱控制器中的漏洞攻擊某賭場(chǎng)安全網(wǎng)絡(luò)的例子。您必須要問的不是物聯(lián)網(wǎng)設(shè)備應(yīng)該做什么,而是它能夠做什么。它可以使飛機(jī)上的副翼轉(zhuǎn)向嗎?它能夠操作電廠的高壓開關(guān)嗎?它能夠觸發(fā)不必要的維護(hù)程序嗎?它可以避開防火墻嗎?
物聯(lián)網(wǎng)設(shè)備安全的管理原則并不是使設(shè)備無(wú)懈可擊,您做不到這一點(diǎn)。而是要讓狡猾的攻擊者明白,攻擊付出的代價(jià)大于收益。作出這個(gè)決定不僅需要了解被攻擊的設(shè)備能夠帶來(lái)哪些損害,也需要仔細(xì)研究物聯(lián)網(wǎng)設(shè)備中的哪些部分需要保護(hù)以及如何保護(hù)。
要點(diǎn)
假設(shè)物聯(lián)網(wǎng)設(shè)備中有四種對(duì)象:硬件、軟件和固件、數(shù)據(jù)以及進(jìn)出設(shè)備的消息。每當(dāng)設(shè)備使用其中一個(gè)對(duì)象時(shí),它會(huì)做出三個(gè)假設(shè):
對(duì)象來(lái)自可信來(lái)源
對(duì)象沒有被篡改
對(duì)象將按照系統(tǒng)設(shè)計(jì)師的預(yù)期方式運(yùn)行
每次使用時(shí),設(shè)備可以信任這些假設(shè),也可以測(cè)試它們。
也許舉個(gè)例子很合適。假設(shè)我們有一個(gè)物聯(lián)網(wǎng)設(shè)備管理高壓交流電源開關(guān)上的一組傳感器,并控制開關(guān)位置。根據(jù)這一功能描述,設(shè)備可能是一個(gè)非常簡(jiǎn)單的微控制器 (MCU)。現(xiàn)在我們有一個(gè)命令到達(dá)設(shè)備的網(wǎng)絡(luò)端口,告訴控制器關(guān)閉開關(guān)。您希望控制器讀取命令并為執(zhí)行器供電,當(dāng)開關(guān)閉合時(shí),通過(guò)網(wǎng)絡(luò)端口確認(rèn)消息的新狀態(tài)。
我們來(lái)回顧一下這個(gè)場(chǎng)景,從安全設(shè)計(jì)的角度來(lái)看看。首先,命令到達(dá)。您有一些選擇:您是否相信這個(gè)命令是未經(jīng)過(guò)修改的真實(shí)命令,或者說(shuō)您是否對(duì)它進(jìn)行了驗(yàn)證?您是否相信它的行為,或者您是否對(duì)它進(jìn)行監(jiān)控?
如果您認(rèn)為這個(gè)命令是合法的,則表示您信任數(shù)據(jù)中心的遠(yuǎn)程應(yīng)用(可能是公有云),并且互聯(lián)網(wǎng)的所有部分恰好位于消息的傳遞路徑上。有一些情形可以證明這種信任是正確的。一種情形可能是錯(cuò)誤命令的結(jié)果無(wú)關(guān)緊要——當(dāng)然不是對(duì)電源開關(guān)無(wú)關(guān)緊要,而可能是簡(jiǎn)單的消費(fèi)玩具。另一種情形可能是設(shè)備沒有直接聯(lián)網(wǎng),而是通過(guò)安全的連接連到可信中心。否則,您需要對(duì)命令進(jìn)行驗(yàn)證。
幸運(yùn)的是,有一種使用公鑰加密進(jìn)行驗(yàn)證的合理方法(圖 2)。這種技術(shù)使用一對(duì)加密密鑰,其中一個(gè)密鑰只有持有者知曉,另一個(gè)密鑰可供所有人使用。任何一個(gè)密鑰的持有者都可以對(duì)使用匹配密鑰加密的任何內(nèi)容進(jìn)行解密。因此對(duì)我們來(lái)說(shuō),服務(wù)器可以創(chuàng)建其打算發(fā)送的命令的散列,使用其私鑰對(duì)其進(jìn)行加密,然后將命令和加密的散列發(fā)送到您的設(shè)備。接下來(lái)您自己可以創(chuàng)建命令的散列,然后使用您的公鑰對(duì)服務(wù)器的加密版本進(jìn)行解密。然后您可以將自己創(chuàng)建的散列與解密的散列進(jìn)行比較。如果這兩者相同,那么您可以比較肯定的是:
私鑰的持有者發(fā)送了命令(因?yàn)槟墓€成功對(duì)其進(jìn)行了解密)
這個(gè)命令沒有修改過(guò),因?yàn)閭鬏斍暗纳⒘泻徒邮蘸蟮纳⒘衅ヅ洹?/p>
圖 2.公鑰加密可幫助設(shè)備驗(yàn)證消息
事實(shí)上,您不需要散列,您可以對(duì)整個(gè)命令進(jìn)行加密和解密。但公鑰算法需要大量計(jì)算資源,所以缺少硬件加密加速器和大量?jī)?nèi)存的設(shè)備會(huì)盡量縮短其必須處理的字符串的長(zhǎng)度。除非常簡(jiǎn)短的命令之外,散列將比任何命令短很多。
您已經(jīng)鑒定和驗(yàn)證了命令。您相信它是合法的。但為什么呢?您怎么知道自己使用的命令和公鑰并非來(lái)自攻擊者,而是來(lái)自您的服務(wù)器?因?yàn)橛?a target="_blank">認(rèn)證機(jī)構(gòu)。認(rèn)證機(jī)構(gòu)是一個(gè)可信的第三方,已對(duì)公鑰發(fā)起者的身份進(jìn)行了驗(yàn)證。但您為何信任認(rèn)證機(jī)構(gòu)的證書呢?因?yàn)槟褂孟嗤墓€算法(包含機(jī)構(gòu)發(fā)給您的密鑰)對(duì)證書進(jìn)行了驗(yàn)證。但為什么…好了,您肯定明白了。除非您選擇信任某方及其發(fā)給您的密鑰,否則這個(gè)問題鏈將一直循環(huán)下去。這個(gè)問題有時(shí)可以歸結(jié)為一個(gè)人將文件交給另一個(gè)人。
相信自己
到這里,偏執(zhí)的人可能會(huì)認(rèn)識(shí)到,我們?nèi)匀辉谧鲆恍┗\統(tǒng)的假設(shè)。如果有人篡改了您的加密應(yīng)用代碼或者操作系統(tǒng),欺騙您接受這個(gè)命令呢?如果有人更改了您的公鑰文件夾呢?或者更糟糕的情況,如果有人在您的硬件中置入了一個(gè)隱秘的后門呢?
如果風(fēng)險(xiǎn)很小,或者如果您不了解高價(jià)值系統(tǒng)曾遭遇過(guò)哪些攻擊,那么上面這些問題聽起來(lái)可能有點(diǎn)異想天開。畢竟,誰(shuí)會(huì)對(duì)不值錢的消費(fèi)類設(shè)備上的應(yīng)用代碼進(jìn)行篡改?但確實(shí)有人攻擊了成千上萬(wàn)臺(tái)物聯(lián)網(wǎng)嬰兒監(jiān)控器,創(chuàng)建了一個(gè)僵尸網(wǎng)絡(luò),然后用它發(fā)動(dòng)了歷史上最具破壞性的拒絕服務(wù)攻擊之一。這并不是異想天開:即使您不是飛機(jī)控制系統(tǒng)或核電站的設(shè)計(jì)師,您也需要考慮這些問題。
第一次接收和驗(yàn)證對(duì)象時(shí),驗(yàn)證軟件和固件可以像按照您信任的散列檢查對(duì)象陣列那樣簡(jiǎn)單。更新必須按照針對(duì)我們命令的上述流程進(jìn)行驗(yàn)證。每次加載操作系統(tǒng)和應(yīng)用代碼時(shí),許多安全系統(tǒng)都會(huì)執(zhí)行這一任務(wù)。但您為什么相信自己保存的散列呢?對(duì)于這個(gè)問題,您為什么相信自己的散列函數(shù)呢?最終,這種回歸將我們引向了一個(gè)重要的概念:信任根。
解決方案根
現(xiàn)在,許多 CPU 架構(gòu)都包含一種安全操作模式,在這種模式下,您可以確信代碼的可信性、數(shù)據(jù)的正確性并且所有任務(wù)都得到適當(dāng)授權(quán)。這種模式可讓您對(duì)設(shè)備的加密和身份驗(yàn)證流程充滿信心,并為您提供一種存儲(chǔ)和保護(hù)密鑰及證書的方法,使攻擊者更難以更改它們。
實(shí)施信任根對(duì) CPU 設(shè)計(jì)師而言并不是一件簡(jiǎn)單的工作:他們面臨著與用戶相同的無(wú)限回歸問題。信任根必須從可信硬件著手,啟動(dòng)可信代碼。現(xiàn)在的可信硬件是一個(gè)相對(duì)的術(shù)語(yǔ)。如果您在設(shè)計(jì)一些無(wú)害的東西,這可能意味著您從一家大型廠商購(gòu)買了微控制器單元 (MCU)。如果您正在研究用于核武器的起爆裝置,這可能意味著您使用嚴(yán)格的正規(guī)驗(yàn)證和功能安全標(biāo)準(zhǔn)來(lái)自己設(shè)計(jì)芯片,監(jiān)督貴組織所控制或檢查的國(guó)內(nèi)工廠的芯片制造,并納入到設(shè)計(jì)防篡改、旁路攻擊防護(hù)和物理上不可克隆的功能 (PUF),從而為芯片提供不可復(fù)制的秘密 ID 號(hào)。然后您就可以信任硬件了。
安全啟動(dòng)可能同樣具有挑戰(zhàn)性。您必須確保啟動(dòng)代碼是未經(jīng)過(guò)修改的真實(shí)代碼。我們當(dāng)然可以使用與輸入命令相同的解決方案:公鑰解密和散列。我們?nèi)绾卧诩虞d代碼之前解密簽名并計(jì)算散列值?
在大型系統(tǒng)中,答案是硬件安全模塊 (HSM)。圖 3 是一個(gè)受篡改和入侵檢測(cè)保護(hù)的電路板或安全框,其中包含安全密鑰存儲(chǔ)和通常基于硬件的可信加密引擎。HSM 監(jiān)督安全啟動(dòng)流程,在啟用前對(duì)每個(gè)代碼模塊進(jìn)行驗(yàn)證。
圖 3.硬件安全模塊包含在防篡改安全模塊中進(jìn)行身份驗(yàn)證和加密/解密所需的所有硬件和代碼。
但在 MCU 中呢?行業(yè)仍在研究如何將盒級(jí) HSM 簡(jiǎn)化為低成本芯片上的 IP 模塊。Ferguson 認(rèn)為這是不可能的。其他人則認(rèn)為,對(duì)于大多數(shù)系統(tǒng)而言,較簡(jiǎn)單的措施(例如將開機(jī)密碼和密碼保存在片上非易失性內(nèi)存中)就足夠了。
無(wú)論您如何保護(hù)啟動(dòng)過(guò)程,都有一個(gè)信任根的第三個(gè)基本組件:內(nèi)存保護(hù)。對(duì)于可信代碼、密鑰存儲(chǔ)、系統(tǒng)軟件和數(shù)據(jù)結(jié)構(gòu)而言,必須只能從信任根內(nèi)部進(jìn)行讀取或修改的內(nèi)存區(qū)。這需要一個(gè)硬件內(nèi)存保護(hù)單元,它本身只能在信任根內(nèi)進(jìn)行設(shè)置。顯然,這個(gè)內(nèi)存保護(hù)單元將不得不初始化為已啟用安全啟動(dòng)的狀態(tài)。
實(shí)際上,系統(tǒng)會(huì)以這種方式運(yùn)行。在初始化時(shí),安全啟動(dòng)進(jìn)程將在內(nèi)存中創(chuàng)建一個(gè)可信區(qū)域,并將其加載到可信的代碼和數(shù)據(jù)中,包括加密例程、可信的輕量級(jí)管理程序、加密密鑰和證書。接下來(lái),這一管理程序?qū)⒁约用苄问郊虞d操作系統(tǒng)和應(yīng)用代碼,為每個(gè)任務(wù)分配物理保護(hù)的內(nèi)存區(qū)域,并在激活之前使用散列和公鑰方法對(duì)每個(gè)代碼塊進(jìn)行解密和驗(yàn)證。通過(guò)這種方式,您可以比較肯定設(shè)備中的所有活動(dòng)代碼都來(lái)自可信來(lái)源且未被污染。內(nèi)存保護(hù)硬件可確保即使出現(xiàn)問題,任何任務(wù)都不能讀取或?qū)懭肫渌蝿?wù)的代碼或數(shù)據(jù)。
最后一個(gè)功能還可以讓您的設(shè)備運(yùn)行您不信任的代碼。內(nèi)存保護(hù)功能可以保證即使惡意代碼也無(wú)法從其指定的區(qū)域分支出來(lái),破壞其鄰居,或在未經(jīng)管理程序同意的情況下執(zhí)行 I/O 操作。
那么,合法應(yīng)用如何執(zhí)行 I/O 操作呢?當(dāng)然是通過(guò)系統(tǒng)調(diào)用。但您還有其他選擇。所有應(yīng)用都經(jīng)過(guò)了身份驗(yàn)證,可以讓它們按照自己的方式執(zhí)行系統(tǒng) I/O 調(diào)用。或者,您可能需要 I/O 請(qǐng)求和任務(wù)間通信,以便進(jìn)入管理程序進(jìn)行審批。然后管理程序可以檢查規(guī)則,以查看請(qǐng)求是否適合于請(qǐng)求任務(wù)。管理程序甚至可以向證書證明其有權(quán)提出請(qǐng)求的任務(wù)提出要求。
活動(dòng)監(jiān)控器
所有這些措施都是為了防止被篡改的代碼、數(shù)據(jù)或命令進(jìn)入設(shè)備,或防止它們?cè)谶M(jìn)入設(shè)備后執(zhí)行非法操作。但在關(guān)鍵系統(tǒng)中,您可能還需要更高級(jí)別的安全性:主動(dòng)監(jiān)控設(shè)備行為。
這個(gè)概念很簡(jiǎn)單:可信源知曉設(shè)備應(yīng)該執(zhí)行和不應(yīng)該執(zhí)行的操作,并監(jiān)控設(shè)備的行為。簡(jiǎn)單而言,這個(gè)監(jiān)控器可能是一個(gè)代碼塊,甚至是一個(gè)在設(shè)備可信區(qū)域運(yùn)行的硬件狀態(tài)機(jī)。當(dāng)您可以通過(guò)一組緊湊的規(guī)則定義正確的行為時(shí),這種方法是有效的。內(nèi)存保護(hù)實(shí)際上就是一個(gè)例子:一組規(guī)則決定哪些代碼可以訪問內(nèi)存中的哪些地址,保護(hù)單元的硬件執(zhí)行這些規(guī)則。
隨著規(guī)則變得越來(lái)越復(fù)雜,通過(guò)在可信軟件中評(píng)估的規(guī)則進(jìn)行監(jiān)控可能不再可行。或者系統(tǒng)行為可能過(guò)于復(fù)雜,無(wú)法成功捕捉一組規(guī)則。解決這個(gè)問題的一個(gè)建議是使用機(jī)器學(xué)習(xí)。原則上,您可以通過(guò)訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別優(yōu)劣行為,而不必制定規(guī)則。然后網(wǎng)絡(luò)可以不斷評(píng)估系統(tǒng)的行為,并在看到不良行為時(shí)發(fā)出警報(bào)。
但深度學(xué)習(xí)網(wǎng)絡(luò)也有自己的問題。在如今的就業(yè)市場(chǎng)中,具備所需設(shè)計(jì)和培訓(xùn)技能的人才很難找到。將監(jiān)督式學(xué)習(xí)所需的成千上萬(wàn)個(gè)標(biāo)記示例組合起來(lái)很難,甚至不可能。構(gòu)建示例集的過(guò)程容易受到攻擊:犯罪分子可能會(huì)導(dǎo)致您的示例集存在偏見,從而導(dǎo)致網(wǎng)絡(luò)忽略特定攻擊。最后,在推理模式下運(yùn)行訓(xùn)練網(wǎng)絡(luò)所需的計(jì)算和內(nèi)存資源非常重要。這對(duì)于 1 美元的 MCU 來(lái)說(shuō)是不可能的。
對(duì)于大多數(shù)關(guān)鍵系統(tǒng)而言,異構(gòu)冗余是異乎尋常的一個(gè)步驟。在這種方法中,您有三個(gè)不同的系統(tǒng)(如果可以在運(yùn)行期間暫停和禁用設(shè)備,則有兩個(gè)系統(tǒng)),每個(gè)系統(tǒng)專為設(shè)備的執(zhí)行而設(shè)計(jì)和編程。每個(gè)系統(tǒng)都使用不同的硬件,由使用不同算法和庫(kù)的不同團(tuán)隊(duì)進(jìn)行編程。
這三個(gè)系統(tǒng)并行運(yùn)行,通過(guò)多數(shù)投票的方式來(lái)確定設(shè)備的行為。若要成功破解設(shè)備,攻擊者必須同時(shí)攻擊這兩個(gè)完全不同的系統(tǒng)。這樣煞費(fèi)苦心的攻擊可能聽起來(lái)很荒唐,但一些軍事和其他危險(xiǎn)設(shè)備可能需要這樣的冗余系統(tǒng)。
付款
我們已經(jīng)看過(guò),開發(fā)安全的物聯(lián)網(wǎng)設(shè)備可能需要可信的硬件和符合功能安全要求的方法。這可能是指加密硬件加速、防篡改的密鑰存儲(chǔ)位置、可信操作模式、實(shí)時(shí)設(shè)備監(jiān)視器,甚至是完全冗余。
但這些對(duì)于 1 美元的 MCU 沒有任何意義。怎么辦呢?
有些人會(huì)忽視這個(gè)問題或提供一些令牌,從而輕松擊敗安全攻擊。其他人會(huì)將安全責(zé)任上報(bào)到物聯(lián)網(wǎng)中心,為端點(diǎn)終端設(shè)備提供安全庇護(hù),將物聯(lián)網(wǎng)設(shè)計(jì)轉(zhuǎn)化為邊緣計(jì)算網(wǎng)絡(luò)。隨著潛在銷量的增長(zhǎng)以及人們對(duì)威脅現(xiàn)狀的了解,仍有其他供應(yīng)商會(huì)利用先進(jìn)工藝節(jié)點(diǎn)的大量晶體管來(lái)解決問題。在 7 納米時(shí),帶某種內(nèi)部 HSM 的三冗余 MCU 是可行的。
但 ARM 的 Ferguson 的觀點(diǎn)更激進(jìn)一些。在設(shè)備安全峰會(huì)上,F(xiàn)erguson 主張預(yù)先了解保護(hù)物聯(lián)網(wǎng)設(shè)備的真實(shí)成本并改變行業(yè)的業(yè)務(wù)模式,以便將成本分?jǐn)偟秸麄€(gè)供應(yīng)鏈。這可以通過(guò)評(píng)估與物聯(lián)網(wǎng)設(shè)備通信的系統(tǒng)的版稅或關(guān)稅來(lái)完成。或者半導(dǎo)體廠商可以從已完成的物聯(lián)網(wǎng)系統(tǒng)所帶來(lái)的收入或成本節(jié)省優(yōu)勢(shì)中獲益。也許更有可能的是,安全設(shè)備只需 25 美元(而非 1 美元),真正安全的系統(tǒng)將由垂直一體化公司部署,這些公司可以將設(shè)備成本并入到系統(tǒng)成本中,然后從服務(wù)合同、維護(hù)以及系統(tǒng)數(shù)據(jù)的價(jià)值中收回成本。
與舊的 MCU 商用半導(dǎo)體市場(chǎng)相比,這是一個(gè)全新的世界。但這個(gè)世界面臨著更多威脅,遲早要認(rèn)真對(duì)待。
-
ARM
+關(guān)注
關(guān)注
134文章
9054瀏覽量
366827 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2903文章
44284瀏覽量
371308 -
物聯(lián)網(wǎng)安全
+關(guān)注
關(guān)注
1文章
111瀏覽量
17223
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論