人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

冰河暗涌防不勝防 BIOS下實(shí)現(xiàn)的Telnet后門

發(fā)布日期:2021-12-15 00:14 | 文章來(lái)源:源碼中國(guó)
該項(xiàng)目?jī)H為實(shí)驗(yàn)性項(xiàng)目,主要目的是想隱藏一個(gè)Telnet后門在主板的BIOS內(nèi),并讓其隨著計(jì)算機(jī)系統(tǒng)及操作系統(tǒng)成功的運(yùn)行起來(lái)。運(yùn)行后能反向Telnet連接到指定的計(jì)算機(jī)接受控制。

項(xiàng)目涉及的相關(guān)知識(shí)及技術(shù)目錄

1、 實(shí)驗(yàn)環(huán)境,使用bochs調(diào)試工具。

2、 刷新BIOS技術(shù)問(wèn)題。

3、 代碼植入BIOS問(wèn)題。

4、 源代碼相關(guān)技術(shù)問(wèn)題:

A、如何編寫B(tài)IOS模塊(如:PCI、 ISA)。

B、實(shí)模式關(guān)于HOOK磁盤中斷的問(wèn)題。

C、磁盤中斷中選擇再次HOOK的問(wèn)題。

D、NT保護(hù)模式下設(shè)置物理地址映射。

E、NT保護(hù)模式下線性地址尋址問(wèn)題。

BIOS模塊調(diào)試實(shí)驗(yàn)環(huán)境采用Bochs

Bochs虛擬機(jī)可以調(diào)試BIOS及操作系統(tǒng),Bochs使用主要是配置它的配置文件,我們以實(shí)例配置文件簡(jiǎn)單講解,Bochs實(shí)驗(yàn)調(diào)試等網(wǎng)上有很多相關(guān)文章,這里簡(jiǎn)單講解。

我的配置實(shí)例:文件名xp.bxrc,修改后的及需要設(shè)置的內(nèi)容如下:

  1. ######使用的系統(tǒng)BIOS模塊######
  2. romimage:file=$BXSHARE/BIOS-bochs-latest
  3. ######使用的CPU相關(guān)參數(shù)######
  4. cpu:count=1,ips=10000000,reset_on_triple_fault=1
  5. ######設(shè)置內(nèi)存大小######
  6. megs:128
  7. ######添加我們的BIOS模塊######
  8. optromimage1:file=test.bin,address=0xd0000
  9. ######使用的VGAROM模塊######
  10. vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest
  11. ######設(shè)置虛擬機(jī)硬盤與光盤######
  12. ata0-master:type=disk,path="c.img",mode=flat,cylinders=4161,heads=16,spt=63
  13. #ata0-slave:type=cdrom,path="xp.iso",status=inserted
  14. ######設(shè)置引導(dǎo)設(shè)備######
  15. boot:c
  16. #boot:cdrom,disk

Bochs調(diào)試加載配置文件方法:可以設(shè)置一個(gè)bat文件,如下內(nèi)容:
set BXSHARE=d:\bochs
%BXSHARE%\bochsdbg.exe -q -f xp.bxrc

如何刷新各種BIOS問(wèn)題

各種BIOS刷新相關(guān)工具早已在網(wǎng)上流傳,工具的使用這里不作介紹,IcLord的作者已經(jīng)給出很多編程方法實(shí)現(xiàn)。這里簡(jiǎn)單說(shuō)下。

UniFlash開(kāi)源項(xiàng)目我也詳細(xì)分析過(guò),如果有必要我會(huì)給出UniFlash源代碼的詳解,該項(xiàng)目指出可以刷寫所有BIOS芯片,但是該項(xiàng)目刷新BIOS存在很多問(wèn)題,絕大多數(shù)情況是無(wú)法刷新的我實(shí)驗(yàn)過(guò)很多次,也嘗試修改他的代碼過(guò)很多次,沒(méi)找到原因。

Aword BIOS已經(jīng)有通用的刷寫API調(diào)用,不管在NT下還是在實(shí)模式下,IcLord也作了講解。如果有時(shí)間我會(huì)給出實(shí)模式及NT下的刷寫源代碼及分析。

代碼植入BIOS問(wèn)題

關(guān)于網(wǎng)上提及的,IcLord講到的我就不再做重復(fù)的分析。這里主要講下我們的模塊可以植入哪些地方以方便隱藏。以前的教程講過(guò)的方法存的問(wèn)題分析。
一、 ISA模塊形式植入:這種方式只適合于較早的計(jì)算機(jī),因?yàn)槟壳暗挠?jì)算機(jī)系統(tǒng)BIOS是不會(huì)加載ISA模塊的。故只能做實(shí)驗(yàn)調(diào)試用的方法。
二、 PCI模塊形式植入:該方法雖然系統(tǒng)BIOS都要加載PCI ROM,但是系統(tǒng)BIOS只加載實(shí)際存在的PCI卡的ROM模塊。而且通常BIOS設(shè)置中可以
關(guān)閉相應(yīng)的ROM啟動(dòng)。
三、 HOOK BootBlock或者說(shuō)要啟動(dòng)的模塊:該方法當(dāng)然我認(rèn)為是最有效的,但是又存在很多技術(shù)上的難題。檢驗(yàn)和問(wèn)題,不同BIOS的結(jié)構(gòu)問(wèn)題,過(guò)早的HOOK還存在再次獲取CPU運(yùn)行機(jī)會(huì)問(wèn)題等等。

本人實(shí)驗(yàn)過(guò)以上提及的所有方法,我認(rèn)為HOOK PCI、VGA及相關(guān)啟動(dòng)模塊是比較可尋的辦法。為什么?一般這類的ROM模塊是必須啟動(dòng)的,而且調(diào)試發(fā)現(xiàn)一般它的ROM本身代碼用不完自身設(shè)置的大小,我們可以借助剩余大小隱藏我們的代碼。例如:集成顯卡會(huì)把顯卡ROM集成到系統(tǒng)BIOS模塊中,我們可以對(duì)該模塊進(jìn)行HOOK,修改ROM頭部的跳轉(zhuǎn)指令,跳到我們的代碼開(kāi)始處執(zhí)行,我們的代碼執(zhí)行完后跳轉(zhuǎn)到它的代碼開(kāi)始處執(zhí)行。

如何編寫B(tài)IOS模塊

BIOS是分模塊組合在一起的。這里對(duì)PCI及ISA模塊作下簡(jiǎn)單分析,VGA模塊跟PCI模塊幾乎一樣。模塊主要是頭部有個(gè)規(guī)范,該規(guī)范適合所有BIOS系統(tǒng)。具體可以參看《PCI系統(tǒng)結(jié)構(gòu)》及其他書(shū)籍。

源代碼實(shí)例可以參看國(guó)外ROMOS開(kāi)源項(xiàng)目,該開(kāi)源項(xiàng)目的思想很值得學(xué)習(xí)。該項(xiàng)目講解了如何在BIOS中嵌入一個(gè)小型DOS,如:FreeDos。采用了把整個(gè)DOS系統(tǒng)盤鏡像植入BIOS中,跟早期的PXE引導(dǎo)DOS機(jī)制類似,然后HOOK磁盤中斷,模擬DOS系統(tǒng)盤鏡像出一個(gè)盤,源代碼編譯后只有900多字節(jié)。這種思想在早期還是很值得學(xué)習(xí)的。
實(shí)模式關(guān)于HOOK磁盤中斷問(wèn)題

很早前就有業(yè)界內(nèi)人士發(fā)貼問(wèn),為什么在我的ROM模塊中HOOK磁盤中斷會(huì)失敗呢?關(guān)于這個(gè)問(wèn)題現(xiàn)在目前網(wǎng)上已經(jīng)有人作出過(guò)回答,國(guó)外的開(kāi)源項(xiàng)目在2003年我都看到過(guò)。

由于我們的ROM模塊過(guò)早的運(yùn)行,可能運(yùn)行在磁盤服務(wù)前面了,這時(shí)如果HOOK Int 13h會(huì)因?yàn)锽IOS加載磁盤服務(wù)時(shí)重寫Int 13h IVT值,故我們?cè)O(shè)法HOOK其他服務(wù),這個(gè)服務(wù)要求較早被BIOS安裝且不會(huì)再次修改且加載操作系統(tǒng)前調(diào)用,最佳的這個(gè)服務(wù)選擇就是int 18h、int19h服務(wù)??梢詤⒖?br /> BIOS源代碼,也可以參看PXE SDK說(shuō)明文檔略有講過(guò)。

我們的磁盤服務(wù)代碼建議放在實(shí)模式高端內(nèi)存,通過(guò)BIOS數(shù)據(jù)區(qū)域可修改,內(nèi)存40:13,即物理地址413h處的值。降低常規(guī)內(nèi)存值,高端的內(nèi)存就留給我們用。我們的保護(hù)模式下運(yùn)行的代碼建議也放在這段內(nèi)存,且要求放在以頁(yè)基址開(kāi)始的內(nèi)存中,以便后面代碼的頁(yè)映射我們的保護(hù)模式代碼物理頁(yè)。頁(yè)基址:內(nèi)存物理頁(yè)地地址開(kāi)始的低12位為零,參看《80386保護(hù)模式教程》。

若我們的代碼直接在內(nèi)存的ROM映射區(qū)內(nèi),可能導(dǎo)致在NT下訪問(wèn)不到我們的代碼,因?yàn)镹T內(nèi)核加載程序ntldr可能不會(huì)映射該段內(nèi)存,甚至可能BIOS在使用后都會(huì)關(guān)閉ROM區(qū)域這段內(nèi)存,而且ROM區(qū)域這段內(nèi)存在初始化后被系統(tǒng)BIOS設(shè)置成只讀不能寫。當(dāng)然我們可以采取用int 15h服務(wù)對(duì)ROM區(qū)域這段內(nèi)存映射。

當(dāng)然也可以在NT啟動(dòng)過(guò)程中,在我們的磁盤服務(wù)中對(duì)想映射的內(nèi)存都映射。由于代碼大小的限制,故有些沒(méi)必要的代碼。盡量不使用了。

磁盤中斷服務(wù)中再次HOOK問(wèn)題

為了使我們的程序再次獲得CPU運(yùn)行機(jī)會(huì),我們不得不得再次設(shè)法。調(diào)試發(fā)現(xiàn)NTLDR進(jìn)入保護(hù)模式后在加載NT內(nèi)核文件時(shí),會(huì)切換CPU到實(shí)模式調(diào)用Int 13H服務(wù)進(jìn)行磁盤讀。

我們掛接磁盤服務(wù)就是為了截取NTLDR的讀操作,這里我們可以HOOK 或者修改NTLDR另一部分OsLoader的代碼,跳轉(zhuǎn)到我們的代碼執(zhí)行。當(dāng)然也可以直接HOOK ntosknrl導(dǎo)出的服務(wù),參看我在2008.4.1發(fā)布的“程序從DOS/BIOS駐留內(nèi)存到WINNT下監(jiān)視內(nèi)存數(shù)據(jù)”。

注意,HOOK OsLoader的代碼時(shí)選擇HOOK指令問(wèn)題,由于NTLDR切換到實(shí)模式讀取數(shù)據(jù),讀完后會(huì)在保護(hù)模式下搬移數(shù)據(jù)到規(guī)劃位置,進(jìn)行內(nèi)核的安裝。故HOOK時(shí)選擇HOOK指令就選擇FFh/15h:使用CALL NEAR [OFS32]指令進(jìn)行,該指令尋址采用絕對(duì)地址,類似指令也可以。

當(dāng)然我們的代碼再次運(yùn)行就會(huì)運(yùn)行在OsLoader代碼被我們HOOK處,調(diào)用我我們的代碼執(zhí)行,這時(shí)我們的代碼運(yùn)行環(huán)境:DS = ES = 10h保護(hù)模式段,內(nèi)存模式: FLAT。在這里我們可以通過(guò)掃描_BlLoaderData數(shù)據(jù)結(jié)構(gòu),獲取NTOSKRNL鏡像基址。

可以通過(guò)PE搜索NTOSKRNL導(dǎo)出的API,可以參看網(wǎng)上相關(guān)教程?,F(xiàn)在再次HOOK NTOSKRNL導(dǎo)出函數(shù)KeAddSystemServiceTable,HOOK該函數(shù)
可以截獲win32k.sys添加它自己的服務(wù),以便我們?cè)僭俅蜨OOk win32.sys導(dǎo)出函數(shù)NtUserRegisterClassExWOW。HOOK該函數(shù)可以截取所有應(yīng)用層程序注冊(cè)窗口類,以便我們?cè)僭僭俅蜨OOK窗口類過(guò)程。這時(shí)我們的代碼就運(yùn)行在NT的應(yīng)用層模式下。
NT保護(hù)模式下設(shè)置物理地址映射

先看一個(gè)WinDbg實(shí)例關(guān)于在我們的磁盤服務(wù)中獲取CR3值修改頁(yè)映射的分析,以前我的分析內(nèi)容:

  1. NT內(nèi)核被加載高端的2GB內(nèi)存(80000000h~0ffffffffh)。參看NT內(nèi)存安排..
  2. a、win2kadvser:WINDBG看到NTKernelbase=0x80400000也就是NTOSKRNL.exe加載位置
  3. kd>r@cr3;斷點(diǎn)位置在NTOSKRNL.exe里現(xiàn)在還沒(méi)有應(yīng)用程序故低端內(nèi)存還未使用
  4. cr3=00030000;->頁(yè)目錄表所在物理頁(yè)(物理地址30000h)
  5. kd>d8003000080030800;看頁(yè)目錄發(fā)現(xiàn)現(xiàn)在低端2GB(0~80000000h)還未分配
  6. 800300000000000000000000-0000000000000000................
  7. 800300100000000000000000-0000000000000000................
  8. 800300200000000000000000-0000000000000000................
  9. kd>d80030800;看高端開(kāi)始分配情況頁(yè)表(80000000h開(kāi)始的分配情況)
  10. 800308006321030063410300-6351030063310300c!..cA..cQ..c1..
  11. 8003081063117c0063217c00-63317c0063417c00c.|.c!|.c1|.cA|.
  12. 8003082063517c0063617c00-63717c0063817c00cQ|.ca|.cq|.c.|.
  13. ;實(shí)例1:看80400000h(NTKernelbase),這個(gè)線性地址到物理地址映射情況.
  14. ;線性地址最高10位頁(yè)目錄項(xiàng)(每項(xiàng)占4Byte):80400000h最高10位=201h.
  15. ;在頁(yè)目表位置:201h*4=804h在內(nèi)存地址=[cr3]+804h..具體看保護(hù)模式教程
  16. kd>d80030000+804;看在頁(yè)目錄表位置的值
  17. 800308046341030063510300-6331030063117c00cA..cQ..c1..c.|.
  18. ;二級(jí)頁(yè)表所在物理頁(yè)地址:63410300轉(zhuǎn)換下34163h,物理頁(yè)地址:34000h,163h是頁(yè)屬性.
  19. kd>d80034000;看在頁(yè)表的值
  20. 800340006301400063114000-6321400063314000c.@.c.@.c!@.c1@.
  21. ;物理地址基址:63014000轉(zhuǎn)換下400163h,#物理地址基址#:400000h,163h是頁(yè)屬性
  22. ;最后發(fā)現(xiàn)物理地址基址(頁(yè)地址)在400000h..觀察物理地址400000h是NTOSKRNL.exe映像.
  23. kd>d80400000;觀察物理地址400000h
  24. 804000004d5a900003000000-04000000ffff0000MZ..............
  25. 80400010b800000000000000-4000000000000000........@.......
  26. ;實(shí)例2:看我們代碼映射情況我們代碼在物理地址:9e000h從線性地址8009e000h分析映射情況
  27. ;8009e000h在頁(yè)目錄位置最高10位=200h*4,在內(nèi)存地址=[CR3]+200h*4...
  28. kd>d80030000+200*4
  29. 800308006321030063410300-6351030063310300c!..cA..cQ..c1..
  30. ;二級(jí)頁(yè)表對(duì)應(yīng)物理地址:63210300轉(zhuǎn)換下物理頁(yè)基址=32000h,163是頁(yè)屬性
  31. ;8009e000h所在二級(jí)頁(yè)表位置:32000h+9eh*4(8009e000h線性地址12~22的位)...
  32. kd>d80032000+9e*4
  33. 8003227823e1090003f10900-03010a0003110a00#...............
  34. ;物理地址基址(頁(yè)基址):23e10900轉(zhuǎn)換下09e000h,123是頁(yè)屬性..
  35. ;#實(shí)例3:Windows運(yùn)行起后用的頁(yè)目錄表線性地址:0c0000000h映射到物理地址情況.
  36. kd>d80030000+c00;計(jì)算略.頁(yè)目錄表位置,觀察發(fā)現(xiàn)指向自己的...
  37. 80030c00670003006300f017-000000006331a902g...c.......c1..
  38. b、winXP:WINDBG看到Kernelbase=0x804d8000PsLoadedModuleList=0x8055b420
  39. kd>r@cr3;斷點(diǎn)位置在NTOSKRNL.exe里現(xiàn)在還沒(méi)有應(yīng)用程序故低端內(nèi)存還未使用
  40. cr3=00039000;->頁(yè)目錄表所在物理頁(yè)(頁(yè)目錄物理地址30000h)
  41. kd>d8003900080039800;看頁(yè)目錄發(fā)現(xiàn)現(xiàn)在低端2GB(0~80000000h)還未分配
  42. 800390000000000000000000-0000000000000000................
  43. kd>d80039800;看高端開(kāi)始分配情況頁(yè)表(80000000h開(kāi)始的分配情況)
  44. 80039800e9b900f606a10810-751bf606a3081075........u......u
  45. ;實(shí)例1:看我們代碼映射情況我們代碼在物理地址:9e000h從線性地址8009e000h分析映射情況
  46. ;8009e000h在頁(yè)目錄位置最高10位=200h*4,在內(nèi)存地址=[CR3]+200h*4...
  47. kd>d80039000+200*4
  48. 8003980063b10300e3014000-63e10300e3010001c.....@.c.......
  49. ;二級(jí)頁(yè)表對(duì)應(yīng)物理地址:63b10300轉(zhuǎn)換下物理頁(yè)基址=3b000h,163是頁(yè)屬性
  50. ;8009e000h所在二級(jí)頁(yè)表位置:3b000h+9eh*4(8009e000h線性地址12~22的位)...
  51. kd>d8003b000+9e*4
  52. 8003b27803e1090003f10900-03010a0003110a00................
  53. ;物理地址基址(頁(yè)基址):03e10900轉(zhuǎn)換下09e000h,103是頁(yè)屬性..
  54. --------->;*#實(shí)例2:手工修改分頁(yè)讓物理地址映射到線性地址,WINXP.80000000hBIOS/DOS向量區(qū)沒(méi)映射.#*
  55. kd>d80000000;可看到現(xiàn)在沒(méi)映射的情況,無(wú)法通過(guò)線性地址訪問(wèn).
  56. 80000000????????????????-????????????????????????????????
  57. 80000010????????????????-????????????????????????????????
  58. ;80000000h的最高10位確定在頁(yè)目錄表位置=200h*4=800h.在頁(yè)目錄物理地址:[cr3]+800h
  59. kd>d80039000+200*4;可發(fā)現(xiàn)二級(jí)頁(yè)表已映射(63b10300)頁(yè)屬性163.物理地址(頁(yè))3b000h
  60. 8003980063b10300e3014000-63e10300e3010001c.....@.c.......
  61. ;80000000h的12~22位次高10位確定在二級(jí)頁(yè)表位置:物理地址3b000h+0*4
  62. kd>d8003b000;觀察發(fā)現(xiàn)確實(shí)沒(méi)映射.全0.注意:一個(gè)頁(yè)項(xiàng)占4字節(jié)...
  63. 8003b0000000000000000000-0000000000000000................
  64. ;修改成讓它對(duì)應(yīng)物理地址:000就可以,只修改允許訪問(wèn)就可以.也就是byteptr[8003b000]=63
  65. kd>e8003b00063
  66. kd>d8003b000;修改成功
  67. 8003b0006300000000000000-0000000000000000c...............
  68. ;觀察修改后的情況.;注意:要想設(shè)置生效.讓W(xué)INDBG執(zhí)行下G.讓0C0000000等cr3被改等..
  69. kd>g;讓系統(tǒng)自動(dòng)刷新TLB等寄存器....
  70. kd>d80000000
  71. 8000000053ff00f053ff00f0-c3e200f053ff00f0S...S.......S...
  72. ;#實(shí)例3:Windows運(yùn)行起后用的頁(yè)目錄表線性地址:0c0000000h映射到物理地址情況.
  73. kd>d80039000+c00;計(jì)算略.頁(yè)目錄表位置,觀察發(fā)現(xiàn)指向自己的...
  74. 80039c00679003006300f00f-000000006331e201g...c.......c1..
  75. c、分析以上總結(jié):發(fā)現(xiàn)最開(kāi)始獲取的cr3值一直在用。
  76. 故我們修改頁(yè)項(xiàng)的效果會(huì)在windows運(yùn)行后也生效通過(guò)以上的實(shí)例分析可以看出NT系統(tǒng)的頁(yè)映射情況。
  77. 進(jìn)入保護(hù)模式之后這個(gè)CR3的值也就是頁(yè)目錄表位置被映射到了虛擬地址0c0000000h。
  78. 上面調(diào)試的實(shí)例頁(yè)目錄表地址就可以直接使用這個(gè)虛地址。

例如:在我們的代碼中把我們的代碼拷貝到SharedUserData空間未使用處去,就使用了頁(yè)映射代碼,直接修改第一個(gè)頁(yè)指向的物理頁(yè),就是我們代碼所在的物理頁(yè)。

NT保護(hù)模式下線性地址尋址問(wèn)題

關(guān)于我們的代碼進(jìn)入保護(hù)模式以后,所有指令的尋址問(wèn)題,這里作一下分析。當(dāng)我們代碼第一個(gè)在保護(hù)模式下執(zhí)行的指令,是前面提到的磁盤服務(wù)中對(duì)OsLoader的代碼進(jìn)入HOOK,也提到了采用什么樣的HOOK指令以便尋址。

接哪之后,我們的代碼就開(kāi)始運(yùn)行在保護(hù)模式未分頁(yè)情況下,我們采取的方法是把我們的代碼拷貝到SharedUserData空間未使用處,涉及到拷貝的指令也必須運(yùn)行在保護(hù)模式分頁(yè)下,因?yàn)镾haredUserData空間是一個(gè)虛地址。

在這里我們采用了把我們的拷貝代碼指令搬移到NTOSKRNL鏡像的MZ與PE之間的區(qū)域,設(shè)置HOOK NTOSKRNL導(dǎo)出函數(shù)KeAddSystemServiceTable首先跳轉(zhuǎn)到拷貝指令執(zhí)行,HOOK NTOSKRNL導(dǎo)出函數(shù)KeAddSystemServiceTable采用相對(duì)跳轉(zhuǎn)指令它們?cè)谕粋€(gè)空間。

當(dāng)我們的拷貝指令把我們的代碼拷貝到SharedUserData空間未使用處之后,我們的代碼就有一個(gè)固定的虛地址,所有后續(xù)指令都可以采用這個(gè)虛地址進(jìn)行尋址。

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部