[发明专利]一种基于设备驱动派遣函数hook的安全测试方法有效
| 申请号: | 202111512038.3 | 申请日: | 2021-12-07 |
| 公开(公告)号: | CN114386044B | 公开(公告)日: | 2023-01-31 |
| 发明(设计)人: | 黄钟;陈肖;李恺;巫忠跃;朱楚为;张洋 | 申请(专利权)人: | 中国电子科技集团公司第三十研究所 |
| 主分类号: | G06F21/57 | 分类号: | G06F21/57 |
| 代理公司: | 成都九鼎天元知识产权代理有限公司 51214 | 代理人: | 张杰 |
| 地址: | 610000 *** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 设备 驱动 派遣 函数 hook 安全 测试 方法 | ||
1.一种基于设备驱动派遣函数hook的安全测试方法,其特征在于,包括如下步骤:
S1、在内核模块中枚举当前主机所有通用接口设备的设备名、设备对象以及驱动对象,保存设备名与设备对象的关系列表,初始化_event事件和_semaphore信号量,初始化一个数据链表用于保存数据;
S2、在客户端模块中枚举当前主机上所有通用接口设备的设备名列表,在设备名列表中选择一个待测设备名,发送给内核模块;
S3、内核模块根据待测设备名检索对应的设备对象以及驱动对象,然后对驱动对象进行hook,替换驱动对象所有的派遣函数为自定义的hook函数;
S4、客户端模块从数据旁路测试、数据篡改测试、重放攻击测试和模糊测试中选择一种测试方法,向内核模块发送该次测试的测试指令和测试数据,初始化一个读线程,准备从内核模块中读取测试数据;
S5、内核模块收到测试指令后,使客户端模块读线程进入等待状态,等待主机与通用接口设备之间的通信,准备旁路通信数据;
S6、主机与通用接口设备开始通信之后,产生了一个IRP,即I/O请求数据包,hook函数从IRP中旁路通信数据,将通信数据保存在一个数据节点中,并设置该IRP的完成例程;
S7、hook函数根据客户端模块发送的测试指令及原始数据,构造不同的测试数据,执行后续的数据篡改测试、重放攻击测试或模糊测试;
S8、内核模块每捕获并处理一次主机与通用接口设备的通信数据都会将数据节点插入到数据链表中,通过改变_semaphore信号量状态使客户端模块读线程转入工作状态,在数据链表中读取该次测试的通信数据;
S9、客户端模块向内核模块发送测试停止指令,内核模块接收到测试停止指令后即重置_event事件和_semaphore信号量,并根据I/O请求数据包的状态取消或完成当前I/O请求数据包,清空数据链表,停止测试功能。
2.根据权利要求1所述的基于设备驱动派遣函数hook的安全测试方法,其特征在于,步骤S3中对驱动对象进行hook的处理过程包括:
S3-1、内核模块枚举该驱动对象下的所有设备对象;
S3-2、保存当前被测设备的设备对象和驱动对象的信息记录;
S3-3、循环调用InterlockedExchangePointer函数,将驱动对象中的派遣函数全部替换为自定义的hook函数,并保存原有的派遣函数和驱动对象。
3.根据权利要求1所述的基于设备驱动派遣函数hook的安全测试方法,其特征在于,步骤S6中旁路通信数据的执行流程如下:
S6-1、调用IoGetCurrentIrpStackLocation函数获取IRP的栈单元地址;
S6-2、根据IRP的数据缓冲区状态从中读取主机与通用接口设备之间的通信数据:
若Irp-MdlAddress字段不为空,则执行步骤S6-3;
若Irp-AssociatedIrp.SystemBuffer字段不为空,则执行步骤S6-4;
若Irp-UserBuffer字段不为空,则执行步骤S6-5;
S6-3、调用MnGetSystemAddressForMdlSafe函数得到被Mdl所描述的物理地址的内核虚拟地址,从该内核虚拟地址中获取交互数据;
S6-4、从Irp-AssociatedIrp.SystemBuffer地址中获取交互数据;
S6-5、从Irp-UserBuffer地址中获取交互数据;
S6-6、从IRP中获取当前的包括主功能码、次功能码和请求状态在内的字段数据;将获取的通信数据保存在一个数据节点中;
S6-7、调用IoSkipCurrentIrpStackLocation函数把当前IRP的栈单元地址设置为上一层的IRP栈;
S6-8、调用IoSetCompletionRoutine函数设置IRP的完成例程,从而在IRP完成时执行步骤S6-1至S6-6,获取返回的通信数据;
S6-9、调用IoSetNextIrpStackLocation函数把当前的IRP栈单元地址设置为下一层的IRP栈。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国电子科技集团公司第三十研究所,未经中国电子科技集团公司第三十研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111512038.3/1.html,转载请声明来源钻瓜专利网。





