中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Apple XNU內核緩沖區溢出預警實例分析

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

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

0x00 事件背景

2018-10-31 lgtm團隊的Kevin Backhouse在lgtm blog上發布了Apple XNU 內核在處理異常ICMP報文時候觸發的緩沖區溢出的一些細節分析,目前作者已經實現可以在同一局域網內使任意受影響的設備直接重啟并提及會在之后直接放出驗證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尚未發布patch,建議更新至高版本)

0x03 漏洞驗證

發送數據包之前

Apple XNU內核緩沖區溢出預警實例分析

發送數據包之后

Apple XNU內核緩沖區溢出預警實例分析

0x04 漏洞觸發點

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

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

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

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

目標緩沖區是一個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字節。

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

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

向AI問一下細節

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

AI

邯郸县| 杭锦旗| 扎赉特旗| 普兰店市| 团风县| 樟树市| 靖西县| 新宁县| 正阳县| 阿拉善右旗| 齐齐哈尔市| 山东| 施甸县| 漳浦县| 门头沟区| 弥渡县| 呼伦贝尔市| 阜城县| 嘉禾县| 宝清县| 桃江县| 鹤山市| 金川县| 开江县| 英超| 科技| 连山| 台北市| 鄯善县| 鸡泽县| 临夏县| 邻水| 德兴市| 铜山县| 新巴尔虎右旗| 邵阳市| 连云港市| 吴江市| 自贡市| 鹤壁市| 西乌|