免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 利用 WDM 驱动 本地提权

利用 WDM 驱动 本地提权

时间:2011-11-29 12:10来源:未知 整理:寂涯网络 点击:

摘要
 
本文主要旨在讲述针对运行在Windows Vista,XP,2000和 2003上的 WDM 音频驱动
采取的攻击方式,成功利用后可实现本地提权。本文的读者对象主要针对帮助他人维护代码
安全和发掘漏洞的研究者和开发者。对于利用本文所提供的信息而从事非法活动的行为,笔
者概不负责。
前言
 
现在多数情况下,编写已经不大需要了,因为现在生产出来的设备均与 Microsoft
Windows 提供的厂商标准完全兼容。但如果确实需要自己动手编写驱动,微软也提供了
WDM开发包,以帮助程序员减轻工作的复杂度。特别是对于音频驱动和视频驱动, Windows
引入了内核流驱动模型(Kernel Streaming Architecture),它可帮助开发者更为简便地开发出
驱动程序。  

  

如图 1 所示,程序员在开发 WDM 音频驱动时就该选择将驱动绑定到音频端口类驱动
(portcls.sys)或者内核流(ks.sys)。多数情况下,PortCls.sys属于首选。
下面看下如何共同为这些驱动进行初始化:
1.  在驱动入口处绑定特定驱动,如PortDls.sys。

extern “C” NTSTATUS DriverEntry
(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
return PcInitializeAdapterDriver ( DriverObject,
RegistryPath,
XpAddDevice );
}

逆向PcInitializeAdapterDriver,反汇编代码如下:  

module: portcls.sys 
1.
2. mov ecx, [edi+18h]
3. push esi
4. mov esi, ds:__imp__KsSetMajorFunctionHandler@8 ;
KsSetMajorFunctionHandler(x,x)
5. mov [ecx+4], eax
6. push 0Eh ; MajorFunction
7. push edi ; DriverObject
8. mov dword ptr [edi+34h],
offset ?KsoNullDriverUnload@@YGXPAU_DRIVER_OBJECT@@@Z
; KsoNullDriverUnload(_DRIVER_OBJECT *)
9. mov dword ptr [edi+0A4h], offset ?
DispatchPnp@@YGJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z ; DispatchPnp(_DEVICE_OBJECT
*,_IRP
*)
10. mov dword ptr [edi+90h], offset ?  

DispatchPower@@YGJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z ;
DispatchPower(_DEVICE_OBJECT
*,_IRP *)
11. mov dword ptr [edi+94h], offset ?
PerfWmiDispatch@@YGJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z ;
PerfWmiDispatch(_DEVICE_OBJECT *,_IRP *)
12. mov dword ptr [edi+38h], offset ?
DispatchCreate@@YGJPAU_DEVICE_OBJECT@@PAU_IRP@@@Z ;
DispatchCreate(_DEVICE_OBJECT
*,_IRP *)
13. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)
14. push 3 ; MajorFunction
15. push edi ; DriverObject
16. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)

17. push 4 ; MajorFunction
18. push edi ; DriverObject
19. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)
20. push 9 ; MajorFunction
21. push edi ; DriverObject
22. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)
23. push 2 ; MajorFunction
24. push edi ; DriverObject
25. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)
26. push 14h ; MajorFunction
27. push edi ; DriverObject
28. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)
29. push 15h ; MajorFunction
30. push edi ; DriverObject
31. call esi ; KsSetMajorFunctionHandler(x,x) ; KsSetMajorFunctionHandler(x,x)  32. xor eax, eax
33. pop esi
34. jmp short loc_25F74

函数直接为以下IRP安装了处理函数:
● IRP_MJ_PNP     (9)
● IRP_MJ_POWER    (10)
● IRP_MJ_SYSTEM_CONTROL (11)
● IRP_MJ_CREATE    (12)
其余 7个处理函数皆通过KsSetMajorFunctionHandler 函数来安装。下面是 MSDN 对于
该函数的描述:KsSetMajorFunctionHandler 函数可为一特定主函数设置分发例程,它是通
过不透明对象头中的KSDISPATCH_TABLE 来实现的,该表指针是文件对象中FsContext 所指

本页地址 http://www.jybase.net/xitonganquan/20111129678.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com