與質(zhì)量和許多其他嵌入式系統(tǒng)屬性一樣,安全性必須在開發(fā)周期開始時(shí)加以考慮。開發(fā)人員無法構(gòu)建他們的系統(tǒng),然后在最后添加安全性。隨著越來越多的系統(tǒng)開始連接到 Internet,嵌入式開發(fā)人員應(yīng)該遵循最佳實(shí)踐來開始保護(hù)他們的系統(tǒng)。讓我們探索幾個(gè)任何團(tuán)隊(duì)都可以實(shí)現(xiàn)的方式。
開始使用ARM Trustzone
ARM Trustzone 已經(jīng)在應(yīng)用處理器上使用了很長一段時(shí)間,并且已經(jīng)宣布 ARM Trustzone 在新的微控制器上可用。開發(fā)人員應(yīng)該探索它的含義以及如何使用它來編寫更安全的軟件。如果你有一個(gè) ARM 應(yīng)用處理器,那么現(xiàn)在是開始讓 Trustzone 發(fā)揮作用的時(shí)候了。
遵循語言和行業(yè)最佳實(shí)踐
嵌入式軟件開發(fā)人員應(yīng)該使用多種編程語言和行業(yè)最佳實(shí)踐標(biāo)準(zhǔn)。使用 MISRA-C/C++ 可以確保遵循使用所選語言的子集的最佳實(shí)踐。無論如何都應(yīng)該使用 MISRA,但從安全的角度來看,如果開發(fā)人員使用 C,那么強(qiáng)烈建議熟悉并遵循 Cert-C 中的最佳實(shí)踐。Cert-C 旨在提供推薦的編碼實(shí)踐,以防止軟件中的安全漏洞。
數(shù)字簽名和加密固件更新
任何連接到 Internet 的設(shè)備都需要推送功能更新和錯(cuò)誤修復(fù)。為了防止未經(jīng)授權(quán)的固件更新,嵌入式開發(fā)人員應(yīng)考慮對其固件映像進(jìn)行數(shù)字簽名和加密。
在啟動時(shí)驗(yàn)證應(yīng)用程序
潛在的黑客可能會在啟動期間嘗試將新軟件注入系統(tǒng)。使用引導(dǎo)加載程序來驗(yàn)證存儲在 ROM 中的當(dāng)前映像和在 RAM 中運(yùn)行的代碼是否應(yīng)該存在始終是一個(gè)好主意。有很多方法可以做到這一點(diǎn),但一個(gè)非常簡單的檢查是放置一個(gè)在啟動時(shí)驗(yàn)證的 CRC。總比沒有好!
鎖定閃存空間
它當(dāng)然是防篡改的,但要在黑客面前面臨的一個(gè)額外障礙是鎖定 Flash 程序空間。在行尾鎖定閃存將有助于防止對設(shè)備具有物理訪問權(quán)限的人能夠讀取應(yīng)用程序代碼并對其進(jìn)行逆向工程。如果有足夠的時(shí)間,他們可以找到一種方法,但關(guān)鍵是他們必須更加努力地訪問代碼,這可能足以阻止他們。
監(jiān)控堆棧和緩沖區(qū)是否溢出
溢出堆棧或緩沖區(qū)可能是開始將惡意代碼注入系統(tǒng)的好方法。嵌入式開發(fā)人員應(yīng)該監(jiān)控他們的緩沖區(qū)和堆棧空間,以確保它們不會溢出。這可以通過監(jiān)視位置指針或創(chuàng)建警告即將溢出的警戒區(qū)來手動完成。大多數(shù) RTOS 還包括堆棧溢出監(jiān)視器。確保它不僅處于打開狀態(tài),而且在出現(xiàn)這種狀態(tài)時(shí)有代碼來處理系統(tǒng)。