深入分析TIMA任意核心模組認證繞過漏洞

2021-12-29 21:18:12 字數 2032 閱讀 7869

深入分析tima任意核心模組認證繞過漏洞。為了確保android裝置中linux核心的完整性,三星推出了乙個名為「lkmauth」的功能。該功能的最初目的是,確保只有三星核准的那些核心模組才可以載入到linux核心中。

tima任意核心模組認證繞過漏洞分析

每當核心嘗試載入核心模組時,系統就會用到「lkmauth」功能。在載入核心模組之前,核心首先會載入「lkmauth」的trustlet,並傳送乙個請求,來驗證模組的完整性。

由於三星裝置使用了兩個不同的tee,所以對於每個tee都單獨實現了相應的「lkmauth」功能。

在使用qsee tee(它使用了核心配置tima_on_qsee)的裝置上,使用「tima_lkmauth」的trustlet來驗證待載入的核心模組的完整性。當然,這個trustlet本身是相當簡單的——它提供了乙個硬編碼的列表,來儲存所有「可允許」的核心模組的sha1雜湊值。如果當前待載入的核心模組的sha1沒有出現在硬編碼的列表中,那麼它就會被拒絕。

對於使用mobicore tee(使用核心配置tima_on_mc20)的裝置而言,它們會通過「ffffffff00000000000000000000000b.tlbin」trustlet來驗證待載入核心模組的完整性。然而,在這種情況下,其流程會稍微有點複雜,下面簡單介紹載入模組的具體步驟:

1. [如果trustlet尚未載入]:載入trustlet。

2. [如果已批准的雜湊值列表尚未載入]:向trustlet傳送請求,以便載入已批准的sha1雜湊簽名列表。

3. 將存放核心模組的緩衝區傳遞給trustlet進行驗證。如果該核心模組的sha1雜湊值不在先前載入的已批准雜湊值列表中,則會被拒絕。

已經批准的模組的雜湊值組成的列表,將作為裝置韌體的一部分,儲存在檔案「/system/lkm_sec_info」中。該檔案的結構如下所示:

rsa簽名本身會使用pkcs#1 v1.5進行填充,其中bt = 1,ps是0xff位元組的常量字串。

用於驗證簽名的公鑰,我們可以通過靜態分析方法從trustlet中找到。在trustlet的自身**中,2048位的模數(n)是以反向位元組順序硬編碼的形式存在的。經驗證,在許多不同的裝置和版本(如gt-i9300、sm-p600、sm-g925v等)中,都使用了相同的常量模量。這個模數本身是

這裡使用的公鑰指數為3。

傳送到trustlet的請求緩衝區具有以下結構:

/* message types for the lkmauth command */

typedef struct lkmauth_hash_s __attribute__ ((packed)) lkmauth_hash_t;

通過對trustlet中處理這個命令的**進行逆向工程,得到了處理函式高階邏輯**,具體如下所示:

int load_hash_list(char* hash_buf_start, uint32_t hash_buf_len, uint8_t ko_num) ;

allow system_server mobicoredaemon : unix_stream_socket connectto ;

allow system_server mobicore_device : chr_file ;

將受感染的雜湊值列表載入到trustlet之後,攻擊者就可以嘗試載入與剛才插入到列表中的sha1雜湊值相匹配的核心模組了。需要注意的是,載入模組的第一次嘗試將會失敗,因為核心將嘗試載入已批准的雜湊值列表本身,但是trustlet將檢測到此情況並返回錯誤**ret_tl_tima_lkmauth_hash_loaded。這樣的話,核心會做乙個標記,指出列表已經載入好了——也就是說,下一次載入模組的時候,就不會重新載入這個列表了:

else if (krsp->ret == ret_tl_tima_lkmauth_hash_loaded) {

pr_info("tima: lkmauth--lkm_sec_info already loaded\n");

ret = ret_lkmauth_fail;

lkm_sec_info_loaded = 1;

之後,第二次嘗試載入已經感染的模組的時候,就會成功了,因為它的雜湊值已經位於已批准的雜湊值列表中了。

深入分析linux核心及其應用(更新完畢)

課程介紹 隨著計算機系統的風靡,整個行業涉及的裝置正朝著多樣化,小型化的方向發展,伴隨著這個趨勢,開發者也越來越多的集中於這個領域。隨著嵌入式裝置的逐漸流行,嵌入式開發也越來越重要。複雜系統需要的就是分工,應用的設計人員集中精力設計應用,而好的應用系統離不開底層的支撐,因此底層平台的設計者和開發者也...

深入分析linux核心及其應用(更新完畢)

課程介紹 隨著計算機系統的風靡,整個行業涉及的裝置正朝著多樣化,小型化的方向發展,伴隨著這個趨勢,開發者也越來越多的集中於這個領域。隨著嵌入式裝置的逐漸流行,嵌入式開發也越來越重要。複雜系統需要的就是分工,應用的設計人員集中精力設計應用,而好的應用系統離不開底層的支撐,因此底層平台的設計者和開發者也...

深入分析linux核心及其應用(熱力推薦!!)

課程介紹 隨著計算機系統的風靡,整個行業涉及的裝置正朝著多樣化,小型化的方向發展,伴隨著這個趨勢,開發者也越來越多的集中於這個 領域。隨著嵌入式裝置的逐漸流行,嵌入式開發也越來越重要。複雜系統需要的就是分工,應用的設計人員集中精力設計應用,而好的應用 系統離不開底層的支撐,因此底層平台的設計者和開發...