AGL 安全藍圖(master 2023-09)
漢化後稍微檢查了一下很適合我們參考。
1. 安全藍圖概覽
與過去的汽車相比,現代汽車的技術更加複雜,也更加不同。我們看到了更廣泛的新特性和功能,以及更複雜的軟體。可以公平地說,當今市場上推出的汽車與手機等計算設備比其前輩有更多的共同點。現代汽車製造商還為這些“互聯”汽車集成了對各種通信技術的支持。隨著此類車輛的出現,Linux 已成為軟體平台的自然選擇,汽車級 Linux 就是一個很有前景的例子。
從安全角度來看,聯網汽車的遠程功能會導致更大的攻擊面。這開啟了一個全新的安全漏洞世界,需要在架構設計過程中予以考慮。歷史表明,對設備的物理訪問足以讓黑客獲得 root 權限。這使得汽車成為一個充滿敵意的環境。
安全藍圖記錄了作為汽車級 Linux (AGL) 一部分包含的安全功能,並確定了作為 AGL 一部分從安全角度需要解決的領域。它還提供了有關現有技術和解決方案的指導。
安全域將允許我們創建一組測試來驗證汽車級 Linux 的安全性。
本文檔首先基於現有的 AGL 安全藍圖。
為了保證安全有效,概念必須簡單。默認情況下,任何不允許的事情都是被禁止的。
我們將涵蓋從最低級別(硬體)到最高級別(連接和應用程序)的主題。我們將在 硬體和連接方面快速採取行動,因為我們的級別不支持這一點。連接問題的解決方案涉及更新和安全配置,而硬體安全則與製造商相關。
1.1 攻擊對手 Adversaries
汽車領域的對手和攻擊者:
-
1. 狂熱攻擊者 Enthusiast Attackers
狂熱攻擊者可以在電路板級別物理訪問發動機控制單元 (ECU)。他們可以將“模組芯片”焊接到電路板上,並可以使用探測工具。他們還擁有有關先前受到損害的 ECU 的信息,並可以訪問汽車改裝論壇其他成員開發的軟體和指令。狂熱黑客的目標可能是但不限於為汽車增加額外的馬力或只是為了好玩而進行黑客攻擊。
-
2. 腐敗的汽車經銷商 Corrupt Automotive Dealers
腐敗的汽車經銷商是攻擊者,他們可以訪問與狂熱者相同的功能,但也可以訪問汽車製造商 (OEM) 的經銷商網絡。他們還可以訪問汽車製造商提供的標準調試工具。他們的目標可能是支持當地的汽車盜竊團伙或有組織的犯罪分子。
-
3. 有組織的犯罪分子 Organized Criminals
有組織的犯罪分子可以訪問上述所有工具,但也可能對許多經銷商的內部網絡有一定程度的控制。他們可能入侵並獲得了對無線 (OTA) 服務器或車載信息娛樂 (IVI) 系統的臨時控制。這與當今付費媒體等其他行業中的有組織犯罪分子所扮演的角色非常相似。他們的目標是通過威脅停用多輛車輛來向原始設備製造商和/或政府勒索金錢。
-
4. 惡意軟體開發者 Malware Developers
惡意軟體開發人員開發了惡意軟體來攻擊和危害大量車輛。惡意軟體通常旨在從一輛車傳播到另一輛車。通常,目標是控制多台計算機,然後出於惡意目的出售對它們的訪問權限,例如拒絕服務 (DoS) 攻擊或竊取私人信息和數據。
-
5. 安全研究人員 Security Researchers
安全研究人員是“自我宣傳”的安全顧問,試圖讓自己出名。他們可以使用軟體安全分析的標準工具。他們還可以物理訪問車輛和標準硬體調試工具(邏輯分析儀、示波器等)。他們的目標是為了個人利益而公開攻擊,或者只是為了獲得個人理解,以幫助使事情變得更加安全。
1.2 攻擊目標 Attack Goals
在當今的互聯車輛中,越來越多的功能正在轉向軟體控制,這意味著攻擊的威脅變得越來越大。我們看到導航和召喚、汽車訪問/發動機啟動以及電機/ECU 升級等汽車功能均通過軟體和雲連接進行控制。由於存在高價值目標,因此受到攻擊的風險很高。
在這裡,我們概述了一些主要威脅類別以及一些示例攻擊者、示例攻擊和相對重要性。這些威脅類別旨在作為一般示例。威脅類型可能存在許多細微差別。此外,可能有許多子攻擊最終導致這些更高級別的攻擊目標。
| 威脅類別 | 攻擊者樣本 | 攻擊示例 | 相對重要性 |
|---|---|---|---|
| 竊取車輛 | 個人、有組織的犯罪分子 | 將汽車送往計劃外的目的地,獲取汽車鑰匙,控制解鎖機制 | 未來購買車輛的可能性降低(稍後盈利)、負面新聞(品牌完整性) |
| 車輛功能減少 | 恐怖組織、心懷不滿的員工 | 將駕駛員鎖在車外、導致汽車墜毀、阻止訪問信息娛樂系統 | 無法銷售付費應用程序和內容(立即盈利)、負面新聞(品牌誠信)、可能造成生命損失(人身傷害) |
| 車輛黑客攻擊 | 車主、競爭對手 | 無需付費即可獲取內容、修改 DRM 許可證、解鎖售後市場功能、盜竊 IP | 內容和功能銷售損失(立即盈利)、內容所有者提起訴訟(以後盈利)、競爭優勢喪失(以後盈利) |
| 竊取敏感資產 | 有組織的犯罪分子、勒索者 | 竊取信用卡號碼、健康信息、攝像頭數據、竊取帶寬 | 負面報導(品牌誠信)、車主訴訟(利潤後期) |
汽車級 Linux (AGL) 計劃以 Linux 和 Tizen 等開源軟體為基礎,提供靈活的應用程序框架。然而,應用程序框架、Cynara 和安全管理器的安全規定僅能阻止最大的威脅。經驗表明,提供受約束的應用程序(如Android 開源平台中的應用程序)和商店開發流程、簽名驗證、DAC 沙箱和平台上的MAC (SMACK) 控制可以取得一定的成功,同時保證以下安全性:系統。然而,該系統的開放性吸引了許多研究人員、愛好者和黑客以及出於經濟動機的攻擊者為了自己的利益而破壞系統。
隨著 AGL 應用於現代汽車,這不可避免地會邀請許多有能力的參與者來修改、攻擊和破壞這些經過深思熟慮的系統及其應用程序。出於安全和安保等方面的考慮,汽車行業不能重蹈手機和平板電腦等消費設備的覆轍,因為這些設備經常遇到安全問題。必須採用分層方法和深度防禦來保護系統免受不可避免的攻擊。
1.3 資產和安全分類 Assets and Security Categorization
本節概述了車輛中可能發現的一些資產及其從攻擊角度來看的相對敏感性。此外,右側的最後一列列出了一些可應用於這些類型資產的推薦保護類型(請注意,空單元格指的是其上方的單元格)。良好的保護方法將優先保護最敏感的資產,並使用縱深防禦方法來覆蓋這些資產。不太敏感的資產的優先級較低,通常使用較少的保護技術進行保護。通過考慮車輛網絡拓撲和現有訪問控制的詳細威脅分析,可以對具體車輛網絡中的資產進行更細粒度的優先級排序。例如攻擊樹的 EVITA 框架。
| 資產類別 | 例子 | 威脅敏感程度 | 推薦的保護類型 |
|---|---|---|---|
| 軟體 | ECU 軟體、信息娛樂軟體、操作系統鏡像 | 嚴重的 | 密鑰管理、相互非對稱身份驗證、HSM 和白盒加密、消息完整性檢查、強化/軟體保護、程序轉換/混淆、完整性驗證、安全操作系統 |
| 汽車通道 | 生物識別數據、車鑰匙 | ||
| 支付數據 | 信用卡、用戶資料關鍵數據 | ||
| 錄音 | 內部攝像頭錄音、內部錄音、外部攝像頭錄音 | 高的 | 加密、消息完整性檢查、強化/軟體保護、程序轉換/混淆 |
| 用戶資料 | 用戶名和密碼、自定義、日曆、聯繫人 | ||
| 地點 | GPS坐標、車輛使用數據 | ||
| 購買的內容 | 視頻、音頻、許可證 | ||
| 電話會議 | 聊天、音頻、視頻 | 中等的 | 軟體保護、程序轉換/混淆、傳輸驗證加密 |
| 車輛數據 | 車輛信息、傳感器數據 | ||
| 導航數據 | 靜態和動態地圖 | ||
| 第三方數據 | 家庭自動化命令、雲遊戲數據 |
1.4 “強化”術語 (Hardening term)
術語“強化”是指減少嵌入式系統(例如嵌入式控制單元 ( ECU ) 或其他託管設備)上的攻擊面所需的工具、技術和流程。所有強化活動的目標是防止在設備上執行無效的二進製文件,並防止從設備複製安全相關數據。
1.5 AGL 安全概述 AGL security overview
AGL 根源基於安全概念。這些概念由安全框架實現,如下圖所示:

1.6 縮略語
下表列出了本文檔中使用的最強術語。
| 縮寫 | 描述 |
|---|---|
| AGL | Automotive Grade Linux / 汽車級Linux |
| ECU | Electronic Control Unit / 電子控制單元 |
1.7 參考
- 安全藍圖。
- http://docs.automotivelinux.org/docs/architecture/en/dev/reference/security/01-overview.html
- [2017] –內核安全。
- https://www.kernel.org/doc/Documentation/security/
- [2017] – Systemd 集成和用戶管理。
- http://iot.bzh/download/public/2017/AMM-Dresden/AGL-systemd.pdf
- [2017] – AGL – 應用程序框架文檔。
- http://iot.bzh/download/public/2017/SDK/AppFw-Documentation-v3.1.pdf
- [2017] –提高車輛網絡安全。
- https://access.atis.org/apps/group_public/download.php/35648/ATIS-I-0000059.pdf
- [2016] – AGL 框架概述。
- http://docs.automotivelinux.org/docs/apis_services/en/dev/reference/af-main/0-introduction.html
- [2016] – SecureBoot-SecureSoftwareUpdates。
- http://iot.bzh/download/public/2016/publications/SecureBoot-SecureSoftwareUpdates.pdf
- [2016] – Linux 汽車安全。
- http://iot.bzh/download/public/2016/security/Linux-Automotive-Security-v10.pdf
- [2016] –汽車安全最佳實踐。
- https://www.mcafee.com/it/resources/white-papers/wp-automotive-security.pdf
- [2016] –攻擊藍牙智能設備。
- http://gattack.io/whitepaper.pdf
- [2015] –汽車攻擊面的綜合實驗分析。
- http://www.cs.wayne.edu/fengwei/15fa-csc6991/slides/8-CarHackingUsenixSecurity.pdf
- [2015] –汽車總線系統的安全性。
- http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.728&rep=rep1&type=pdf
- [2014] – IOActive 遠程攻擊面。
- https://www.ioactive.com/pdfs/IOActive_Remote_Attack_Surfaces.pdf
- [2011] –針對 GPRS/EDGE/UMTS/HSPA 移動數據通信的實際攻擊。
- https://media.blackhat.com/bh-dc-11/Perez-Pico/BlackHat_DC_2011_Perez-Pico_Mobile_Attacks-wp.pdf
- [2011] –汽車攻擊面的綜合實驗分析。
- http://www.autosec.org/pubs/cars-usenixsec2011.pdf
- [2010] –現代汽車被動無鑰匙進入和啟動系統的中繼攻擊。
- https://eprint.iacr.org/2010/332.pdf
- [2010] – Wifi 攻擊 wep wpa。
- https://matthieu.io/dl/wifi-attacks-wep-wpa.pdf
- [2008 []](http://schaufler-ca.com/yahoo_site_admin/assets/docs/SmackWhitePaper.257153003.pdf) -SMACK .
- http://schaufler-ca.com/yahoo_site_admin/assets/docs/SmackWhitePaper.257153003.pdf
2. 硬體藍圖
汽車級 Linux 平台是一個具有AGL 兼容應用程序和服務的 Linux 發行版。該平台包括以下硬體:
- SoC(片上系統)。
- 內存(RAM、ROM、存儲器等)。
- 外圍設備。
您將在第一部分中找到與硬體安全相關的所有內容。目標是保護系統免受所有試圖通過恢復和/或更改加密密鑰來獲取額外權限以改變啟動完整性的攻擊。為了實現這一目標,我們還應該防止硬體修改。我們將在下面展示一些可能的配置示例。
縮略語 Acronyms and Abbreviations
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| HSM | Hardware Security Module / 硬體安全模組 |
| NVM | Non-Volatile Memory / 非易失性記憶體 |
| SHE | Secure Hardware Extensions / 安全硬體擴展 |
完整性 Integrity
該板必須存儲硬編碼的加密密鑰,以便驗證引導加載程序的完整性等。製造商可以使用HSM和 SHE來增強其電路板的安全性。
| Domain 領域 | Object 標的物 | Recommendations 建議 |
|---|---|---|
| Hardware-Integrity-1 | Bootloader | Must control bootloader integrity. 必須控制引導加載程序的完整性。 |
| Hardware-Integrity-2 | Board | Must use a HSM. 必須使用HSM。 |
| Hardware-Integrity-3 | RTC | Must not be alterable. 必須不可被更改。 |
證書 Certificates
| Domain 領域 | Object 標的物 | Recommendations 建議 |
|---|---|---|
| Hardware-Certificate-1 | System | Shall allow storing dedicated certificates. 應允許存儲專用證書。 |
| Hardware-Certificate-2 | ECU | The ECU must verify the certification authority hierarchy. ECU 必須驗證認證機構層次結構。 |
| Hardware-Certificate-3 | System | Allow the modification of certificates only if the source can be authenticated by a certificate already stored or in the higher levels of the chain of trust. 僅當來源可以通過已存儲的證書或信任鏈的更高級別中的證書鑑別時,才允許修改證書。 |
記憶體 Memory
| Domain 領域 | Object 標的物 | Recommendations 建議 |
|---|---|---|
| Hardware-Memory-1 | ECU | The ECU shall never expose the unencrypted key in RAM when using cryptographic keys. 當使用加密密鑰時,ECU 絕不能暴露 RAM 中未加密的密鑰。 |
| Hardware-Memory-2 | Bootloader | Internal NVM only 僅內部 NVM 可啟動系統。 |
| Hardware-Module-3 | – | HSM must be used to secure keys. 必須使用 HSM 來保護密鑰。 |
3. 安全啟動藍圖
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Abstract-1 | More generic and add examples (The chain of trust). 更通用並添加示例(信任鏈)。 |
安全啟動是指防止在系統啟動過程中加載惡意軟體應用程序和“未經授權”的操作系統。目標是保護用戶免受 Rootkit 和其他低級惡意軟體攻擊。現代引導加載程序具有可用於在系統中啟用安全引導的功能。
啟動強化:配置啟動順序的步驟/要求,以限制設備執行除批准的軟體鏡像之外的任何內容。
在這一部分中,我們將看到一系列配置,這些配置將使我們能夠提高啟動階段的安全性。出於參考和解釋的目的,我們提供有關如何配置運行 3.10.17 Linux 內核的嵌入式設備的指南。如果未檢查完整性或發生嚴重錯誤,系統必須在非常穩定的備份鏡像上啟動。
要求:即使選擇了 Linux 內核的替代版本,也必須滿足這些要求。
建議:為了保護設備而應應用的詳細最佳實踐。雖然它們目前沒有被列為硬性需求,但將來可能會升級為需求狀態。此外,具體運營商可以根據自己的具體需求和目標將其中一些建議更改為要求。
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Abstract-1 | Review the definition of the "boot loader". 查核“引導加載程序”的定義。 |
引導加載程序:引導加載程序由駐留在OTP存儲器中的主引導加載程序 、sboot、U-Boot 和駐留在外部閃存(NAND 或 SPI/NOR 閃存)中的安全加載程序組成。CPU 在加電或複位時執行主引導加載程序。OTP主引導加載程序進行必要的初始系統配置,然後將輔助引導加載程序 sboot 從外部閃存加載到 RAM 存儲器。然後,sboot 會加載 U-Boot 以及安全加載程序。然後,U-Boot 驗證內核/系統鏡像的完整性,然後在將控制權傳遞給它之前加載內核/系統鏡像。
3.1 縮略語
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| FUSE | Filesystem in UserSpacEnv. 用戶模式下的文件系統 |
| OTP | One-Time-Programmable 可單次燒錄 |
| DOCSIS | Data Over Cable Service Interface Specification 纜線服務界面上的資料傳輸規範 |
3.2 鏡像
鏡像選擇
引導過程應是不間斷的,並且應不可撤銷地引導引導環境中指定的鏡像。
在 U-Boot 中配置“ bootdelay ”環境變量和/或定義 CONFIG_BOOTDELAY為-2。
| Domain 領域 | Variable / Config name |
Value |
|---|---|---|
| Boot-Image-Selection-1 | CONFIG_BOOTDELAY |
-2 |
| Boot-Image-Selection-2 | bootdelay | -2 |
鏡像真實性
無法從未經驗證的鏡像啟動。應啟用 U-Boot 中的安全啟動功能。U-Boot 2013.07版本開始提供安全啟動功能。要啟用安全啟動功能,請啟用以下功能:
CONFIG_FIT: Enables support for Flat Image Tree (FIT) uImage format.
CONFIG_FIT_SIGNATURE: Enables signature verification of FIT images.
CONFIG_RSA: Enables RSA algorithm used for FIT image verification.
CONFIG_OF_CONTROL: Enables Flattened Device Tree (FDT) configuration.
CONFIG_OF_SEPARATE: Enables separate build of u-Boot from the device tree.
CONFIG_DEFAULT_DEVICE_TREE: Specifies the default Device Tree used for the run-time configuration of U-Boot.
使用公鑰生成 U-Boot 鏡像以驗證和加載鏡像。它應使用 RSA2048 和 SHA256 進行身份驗證。
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Image-Authenticity-1 | CONFIG_FIT |
Enable |
| Boot-Image-Authenticity-2 | CONFIG_FIT_SIGNATURE |
Enable |
| Boot-Image-Authenticity-3 | CONFIG_RSA |
Enable |
| Boot-Image-Authenticity-4 | CONFIG_OF_CONTROL |
Enable |
| Boot-Image-Authenticity-5 | CONFIG_OF_SEPARATE |
Enable |
| Boot-Image-Authenticity-6 | CONFIG_DEFAULT_DEVICE_TREE |
Enable |
3.3 通訊方式
禁用 USB、串行和 DOCSIS 支持
要在 U-Boot 中禁用 USB 支持,不應定義以下配置:
CONFIG_CMD_USB: Enables basic USB support and the usb command.
CONFIG_USB_UHCI: Defines the lowlevel part.
CONFIG_USB_KEYBOARD: Enables the USB Keyboard.
CONFIG_USB_STORAGE: Enables the USB storage devices.
CONFIG_USB_HOST_ETHER: Enables USB Ethernet adapter support.
另外,在U-Boot 和sboot 中禁用不必要的通信模式,如以太網、串口、DOCSIS。
如果不需要,Linux 內核對 USB 的支持應該被編譯出來。如果需要,Linux 內核應配置為僅啟用所需的最少 USB 設備。應特別小心對待用戶啟動的 USB 文件系統。無論文件系統是否安裝在用戶空間(FUSE)中,都應遵守受限的安裝選項。
| Domain 領域 | 通訊模式 | State |
|---|---|---|
| Boot-Communication-1 | USB |
Disabled and Compiled-out if not required. |
| Boot-Communication-2 | USB |
Else, Kernel should be configured to only enable the minimum required USB devices and filesystems should be treated with special care. |
| Boot-Communication-3 | Ethernet |
Disabled |
| Boot-Communication-4 | U-boot and sboot DOCSIS |
Disabled |
| Boot-Communication-5 | Serial ports |
Disabled |
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Communication-USB-1 | CONFIG_CMD_USB |
Not defined |
| Boot-Communication-USB-2 | CONFIG_USB_UHCI |
Not defined |
| Boot-Communication-USB-3 | CONFIG_USB_KEYBOARD |
Not defined |
| Boot-Communication-USB-4 | CONFIG_USB_STORAGE |
Not defined |
| Boot-Communication-USB-5 | CONFIG_USB_HOST_ETHER |
Not defined |
禁用所有未使用的網絡接口
僅應啟用使用的網絡接口。在可能的情況下,服務也應僅限於必要的範圍。
| Domain 領域 | 通訊模式 | State |
|---|---|---|
| Boot-Communication-1 | Network interfaces |
Preferably no network interface is allowed, otherwise, restrict the services to those used. 最好不允許使用任何網絡接口,否則,將服務限制為 所使用的服務。 |
刪除或禁用不必要的服務、端口和設備
限制使用services,ports和。devices
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Boot-Communication-1 | Services, ports and devices |
Restrict the services, ports and devices to those used.限制使用 services,ports和。devices |
禁用閃存訪問
推薦:
在 U-Boot 中,應禁用以下閃存命令:
NANDdo_nand :必須禁用對 NAND 閃存訪問的支持。
| Domain 領域 | Command name |
State |
|---|---|---|
| Boot-Communication-Flash-1 | do_nand |
Disable |
同樣,sboot 應通過命令行禁用閃存訪問支持(如果有)。
3.4 控制台
禁用串口控制台
應禁用串口控制台輸出。要在 U-Boot 中禁用控制台輸出,請配置以下宏:
| Domain 領域 | Config name |
Value |
|---|---|---|
| Boot-Consoles-Serial-1 | CONFIG_SILENT_CONSOLE |
Disable |
| Boot-Consoles-Serial-2 | CONFIG_SYS_DEVICE_NULLDEV |
Disable |
| Boot-Consoles-Serial-3 | CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC |
Disable |
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Consoles-1 | Secure loader: No reference earlier? |
並配置“ silent ”環境變量。對於安全加載程序,通過不定義以下宏來禁用跟踪:
| Domain 領域 | Environment variable name |
State |
|---|---|---|
| Boot-Consoles-Serial-1 | INC_DEBUG_PRINT |
Not defined |
對於 sboot,需要進行正確的配置以禁用串口控制台。
不可變的環境變量
在U-Boot中,確保內核命令行、啟動命令、啟動延遲和其他環境變量是不可變的。這將通過將引導選擇限制為僅閃存中的鏡像來防止備用鏡像的側面加載。
環境變量應作為默認環境變量作為 U-Boot 中文本區域的一部分,而不是在非易失性內存中。
刪除與非易失性內存相關的配置選項,例如:
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Consoles-Variables-1 | CONFIG_ENV_IS_IN_MMC |
#undef |
| Boot-Consoles-Variables-2 | CONFIG_ENV_IS_IN_EEPROM |
#undef |
| Boot-Consoles-Variables-3 | CONFIG_ENV_IS_IN_FLASH |
#undef |
| Boot-Consoles-Variables-4 | CONFIG_ENV_IS_IN_DATAFLASH |
#undef |
| Boot-Consoles-Variables-5 | CONFIG_ENV_IS_IN_FAT |
#undef |
| Boot-Consoles-Variables-6 | CONFIG_ENV_IS_IN_NAND |
#undef |
| Boot-Consoles-Variables-7 | CONFIG_ENV_IS_IN_NVRAM |
#undef |
| Boot-Consoles-Variables-8 | CONFIG_ENV_IS_IN_ONENAND |
#undef |
| Boot-Consoles-Variables-9 | CONFIG_ENV_IS_IN_SPI_FLASH |
#undef |
| Boot-Consoles-Variables-10 | CONFIG_ENV_IS_IN_REMOTE |
#undef |
| Boot-Consoles-Variables-11 | CONFIG_ENV_IS_IN_UBI |
#undef |
| Boot-Consoles-Variables-12 | CONFIG_ENV_IS_NOWHERE |
#define |
(建議)刪除內存轉儲命令
在 U-Boot 中,應禁用以下命令以避免內存轉儲:
md : Memory Display command.
mm : Memory modify command - auto incrementing address.
nm : Memory modify command - constant address.
mw : Memory write.
cp : Memory copy.
mwc : Memory write cyclic.
mdc : Memory display cyclic.
mtest : Simple ram read/write test.
loopw : Infinite write loop on address range.
| Domain 領域 | Command name |
State |
|---|---|---|
| Boot-Consoles-MemDump-1 | md |
Disabled |
| Boot-Consoles-MemDump-2 | mm |
Disabled |
| Boot-Consoles-MemDump-3 | nm |
Disabled |
| Boot-Consoles-MemDump-4 | mw |
Disabled |
| Boot-Consoles-MemDump-5 | cp |
Disabled |
| Boot-Consoles-MemDump-6 | mwc |
Disabled |
| Boot-Consoles-MemDump-7 | mdc |
Disabled |
| Boot-Consoles-MemDump-8 | mtest |
Disabled |
| Boot-Consoles-MemDump-9 | loopw |
Disabled |
同樣,應從 sboot 禁用內存轉儲支持。
4. 虛擬化管理藍圖
定義:“管理程序或虛擬機監視器 (VMM) 是創建和運行虛擬機的計算機軟體、韌體或硬體”。
它必須包括簽名驗證(可能是委託的)。
| Domain 領域 | Improvement 改進 |
|---|---|
| Hypervisor-Abstract-1 | Complete Hypervisor part (jailhouse / KVM / Xen). |
本機或裸機管理程序
這些虛擬機管理程序直接在主機的硬體上運行,以控制硬體並管理來賓操作系統。這些是我們感興趣的。
5. 內核藍圖
系統強化:與基於嵌入式 Linux 的操作系統配置相關的最佳實踐。本節包括內核本身的強化,以及用於防止根文件系統的構建和配置中的已知漏洞的特定配置和補丁。
在內核級別,我們必須確保無法啟動任何控制台。它可用於更改系統的行為或獲取有關係統的更多信息。另一方面是內核使用的內存的保護。
接下來的小節包含有關各種內核配置選項的信息,以增強內核 (3.10.17) 的安全性,以及為利用這些安全功能而編譯的應用程序的信息。此外,還有一些配置選項可以防止已知的易受攻擊的配置選項。以下是部署所需的各種內核配置的高級摘要。
5.1 內核版本
AGL 系統內核版本的選擇對其安全性至關重要。根據闆卡類型和最終生產系統的不同,使用不同的內核版本。例如,所研究的系統之一使用 Linux 內核版本 3.10,而另一個系統使用 Linux 內核版本 4.4。對於Linux內核版本3.10.31,存在25個已知漏洞。這些漏洞將允許攻擊者獲得特權、繞過訪問限制、允許內存損壞或導致拒絕服務。相比之下,Linux 內核版本 4.4 的已知漏洞要少得多。因此,我們通常會推薦較新的內核版本作為平台的基礎。
請注意,儘管最新內核版本中的已知漏洞較少,但潛在的未知漏洞可能很多。經驗法則是盡可能更新內核以避免您確實知道的問題,但您不應該對您對它的信任感到自滿。然後將應用縱深防禦方法。
如果升級到較新的內核版本(例如設備驅動程序、主板支持提供商)存在限制和依賴性,並且您被迫使用較舊的Linux 內核版本,則需要採取額外的措施來降低內核漏洞利用的風險,這可以包括內存監控、看門狗服務和系統調用掛鉤。在這種情況下,可能需要進一步的深度防禦技術來減輕已知漏洞的攻擊風險,其中還包括對易受篡改的組件進行運行時完整性驗證。
5.2 內核構建配置
內核構建配置對於確定服務訪問級別和減少攻擊面的廣度極其重要。Linux 包含大量靈活的功能,這只能通過構建配置來控制。例如,該CONFIG_MODULES參數允許在運行時加載內核模組,從而擴展內核的功能。需要在運行時通過其他配置參數來抑製或控制此功能。例如,CONFIG_MODULE_SIG_FORCE=y 確保僅加載簽名的模組。有大量的內核配置參數,本節將詳細討論這些參數。
5.3 通用配置
強制訪問控制
內核應該使用標籤和策略來控制訪問。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-MAC-1 | CONFIG_IP_NF_SECURITY | m |
| Kernel-General-MAC-2 | CONFIG_IP6_NF_SECURITY | m |
| Kernel-General-MAC-3 | CONFIG_EXT2_FS_SECURITY | y |
| Kernel-General-MAC-4 | CONFIG_EXT3_FS_SECURITY | y |
| Kernel-General-MAC-5 | CONFIG_EXT4_FS_SECURITY | y |
| Kernel-General-MAC-6 | CONFIG_SECURITY | y |
| Kernel-General-MAC-7 | CONFIG_SECURITY_SMACK | y |
| Kernel-General-MAC-8 | CONFIG_TMPFS_XATTR | y |
另請參閱Platform 中的強制訪問控製文檔。您還可以在維基百科上找到有關MAC和 SMACK的有用文檔和鏈接 。
禁用 kexec
Kexec是一個系統調用,使您能夠從當前運行的內核加載並引導到另一個內核。生產環境中不需要此功能。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-kexec-1 | CONFIG_KEXEC |
n |
kexec可以加載任意內核,但可以強制執行新內核的簽名,就像可以強制執行新模組一樣。
禁用內核 IP 自動配置
最好使用用戶空間工具執行 IP 配置,因為這些工具往往具有更多驗證性。在系統正常啟動之前,我們不希望網絡接口啟動。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-IPAutoConf-1 | CONFIG_IP_PNP |
n |
禁用 Sysctl 系統調用支持
啟用此功能將導致包含難以維護且未經良好測試的代碼。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-SysCtl_SysCall-1 | CONFIG_SYSCTL_SYSCALL |
n |
禁用舊版 Linux 支持
有一些內核配置僅用於支持舊版二進製文件。另請參閱“控制台”部分以禁用對舊二進制格式的支持。uselib特別是系統調用,最近在任何系統中都沒有有效 的用途libc6。Linux 3.15 及更高uclibc版本支持此配置 ,因此僅應在此類版本中禁用此配置。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-LegacyLinux-1 | CONFIG_USELIB |
n |
禁用用戶模式的韌體自動加載助手
韌體自動加載助手,是當 setuid 被配置時,可讓內核透過hotplug 事件組要求執行韌體的工具。因此,對於控制設備上物理端口的攻擊者來說,此幫助工具是一個有吸引力的目標。請禁用Linux 3.9 及更高版本中支持的此配置 。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-FirmHelper-1 | CONFIG_FW_LOADER_USER_HELPER |
n |
嚴格上來說並不需要setuid,可以選擇將內置韌體傳送到內核中,而無需 initrd/文件系統。
在 OOPS 上啟用內核恐慌(Kernel Panic)
當模糊內核或嘗試內核漏洞時,攻擊者可能會觸發內核 OOPS。將 OOPS 上的行為配置為 PANIC 可能會阻礙他們的進度。
Linux 3.5 及更高版本支持此配置,因此應僅針對此類版本啟用。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-PanicOnOOPS-1 | CONFIG_PANIC_ON_OOPS |
y |
禁用套接字監控接口
這些監視器可用於檢查 Unix 域套接字上的共享文件描述符或“localhost”上的流量,否則這些流量將被視為機密。
Linux 3.7 及更高CONFIG_PACKET_DIAG版本支持該配置 ,因此僅應在此類版本中禁用該配置。
Linux 3.3 及更高CONFIG_UNIX_DIAG版本支持該配置 ,因此僅應在此類版本中禁用該配置。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-SocketMon-1 | CONFIG_PACKET_DIAG |
n |
| Kernel-General-SocketMon-2 | CONFIG_UNIX_DIAG |
n |
禁用 BPF JIT
BPF JIT 可用於根據防火牆表規則創建內核有效負載。
Linux 3.16 及更高版本支持此配置,因此應在此類版本中禁用。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-BPF_JIT-1 | CONFIG_BPF_JIT |
n |
啟用強制模組簽名
內核決不應該允許非特權用戶加載特定內核模組,因為這將提供意外擴展可用攻擊面的便利。
為了防止特權用戶的攻擊,系統可能需要完全禁用模組加載,或者提供簽名模組(例如 CONFIG_MODULE_SIG_FORCE,或帶有 LoadPin 的 dm-crypt),以防止 root 通過模組加載器接口加載任意內核代碼。
Linux 3.7 及更高版本支持此配置,因此應僅針對此類版本啟用。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-ModuleSigning-1 | CONFIG_MODULE_SIG_FORCE |
y |
還可以使用“kernel.modules_disabled”在啟動後阻止模組的加載。
| Domain 領域 | Variable name |
Value |
|---|---|---|
| Kernel-General-ModuleSigning-2 | kernel.modules_disabled |
1 |
禁用所有USB、PCMCIA(和其他總線)驅動程序不需要的 hotplug
為了減少攻擊面,驅動程序枚舉、探測和操作都在內核中進行。驅動程序數據由內核解析,因此這些驅動程序中的任何邏輯錯誤都可能成為內核漏洞。
| Domain 領域 | Object | State |
|---|---|---|
| Kernel-General-Drivers-1 | USB |
Disabled |
| Kernel-General-Drivers-2 | PCMCIA |
Disabled |
| Kernel-General-Drivers-3 | Other hotplug bus |
Disabled |
位置無關的可執行文件
| Domain 領域 | Improvement 改進 |
|---|---|
| Kernel-General-IndependentExec-1 | Kernel or/and platform part ? 內核或/和平台部分? |
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-General-IndependentExec-1 | -pie -fpic |
Enable |
在支持它的目標上生成位置無關的可執行文件。
防止覆蓋攻擊
-z,relro鏈接選項在程序加載期間提供幫助,鏈接器需要寫入多個 ELF 內存部分,但可以在將控制權移交給程序之前將其變為只讀。這可以防止某些全局偏移表 GOT 覆蓋攻擊,或 ELF 二進製文件的 dtors 部分中的攻擊。
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-General-OverwriteAttacks-1 | -z,relro |
Enable |
| Kernel-General-OverwriteAttacks-2 | -z,now |
Enable |
在程序加載期間,所有動態符號都會被解析,從而允許將完整的 GOT 標記為只讀(由於-z relro上述原因)。這可以防止 GOT 覆蓋攻擊。對於非常大的應用程序,這可能會在解析符號時初始加載期間導致一些性能損失,但這對於守護程序來說不應該是問題。
庫鏈接
| Domain 領域 | Improvement 改進 |
|---|---|
| Kernel-General-LibraryLinking-1 | Keep this part? 保留這部分嗎? |
建議一般情況下不允許動態鏈接。以避免用戶用惡意庫替換庫。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Kernel-General-LibraryLinking-1 | Dynamic linking | Should generally not be allowed. |
靜態鏈接所有內容不會改變任何安全性,因為二進製文件將位於與庫和 setuid 可執行文件忽略相同的 user:group 下 LD_PRELOAD/LD_LIBRARY_PATH。它還會增加 RSS 佔用空間並造成升級問題。
5.4 記憶體
限制對內核內存的訪問
Linux系統中的/dev/kmem文件直接映射到內核虛擬內存。如果攻擊者獲得 root 訪問權限,這可能是災難性的,因為攻擊者可以直接訪問內核虛擬內存。
要禁用應用程序很少使用的 /dev/kmem 文件,應在編譯時內核配置中配置以下內核選項:
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-RestrictAccess-1 | CONFIG_DEVKMEM |
n |
如果用戶空間中的應用程序需要 /dev/kmem 支持,則它應該僅適用於經過身份驗證的應用程序。
禁用對內核內核轉儲(CoreDump)的訪問
此內核配置禁止從用戶空間訪問內核內核轉儲。如果啟用,它可以為攻擊者提供內核內存的有用視圖。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-CoreDump-1 | CONFIG_PROC_KCORE |
n |
禁用交換 (SWAP)
如果不禁用,攻擊者可以在運行時啟用交換,給內存子系統增加壓力,然後搜索寫入交換的頁面以獲取有用的信息。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Swap-1 | CONFIG_SWAP |
n |
- 在運行時啟用交換需要
CAP_SYS_ADMIN. - 交換塊設備通常位於 root:disk 下。
- Linux 從不交換內核頁面。
- 如果無法禁用交換,則應啟用交換加密。
禁用“加載所有符號” (LoadAllSymbols)
有一個 /proc/kallsyms 文件,它公開了許多內核符號(函數、變量等)的內核內存空間地址。此信息對於攻擊者識別內核版本/配置以及為利用內核空間準備有效負載非常有用。
KALLSYMS_ALL 和 KALLSYMS均應被禁用;
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-LoadAllSymbols-1 | CONFIG_KALLSYMS |
n |
| Kernel-Memory-LoadAllSymbols-2 | CONFIG_KALLSYMS_ALL |
n |
允用堆棧保護(Stack Protector)
為了防止堆棧崩潰,類似於用戶空間中 ELF 程序使用的堆棧保護器,內核也可以保護其內部堆棧。
Linux 3.11 及更高版本支持此配置,因此應僅針對此類版本啟用。
此配置還需要使用gcc 編譯器 4.2 或更高版本構建內核。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Stack-1 | CONFIG_CC_STACKPROTECTOR |
y |
其他防禦措施包括影子堆棧之類的東西。
禁止訪問 /dev/mem
Linux系統中的/dev/mem文件直接映射到物理內存。如果攻擊者獲得 root 訪問權限,這可能是災難性的,因為攻擊者可以通過這個方便的設備文件直接訪問物理內存。可能並不總是可以禁用此類文件,因為某些應用程序可能需要此類支持。在這種情況下,該設備文件應僅可用於經過身份驗證的應用程序。
Linux 4.0 及更高版本支持此配置,因此僅應在此類版本中禁用此配置。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Access-1 | CONFIG_DEVMEM |
n |
禁用跨內存連接
禁用 processvm*v 系統調用,該系統調用允許一個進程存取另一個進程的虛擬內存。
Linux 3.5 及更高版本支持此配置,因此僅應在此類版本中禁用。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-CrossMemAttach-1 | CROSS_MEMORY_ATTACH |
n |
允用堆棧粉碎攻擊檢查
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-Memory-StackSmashing-1 | -fstack-protector-all |
Enable |
發出額外的代碼來檢查緩衝區溢出,例如堆棧粉碎攻擊。
允許檢測緩衝區溢出
| Domain 領域 | compiler options and config name |
Value |
|---|---|---|
| Kernel-Memory-BufferOverflows-1 | -D_FORTIFY_SOURCE |
2 |
| Kernel-Memory-BufferOverflows-2 | CONFIG_FORTIFY_SOURCE |
y |
幫助檢測一些緩衝區溢出錯誤。
5.5 串口控制台(Serial Console)
禁用串口控制台
應禁用串口控制台以防止攻擊者訪問這個強大的接口。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-Serial-1 | CONFIG_SERIAL_8250 |
n |
| Kernel-Consoles-Serial-2 | CONFIG_SERIAL_8250_CONSOLE |
n |
| Kernel-Consoles-Serial-3 | CONFIG_SERIAL_CORE |
n |
| Kernel-Consoles-Serial-4 | CONFIG_SERIAL_CORE_CONSOLE |
n |
調整內核命令行(Kernel Command Line)
內核命令行用於控制引導內核的許多方面,並且很容易被篡改,因為它們在 RAM 中傳遞,而對這些參數幾乎沒有反向驗證。為了防止這種類型的攻擊,內核應配置為忽略命令行參數,並使用預配置(編譯時)選項。
在該項中配置內核命令行CONFIG_CMDLINE KConfig,然後不從引導加載程序傳遞任何參數。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-CommandLine-1 | CONFIG_CMDLINE_BOOL |
y |
| Kernel-Consoles-CommandLine-2 | CONFIG_CMDLINE |
"insert kernel command line here" |
| Kernel-Consoles-CommandLine-3 | CONFIG_CMDLINE_OVERRIDE |
y |
建議從只讀存儲器(或文件)存儲和訪問每個設備的任何配置(例如:MAC 地址、序列號等),並且在使用任何此類參數之前對其進行驗證(簽名檢查) 。
禁用 KGDB
Linux 內核通過 USB 和控制台端口支持 KGDB。kgdbdbgp這些機制由和kgdboc內核命令行參數控制。重要的是要確保沒有發布的產品包含編譯有 KGDB 的內核。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-KDBG-1 | CONFIG_KGDB |
n |
禁用 magic sysrq 支持
在某些體系結構上,您可以通過鍵盤訪問功能強大的調試器界面。同樣強大的界面可以出現在其他架構上的 Linux 的串口控制台(響應串行中斷)上。禁用以避免潛在地暴露這個強大的後門。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-SysRQ-1 | CONFIG_MAGIC_SYSRQ |
n |
禁用對除 ELF 之外的二進制格式的支持
這將使將包裝驅動的二進制格式插入內核成為可能。它支持 ELF 以外的二進制格式。提供使用備用解釋器的能力將有助於攻擊者發現攻擊向量。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-BinaryFormat-1 | CONFIG_BINFMT_MISC |
n |
5.6 調試
文件系統上不應存在調試器。這包括但不限於 GNU 調試器客戶端/服務器(通常以其縮寫名稱而聞名,例如分別為 和gdb可執行gdbserver二進製文件)、 LLDB下一代調試器或TCF(目標通信框架)無關框架。將這些二進製文件作為文件系統的一部分將有助於攻擊者對設備上當前正在執行的任何進程進行逆向工程和調試(本地或遠程)。
禁用內核調試符號
應始終從生產內核中刪除調試符號,因為它們為攻擊者提供了大量信息。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Symbols-1 | CONFIG_DEBUG_INFO |
n |
這些內核調試符號由內核中的其他配置項啟用。還應注意禁用它們。如果CONFIG_DEBUG_INFO無法禁用,那麼啟用CONFIG_DEBUG_INFO_REDUCED是次佳的。
至少CONFIG_DEBUG_INFO_REDUCED應該始終允許開發人員將 oops 消息中的地址轉換為行號。
禁用 Kprobe
Kprobes 使您能夠動態地侵入任何內核例程並無中斷地收集調試和性能信息。您可以在幾乎任何內核代碼地址處捕獲,指定命中斷點時要調用的處理程序例程。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Kprobes-1 | CONFIG_KPROBES |
n |
禁用跟踪
FTrace 使內核能夠跟踪每個內核函數。提供內核跟踪功能將幫助攻擊者發現攻擊向量。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Tracing-1 | CONFIG_FTRACE |
n |
禁用分析
分析和 OProfile 可以分析整個系統,包括內核、內核模組、庫和應用程序。提供分析功能將幫助攻擊者發現攻擊向量。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Profiling-1 | CONFIG_OPROFILE |
n |
| Kernel-Debug-Profiling-2 | CONFIG_PROFILING |
n |
禁用 BUG() 上的 OOPS 打印
當嘗試確定漏洞利用的有效性時,OOPS 打印的輸出對於面向返回編程 (ROP) 很有幫助。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-OOPSOnBUG-1 | CONFIG_DEBUG_BUGVERBOSE |
n |
禁用內核調試
內核中存在由 DEBUG_KERNELconf.d啟用的僅用於開發的代碼分支。應該禁用此功能來編譯這些分支。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Dev-1 | CONFIG_DEBUG_KERNEL |
n |
| Kernel-Debug-Dev-2 | CONFIG_EMBEDDED |
n |
在某些內核版本中,禁用此功能還需要禁用 CONFIG_EMBEDDED, 和CONFIG_EXPERT。禁用使得CONFIG_EXPERT無法禁用COREDUMP、DEBUG_BUGVERBOSE、NAMESPACES和KALLSYMS 。BUG在這種情況下,最好啟用此選項而不是啟用其他選項。
禁用內核調試文件系統
內核調試文件系統向攻擊者提供了許多有用的信息和操縱內核的方法。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-FileSystem-1 | CONFIG_DEBUG_FS |
n |
禁用 BUG() 支持
內核會在內核空間中顯示 BUG 和 WARN 的回溯和註冊信息,使攻擊者更容易開發漏洞。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-BUG-1 | CONFIG_BUG |
n |
禁用內核轉儲(CoreDumps)
內核轉儲為黑客提供了大量調試信息。因此,建議在生產版本中禁用內核轉儲。
Linux 3.7 及更高版本支持此配置,因此僅應在此類版本中禁用此配置。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-CoreDumps-1 | CONFIG_COREDUMP |
n |
限制內核地址顯示
當攻擊者嘗試開發針對內核漏洞的“隨處運行”漏洞時,他們經常需要知道內部內核結構的位置。通過將內核地址視為敏感信息,這些位置對於普通本地用戶來說是不可見的。
/proc/sys/kernel/kptr_restrict 配置為“1”以阻止已知內核地址洩漏的報告。
| Domain 領域 | File name |
Value |
|---|---|---|
| Kernel-Debug-AdressDisplay-1 | /proc/sys/kernel/kptr_restrict |
1 |
此外,各種文件和目錄只能由 root 用戶讀取:/boot/vmlinuz*, /boot/System.map*, /sys/kernel/debug/, /proc/slabinfo
| Domain 領域 | File or Directorie name |
State |
|---|---|---|
| Kernel-Debug-AdressDisplay-1 | /boot/vmlinuz* |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-2 | /boot/System.map* |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-3 | /sys/kernel/debug/ |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-4 | /proc/slabinfo |
Readable Only for root user |
限制 DMESG
當攻擊者嘗試開發“隨處運行”漏洞利用時,他們經常會使用dmesg輸出。通過將dmesg輸出視為敏感信息,攻擊者將無法獲得此輸出。
/proc/sys/kernel/dmesg_restrict 可以配置為“1”以將 dmesg 輸出視為敏感。
| Domain 領域 | File name |
Value |
|---|---|---|
| Kernel-Debug-DMESG-1 | /proc/sys/kernel/dmesg_restrict |
1 |
在構建用戶空間應用程序時啟用以下編譯器和鏈接器選項,以避免堆棧崩潰、緩衝區溢出攻擊。
禁用/proc/config.gz
不要將生產設備上使用的內核配置暴露給潛在的攻擊者,這一點非常重要。通過訪問內核配置,攻擊者有可能為設備構建自定義內核,從而禁用關鍵安全功能。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Config-1 | CONFIG_IKCONFIG |
n |
5.7 文件系統
禁用所有不需要的文件系統
為了減少攻擊面,文件系統數據由內核解析,因此文件系統驅動程序中的任何邏輯錯誤都可能成為內核漏洞。
禁用 NFS 文件系統
NFS 文件系統在開發階段很有用,但對於攻擊者來說,當您處於生產模式時,這可能是一種非常有用的獲取文件的方法,因此我們必須禁用它們。
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-FileSystems-NFS-1 | CONFIG_NFSD |
n |
| Kernel-FileSystems-NFS-2 | CONFIG_NFS_FS |
n |
添加分區掛載選項
掛載文件系統時可以對其配置多種安全限制。一些常見的安全選項包括但不限於:
nosuid– 不允許配置用戶標識符或配置組標識符位生效。
nodev– 不要解釋字符或阻止文件系統上的特殊設備。
noexec– 不允許在已安裝的文件系統上執行任何二進製文件。
ro– 將文件系統掛載為只讀。
以下標誌應用於掛載通用文件系統:
| Domain 領域 | Partition |
Value |
|---|---|---|
| Kernel-FileSystems-Mount-1 | /boot |
nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-2 | /var & /tmp |
In /etc/fstab or vfstab, add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-3 | Non-root local | If type is ext2 or ext3 and mount point not ‘/’, add nodev. |
| Kernel-FileSystems-Mount-4 | Removable storage | Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-5 | Temporary storage | Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-6 | /dev/shm |
Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-7 | /dev |
Add nosuid and noexec. |
如果CONFIG_DEVTMPFS_MOUNT配置了,那麼內核將掛載 /dev 並且不會應用nosuid,noexec選項。禁用CONFIG_DEVTMPFS_MOUNT或添加重新安裝noexec以及nosuid系統啟動選項。
| Domain 領域 | Config name |
State or Value |
|---|---|---|
| Kernel-FileSystems-Mount-1 | CONFIG_DEVTMPFS_MOUNT |
Disabled or add remount with noexec and nosuid to system startup. |
6. 平台藍圖
6.1 概述
汽車級 Linux 平台是一個具有AGL 兼容應用程序和服務的 Linux 發行版。該平台包括以下軟體:
- 為參考板配置的Linux BSP 。
- 適用於參考板上常見外設的專有設備驅動程序。
- 應用框架。
- 窗口/圖層管理(圖形)。
- 健全的資源管理。
- 原子軟體更新系統(更新章節)。
- 構建和調試工具(基於 Yocto 項目)。
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Abstract-1 | Create a graphics and sound part. 創建圖形和聲音部分。 |
本部分重點介紹 AGL 平台,包括用於升級安全性和降低危險性的所有工具和技術。必須可以應用文件開頭所寫的兩個基本原則。首先,安全管理必須保持簡單。您還必須默認禁止一切,然後定義一組授權規則。作為要處理的案件,我們必須:
- 為進程和文件實現MAC 。
- 限制應用程序之間的通信(SystemBus和SystemD部分)。
- 禁止開發模式期間使用的所有工具(實用程序和服務 部分)。
- 管理用戶能力(用戶部分)。
- 管理應用程序權限和策略(AGLFw部分)。
用於滿足這些需求的工具和概念僅是示例。可以使用滿足需要的任何其他工具。
在 AGL 中,與許多其他嵌入式系統一樣,內核層中配置了不同的安全機制,以確保隔離和數據隱私。雖然強制訪問控制層 ( SMACK ) 提供全局安全性和隔離,但需要其他機制(例如Cynara)在運行時檢查應用程序的權限。應用權限(也稱為“特權”)可能會根據用戶和正在運行的應用程序而有所不同:僅當應用程序由正確的用戶運行並且被授予適當的權限時,應用程序才應有權訪問給定的服務。
自主訪問控制 DAC
自主訪問控制( DAC ) 是一種將用戶和組相互分離的傳統 Linux 方法。在多個用戶可以訪問計算機或網絡的共享環境中,Unix ID 提供了一種將個人訪問權限限制在權限區域內或在組或系統之間共享的方法。Android 系統更進一步,為每個應用程序分配新的用戶 ID。這從來都不是 Linux UID 的初衷,但它能夠提供 Android 最初的安全元素:沙箱應用程序的能力。
雖然AGL提到使用DAC進行安全隔離,但安全責任的重心在於強制訪問控制(MAC)和Cynara。此外,還有具有唯一 UID 的系統服務。不過,該系統並沒有走Android的極端,每個應用程序都有自己的UID。AGL 中的所有沙箱(應用程序隔離)均在MAC上下文中處理。
強制訪問控制 MAC
強制訪問控制( MAC ) 是DAC的擴展,通過擴展屬性 (xattr) 與文件系統關聯。對於 AGL,smackfs 文件系統允許文件和目錄與 SMACK 標籤關聯,從而提供進一步區分訪問控制的能力。SMACK 標籤是一個簡單的以空字符結尾的字符串,最大長度為 255 個字節。雖然它不提供 SELinux 標籤的豐富性(提供用戶、角色、類型和級別),但單個值的簡單性使得整體設計變得不那麼複雜。可以說,安全作者在製定的策略中犯錯誤的可能性較小。
縮略語
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| ACL | Access Control Lists |
| alsa | Advanced Linux Sound Architecture |
| API | Application Programming Interface |
| AppFw | Application Framework |
| BSP | Board Support Package |
| Cap | Capabilities |
| DAC | Discretionary Access Control |
| DDOS | Distributed Denial Of Service |
| DOS | Denial Of Service |
| IPC | Inter-Process Communication |
| MAC | Mandatory Access Control |
| PAM | Pluggable Authentication Modules |
| SMACK | Simplified Mandatory Access Control Kernel |
6.2 強制訪問控制 MAC
我們決定將MAC保護放在平台部分,儘管它也適用於內核,因為它的使用主要在平台級別(底層部分除外)。
強制訪問控制( MAC) 是Linux內核提供的一種保護,需要Linux安全模組( LSM ) 。AGL使用稱為簡化強制訪問控制內核( SMACK)的 LSM。此保護涉及創建SMACK標籤作為文件擴展屬性的擴展屬性SMACK標籤 的一部分。並且還創建了一個策略來定義每個標籤的行為。
內核訪問控制基於這些標籤和該策略。如果沒有規則,則不會授予訪問權限,因此,未經明確授權的內容將被禁止。
SMACK標籤有兩種類型:
- 執行 SMACK(附加到進程):定義 該進程如何訪問和創建文件。
- 文件訪問SMACK(寫入文件的擴展屬性):定義 哪個進程可以訪問該文件。
默認情況下,進程使用其文件訪問SMACK標籤執行,除非定義了執行SMACK標籤。
AGL 的SMACK方案基於Tizen 3 Q2/2015。它將系統分為以下幾個域:
- Floor. 地面
- System. 系統
- Applications, Services and User. 應用程序、服務和用戶
有關更多信息,請參閱AGL 安全框架審查 和Smack 白皮書。
地面 / Floor
底層域包括基本系統服務以及任何相關的數據和庫。該數據在運行時保持不變。僅在開發模式或軟體安裝或升級期間允許寫入底層文件或目錄。
下表詳細介紹了底域:
| Label | Name | Execution SMACK | File Access SMACK |
|---|---|---|---|
- |
Floor | r-x for all |
Only kernel and internal kernel thread. |
^ |
Hat | --- for all |
rx on all Domain 領域s. |
* |
Star | rwx for all |
None |
- Hat 標籤僅適用於特權系統服務(當前僅 systemd-journal)。對於備份或病毒掃描很有用。除調試日誌外,不應存在帶有此標籤的文件。
- 星號標籤用於設備文件或通過DAC
/tmp管理的訪問限制。各個文件仍然受到SMACK標籤的保護。
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-Floor-1 | ^ |
Only for privileged system services. 僅適用於特權系統服務。 |
| Kernel-MAC-Floor-2 | * |
Used for device files or /tmp Access restriction via DAC. 用於設備文件或 /tmp通過 DAC 進行訪問限制。 |
系統 / System
系統域包括操作系統的一組精簡的內核系統服務和任何相關數據。該數據可能會在運行時發生變化。
下表詳細介紹了系統域:
| Label | Name | Execution SMACK | File Access SMACK |
|---|---|---|---|
System |
System | None | Privileged processes |
System::Run |
Run | rwxatl for User and System label |
None |
System::Shared |
Shared | rwxatl for system Domain 領域 r-x for User label |
None |
System::Log |
Log | rwa for System label xa for user label |
None |
System::Sub |
SubSystem | Subsystem Config files | SubSystem only |
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-System-1 | System |
Process should write only to file with transmute attribute. 進程應該只寫入具有 transmute 屬性的文件。 |
| Kernel-MAC-System-2 | System::run |
Files are created with the directory label from user and system Domain 領域 (transmute) Lock is implicit with w.文件是使用來自用戶和系統域的目錄標籤創建的(transmute) 鎖定是隱式的 w。 |
| Kernel-MAC-System-3 | System::Shared |
Files are created with the directory label from system Domain 領域 (transmute) User Domain 領域 has locked privilege. 文件是使用系統域的目錄標籤創建的(transmute) 用戶域具有鎖定權限。 |
| Kernel-MAC-System-4 | System::Log |
Some limitation may impose to add w to enable append.w添加以啟用附加可能會施加一些限制。 |
| Kernel-MAC-System-5 | System::Sub |
Isolation of risky Subsystem. 隔離有風險的子系統。 |
應用程序、服務和用戶 / Applications, Services and User
應用程序、服務和用戶域包括向系統和用戶提供服務的代碼以及任何相關數據。在此域上運行的所有代碼均在Cynara控制之下。
下表詳細介紹了應用程序、服務和用戶域:
| Label | Name | Execution SMACK | File Access SMACK |
|---|---|---|---|
User::Pkg::$AppID |
AppID | rwx (for files created by the App). rx for files installed by AppFw |
$App runtime executing $App |
User::Home |
Home | rwx-t from System label r-x-l from App |
None |
User::App-Shared |
Shared | rwxat from System and User Domain 領域s label of $User |
None |
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-System-1 | User::Pkg::$AppID |
Only one Label is allowed per App. A data directory is created by the AppFw in rwx mode.每個應用程序僅允許一個標籤。數據目錄由AppFw 在 rwx模式下創建。 |
| Kernel-MAC-System-2 | User::Home |
AppFw needs to create a directory in /home/$USER/App-Shared at first launch if not present with label app-data access is User::App-Shared without transmute.在 /home/$USER/App-Shared如果不存在標籤應用程序數據訪問則User::App-Shared無需轉換,AppFw 需要在首次啟動時創建一個目錄。 |
| Kernel-MAC-System-3 | User::App-Shared |
Shared space between all App running for a given user. 為給定用戶運行的所有應用程序之間的共享空間。 |
攻擊向量
該系統有 4 個主要組件:
- LSM 內核模組。
- 文件
smackfs系統。 - 用於策略管理和檢查的基本實用程序。
- 策略/配置數據。
與任何強制訪問系統一樣,需要小心地將策略管理與檢查分開,因為管理實用程序可能成為方便的攻擊點。策略系統的動態添加需要仔細驗證,因為通常需要更新策略的能力,但會引入可能的威脅。最後,即使策略管理得到很好的保護,策略檢查和檢查的失敗響應對於系統的順利運行也至關重要。
雖然與 DAC 相比, MAC的安全性無疑得到了提升,但仍然有很多方法可以危害支持 SMACK 的 Linux 系統。其中一些方法如下:
- 在調用內核時禁用 SMACK(使用命令行:security=none)。
- 在內核構建中禁用 SMACK 並重新部署內核。
- 在安裝時更改文件或目錄的 SMACK 屬性。
- 篡改具有 CAP_MAC_ADMIN 權限的進程。
- 配置/重新配置文件的 SMACK 標籤。
- 篡改默認域(即/etc/smack/accesses.d/default-access-Domain 領域s)。
- 禁用或篡改 SMACK 文件系統(即 /smackfs)。
- 添加策略
smackload(如果不存在則添加實用程序)。 - 更改標籤
chsmack(如果不存在則添加實用程序)。
6.3 SystemD
afm-system-daemon用於:
- 管理用戶和用戶會話。
- 配置應用程序和服務(CGroups、命名空間、自動啟動、權限)。
- 用於
libsystemd其程序(事件管理、D-Bus接口)。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-SystemD-1 | Security model | Use Namespaces for containerization. 使用命名空間進行容器化。 |
| Platform-SystemD-2 | Security model | Use CGroups to organise processes. 使用 CGroup 來組織流程。 |
有關更多信息,請參閱systemd 集成和用戶管理。
好處 Benefits
- 刪除一個特權進程:afm-user-daemon
- 訪問和使用高級功能:
- 套接字激活。
- 用戶管理和PAM集成。
- 服務的依賴解析。
Cgroups和資源控制。Namespaces集裝箱化。- 自動啟動所需的 API。
- 權限和安全配置。
- 網絡管理。
控制組 CGroups
控制組提供了很多功能,其中最有用的功能是您可以控制的:內存使用情況、分配了多少 CPU 時間、允許多少設備 I/O 或可以訪問哪些設備。SystemD使用CGroup來組織進程(每個服務都是一個CGroup,並且由該服務啟動的所有進程都使用該CGroup)。默認情況下,SystemD自動創建切片、範圍和服務單元的層次結構,為CGroups樹提供統一的結構。使用該systemctl命令,您可以通過創建自定義切片來進一步修改此結構。目前,在 AGL 中,有 2 個切片(user.slice和system.slice)。
命名空間 Namespaces
用戶側
有多種方法可以驗證用戶身份(按鍵射頻、電話、手勢……)。每次身份驗證都會向經過身份驗證的用戶動態分配uid。Uids用於確保用戶隱私,SMACK 用於確保應用程序隱私。
首先,用戶通過PAM激活來發起身份驗證。PAM 標准通過模組化設計(例如面部識別、語音識別或密碼)提供高度可配置的身份驗證。然後用戶應該通過服務和應用程序訪問身份服務。
6.4 D-Bus 進程間通訊/守護
D-Bus 是一種著名的IPC(進程間通信)協議(和守護進程),可幫助應用程序相互通信。D-Bus 的使用非常有用,因為它可以實現發現和信令。
D-Bus 會話默認由環境變量尋址 DBUS_SESSION_BUS_ADDRESS。使用systemd變量 DBUS_SESSION_BUS_ADDRESS會自動為用戶會話配置。D-Bus 的使用與權限相關。
D-Bus 已經存在一些安全問題 (主要是DoS問題),以允許應用程序繼續相互通信。防範此類攻擊對於保持系統更加穩定非常重要。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-DBus-1 | Security model | Use D-Bus as IPC. 使用D-Bus作為IPC。 |
| Platform-DBus-2 | Security model | Apply D-BUS security patches: D-Bus CVE 應用 D-BUS 安全補丁 |
6.5 系統服務和守護進程
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Services-1 | SystemD ? |
| Platform-Services-2 | Secure daemon ? |
工具
- connman:一個互聯網連接管理器,旨在精簡併使用盡可能少的資源。它是一個完全模組化的系統,可以通過插件進行擴展,以支持各種有線或無線技術。
- bluez是一個藍牙堆棧。其目標是製定藍牙無線標準規範的實施方案。除了基本堆棧之外,
bluez-utils和bluez-firmware軟體包還包含低級實用程序,例如dfutool可以詢問藍牙適配器芯片組以確定其韌體是否可以升級。 - gstreamer是一個基於管道的多媒體框架。它可用於構建一個系統,以一種格式讀取文件、處理它們並以另一種格式導出它們。
- alsa是一個軟體框架,是 Linux 內核的一部分, 為聲卡設備驅動程序提供API 。
| Domain 領域 | Tool name |
State |
|---|---|---|
| Platform-Utilities-1 | connman |
Used as a connection manager. 用作連接管理器。 |
| Platform-Utilities-2 | bluez |
Used as a Bluetooth manager. 用作藍牙管理器。 |
| Platform-Utilities-3 | gstreamer |
Used to manage multimedia file format. 用於管理多媒體文件格式。 |
| Platform-Utilities-4 | alsa |
Used to provides an API for sound card device drivers. 用於為聲卡設備驅動程序提供API。 |
6.6 應用程序框架/模型(AppFw)
AGL應用程序框架由幾個互操作的部分組成:
- SMACK:內核級LSM(Linux安全模組),執行系統的擴展訪問控制。
- Cynara:本機網守守護進程,用於策略處理、更新數據庫和策略檢查。
- 安全管理器:一個主服務,所有安全事件都通過它發生。
- 幾個本機應用程序框架實用程序:
afm-main-binding、afm-user-daemon、afm-system-daemon。
應用程序框架管理:
- 應用程序和服務管理:安裝、卸載、列出……
- 應用程序的生命週期:開始->(暫停、恢復)->停止。
- 事件和信號傳播。
- 權限授予和檢查。
- 用於與應用程序交互的 API。
- 安全模型是指用於確保安全性的安全模型以及為實現該模型而提供的工具。這是一個不應影響應用程序框架之上的層的實現細節。
- 安全模型是指系統如何使用DAC(自由訪問控制)、MAC(強制訪問控制)來保證安全和 隱私。它還包括使用審核功能以及管理日誌和警報進行報告的功能。
Capabilities
AppFw使用安全模型來確保其管理的應用程序的安全性和隱私性。它必須符合底層安全模型。但它應該對應用程序隱藏它。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-AGLFw-AppFw-1 | Security model | Use the AppFw as Security model. 使用 AppFw 作為安全模型。 |
有關詳細信息,請參閱AGL AppFw 權限管理 和AGL – 應用程序框架文檔。
安全管理器將策略信息傳達給Cynara,Cynara 將信息以帶有逗號分隔值 (CSV) 的文本文件格式保留在自己的數據庫中。有規定在更新文件時保留 CSV 文本文件的副本。
運行時檢查通過Cynara進行。添加到框架中的每個應用程序都有自己的 SMACK 上下文和 D 總線綁定的實例。afb_daemon 和 Binder 形成一個 Web 服務,通過 http 或 Websocket 從應用程序本身進行通信。此 http 或 websocket 接口使用標準的唯一 Web 令牌進行 API 通信。

Cynara 策略檢查器服務
需要另一種機制來負責檢查應用權限:目前在 AGL 中,此任務依賴於策略檢查器服務 ( Cynara )。
- 將復雜的策略存儲在數據庫中。
- “軟”安全性(訪問由框架檢查)。
Cynara 與D-Bus交互以傳遞此信息。
Cynara 由幾個部分組成:
- Cynara:用於控制策略和響應訪問控制請求的守護進程。
- 數據庫:保存保單的地方。
- 庫:幾個用於與 Cynara 通信的靜態和動態庫。
守護進程通過 Unix 域套接字與庫進行通信。數據庫存儲格式是一系列帶有索引文件的類似 CSV 的文件。
攻擊者可以通過多種方式操縱 Cynara 系統的策略:
- 通過終止進程來禁用 Cynara。
- 篡改磁盤上或內存中的 Cynara 二進製文件。
- 損壞 Cynara 控制的數據庫。
- 篡改 Cynara 控制的數據庫。
- 劫持 Cynara 和數據庫之間的通信。
基於文本的數據庫是系統中最薄弱的部分,儘管存在一些一致性機制(即備份防護),但這些機制充其量是薄弱的,並且很容易被攻擊者反擊。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-AGLFw-Cynara-1 | Permissions | Use Cynara as policy-checker service. 使用 Cynara 作為策略檢查服務。 |
政策
- 政策規則:
- 很簡單 – 對於 [應用程序上下文、權限] 對,有直接答案(單一策略類型):[允許/拒絕/…]。
- 不執行任何代碼(無腳本)。
- 可以輕鬆緩存和管理。
- 應用程序上下文(描述用戶的 ID 和應用程序憑據)它的構建如下:
- 運行應用程序的用戶的 UID。
- 應用程序的SMACK標籤。
持有政策
政策保存在桶中。存儲桶是一組具有默認答案屬性的策略,如果沒有策略與搜索鍵匹配,則會產生默認答案。存儲桶的名稱可能會在策略中使用(用於指示)。
攻擊向量
以下攻擊向量並不完全獨立。雖然攻擊者可能對 AGL 系統具有不同級別的訪問權限,但經驗表明,典型的攻擊可以從直接訪問系統開始,找到漏洞,然後繼續自動化攻擊,以便可以從不易訪問的角度調用攻擊(例如遠程)。因此,評估所有威脅級別並適當保護系統非常重要,因為了解直接訪問攻擊是遠程攻擊的門戶。
遠程攻擊
用於應用程序的本地 Web 服務器接口是第一個攻擊點,因為 Web 服務 API 很容易被理解並且很容易被攔截。通過本地服務重定向 Web 請求並利用 API,本地 Web 服務器可能會被利用。雖然在 Web 服務 API 上使用了安全令牌,但這充其量只是弱文本匹配。這並不難欺騙。眾所周知,API 密鑰不提供任何真正的安全性。
http/web 服務接口的架構包含可能為本地或 HTML5 編寫的應用程序提供了最大的靈活性。然而,這種靈活性可能會以安全問題為代價。例如,如果本機應用程序直接鏈接到底層框架服務,那麼對通過 Web 服務接口進行遠程攻擊的擔憂就會減少。
讓接口保持原樣,減輕攻擊可能包括使用加密協議進一步保護接口層:例如加密信息傳遞、密鑰交換(例如橢圓曲線Diffie-Hellman)。
用戶級本機攻擊
- 修改 CSV 數據庫
- 修改 SQLite 數據庫
- 篡改用戶級二進製文件
- 篡改用戶守護進程
- 欺騙 D 總線接口
- 添加可執行文件/庫
由於直接訪問設備,本機級別存在許多安全問題。例如,由於Cynara使用帶有逗號分隔值 (CSV) 的文本文件數據庫,攻擊者可以簡單地修改數據庫來提升應用程序的權限。一旦單個應用程序擁有系統上可能的所有權限,漏洞就可以通過這種方式進行。同樣,安全管理器使用的 SQLite 數據庫與簡單的文本文件沒有太大區別。有許多工具可用於添加、刪除、修改 SQLite 數據庫中的條目。
在下一個層面上,常見的攻擊點是修改二進製文件或守護程序以利用功能。有許多 Linux 工具可以在這方面提供幫助,包括:IDA Pro和Radare2。通過修改二進製文件的能力,攻擊者可以執行任意數量的活動,包括:刪除對安全檢查的調用、重定向控制以繞過驗證功能、忽略安全策略處理、升級權限等。
此外,另一個攻擊途徑是欺騙 D 總線接口。D-bus 是一種基於進程間通信 (IPC) 構建的消息傳遞系統,其中基於協議傳遞結構化消息。該接口是通用的並且有詳細的文檔記錄。因此,修改或添加二進製文件/庫來欺騙此接口是一個相對簡單的過程。一旦接口被欺騙,攻擊者就可以發出任意數量的命令來控制低級功能。
保護系統免受本機攻擊需要採取有條不紊的方法。首先,系統應該拒絕未經批准運行的進程。安裝時的簽名級驗證將在這方面有所幫助,但運行時完整性驗證要好得多。簽名需要來自授權方,這將在應用程序商店的後面部分中進一步討論。
在下一個級別上,不應允許可執行文件執行未經授予權限的操作。DAC 和 SMACK 政策可以在這方面提供幫助。另一方面,仍然存在對內存訪問、系統調用和其他可能未被檢測到的進程活動的擔憂。因此,監視所有活動的安全環境可以指示系統上所有未經授權的活動。
最後,捕獲系統中的直接篡改攻擊是非常困難的。這些類型的攻擊需要採用深度防禦方法,其中需要補充軟體保護和強化技術。防篡改和反逆向工程技術包括程序轉換/混淆、完整性驗證和白盒加密。如果以相互依賴的方式應用並考慮性能/安全權衡,該方法可以為對系統的直接攻擊提供有效的屏障。此外,威脅監控的使用提供了寶貴的遙測/分析能力以及對受到攻擊的系統做出反應和更新的能力。
根級本機攻擊
- 篡改系統守護進程
- 篡改西納拉
- 篡改安全管理器
- 禁用 SMACK
- 篡改內核
一旦在設備上實現了根級訪問(即su),就有很多方法可以危害系統。系統守護進程Cynara和安全管理器容易受到篡改攻擊。例如,可以在內存中修改可執行文件以堵塞分支、跳轉到某個地址或忽略檢查。這可以像用 NOP 替換分支指令、更改內存值或使用調試器(例如 gdb、IDA)更改指令一樣簡單。篡改這些可執行文件意味著可以忽略策略並繞過驗證檢查。
即使不篡改可執行文件,SMACK系統也容易受到攻擊。例如,如果內核停止並使用security=none標誌重新啟動,則不會啟用 SMACK。此外,在啟動期間systemd 開始加載SMACK規則。如果這個啟動過程受到干擾,那麼SMACK將不會運行。或者,可以添加新策略,smackload允許替代應用程序/可執行文件具有不可預見的權限。
對內核級別的另一種入侵是重建內核(因為它是開源的)並將其替換為禁用了SMACK 的副本,甚至只是禁用了SMACK文件系統 ( smackfs)。如果沒有擴展標籤屬性,SMACK系統將被禁用。
對設備的根級訪問具有最終的權力,整個系統都可能受到損害。更重要的是,具有此級別訪問權限的系統允許攻擊者製作更簡單的點攻擊,該攻擊可以在需要較少特權的級別上進行操作(例如遠程訪問、用戶級訪問)。
脆弱資源
資源:afm-user-daemon
它afm-user-daemon負責代表用戶處理應用程序。其主要任務是:
- 枚舉最終用戶可以運行的應用程序並根據需要保留此列表。
- 代表最終用戶啟動應用程序,配置用戶運行環境,配置用戶安全上下文。
- 列出當前可運行或正在運行的應用程序。
- 停止(又稱為暫停)、繼續(又稱為恢復)、終止給定應用程序的正在運行的實例。
- 將應用程序安裝/卸載請求傳輸到相應的系統守護進程 afm-system-daemon。
啟動應用程序afm-user-daemon。它先為應用程序構建一個安全的環境,然後再在該環境中啟動應用程序。可以根據描述如何在給定啟動模式(本地或遠程)內啟動給定類型的應用程序的配置文件來啟動不同類型的應用程序。在本地啟動應用程序意味著應用程序及其綁定程序一起啟動。遠程啟動應用程序意味著僅啟動應用程序綁定器。
UI 本身必須通過請求遠程激活(即瀏覽器中的 HTML5 主屏幕)。一旦啟動,正在運行的應用程序實例就會收到一個runid標識它們的實例。afm-user-daemon管理已啟動的應用程序列表。當擁有正確的權限時,客戶端可以獲得正在運行的實例的列表以及有關特定正在運行的實例的詳細信息。它還可以終止、停止或繼續給定的應用程序。如果客戶端擁有正確的權限,afm-user-daemon則將安裝和卸載應用程序的任務委託給afm-system-daemon。
afm-user-daemonsystemd作為附加到用戶會話的服務啟動。通常,服務文件位於/usr/lib/systemd/user/afm-user-daemon.service。
攻擊者目標:
- 禁用
afm-user-daemon。 - 篡改
afm-user-daemon配置。 - /usr/lib/systemd/user/afm-user-daemon.service.
- 應用程序(小部件)config.xml 文件。
- /etc/afm/afm-launch.conf(啟動器配置)。
- 升級用戶權限以獲得更多訪問權限
afm-user-daemon。 - 安裝惡意應用程序(小部件)。
- 篡改
afm-user-daemon磁盤或內存。
資源:afm-system-daemon
負責afm-system-daemon在 AGL 系統上安裝應用程序。其主要任務是:
- 安裝應用程序並為新安裝的應用程序配置安全框架。
- 卸載應用程序。
afm-system-daemon作為附加到系統的服務啟動systemd。通常,服務文件位於/lib/systemd/system/afm-systemdaemon.service。
攻擊者目標:
- 禁用
afm-system-daemon。 - 篡改
afm-system-daemon配置。 - 篡改
afm-system-daemon磁盤或內存。
資源:afb-daemon
afb-binder負責通過 HTTP 接口提供資源和功能。afb-daemon負責將應用程序的一個實例綁定到AGL框架和AGL系統。該應用程序及其配套綁定程序在為其配置的安全且隔離的環境中運行。應用程序旨在通過活頁夾訪問AGL系統。afb-daemon綁定器通過 HTTP 協議提供文件,並為開發人員提供通過 HTTP 或 WebSocket 協議公開應用程序 API 方法的能力。
Binder 綁定用於將 API 添加到afb-daemon. 用戶可以為 編寫綁定afb-daemon。活頁夾afb-daemon有多種用途:
- 它充當應用程序訪問系統的網關。
- 它充當 HTTP 服務器,為 HTML5 應用程序提供文件服務。
- 它允許 HTML5 應用程序具有受安全強制執行的本機擴展,以訪問硬體資源或加速部分算法。
攻擊者目標:
- 擺脫孤立。
- 禁用
afb-daemon。 - 篡改
afb-demon磁盤或內存。 - 通過創建/安裝自定義綁定來 篡改功能
afb-daemon。
6.7 公用程式 Utilities
- busybox:在單個可執行文件中提供多個精簡 Unix 工具的軟體。當然,有必要使用busybox的“生產”版本,以避免所有工具僅在開發模式下有用。
| Domain 領域 | Tool name |
State |
|---|---|---|
| Platform-Utilities-1 | busybox |
Used to provide a number of tools. Do not compile development tools. 用來提供一些工具。不要編譯開發工具。 |
在生產模式中應該刪除的公用程式
例如,在生產模式下,必須禁用許多工具以防止攻擊者查找日誌。這對於限制可見表面很有用,從而使故障查找過程變得複雜。僅在開發模式下使用的工具標有“ agl-devel ”功能。在生產模式下構建時,這些工具將不會被編譯。
| Domain 領域 | Utility name and normal path |
State |
|---|---|---|
| Platform-Utilities-1 | chgrp in /bin/chgrp |
Disabled |
| Platform-Utilities-2 | chmod in /bin/chmod |
Disabled |
| Platform-Utilities-3 | chown in /bin/chown |
Disabled |
| Platform-Utilities-4 | dmesg in /bin/dmesg |
Disabled |
| Platform-Utilities-5 | DnsDomain 領域name in /bin/dnsDomain 領域name |
Disabled |
| Platform-Utilities-6 | dropbear, Remove "dropbear" from /etc/init.d/rcs |
Disabled |
| Platform-Utilities-7 | Editors in (vi) /bin/vi |
Disabled |
| Platform-Utilities-8 | find in /bin/find |
Disabled |
| Platform-Utilities-9 | gdbserver in /bin/gdbserver |
Disabled |
| Platform-Utilities-10 | hexdump in /bin/hexdump |
Disabled |
| Platform-Utilities-11 | hostname in /bin/hostname |
Disabled |
| Platform-Utilities-12 | install in /bin/install |
Disabled |
| Platform-Utilities-13 | iostat in /bin/iostat |
Disabled |
| Platform-Utilities-14 | killall in /bin/killall |
Disabled |
| Platform-Utilities-15 | klogd in /sbin/klogd |
Disabled |
| Platform-Utilities-16 | logger in /bin/logger |
Disabled |
| Platform-Utilities-17 | lsmod in /sbin/lsmod |
Disabled |
| Platform-Utilities-18 | pmap in /bin/pmap |
Disabled |
| Platform-Utilities-19 | ps in /bin/ps |
Disabled |
| Platform-Utilities-20 | ps in /bin/ps |
Disabled |
| Platform-Utilities-21 | rpm in /bin/rpm |
Disabled |
| Platform-Utilities-22 | SSH |
Disabled |
| Platform-Utilities-23 | stbhotplug in /sbin/stbhotplug |
Disabled |
| Platform-Utilities-24 | strace in /bin/trace |
Disabled |
| Platform-Utilities-25 | su in /bin/su |
Disabled |
| Platform-Utilities-26 | syslogd in (logger) /bin/logger |
Disabled |
| Platform-Utilities-27 | top in /bin/top |
Disabled |
| Platform-Utilities-28 | UART in /proc/tty/driver/ |
Disabled |
| Platform-Utilities-29 | which in /bin/which |
Disabled |
| Platform-Utilities-30 | who and whoami in /bin/whoami |
Disabled |
| Platform-Utilities-31 | awk (busybox) |
Enabled |
| Platform-Utilities-32 | cut (busybox) |
Enabled |
| Platform-Utilities-33 | df (busybox) |
Enabled |
| Platform-Utilities-34 | echo (busybox) |
Enabled |
| Platform-Utilities-35 | fdisk (busybox) |
Enabled |
| Platform-Utilities-36 | grep (busybox) |
Enabled |
| Platform-Utilities-37 | mkdir (busybox) |
Enabled |
| Platform-Utilities-38 | mount (vfat) (busybox) |
Enabled |
| Platform-Utilities-39 | printf (busybox) |
Enabled |
| Platform-Utilities-40 | sed in /bin/sed (busybox) |
Enabled |
| Platform-Utilities-41 | tail (busybox) |
Enabled |
| Platform-Utilities-42 | tee (busybox) |
Enabled |
| Platform-Utilities-43 | test (busybox) |
Enabled |
應允許上述啟用的Unix/Linux 實用程序,因為它們經常用於啟動腳本和 USB 日誌記錄。如果設備不需要這些實用程序中的任何一個,則應刪除它們。
6.8 用戶 Users
用戶策略可以按汽車內的功能對用戶進行分組。例如,我們可以考慮一名司機和他的乘客。每個用戶被分配到一個組,以簡化空間安全的管理。
限制root用戶訪問權限
主要應用程序(即提供嵌入式設備主要功能的應用程序)不應以 root 身份或任何功能執行。
如果允許主應用程序以任何能力執行,則整個系統將受到所述應用程序良好行為的支配。當應用程序受到損害並能夠執行可能通過植入惡意應用程序而持續且持續地損害系統的命令時,就會出現問題。
建議中間件和 UI 應在沒有任何能力的用戶的上下文中運行,並且應在沒有任何能力的情況下維護所有持久資源。
確保這一點的一種方法是實現服務器-客戶端範例。系統驅動程序提供的服務可以通過這種方式共享。這種方法的另一個優點是多個應用程序可以同時共享相同的資源。
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-Users-root-1 | Main application | Should not execute as root. 不應以 root 身份執行。 |
| Platform-Users-root-2 | UI | Should run in a context on a user with no capability. 應該在沒有能力的用戶的上下文中運行。 |
不應允許以下實用程序進行 root 訪問:
| Domain 領域 | Utility name |
State |
|---|---|---|
| Platform-Users-root-3 | login |
Not allowed |
| Platform-Users-root-4 | su |
Not allowed |
| Platform-Users-root-5 | ssh |
Not allowed |
| Platform-Users-root-6 | scp |
Not allowed |
| Platform-Users-root-7 | sftp |
Not allowed |
不應允許控制台設備進行 root 訪問。開發環境應允許用戶使用預先創建的用戶帳戶登錄。
開發環境中應允許通過 切換到提升的權限sudo。
用戶能力(User Capabilities)限制
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Users-Capabilities-1 | Kernel or Platform-user? |
| Platform-Users-Capabilities-2 | Add config note. |
目標是限制在AGL中無用的功能。它們被集成到LSM中。每個特權事務都與一種能力相關聯。這些功能分為三組:
- e:有效:這意味著該功能已“激活”。
- p:允許:這意味著該能力可以使用/被允許。
- i:繼承:例如,該功能由子進程在 execve() 上保留。
7. 應用藍圖
應用程序強化:應用於用戶空間應用程序的構建和發布的最佳實踐,以減少潛在攻擊者使用的攻擊面數量。
應用程序 (App) 一詞在AGL中具有非常廣泛的定義。幾乎所有不在內核操作系統 (OS) 中的東西都是應用程序。應用程序可以包含在基礎軟體包(鏡像)中,也可以在運行時添加。
應用程序遏制是通過以下保護來實現的:
- Linux 原生保護
- 強制訪問控制(MAC)
- AGL 平台保護
- 原產地追踪和驗證
- 通過 Cynara 進行應用程序權限管理和執行
- 通過 D-Bus 進行身份驗證的傳輸
7.1 應用類型
AGL 為以不同形式編寫的應用程序提供了一個框架:
- 網絡應用程序:HTML5 + JavaScript
- Qt 應用程序:在 QML 文件中
- 本機應用程序:C 語言
雖然提供多種類型的應用程序沒有壞處,但從安全角度來看,這確實增加了入侵者的攻擊面。應用程序框架 ( AppFw ) 由許多為應用程序提供上下文的實用程序和守護程序組成。通過SMACK標籤提供隔離 。
7.2 應用商店
儘管Tizen系統定義了應用程序簽名和簽名流程的系統 ,以避免可能包含惡意軟體的未經授權的應用程序的傳播。目前還不清楚 AGL 將採用多少該流程。然而,從經驗來看,這是一個必不可少的話題。例如,Google Play商店通過簽名來控制App的授權,但商店中仍然存在大量包含惡意軟體的App賬戶。
Tizen 定義了 5 個級別的證書和每個級別的簽名,包括作者、測試分發者、公共級別商店分發者、合作夥伴級別商店分發者和平台級別商店分發者。AGL 可以定義不同數量的第三方,但至少應定義作者和商店分銷商。

一旦確定了簽名數量,至少需要在 AGL 設備上安裝時驗證這些簽名。確保用於簽名驗證的公鑰的穩健性/完整性非常重要。如果公鑰被修改,則該洩露的密鑰可用於驗證攻擊者的私鑰簽名。
除此之外,安裝時驗證受到限制。運行時內存中的應用程序可能會受到攻擊。安裝時驗證將錯過安裝後所做的任何修改。在執行期間運行的完整性驗證可以實現更完整的安全故事。
7.3 縮略語
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| 3GPP | 3rd Generation Partnership Project 第三代合作夥伴計劃 |
| CASB | Cloud Access Security Broker 雲訪問安全代理 |
| DAST | Dynamic Application Security Testing 動態應用安全測試 |
| DPI | Deep Packet Inspection 深度包檢測 |
| IDS | Intrusion Detection Systems 入侵檢測系統 |
| IPS | Intrusion Prevention Systems 入侵防禦系統 |
| IPSec | Internet Protocol Security 網絡安全協議 |
| LSM | Linux Security Module Linux安全模組 |
| MITM | Man In The Middle 中間人 |
| OSI | Open Systems Interconnection 開放系統互連 |
| SATS | Static Application Security Testing 靜態應用安全測試 |
7.4 本地安裝應用
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Installation-1 | Talk about AppFw offline mode. 關於 AppFw離線模式。 |
可以使用AppFw提供的特殊離線模式與基礎鏡像一起交付和安裝應用程序。應用程序也可以在運行時安裝。
在早期發布期間,默認應用程序會在首次啟動時安裝在鏡像上。
| 領域 | 目的 | 建議 |
|---|---|---|
| Application-Installation-1 | 應用防火牆 | 提供離線模式以便使用基礎鏡像安裝應用程序。 |
| Application-Installation-2 | 正直 | 僅當應用程序完整性良好時才允許安裝。 |
7.5 本地權限管理
應用程序權限由Cynara和AppFw中的安全管理器管理。更多詳細信息,請參閱平台部分的AppFw文檔。
7.6 應用簽名
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Signature-1 | Add content (see secure build in Secure development part). 添加內容(請參閱安全開發部分中的安全構建)。 |
7.7 應用服務
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Services-1 | Add content (Which services?). |
| Application-Services-2 | Add Binder. |
8. 互聯性藍圖
這部分展示了對汽車的不同連接攻擊。
| 領域 | 改進 |
|---|---|
| Connectivity-Abstract-1 | 改進摘要。 |
8.1 縮略語
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| ARP | Address Resolution Protocol / 地址解析協議 |
| BLE | Bluetooth Low Energy / 低功耗藍牙 |
| CAN | Car Area Network / 汽車區域網路 |
| CCMP | Counter-Mode/CBC-Mac Protocol / 計數器模式/ CBC – Mac協議 |
| EDGE | Enhanced Data Rates for GSM Evolution – Evolution of GPRS / GSM演進的增強數據速率-GPRS的演進 |
| GEA | GPRS Encryption Algorithm / GPRS加密算法 |
| GPRS | General Packet Radio Service (2,5G, 2G+) / 通用分組無線服務 |
| GSM | Global System for Mobile Communications (2G) / 全球移動通信系統 |
| HSPA | High Speed Packet Access (3G+) / 高速數據包接入( 3G + ) |
| IMEI | International Mobile Equipment Identity / 國際移動設備標識 |
| LIN | Local Interconnect Network / 本地互連網絡 |
| MOST | Media Oriented System Transport / 面向媒體的系統傳輸 |
| NFC | Near Field Communication / 近場通信 |
| OBD | On-Board Diagnostics / 車載診斷系統 |
| PATS | Passive Anti-Theft System / 被動防盜系統 |
| PKE | Passive Keyless Entry / 被動無鑰匙進入 |
| PSK | Phase-Shift Keying / 相移鍵控 |
| RDS | Radio Data System / 無線電數據系統 |
| RFID | Radio Frequency Identification / 射頻識別 |
| RKE | Remote Keyless Entry / 遠程無鑰匙進入 |
| SDR | Software Defined Radio / 軟體定義無線電 |
| SSP | Secure Simple Pairing / 安全簡單的配對 |
| TKIP | Temporal Key Integrity Protocol / 臨時密鑰完整性協議 |
| TPMS | Tire Pressure Monitoring System / 胎壓監測系統 |
| UMTS | Universal Mobile Telecommunications System (3G) / 通用移動通信系統 |
| USB | Universal Serial Bus / 通用串行總線 |
| WEP | Wired Equivalent Privacy / 有線等效隱私 |
| WPA | Wifi Protected Access / Wifi保護訪問 |
8.2 Bus(總線/匯流排)
我們只以CAN總線為例,因為 FlewRay、ByteFlight、Most和Lin等不同的總線攻擊都採用了復古工程,而提高其安全性的主要論點是對數據包進行加密。我們只是簡單描述一下它們:
- CAN:控制器區域網絡,開發於 20 世紀 80 年代初期,是一種事件觸發的控制器網絡,用於數據速率高達 1 MBit/s 的串行通信。CAN消息根據各自的標識符進行分類。CAN控制器將其消息廣播到所有連接的節點,並且所有接收節點獨立決定是否處理該消息。
- FlewRay:是一種確定性且容錯的高速總線。數據速率高達 10 MBit/s。
- ByteFlight:用於機動車輛中的安全關鍵型應用,例如安全氣囊。Byteflight 通過 2 或 3 線塑料光纖以 10Mbps 的速度運行。
- 大多數:面向媒體的系統傳輸,用於通過光纖電纜傳輸音頻、視頻、語音和控制數據。同步方式最高可達24 MBit/s,異步方式最高可達14 MBit/s。 大多數消息始終包含明確的發送者和接收者地址。
- LIN:本地互連網絡,是一種單線子網,用於智能傳感器和執行器之間的低成本串行通信,典型數據速率高達 20 kBit/s。它計劃從 2001 年開始用於汽車中 不需要CAN網絡帶寬和多功能性的任何地方。
幾乎每輛車上的ECU(電子控制單元)都通過 CAN 總線進行通信,CAN 總線是一種兩線總線,對共享介質上發送的消息使用硬體仲裁。這本質上是一個受信任的網絡,其中所有流量對所有控制器都是可見的,並且任何控制器都可以發送任何消息。
CAN 總線上的惡意ECU可以輕鬆注入發往任何其他設備的消息,包括儀表板和音響主機等設備。硬體有 USB 轉 CAN 的常見方法,開源軟體也有發送和接收消息的方法。例如,Linux 內核中包含一個驅動程序,可用於發送/接收 CAN 信號。CAN總線上的惡意設備可能會導致系統發生大量有害的事情,包括:向其他設備發送虛假信息、向ECU發送非預期命令、導致CAN總線上的DOS(拒絕服務)等。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-BusAndConnector-Bus-1 | CAN | 實施硬體解決方案以禁止發送不需要的信號。 |
有關詳細信息,請參閱汽車總線系統的安全性。
8.3 連接器
對於連接器,我們假設它們默認被禁用。例如,必須禁用USB以避免像BadUSB這樣的攻擊。如果沒有,請將內核配置為僅啟用最低要求的USB設備。用於診斷汽車的連接器(如OBD-II)必須在車庫外禁用。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-BusAndConnector-Connectors-1 | USB | 必須禁用。如果沒有,則僅啟用最低要求的 USB 設備。 |
| Connectivity-BusAndConnector-Connectors-2 | USB | 通過 USB 與 ECU 交換的機密數據必須是安全的。 |
| Connectivity-BusAndConnector-Connectors-3 | USB | 必須禁用 ECU 上的 USB 啟動。 |
| Connectivity-BusAndConnector-Connectors-4 | OBD-II | 必須在車庫外禁用。 |
8.4 無線連接
在這一部分中,我們根據可能的攻擊領域的不同,討論對汽車可能進行的遠程攻擊。對於每個通信渠道,我們描述了攻擊以及如何預防它們並提供了一些建議。主要建議是始終關注這些遠程通信渠道的最新更新。
| 領域 | 目的 | 建議 |
|---|---|---|
| Connectivity-Wireless-1 | 更新 | 始終關注遠程通訊渠道的最新更新。 |
我們將看到以下部分:
| 領域 | 改進 |
|---|---|
| Connectivity-Wireless-1 | 添加通信通道(RFID、ZigBee?)。 |
對於現有的汽車專用手段,我們從IOActive文檔(遠程汽車攻擊面調查)和 ETH 文檔(現代汽車被動無鑰匙進入和啟動系統的中繼攻擊)中獲取現有系統攻擊的示例。
無線上網(WiFi)
攻擊
我們可以將現有的 WiFi 攻擊分為兩類: WEP攻擊和WPA攻擊。
WEP攻擊:
- FMS:(F luhrer、M antin 和Shamir攻擊)是針對廣泛使用的 RC4 流密碼的“流密碼攻擊”。該攻擊允許攻擊者從 RC4 加密流中的大量消息中恢復該流中的密鑰”。
- KoreK:“允許攻擊者減少密鑰空間”。
- PTW:(Pyshkin Tews Weinmann攻擊)。
- Chopchop:由 KoreK 發現,“CRC32 校驗和的弱點以及缺乏重放保護。”
- 碎片化
WPA攻擊:
- Beck 和 Tews:利用TKIP的弱點。“允許攻擊者解密ARP數據包並將流量注入網絡,甚至允許他執行 DoS或ARP中毒”。
- KRACK:(K)ey (R)einstallation (A)tta(ck) (jira AGL SPEC-1017)。
建議
- 請勿使用WEP、PSK和TKIP。
- 將WPA2與CCMP結合使用。
- 應保護數據嗅探。
| 領域 | 技術名稱或對象 | 建議 |
|---|---|---|
| Connectivity-Wireless-Wifi-1 | WEP、PSK、TKIP | 禁止 |
| Connectivity-Wireless-Wifi-2 | WPA2 和 AES-CCMP | 使用 |
| Connectivity-Wireless-Wifi-3 | WPA2 | 應保護數據嗅探。 |
| Connectivity-Wireless-Wifi-4 | PSK | 定期更改密碼。 |
| Connectivity-Wireless-Wifi-5 | Device | 輕鬆升級軟體或韌體以獲得最新的安全更新。 |
有關詳細信息,請參閱Wifi 攻擊 WEP WPA和 破壞 wep 和 wpa (Beck and Tews)。
藍牙(Bluetooth)
攻擊
- Bluesnarfing 攻擊者秘密訪問您的藍牙設備,以檢索信息,包括地址、日曆信息甚至設備的國際移動設備身份。 通過 IMEI,攻擊者可以將您的來電路由到他的手機上。
- Bluebugging 是藍牙攻擊的一種形式,通常是由於缺乏意識而引起的。與 bluesnarfing 類似,bluebugging 可以訪問和使用所有手機功能,但受到 2 類藍牙無線電發射功率的限制,通常將其範圍限制在 10-15 米。
- Bluejacking 是發送未經請求的藍牙消息。
- BLE:低功耗藍牙攻擊。
- DoS:耗盡設備的電池或暫時使手機癱瘓。
建議
- 若未手動將藍牙驅動設置為配對模式,則不允許進行藍牙配對嘗試。
- 需要監控。
- 謹慎使用BLE 。
- 對於使用安全簡單配對( SSP )的 v2.1 及更高版本的設備,請避免使用“Just Works”關聯模型。在配對期間,設備必須驗證是否已生成通過身份驗證的鏈接密鑰。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-Wireless-Bluetooth-1 | BLE | 謹慎使用。 |
| Connectivity-Wireless-Bluetooth-2 | Bluetooth | 監控 |
| Connectivity-Wireless-Bluetooth-3 | SSP | 避免使用“Just Works”關聯模型。 |
| Connectivity-Wireless-Bluetooth-4 | Visibility | 默認配置為不可發現。除非需要的時候。 |
| Connectivity-Wireless-Bluetooth-5 | Anti-scanning | 除其他外,用來減緩暴力攻擊的速度。 |
有關更多信息,請參閱低能耗和汽車轉型、攻擊藍牙智能設備、汽車攻擊面的綜合實驗分析和低能耗帶來低安全性。
蜂窩網絡(Celluar)
攻擊
- IMSI-Catcher:是一種電話竊聽設備,用於攔截手機流量並跟踪手機用戶的位置數據。是一個介於目標手機和服務提供商的真實信號塔之間動作的“假”信號塔,被視為中間人 ( MITM )攻擊。
- 缺乏與GEA0的相互認證(GPRS/EDGE)和加密。
- 從UMTS/HSPA回退到GPRS/EDGE(對UMTS/HPA的干擾)。
- 4G DoS攻擊。
建議
- 檢查天線的合法性。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-Wireless-Cellular-1 | GPRS/Edge | 避免使用。 |
| Connectivity-Wireless-Cellular-2 | UMTS/HSPA | 防止干擾。 |
有關詳細信息,請參閱針對 GPRS/EDGE/UMTS/HSPA 移動數據通信的實際攻擊 。
無線電(Radio)
攻擊
- 使用低成本材料攔截數據(例如使用劫持的 DVB-T/DAB 進行SDR )。
建議
- 僅使用無線電數據系統( RDS ) 發送音頻輸出信號和有關無線電的元數據。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-Wireless-Radio-1 | RDS | 僅音頻輸出和有關無線電的元數據。 |
近場通信(NFC)
攻擊
- MITM:中繼和重放攻擊。
建議
- 應該實施針對中繼和重放攻擊(令牌等)的保護。
- 禁用不需要和未經批准的服務和配置文件。
- NFC 應使用加密鏈接(安全通道)。標準密鑰協商協議(例如基於 RSA 或橢圓曲線的 Diffie-Hellmann)可用於在兩個設備之間建立共享秘密。
- 汽車NFC設備應獲得NFC論壇實體的認證:NFC論壇認證標誌表明產品符合全球互操作性標準。
- NFC 修改米勒編碼優於 NFC 曼徹斯特編碼。
| 領域 | 技術名稱 | 建議 |
|---|---|---|
| Connectivity-Wireless-NFC-1 | NFC 近場通信 | 防止中繼和重放攻擊。 |
| Connectivity-Wireless-NFC-2 | Device 設備 | 禁用不需要和未經批准的服務和配置文件。 |
8.5 雲端
8.6 下載
- 身份驗證:身份驗證是一種安全過程,它依賴於與該設備、實體或個人綁定的一個或多個特徵來驗證該設備、實體或個人所聲稱的身份。
- 授權:通過提供規則並根據訂戶的個人資料和購買的服務允許訪問或拒絕訪問,解析網絡以允許訪問部分或全部網絡功能。
| 領域 | 目的 | 建議 |
|---|---|---|
| Application-Cloud-Download-1 | 驗證 | 必須實施身份驗證過程。 |
| Application-Cloud-Download-2 | 授權 | 必須實施授權流程。 |
基礎設施
- 深度數據包檢測:DPI提供了分析每個數據包有效負載的技術,增加了額外的安全層。DPI可以檢測並消除其他安全機制可能遺漏的攻擊。
- DoS保護,以避免基礎設施在一段時間內無法訪問。
- SATS和DAST評估等掃描工具對 Web 應用程序的源代碼和數據流執行漏洞掃描。許多掃描工具都會運行不同的安全測試,這些測試會在某些攻擊場景下對應用程序施加壓力,以發現安全問題。
- IDS 和 IPS:IDS檢測並記錄不適當、不正確或異常的活動。IDS可以位於電信網絡中和/或主機服務器或計算機內。電信運營商在與路由器和服務器的所有網絡連接中構建入侵檢測功能,並將其作為服務提供給企業客戶。一旦 IDS系統識別出攻擊,IPS將確保惡意數據包在對後端系統和網絡造成任何損害之前被阻止。IDS通常通過以下三個系統中的一個或多個發揮作用:
- 模式匹配。
- 異常檢測。
- 協議行為。
| 領域 | 目的 | 建議 |
|---|---|---|
| Application-Cloud-Infrastructure-1 | Packet / 包 | 應該實施 DPI。 |
| Application-Cloud-Infrastructure-2 | DoS / 阻斷服務 | 必須實施 DoS 保護。 |
| Application-Cloud-Infrastructure-3 | Test / 測試 | 應實施 SATS 和 DAST 等掃描工具。 |
| Application-Cloud-Infrastructure-4 | Log / 日誌 | 應實施安全工具(IDS 和 IPS)。 |
| Application-Cloud-Infrastructure-5 | App integrity / 應用程序完整性 | 應用程序必須由代碼簽名機構簽名。 |
傳輸
對於數據傳輸,需要對數據進行端到端加密。為了防止 MITM攻擊,任何第三方都不應能夠解釋傳輸的數據。另一方面是數據匿名化,以防止用戶或任何其他第三方的私人信息洩露。
IPSec等標準的使用提供了“通過使用加密安全服務,在 IP 網絡上進行私有且安全的通信,是一組使用算法在 IP 網絡上傳輸安全數據的協議”。此外,IPSec在**OSI模型的網絡層運行 ,這與以前在應用層運行的標準相反。這使其應用程序獨立,並且意味著用戶無需根據IPSec**標準配置每個應用程序。
IPSec提供以下服務:
- 保密性:一種如果不是接收者就無法解釋數據的服務。加密功能通過將可理解的(未加密的)數據轉換為不可理解的(已加密的)數據來提供這種服務。
- 身份驗證:確保數據來自其應有來源的服務。
- 完整性:確保數據不被意外或欺詐性篡改的服務。
- 重放保護:通過將有效攔截的數據包重新發送到網絡以獲得相同授權來防止攻擊的服務。該服務是通過序列號來提供的。
- 密鑰管理:用於在兩個IPSec元素之間協商加密密鑰長度並交換這些密鑰的機制。
另一種保護方法是在用戶和雲之間進行監控,正如CASB所提供的那樣。
| 領域 | 目的 | 建議 |
|---|---|---|
| Application-Cloud-Transport-1 | Integrity, confidentiality and legitimacy / 完整性、保密性和合法性 | 應實施 IPSec 標準。 |
9. 空中更新
更新應用程序和韌體對於開發新功能,甚至修復安全漏洞至關重要。但是,如果惡意第三方設法在傳輸過程中更改內容,則可能會更改系統和/或應用程序的功能。因此,為了保證傳輸數據的完整性、機密性和合法性,更新的安全性是評估的關鍵點。
9.1 攻擊向量
空中更新 (OTA) 是攻擊者最常見的滲透點之一。OTA更新機制是系統中最大的威脅之一。如果攻擊者能夠在系統上安裝自己的應用程序或韌體,他就可以獲得與原始應用程序或韌體相同級別的訪問權限。從那時起,入侵者可以不受限制地訪問系統的其餘部分,其中可能包括進行修改、下載其他軟體和竊取資產。
Man In The Middle (MITM) 中間人攻擊
中間人攻擊是最經典的攻擊示例,其中攻擊者將自己插入兩個通信實體之間並獲取正在通信的任何內容。在 OTA 攻擊的情況下,網絡中的連接可能會被攔截:
- 在互聯網上,在雲後端之前。
- 在基站,3G、4G、5G 連接到互聯網。
- 在接收天線處,連接到汽車。
- 接收天線和網關路由器(如果有)之間,車內連接。
- 在網關路由器和目標組件(IVI、車載信息娛樂單元)之間。
發動 MITM 攻擊的方法有很多種。例如,Burp Proxy 等代理工具可用於作為中間人攔截 Web 流量。代理服務器打著測試工具的幌子,經常用於攻擊場景。它運行在各種平台上。
作為另一個例子,眾所周知,虛假基站攻擊相當容易配置。這個問題在中國和英國等國家顯然相當普遍。這些假基站有時只是竊聽通信,但其他基站則有可能造成嚴重危害。
針對 MITM 攻擊的防禦包括加密和簽名的數據管道。此外,還建議架構師和開發人員對通過這些管道傳遞的有效負載進行加密和簽名,以防止數據被竊取。
Man At The End (MATE) 末端人攻擊
末端人攻擊是指入侵者在軟體訪問數據通信時分析通信的端點。這是一種更嚴重的攻擊類型,攻擊者可以:
- 偷鑰匙。
- 例如,運行軟體中的簡單調試會話可能會揭示內存中使用的密鑰。
- 篡改軟體。
- 例如,僅用 NOP(即無操作)替換軟體中的一個函數調用就可以極大地改變程序的行為。
- 堵塞控制分支。
- 例如,使程序採用一個控制分支而不是預期分支可能意味著授權安裝和非授權安裝之間的區別。
- 修改重要數據。
- 例如,如果更改的數據是通向控制路徑的密鑰或數據,則這種攻擊可能會很嚴重。
- 對於 OTA 更新,MATE 攻擊對系統來說尤其成問題。MATE 攻擊的後果之一是安裝允許安裝任何其他軟體的軟體。例如,攻擊者可能會安裝遠程訪問軟體來控制系統的任何部分。
9.2 縮略語
下表列出了本部分文檔中使用的術語。
| 縮寫 | 描述 |
|---|---|
| FOTA | Firmware Over The Air / 空中韌體更新 |
| MATE | Man At The End / 末端人攻擊 |
| MITM | Man In The Middle / 中間人攻擊 |
| OTA | Over The Air / 透過空中傳輸 |
| SOTA | Software Over The Air / 空中軟體更新 |
| TUF | The Update Framework / 更新框架 |
9.3 FOTA 空中韌體更新
韌體更新至關重要,因為它的修改會危及整個系統。因此,有必要採取適當的防護措施。
AGL 包括元更新程序Yocto 層,可通過Uptane進行 OTA 軟體更新,Uptane 是更新框架的汽車專用擴展。Uptane 和 TUF 是開放標準,定義了一種安全協議,即使在服務器和網絡(互聯網和汽車內部)不完全受信任的情況下也能提供和驗證更新。
元更新程序包括應用程序 aktualizr,開發了高級遠程信息處理系統(現在是 HERE Technologies 的一部分),該系統支持 ECU 的 OTA。aktualizr與 Uptane 結合適用於更新功能關鍵 ECU 上的韌體、軟體和其他軟體包。aktualizr可以通過免費的開源後端啟用 ota-community-edition。
可以通過該功能啟用此 FOTA 更新機制agl-sota。
Building 構建
要使用aktualizr 構建 AGL 鏡像,可以使用以下內容。
source meta-agl/scripts/aglsetup.sh -m <machine> agl-sota <other-features...>
在構建過程中,元更新程序將使用下載的憑據來 ota-community-edition簽署元數據,以驗證構建的真實性。這些簽名是 Uptane 框架的一部分,用於驗證 FOTA 更新。
Atomic Upgrades with Rollbacks 可回滾的原子升級
aktualizr更新韌體的主要方法是使用libostree二進制差異。二進制差異使用最少的帶寬,並且本質上將libostree當前和以前的韌體版本存儲在磁盤或閃存中以允許回滾。
libostree是一個內容可尋址的對象存儲,很像git. 版本通過 SHA2-256 指定。這些哈希值在 Uptane 元數據中進行簽名,並且能夠抵禦加密洩露。
9.4 SOTA 空中軟體更新
聯網車輛中的軟體更新是一項非常有用的功能,可以帶來顯著的好處。如果不考慮安全性,軟體更新可能會導致嚴重的漏洞。任何軟體更新系統都必須確保不僅以安全的方式完成設備的軟體更新,而且託管這些更新的存儲庫和服務器也得到充分的保護。隨著軟體更新過程從經銷商更新模型遷移到OTA更新模型,確保這些過程的安全成為重中之重。
SOTA是通過AppFw實現的(參見平台部分)。可以以簡單的方式管理數據包(例如 Android)。
| 領域 | 改進 |
|---|---|
| Update-SOTA-1 | 待完成的部分。 |
10. 安全開發
為了節省大量代碼審核時間,開發人員必須遵循編碼指南。
10.1 安全構建
內核構建
工具如:
- 代碼優化工具(lk_reducer)。
- 使用 dr_checker 進行內核驅動程序測試。
| 領域 | 改進 |
|---|---|
| SecureDev-SecureBuild-1 | 添加內容。 |
10.2 應用程序/小部件簽名
| 領域 | 改進 |
|---|---|
| SecureDev-Signatures-1 | 添加內容。 |
10.3 代碼審核
這些工具用於檢查功能的正確實現以及是否符合相關的良好實踐。
| 領域 | 改進 |
|---|---|
| SecureDev-CodeAudit-1 | 添加CVE分析器。 |
| SecureDev-CodeAudit-2 | OSSTMM。 |
1. SATS – Static auditing-tool-for-security 靜態安全審核工具
- RATS(也許老了)。rough-auditing-tool-for-security
- 缺陷查找器。flawfinder
- 維基列表。List_of_tools_for_static_code_analysis
- 數學方法。David_Pichardie.pdf
有必要驗證應用程序代碼不使用被折舊和識別為不安全或導致問題的功能。
2. DATS – Dynamic auditing-tool-for-security 動態安全審核工具
- 維基列表。Example_tools
A. 附錄
A1. 枚舉了您必須實現的所有配置
沒有任何說明,因為所有說明已在文檔中給出。
- config 標籤可以快速識別配置和要採取的建議。
- note 標籤允許您通知一些額外的詳細信息。
- todo 標籤顯示了可能的改進。
A2. 列出所有待辦事項
以便對文檔的可能改進有一個全局的了解。
A1. Config notes(配置項記錄)
硬體配置建議
集成建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Hardware-Integrity-1 | Bootloader | Must control bootloader integrity. |
| Hardware-Integrity-2 | Board | Must use a HSM. |
| Hardware-Integrity-3 | RTC | Must not be alterable. |
認證建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Hardware-Certificate-1 | System | Shall allow storing dedicated certificates. |
| Hardware-Certificate-2 | ECU | The ECU must verify the certification authority hierarchy. |
| Hardware-Certificate-3 | System | Allow the modification of certificates only if the source can be authenticated by a certificate already stored or in the higher levels of the chain of trust. |
記憶體與安全模組建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Hardware-Memory-1 | ECU | The ECU shall never expose the unencrypted key in RAM when using cryptographic keys. |
| Hardware-Memory-2 | Bootloader | Internal NVM only |
| Hardware-Module-3 | – | HSM must be used to secure keys. |
安全啟動配置與建議
啟動鏡像配置
| Domain 領域 | Variable / Config name |
Value |
|---|---|---|
| Boot-Image-Selection-1 | CONFIG_BOOTDELAY |
-2 |
| Boot-Image-Selection-2 | bootdelay | -2 |
啟動鏡像審核配置
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Image-Authenticity-1 | CONFIG_FIT |
Enable |
| Boot-Image-Authenticity-2 | CONFIG_FIT_SIGNATURE |
Enable |
| Boot-Image-Authenticity-3 | CONFIG_RSA |
Enable |
| Boot-Image-Authenticity-4 | CONFIG_OF_CONTROL |
Enable |
| Boot-Image-Authenticity-5 | CONFIG_OF_SEPARATE |
Enable |
| Boot-Image-Authenticity-6 | CONFIG_DEFAULT_DEVICE_TREE |
Enable |
啟動通訊配置與建議
| Domain 領域 | 通訊模式 | State |
|---|---|---|
| Boot-Communication-1 | USB |
Disabled and Compiled-out if not required. |
| Boot-Communication-2 | USB |
Else, Kernel should be configured to only enable the minimum required USB devices and filesystems should be treated with special care. |
| Boot-Communication-3 | Ethernet |
Disabled |
| Boot-Communication-4 | U-boot and sboot DOCSIS |
Disabled |
| Boot-Communication-5 | Serial ports |
Disabled |
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Communication-USB-1 | CONFIG_CMD_USB |
Not defined |
| Boot-Communication-USB-2 | CONFIG_USB_UHCI |
Not defined |
| Boot-Communication-USB-3 | CONFIG_USB_KEYBOARD |
Not defined |
| Boot-Communication-USB-4 | CONFIG_USB_STORAGE |
Not defined |
| Boot-Communication-USB-5 | CONFIG_USB_HOST_ETHER |
Not defined |
| Domain 領域 | 通訊模式 | State |
|---|---|---|
| Boot-Communication-1 | Network interfaces |
Preferably no network interface is allowed, otherwise, restrict the services to those used. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Boot-Communication-1 | Services, ports and devices |
Restrict the services, ports and devices to those used. |
| Domain 領域 | Command name |
State |
|---|---|---|
| Boot-Communication-Flash-1 | do_nand |
Disable |
啟動控制台相關配置
| Domain 領域 | Config name |
Value |
|---|---|---|
| Boot-Consoles-Serial-1 | CONFIG_SILENT_CONSOLE |
Disable |
| Boot-Consoles-Serial-2 | CONFIG_SYS_DEVICE_NULLDEV |
Disable |
| Boot-Consoles-Serial-3 | CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC |
Disable |
| Domain 領域 | Environment variable name |
State |
|---|---|---|
| Boot-Consoles-Serial-1 | INC_DEBUG_PRINT |
Not defined |
| Domain 領域 | Config name |
State |
|---|---|---|
| Boot-Consoles-Variables-1 | CONFIG_ENV_IS_IN_MMC |
#undef |
| Boot-Consoles-Variables-2 | CONFIG_ENV_IS_IN_EEPROM |
#undef |
| Boot-Consoles-Variables-3 | CONFIG_ENV_IS_IN_FLASH |
#undef |
| Boot-Consoles-Variables-4 | CONFIG_ENV_IS_IN_DATAFLASH |
#undef |
| Boot-Consoles-Variables-5 | CONFIG_ENV_IS_IN_FAT |
#undef |
| Boot-Consoles-Variables-6 | CONFIG_ENV_IS_IN_NAND |
#undef |
| Boot-Consoles-Variables-7 | CONFIG_ENV_IS_IN_NVRAM |
#undef |
| Boot-Consoles-Variables-8 | CONFIG_ENV_IS_IN_ONENAND |
#undef |
| Boot-Consoles-Variables-9 | CONFIG_ENV_IS_IN_SPI_FLASH |
#undef |
| Boot-Consoles-Variables-10 | CONFIG_ENV_IS_IN_REMOTE |
#undef |
| Boot-Consoles-Variables-11 | CONFIG_ENV_IS_IN_UBI |
#undef |
| Boot-Consoles-Variables-12 | CONFIG_ENV_IS_NOWHERE |
#define |
| Domain 領域 | Command name |
State |
|---|---|---|
| Boot-Consoles-MemDump-1 | md |
Disabled |
| Boot-Consoles-MemDump-2 | mm |
Disabled |
| Boot-Consoles-MemDump-3 | nm |
Disabled |
| Boot-Consoles-MemDump-4 | mw |
Disabled |
| Boot-Consoles-MemDump-5 | cp |
Disabled |
| Boot-Consoles-MemDump-6 | mwc |
Disabled |
| Boot-Consoles-MemDump-7 | mdc |
Disabled |
| Boot-Consoles-MemDump-8 | mtest |
Disabled |
| Boot-Consoles-MemDump-9 | loopw |
Disabled |
內核配置
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-MAC-1 | CONFIG_IP_NF_SECURITY | m |
| Kernel-General-MAC-2 | CONFIG_IP6_NF_SECURITY | m |
| Kernel-General-MAC-3 | CONFIG_EXT2_FS_SECURITY | y |
| Kernel-General-MAC-4 | CONFIG_EXT3_FS_SECURITY | y |
| Kernel-General-MAC-5 | CONFIG_EXT4_FS_SECURITY | y |
| Kernel-General-MAC-6 | CONFIG_SECURITY | y |
| Kernel-General-MAC-7 | CONFIG_SECURITY_SMACK | y |
| Kernel-General-MAC-8 | CONFIG_TMPFS_XATTR | y |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-kexec-1 | CONFIG_KEXEC |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-IPAutoConf-1 | CONFIG_IP_PNP |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-SysCtl_SysCall-1 | CONFIG_SYSCTL_SYSCALL |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-LegacyLinux-1 | CONFIG_USELIB |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-FirmHelper-1 | CONFIG_FW_LOADER_USER_HELPER |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-PanicOnOOPS-1 | CONFIG_PANIC_ON_OOPS |
y |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-SocketMon-1 | CONFIG_PACKET_DIAG |
n |
| Kernel-General-SocketMon-2 | CONFIG_UNIX_DIAG |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-BPF_JIT-1 | CONFIG_BPF_JIT |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-General-ModuleSigning-1 | CONFIG_MODULE_SIG_FORCE |
y |
| Domain 領域 | Variable name |
Value |
|---|---|---|
| Kernel-General-ModuleSigning-2 | kernel.modules_disabled |
1 |
| Domain 領域 | Object | State |
|---|---|---|
| Kernel-General-Drivers-1 | USB |
Disabled |
| Kernel-General-Drivers-2 | PCMCIA |
Disabled |
| Kernel-General-Drivers-3 | Other hotplug bus |
Disabled |
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-General-IndependentExec-1 | -pie -fpic |
Enable |
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-General-OverwriteAttacks-1 | -z,relro |
Enable |
| Kernel-General-OverwriteAttacks-2 | -z,now |
Enable |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Kernel-General-LibraryLinking-1 | Dynamic linking | Should generally not be allowed. |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-RestrictAccess-1 | CONFIG_DEVKMEM |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-CoreDump-1 | CONFIG_PROC_KCORE |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Swap-1 | CONFIG_SWAP |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-LoadAllSymbols-1 | CONFIG_KALLSYMS |
n |
| Kernel-Memory-LoadAllSymbols-2 | CONFIG_KALLSYMS_ALL |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Stack-1 | CONFIG_CC_STACKPROTECTOR |
y |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-Access-1 | CONFIG_DEVMEM |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Memory-CrossMemAttach-1 | CROSS_MEMORY_ATTACH |
n |
| Domain 領域 | compiler and linker options |
State |
|---|---|---|
| Kernel-Memory-StackSmashing-1 | -fstack-protector-all |
Enable |
| Domain 領域 | compiler options and config name |
Value |
|---|---|---|
| Kernel-Memory-BufferOverflows-1 | -D_FORTIFY_SOURCE |
2 |
| Kernel-Memory-BufferOverflows-2 | CONFIG_FORTIFY_SOURCE |
y |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-Serial-1 | CONFIG_SERIAL_8250 |
n |
| Kernel-Consoles-Serial-2 | CONFIG_SERIAL_8250_CONSOLE |
n |
| Kernel-Consoles-Serial-3 | CONFIG_SERIAL_CORE |
n |
| Kernel-Consoles-Serial-4 | CONFIG_SERIAL_CORE_CONSOLE |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-CommandLine-1 | CONFIG_CMDLINE_BOOL |
y |
| Kernel-Consoles-CommandLine-2 | CONFIG_CMDLINE |
"insert kernel command line here" |
| Kernel-Consoles-CommandLine-3 | CONFIG_CMDLINE_OVERRIDE |
y |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-KDBG-1 | CONFIG_KGDB |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-SysRQ-1 | CONFIG_MAGIC_SYSRQ |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Consoles-BinaryFormat-1 | CONFIG_BINFMT_MISC |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Symbols-1 | CONFIG_DEBUG_INFO |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Kprobes-1 | CONFIG_KPROBES |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Tracing-1 | CONFIG_FTRACE |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Profiling-1 | CONFIG_OPROFILE |
n |
| Kernel-Debug-Profiling-2 | CONFIG_PROFILING |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-OOPSOnBUG-1 | CONFIG_DEBUG_BUGVERBOSE |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Dev-1 | CONFIG_DEBUG_KERNEL |
n |
| Kernel-Debug-Dev-2 | CONFIG_EMBEDDED |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-FileSystem-1 | CONFIG_DEBUG_FS |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-BUG-1 | CONFIG_BUG |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-CoreDumps-1 | CONFIG_COREDUMP |
n |
| Domain 領域 | File name |
Value |
|---|---|---|
| Kernel-Debug-AdressDisplay-1 | /proc/sys/kernel/kptr_restrict |
1 |
| Domain 領域 | File or Directorie name |
State |
|---|---|---|
| Kernel-Debug-AdressDisplay-1 | /boot/vmlinuz* |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-2 | /boot/System.map* |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-3 | /sys/kernel/debug/ |
Readable Only for root user |
| Kernel-Debug-AdressDisplay-4 | /proc/slabinfo |
Readable Only for root user |
| Domain 領域 | File name |
Value |
|---|---|---|
| Kernel-Debug-DMESG-1 | /proc/sys/kernel/dmesg_restrict |
1 |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-Debug-Config-1 | CONFIG_IKCONFIG |
n |
| Domain 領域 | Config name |
Value |
|---|---|---|
| Kernel-FileSystems-NFS-1 | CONFIG_NFSD |
n |
| Kernel-FileSystems-NFS-2 | CONFIG_NFS_FS |
n |
| Domain 領域 | Partition |
Value |
|---|---|---|
| Kernel-FileSystems-Mount-1 | /boot |
nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-2 | /var & /tmp |
In /etc/fstab or vfstab, add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-3 | Non-root local | If type is ext2 or ext3 and mount point not ‘/’, add nodev. |
| Kernel-FileSystems-Mount-4 | Removable storage | Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-5 | Temporary storage | Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-6 | /dev/shm |
Add nosuid, nodev and noexec. |
| Kernel-FileSystems-Mount-7 | /dev |
Add nosuid and noexec. |
| Domain 領域 | Config name |
State or Value |
|---|---|---|
| Kernel-FileSystems-Mount-1 | CONFIG_DEVTMPFS_MOUNT |
Disabled or add remount with noexec and nosuid to system startup. |
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-Floor-1 | ^ |
Only for privileged system services. |
| Kernel-MAC-Floor-2 | * |
Used for device files or /tmp Access restriction via DAC. |
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-System-1 | System |
Process should write only to file with transmute attribute. |
| Kernel-MAC-System-2 | System::run |
Files are created with the directory label from user and system Domain 領域 (transmute) Lock is implicit with w. |
| Kernel-MAC-System-3 | System::Shared |
Files are created with the directory label from system Domain 領域 (transmute) User Domain 領域 has locked privilege. |
| Kernel-MAC-System-4 | System::Log |
Some limitation may impose to add w to enable append. |
| Kernel-MAC-System-5 | System::Sub |
Isolation of risky Subsystem. |
| Domain 領域 | Label name |
Recommendations |
|---|---|---|
| Kernel-MAC-System-1 | User::Pkg::$AppID |
Only one Label is allowed per App. A data directory is created by the AppFw in rwx mode. |
| Kernel-MAC-System-2 | User::Home |
AppFw needs to create a directory in /home/$USER/App-Shared at first launch if not present with label app-data access is User::App-Shared without transmute. |
| Kernel-MAC-System-3 | User::App-Shared |
Shared space between all App running for a given user. |
平台配置與建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-SystemD-1 | Security model | Use Namespaces for containerization. |
| Platform-SystemD-2 | Security model | Use CGroups to organise processes. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-DBus-1 | Security model | Use D-Bus as IPC. |
| Platform-DBus-2 | Security model | Apply D-BUS security patches: D-Bus CVE |
| Domain 領域 | Tool name |
State |
|---|---|---|
| Platform-Utilities-1 | connman |
Used as a connection manager. |
| Platform-Utilities-2 | bluez |
Used as a Bluetooth manager. |
| Platform-Utilities-3 | gstreamer |
Used to manage multimedia file format. |
| Platform-Utilities-4 | alsa |
Used to provides an API for sound card device drivers. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-AGLFw-AppFw-1 | Security model | Use the AppFw as Security model. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-AGLFw-Cynara-1 | Permissions | Use Cynara as policy-checker service. |
| Domain 領域 | Tool name |
State |
|---|---|---|
| Platform-Utilities-1 | busybox |
Used to provide a number of tools. Do not compile development tools. |
| Domain 領域 | Utility name and normal path |
State |
|---|---|---|
| Platform-Utilities-1 | chgrp in /bin/chgrp |
Disabled |
| Platform-Utilities-2 | chmod in /bin/chmod |
Disabled |
| Platform-Utilities-3 | chown in /bin/chown |
Disabled |
| Platform-Utilities-4 | dmesg in /bin/dmesg |
Disabled |
| Platform-Utilities-5 | DnsDomain 領域name in /bin/dnsDomain 領域name |
Disabled |
| Platform-Utilities-6 | dropbear, Remove "dropbear" from /etc/init.d/rcs |
Disabled |
| Platform-Utilities-7 | Editors in (vi) /bin/vi |
Disabled |
| Platform-Utilities-8 | find in /bin/find |
Disabled |
| Platform-Utilities-9 | gdbserver in /bin/gdbserver |
Disabled |
| Platform-Utilities-10 | hexdump in /bin/hexdump |
Disabled |
| Platform-Utilities-11 | hostname in /bin/hostname |
Disabled |
| Platform-Utilities-12 | install in /bin/install |
Disabled |
| Platform-Utilities-13 | iostat in /bin/iostat |
Disabled |
| Platform-Utilities-14 | killall in /bin/killall |
Disabled |
| Platform-Utilities-15 | klogd in /sbin/klogd |
Disabled |
| Platform-Utilities-16 | logger in /bin/logger |
Disabled |
| Platform-Utilities-17 | lsmod in /sbin/lsmod |
Disabled |
| Platform-Utilities-18 | pmap in /bin/pmap |
Disabled |
| Platform-Utilities-19 | ps in /bin/ps |
Disabled |
| Platform-Utilities-20 | ps in /bin/ps |
Disabled |
| Platform-Utilities-21 | rpm in /bin/rpm |
Disabled |
| Platform-Utilities-22 | SSH |
Disabled |
| Platform-Utilities-23 | stbhotplug in /sbin/stbhotplug |
Disabled |
| Platform-Utilities-24 | strace in /bin/trace |
Disabled |
| Platform-Utilities-25 | su in /bin/su |
Disabled |
| Platform-Utilities-26 | syslogd in (logger) /bin/logger |
Disabled |
| Platform-Utilities-27 | top in /bin/top |
Disabled |
| Platform-Utilities-28 | UART in /proc/tty/driver/ |
Disabled |
| Platform-Utilities-29 | which in /bin/which |
Disabled |
| Platform-Utilities-30 | who and whoami in /bin/whoami |
Disabled |
| Platform-Utilities-31 | awk (busybox) |
Enabled |
| Platform-Utilities-32 | cut (busybox) |
Enabled |
| Platform-Utilities-33 | df (busybox) |
Enabled |
| Platform-Utilities-34 | echo (busybox) |
Enabled |
| Platform-Utilities-35 | fdisk (busybox) |
Enabled |
| Platform-Utilities-36 | grep (busybox) |
Enabled |
| Platform-Utilities-37 | mkdir (busybox) |
Enabled |
| Platform-Utilities-38 | mount (vfat) (busybox) |
Enabled |
| Platform-Utilities-39 | printf (busybox) |
Enabled |
| Platform-Utilities-40 | sed in /bin/sed (busybox) |
Enabled |
| Platform-Utilities-41 | tail (busybox) |
Enabled |
| Platform-Utilities-42 | tee (busybox) |
Enabled |
| Platform-Utilities-43 | test (busybox) |
Enabled |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Platform-Users-root-1 | Main application | Should not execute as root. |
| Platform-Users-root-2 | UI | Should run in a context on a user with no capability. |
| Domain 領域 | Utility name |
State |
|---|---|---|
| Platform-Users-root-3 | login |
Not allowed |
| Platform-Users-root-4 | su |
Not allowed |
| Platform-Users-root-5 | ssh |
Not allowed |
| Platform-Users-root-6 | scp |
Not allowed |
| Platform-Users-root-7 | sftp |
Not allowed |
應用配置建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Application-Installation-1 | AppFw | Provide offline-mode in order to install app with the base image. |
| Application-Installation-2 | Integrity | Allow the installation of applications only if their integrity is good. |
連接性配置建議
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-BusAndConnector-Bus-1 | CAN | Implement hardware solution in order to prohibit sending unwanted signals. |
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-BusAndConnector-Connectors-1 | USB | Must be disabled. If not, only enable the minimum require USB devices. |
| Connectivity-BusAndConnector-Connectors-2 | USB | Confidential data exchanged with the ECU over USB must be secure. |
| Connectivity-BusAndConnector-Connectors-3 | USB | USB Boot on a ECU must be disable. |
| Connectivity-BusAndConnector-Connectors-4 | OBD-II | Must be disabled outside garages. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Connectivity-Wireless-1 | Update | Always follow the latest updates of remote communication channels. |
| Domain 領域 | Tech name or object | Recommendations |
|---|---|---|
| Connectivity-Wireless-Wifi-1 | WEP, PSK, TKIP | Disabled |
| Connectivity-Wireless-Wifi-2 | WPA2 and AES-CCMP | Used |
| Connectivity-Wireless-Wifi-3 | WPA2 | Should protect data sniffing. |
| Connectivity-Wireless-Wifi-4 | PSK | Changing regularly the password. |
| Connectivity-Wireless-Wifi-5 | Device | Upgraded easily in software or firmware to have the last security update. |
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-Wireless-Bluetooth-1 | BLE | Use with caution. |
| Connectivity-Wireless-Bluetooth-2 | Bluetooth | Monitoring |
| Connectivity-Wireless-Bluetooth-3 | SSP | Avoid using the "Just Works" association model. |
| Connectivity-Wireless-Bluetooth-4 | Visibility | Configured by default as undiscoverable. Except when needed. |
| Connectivity-Wireless-Bluetooth-5 | Anti-scanning | Used, inter alia, to slow down brute force attacks. |
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-Wireless-Cellular-1 | GPRS/EDGE | Avoid |
| Connectivity-Wireless-Cellular-2 | UMTS/HSPA | Protected against Jamming. |
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-Wireless-Radio-1 | RDS | Only audio output and meta concerning radio. |
| Domain 領域 | Tech name | Recommendations |
|---|---|---|
| Connectivity-Wireless-NFC-1 | NFC | Protected against relay and replay attacks. |
| Connectivity-Wireless-NFC-2 | Device | Disable unneeded and unapproved services and profiles. |
應用下載配置建議
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Application-Cloud-Download-1 | authentication | Must implement authentication process. |
| Application-Cloud-Download-2 | Authorization | Must implement Authorization process. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Application-Cloud-Infrastructure-1 | Packet | Should implement a DPI. |
| Application-Cloud-Infrastructure-2 | DoS | Must implement a DoS protection. |
| Application-Cloud-Infrastructure-3 | Test | Should implement scanning tools like SATS and DAST. |
| Application-Cloud-Infrastructure-4 | Log | Should implement security tools (IDS and IPS). |
| Application-Cloud-Infrastructure-5 | App integrity | Applications must be signed by the code signing authority. |
| Domain 領域 | Object | Recommendations |
|---|---|---|
| Application-Cloud-Transport-1 | Integrity, confidentiality and legitimacy | Should implement IPSec standards. |
A2. Todo Notes(待辦事項記錄)
啟動相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Abstract-1 | More generic and add examples (The chain of trust). |
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Abstract-1 | Review the definition of the "boot loader". |
| Domain 領域 | Improvement 改進 |
|---|---|
| Boot-Consoles-1 | Secure loader: No reference earlier? |
虛擬機相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Hypervisor-Abstract-1 | Complete Hypervisor part (jailhouse / KVM / Xen). |
內核相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Kernel-General-IndependentExec-1 | Kernel or/and platform part ? |
| Domain 領域 | Improvement 改進 |
|---|---|
| Kernel-General-LibraryLinking-1 | Keep this part? |
平台相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Abstract-1 | Create a graphics and sound part. |
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Services-1 | SystemD ? |
| Platform-Services-2 | Secure daemon ? |
| Domain 領域 | Improvement 改進 |
|---|---|
| Platform-Users-Capabilities-1 | Kernel or Platform-user? |
| Platform-Users-Capabilities-2 | Add config note. |
應用相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Installation-1 | Talk about AppFw offline mode. |
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Signature-1 | Add content (see secure build in Secure development part). |
| Domain 領域 | Improvement 改進 |
|---|---|
| Application-Services-1 | Add content (Which services?). |
| Application-Services-2 | Add Binder. |
連接相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Connectivity-Abstract-1 | Improve abstract. |
| Domain 領域 | Improvement 改進 |
|---|---|
| Connectivity-Wireless-1 | Add communication channels (RFID, ZigBee?). |
升級相關
| Domain 領域 | Improvement 改進 |
|---|---|
| Update-SOTA-1 | Part to complete. |
安全開發相關
| Domain 領域 | Improvement 改進 |
|---|---|
| SecureDev-SecureBuild-1 | Add content. |
| Domain 領域 | Improvement 改進 |
|---|---|
| SecureDev-Signatures-1 | Add content. |
| Domain 領域 | Improvement 改進 |
|---|---|
| SecureDev-CodeAudit-1 | Add CVE analyser. |
| SecureDev-CodeAudit-2 | OSSTMM. |
留言