吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

500彩票邀请码只需一步,快速開始

搜索
查看: 7175|回復: 156

[系統底層] [原創]斷其糧道——內核級拒絕服務攻擊

    [復制鏈接]
HackerWen 發表于 2020-7-24 12:25
本帖最后由 HackerWen 于 2020-7-25 00:30 編輯

1、何為斷其糧道?
古時的軍隊大體分為兩部分,一是前線作戰的士兵,二是后方運糧的人員,兩者共同組成一個系統,雙方配合才能完成作戰任務。兩者之間保持互相通信,前者就可以派人向后者催糧,后者就可以派人向前者運糧,而這個運糧(通信)的關鍵就在于糧道,如果被敵軍切斷,那么前線士兵就無法向后勤人員征求糧食(請求服務),后勤人員也就無法為前線士兵運送糧食(提供服務),此可謂之拒絕服務攻擊。

以圖示之,前線5萬大軍因吃不上飯而開始出現軍心不穩的情況了。。。
圖片1.png


2、應用程序的糧道在哪里?
那么程序有類似的“糧道”嗎,有的話在哪里呢?答案就要從3環進0環說起了。
Windows系統下有幾個重要的DLL:Kernel32.dll、User32.dll、Gdi32.dll、Ntdll.dll。運行在3環的應用程序不可避免的會使用這些Dll提供的API,而這些API大部分會通過Ntdll.dll進入0環,參考《加密與解密》的第7章的圖7.6。
圖片2.png

舉一個例子來說明這個過程吧!用Windbg和win7 x86雙機調試。
Kernel32.dll中的ReadProcessMemory,其代碼如下:
圖片3.png

其中只有一條jmp指令,跳到一個導入函數里去執行,我們看看該函數是什么:
圖片4.png

原來是kernelbase.dll中的同名函數,繼續反匯編,在+12附近的位置又調用了一個導入函數:
圖片5.png

繼續看該導入函數是什么,原來是ntdll.dll中的NtReadVirtualMemory函數:
圖片6.png

此時就到了關鍵的地方了。ntdll.dll中的NtReadVirtualMemory函數非常簡單,就4句,非常簡單,它的作用是什么呢?
在ntdll.dll中,大部分API也是這樣的格式:
[Asm] 純文本查看 復制代碼
mov eax, API索引號
mov edx, 一個地址     ;該地址里的值是一個函數地址
call [edx]                     ;調用這個函數,實現進入0環
retn 14h


API索引號就是在3環調用了一個API,這個API在內核也就是0環,會有對應的內核函數,這個內核函數的地址在SSDT表中位于某個位置,這個位置就是索引號。進0環后,得找到對應的內核函數進行調用吧,就是根據這個索引號找到的。

一個地址,里面存的值是一個函數地址,反匯編看一下就知道了:
圖片7.png

原來這個函數名為KiFastSystemCall,如果CPU支持快速調用的話,那么call [edx]就是call KiFastSystemCall,如果是通過中斷門進入0環的話,那么call [edx]就是call KiIntSystemCall。
KiFastSystemCall里的sysenter指令實現進入0環。操作系統在執行這條指令前會把進0環后需要的東西(CS/SS/ESP/EIP)提前準備好,存入一個叫做MSR的寄存器中,等到sysenter指令執行時,就會從MSR寄存器中取出這些值賦給相應的寄存器,其中eip寄存器就得到一個值,這個值就是nt!KiFastCallEntry函數的地址。
圖片8.png

那其實就明白了,通過快速調用進0環后的第一個要執行的函數就是KiFastCallEntry。這個函數的作用就是拿著前面傳下來的API索引號,獲取相應的內核函數,調用之,從而實現應用層想要的功能。
整個過程整理如下:
圖片9.png

把其他API的調用過程也畫上去,看看整體的流程:
圖片10.png

其中的“糧道”我把它選為了Ntdll.dll中的KiFastSystemCall,上圖藍色的線,因為這個函數實現進入0環,3環的API就得通過這個必經之路進入0環。如果把這個必經之路給斷了,那豈不是3環API進不了0環,從而0環無法為3環提供服務,這就達到了內核級拒絕服務攻擊。還有一個地方也可以選為“糧道”,那就是MSR寄存器,進0環后要執行的函數地址是來源于MSR寄存器中的eip值,所以修改MSR寄存器也可以達到截斷“糧道”的目的。

3、截斷應用程序的糧道

根據第2節可知,3環進0環的關鍵函數是Ntdll.dll中的KiFastSystemCall,而且是以下面的形式來對它進行調用的:
[Asm] 純文本查看 復制代碼
mov edx, 7ffe0300
call [edx]                                ;           call KiFastSystemCall


7ffe0300地址里保存了KiFastSystemCall的地址。
其實這里涉及一個名為_KUSER_SHARED_DATA的數據結構,在3環和0環分別定義了一個該結構,其中在3環,這個結構地址固定為7ffe0000;在0環,這個結構地址固定為ffdf0000。這兩個結構的內容完全相同,它們偏移+300處的成員名為SystemCall,保存的正好就是KiFastSystemCall函數的地址,所以上面的7ffe0300就是這么來的。看圖。
圖片11.png

好,既然3環API進0環,要訪問7ffe0000+300處的成員,來實現進0環,那么我們把這個成員給改了(改之前拍個快照):
ed 7ffe0000+300 12345678

把7ffe0000+300處的成員,隨便改成12345678,那么3環進0環時,就會去12345678地址里去執行,而這個地址肯定是無意義的,看看會發生什么情況,根據我的實驗得到:
Windbg首先有動靜,問我中斷還是忽略
圖片12.png
選b的話,Windbg會再次詢問我相同的問題,再次選b,就會中斷了
圖片13.png
此時的棧回溯信息如下:
圖片14.png

如果選i的話,步驟和結果如下:
圖片15.png

系統跑起來了,問題是,鼠標移到記事本里,會改變形狀為插入型,移動到桌面會顯示正常的光標,移動到開始菜單處會顯示漏洞狀,但是均無法點擊。向虛擬機發送Ctrl+Alt+Delete鍵,也是沒有反應的。
整個系統就保持這種狀態,既不會藍屏,Windbg也不會繼續捕獲到異常。
圖片16.png
(注:圖片是gif格式的,太大了上傳不了,看不到動態效果,大家有興趣的自己做實驗就可以看出變化的)

修改ffdf0000+300處的成員也會使系統出現這種現象。以下是修改ffdf0000+300中斷后的棧回溯信息。
圖片17.png

4、實驗結果說明
根據以上的的實驗可知,修改進0環的關鍵位置,使得整個系統發生了無響應而不藍屏的現象,大概可以解釋成:是3環進0環的地方出了問題,而這個進0環的函數又是屬于3環的,所以問題發生在3環而不是0環,故系統內核沒有崩潰。

7ffe0000+300、ffdf0000+300這兩個地方用來耍流氓是挺合適的,發現你對我的程序有分析行為,那我就阻斷你進0環的路,你的程序得不到內核的服務,于是什么分析行為都無法進行下去了,這個就是斷其糧道的含義。其實對一些函數設置鉤子,使其他調用者得不到正確的結果,也可以叫做拒絕服務攻擊。

那么怎么對付這個流氓行為呢?從前面的兩個棧回溯信息就可以看出端倪。

如果反過來呢?我們在分析的時候,觸發了檢測代碼,從而發生了這種系統無響應而不藍屏的現象,于是就沒有藍屏文件為我們提供信息,而如果又不知道3環進0環的原理,那么即便是看Windbg的棧回溯信息,也沒法對付,所以很可能就想不到是程序的“糧道”出了問題。

代碼就不寫了,有興趣的同學可以自己寫個驅動,隨便檢測一個進程,然后修改這兩個7ffe0000+300、ffdf0000+300試試,看看有什么效果。

一點思考:系統無響應而不藍屏,說明用戶層廢了,而內核還活著,此時我們提前寫個驅動打算一直循環干活,那么在系統無響應期間,驅動是否也在工作呢?如果在工作的話,那其他規范化的程序是不是就不能收集我們的種種行為呢?(應用層軟件顯然無法收集我們的行為了,內核層的驅動一般要和應用層通信,此時無法通信了,功能肯定大打折扣。)
5、參考資料

《加密與解密》
《軟件調試》

免費評分

參與人數 97威望 +2 吾愛幣 +193 熱心值 +80 收起 理由
louchen1994 + 1 + 1 我很贊同!
zsq + 1 + 1 謝謝@Thanks!
sd4718789qw + 1 + 1 用心討論,共獲提升!
wodeweiyimpm + 1 我很贊同!
icyzi + 1 + 1 用心討論,共獲提升!
十好小學生 + 1 太強了!!!!
onething + 1 + 1 熱心回復!
hero888 + 1 + 1 神!
冥鹿 + 1 熱心回復!
BrightMrW + 1 用心討論,共獲提升!
2765245531 + 1 + 1 用心討論,共獲提升!
jgl0301 + 1 + 1 我很贊同!
lyslxx + 1 + 1 我很贊同!
JOKER688 + 1 + 1 謝謝@Thanks!
一星塵 + 1 + 1 666,漲知識了,嗯嗯
Norkie + 1 用心討論,共獲提升!
woditian + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
xh-sister52 + 1 我很贊同!
s9mf + 1 + 1 熱心回復!
BrainFlower + 1 + 1 用心討論,共獲提升!
銀.桑 + 1 + 1 謝謝@Thanks!
xiaomache + 1 用心討論,共獲提升!
199369 + 1 + 1 我感覺我飄了,我竟然開始看技術貼了
axty + 1 用心討論,共獲提升!
AlanSilence + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
不諳世事的騷年 + 1 + 1 我很贊同!
schedule + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
自由之心 + 2 + 1 熱心回復!
Ganlv + 3 我很贊同!
qtp1300 + 1 + 1 用心討論,共獲提升!
Jack.yang + 1 + 1 用心討論,共獲提升!
不怕黑的夜晚 + 1 + 1 我很贊同!
招南 + 1 謝謝@Thanks!
tony舅舅 + 1 + 1 謝謝@Thanks!
leonqp1030 + 1 + 1 用心討論,共獲提升!
haxcode + 1 + 1 用心討論,共獲提升!
戰亂夕陽 + 1 + 1 熱心回復!
PLAAF + 1 謝謝@Thanks!
魔法少女伊莉雅 + 1 + 1 熱心回復!
SkipQWE + 1 + 1 謝謝@Thanks!
poisonbcat + 1 + 1 謝謝@Thanks!
猛男z + 1 + 1 哈哈,沒看懂
生有涯知無涯 + 1 + 1 我很贊同!
lmaple0 + 1 + 1 我很贊同!
52pojie666z + 1 + 1 用心討論,共獲提升!
Kendley + 1 熱心回復!
不小于3個字符 + 1 + 1 我很贊同!
shen_i + 1 謝謝@Thanks!
zqs5857447 + 1 用心討論,共獲提升!
wyme + 1 熱心回復!
blindcat + 1 + 1 用心討論,共獲提升!
zhp_king + 1 用心討論,共獲提升!
蘭笙c + 1 + 1 用心討論,共獲提升!
N0exp + 1 + 1 我很贊同!
Joms + 1 + 1 熱心回復!
shenjiyuan2hao + 1 + 1 熱心回復!
星辰物語呀 + 1 + 1 我很贊同!
w愛 + 1 + 1 我很贊同!
565 + 1 謝謝@Thanks!
酷檸 + 1 用心討論,共獲提升!
dns2018 + 1 熱心回復!
fengbolee + 1 + 1 用心討論,共獲提升!
qq5665 + 1 + 1 謝謝@Thanks!
qazwsxlty + 1 + 1 我很贊同!
Desugl + 1 + 1 我很贊同!
Damitte + 1 + 1 我很贊同!
rainbo56 + 1 + 1 用心討論,共獲提升!
蕉灼の倉鼠 + 1 + 1 熱心回復!
Zerobits + 1 + 1 我很贊同!
assetmain + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
qiguaide + 1 謝謝@Thanks!
yixi + 1 + 1 謝謝@Thanks!
帝都桃羌羌 + 1 我很贊同!
By阿清 + 1 + 1 我很贊同!
dashao895060632 + 1 + 1 用心討論,共獲提升!
pansophy + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
冰王子 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
ingdear + 1 + 1 咔······請解釋下:右上角最下面那個玩shi的是什么玩意?要軍法處治.
willJ + 2 + 100 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
鎮北看雪 + 2 + 1 我很贊同!
meteo + 1 + 1 用心討論,共獲提升!
JuncoJet + 1 + 1 你改的確定不是SSDT?怎么被你描述懵了
MC24 + 1 + 1 我很贊同!
榆樹 + 1 + 1 好好學習,第一次聽說3環、0環
神奇的日子 + 1 + 1 熱心回復!
a84870a84870 + 1 + 1 用心討論,共獲提升!
gongj86 + 1 + 1 用心討論,共獲提升!
bester + 2 + 1 我很贊同!
luzhiyao + 1 我很贊同!
神圣隱淵 + 1 + 1 大致掃一眼,就知道這不是我能看的懂,只能膜拜了
經緯縱橫 + 1 + 1 我很贊同!
ycuvuuui1L + 1 + 1 用心討論,共獲提升!
abcde1224 + 1 熱心回復!
笑容茹椛 + 1 + 1 第一張圖我看懂了,后面的都看不懂
lookerJ + 1 + 1 熱心回復!
Βigbang + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
蔣阿君 + 2 + 1 看完那個圖,就直接評分了,下面的干貨已經不重要了

查看全部評分

本帖被以下淘專輯推薦:

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

 樓主| HackerWen 發表于 2020-7-24 13:12
Poner 發表于 2020-7-24 12:42
在深入分析一下  可以提權?

可以繼續分析一波,但是我功力不深,哈哈
 樓主| HackerWen 發表于 2020-7-24 23:54
JuncoJet 發表于 2020-7-24 14:38
看了兩遍終于是看懂了,改了KiFastCall指針
導致系統死機了

嗯嗯,這個點講起來和改起來很簡單,但是系統只是無響應,而沒有藍屏,說明只是應用層進不了內核層,但內核還活著,所以我還有個想法,寫個驅動打算一直循環干活,系統卡住的時候我們的驅動還有沒有可能繼續運行著?

免費評分

參與人數 1吾愛幣 +1 熱心值 +1 收起 理由
pojieyeah + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!

查看全部評分

BEASTARS 發表于 2020-7-24 12:28
班長的男人 發表于 2020-7-24 12:41
好好學習了
yy566 發表于 2020-7-24 12:41
很牛 但我是外行 看不懂
Poner 發表于 2020-7-24 12:42
在深入分析一下  可以提權?

免費評分

參與人數 1熱心值 +1 收起 理由
冰王子 + 1 我看著也是可以提權。。。。。。。。。。

查看全部評分

唐宋元明清01 發表于 2020-7-24 13:00
大佬牛批
桂花糕乀 發表于 2020-7-24 13:01
收藏 支持
兔耳離 發表于 2020-7-24 13:01
學到了。
 樓主| HackerWen 發表于 2020-7-24 13:13
yy566 發表于 2020-7-24 12:41
很牛 但我是外行 看不懂

保持學習就可以看懂的,都是這么過來的
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|處罰記錄|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-8-7 05:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網