版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三篇网络安全理论与技术实验篇第十一章操作系统安全编程实验11.3进程线程块分析及实践网络空间安全技术实践教程111.3进程线程块分析及实践实验目的:本实验要求了解了解EPROCESS、ETHREAD等结构,并编程实现一个最基本的进程隐藏。网络空间安全技术实践教程211.3进程线程块分析及实践实验预备理论:(1)进程和线程进程是具有一定独立功能的程序,是关于某个数据集合上的一次运行活动,同时是进程的一个实体,是CPU进行资源调度和分派的基本单位,比进程更小且能独立运行。线程本身只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。网络空间安全技术实践教程311.3进程线程块分析及实践实验预备理论:(2)线程模型和调度算法线程有两种模型,即用户级线程和内核级线程。用户级线程模型的优势是线程切换效率高,因为不涉及内核模式和用户模式之间的切换,并且应用程序可以采用合适自己特点的线程选择算法。内核级线程有可能应用各种算法来分配处理器时间,线程可以有优先级,高优先级的线程被优先执行。系统维护一个全局线程表,系统在适当的时候挂起一个正在执行的线程,线程状态有多种可能:sleep、wait/select、硬中断或异常、线程终止。内核级线程的好处是,无需考虑自己霸占处理器而导致其他线程得不到处理器时间。代价是所有线程切换都将在内核模式下完成的。对于在用户模式下运行的线程来说,一个线程被切换出去,下次再切换回来,需要从用户模式到内核模式,再从内核模式切换回用户模式。网络空间安全技术实践教程411.3进程线程块分析及实践实验预备理论:(3)线程调度算法线程调度算法可以分为非抢占式和抢占式。抢占式通过一个时钟中断来获得对处理器的控制权。有三种典型的线程调度算法:先到先服务算法,时间片轮转算法,优先级调度算法。Windows的调度算法是一个抢占式的、支持多处理器的优先级调度算法,每个处理器定义了一个链表数组,相同优先级的线程挂在同一个链表中,不同优先级的线程分别属于不同的链表。当一个线程满足条件时,它首先被挂到当前处理器的一个待分配的链表,调度器在适当的时候会把待分配的链表上的线程分配到了某个处理器的对应优先级的线程链表中。进程和线程的实现非常复杂,具体原理大家可以参看《Windows内核原理与实现》等书籍。网络空间安全技术实践教程511.3进程线程块分析及实践实验预备理论:(4)DKOM进程隐藏
当服务控制管理器(SCM)加载一个驱动的时候,就会生成一个DRIVER_OBJECT结构的对象;其中的DriverSection中保存着一个指向KLDR_DATA_TABLE_ENTRY结构体的指针,这个结构体被用来保存驱动模块的一些信息。这个结构体中的第一个成员InLoadOrderLinks是一个LIST_ENTRY的结构,这使得每个驱动模块被串在了一个双向链表中,我们只要遍历这条双向链就能枚举出所有的驱动模块;其中域DllBase是驱动模块的加载基地址,FullDllName是驱动模块的完整路径,BaseDllName是驱动模块的名称。因此,如果我们要隐藏某个驱动,只需将我们要隐藏的驱动名跟链表中的每个节点的驱动名比较,一旦找到我们要隐藏的驱动,则修改它的InLoadOrderLinks域的Flink和Blink的指针即可,这即称为DKOM(DirectKernelObjectManipulation)进程隐藏。网络空间安全技术实践教程611.3进程线程块分析及实践实验内容:本实验首先通过WinDbg工具,查看Windows微内核层的进程和线程对象(EPROCESS,ETHREAD,KPROCESS,KTHREAD)以及其他一些结构,如PEB等;接着利用所学知识实现一个基本的DKOM(DirectKernelObjectManipulation)进程隐藏。网络空间安全技术实践教程711.3进程线程块分析及实践实验要点说明:(实验难点说明)查看进程和线程对象编程实现进程隐藏网络空间安全技术实践教程811.3进程线程块分析及实践实验准备:(实验环境,实验先有知识技术说明)Host机:装有WDKVersion7.1.0的Win7x64位操作系统(或装有WDKVersion10.0.14393.0的Win10x64位操作系统)WinDbg6.12.0002.633网络空间安全技术实践教程911.3进程线程块分析及实践实验准备:(实验环境,实验先有知识技术说明)虚拟机:装有WDKVersion7600.16385.1的Windows7x64操作系统DriverMonitorVersion3.2.0DbgViewVersion4.76driversignatureenforcementoverriderVersion1.3b
网络空间安全技术实践教程1011.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构通过WinDbg工具,查看Windows微内核层的进程和线程对象(KPROCESS,KTHREAD,EPROCESS,ETHREAD)以及其他一些结构如PEB等等。
(1)EPROCESS结构在双机调试过程中,可以在WinDbg的命令行中输入dt_EPROCESS命令来查看EPROCESS结构,如图11-3-1所示。网络空间安全技术实践教程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
网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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
网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程2011.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构
执行体层位于内核层之上,侧重于提供各种管理策略,同时为上层应用程序提供基本的功能接口。执行体层进程对象的数据结构EPROCESS的重要组成部分如下:·Pcb是EPROCESS中第一个成员KPROCESS,KPROCESS是微内核的进程结构,侧重于进程的基本资源信息。其中又有许多结构,例如锁,线程链表等用来表征一个进程的数据结构。同时它也能通过LIST_ENTRY相互串联成一个双向链表。·UniqueProcessId域是进程的唯一编号,在进程创建时设定。·ActiveProcessLinks域是一个双链表节点,表头是一个全局变量PsActiveProcessHead。·ProcessQuotaUsage和ProcessQuotaPeak是指一个进程的内存使用量和尖峰使用量。应用层上的一些相关进程函数会在工作时读取它们。网络空间安全技术实践教程2111.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构·SessionProcessLinks域是一个双链表节点,当进程加入系统的一个会话时,这个域将作为一个节点加入到该会话的进程链表。·ObjectTable域是进程的句柄表,句柄是一个抽象概念,代表了进程已打开的一个对象。Windows的进程句柄表有层次结构。例如,对某进程执行一次NtOpenProcess读句柄,在进程句柄表上的相关计数就要加一。·Token域是指该进程的访问令牌,用于该进程的安全访问检查。·LdtInformation负责维护一个进程的LDT信息。·ThreadListHead包含该进程中的所有线程。在EPROCESS中包含的是ETHREAD中的ThreadListEntry节点而在KPROCESS中包含的是KTHREAD中的ThreadListEntry网络空间安全技术实践教程2211.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构·SecurityPort与lsass进程之间的跨通信端口·SeAuditProcessCreationInfo包含创建进程时指定的进程映像全路径名,ImageFileName实质上是从这里提取出来的(ImageFileName有效长度只有15-1)·Flags表示该进程当前的状态。如果Flags=0,则NtOpenProcess会失败·Peb:Ptr64_PEBPEB是一个非常重要的结构。网络空间安全技术实践教程2311.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构(2)KPROCESS结构在双机调试过程中,可以在WinDbg的命令行中输入dt_KPROCESS命令来查看KPROCESS结构,如图11-3-2所示。网络空间安全技术实践教程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网络空间安全技术实践教程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
网络空间安全技术实践教程2611.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构+0x0fcUserTime:Uint4B+0x100InstrumentationCallback:Ptr64Void+0x108LdtSystemDescriptor:_KGDTENTRY64+0x118LdtBaseAddress:Ptr64Void+0x120LdtProcessLock:_KGUARDED_MUTEX+0x158LdtFreeSelectorHint:Uint2B+0x15aLdtTableLength:Uint2B我们看到,每个KPROCESS都代表一个进程。KPROCESS对象中记录的信息主要包括两类:一类跟进程的内存环境相关,比如页目录表,交换状态。另一类是与其线程相关的一些属性,比如线程列表以及线程所需要的优先级、时限设置。ActiveProcessors记录下了当前进程正在哪些处理器上运行。+0x070ReadyListHead:_LIST_ENTRY代表了双向链表的表头,该链表记录了这个进程中处于就绪状态但尚未被加入全局就绪链表的线程。该链表每一项都是一个指向KTHREAD对象WaitListEntry域的地址。网络空间安全技术实践教程2711.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构(3)ETHREAD结构在双机调试过程中,可以在WinDbg的命令行中输入dt_ETHREAD命令来查看ETHREAD结构,如图11-3-3所示。网络空间安全技术实践教程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
网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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
网络空间安全技术实践教程3411.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构Executivethreadblock(ETHREAD)应用在executive层,Kernelthreadblock(KTHREAD)应用在kernel层,它们都是在系统空间里,实际上KTHREAD结构是ETHREAD结构的一个子结构。上述结构中LARGE_INTEGERCreateTime包含了线程的创建时间,它是在线程创建时被赋值的。LARGE_INTEGERExitTime则包含了线程的退出时间,它是在线程退出函数中被赋值的。任务管理器中之所以能观察到性能参数,计划任务的运行以及线程的饥饿算法的调度,很大程度上是因为在线程和进程的数据结构中保存了大量类似这些的基础参数。网络空间安全技术实践教程3511.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构(4)KTHREAD结构在双机调试过程中,可以在WinDbg的命令行中输入dt_KTHREAD命令来查看KTHREAD结构,如图11-3-4所示。网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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//指向进程空间中线程环境块结构
+0x0c0Timer:_KTIMER+0x100AutoAlignment:Pos0,1Bit+0x100DisableBoost:Pos1,1Bit+0x100EtwStackTraceApc1Inserted:Pos2,1Bit+0x100EtwStackTraceApc2Inserted:Pos3,1Bit+0x100CalloutActive:Pos4,1Bit
网络空间安全技术实践教程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
网络空间安全技术实践教程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//表示当一个线程离开运行状态时,其当前的执行状态
+0x1e0FirstArgument:Ptr64Void+0x1e8CallbackStack:Ptr64Void+0x1e8CallbackDepth:Uint8B+0x1f0ApcStateIndex:UChar网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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网络空间安全技术实践教程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(线程环境块结构)。TrapFrame域是最重要的部分,它表示当一个线程离开运行状态时,其当前的执行状态,比如现在的指令RIP在哪里,各个寄存器中的值是什么,都必须保留下来,以便下次再轮到这个线程运行时,可以恢复原来的执行状态。TrapFrame是记录控制流状态的数据结构,它是一个指向KTRAP_FRAME类型的指针。网络空间安全技术实践教程4511.3进程线程块分析及实践实验步骤:1)查看EPROCESS,ETHREAD,KPROCESS,KTHREAD结构KTHREAD通过LIST_ENTRY相互串联,要获得当前进程的KPROCESS,可以通过查找KPRCB来找到KTHREAD链,找到KTHREAD后即可找到KPROCESS。在KTHREAD中有TEB(线程环境快)的成员,通过TEB,进而可以获得PEB。通过KPROCESS和KTHREAD我们看到,内核层的进程和线程对象只包含了系统资源管理和多控制流并发执行所涉及的基本信息,没有包含与应用程序相关联的信息。进程对象提供了线程的基本执行环境,包括进程地址空间和一组进程范围内公用的参数;线程对象提供了为参与线程调度而必须的各种信息及其维护控制流的状态。网络空间安全技术实践教程4611.3进程线程块分析及实践实验步骤:2)DKOM进程隐藏隐藏进程的方法有多种,除了本节所涉及的断链方法,还有修改句柄表等其他方法。然而,隐藏进程实际上是一个非常不稳定的操作,进程自身的一些正常功能可能会受到影响。
(1)进程隐藏实现原理在操作系统中,EPROCESS中的ActiveProcessLinks把各个EPROCESS结构体连接成双向链表,ZwQuerySystemInformation在枚举进程时会枚举这条链表。本实验在通过断链方法实现隐藏进程时,会将某个需要隐藏的EPROCESS从链表摘除,此时ZwQuerySystemInformation无法枚举到被摘链的进程,而依靠此函数的一些RING3的枚举进程函数也就失效了。需要注意的是,由于系统安全机制原因,该进程隐藏在运行一定时间后可能会导致系统蓝屏。网络空间安全技术实践教程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;
//偏移定义,我们实验环境是Win7系统,如果其他系统该值不一样#definePROCESS_ACTIVE_PROCESS_LINKS_OFFSET0x188网络空间安全技术实践教程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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市场调研合作合同3篇
- 数控加工刀具招标条件3篇
- 持续发展餐饮业环保承诺3篇
- 撤销刑事辩护授权书3篇
- 房屋买卖合同风险防范3篇
- 收割机转让合同协议书3篇
- 教育资源整合分包协议3篇
- 常州科研实验室租赁合同3篇
- 改扩建工程施工合同的交流会议3篇
- 摄影合同协议书范本3篇
- 冲上云霄-飞机鉴赏智慧树知到期末考试答案2024年
- 部编人教版语文六年级下册《9 浣溪沙》课件
- 扁平化春暖花开教育环保春天主题模板课件
- 吊车安全技术交底
- 《让学生看见你爱》心得体会
- Windows-Server-2012网络服务架构课件(完整版)
- GB∕T 9286-2021 色漆和清漆 划格试验
- 环境监测所需各类原始记录填写格式模板参考模板范本
- 01土地复垦适宜性评价案例
- 天津城建桩基础课程设计
- 备件的ABC分类管理规定法
评论
0/150
提交评论