作者: 维阵漏洞研究员 -- lawhack

摘要 :

漏洞类型:内核内存越界读漏洞危害:BSOD

漏洞成因:

未能对传入的参数进行有效验证,对读取内存的边界值控制不严格,导致超过了原有内存的2字节进行越界读取。

挖掘方式:代码审计

漏洞编号:CVE-2020-23938

漏洞定位:

在安博士的Ahnlab V3 Lite(4.0.8.3)产品中,其中的文件过滤驱动服务为AntiStealth_V3LITE40F(4.11.0.1),对应的驱动文件名称为TfFRegNt.SYS。

漏洞触发函数:sub_4091FE

漏洞分析:

1. 漏洞相关概述

极光无限维阵专家团队在对安博士杀毒软件进行分析时,发现Ahnlab V3 Lite(4.0.8.3)产品的TfFRegNt.SYS驱动存在DOS漏洞。

在进行代码分析前,我们首先需要对漏洞相关信息进行确认,下文将为大家分为四个步骤进行详解。

第一步,首先我们需要查看该驱动的服务属性:

第二步,确认访问用户层对内核层驱动时需要的符号链接:

第三步,查看安全属性:

如上图所示,我们发现必须通过管理员权限才能对该驱动进行读写。

第四步,我们还需要查看该驱动的设备属性:

可以看出,该驱动运用的是BUFFERED_IO的缓冲读写方式,这意味着用户的输入会被拷贝到内核的内存空间中。

2. 代码分析

我们利用ida打开TfFRegNt.SYS,查找它处理IOCTL函数的地址,首先跟踪到处理分发函数的地方,如下图所示:

然后在sub_4087B2中对函数类型进行判断:

最终我们可以得到用户的IOCTL处理函数为sub_4095A0,代码如下:

接下来经过前面的校验后,我们进入sub_4091FE函数:

在该函数中,我们将会触发越界访问:

可以看出,触发漏洞的IOCTL code为0x82000028,在处理该请求时,大家可以尝试将传入的systembuf[1]+8作为索引,来读取从用户层地址映射的内核地址数据,而此处的值是用户层可以控制的,因此通过精心构造的参数可以导致产生读取越界。如果越界读的地址并没有经过初始化,则会触发page_fault_in_nonpaged_area异常导致kernel bug check,最终导致系统crash蓝屏。

3. 漏洞调试

当我们搭建好双机调试环境后,就可以开始试着调试下整个漏洞的触发过程,首先在0x95a0函数偏移下断点:

接着运行poc程序,windbg中断,查看调用堆栈:

由此我们可以确认这是由poc程序发起的io请求。

接下来该程序会对IRP进行解析,我们能得到current_stack_location的数据,之后进一步获取io的请求code,进行对比并执行对应的处理。该函数的第二个参数即为的当前的IRP指针:

然后我们查看用户数据在内核内存上的映射,如下所示:

相应的内存属性也需要确认:

此时该内存块的首地址和尾地址分别为0xc3600000、0xd3600000。

下面是我们对该内存地址数据的判断:

运行时的数据如下:

可以看到经过计算后访问的地址是0xd3600000,这是上个内存块的尾地址,但该地址尚未分配,所以会导致kernel bug check,最终导致内核崩溃。

漏洞修复建议

事实上,我们在访问内存之前,驱动对该处的参数就已经做过了检查,但是检查的并不是很严格:

在第三处判断中应该判断前两个参数的和是否大于等于输入长度,如果是则返回0,代表参数不正确。前两个参数之和是字符串的最大索引长度,因为字符串的索引是从0开始的,所以必然要小于字符串长度。

location 定位软件fake_CVE-2020-23938:安博士杀毒软件TfFRegNt.SYS驱动 DOS漏洞分析相关推荐

  1. 优秀!303篇论文获2020年度“优秀博士学位论文”!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:科奖中心 AI博士笔记系列推荐 周志华<机器学习> ...

  2. Core Location定位

    Core Location主要应用了GPS, 蜂窝基站三角网以及Wi_Fi(WPS)三种技术. 使用GPS定位系统,可以精确地定位你当前所在的地理位置,但由于GPS接收机需要对准天空才能工作,因此在室 ...

  3. 模拟手机定位软件有哪些,推荐几款

    常见的手机定位软件有谷歌地图.百度地图.高德地图等.推荐几款: 谷歌地图:功能齐全,导航功能强大 百度地图:智能推荐功能优秀,离线地图使用方便 高德地图:路况信息实时,路线规划精准

  4. 双差法(HYPODD)定位软件安装教程2

    hypoDD 安装技巧 现给你提供一个双差法(HYPODD)定位软件,你下载解压安装后就可使用啦,里面还附有PDF说明文档. 进入HYPODD的目录,再进入次一级INCLUDE目录,里面有个叫HYPO ...

  5. 浙江大学计算机博士申请考核,考博经验|2020年浙江大学博士申请考核经验分享...

    原标题:考博经验|2020年浙江大学博士申请考核经验分享 本文系"研海拾珠"公众号原创,获取更多考博资料考博经验请移步公众号平台. 作者 |Domin ,浙江大学博士 朝着目标坚定 ...

  6. 浙江大学计算机博士申请考核,考博经验 | 2020年浙江大学博士申请考核经验分享...

    原标题:考博经验 | 2020年浙江大学博士申请考核经验分享 作者 | Domin ,浙江大学博士 朝着目标坚定不移 研海拾珠 自我上学起,我爸妈就告诉我好好学习考上大学,从那时我的心里就种下了&qu ...

  7. 通过Visual Studio诊断工具定位软件CPU瓶颈

    通过VS诊断工具定位软件CPU瓶颈 前情提示:正常情况下我们使用调试模式会看不到诊断工具窗口,控制台会报"无法启动标准收集器.请尝试修复 Visual Studio 的安装. (HRESUL ...

  8. 开源一个基于微信小程序的蓝牙室内定位软件(附下载链接)

    文章目录 1. 运行环境要求 2. 软件功能及程序说明 2.1 软件组成 2.2 主要功能 2.3 文件及函数功能说明 3. 软件设计及操作说明 4. 完整版代码获取 1. 运行环境要求 软件运行环境 ...

  9. 2018最新AdobeCC设计软件大全 绿色一键安装包

    2018最新AdobeCC设计软件大全 绿色一键安装包 软件比较大,可查看资源,下载自己所需的设计软件,没有必要全部下载: 本套为绿色版本,无需安装,下载即可用: 百度网盘 链接: https://p ...

最新文章

  1. FDDWNET:模型参数仅为0.8M,速度和准确率综合性能在轻量级分割网络中达到SOTA
  2. 全球研发开支排名:亚马逊第一,BATJ排不上号!
  3. 舵机控制器STC8G1K
  4. 把自己的思想记录下来
  5. android刷机教程视频,Android 设备刷机教程
  6. 富文本编辑器-Ueditor
  7. Spring Boot 启动载入数据 CommandLineRunner
  8. [RabbitMQ]什么是MQ
  9. Spark入门(十一)之排序
  10. 793. 阶乘函数后K个零 golang
  11. leetcode题解104- 二叉树的最大深度
  12. MYSQL中group_concat有长度限制!默认1024(转载)
  13. python如何读取文本_python 如何读取windows-1252格式文本?
  14. 机房收费系统合作版(五)——初识托付
  15. Android多线程基础知识详解(傻瓜教程)
  16. mysql提高运行效率_提升Mysql执行效率的SQL优化技巧汇总
  17. websockets_Websockets在数据工程中鲜为人知的模式
  18. 自动换挡型数字频率计
  19. Coherence缓存学习
  20. w3school中文离线手册

热门文章

  1. 基于JAVA+SSH+MYSQL的社区医院远程挂号系统
  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的运动会管理系统
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的就业信息管理系统
  4. Bugfree安装与使用
  5. Asp.net Mvc使用PagedList分页
  6. iOS7,8 presentViewController 执行慢
  7. Fiddler使用教程(收藏)
  8. 存储过程 触发器 约束
  9. Session和Cookie的学习笔记2
  10. 控制項學習四(屬性與事件)