成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

攻擊UEFI運行時服務和Linux

安全 黑客攻防 網站安全
由于EFI運行時服務通常位于4GB以下,因此它們在高內存EFI引導系統上提供了一種進入Linux的方法。

[[182247]]

前言

具有物理訪問權限的攻擊者能夠在許多具有DMA-直接內存訪問的完全修補的計算機上攻擊固件。一旦在UEFI/EFI運行時服務中執行代碼,就可以使用腳本來控制正在運行的Linux系統。

Linux 4.8內核完全隨機化了內核的物理內存地址。如果計算機擁有足夠大的內存,內核很有可能隨機化到4G以上的地址空間上。這意味著DMA硬件攻擊僅能夠攻擊32位的地址(4GB),如PCILeech,不能直接攻擊Linux內核。

 

由于EFI運行時服務通常位于4GB以下,因此它們在高內存EFI引導系統上提供了一種進入Linux的方法。

什么是EFI運行時服務?

PC上的UEFI,mac上的EFI是現代化的BIOS。UEFI是統一的可擴展固件接口的縮寫。UEFI負責檢測硬件和配置設備,以便于將控制移交給正在加載的操作系統。

UEFI的兩個主要組件是引導服務和運行時服務。操作系統上很早就調用ExitBootServices。隨后引導服務就不再使用。

即使在操作系統加載和運行后,EFI Runtime Services仍然保持運行。它們提供操作系統可以調用的各種功能。UEFI規范指定了運行時服務應該向操作系統提供的一組固定的函數,如下所示。

UEFI規范指定了運行時服務應該向操作系統提供的一組固定的函數

UEFI運行時服務

最初,運行時服務功能的位置通過運行時服務表傳送到操作系統。每個函數的物理地址是64位/8字節長,并以小端存儲的形式保存在內存中。然而,到目前為止,所有系統的內存地址都在32位范圍內。物理內存地址似乎是完全不變的,即在重新啟動之間不發生隨機化。

Linux隨后將這些地址映射到虛擬地址空間,并用相應的虛擬地址覆蓋表中的初始地址。初始表和被Linux修改后的表的如下所示。

初始表和被Linux修改后的表

EFI Runtime服務表,原始在左邊,Linux修改的為右邊。

攻擊

如果我們使用DMA用自己的代碼覆蓋EFI運行時服務表會發生什么?或者,如果我們修改EFI運行時服務表的指針,讓它指向之前插入的攻擊代碼,這又會發生什么?

當操作系統調用EFI運行時服務時,會在目標系統上執行代碼-例如當它讀取一個EFI變量。在特殊上下文中獲得執行代碼,其中較低的內存頁面在虛擬地址與物理地址之間以1:1映射。在正常的虛擬地址中是可以訪問到Linux內核的。在ring0/supervisor模式下執行。

然而,調用Linux內核中的所有函數是不可能的。一些函數會調用失敗,因為Linux已經為運行時服務設置了特殊的EFI上下文。針對這種情況,可以在Linux內核中patch 一個“隨機”的鉤子函數。當“正常”內核線程命中該鉤子時,被hook的內核代碼將會被執行.

目標系統運行Ubuntu 16.10,連接著攻擊硬件的PCILeech。右視圖為PCILeech

目標

已經在一臺具有8GB內存的聯想T430和一臺具有32G內存的 Intel NUC Skull Canyon做過了測試。T430的ExpressCard插槽用于獲得DMA訪問,在NUC上,在“BIOS”中設置Thunderbolt模式為“Legacy” – 允許通過Thunderbolt3 / USB-C進行DMA訪問。

T430非常簡單,只需插入PCILeech設備并調用pcileech.exe kmdload -kmd linux_x64_efi命令。PCILeech將搜索EFI運行時服務表并hook它。然后要求用戶執行某些操作來觸發已hook過的服務。

NUC是不同的。PCILeech在找到目標之前如果遇到不可讀的內存就會失敗。幸運的是,運行時服務表的地址是靜態的,在重新啟動之間不會改變。這適用于所有已測試的系統。找到地址最簡單的方法是通過在同一系統或相似系統上以EFI模式用USB引導啟動Linux。一旦啟動就調用命令cat /sys/firmware/efi/runtime來查看運行時服務表的物理地址。一旦知道地址是0x3b294e18,我們可以調用命令

  1. pcileech.exe kmdload -kmd linux_x64_efi -min 0x3b294000 -max 0x3b295000 

顯示被攻擊的運行時服務表

備注

如果你也想試試,可以查看Github上的PCILeech。

雖然漏洞總是在運作,但是攻擊并不是100%穩定的。有時,搜索運行時服務表會失敗,有時很難觸發對運行時服務表的調用。有時目標系統也會崩潰。

結論

在Linux 4.8操作系統上,如Ubuntu 16.10。由于可以利用PCILeech,所以不再是完全安全的。 即使你的筆記本電腦可能沒有一個ExpressCard插槽,但是如果擰開后蓋,它可能會有一個mini-PCIe或M.2插槽。

操作系統將重要的數據放在高于32-bit/4GB的地址上并不能阻止DMA攻擊。32位硬件(如PCILeech)會攻擊低于4GB的代碼和數據。其他惡意硬件也可能攻擊多達到64位地址空間。

操作系統應該啟用VT-d來保護自身和固件(例如運行時服務)免受惡意設備的攻擊。

責任編輯:趙寧寧 來源: 安全客
相關推薦

2022-01-19 08:50:53

設備樹Linux文件系統

2015-07-20 15:44:46

Swift框架MJExtension反射

2022-11-04 09:09:54

Linux服務器

2020-04-21 15:20:12

微服務架構實踐

2020-04-06 11:47:44

Linux命令腳本

2024-03-21 09:15:58

JS運行的JavaScrip

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運行鏡像開放

2019-10-14 09:14:37

Linuxbash命令

2020-08-11 08:59:20

容器虛擬化技術

2013-11-26 16:49:55

Android開發運行時KitKat

2021-08-18 08:32:09

代碼運行時間示波器

2020-12-07 13:31:43

GoMutex開發者

2023-07-28 10:42:43

2023-01-03 09:10:21

2024-03-20 10:46:00

云原生容器

2023-08-29 08:20:35

Kubernete跨云容器

2021-08-27 00:21:19

JSJust源碼

2023-02-12 12:00:57

2022-12-30 08:08:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人干视频在线 | 欧美在线视频网 | 国产精品视频网 | 欧美三级电影在线播放 | 美女天天操 | 中文字幕一区二区三区乱码在线 | 精品国产99 | 国产精品视频久久久 | 日本成人区| 一区二区av| 国产网站在线免费观看 | 亚洲精品一区在线观看 | 免费看a | 成人小视频在线观看 | 国产精品久久久久久久久久免费看 | 日韩精品视频在线观看一区二区三区 | 亚洲综合色视频在线观看 | 中文字幕精品一区 | 免费在线视频一区二区 | 欧美性久久久 | 99久久精品免费看国产免费软件 | 精品视频在线观看 | h片在线免费观看 | 九九九视频在线观看 | 亚洲成人福利在线观看 | 国产永久免费 | 在线国产99 | 九九综合 | 精品一区久久 | 久久躁日日躁aaaaxxxx | 台湾佬久久 | 午夜在线免费观看视频 | 国产精品久久久久久影视 | 中文字幕日韩欧美一区二区三区 | 免费精品一区 | 国产伦精品一区二区三区视频金莲 | 日韩中文字幕在线观看 | 在线观看欧美一区 | 91久久久久久久久久久久久 | 国产精品一区二区免费 | 国产最新网址 |