病毒和嵌入式設(shè)計(jì)

不管你喜不喜歡,在以網(wǎng)絡(luò)為中心的計(jì)算環(huán)境中,嵌入式設(shè)計(jì)人員必須接受它的開(kāi)放性。這就是問(wèn)題所在。與設(shè)計(jì)人員可以通過(guò)鎖門來(lái)控制環(huán)境的傳統(tǒng)環(huán)境不同,在他的應(yīng)用程序必須居住的新房子裡,門是打開(kāi)的、未上鎖的或不存在的。 一個(gè)開(kāi)放的環(huán)境有很多含義,但我一直在思考的一個(gè)是計(jì)算機(jī)病毒問(wèn)題。支持 Internet 的嵌入式設(shè)備、信息設(shè)備或嵌入式 Internet 設(shè)備被感染的可能性有多大?如果有人被感染,設(shè)備中包含的軟件對(duì)它有什麼保護(hù)措施? 在不久的將來(lái),可能侵入互聯(lián)網(wǎng)訪問(wèn)設(shè)備的病毒數(shù)量將相當(dāng)少。首先,病毒創(chuàng)建者不僅需要具備使用編寫應(yīng)用程序的語(yǔ)言進(jìn)行編程的知識(shí),還必須了解特定的操作系統(tǒng)及其應(yīng)用程序編程接口。Windows 之所以成為如此多的目標(biāo)是因?yàn)樗鼰o(wú)處不在並且很多人都了解它。在以網(wǎng)絡(luò)為中心的計(jì)算設(shè)備市場(chǎng)上,沒(méi)有一個(gè)標(biāo)準(zhǔn)的操作系統(tǒng)和 API,只有兩個(gè)例外,因此知識(shí)足以構(gòu)建感染特定操作系統(tǒng)的病毒的人數(shù)非常少。 其中一個(gè)例外,Java 及其虛擬機(jī) (VM) 的設(shè)計(jì)目標(biāo)是成為一個(gè)獨(dú)立於處理器和操作系統(tǒng)的通用平臺(tái)(一次編寫,隨處運(yùn)行)。雖然 Java 或多或少與操作系統(tǒng)無(wú)關(guān),但很少出現(xiàn) Java 病毒的一個(gè)原因是該語(yǔ)言相對(duì)較新,並且沒(méi)有很多程序員具備編寫這些病毒的專業(yè)知識(shí)。其次,因?yàn)樗鼜囊婚_(kāi)始就是為了簡(jiǎn)化可下載到任何系統(tǒng)的小程序的創(chuàng)建而設(shè)計(jì)的,所以 Sun 投入了大量的工作來(lái)使其盡可能不受病毒的影響。 然而,另一個(gè)例外,我不確定。Windows CE 仍然是一個(gè)相對(duì)較新的操作系統(tǒng),儘管微軟通過(guò)市場(chǎng)數(shù)據(jù)進(jìn)行了多次調(diào)整,使我們相信它是以網(wǎng)絡(luò)為中心的消費(fèi)設(shè)備市場(chǎng)上的領(lǐng)先操作系統(tǒng),但它的部署還沒(méi)有 Java 那麼廣泛. 但是,它具有與桌面 Windows 相同的 API,並且許多操作系統(tǒng)功能與其較早的桌面兄弟相同。因此,在桌面、服務(wù)器或工作站上習(xí)得竅門的病毒製造者可以將注意力轉(zhuǎn)移到家族的新成員 WinCE 上。 大多數(shù)當(dāng)前以移動(dòng)網(wǎng)絡(luò)為中心的計(jì)算設(shè)備蠕蟲(chóng)和病毒都針對(duì)基於 PalmOS 的設(shè)備,而不是基於 CE 的設(shè)備,因?yàn)?Palm 設(shè)備存在的時(shí)間更長(zhǎng)並且目前佔(zhàn)據(jù)了市場(chǎng)的大部分。在過(guò)去的一年中,四種感染影響了 Palm 設(shè)備:Liberty Crack、Phage、Vapor 和 Visual Basic 腳本蠕蟲(chóng)。在同一時(shí)間段內(nèi),幾乎每週都有新病毒出現(xiàn)在桌面上。 但是,即使業(yè)界能夠?qū)⒉《靖腥拘乱淮跃W(wǎng)絡(luò)為中心的設(shè)備的可能性降低到 Windows 系統(tǒng)上的百分之一的百分之一,這些數(shù)字仍然對(duì)我們不利。 目前大約有 1 億互聯(lián)網(wǎng)用戶,其中 5500 萬(wàn)人每天至少訪問(wèn) Internet 和萬(wàn)維網(wǎng) 2 到 3 次,其中大部分來(lái)自桌面系統(tǒng)。到本世紀(jì)末,以網(wǎng)絡(luò)為中心的計(jì)算設(shè)備的種類可能至少增長(zhǎng)十倍。鑑於可能有數(shù)十種支持互聯(lián)網(wǎng)的嵌入式設(shè)備充斥著我們的生活,訪問(wèn)網(wǎng)絡(luò)的用戶和設(shè)備的數(shù)量可能會(huì)猛增。 即使我們假設(shè)被感染的設(shè)備數(shù)量非常少,比如百分之一的十分之一,考慮到互聯(lián)網(wǎng)用戶群體的潛在巨大規(guī)模,這仍然是一個(gè)巨大的系統(tǒng)數(shù)量。 嵌入式開(kāi)發(fā)人員以及與我交談過(guò)的工具和操作系統(tǒng)供應(yīng)商進(jìn)行了大致相同的計(jì)算。毫不奇怪,他們所有人都回頭看看他們的工具包和操作系統(tǒng)中有什麼可能有用。 從平面 RTOS 到具有內(nèi)存管理、分段和保護(hù)功能的更精細(xì)、分層的 OS 實(shí)現(xiàn)的轉(zhuǎn)變提供了一些希望。內(nèi)存分段允許將操作系統(tǒng)和每個(gè)應(yīng)用程序分離到其自己受保護(hù)的內(nèi)存地址空間中,因此如果一個(gè)應(yīng)用程序失敗,它不會(huì)導(dǎo)致其他應(yīng)用程序或操作系統(tǒng)崩潰。一些操作系統(tǒng)非常細(xì)粒度,允許保護(hù)單個(gè)進(jìn)程和線程。保護(hù)系統(tǒng)免受設(shè)計(jì)不良或錯(cuò)誤應(yīng)用程序侵害的相同機(jī)制也可以在病毒恰好進(jìn)入時(shí)保護(hù)系統(tǒng)。 然而,內(nèi)存保護(hù)和分段功能在許多方面都是昂貴的。內(nèi)存管理需要更多的內(nèi)存,它通常會(huì)減慢處理器的運(yùn)行速度。它還推高了正在開(kāi)發(fā)的系統(tǒng)的成本。具有內(nèi)存管理的處理器比沒(méi)有它的處理器更昂貴。更多的內(nèi)存和更多的內(nèi)存訪問(wèn)也會(huì)推高功耗。 雖然內(nèi)存保護(hù)的這些方面在臺(tái)式機(jī)和服務(wù)器以及路由器和交換機(jī)中是可以接受的,但它排除了在許多需要小內(nèi)存佔(zhàn)用、低功耗和低功耗的以網(wǎng)絡(luò)為中心的計(jì)算應(yīng)用程序中使用此類傳統(tǒng)技術(shù)。成本。因此,我一直在尋找現(xiàn)有嵌入式軟件和硬件的功能,這些功能可以轉(zhuǎn)化為開(kāi)發(fā)人員在對(duì)抗?jié)撛诓《救肭址矫娴膬?yōu)勢(shì),但不需要太多內(nèi)存或處理器開(kāi)銷。 其中一項(xiàng)功能是版本標(biāo)記,它在 Microware 的 OS9 和其他一些操作系統(tǒng)中實(shí)現(xiàn)。版本標(biāo)記使用錯(cuò)誤檢查代碼方案來(lái)確保驅(qū)動(dòng)程序的正確版本與另一個(gè)軟件組件的正確版本相關(guān)聯(lián)。特定版本操作系統(tǒng)中的所有組件(或設(shè)計(jì)用於它的組件)具有相同的代碼序列。因此,當(dāng)病毒侵入系統(tǒng)時(shí),將自身附加到或替換某些組件的行為會(huì)更改組件的代碼,以便在完成錯(cuò)誤檢查後它不再匹配。 其他操作系統(tǒng),如Green Hill的Integrity,除了內(nèi)存分段,還有時(shí)空域保護(hù)。即使使用盡可能小的操作系統(tǒng)實(shí)現(xiàn),這最後兩個(gè)功能仍然可供內(nèi)存受限應(yīng)用程序中的開(kāi)發(fā)人員使用。用於限制編寫錯(cuò)誤的應(yīng)用程序可能造成的損害,並防止其占用不應(yīng)佔(zhàn)用的內(nèi)存空間或停留時(shí)間過(guò)長(zhǎng),此類功能也可用於抵禦病毒。 一些針對(duì)面向消費(fèi)者的以網(wǎng)絡(luò)為中心的計(jì)算設(shè)備領(lǐng)域的新處理器也具有內(nèi)置的功能,可以直接或間接地幫助處理病毒。例如,aJile Corp. 的新處理器在矽片中不僅實(shí)現(xiàn)了一個(gè),而且實(shí)現(xiàn)了兩個(gè) Java 虛擬機(jī)。此配置的主要目的是允許多個(gè)版本的 VM 處?kù)痘顒?dòng)狀態(tài)。它還允許一個(gè) VM 處理人機(jī)界面和 Internet 通信,而讓另一個(gè) VM 不受阻礙地執(zhí)行控制功能。相當(dāng)於軟件磚牆將兩者隔開(kāi),因此如果從網(wǎng)絡(luò)引入病毒,處理器的主要控制功能不會(huì)受到影響。 儘管它主要設(shè)計(jì)用於 Java 環(huán)境,但您也可以在其他環(huán)境中利用這種雙 VM 硬件方法:一方面是 Java,另一方面是 C/C++,或者 C/C++ 的各種組合,而無(wú)需使用Java。雖然是為 Java 代碼設(shè)計(jì)的,但 VM 執(zhí)行 C 或 C++ 代碼,但速度不是很快。在只需要 C 或 C++ 的應(yīng)用程序中,可以使用 VM 磚牆的病毒防護(hù)功能。 我確信有更多聰明的方法可以為小型應(yīng)用程序添加病毒保護(hù),我想聽(tīng)聽(tīng)它們。如果您是開(kāi)發(fā)人員並且發(fā)現(xiàn)了創(chuàng)新技術(shù),請(qǐng)告訴我。如果您是產(chǎn)品具有這些功能的操作系統(tǒng)或工具供應(yīng)商,我有興趣與您交談。如果您有意見(jiàn),無(wú)論是讚成還是反對(duì),請(qǐng)告訴我,我們可以在本專欄中討論。 by Bernard Cole 翻譯:阿曜ちゃん 原文:https://www.embedded.com/viruses-and-embedded-designs/