https://m.toutiao.com/is/dS2s7qU/?=Rootkits
大家好,我是周杰倫。
繼續(xù)咱們的三個(gè)月入門系列文章,上次的三個(gè)月入門Web安全發(fā)布后,有讀者留言讓我寫一寫內(nèi)核方面的,今天就來了。
不過學(xué)習(xí)內(nèi)核方向,需要的基本功確實(shí)有點(diǎn)多,梳理發(fā)現(xiàn)再怎么著壓縮,三個(gè)月時(shí)間還是不夠,最后壓縮到了四個(gè)月。
內(nèi)核方向可能不如Web安全那么讓人熟知,搞安全的學(xué)習(xí)內(nèi)核干什么?
安全領(lǐng)域中,主要有這幾個(gè)方向會(huì)需要學(xué)習(xí)內(nèi)核技術(shù):
1、Rootkit開發(fā),開發(fā)內(nèi)核級(jí)病毒木馬程序
2、內(nèi)核安全開發(fā),比如ARK開發(fā)、安全軟件開發(fā),數(shù)據(jù)防泄漏、透明加解密等
3、內(nèi)核漏洞攻擊技術(shù),Kernel Exploit
因?yàn)樵诎踩I(lǐng)域研究?jī)?nèi)核技術(shù)主要是Windows比較多,所以本文講述路線僅適用于Windows操作系統(tǒng)。
廢話不多說,上學(xué)習(xí)路線!先來一個(gè)總覽:
第一個(gè)月
計(jì)算機(jī)系統(tǒng)基礎(chǔ)C語言編程一C語言編程二系統(tǒng)編程初探
第二個(gè)月
x86匯編基礎(chǔ)軟件調(diào)試技術(shù)逆向分析技術(shù)HOOK技術(shù)
第三個(gè)月
系統(tǒng)編程深入x86內(nèi)核基礎(chǔ)、內(nèi)存管理Windows進(jìn)程與線程知識(shí)系統(tǒng)調(diào)用、中斷與異常
第四個(gè)月
驅(qū)動(dòng)開發(fā)入門ARK工具使用內(nèi)核編程Rootkit技術(shù)
第一個(gè)月,主要是通過學(xué)習(xí)C語言編程來掌握一些計(jì)算機(jī)的基礎(chǔ)知識(shí)。
第一周:計(jì)算機(jī)系統(tǒng)基礎(chǔ)
新手小白一開始先從計(jì)算機(jī)基本概念學(xué)起,計(jì)算機(jī)的基礎(chǔ)架構(gòu)模型,馮諾伊曼體系是什么,CPU的基本工作原理,了解操作系統(tǒng)的基礎(chǔ)概念,編程是怎么一回事。
第一周的工作主要是掃盲,了解計(jì)算機(jī)系統(tǒng)的一些基礎(chǔ)名詞和概念,可以不用掌握的非常深,但腦子里要有一個(gè)初步的印象。
第二周:C語言基礎(chǔ)一
第二周開始來進(jìn)入C語言的學(xué)習(xí),現(xiàn)代主流操作系統(tǒng)基本都是使用C語言開發(fā),系統(tǒng)編程也基本使用C語言,學(xué)習(xí)C語言對(duì)未來學(xué)習(xí)操作系統(tǒng)和內(nèi)核知識(shí)是必須的基礎(chǔ)。
這一周,主要掌握一些基本的語法,main函數(shù)、輸入輸出、基礎(chǔ)數(shù)據(jù)類型、基本運(yùn)算符、分支判斷、循環(huán)、數(shù)組,宏···能編寫一些簡(jiǎn)單的程序。
第三周:C語言基礎(chǔ)二
這一周,還是學(xué)習(xí)C語言,因?yàn)镃語言實(shí)在太重要了,一周時(shí)間根本不夠。相比上一周,這一周會(huì)學(xué)得更深入一些。重點(diǎn)掌握函數(shù)、指針、結(jié)構(gòu)體、聯(lián)合體、位域、sizeof、typedef、malloc/free這些知識(shí)。
學(xué)習(xí)的時(shí)候不要光看書,一定要每一個(gè)知識(shí)點(diǎn)在編譯器里動(dòng)手寫代碼去實(shí)踐,反復(fù)練習(xí)加深鞏固對(duì)知識(shí)點(diǎn)的理解。
同時(shí)在這個(gè)階段,學(xué)習(xí)使用編譯器(Visual Studio、Clion等)自帶的調(diào)試工具進(jìn)行代碼調(diào)試,學(xué)習(xí)打斷點(diǎn)、查看變量、單步執(zhí)行等基礎(chǔ)操作。
第四周:系統(tǒng)編程初探
有了一定的C語言編程功底,是時(shí)候來學(xué)習(xí)一些跟操作系統(tǒng)相關(guān)的編程,在這個(gè)過程中接觸一些操作系統(tǒng)相關(guān)的知識(shí)。
比如文件操作、多進(jìn)程、多線程、堆內(nèi)存分配與釋放,了解Windows 32位平臺(tái)上進(jìn)程模型,內(nèi)存地址空間格局,進(jìn)程里有哪些內(nèi)容等。
第二個(gè)月,學(xué)習(xí)一些二進(jìn)制安全的基礎(chǔ),這一些東西,做漏洞、破解PWN、內(nèi)核都需要掌握。
第五周:x86匯編基礎(chǔ)
這一周,開始來學(xué)習(xí)x86匯編語言,做內(nèi)核安全,經(jīng)常會(huì)進(jìn)行逆向分析、HOOK掛鉤等操作,所以需要具備一定的匯編語言功底。可以從16位匯編開始,了解CPU有哪些寄存器,每個(gè)寄存器是做什么的,了解內(nèi)存分段機(jī)制等。
學(xué)習(xí)基本的常用指令語法:mov、add、sub、push、pop、call、ret、jmp、je/jle/jbe、xor、mul、div、nop···
有了16位的基礎(chǔ),拓展了解32位下的區(qū)別,寄存器的變化。
第六周:軟件調(diào)試技術(shù)
前面在學(xué)習(xí)C語言編程等時(shí)候,學(xué)習(xí)過使用編譯器自帶的調(diào)試器進(jìn)行簡(jiǎn)單的調(diào)試,在這一周,咱們?cè)賮硐到y(tǒng)的學(xué)習(xí)一下在匯編層面進(jìn)行調(diào)試。
在VisualStudio中調(diào)試的時(shí)候,除了源碼調(diào)試,還可以打開匯編窗口查看匯編指令,而且最關(guān)鍵的是,VS將每一行C語句都和匯編指令對(duì)照起來了,非常方便我們的學(xué)習(xí)。
除了在VS中學(xué)習(xí)調(diào)試,這一周主要學(xué)習(xí)OllyDbg、WinDbg兩款調(diào)試工具的使用,有了匯編語言的基礎(chǔ)和在VS中調(diào)試的經(jīng)歷,學(xué)習(xí)這兩款調(diào)試工具應(yīng)該會(huì)輕松不少。
學(xué)習(xí)調(diào)試函數(shù)調(diào)用過程,分析函數(shù)調(diào)用過程中涉及到的傳參、跳轉(zhuǎn)、返回地址、堆棧變化,理解函數(shù)調(diào)用在底層的過程,了解線程的棧里面都有哪些東西。
第七周:逆向分析技術(shù)
有了匯編語言和操作系統(tǒng)的一些基礎(chǔ)知識(shí),現(xiàn)在可以正式地來接觸逆向分析技術(shù)了。
首先了解高級(jí)語言編譯成可執(zhí)行文件的過程,然后學(xué)習(xí)PE文件格式。
之后學(xué)習(xí)反編譯工具IDA,學(xué)習(xí)IDA的一些基礎(chǔ)操作,查找字符串、查找函數(shù)、圖形模式和非圖形模式的使用、反編譯成高級(jí)語言F5功能等。
第八周:HOOK技術(shù)
這一周學(xué)習(xí)HOOK技術(shù),HOOK技術(shù)是搞二進(jìn)制安全和內(nèi)核技術(shù)方向的基本功。
學(xué)習(xí)常見的HOOK技術(shù)原理,并編程實(shí)踐:inline HOOK、IAT HOOK、Windows消息HOOK。
進(jìn)入第三個(gè)月,開始全面接觸Windows平臺(tái)系統(tǒng)編程的這一套東西,為進(jìn)一步學(xué)習(xí)內(nèi)核打前站。
第九周:系統(tǒng)編程深入
學(xué)習(xí)Win32編程,掌握DLL編寫、文件讀寫、文件遍歷、進(jìn)程遍歷、線程遍歷、模塊遍歷、遠(yuǎn)程線程注入等基礎(chǔ)操作。
通過這些編程,熟悉Windows上進(jìn)程、線程、模塊、句柄等基礎(chǔ)概念,了解kernel32.dll、user32.dll、ntdll.dll這些文件是做什么的。
學(xué)習(xí)使用工具:ProcMon監(jiān)控進(jìn)程行為。
第十周:x86內(nèi)核基礎(chǔ)、內(nèi)存管理
這一周開始接觸內(nèi)核的基礎(chǔ)知識(shí),從x86的特權(quán)級(jí)別和內(nèi)存管理方式入手,了解現(xiàn)代操作系統(tǒng)和CPU管理內(nèi)存的底層原理。
學(xué)習(xí)x86平臺(tái)特權(quán)級(jí)Ring0-Ring3模型,了解分段式內(nèi)存管理機(jī)制、分頁式內(nèi)存管理機(jī)制,虛擬內(nèi)存原理。
第十一周:Windows進(jìn)程與線程知識(shí)
這一周,學(xué)習(xí)Windows內(nèi)核中管理進(jìn)程和線程的知識(shí),學(xué)習(xí)進(jìn)程和線程的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)EPROCESS、ETHREAD、PEB。
重點(diǎn)學(xué)習(xí):Windows創(chuàng)建一個(gè)進(jìn)程的基本過程,細(xì)節(jié)可以不用深究,但基本流程要知道,有哪些關(guān)鍵的步驟。
這一周完成后,對(duì)一個(gè)進(jìn)程在Windows系統(tǒng)中是一個(gè)怎樣的存在,從應(yīng)用層到內(nèi)核,有一個(gè)基本的認(rèn)識(shí)。
第十二周:系統(tǒng)調(diào)用、中斷與異常
這一周,重點(diǎn)弄懂系統(tǒng)調(diào)用和中斷與異常兩個(gè)最基本的內(nèi)核概念,弄清楚它們的詳細(xì)過程,Win32 API進(jìn)入內(nèi)核的路徑和原理,內(nèi)核分發(fā)系統(tǒng)調(diào)用的SSDT、SSDTShadow,分發(fā)中斷的IDT。通過查看內(nèi)核源碼分析詳細(xì)過程。
這一個(gè)階段,可以結(jié)合微軟曾經(jīng)開源的Windows部分內(nèi)核源碼WRK來學(xué)習(xí)。
進(jìn)入第四個(gè)月,正式進(jìn)入神秘的內(nèi)核區(qū)域?qū)崙?zhàn)了!
第十三周:驅(qū)動(dòng)開發(fā)入門
這一周,終于要開始正式編寫Windows驅(qū)動(dòng)啦!
首先學(xué)習(xí)使用WDK開發(fā)Windows內(nèi)核驅(qū)動(dòng)的基本步驟,了解DriverEntry函數(shù)、DriverObject、DeviceObject、SymbolLink、IRP這些基本概念。
然后學(xué)習(xí)驅(qū)動(dòng)安裝加載和卸載,同時(shí)學(xué)會(huì)使用工具加載和自己編程加載。
同時(shí),學(xué)習(xí)內(nèi)核日志輸出,使用DebugView查看驅(qū)動(dòng)輸出的日志。
最后,掌握VirtualKD + VMware進(jìn)行虛擬機(jī)內(nèi)核調(diào)試,學(xué)會(huì)調(diào)試自己的驅(qū)動(dòng)程序。
第十四周:ARK工具使用
這一周來學(xué)習(xí)一下ARK工具的使用,如PChunter,學(xué)習(xí)使用這些工具查看內(nèi)核中的進(jìn)程、驅(qū)動(dòng)、系統(tǒng)調(diào)用表、內(nèi)核鉤子、應(yīng)用層鉤子等信息,并對(duì)前幾周學(xué)習(xí)的內(nèi)核知識(shí)進(jìn)行復(fù)習(xí)鞏固。
第十五周:內(nèi)核編程
這一周繼續(xù)來深入學(xué)習(xí)內(nèi)核編程,掌握使用DeviceIoCtrol與內(nèi)核通信的編程,掌握內(nèi)核中內(nèi)存分配與釋放。
學(xué)習(xí)內(nèi)核的一些基本過濾框架和回調(diào)通知(進(jìn)程、線程、模塊、注冊(cè)表等),實(shí)現(xiàn)一些安全防御功能(如進(jìn)程保護(hù)、文件保護(hù)、注冊(cè)表防護(hù))。
第十六周:Rootkit技術(shù)
這一周,主要來學(xué)習(xí)一些Rootkit經(jīng)常用到的技術(shù):文件隱藏、進(jìn)程隱藏等。
學(xué)習(xí)內(nèi)核中一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu):比如SSDT、IDT、GDT、全局進(jìn)程列表、全局驅(qū)動(dòng)模塊列表、關(guān)機(jī)回調(diào)等,編程操作對(duì)這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作(HOOK、Patch、斷鏈等),通過修改內(nèi)核數(shù)據(jù)結(jié)構(gòu),達(dá)到隱藏、回寫等功能。
最后,再學(xué)習(xí)了解下64位下內(nèi)核技術(shù)的一些區(qū)別,學(xué)習(xí)了解PatchGuard。
1、《windows核心編程》
2、《深入解析Windows操作系統(tǒng)》
3、《天書夜讀:從匯編語言到Windows內(nèi)核編程》
4、《寒江獨(dú)釣 windows內(nèi)核安全編程》
5、《Rootkits--Windows內(nèi)核的安全防護(hù)》
以上就是四個(gè)月入門內(nèi)核安全的學(xué)習(xí)路線了,需要說明的是,四個(gè)月的時(shí)間可能還是不太夠,很多東西只能學(xué)個(gè)皮毛,但足夠大家摸到這個(gè)門檻了。
大家在學(xué)習(xí)的時(shí)候,可以結(jié)合自己的實(shí)際情況進(jìn)行縮短和增加學(xué)習(xí)時(shí)間。
比如你對(duì)C語言已經(jīng)有基礎(chǔ)了,就可以跳過這一部分。又比如你覺得匯編部分,一周不夠,那就多加一周,適合自己的節(jié)奏就好。
大家對(duì)這份學(xué)習(xí)路線有什么疑問都可以在評(píng)論區(qū)告訴我哦。
聯(lián)系客服