對于嵌入式系統來說,這是一個不幸的事實:一旦部署到野外,它們永遠不會100%安全,尤其是在世界變得更加互聯的情況下。這一事實由于應用于這些系統的安全工程方法在歷史上的松懈而更加復雜。大多數嵌入式開發設備專注于特定設備的軟件,并且經常忽略操作系統和較低級別的組件。
隨著全球數十億嵌入式系統的使用和日益互聯,攻擊者有巨大的動機設計出新的、隱蔽的方法來提取敏感數據和/或重新利用現場設備謀取私利。因此,設備本身和特定功能的軟件通常需要隨著時間的推移進行更新,以應對新的安全威脅。
讓我們來分析10個致命的安全錯誤,它們可能會危及我們業務、金融和關鍵基礎架構中的嵌入式系統。
1.讓你的敏感數據和應用程序處于安全狀態
罪犯可以讀取、提取和利用你以明文形式留下的數據和應用程序。對數據和應用程序進行加密是不夠的;你還必須擔心加密密鑰存儲的位置和方式以及使用的算法。假設我們可以使用SSL/TLS來保護傳輸中的數據是錯誤的,因為我們經常忘記相同的數據存儲在邊緣設備和云平臺的本地。
2.在沒有安全、經過身份驗證的引導的情況下啟動系統
網絡犯罪分子可以對未使用安全引導過程引導的設備進行根攻擊。此外,它們還可以更改引導加載程序、操作系統、UEFI BIOS和硬件/軟件配置,或者用惡意版本替換它們。更糟糕的是,即使嵌入式開發人員完全重新安裝主機操作系統,其中一些惡意修改也會持續存在。
除了在硬件基礎上實現經過身份驗證的安全引導外,你無法保護你的引導序列免受攻擊,這些攻擊會篡改引導加載程序,并隨后危及系統的網絡彈性。此外,缺乏安全引導也會導致各種各樣的攻擊和設備重新調整用途。
3.允許未經授權的軟件訪問未經授權的組件
犯罪黑客可以利用一個組件中的漏洞或隱含信任來泄漏關鍵信息,如內存內容和地址,從而實現多種二階攻擊。
在不限制僅訪問完成任務所需的組件的情況下,你會留下意外的漏洞,使攻擊者能夠從一個組件轉到另一個組件。例如,共享硬盤驅動器或內存組件的兩個軟件可以通過該硬件進行通信(可能通過利用各種側通道攻擊),利用其中一個漏洞訪問另一個。
4.忽視或錯誤配置集裝箱化或隔離機制
錯誤配置軟件容器或忽略軟件隔離可能會允許網絡罪犯升級權限并獲得對系統的未經授權的根級別訪問(完全控制)。所謂的容器和/或VM突破使攻擊者能夠內省和修改系統上其他容器的內容,并可能以非預期方式與基于云的服務交互。
5.留下太多的攻擊面
使用過多的接口和功能擴充軟件越多,攻擊面就越大—攻擊者可以利用漏洞攻擊你的系統。類似地,操作系統映像或應用程序包中包含的庫越多,攻擊面越大,嵌入式開發人員更新、修補和解決各種可能的安全漏洞的負擔就越重。犯罪黑客只需要掃描你的系統就知道攻擊什么。
通過采用最低限度的軟件開發方法,僅添加實現軟件任務所需的功能,網絡攻擊者將更難利用你的代碼為自己謀利。
6.發放不受限制的特權
當你給予應用程序比所需更多的訪問權限(自主訪問控制、系統級權限、命名空間等)時,網絡罪犯可以利用該訪問權限解鎖權限并操縱你的軟件。一旦攻擊者利用多余的權限獲得管理權限,他們可能會在網絡上橫向移動,獲得對云基礎設施的訪問,從那里可能獲得對所有設備的訪問,從而執行拒絕服務攻擊、降低性能、注入惡意軟件等。
有一些簡單但相對未使用的機制可用于限制對各種權限的訪問。在Linux環境中最簡單的情況下,我們可以從標準用戶/組訪問控制開始,添加在使用后丟棄功能的能力(可以使用特權端口啟動服務),然后進入Linux環境中的各種其他安全選項集。
雖然我們特別關注邊緣設備上的無限制權限,但同樣的概念也適用于整個DevOps管道、云基礎設施和企業網絡。
7.假定信任并允許未經驗證的通信
你必須主動檢查和確認安全協議,只向經過身份驗證的用戶和系統提供信任,并且只使用加密通道與這些用戶和系統通信。當然,還有另一個隱含的假設,即我們的設備本身是可信的。如果我們與之通信和交換數據的設備不可信,那么我們必須解決各種其他問題,如本地數據加密、基于硬件的密鑰管理和安全引導。
使用默認設置或易受攻擊的協議會導致未經授權的訪問,并導致惡意流量進入你的系統。
8.未能檢查輸入
當嵌入式開發人員不檢查輸入時,攻擊者可以將格式錯誤的數據引入系統,導致下游組件出現故障。使用格式錯誤數據的常見攻擊包括SQL注入和緩沖區溢出。
程序員檢查從web表單提交到RF capture的所有類型數據的輸入,以確保可信用戶向其軟件發送預期數據。預期數據包括數據的格式和內容。輸入驗證可防止不受信任的用戶發送帶有惡意意圖的意外數據,并假定所有非源于應用程序本身的數據都不受信任。
9.安全編碼中錯失的機會
易受攻擊的編碼實踐會讓軟件缺陷在開發過程中不被發現,更糟糕的是,許多此類實踐和訪問可能導致攻擊。如果你不使用安全的開發工具和技術,網絡犯罪分子將經常突破你軟件中的這些漏洞,并可能利用你的漏洞訪問其他網絡和組織。
但通過安全的編碼工作流和自動化測試,你可以在開發過程中盡早發現并修復漏洞。請記住:安全開發過程不是解決方案,并且需要一起實踐。
10.將希望作為一項安全戰略
對于有限的安全人員來說,手動查看事件日志、搜索攻擊和違規跡象所需的時間太長。相反,你需要利用自動化工具,不斷監視你的系統,并檢查你的記錄,尋找入侵的歷史證據。當然,這一切都假設我們記錄了正確的事情,有足夠的細節來做出決定。
現代技術可以接收和審核整個系統的日志集合,行為工具可以識別網絡和軟件中的可疑活動。嵌入式開發人員甚至可以從使用當前威脅特征識別攻擊的惡意軟件掃描中獲益。通過結合這些努力,你可以繪制完整的安全狀態圖,并隨時更新。