location 定位软件fake_CVE-2020-23938:安博士杀毒软件TfFRegNt.SYS驱动 DOS漏洞分析
![](/assets/blank.gif)
作者: 维阵漏洞研究员 -- 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漏洞。
在进行代码分析前,我们首先需要对漏洞相关信息进行确认,下文将为大家分为四个步骤进行详解。
第一步,首先我们需要查看该驱动的服务属性:
![](/assets/blank.gif)
第二步,确认访问用户层对内核层驱动时需要的符号链接:
![](/assets/blank.gif)
第三步,查看安全属性:
![](/assets/blank.gif)
![](/assets/blank.gif)
如上图所示,我们发现必须通过管理员权限才能对该驱动进行读写。
第四步,我们还需要查看该驱动的设备属性:
![](/assets/blank.gif)
可以看出,该驱动运用的是BUFFERED_IO的缓冲读写方式,这意味着用户的输入会被拷贝到内核的内存空间中。
2. 代码分析
我们利用ida打开TfFRegNt.SYS,查找它处理IOCTL函数的地址,首先跟踪到处理分发函数的地方,如下图所示:
![](/assets/blank.gif)
然后在sub_4087B2中对函数类型进行判断:
![](/assets/blank.gif)
最终我们可以得到用户的IOCTL处理函数为sub_4095A0,代码如下:
![](/assets/blank.gif)
接下来经过前面的校验后,我们进入sub_4091FE函数:
![](/assets/blank.gif)
在该函数中,我们将会触发越界访问:
![](/assets/blank.gif)
可以看出,触发漏洞的IOCTL code为0x82000028,在处理该请求时,大家可以尝试将传入的systembuf[1]+8作为索引,来读取从用户层地址映射的内核地址数据,而此处的值是用户层可以控制的,因此通过精心构造的参数可以导致产生读取越界。如果越界读的地址并没有经过初始化,则会触发page_fault_in_nonpaged_area异常导致kernel bug check,最终导致系统crash蓝屏。
![](/assets/blank.gif)
3. 漏洞调试
当我们搭建好双机调试环境后,就可以开始试着调试下整个漏洞的触发过程,首先在0x95a0函数偏移下断点:
![](/assets/blank.gif)
接着运行poc程序,windbg中断,查看调用堆栈:
![](/assets/blank.gif)
由此我们可以确认这是由poc程序发起的io请求。
接下来该程序会对IRP进行解析,我们能得到current_stack_location的数据,之后进一步获取io的请求code,进行对比并执行对应的处理。该函数的第二个参数即为的当前的IRP指针:
![](/assets/blank.gif)
然后我们查看用户数据在内核内存上的映射,如下所示:
![](/assets/blank.gif)
![](/assets/blank.gif)
相应的内存属性也需要确认:
![](/assets/blank.gif)
此时该内存块的首地址和尾地址分别为0xc3600000、0xd3600000。
下面是我们对该内存地址数据的判断:
![](/assets/blank.gif)
运行时的数据如下:
![](/assets/blank.gif)
可以看到经过计算后访问的地址是0xd3600000,这是上个内存块的尾地址,但该地址尚未分配,所以会导致kernel bug check,最终导致内核崩溃。
![](/assets/blank.gif)
![](/assets/blank.gif)
漏洞修复建议
事实上,我们在访问内存之前,驱动对该处的参数就已经做过了检查,但是检查的并不是很严格:
![](/assets/blank.gif)
在第三处判断中应该判断前两个参数的和是否大于等于输入长度,如果是则返回0,代表参数不正确。前两个参数之和是字符串的最大索引长度,因为字符串的索引是从0开始的,所以必然要小于字符串长度。
location 定位软件fake_CVE-2020-23938:安博士杀毒软件TfFRegNt.SYS驱动 DOS漏洞分析相关推荐
- 优秀!303篇论文获2020年度“优秀博士学位论文”!
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:科奖中心 AI博士笔记系列推荐 周志华<机器学习> ...
- Core Location定位
Core Location主要应用了GPS, 蜂窝基站三角网以及Wi_Fi(WPS)三种技术. 使用GPS定位系统,可以精确地定位你当前所在的地理位置,但由于GPS接收机需要对准天空才能工作,因此在室 ...
- 模拟手机定位软件有哪些,推荐几款
常见的手机定位软件有谷歌地图.百度地图.高德地图等.推荐几款: 谷歌地图:功能齐全,导航功能强大 百度地图:智能推荐功能优秀,离线地图使用方便 高德地图:路况信息实时,路线规划精准
- 双差法(HYPODD)定位软件安装教程2
hypoDD 安装技巧 现给你提供一个双差法(HYPODD)定位软件,你下载解压安装后就可使用啦,里面还附有PDF说明文档. 进入HYPODD的目录,再进入次一级INCLUDE目录,里面有个叫HYPO ...
- 浙江大学计算机博士申请考核,考博经验|2020年浙江大学博士申请考核经验分享...
原标题:考博经验|2020年浙江大学博士申请考核经验分享 本文系"研海拾珠"公众号原创,获取更多考博资料考博经验请移步公众号平台. 作者 |Domin ,浙江大学博士 朝着目标坚定 ...
- 浙江大学计算机博士申请考核,考博经验 | 2020年浙江大学博士申请考核经验分享...
原标题:考博经验 | 2020年浙江大学博士申请考核经验分享 作者 | Domin ,浙江大学博士 朝着目标坚定不移 研海拾珠 自我上学起,我爸妈就告诉我好好学习考上大学,从那时我的心里就种下了&qu ...
- 通过Visual Studio诊断工具定位软件CPU瓶颈
通过VS诊断工具定位软件CPU瓶颈 前情提示:正常情况下我们使用调试模式会看不到诊断工具窗口,控制台会报"无法启动标准收集器.请尝试修复 Visual Studio 的安装. (HRESUL ...
- 开源一个基于微信小程序的蓝牙室内定位软件(附下载链接)
文章目录 1. 运行环境要求 2. 软件功能及程序说明 2.1 软件组成 2.2 主要功能 2.3 文件及函数功能说明 3. 软件设计及操作说明 4. 完整版代码获取 1. 运行环境要求 软件运行环境 ...
- 2018最新AdobeCC设计软件大全 绿色一键安装包
2018最新AdobeCC设计软件大全 绿色一键安装包 软件比较大,可查看资源,下载自己所需的设计软件,没有必要全部下载: 本套为绿色版本,无需安装,下载即可用: 百度网盘 链接: https://p ...
最新文章
- FDDWNET:模型参数仅为0.8M,速度和准确率综合性能在轻量级分割网络中达到SOTA
- 全球研发开支排名:亚马逊第一,BATJ排不上号!
- 舵机控制器STC8G1K
- 把自己的思想记录下来
- android刷机教程视频,Android 设备刷机教程
- 富文本编辑器-Ueditor
- Spring Boot 启动载入数据 CommandLineRunner
- [RabbitMQ]什么是MQ
- Spark入门(十一)之排序
- 793. 阶乘函数后K个零 golang
- leetcode题解104- 二叉树的最大深度
- MYSQL中group_concat有长度限制!默认1024(转载)
- python如何读取文本_python 如何读取windows-1252格式文本?
- 机房收费系统合作版(五)——初识托付
- Android多线程基础知识详解(傻瓜教程)
- mysql提高运行效率_提升Mysql执行效率的SQL优化技巧汇总
- websockets_Websockets在数据工程中鲜为人知的模式
- 自动换挡型数字频率计
- Coherence缓存学习
- w3school中文离线手册