系统中错误句柄引用所引发漏洞_第1页
系统中错误句柄引用所引发漏洞_第2页
系统中错误句柄引用所引发漏洞_第3页
系统中错误句柄引用所引发漏洞_第4页
系统中错误句柄引用所引发漏洞_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

windows系统中错误的句柄引用所引发的漏洞

目录背景知识隐患与漏洞漏洞的利用漏洞的防范2背景知识句柄与对象3对象实例对象实例对象管理器内核层对象句柄用户层背景知识DDK中的函数ObReferenceObjectByHandleObOpenObjectByPointer4背景知识ObReferenceObjectByHandle函数的原型NTSTATUSObReferenceObjectByHandle(

INHANDLEHandle,

INACCESS_MASKDesiredAccess,

INPOBJECT_TYPEObjectTypeOPTIONAL,

INKPROCESSOR_MODEAccessMode,

OUTPVOID*Object,

OUTPOBJECT_HANDLE_INFORMATION HandleInformationOPTIONAL

);5背景知识ObReferenceObjectByHandle用法 status=ObReferenceObjectByHandle(handle, GENERIC_ALL, NULL, KernelMode, &fileObject,

NULL); if(NT_SUCCESS(status)){ //与对象相关操作 … }6隐患与漏洞场景应用程序与内核的同步应用层创建事件对象核心层通过句柄获得对象完成事件同步7隐患与漏洞应用层代码 eventHandle=CreateEvent(NULL,TRUE,FALSE,NULL);

rc=DeviceIoControl(deviceHandle,

IOCTL_INIT_EVENT, &eventHandle, sizeof(eventHandle), NULL, 0, &returnSize);8隐患与漏洞核心层的代码status=ObReferenceObjectByHandle(*(PHANDLE)InputBuffer, GENERIC_ALL, NULL, KernelMode, (PVOID*)&eventObject, NULL);If(NT_SUCCESS(status)){

//与对象相关操作 KeClearEvent(eventObject);

….}9隐患与漏洞漏洞在哪里?ObReferenceObjectByHandle函数的参数检查

if((ObjectHeader->Type==ObjectType)||(ObjectType==NULL)){ …. if((SeComputeDeniedAccesses(GrantedAccess,DesiredAccess)||(AccessMode==KernelMode)){ … }}10隐患与漏洞漏洞在哪里?安全隐患ObjectType赋值为NULL时可返回任意类型的有效对象应用层传递的对象类型并不明确不能获得期待的对象11隐患与漏洞漏洞在哪里?KeClearEvent的实现

kd>uKeClearEventnt!KeClearEvent:804faf168bffmovedi,edi804faf1855pushebp804faf198becmovebp,esp804faf1b8b4508moveax,dwordptr[ebp+8]804faf1e83600400anddwordptr[eax+4],0804faf225dpopebp804faf23c20400ret412隐患与漏洞漏洞的形成ObReferenceObjectByHandle的错误使用与KeClearEvent函数的调用形成了安全漏洞对象的不正确操作造成对象体的破坏13隐患与漏洞漏洞的形成内核对象被破坏,从而形成漏洞14

对象体+0+4

被改写为0+8+c+10+14+18+1c+20隐患与漏洞漏洞的根源对函数缺乏理解人员的疏忽传入不合理的参数操作了不期待的对象15漏洞的利用漏洞的利用挑选一颗合适的子弹构造有利的利用环境让子弹安全的飞往目标从目标安全的返回16漏洞的利用利用场景中的漏洞使用_FILE_OBJECT作为子弹_KEVENT对象与_FILE_OBJECT对象的对比17漏洞的利用_KEVENTkd>dtnt!_kevent-r +0x000Header:_DISPATCHER_HEADER +0x000Type:UChar +0x001Absolute:UChar +0x002Size:UChar +0x003Inserted:UChar +0x004SignalState:Int4B +0x008WaitListHead:_LIST_ENTRY18漏洞的利用_FILE_OBJECTkd>dtnt!_file_object +0x000Type:Int2B +0x002Size:Int2B +0x004DeviceObject:Ptr32_DEVICE_OBJECT +0x008Vpb:Ptr32_VPB +0x00cFsContext:Ptr32Void +0x010FsContext2:Ptr32Void +0x014SectionObjectPointer:Ptr32 ……19漏洞的利用_FILE_OBJECT的影响典型的I/O处理流程20设备驱动程序I/O管理器I/O系统服务API用户模式API内核层应用层漏洞的利用_FILE_OBJECT的影响I/O管理器关联_FILE_OBJECT与设备对象IoGetRelatedDeviceObject函数21漏洞的利用_FILE_OBJECT的影响IoGetRelatedDeviceObject函数对于文件返回FileObject->Vpb->DeviceObject的设备栈顶层对象对于磁盘设备返回FileObject->DeviceObject->Vpb->DeviceObject的设备栈顶层对象对于其他类型返回FileObject->DeviceObject的设备栈顶层对象22漏洞的利用_FILE_OBJECT的影响破坏后_FILE_OBJECT所关联的设备对象为空形成了空指针引用的漏洞可导致运行任意ring0代码23漏洞的利用伪造设备对象24文件对象…设备对象…虚拟地址空间0-0x1000设备对象漏洞的利用_DEVICE_OBJECT的结构0:kd>dt_DEVICE_OBJECTnt!_DEVICE_OBJECT+0x000Type:Int2B+0x002Size:Uint2B+0x004ReferenceCount:Int4B+0x008DriverObject:Ptr32_DRIVER_OBJECT+0x00cNextDevice:Ptr32_DEVICE_OBJECT+0x010AttachedDevice:Ptr32_DEVICE_OBJECT+0x014CurrentIrp:Ptr32_IRP+0x018Timer:Ptr32_IO_TIMER……25漏洞的利用_DRIVER_OBJECT的结构0:kd>dt_driver_objectnt!_DRIVER_OBJECT+0x000Type:Int2B+0x002Size:Int2B+0x004DeviceObject:Ptr32_DEVICE_OBJECT……+0x028FastIoDispatch:Ptr32_FAST_IO_DISPATCH+0x02cDriverInit:Ptr32long+0x030DriverStartIo:Ptr32void+0x034DriverUnload:Ptr32void+0x038MajorFunction:[28]Ptr32long26漏洞的利用伪造驱动对象27伪造的设备对象…驱动对象的指针伪造的驱动对象…MajorFunction[IRP_MJ_CREATE]…漏洞的利用实现dispatch函数fastcall的调用方式函数的参数正确的处理irp在应用调用I/O处理函数避免复杂,一切从简CloseHandle与IRP_MJ_CLEANUP28漏洞的利用通过对设备进行I/O操作来获得控制权29内核设备I/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论