内核呓语系列3 —— windows会话管理

2013-12-24 Nie.Meining Coding

今天接着讲windows子系统。上文提到,任何一个应用程序,包括CUI程序,都运行在Windows子系统中,实际上会话管理器smss.exe是个特殊情况,另外System和Idle也是特殊情况(它们根本没有对应的程序文件),这个留到以后讲进程的时候再细讲吧。

smss.exe之所以特殊是因为windows子系统窗口管理分为“会话 --> 窗口站 --> 桌面”三级架构,而会话正是由smss.exe创建的,此时还没有windows子系统。实际上smss.exe是Windows启动后创建的第一个用户模式进程,windows环境子系统进程csrss.exe正是由smss.exe所创建,win32.sys也是由smss.exe加载(MmLoadSystemImage + call oep)。

接下来smss还会创建winlogon.exe,提供登陆认证。winlogon.exe负责登陆界面、锁屏界面等实现。想起了当年广为流传的输入法漏洞、粘滞建漏洞等绕过登录认证的方法……这里就不详细解释了。

说到会话管理,xp中winlogon.exe登陆界面和第一个用户会共享session,但后来因为session隔离(见session隔离故事),导致某些需要与用户桌面进行交互的服务(例如一些木马程序的截屏功能)需要进行更多的操作来指定session和桌面。

阅读全文>>

评论(0) 浏览(38902)

ObCallback回调钩子检测

2013-12-20 Nie.Meining Coding

在 PatchGuard 的摧残下,通过 ObRegisterCallbacks 函数注册回调钩子已经成了 RK/ARK 中的主流技术之一。注册回调钩子的具体做法可以参考MSDN上的示例代码:http://code.msdn.microsoft.com/windowshardware/ObCallback-Sample-67a47841

今天研究了一下检测这类回调钩子的方法,发出来跟大家分享。本人水平有限,错漏之处还请大家指正。

首先关注的还是注册回调钩子时调用的 ObRegisterCallbacks 函数,MSDN上的函数声明如下:

NTSTATUS ObRegisterCallbacks(
	_In_   POB_CALLBACK_REGISTRATION CallBackRegistration,
	_Out_  PVOID *RegistrationHandle
);

也就是说调用该函数后,我们会得到一个神奇的 RegistrationHandle 指针,而该指针指向的数据结构必然用于描述本次注册的回调钩子(否则 ObUnRegisterCallbacks 就摘不掉钩子了)。

经过一番逆向和调试,发现这个数据结构由三个部分顺序组织在内存中:

阅读全文>>

评论(1) 浏览(38848)

Win8中的MmVerifyCallbackFunction

2013-12-20 Nie.Meining Coding

看了下Win8中的MmVerifyCallbackFunction,依然守护 ObRegisterCallbacks 和 PspSetCreateProcessNotifyRoutine:

win8verfify1.png

不过检测方案和win7中是一样的:

阅读全文>>

评论(0) 浏览(29354)

内核呓语系列2 —— windows子系统

2013-12-18 Nie.Meining Coding

上一篇写到Windows将图形支持作为windows子系统的一部分放到了内核支持中。其实windows子系统既有内核部分也有用户态部分,其内核部分由win32.sys实现,负责窗口管理(会话、窗口站、桌面)和GDI。win32.sys对应用层不处理任何IO请求,只作为内核功能扩展导出Shadow SSDT表向用户层提供大量系统服务。因此基于这个定位,win32.sys不是一个完整的内核驱动,而是一个内核动态链接库,其加载方式是 MmLoadSystemImage + call oep。

任何一个线程,只要调用了Shadow SSDT中的函数则会转变成一个GUI线程(PsConvertToGuiThread),纳入csrss.exe的管理范畴。转换过程包括分配子系统相关的对象、切换一个更大的内核栈(KeSwitchKernelStack)、切换为 KeServiceDescriptorTableShadow 等。具体可以参考wrk。另外,win32.sys 并不常驻内存,因此在有些进程中可能看不到Shadow SSDT表(例如 system):

nhyy2_1.png

阅读全文>>

评论(2) 浏览(27569)

内核呓语系列1 —— 系统结构

2013-12-17 Nie.Meining Coding

学习内核有一段时间了,做了不少底层开发、驱动开发相关的东西,因此打算写一个系列,把一些内核相关的东西梳理梳理。

首先声明,这个系列不是系统地介绍内核原理,主要是整理一些底层开发中涉及到的东西,相当于一个开发笔记汇总,想到什么写什么,也许同样做底层开发的朋友们看到后能产生共鸣。我争取把这个系列坚持记录下去,水平有限出错难免,还望路过的大牛们多加指点。

废话不说了,进入正题。

作为内核相关的文章,还是从系统结构讲起吧。Windows和Linux内核一样,基本结构分3层,自底向上分别是硬件设备(即HAL层,提供硬件抽象)、系统环境(提供系统服务)、应用环境(使用系统服务):

nhyy1_1.png

阅读全文>>

评论(0) 浏览(36369)

Powered by emlog