版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三篇網(wǎng)絡安全理論與技術實驗篇第十一章操作系統(tǒng)安全編程實驗11.3進程線程塊分析及實踐網(wǎng)絡空間安全技術實踐教程111.3進程線程塊分析及實踐實驗目的:本實驗要求了解了解EPROCESS、ETHREAD等結構,并編程實現(xiàn)一個最基本的進程隱藏。網(wǎng)絡空間安全技術實踐教程211.3進程線程塊分析及實踐實驗預備理論:(1)進程和線程進程是具有一定獨立功能的程序,是關于某個數(shù)據(jù)集合上的一次運行活動,同時是進程的一個實體,是CPU進行資源調度和分派的基本單位,比進程更小且能獨立運行。線程本身只擁有一些在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行。相對進程而言,線程是一個更加接近于執(zhí)行體的概念,它可以與同進程中的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨立的執(zhí)行序列。網(wǎng)絡空間安全技術實踐教程311.3進程線程塊分析及實踐實驗預備理論:(2)線程模型和調度算法線程有兩種模型,即用戶級線程和內核級線程。用戶級線程模型的優(yōu)勢是線程切換效率高,因為不涉及內核模式和用戶模式之間的切換,并且應用程序可以采用合適自己特點的線程選擇算法。內核級線程有可能應用各種算法來分配處理器時間,線程可以有優(yōu)先級,高優(yōu)先級的線程被優(yōu)先執(zhí)行。系統(tǒng)維護一個全局線程表,系統(tǒng)在適當?shù)臅r候掛起一個正在執(zhí)行的線程,線程狀態(tài)有多種可能:sleep、wait/select、硬中斷或異常、線程終止。內核級線程的好處是,無需考慮自己霸占處理器而導致其他線程得不到處理器時間。代價是所有線程切換都將在內核模式下完成的。對于在用戶模式下運行的線程來說,一個線程被切換出去,下次再切換回來,需要從用戶模式到內核模式,再從內核模式切換回用戶模式。網(wǎng)絡空間安全技術實踐教程411.3進程線程塊分析及實踐實驗預備理論:(3)線程調度算法線程調度算法可以分為非搶占式和搶占式。搶占式通過一個時鐘中斷來獲得對處理器的控制權。有三種典型的線程調度算法:先到先服務算法,時間片輪轉算法,優(yōu)先級調度算法。Windows的調度算法是一個搶占式的、支持多處理器的優(yōu)先級調度算法,每個處理器定義了一個鏈表數(shù)組,相同優(yōu)先級的線程掛在同一個鏈表中,不同優(yōu)先級的線程分別屬于不同的鏈表。當一個線程滿足條件時,它首先被掛到當前處理器的一個待分配的鏈表,調度器在適當?shù)臅r候會把待分配的鏈表上的線程分配到了某個處理器的對應優(yōu)先級的線程鏈表中。進程和線程的實現(xiàn)非常復雜,具體原理大家可以參看《Windows內核原理與實現(xiàn)》等書籍。網(wǎng)絡空間安全技術實踐教程511.3進程線程塊分析及實踐實驗預備理論:(4)DKOM進程隱藏
當服務控制管理器(SCM)加載一個驅動的時候,就會生成一個DRIVER_OBJECT結構的對象;其中的DriverSection中保存著一個指向KLDR_DATA_TABLE_ENTRY結構體的指針,這個結構體被用來保存驅動模塊的一些信息。這個結構體中的第一個成員InLoadOrderLinks是一個LIST_ENTRY的結構,這使得每個驅動模塊被串在了一個雙向鏈表中,我們只要遍歷這條雙向鏈就能枚舉出所有的驅動模塊;其中域DllBase是驅動模塊的加載基地址,F(xiàn)ullDllName是驅動模塊的完整路徑,BaseDllName是驅動模塊的名稱。因此,如果我們要隱藏某個驅動,只需將我們要隱藏的驅動名跟鏈表中的每個節(jié)點的驅動名比較,一旦找到我們要隱藏的驅動,則修改它的InLoadOrderLinks域的Flink和Blink的指針即可,這即稱為DKOM(DirectKernelObjectManipulation)進程隱藏。網(wǎng)絡空間安全技術實踐教程611.3進程線程塊分析及實踐實驗內容:本實驗首先通過WinDbg工具,查看Windows微內核層的進程和線程對象(EPROCESS,ETHREAD,KPROCESS,KTHREAD)以及其他一些結構,如PEB等;接著利用所學知識實現(xiàn)一個基本的DKOM(DirectKernelObjectManipulation)進程隱藏。網(wǎng)絡空間安全技術實踐教程711.3進程線程塊分析及實踐實驗要點說明:(實驗難點說明)查看進程和線程對象編程實現(xiàn)進程隱藏網(wǎng)絡空間安全技術實踐教程811.3進程線程塊分析及實踐實驗準備:(實驗環(huán)境,實驗先有知識技術說明)Host機:裝有WDKVersion7.1.0的Win7x64位操作系統(tǒng)(或裝有WDKVersion10.0.14393.0的Win10x64位操作系統(tǒng))WinDbg6.12.0002.633網(wǎng)絡空間安全技術實踐教程911.3進程線程塊分析及實踐實驗準備:(實驗環(huán)境,實驗先有知識技術說明)虛擬機:裝有WDKVersion7600.16385.1的Windows7x64操作系統(tǒng)DriverMonitorVersion3.2.0DbgViewVersion4.76driversignatureenforcementoverriderVersion1.3b
網(wǎng)絡空間安全技術實踐教程1011.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構通過WinDbg工具,查看Windows微內核層的進程和線程對象(KPROCESS,KTHREAD,EPROCESS,ETHREAD)以及其他一些結構如PEB等等。
(1)EPROCESS結構在雙機調試過程中,可以在WinDbg的命令行中輸入dt_EPROCESS命令來查看EPROCESS結構,如圖11-3-1所示。網(wǎng)絡空間安全技術實踐教程1111.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
EPROCESS具體結構如下:
kd>dtnt!_EPROCESS+0x000Pcb:_KPROCESS+0x160ProcessLock:_EX_PUSH_LOCK+0x168CreateTime:_LARGE_INTEGER+0x170ExitTime:_LARGE_INTEGER+0x178RundownProtect:_EX_RUNDOWN_REF
+0x180UniqueProcessId:Ptr64Void//進程的唯一編號
+0x188ActiveProcessLinks:_LIST_ENTRY+0x198ProcessQuotaUsage:[2]Uint8B//內存使用量
+0x1a8ProcessQuotaPeak:[2]Uint8B//尖峰使用量
+0x1b8CommitCharge:Uint8B+0x1c0QuotaBlock:Ptr64_EPROCESS_QUOTA_BLOCK+0x1c8CpuQuotaBlock:Ptr64_PS_CPU_QUOTA_BLOCK+0x1d0PeakVirtualSize:Uint8B+0x1d8VirtualSize:Uint8B
網(wǎng)絡空間安全技術實踐教程1211.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x1e0SessionProcessLinks:_LIST_ENTRY+0x1f0DebugPort:Ptr64Void+0x1f8ExceptionPortData:Ptr64Void+0x1f8ExceptionPortValue:Uint8B+0x1f8ExceptionPortState:Pos0,3Bits+0x200ObjectTable:Ptr64_HANDLE_TABLE+0x208Token:_EX_FAST_REF+0x210WorkingSetPage:Uint8B+0x218AddressCreationLock:_EX_PUSH_LOCK+0x220RotateInProgress:Ptr64_ETHREAD+0x228ForkInProgress:Ptr64_ETHREAD+0x230HardwareTrigger:Uint8B+0x238PhysicalVadRoot:Ptr64_MM_AVL_TABLE+0x240CloneRoot:Ptr64Void+0x248NumberOfPrivatePages:Uint8B+0x250NumberOfLockedPages:Uint8B網(wǎng)絡空間安全技術實踐教程1311.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x258Win32Process:Ptr64Void+0x260Job:Ptr64_EJOB+0x268SectionObject:Ptr64Void+0x270SectionBaseAddress:Ptr64Void+0x278Cookie:Uint4B+0x27cUmsScheduledThreads:Uint4B+0x280WorkingSetWatch:Ptr64_PAGEFAULT_HISTORY+0x288Win32WindowStation:Ptr64Void+0x290InheritedFromUniqueProcessId:Ptr64Void+0x298LdtInformation:Ptr64Void+0x2a0Spare:Ptr64Void+0x2a8ConsoleHostProcess:Uint8B+0x2b0DeviceMap:Ptr64Void+0x2b8EtwDataSource:Ptr64Void
+0x2c0FreeTebHint:Ptr64Void+0x2c8FreeUmsTebHint:Ptr64Void網(wǎng)絡空間安全技術實踐教程1411.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x2d0PageDirectoryPte:_HARDWARE_PTE+0x2d0Filler:Uint8B+0x2d8Session:Ptr64Void+0x2e0ImageFileName:[15]UChar+0x2efPriorityClass:UChar+0x2f0JobLinks:_LIST_ENTRY+0x300LockedPagesList:Ptr64Void
+0x308ThreadListHead:_LIST_ENTRY+0x318SecurityPort:Ptr64Void+0x320Wow64Process:Ptr64Void+0x328ActiveThreads:Uint4B+0x32cImagePathHash:Uint4B+0x330DefaultHardErrorProcessing:Uint4B+0x334LastThreadExitStatus:Int4B+0x338Peb:Ptr64_PEB
+0x340PrefetchTrace:_EX_FAST_REF網(wǎng)絡空間安全技術實踐教程1511.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x348ReadOperationCount:_LARGE_INTEGER+0x350WriteOperationCount:_LARGE_INTEGER+0x358OtherOperationCount:_LARGE_INTEGER+0x360ReadTransferCount:_LARGE_INTEGER+0x368WriteTransferCount:_LARGE_INTEGER+0x370OtherTransferCount:_LARGE_INTEGER+0x378CommitChargeLimit:Uint8B+0x380CommitChargePeak:Uint8B+0x388AweInfo:Ptr64Void+0x390SeAuditProcessCreationInfo:_SE_AUDIT_PROCESS_CREATION_INFO+0x398Vm:_MMSUPPORT+0x420MmProcessLinks:_LIST_ENTRY+0x430HighestUserAddress:Ptr64Void+0x438ModifiedPageCount:Uint4B+0x43cFlags2:Uint4B+0x43cJobNotReallyActive:Pos0,1Bit網(wǎng)絡空間安全技術實踐教程1611.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x43cAccountingFolded:Pos1,1Bit+0x43cNewProcessReported:Pos2,1Bit+0x43cExitProcessReported:Pos3,1Bit+0x43cReportCommitChanges:Pos4,1Bit+0x43cLastReportMemory:Pos5,1Bit+0x43cReportPhysicalPageChanges:Pos6,1Bit+0x43cHandleTableRundown:Pos7,1Bit+0x43cNeedsHandleRundown:Pos8,1Bit+0x43cRefTraceEnabled:Pos9,1Bit+0x43cNumaAware:Pos10,1Bit+0x43cProtectedProcess:Pos11,1Bit+0x43cDefaultPagePriority:Pos12,3Bits+0x43cPrimaryTokenFrozen:Pos15,1Bit+0x43cProcessVerifierTarget:Pos16,1Bit+0x43cStackRandomizationDisabled:Pos17,1Bit+0x43cAffinityPermanent:Pos18,1Bit網(wǎng)絡空間安全技術實踐教程1711.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x43cAffinityUpdateEnable:Pos19,1Bit+0x43cPropagateNode:Pos20,1Bit+0x43cExplicitAffinity:Pos21,1Bit+0x440Flags:Uint4B+0x440CreateReported:Pos0,1Bit+0x440NoDebugInherit:Pos1,1Bit+0x440ProcessExiting:Pos2,1Bit+0x440ProcessDelete:Pos3,1Bit+0x440Wow64SplitPages:Pos4,1Bit+0x440VmDeleted:Pos5,1Bit+0x440OutswapEnabled:Pos6,1Bit+0x440Outswapped:Pos7,1Bit+0x440ForkFailed:Pos8,1Bit+0x440Wow64VaSpace4Gb:Pos9,1Bit+0x440AddressSpaceInitialized:Pos10,2Bits+0x440SetTimerResolution:Pos12,1Bit
網(wǎng)絡空間安全技術實踐教程1811.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x440BreakOnTermination:Pos13,1Bit+0x440DeprioritizeViews:Pos14,1Bit+0x440WriteWatch:Pos15,1Bit+0x440ProcessInSession:Pos16,1Bit+0x440OverrideAddressSpace:Pos17,1Bit+0x440HasAddressSpace:Pos18,1Bit+0x440LaunchPrefetched:Pos19,1Bit+0x440InjectInpageErrors:Pos20,1Bit+0x440VmTopDown:Pos21,1Bit+0x440ImageNotifyDone:Pos22,1Bit+0x440PdeUpdateNeeded:Pos23,1Bit+0x440VdmAllowed:Pos24,1Bit+0x440CrossSessionCreate:Pos25,1Bit+0x440ProcessInserted:Pos26,1Bit
+0x440DefaultIoPriority:Pos27,3Bits+0x440ProcessSelfDelete:Pos30,1Bit網(wǎng)絡空間安全技術實踐教程1911.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x440SetTimerResolutionLink:Pos31,1Bit+0x444ExitStatus:Int4B+0x448VadRoot:_MM_AVL_TABLE+0x488AlpcContext:_ALPC_PROCESS_CONTEXT+0x4a8TimerResolutionLink:_LIST_ENTRY+0x4b8RequestedTimerResolution:Uint4B+0x4bcActiveThreadsHighWatermark:Uint4B+0x4c0SmallestTimerResolution:Uint4B+0x4c8TimerResolutionStackRecord:Ptr64_PO_DIAG_STACK_RECORD網(wǎng)絡空間安全技術實踐教程2011.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
執(zhí)行體層位于內核層之上,側重于提供各種管理策略,同時為上層應用程序提供基本的功能接口。執(zhí)行體層進程對象的數(shù)據(jù)結構EPROCESS的重要組成部分如下:·Pcb是EPROCESS中第一個成員KPROCESS,KPROCESS是微內核的進程結構,側重于進程的基本資源信息。其中又有許多結構,例如鎖,線程鏈表等用來表征一個進程的數(shù)據(jù)結構。同時它也能通過LIST_ENTRY相互串聯(lián)成一個雙向鏈表?!niqueProcessId域是進程的唯一編號,在進程創(chuàng)建時設定。·ActiveProcessLinks域是一個雙鏈表節(jié)點,表頭是一個全局變量PsActiveProcessHead。·ProcessQuotaUsage和ProcessQuotaPeak是指一個進程的內存使用量和尖峰使用量。應用層上的一些相關進程函數(shù)會在工作時讀取它們。網(wǎng)絡空間安全技術實踐教程2111.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構·SessionProcessLinks域是一個雙鏈表節(jié)點,當進程加入系統(tǒng)的一個會話時,這個域將作為一個節(jié)點加入到該會話的進程鏈表?!bjectTable域是進程的句柄表,句柄是一個抽象概念,代表了進程已打開的一個對象。Windows的進程句柄表有層次結構。例如,對某進程執(zhí)行一次NtOpenProcess讀句柄,在進程句柄表上的相關計數(shù)就要加一?!oken域是指該進程的訪問令牌,用于該進程的安全訪問檢查?!dtInformation負責維護一個進程的LDT信息?!hreadListHead包含該進程中的所有線程。在EPROCESS中包含的是ETHREAD中的ThreadListEntry節(jié)點而在KPROCESS中包含的是KTHREAD中的ThreadListEntry網(wǎng)絡空間安全技術實踐教程2211.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構·SecurityPort與lsass進程之間的跨通信端口·SeAuditProcessCreationInfo包含創(chuàng)建進程時指定的進程映像全路徑名,ImageFileName實質上是從這里提取出來的(ImageFileName有效長度只有15-1)·Flags表示該進程當前的狀態(tài)。如果Flags=0,則NtOpenProcess會失敗·Peb:Ptr64_PEBPEB是一個非常重要的結構。網(wǎng)絡空間安全技術實踐教程2311.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構(2)KPROCESS結構在雙機調試過程中,可以在WinDbg的命令行中輸入dt_KPROCESS命令來查看KPROCESS結構,如圖11-3-2所示。網(wǎng)絡空間安全技術實踐教程2411.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構KPROCESS的具體結構如下:
kd>dtnt!_KPROCESS+0x000Header:_DISPATCHER_HEADER+0x018ProfileListHead:_LIST_ENTRY+0x028DirectoryTableBase:Uint8B+0x030ThreadListHead:_LIST_ENTRY+0x040ProcessLock:Uint8B+0x048Affinity:_KAFFINITY_EX
+0x070ReadyListHead:_LIST_ENTRY//記錄就緒但尚未被加入就緒鏈表的線程,指向KTHREAD對象WaitListEntry域
+0x080SwapListEntry:_SINGLE_LIST_ENTRY
+0x088ActiveProcessors:_KAFFINITY_EX//記錄當前進程運行在哪些處理器上
+0x0b0AutoAlignment:Pos0,1Bit+0x0b0DisableBoost:Pos1,1Bit+0x0b0DisableQuantum:Pos2,1Bit
+0x0b0ActiveGroupsMask:Pos3,4Bits網(wǎng)絡空間安全技術實踐教程2511.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x0b0ReservedFlags:Pos7,25Bits+0x0b0ProcessFlags:Int4B+0x0b4BasePriority:Char+0x0b5QuantumReset:Char+0x0b6Visited:UChar+0x0b7Unused3:UChar+0x0b8ThreadSeed:[4]Uint4B+0x0c8IdealNode:[4]Uint2B+0x0d0IdealGlobalNode:Uint2B+0x0d2Flags:_KEXECUTE_OPTIONS+0x0d3Unused1:UChar+0x0d4Unused2:Uint4B+0x0d8Unused4:Uint4B+0x0dcStackCount:_KSTACK_COUNT
+0x0e0ProcessListEntry:_LIST_ENTRY+0x0f0CycleTime:Uint8B+0x0f8KernelTime:Uint4B
網(wǎng)絡空間安全技術實踐教程2611.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x0fcUserTime:Uint4B+0x100InstrumentationCallback:Ptr64Void+0x108LdtSystemDescriptor:_KGDTENTRY64+0x118LdtBaseAddress:Ptr64Void+0x120LdtProcessLock:_KGUARDED_MUTEX+0x158LdtFreeSelectorHint:Uint2B+0x15aLdtTableLength:Uint2B我們看到,每個KPROCESS都代表一個進程。KPROCESS對象中記錄的信息主要包括兩類:一類跟進程的內存環(huán)境相關,比如頁目錄表,交換狀態(tài)。另一類是與其線程相關的一些屬性,比如線程列表以及線程所需要的優(yōu)先級、時限設置。ActiveProcessors記錄下了當前進程正在哪些處理器上運行。+0x070ReadyListHead:_LIST_ENTRY代表了雙向鏈表的表頭,該鏈表記錄了這個進程中處于就緒狀態(tài)但尚未被加入全局就緒鏈表的線程。該鏈表每一項都是一個指向KTHREAD對象WaitListEntry域的地址。網(wǎng)絡空間安全技術實踐教程2711.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構(3)ETHREAD結構在雙機調試過程中,可以在WinDbg的命令行中輸入dt_ETHREAD命令來查看ETHREAD結構,如圖11-3-3所示。網(wǎng)絡空間安全技術實踐教程2811.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構ETHREAD的具體結構如下:kd>dtnt!_ETHREAD+0x000Tcb:_KTHREAD+0x360CreateTime:_LARGE_INTEGER+0x368ExitTime:_LARGE_INTEGER+0x368KeyedWaitChain:_LIST_ENTRY+0x378ExitStatus:Int4B+0x380PostBlockList:_LIST_ENTRY+0x380ForwardLinkShadow:Ptr64Void+0x388StartAddress:Ptr64Void+0x390TerminationPort:Ptr64_TERMINATION_PORT+0x390ReaperLink:Ptr64_ETHREAD+0x390KeyedWaitValue:Ptr64Void+0x398ActiveTimerListLock:Uint8B+0x3a0ActiveTimerListHead:_LIST_ENTRY+0x3b0Cid:_CLIENT_ID
網(wǎng)絡空間安全技術實踐教程2911.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x3c0KeyedWaitSemaphore:_KSEMAPHORE+0x3c0AlpcWaitSemaphore:_KSEMAPHORE+0x3e0ClientSecurity:_PS_CLIENT_SECURITY_CONTEXT+0x3e8IrpList:_LIST_ENTRY+0x3f8TopLevelIrp:Uint8B+0x400DeviceToVerify:Ptr64_DEVICE_OBJECT+0x408CpuQuotaApc:Ptr64_PSP_CPU_QUOTA_APC+0x410Win32StartAddress:Ptr64Void+0x418LegacyPowerObject:Ptr64Void+0x420ThreadListEntry:_LIST_ENTRY+0x430RundownProtect:_EX_RUNDOWN_REF+0x438ThreadLock:_EX_PUSH_LOCK+0x440ReadClusterSize:Uint4B+0x444MmLockOrdering:Int4B+0x448CrossThreadFlags:Uint4B+0x448Terminated:Pos0,1Bit網(wǎng)絡空間安全技術實踐教程3011.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x448ThreadInserted:Pos1,1Bit+0x448HideFromDebugger:Pos2,1Bit+0x448ActiveImpersonationInfo:Pos3,1Bit+0x448SystemThread:Pos4,1Bit+0x448HardErrorsAreDisabled:Pos5,1Bit+0x448BreakOnTermination:Pos6,1Bit+0x448SkipCreationMsg:Pos7,1Bit+0x448SkipTerminationMsg:Pos8,1Bit+0x448CopyTokenOnOpen:Pos9,1Bit+0x448ThreadIoPriority:Pos10,3Bits+0x448ThreadPagePriority:Pos13,3Bits+0x448RundownFail:Pos16,1Bit+0x448NeedsWorkingSetAging:Pos17,1Bit+0x44cSameThreadPassiveFlags:Uint4B+0x44cActiveExWorker:Pos0,1Bit+0x44cExWorkerCanWaitUser:Pos1,1Bit網(wǎng)絡空間安全技術實踐教程3111.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x44cMemoryMaker:Pos2,1Bit+0x44cClonedThread:Pos3,1Bit+0x44cKeyedEventInUse:Pos4,1Bit+0x44cRateApcState:Pos5,2Bits+0x44cSelfTerminate:Pos7,1Bit+0x450SameThreadApcFlags:Uint4B+0x450Spare:Pos0,1Bit+0x450StartAddressInvalid:Pos1,1Bit+0x450EtwPageFaultCalloutActive:Pos2,1Bit+0x450OwnsProcessWorkingSetExclusive:Pos3,1Bit+0x450OwnsProcessWorkingSetShared:Pos4,1Bit+0x450OwnsSystemCacheWorkingSetExclusive:Pos5,1Bit+0x450OwnsSystemCacheWorkingSetShared:Pos6,1Bit+0x450OwnsSessionWorkingSetExclusive:Pos7,1Bit+0x451OwnsSessionWorkingSetShared:Pos0,1Bit+0x451OwnsProcessAddressSpaceExclusive:Pos1,1Bit網(wǎng)絡空間安全技術實踐教程3211.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x451OwnsProcessAddressSpaceShared:Pos2,1Bit+0x451SuppressSymbolLoad:Pos3,1Bit+0x451Prefetching:Pos4,1Bit+0x451OwnsDynamicMemoryShared:Pos5,1Bit+0x451OwnsChangeControlAreaExclusive:Pos6,1Bit+0x451OwnsChangeControlAreaShared:Pos7,1Bit+0x452OwnsPagedPoolWorkingSetExclusive:Pos0,1Bit+0x452OwnsPagedPoolWorkingSetShared:Pos1,1Bit+0x452OwnsSystemPtesWorkingSetExclusive:Pos2,1Bit+0x452OwnsSystemPtesWorkingSetShared:Pos3,1Bit+0x452TrimTrigger:Pos4,2Bits+0x452Spare1:Pos6,2Bits+0x453PriorityRegionActive:UChar+0x454CacheManagerActive:Uchar+0x455DisablePageFaultClustering:UChar+0x456ActiveFaultCount:UChar+0x457LockOrderState:UChar網(wǎng)絡空間安全技術實踐教程3311.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構+0x458AlpcMessageId:Uint8B+0x460AlpcMessage:Ptr64Void+0x460AlpcReceiveAttributeSet:Uint4B+0x468AlpcWaitListEntry:_LIST_ENTRY+0x478CacheManagerCount:Uint4B+0x47cIoBoostCount:Uint4B+0x480IrpListLock:Uint8B+0x488ReservedForSynchTracking:Ptr64Void+0x490CmCallbackListHead:_SINGLE_LIST_ENTRY
網(wǎng)絡空間安全技術實踐教程3411.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構Executivethreadblock(ETHREAD)應用在executive層,Kernelthreadblock(KTHREAD)應用在kernel層,它們都是在系統(tǒng)空間里,實際上KTHREAD結構是ETHREAD結構的一個子結構。上述結構中LARGE_INTEGERCreateTime包含了線程的創(chuàng)建時間,它是在線程創(chuàng)建時被賦值的。LARGE_INTEGERExitTime則包含了線程的退出時間,它是在線程退出函數(shù)中被賦值的。任務管理器中之所以能觀察到性能參數(shù),計劃任務的運行以及線程的饑餓算法的調度,很大程度上是因為在線程和進程的數(shù)據(jù)結構中保存了大量類似這些的基礎參數(shù)。網(wǎng)絡空間安全技術實踐教程3511.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構(4)KTHREAD結構在雙機調試過程中,可以在WinDbg的命令行中輸入dt_KTHREAD命令來查看KTHREAD結構,如圖11-3-4所示。網(wǎng)絡空間安全技術實踐教程3611.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構ETHREAD的具體結構如下:kd>dtnt!_KTHREAD+0x000Header:_DISPATCHER_HEADER+0x018CycleTime:Uint8B+0x020QuantumTarget:Uint8B+0x028InitialStack:Ptr64Void+0x030StackLimit:Ptr64Void+0x038KernelStack:Ptr64Void+0x040ThreadLock:Uint8B+0x048WaitRegister:_KWAIT_STATUS_REGISTER+0x049Running:UChar+0x04aAlerted:[2]UChar+0x04cKernelStackResident:Pos0,1Bit+0x04cReadyTransition:Pos1,1Bit+0x04cProcessReadyQueue:Pos2,1Bit網(wǎng)絡空間安全技術實踐教程3711.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x04cWaitNext:Pos3,1Bit+0x04cSystemAffinityActive:Pos4,1Bit+0x04cAlertable:Pos5,1Bit+0x04cGdiFlushActive:Pos6,1Bit+0x04cUserStackWalkActive:Pos7,1Bit+0x04cApcInterruptRequest:Pos8,1Bit+0x04cForceDeferSchedule:Pos9,1Bit+0x04cQuantumEndMigrate:Pos10,1Bit+0x04cUmsDirectedSwitchEnable:Pos11,1Bit+0x04cTimerActive:Pos12,1Bit+0x04cSystemThread:Pos13,1Bit+0x04cReserved:Pos14,18Bits+0x04cMiscFlags:Int4B+0x050ApcState:_KAPC_STATE+0x050ApcStateFill:[43]UChar+0x07bPriority:Char網(wǎng)絡空間安全技術實踐教程3811.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x07cNextProcessor:Uint4B+0x080DeferredProcessor:Uint4B+0x088ApcQueueLock:Uint8B+0x090WaitStatus:Int8B+0x098WaitBlockList:Ptr64_KWAIT_BLOCK+0x0a0WaitListEntry:_LIST_ENTRY+0x0a0SwapListEntry:_SINGLE_LIST_ENTRY+0x0b0Queue:Ptr64_KQUEUE
+0x0b8Teb:Ptr64Void//指向進程空間中線程環(huán)境塊結構
+0x0c0Timer:_KTIMER+0x100AutoAlignment:Pos0,1Bit+0x100DisableBoost:Pos1,1Bit+0x100EtwStackTraceApc1Inserted:Pos2,1Bit+0x100EtwStackTraceApc2Inserted:Pos3,1Bit+0x100CalloutActive:Pos4,1Bit
網(wǎng)絡空間安全技術實踐教程3911.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x100ApcQueueable:Pos5,1Bit+0x100EnableStackSwap:Pos6,1Bit+0x100GuiThread:Pos7,1Bit+0x100UmsPerformingSyscall:Pos8,1Bit+0x100VdmSafe:Pos9,1Bit+0x100UmsDispatched:Pos10,1Bit+0x100ReservedFlags:Pos11,21Bits+0x100ThreadFlags:Int4B+0x104Spare0:Uint4B+0x108WaitBlock:[4]_KWAIT_BLOCK+0x108WaitBlockFill4:[44]UChar+0x134ContextSwitches:Uint4B+0x108WaitBlockFill5:[92]UChar+0x164State:UChar+0x165NpxState:Char+0x166WaitIrql:UChar
網(wǎng)絡空間安全技術實踐教程4011.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x167WaitMode:Char+0x108WaitBlockFill6:[140]UChar+0x194WaitTime:Uint4B+0x108WaitBlockFill7:[168]UChar+0x1b0TebMappedLowVa:Ptr64Void+0x1b8Ucb:Ptr64_UMS_CONTROL_BLOCK+0x108WaitBlockFill8:[188]UChar+0x1c4KernelApcDisable:Int2B+0x1c6SpecialApcDisable:Int2B+0x1c4CombinedApcDisable:Uint4B+0x1c8QueueListEntry:_LIST_ENTRY
+0x1d8TrapFrame:Ptr64_KTRAP_FRAME//表示當一個線程離開運行狀態(tài)時,其當前的執(zhí)行狀態(tài)
+0x1e0FirstArgument:Ptr64Void+0x1e8CallbackStack:Ptr64Void+0x1e8CallbackDepth:Uint8B+0x1f0ApcStateIndex:UChar網(wǎng)絡空間安全技術實踐教程4111.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x1f1BasePriority:Char+0x1f2PriorityDecrement:Char+0x1f2ForegroundBoost:Pos0,4Bits+0x1f2UnusualBoost:Pos4,4Bits+0x1f3Preempted:UChar+0x1f4AdjustReason:UChar+0x1f5AdjustIncrement:Char+0x1f6PreviousMode:Char+0x1f7Saturation:Char+0x1f8SystemCallNumber:Uint4B+0x1fcFreezeCount:Uint4B+0x200UserAffinity:_GROUP_AFFINITY+0x210Process:Ptr64_KPROCESS+0x218Affinity:_GROUP_AFFINITY
+0x228IdealProcessor:Uint4B+0x22cUserIdealProcessor:Uint4B網(wǎng)絡空間安全技術實踐教程4211.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x230ApcStatePointer:[2]Ptr64_KAPC_STATE+0x240SavedApcState:_KAPC_STATE+0x240SavedApcStateFill:[43]UChar+0x26bWaitReason:UChar+0x26cSuspendCount:Char+0x26dSpare1:Char+0x26eCodePatchInProgress:UChar+0x270Win32Thread:Ptr64Void+0x278StackBase:Ptr64Void+0x280SuspendApc:_KAPC+0x280SuspendApcFill0:[1]UChar+0x281ResourceIndex:UChar+0x280SuspendApcFill1:[3]UChar+0x283QuantumReset:UChar+0x280SuspendApcFill2:[4]UChar+0x284KernelTime:Uint4B網(wǎng)絡空間安全技術實踐教程4311.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x280SuspendApcFill3:[64]UChar+0x2c0WaitPrcb:Ptr64_KPRCB+0x280SuspendApcFill4:[72]UChar+0x2c8LegoData:Ptr64Void+0x280SuspendApcFill5:[83]UChar+0x2d3LargeStack:UChar+0x2d4UserTime:Uint4B+0x2d8SuspendSemaphore:_KSEMAPHORE+0x2d8SuspendSemaphorefill:[28]UChar+0x2f4SListFaultCount:Uint4B+0x2f8ThreadListEntry:_LIST_ENTRY+0x308MutantListHead:_LIST_ENTRY+0x318SListFaultAddress:Ptr64Void+0x320ReadOperationCount:Int8B+0x328WriteOperationCount:Int8B+0x330OtherOperationCount:Int8B網(wǎng)絡空間安全技術實踐教程4411.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構
+0x338ReadTransferCount:Int8B+0x340WriteTransferCount:Int8B+0x348OtherTransferCount:Int8B+0x350ThreadCounters:Ptr64_KTHREAD_COUNTERS+0x358XStateSave:Ptr64_XSTATE_SAVE在KTHREAD中,我們看到Teb域,+0x0b8Teb:Ptr64Void,TEB指向進程空間中的一個TEB(線程環(huán)境塊結構)。TrapFrame域是最重要的部分,它表示當一個線程離開運行狀態(tài)時,其當前的執(zhí)行狀態(tài),比如現(xiàn)在的指令RIP在哪里,各個寄存器中的值是什么,都必須保留下來,以便下次再輪到這個線程運行時,可以恢復原來的執(zhí)行狀態(tài)。TrapFrame是記錄控制流狀態(tài)的數(shù)據(jù)結構,它是一個指向KTRAP_FRAME類型的指針。網(wǎng)絡空間安全技術實踐教程4511.3進程線程塊分析及實踐實驗步驟:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD結構KTHREAD通過LIST_ENTRY相互串聯(lián),要獲得當前進程的KPROCESS,可以通過查找KPRCB來找到KTHREAD鏈,找到KTHREAD后即可找到KPROCESS。在KTHREAD中有TEB(線程環(huán)境快)的成員,通過TEB,進而可以獲得PEB。通過KPROCESS和KTHREAD我們看到,內核層的進程和線程對象只包含了系統(tǒng)資源管理和多控制流并發(fā)執(zhí)行所涉及的基本信息,沒有包含與應用程序相關聯(lián)的信息。進程對象提供了線程的基本執(zhí)行環(huán)境,包括進程地址空間和一組進程范圍內公用的參數(shù);線程對象提供了為參與線程調度而必須的各種信息及其維護控制流的狀態(tài)。網(wǎng)絡空間安全技術實踐教程4611.3進程線程塊分析及實踐實驗步驟:2)DKOM進程隱藏隱藏進程的方法有多種,除了本節(jié)所涉及的斷鏈方法,還有修改句柄表等其他方法。然而,隱藏進程實際上是一個非常不穩(wěn)定的操作,進程自身的一些正常功能可能會受到影響。
(1)進程隱藏實現(xiàn)原理在操作系統(tǒng)中,EPROCESS中的ActiveProcessLinks把各個EPROCESS結構體連接成雙向鏈表,ZwQuerySystemInformation在枚舉進程時會枚舉這條鏈表。本實驗在通過斷鏈方法實現(xiàn)隱藏進程時,會將某個需要隱藏的EPROCESS從鏈表摘除,此時ZwQuerySystemInformation無法枚舉到被摘鏈的進程,而依靠此函數(shù)的一些RING3的枚舉進程函數(shù)也就失效了。需要注意的是,由于系統(tǒng)安全機制原因,該進程隱藏在運行一定時間后可能會導致系統(tǒng)藍屏。網(wǎng)絡空間安全技術實踐教程4711.3進程線程塊分析及實踐實驗步驟:2)DKOM進程隱藏(2)進程隱藏關鍵源碼HIDE64.c進程隱藏的關鍵代碼如下:#include<ntddk.h>#include<windef.h>NTKERNELAPINTSTATUSPsLookupProcessByProcessId(HANDLEProcessId,PEPROCESS*Process);NTKERNELAPICHAR*PsGetProcessImageFileName(PEPROCESSProcess);//目標進程PEPROCESSaudiodg=NULL,dwm=NULL;ULONGop_dat;
//偏移定義,我們實驗環(huán)境是Win7系統(tǒng),如果其他系統(tǒng)該值不一樣#definePROCESS_ACTIVE_PROCESS_LINKS_OFFSET0x188網(wǎng)絡空間安全技術實踐教程4811.3進程線程塊分析及實踐實驗步驟:2)DKOM進程隱藏//摘除雙向鏈表的指定項VOIDRemoveListEntry(PLIST_ENTRYListEntry){KIRQLOldIrql;OldIrql=KeRaiseIrqlToDpcLevel();if(ListEntry->Flink!=ListEntry&&ListEntry->Blin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械行業(yè)采購工作總結
- 婚慶行業(yè)品牌推廣案例
- 安防保安行業(yè)美工工作總結
- 金融行業(yè)員工培訓
- 探索自我提升之路計劃
- 財務會計前臺工作總結
- 音樂錄制委托合同三篇
- 神經(jīng)內科護理工作感悟
- 2024年瓦斯抽放管理制度
- 2024年稅務師題庫及參考答案(完整版)
- 學術不端行為治理研究
- 企業(yè)文化、戰(zhàn)略與電力能源知識參考題庫練習卷含答案(一)
- 福建南平武夷高新技術產業(yè)控股集團有限公司招聘筆試沖刺題2024
- 2024年設備維修部管理制度(6篇)
- GB/T 45083-2024再生資源分揀中心建設和管理規(guī)范
- 精神科護理工作計劃例文
- 2024山地買賣合同模板
- 河北省承德市2023-2024學年高一上學期期末物理試卷(含答案)
- 【初中化學】二氧化碳的實驗室制取教學課件-2024-2025學年九年級化學人教版上冊
- 出租車行業(yè)服務質量提升方案
- 景區(qū)安全管理教育培訓
評論
0/150
提交評論