网易首页 > 网易号 > 正文 申请入驻

使用ETW监控冒个进程创建和启动服务以及加载驱动程序

0
分享至

做edr的同学大概都晓得edr中经常需要监控windows服务以及windows驱动模块的加载的监控,windows驱动的加载的监控的方法通常使用和windows模块加载监控的方法一样,在内核驱动里使用PsSetLoadImageNotifyRoutine设置模块加载回调例程来监控ring3模块以及ring0模块的加载,回调函数 PsSetLoadImageNotifyRoutine的第二个参数判断,如果 Process Id是0 ,则表示加载驱动,如果Process Id非零,则表示加载DLL。但是这种方法监控驱动加载通常的进程Id是0,因为驱动加载的时候使用的是APC线程,当前上下文在系统线程内,所以得不到具体的进程id.

堆栈如下

RetAddr : Args to Child : Call Site

00 fffff80004b1748d : fffff8800456b8a0 fffff880031ac0d0 0000000000000001 fffff80004b74dfe : nt!DebugService2+0x501 fffff80004b74ecb : fffff880031ac000 fffffa80016de070 fffff8800456b9b8 0000000000000007 : nt!DbgLoadImageSymbols+0x4d02 fffff80004e47bfd : fffffa8000eeee20 fffff8a00000001c fffff80004d84a30 fffff8800456b888 : nt!DbgLoadImageSymbolsUnicode+0x2b03 fffff80004e6286b : fffff880031ac000 fffff8800456b8f8 0000000000000000 fffff8800456b8d8 : nt!MiDriverLoadSucceeded+0x2bd04 fffff80004e64ebd : fffff8800456b9b8 0000000000000000 0000000000000000 0000000000000000 : nt!MmLoadSystemImage+0x80b05 fffff80004e65875 : 0000000000000001 0000000000000000 0000000000000000 fffffa800231c1e0 : nt!IopLoadDriver+0x44d06 fffff80004a8b161 : fffff80000000000 ffffffff8000077c fffff80004e65820 fffffa80006db040 : nt!IopLoadUnloadDriver+0x5507 fffff80004d21166 : 0000000000000000 fffffa80006db040 0000000000000080 fffffa80006b71d0 : nt!ExpWorkerThread+0x11108 fffff80004a5c486 : fffff80004bf6e80 fffffa80006db040 fffffa80006da680 0000000000000000 : nt!PspSystemThreadStartup+0x5a09 0000000000000000 : fffff8800456c000 fffff88004566000 fffff8800456ae60 0000000000000000 : nt!KiStartSystemThread+0x16

所以在当到达PsSetLoadImageNotifyRoutine的时候加载驱动模块的加载的时候pid就是0了,是否有其他方法可以监控到具体的进程?答案是肯定的, 那就是ETW。

ETW是个windows日志事件Trace,每个Trace日志都有他自己的Guid,要监控服务以及驱动加载的日志就得找到对应的GUID,这个GUID是多少呢,下面我们就来具体分析。
最好的方式就是逆向调试分析,打开一个安装驱动服务的软件,比如我们这次使用的是

接下来就是上调试器附加这个进程

在调试器里找到CreateServiceW函数,发现这个函数会调用sechost.dllsechost.CreateServiceW的函数

发现最终的实现是在这个sechost模块的CreateServiceW,在windows/system32的目录下找到对应的模块,在IDA下以及调试器看到,在运行到最后会调用NdrClientCall4

注意该函数的第一个参数是pStubDescriptor,它的类型是PMIDL_STUB_DESC pStubDescriptor,是一个结构体

typedef struct _MIDL_STUB_DESC {
void *RpcInterfaceInformation;
void * )(size_t) *(pfnAllocate;
void()(void *) * pfnFree;
union {
handle_t *pAutoHandle;
handle_t *pPrimitiveHandle;
PGENERIC_BINDING_INFO pGenericBindingInfo;
} IMPLICIT_HANDLE_INFO;
const NDR_RUNDOWN *apfnNdrRundownRoutines;
const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
const EXPR_EVAL *apfnExprEval;
const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
const unsigned char *pFormatTypes;
int fCheckBounds;
unsigned long Version;
MALLOC_FREE_STRUCT *pMallocFreeStruct;
long MIDLVersion;
const COMM_FAULT_OFFSETS *CommFaultOffsets;
const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
ULONG_PTR mFlags;
const NDR_CS_ROUTINES *CsRoutineTables;
void *ProxyServerInfo;
const NDR_EXPR_DESC *pExprInfo;
} MIDL_STUB_DESC;

最主要的是结构体中的第一个字段RpcInterfaceInformation,这个结构是RPC接口的信息,定义这RPC的GUID,当前对应的是全局内存是dword_10008F38,所以它对应的是RPC的GUIID

可以看出GUID是 367ABB81-9844-35F1-AD32-98F038001003

这个RPC 的GUID我们可以在微软的官方网页里找到

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/4c8b7701-b043-400c-9350-dc29cfaa5e7a

The server interface is identified by UUID 367ABB81-9844-35F1-AD32-98F038001003, version 2.0, using the RPC well-known endpoint "\PIPE\svcctl". The server MUST use RPC over SMB, ncacn_np or RPC over TCP, or ncacn_ip_tcp as the RPC protocol sequence to the RPC implementation, as specified in [MS-RPCE]. The server MUST specify the Simple and Protected GSS-API Negotiation Mechanism (SPNEGO) (0x9) or NT LAN Manager (NTLM) (0xA), or both, as the RPC Authentication Service (as specified in [MS-RPCE]). See [MS-RPCE] section 3.3.1.5.2.2 and [C706] section 13.

意思就是说说这个GUID的RPC对应的名字是\PIPE\svcctl,而且它是在server.exe的这个服务进程里创建的。

接下来的工作就是去逆向service.exe这个进程。
在server.exe的程序里我们可以找到对应的RPC 接口函数是RCreateServiceW

接着会调用ScCreateServiceRpc

在下面的地方我们会看到一个函数
I_RpcBindingInqLocalClientPID(0i64, &Pid);,这个函数会获取当前RPC的客户端进程id

接着就是输出日志,当然前提是这个日志已经开启并且有人去接收它,

V22 就是pid,0x28是当前输出的KeyId,a17是模块名,a2是路径

注意此处的WPP_410463680eaf3577d867156ad5450ae6_Traceguids并非Etw的事件GUID,需要从WPP_GLOBAL_Control对应的结构体去找,在服务的进程的初始化会填充初始化这个GUID

在服务启动入口函数Main里

会开启StarttraceSession

ScStartTracingSession开函数里启动EnableTrace Etw日志

对应的GUID就是ScmWppLoggingGuid :{EBCCA1C2-AB46-4A1D-8C2A-906C2FF25F39}

其实ScmWppLoggingGuid对应的微软官方Trace名是Service Control Manager Trace
最终我们获取的就是这个GUID,当有了这个名字后我们就可以写demo去获取相应的信息来验证我们研究的结果
伪代码如下

GUID RegistryProvGuid = { 0xEBCCA1C2, 0xAB46, 0x4A1D, 0x8c, 0x2a, 0x90, 0x6c, 0x2f, 0xf2, 0x5f, 0x39 };

………….(注意中间略去ETW的创建开启代码,网络上很多这种代码。)

最关键的是Monitor的地方对PEVENT_RECORD值的判断要判断key id 是否是0x28,因为之前我们逆向时发现输出的key id是0x28

Void Monitor(PEVENT_RECORD pEvent)

{

if (pEvent->EventHeader.EventDescriptor.Id == 0x28)

{

int i = 0;

i++;

}

else if (pEvent->EventHeader.EventDescriptor.Id == 0x2A)

{
}
}

写好之后我们就可以调试。使用之前的程序去创建服务。

他对应的Pid3356

当点击安装的时候demo断点断捕获下来了

可以在内存里查看

UserData

可以看到前面就是创建的服务名,那个e4 0d 00 00 就是进程Pid,内存颠倒过来就是00000de4 == 3356 , 后面还有一块区域是要创建的服务对应的模块地址。
到此验证ok,还有其他一些OpenService、StartService都可以找出来对应的key id,这个读者可以自行去研究发现。

欢迎登录安全客 -有思想的安全新媒体www.anquanke.com/加入QQ交流群1015601496 获取更多最新资讯

原文链接:https://www.anquanke.com/post/id/241806

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
博士老师为何留守中专?编制,穷孩子逆袭的最后防线!

博士老师为何留守中专?编制,穷孩子逆袭的最后防线!

华庭讲美食
2024-06-16 08:57:11
今夜,我是你的女人

今夜,我是你的女人

娱记掌门
2024-06-15 20:55:23
“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

吃鱼思故渊
2024-05-16 21:48:21
冯提莫健身直播走光!直播间当场被封禁,网友嘲讽:“垫大欺客”

冯提莫健身直播走光!直播间当场被封禁,网友嘲讽:“垫大欺客”

木子爱娱乐大号
2024-06-12 16:33:27
申花正式敲定夏窗5人离队名单,中超标王领衔,两人将驰援津门虎

申花正式敲定夏窗5人离队名单,中超标王领衔,两人将驰援津门虎

评球论事
2024-06-15 19:38:11
董宇辉再惹争议!大批游客因他在景区外暴晒3小时,相关部门为甩责互踢皮球

董宇辉再惹争议!大批游客因他在景区外暴晒3小时,相关部门为甩责互踢皮球

可达鸭面面观
2024-06-14 12:11:52
终于理解为啥女性有妇科病不愿去医院!看完网友分享,感到既心塞

终于理解为啥女性有妇科病不愿去医院!看完网友分享,感到既心塞

奇特短尾矮袋鼠
2024-06-14 11:36:18
国足18强赛分档确定,避开日韩跟两支送分童子一组,出线指日可待

国足18强赛分档确定,避开日韩跟两支送分童子一组,出线指日可待

罗掌柜体育
2024-06-15 19:30:47
直击:白金汉宫礼台上威廉凯特恩爱对视,夏洛特站C位女王范十足

直击:白金汉宫礼台上威廉凯特恩爱对视,夏洛特站C位女王范十足

文雅笔墨
2024-06-16 01:01:18
内蒙古“公安厅长”落马!贪财好色,包养13岁女孩,为省“赔偿金”竟将其杀害

内蒙古“公安厅长”落马!贪财好色,包养13岁女孩,为省“赔偿金”竟将其杀害

天闻地知
2024-06-14 11:11:52
卡拉斯科:沙特联赛的水平比中国联赛高多了 C罗一人住一栋楼

卡拉斯科:沙特联赛的水平比中国联赛高多了 C罗一人住一栋楼

直播吧
2024-06-15 13:09:08
爱丁堡降温,Taylor演出冻到手抽筋,还想着台下歌迷!

爱丁堡降温,Taylor演出冻到手抽筋,还想着台下歌迷!

娱记掌门
2024-06-16 02:26:51
曹操墓考古发现:曹操身高1.56米,牙周炎严重,带有强烈口臭

曹操墓考古发现:曹操身高1.56米,牙周炎严重,带有强烈口臭

蜉蝣说
2024-06-03 22:03:43
拜登已签字,22国一致对华征税,中方加量囤粮食,瑞典的努力白费

拜登已签字,22国一致对华征税,中方加量囤粮食,瑞典的努力白费

梦涵说体育
2024-06-16 11:12:59
属“猴”人这几个月出生,都是“命”最苦的!你是哪个月份出生的

属“猴”人这几个月出生,都是“命”最苦的!你是哪个月份出生的

娱乐小可爱蛙
2024-06-14 11:20:49
伊朗突然轰炸以色列,意外炸碎一国面具,巴勒斯坦最大仇人出现!

伊朗突然轰炸以色列,意外炸碎一国面具,巴勒斯坦最大仇人出现!

绝对军评
2024-06-15 05:54:02
美联储对中国的第二波攻击已经发动,目标是掐死人民币国际化道路

美联储对中国的第二波攻击已经发动,目标是掐死人民币国际化道路

王思聪爱音乐
2024-06-15 22:37:27
伊能静喊话大S:珍惜那个给你依靠的人

伊能静喊话大S:珍惜那个给你依靠的人

综艺拼盘汇
2024-06-16 07:50:17
尘埃落定!上港王牌是否故意在国足诈伤离队,主教练已给出答案

尘埃落定!上港王牌是否故意在国足诈伤离队,主教练已给出答案

罗掌柜体育
2024-06-15 12:08:11
美媒:关于海权,中国跟我们的理解并不相同

美媒:关于海权,中国跟我们的理解并不相同

环球时报国际
2024-06-15 06:55:18
2024-06-16 12:40:49
安全客
安全客
有思想的安全新媒体
1360文章数 4743关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

媒体:普京开出的停火条件有重大变化 已亮出战略底牌

头条要闻

媒体:普京开出的停火条件有重大变化 已亮出战略底牌

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

游戏
时尚
本地
亲子
军事航空

《怪兽8号》将推游戏 登陆手机/Steam平台

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

亲子要闻

“快哭,不然阿姨打你哦”新生儿缺氧无法哭出声音

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版