pcb结构链表_知乎

本文详细介绍了Windows系统中进程隐藏的原理,通过解析EPROCESS结构的ActiveProcessLinks字段实现进程在系统链表中的断链,达到隐藏进程的效果。文章通过kd.exe工具演示了如何在Local kernel debugging模式下,对notepad.exe进程进行隐藏操作,并讨论了防御思路和利用前提条件。
摘要由CSDN通过智能技术生成

01 前言

Pierre-Alexandre Braeken在SecTor2016上做了一个很棒的演讲——HACK MICROSOFT BY USING MICROSOFT SIGNED BINARIES。

他对自己开源的工具PowerMemory做了介绍,将powershell同使用微软签名的程序相结合,可以绕过Device Guard和杀毒软件的拦截。

02 简介

PowerMemory内包含的脚本很多,其中一个比较有趣的脚本是Hide-Me.ps1,通过借助kb.exe来实现对进程的隐藏

本文将对该脚本进行测试,介绍进程隐藏的原理,修改原脚本,分析利用和防御方法。

03 相关概念

PCB(process control block):

进程控制块,是系统为了管理进程专门设置的一个数据结构

PCB的组织方式:

线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况

索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等

链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等

不同操作系统的PCB结构不同

Windows下的PCB是EPROCESS结构

进程链表是一个双向环链表

EPROCESS结构:

每个进程都有一个EPROCESS结构,里面保存着进程的各种信息和相关结构的指针

注:Windows各版本的EPROCESS结构存在差异

EPROCESS结构位于系统地址空间,所以访问这个结构需要有ring0的权限

注:Windows开启Local kernel debugging模式后,可进入ring0,使用内核态调试器

基本的内核态调试器有以下两种:

1. kd.exe(KD)

命令行模式

常用于调试内核态的应用程序和驱动程序,调试用户态的应用程序,或者监视操作系统自身的行为等

2. windbg.exe(WinDbg)

界面模式

可以为Windows内核、内核态驱动程序以及用户态应用程序提供完整的源代码级调试

通过kd.exe可以查看EPROCESS结构,命令行参数如下:

kd -kl -y "srv*c:symbols*Symbol information" -c "dt nt!_eprocess"

回显如下:

lkd> kd: Reading initial command 'dt nt!_eprocess;Q'

+0x000 Pcb : _KPROCESS

+0x2d8 ProcessLock : _EX_PUSH_LOCK

+0x2e0 RundownProtect : _EX_RUNDOWN_REF

+0x2e8 UniqueProcessId : Ptr64 Void

+0x2f0 ActiveProcessLinks : _LIST_ENTRY

+0x300 Flags2 : Uint4B

+0x300 JobNotReallyActive : Pos 0, 1 Bit

+0x300 AccountingFolded : Pos 1, 1 Bit

+0x300 NewProcessReported : Pos 2, 1 Bit

+0x300 ExitProcessReported : Pos 3, 1 Bit

+0x300 ReportCommitChanges : Pos 4, 1 Bit

+0x300 LastReportMemory : Pos 5, 1 Bit

+0x300 ForceWakeCharge : Pos 6, 1 Bit

+0x300 CrossSessionCreate : Pos 7, 1 Bit

+0x300 NeedsHandleRundown : Pos 8, 1 Bit

+0x300 RefTraceEnabled : Pos 9, 1 Bit

+0x300 DisableDynamicCode : Pos 10, 1 Bit

+0x300 EmptyJobEvaluated : Pos 11, 1 Bit

+0x300 DefaultPagePriority : Pos 12, 3 Bits

+0x300 PrimaryTokenFrozen : Pos 15, 1 Bit

+0x300 ProcessVerifierTarget : Pos 16, 1 Bit

+0x300 StackRandomizationDisabled : Pos 17, 1 Bit

+0x300 AffinityPermanent : Pos 18, 1 Bit

+0x300 AffinityUpdateEnable : Pos 19, 1 Bit

+0x300 PropagateNode : Pos 20, 1 Bit

+0x300 ExplicitAffinity : Pos 21, 1 Bit

+0x300 ProcessExecutionState : Pos 22, 2 Bits

+0x300 DisallowStrippedImages : Pos 24, 1 Bit

+0x300 HighEntropyASLREnabled : Pos 25, 1 Bit

+0x300 ExtensionPointDisable : Pos 26, 1 Bit

+0x300 ForceRelocateImages : Pos 27, 1 Bit

+0x300 ProcessStateChangeRequest : Pos 28, 2 Bits

+0x300 ProcessStateChangeInProgress : Pos 30, 1 Bit

+0x300 DisallowWin32kSystemCalls : Pos 31, 1 Bit

+0x304 Flags : Uint4B

+0x304 CreateReported : Pos 0, 1 Bit

+0x304 NoDebugInherit : Pos 1, 1 Bit

+0x304 ProcessExiting : Pos 2, 1 Bit

+0x304 ProcessDelet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值