成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

今天就跟大家聊聊有關(guān)如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供和順企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為和順眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。

一、漏洞背景

近日,Linux git中發(fā)布一個commit補丁,該補丁對應(yīng)的漏洞是一個本地提權(quán)漏洞CVE-2019-8912,漏洞影響范圍較廣。根據(jù)git中的commit信息可知,該漏洞出現(xiàn)在內(nèi)核'crypto/af_alg.c'中的af_alg_release函數(shù)中,可以通過sockfs_setattr函數(shù)觸發(fā),漏洞類型是use after free,可以導(dǎo)致本地代碼執(zhí)行進行權(quán)限提升。

二、漏洞影響版本

Linux 2 .6 ~ linux 4.20.11Red Hat Enterprise Linux 7,Package: kernel-altDebian,Release:Jessie,Version:3.16.56-1+deb8u1Debian,Release:Jessie (security),Version:3.16.56-1Debian,Release:stretch,Version:4.9.144-3Debian,Release:stretch (security),Version:4.9.110-3+deb9u6Debian,Release:buster,Version:4.19.16-1Debian,Release:sid,Version:4.19.20-1

三、Linux Crypto模塊簡介

Linux內(nèi)核從版本2.5開始引入了加密機制,為內(nèi)核提供加密功能,應(yīng)用包括:硬件加密設(shè)備驅(qū)動、內(nèi)核代碼簽名、硬件隨機數(shù)生成器、文件系統(tǒng)加密等。從版本2.6.6之后,內(nèi)核源碼提供了豐富的密碼學(xué)算法支持,并可以通過配置編譯選項將加密算法作為模塊編入內(nèi)核。內(nèi)核編譯配置如下圖所示:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

但是該加密功能提供的API接口只能在內(nèi)核層進行使用,用戶層無法調(diào)用。2010年,有位維護者向Linux Crypto維護組提交了一份CrypatoAPI 用戶接口,類似于netlink,基于socket進行通信,便于用戶層訪問內(nèi)核加密子系統(tǒng)。功能實現(xiàn)代碼在文件crypto/af_alg.c中。

四、漏洞原理及溯源

漏洞存在于crypto 模塊中的af_alg_release()函數(shù)中。af_alg_release()函數(shù)在進行對象釋放時,未將對象置空。對應(yīng)commit:9060cb719e61b685ec0102574e10337fa5f445ea補丁代碼如下,補丁添加了一行代碼:sock->sk = NULL; 。

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

在未添加補丁之前,如果該sock->sk引用計數(shù)是1,當(dāng)調(diào)用sock_put()進行釋放后沒有置空,就直接返回,會產(chǎn)生一個sock->sk懸掛指針。

為了分析這個漏洞的前因后果,先分析下相關(guān)的socket代碼。對每個新創(chuàng)建的socket,Linux內(nèi)核都將在sockfs中創(chuàng)建一個新的inode。Sockfs_*系列函數(shù)就是用來操作sockfs文件系統(tǒng)的。Sockfs_setattr()函數(shù)就是設(shè)置socket文件屬性的。在net/socket.c文件中sockfs_setattr()函數(shù)將會使用sock->sk對象。

根據(jù)提交的commit:9060cb719e61b685ec0102574e10337fa5f445ea細(xì)節(jié)可知,在該漏洞披露之前,Linux已經(jīng)修復(fù)了sock_close()和sockfs_setattr()之間的條件競爭漏洞,對應(yīng)commit為6d8c50dcb029872b298eea68cc6209c866fd3e14,具體先看下sockfs_setattr()函數(shù)中的補丁。補丁代碼如下:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

行544,首先判斷sock->sk是否為空,如果不為空,行545再將用戶層傳進來的iattr->ia_uid賦值為sock->sk->sk_uid。然后看sock_close ()函數(shù)中的補丁。補丁代碼如下:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

行1186,替換成了新函數(shù)__sock_release(),該函數(shù)多了一個參數(shù)inode。__sock_release()函數(shù)實現(xiàn)如下:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

行601,對inode進行判斷,如果不為空,然后調(diào)用inode_lock()函數(shù)對其進行上鎖。其實該inode本身和要進行釋放的socket對象是對應(yīng)的。行603,調(diào)用ops中release()函數(shù)進行釋放操作。這個ops中release()函數(shù)只是一個函數(shù)指針,最終會根據(jù)用戶注冊哪種套接字類型決定。行604,再次判斷inode是否為空,如果不為空,再進行解鎖。通過對inode加鎖,防止在對socket對象釋放時進行其他操作。

從commit:6d8c50dcb029872b298eea68cc6209c866fd3e14提供的細(xì)節(jié)可知,sock_close()函數(shù)和sockfs_setattr()函數(shù)之間的條件競爭可以通過用戶層fchownat()函數(shù)引發(fā)。根據(jù)man手冊可知,該函數(shù)是用于設(shè)置文件屬性的,例如uid和gid,在內(nèi)核中對應(yīng)的sockfs_setattr()函數(shù),如下圖所示:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

細(xì)節(jié)中描述,該函數(shù)不會保持文件fd的引用計數(shù),這也是導(dǎo)致存在條件競爭的原因。根據(jù)前文可知,sockfs_setattr()函數(shù)其實就是設(shè)置UID才操作sock->sk對象的。

如果再繼續(xù)向前追溯的話,從commit:86741ec25462e4c8cdce6df2f41ead05568c7d5e提供的細(xì)節(jié)可知UID的來龍去脈。該補丁提交于2016年。由于socket 協(xié)議中的結(jié)構(gòu)體structsock在大多時候都是和用戶層的sockets一一映射的,sockets對應(yīng)的內(nèi)核結(jié)構(gòu)體為structsocket。考慮到方便操作,便通過向struct sock添加一個sk_uid字段來簡化對struct socket中的UID的匹配,也因此添加了一個關(guān)鍵函數(shù)。如下圖所示:

如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析

由此可知,本來存在于sock_close()和sockfs_setattr之間的條件競爭已經(jīng)被修復(fù),由于crypto/af_alg.c中af_alg_release()函數(shù)沒有將釋放后的sock->sk及時置空,導(dǎo)致前面所做的安全補丁全部失效。

五、安全建議

目前該漏洞補丁已經(jīng)給出,請及時升級到最新版本。

https://github.com/torvalds/linux/commit/9060cb719e61b685ec0102574e10337fa5f445ea

看完上述內(nèi)容,你們對如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

新聞標(biāo)題:如何進行Linux內(nèi)核本地提權(quán)漏洞預(yù)警分析
鏈接地址:http://jinyejixie.com/article44/ggiihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站微信公眾號、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)
夏津县| 革吉县| 施甸县| 德庆县| 左权县| 于都县| 德兴市| 曲沃县| 太原市| 东乡族自治县| 金川县| 腾冲县| 定远县| 五寨县| 花莲市| 保靖县| 嫩江县| 拜城县| 海晏县| 磐石市| 禄丰县| 仙桃市| 白河县| 安远县| 柳州市| 陵水| 西丰县| 南华县| 印江| 新绛县| 闽侯县| 逊克县| 霍林郭勒市| 新泰市| 恩平市| 梁山县| 赣州市| 绥中县| 麻阳| 玛曲县| 兖州市|