成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個整數+1,攻破了Linux內核!

系統 Linux
在IDT表項中拆分成三部分存儲。高32位平時都是0xFFFFFFFF,指向的是咱們內核空間中的中斷處理函數?,F在變成了0x00000000,那整個函數入口地址不就指向了用戶態地址空間了嗎?

帝國危機

夜幕降臨,喧囂褪去,繁忙的Linux帝國漸漸平靜了下來,誰也沒有想到,一場危機正在悄然而至......

“咚咚!”,帝國安全部長辦公室的敲門聲,打破了夜晚的寧靜。

“部長,剛剛發現有程序在修改passwd文件”,原來是文件系統部門的小黑到訪。

安全部長眉頭一緊,這passwd文件可非比尋常,里面記錄了系統中所有用戶的信息,但0.1ms之后,緊鎖的眉頭便舒展開來。

“這有什么大驚小怪的?只要有root權限,這是允許的嘛!”,安全部長沒有抬頭,繼續看著每天的系統日志。

“部長,重點在于這程序不是從系統調用進入內核,而是從中斷入口進來的”

安全部長愣了一下,約莫0.2ms之后,放下了手里的日志,站了起來。

“你是說,他是通過中斷描述符表(IDT)進來的?”

小黑點了點頭。

圖片

“小王,你趕緊跟他過去IDT看一下,調查清楚速來報我”,部長對著一旁的助理說到。

助理點了點頭,準備出發,剛走到門口,又被部長叫住了。

“等等!此事非同小可,我還是親自去一趟吧”

IDT修改謎案

安全部長隨即出發,來到IDT所在的地方,這里一切如舊,未見有何異樣。

部長指著這中段描述符表問道:“他是從哪道門進來的?”

“4號”,這時,看守IDT大門的白發老頭聞訊走了過來回答到。

“奇怪了,IDT表中的函數入口,都是我們操作系統安排好了的,講道理沒有哪一個會去修改passwd文件才對”,部長看著這些表項,低頭自語。

圖片

“部長,這我得跟您匯報一下,那小子進來之前,把第四項的入口地址高32位改成了0x00000000,進來之后他才給恢復成了0xFFFFFFFF”,老頭說完,拿出了IDT表項的結構圖展了開來:

圖片

部長聽完猛的一抬頭,“這入口地址是64位的,在IDT表項中拆分成三部分存儲。高32位平時都是0xFFFFFFFF,指向的是咱們內核空間中的中斷處理函數。現在變成了0x00000000,那整個函數入口地址不就指向了用戶態地址空間了嗎?”

小黑和助理都不敢說話,大家都知道這后果有多嚴重,天知道那家伙利用內核權限執行了用戶空間的什么代碼。

“不對,在他進來之前,一個用戶空間的程序怎么能改IDT的內容呢?他沒權限訪問才對,你是不是看錯了?”

“我沒有看錯,他改的是時候,我還特地留意了一下他的調用堆棧,不是在用戶空間,是從內核空間的函數——perf_swevent_init方向來的”,老頭說到。

整數+1的悲劇

部長二話沒說,又帶著大家直奔perf_swevent_init函數而去。

圖片

“老伯,您可還記得具體是哪個位置?”,部長問到。

“就是從那個19行那個static_key_slow_inc函數過來的”

圖片

“讓我看一下”,助理擠到前面來,想在部長面前露一手。

“嗯,這個static_key_slow_inc?做的事情是把一個整數執行了原子+1操作。不過它操作的是perf_swevent_enabled數組,跟IDT八桿子打不到一塊兒去,怎么能修改到IDT呢?”,助理摸了摸頭,往后退了兩步,瞧著是沒看出什么問題。

“不見得!”,部長仍然是緊鎖著眉頭,開口說到,“你們看,它是通過event_id這個數字作為下標來訪問數組元素,要是這個event_id出錯訪問越界,指向IDT,也不是沒有可能??!”

助理趕緊掃了一眼event_id,隨后便露出了失望的表情,“不會的,第9行有檢查,你看,超過8以后就會通不過檢查”

圖片

圖片

線索在這里被切斷了,本來指望在perf_swevent_init這個函數這里尋找IDT被修改之謎,看來要無功而返了。

不知不覺,時間已經很晚了,部長一行決定先回去,再從長計議。

部長走了幾步,見助理沒有跟上來,便回頭叫了他一聲。

“部長請留步,我好像感覺哪里不太對勁”,助理此刻也皺起了眉頭。

“你發現了什么?”,部長和小黑他們又走了回來。

“部長,你看第3行,這個event_id?是一個int型的變量,也就是說這是一個有符號數?!保碚f到。

“有符號數怎么了?”,小黑也忍不住開口問了。

“如果······”

“如果?event_id變成了一個負數,它將能越界訪問數組,并且還能通過第9行的大小檢查!”,沒等助理說完,部長道破了玄機!

眾人再一次將目光聚集在了這個event_id?上,打算看一下第三行給它賦值的event->attr.config是個什么來頭。

首先是perf_event?中的attr成員變量:

struct perf_event {
// ...
struct perf_event_attr attr;
// ...
};

接著是perf_event_attr?中的config成員變量:

struct perf_event_attr {
// ...
__u64 config;
// ...
};

看到最后,部長和助理都倒吸了一口涼氣,這config?竟然是個64位無符號整數,把它賦值給一個int型變量不出問題就怪了!

見大家都不說話,小黑撓了撓頭,弱弱的問到:“怎么了,你們怎么都不說話,這有什么問題嗎?”

助理把小黑拉到一邊,“問題大了,你看我要是把一個值為0xFFFFFFFF的config?賦值給event_id,event_id會變成什么?”

“負,負,負1?”

圖片

“沒錯,有符號數的最高位是用來標記正負的,如果這個config最高位為1,后面的位經過精心設計,不僅能瞞天過海騙過那里第9行的驗證,還能將某個位置的數字進行一個原子+1操作。”,助理繼續說道。

“不錯嘛小王,有進步!”,不知何時部長也走了過來,被部長這么一夸,助理都有些不好意思了。

“聽了半天,不就是越界把某個地方的數加了1嘛,有什么大不了的?”,小黑一臉不屑的樣子。

助理一聽連連搖頭,“你可不要小瞧了這個加1的行為,要是加在某些敏感的地方,那可是要出大事的!“

小黑有些疑惑,“比如說呢?”

“比如記錄中斷和異常的處理函數的IDT?,又比如記錄系統調用的sys_call_table,這些表中的函數地址都位于帝國內核空間,要是這個加1,加的不是別人,而是這些表中的函數地址,那可就麻煩了?!?,助理繼續說到。

“我聽明白了,可是就算加個1,也應該不是什么大問題吧?”

助理嘆了口氣,“看來你還是不明白,我以這次被修改的IDT表為例,給大家再看一下表中的表項——中斷描述符的格式”

圖片

“IDT中的中斷/異常處理函數的地址不是一個完整的64位,而是拆成了幾部分,其中高32位我給大家紅色標示出來了,在64位Linux帝國,內核空間的地址高32位都是0xFFFFFFFF,如果······”

“如果利用前面的event_id數組下標越界訪問,把這個地方原子+1,那就變成了0,對不對?”,小黑總算明白了。

真相大白

安全部長為助理的精彩分析鼓起了掌,“不錯不錯,大家都很聰明!事到如今,我們來復盤一下吧!”

第一步:精心設計一個config值,從應用層傳入內核空間的perf_swevent_init函數

第二步:利用內核漏洞,把一個64位無符號數賦值給一個int型變量,導致變量溢出為一個負數。

第三步:利用溢出的event_id越界訪問perf_swevent_enabled,指向IDT的表項,將第四項中斷處理函數的高32位進行原子+1

第四步:修改后的中斷處理函數指向了用戶空間,提前在此安排惡意代碼

第五步:應用層執行int 4匯編指令,觸發4號中斷,線程將進入內核空間,以至高權限執行提前安排的惡意代碼。

事情總算是水落石出,安全部長回去之后就把這問題上報,修復了這個漏洞,將event_id?的類型從int?修正為u64,這一次的危機總算解除了。

責任編輯:武曉燕 來源: 編程技術宇宙
相關推薦

2021-06-11 17:12:25

勒索軟件攻擊數據泄露

2021-03-22 09:57:51

AI 數據人工智能

2020-11-10 07:11:23

Linux內核補丁

2021-05-26 07:53:58

Linux運維Linux系統

2011-09-30 14:02:36

2023-02-27 12:53:14

Linux內核

2021-02-20 11:34:43

Linux內核指針

2021-07-06 14:36:05

RustLinux內核模塊

2025-05-15 14:37:17

AI生成模型

2009-09-11 08:44:36

2023-07-25 15:17:38

Linux操作系統開發

2017-05-18 16:52:44

阿里云人工智能NASA計劃

2009-08-18 11:01:51

2018-10-15 10:10:41

Linux內核補丁

2013-11-05 09:58:39

Linux內核

2025-05-15 09:12:27

2014-07-24 14:35:26

Linux內核模塊

2023-09-28 13:21:32

2021-03-11 12:19:39

Linux運維Linux系統

2025-03-07 08:30:00

pwruLinux網絡包追蹤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩最新网站 | 欧美一级免费 | 一区二区国产精品 | 亚洲成网| 国产精品一区二区三 | 日韩av在线免费 | 在线国产中文字幕 | 国产精品高潮呻吟久久av野狼 | 中文字幕一区二区三区四区 | 欧美中国少妇xxx性高请视频 | 91在线一区二区三区 | 黑人巨大精品欧美一区二区免费 | 日日淫| 国产精品亚洲精品久久 | 又爽又黄axxx片免费观看 | 欧美在线视频一区二区 | 一级黄色播放 | 一级黄色片在线看 | 日本亚洲一区 | 中文字幕亚洲区一区二 | 久久久久久高潮国产精品视 | 欧美日韩不卡 | 中文字幕亚洲视频 | 日韩欧美在线免费观看视频 | 日本一区二区在线视频 | 欧美国产日韩一区二区三区 | 红色av社区 | 国产成人精品久久二区二区91 | 黄色一级毛片 | 欧洲色综合 | 天天噜天天干 | 水蜜桃亚洲一二三四在线 | 一级片成人 | 国产一级片一区二区三区 | 中文字幕一区二区三区乱码图片 | 成人精品国产一区二区4080 | 成人欧美一区二区三区在线播放 | 成人av一区二区三区 | 色av一区二区三区 | 日本精品一区二区三区四区 | 天天久|