溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apple XNU內核緩沖區(qū)溢出預警實例分析

發(fā)布時間:2022-01-18 11:16:55 來源:億速云 閱讀:101 作者:柒染 欄目:大數據

這篇文章給大家介紹Apple XNU內核緩沖區(qū)溢出預警實例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

0x00 事件背景

2018-10-31 lgtm團隊的Kevin Backhouse在lgtm blog上發(fā)布了Apple XNU 內核在處理異常ICMP報文時候觸發(fā)的緩沖區(qū)溢出的一些細節(jié)分析,目前作者已經實現(xiàn)可以在同一局域網內使任意受影響的設備直接重啟并提及會在之后直接放出驗證poc.

0x01 影響版本

Apple iOS 11 及以下: 全設備

Apple macOS High Sierra, 10.13.6及以下: 全部設備

Apple macOS Sierra, 10.12.6及以下: 全部設備

Apple OS X El Capitan 全版本: 全部設備

0x02 修復建議

Apple iOS 11 及以下
(更新到 iOS 12)

Apple macOS High Sierra, 10.13.6及以下: 全部設備
(安裝安全更新 2018-001)

Apple macOS Sierra, 10.12.6及以下: 全部設備
(安裝安全更新 2018-005)

Apple OS X El Capitan 全版本: 全部設備
(截至目前Apple尚未發(fā)布patch,建議更新至高版本)

0x03 漏洞驗證

發(fā)送數據包之前

Apple XNU內核緩沖區(qū)溢出預警實例分析

發(fā)送數據包之后

Apple XNU內核緩沖區(qū)溢出預警實例分析

0x04 漏洞觸發(fā)點

位于公布XNU源碼bsd/netinet/ip_icmp.c:339

m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip);

根據作者描述該代碼是在函數icmp_error中,該函數的目的是生成錯誤類型的錯誤數據包以響應錯誤的數據包ip,它會遵從ICMP協(xié)議發(fā)送一個錯誤的消息

導致錯誤的數據包的header包含在ICMP消息中,因此在第339行調用m_copydata的目的是將錯誤數據包的header復制到生成ICMP消息中,但問題在于沒有校驗該header是否會超過被拷貝緩沖區(qū)的大小,進而導致緩沖區(qū)溢出。

目標緩沖區(qū)是一個mbuf。mbuf是一種數據類型,用于存儲傳入和傳出的網絡數據包。
在此代碼中,n是傳入數據包(包含不受信任的數據),m是傳出的ICMP數據包。
我們會看到,icp是指向m的指針。m在第294行或第296行分配:

if (MHLEN > (sizeof(struct ip) + ICMP_MINLEN + icmplen))
 m = m_gethdr(M_DONTWAIT, MT_HEADER);  /* MAC-OK */
else
 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);

在第314行,mtod用于獲取m的數據指針

icp = mtod(m, struct icmp *);

mtod只是一個宏,所以這行代碼不會檢查mbuf是否足以容納icmp結構。
此外,數據不會復制到icp,而是復制到icp-> icmp_ip,它與icp的偏移量為+8字節(jié)。

作者并沒對XNU內核進詳細的調試
基于作者在源代碼中看到的,作者認為m_gethdr創(chuàng)建了一個可以容納88個字節(jié)的mbuf,對m_getcl不太確定。
根據作者實際實驗,發(fā)現(xiàn)當icmplen> = 84時會觸發(fā)緩沖區(qū)溢出。

關于Apple XNU內核緩沖區(qū)溢出預警實例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI