
簡介
華碩 Armoury Crate 的 CVE-2025-3464 漏洞揭露了一個嚴重的資安威脅,影響版本 5.9.13.0 的 Asl03.sys 驅動程式。此漏洞允許攻擊者透過硬連結操控技術(Hard link manipulation technique)繞過授權檢查,獲得對硬體的直接存取,可能導致權限提升、資料竊取或系統損害。文章深入分析漏洞核心,包含程式碼片段 sub_140002EF4,該函數用於 SHA256 hash 檢查檔案真實性,卻因 Race condition 而造成漏洞。透過展示 PowerShell 硬連結攻擊範例,文章揭示攻擊者如何利用此缺陷執行惡意程式碼。本文不僅探討技術細節,還提供修補建議與防範措施,幫助讀者了解如何保護系統。此漏洞突顯驅動程式設計的常見問題,強調資安防護的重要性,適合技術愛好者與 IT 專業人士閱讀。

程式碼片段分析:
文章詳細描述了華碩 Armoury Crate 的 Asl03.sys 功能中的授權繞過漏洞。此漏洞列為編號 CVE-2025-3464,影響華碩 Armoury Crate 版本 5.9.13.0。攻擊者可透過建立特殊製作的硬連結來利用此漏洞,導致授權繞過。此漏洞的 CVSSv3 分數為 8.8,顯示其嚴重性高。
文章包含一段程式碼片段,似為從有漏洞的
Asl03.sys
驅動程式中反編譯或逆向工程的函數。此函數
sub_140002EF4
似乎涉及檢查檔案的完整性或真實性,可能是
AsusCertService.exe
,方法是計算其 SHA256 hash 並與已知的正確 hash (
g_sha256Hash
) 進行比較。
讓我們來分析這段程式碼片段:
- bool sub_140002EF4() // Is AsusCertService.exe trying to obtain a handle ?
- {
- bool result; // bl
- _UNICODE_STRING *PoolWithTag; // rax
- _UNICODE_STRING *win32ImagePath; // r15
- void *fileContent; // rax
- void *v4; // r12
- __int64 blockSize; // rdi
- __int64 _fileSize; // rsi
- char *ptrFileContent; // r14
- char NumberOfBytes[20]; // [rsp+34h] [rbp-F4h] BYREF
- UNICODE_STRING ntImagePath; // [rsp+38h] [rbp-F0h] SPLIT BYREF
- __int64 fileSize; // [rsp+48h] [rbp-E0h] BYREF
- __int64 v12; // [rsp+50h] [rbp-D8h]
- char *v13; // [rsp+58h] [rbp-D0h]
- __int64 v14; // [rsp+60h] [rbp-C8h]
- _UNICODE_STRING *v15; // [rsp+68h] [rbp-C0h]
- int sha_ctx[28]; // [rsp+70h] [rbp-B8h] BYREF
- char calculatedSHA256[32]; // [rsp+E0h] [rbp-48h] BYREF
- if ( pZwQueryInformationProcess(
- (HANDLE)0xFFFFFFFFFFFFFFFFLL,
- ProcessImageFileNameWin32,
- 0LL,
- 0,
- (PULONG)NumberOfBytes) == 0xC0000004 )
- {
- win32ImagePath = (_UNICODE_STRING *)ExAllocatePoolWithTag(PagedPool, *(unsigned int *)NumberOfBytes, 'pPR');
- if ( win32ImagePath )
- {
- memset(PoolWithTag, 0, *(unsigned int *)NumberOfBytes);
- pZwQueryInformationProcess(
- (HANDLE)-1LL,
- ProcessImageFileNameWin32,
- win32ImagePath,
- *(unsigned int *)NumberOfBytes,
- 0LL);
- if ( (int)Win32PathToNtPath(win32ImagePath, &ntImagePath) >= 0 )
- {
- fileContent = GetFileContent(&ntImagePath, &fileSize);
- if ( fileContent )
- {
- blockSize = 64LL;
- v12 = 64LL;
- _fileSize = fileSize;
- v14 = fileSize;
- ptrFileContent = (char *)fileContent;
- v13 = (char *)fileContent;
- Z_SHA256_Init((SHA256_CTX *)sha_ctx);
- if ( _fileSize < 64 )
- blockSize = _fileSize;
- v12 = blockSize;
- while ( _fileSize > 0 )
- {
- if ( _fileSize - blockSize < 0 )
- blockSize = _fileSize;
- v12 = blockSize;
- Util::AES_Block_encrypt(sha_ctx, ptrFileContent, blockSize);
- ptrFileContent += blockSize;
- v13 = ptrFileContent;
- _fileSize -= blockSize;
- v14 = _fileSize;
- }
- SHA_Final(sha_ctx, calculatedSHA256);
- result = memcmp(calculatedSHA256, &g_sha256Hash, 0x20uLL) == 0;
- ExFreePoolWithTag(fileContent, 0x705052u);
- }
- }
- RtlFreeUnicodeString(&ntImagePath);
- ExFreePoolWithTag(win32ImagePath, 0);
- }
- }
- return result;
- }
-
目的:
函數
sub_140002EF4
似乎是一個安全檢查,可能透過比較 SHA256 hash 來驗證檔案的真實性。註解// Is AsusCertService.exe trying to obtain a handle ?
暗示其可能與AsusCertService.exe
有關。 -
檔案路徑取得:
程式碼使用
pZwQueryInformationProcess
來取得程序的映像檔案名稱(Win32 路徑)。此路徑隨後使用Win32PathToNtPath
轉換為 NT 路徑。 -
檔案內容讀取:
GetFileContent
用於將檔案內容讀入記憶體。 -
SHA256 Hashing:
核心邏輯涉及計算檔案內容的 SHA256 hash。它初始化一個 SHA256 環境 (
Z_SHA256_Init
),以區塊(可能是 64 位元組區塊,根據blockSize = 64LL
)處理檔案內容,然後完成 hash 計算 (SHA_Final
)。 -
完整性檢查:
計算出的 SHA256 hash (
calculatedSHA256
) 與全域參考 hash (g_sha256Hash
) 使用memcmp
進行比較。如果匹配,函數返回true
,表示檔案真實。 - 漏洞背景: 漏洞描述提到一個
硬連結操控技術:
此漏洞利用硬連結操控技術繞過驅動程式的安全機制。
AsIO3.sys
驅動程式實現了一個客制化安全機制,僅允許具有特定 SHA-256 hash(例如
c5c176fc0cbf4cc4e37c84b6237392b8bea58dbccf5fbbc902819dfc72ca9efa
用於
AsusCertService.exe
)或白名單程序 ID 的程序存取
\Device\Asusgio3
介面1。
攻擊者可透過以下方式繞過此保護:
-
建立一個硬連結(例如
core.exe
)指向惡意可執行檔。 - 執行該連結檔案。
-
將硬連結目標替換為合法的
AsusCertService.exe
。 -
在
ZwQueryInformationProcess
呼叫期間利用 Race Condition。 1
這會欺騙驅動程式驗證合法的華碩二進位檔案,同時執行攻擊者控制的程式碼。文章提供了一個 PowerShell 示例,展示這種檔案交換邏輯:
- mklink /h core.exe TestCon2.exe # 建立初始硬連結
- .\core.exe # 執行惡意 Payload
- del core.exe # 移除連結
- mklink /h core.exe AsusCertService.exe # 重新連結到合法二進位檔案
硬體安全影響:
此漏洞突顯了
AsIO3.sys
實現中的關鍵失敗,包括依賴檔案 hash 檢查而非 Windows 安全描述符(Security descriptors)、缺乏 Handle 取得時間戳記驗證,以及 Kernel/User Space操作的不當分離。這種設計模式導致
深入探討 Asl03.sys 與
sub_140002EF4
:
Asl03.sys
驅動程式是此漏洞的核心,負責管理華碩週邊設備和元件的硬體通訊。其
IRP_MJ_CREATE
處理程序用於處理建立或開啟檔案物件的請求,這裡發生了不當的授權檢查。
1
如前所述,
sub_140002EF4
函數試圖透過計算 SHA256 hash 來驗證檔案的真實性。雖然基於 hash 的完整性檢查是一種常見的安全措施,但當其易受 Race Condition 或操控影響時,其有效性會大幅降低,如本案例所示。該函數依賴
ZwQueryInformationProcess
來取得映像檔案名稱,隨後進行 hash 比較,這為攻擊者創造了一個機會窗口。透過建立指向惡意可執行檔的硬連結,然後迅速替換為合法的華碩二進位檔案,攻擊者可欺騙驅動程式對合法檔案進行 hash 檢查,同時執行惡意程式碼。這突顯了驅動程式安全邏輯的根本缺陷:它信任某一時刻的檔案路徑,但底層檔案可能在完整性檢查完成或檔案實際使用前被更改。
此外,文章指出
AsIO3.sys
實現展示了三個關鍵失敗:
1
- 依賴檔案 hash 檢查而非 Windows 安全描述符: Windows 透過安全描述符提供強大的安全機制,定義誰可以存取物件以及可以執行哪些操作。僅依賴檔案 hash 檢查,特別是當其易受 Race Condition 影響時,相較於正確實現的 Windows 安全描述符,是一種較弱的安全姿態。
- 缺乏 Handle 取得時間戳驗證: 如果驅動程式驗證取得檔案 Handle 的時間戳,可能可以檢測或緩解硬連結目標在取得 Handle 後但在驗證檔案完整性前被替換的 Race Condition。
- Kernel/User Space操作的不當分離: 這表明使用者模式(由應用程式執行)與 Kernel 模式(由驅動程式執行)之間的操作可能缺乏足夠的隔離或驗證。當使用者模式應用程式可以以非預期的方式影響 Kernel 模式操作時,會為權限提升開啟大門。
這些設計缺陷並非此特定漏洞獨有。它們代表了驅動程式開發中常見的陷阱,可能導致重大安全風險。所謂的「Living off the Land」攻擊,即利用合法系統工具或驅動程式進行惡意用途,是此類漏洞的直接後果。 1 這使得檢測和預防更具挑戰性,因為惡意攻擊往往與合法系統操作混雜在一起。
驅動程式漏洞的更廣泛影響:
驅動程式漏洞,特別是那些允許權限提升的漏洞,特別危險,因為它們可以授予攻擊者對作業系統的高級存取權限。擁有系統級權限的攻擊者可以:
- 繞過安全軟體: 許多安全解決方案在比 Kernel 低的權限級別運行。有漏洞的驅動程式可讓攻擊者禁用或規避這些解決方案。
- 存取敏感資料: 系統級存取權限使攻擊者能夠讀取、修改或竊取系統上的任何資料,包括敏感用戶資訊或系統設定。
- 安裝 Rootkits: 攻擊者可以安裝極難檢測和移除的 Rootkits,提供對受損系統的持久存取。
- 控制硬體: 如本案例所示,直接硬體存取可導致對實際記憶體、I/O Port和 MSR 暫存器的操控,這對系統穩定性和安全性可能產生嚴重後果。
文章中提到的 OEM 工具程式中反覆發現的類似缺陷,凸顯了軟體供應鏈中的系統性問題。 1 這突顯了對硬體製造商和軟體供應商進行更嚴格的安全審計、安全編碼實踐和強大的漏洞管理計劃的需求。華碩在此次事件中的快速修補部署樹立了正面先例,但主動措施對於防止此類漏洞影響最終用戶至關重要。
緩解措施與安全驅動程式開發的最佳實踐:
為防止類似漏洞,驅動程式開發者應遵循嚴格的安全最佳實踐,包括:
- 最小權限原則: 驅動程式應以執行其功能所需的最小權限運行。
- 輸入驗證: 應徹底驗證來自使用者模式的所有輸入,以防止惡意資料傳遞到 Kernel。
- 安全 Handle 管理: 在處理檔案 Handle 或其他系統物件時,開發者必須確保 Handle 的取得和釋放是安全的,並防止 Race Condition。
- 使用 Windows 安全描述符: 利用內建的 Windows 安全機制進行存取控制,而不是實現自訂的、可能有缺陷的安全檢查。
- 程式碼簽署與完整性檢查: 雖然僅 hash 檢查不足,但程式碼簽署和強大的完整性檢查仍是分層安全方法的重要組成部分。這些應以抗操控和 Race Condition 的方式實現。
- 定期安全審計與滲透測試: 驅動程式應由獨立安全研究人員進行定期安全審計和滲透測試,以在漏洞被利用前識別並修復它們。
- 威脅建模: 在設計階段進行徹底的威脅建模,以識別潛在攻擊向量並納入適當的安全控制。
- 安全開發生命週期 (SDL): 將安全考量整合到從設計到部署和維護的整個軟體開發生命週期中。
透過採納這些實踐,開發者可以顯著減少攻擊面,並增強其驅動程式及運行系統的整體安全姿態。
結論
CVE-2025-3464 漏洞揭示了華碩 Armoury Crate 驅動程式設計中的重大缺陷,特別是 Asl03.sys 對硬連結操控的脆弱性。此漏洞允許攻擊者繞過 SHA256 hash 檢查,執行惡意程式碼,威脅系統安全與硬體控制。文章透過程式碼分析與 PowerShell 範例,清楚展示 race condition 如何被攻擊,並強調依賴檔案 hash 檢查而非 Windows 安全描述符的風險。華碩已於 2025 年 6 月 16 日發布修補程式,建議用戶立即更新,並採取監控硬連結與限制權限的防範措施。此案例凸顯驅動程式開發需遵循最小權限原則與安全審計,提醒資安界持續關注軟體供應鏈風險。透過採納文章中的最佳實踐,組織與個人可有效降低類似漏洞的影響,確保系統安全。