IOCTLance:一款针对x64 WDM驱动程序的漏洞检测工具

关于IOCTLance

IOCTLance是一款针对x64 WDM驱动程序的漏洞检测工具,该工具来源于CODE BLUE 2023上展示的一个名为“使用符号执行和污点分析增强 WDM 驱动程序漏洞检测 ”的项目。该工具能够有效增强检测Windows驱动程序模型(WDM)驱动程序中各种漏洞的能力。

在对104个已知包含漏洞的WDM驱动程序和328个未知是否包含漏洞的WDM驱动程序进行全面的安全检测时,IOCTLance成功发现了26个不同驱动程序中的117个以前未发现的漏洞。扫描结果还报告了41 个CVE,其中包括25个拒绝服务漏洞、5个访问控制缺失漏洞和11个特权提升漏洞。

功能介绍

支持扫描得到目标漏洞类型

1、映射物理内存

2、可控进程句柄

3、缓冲区溢出

4、空指针引用

5、读/写可控地址

6、任意shellcode执行

7、任意wrmsr

8、任意输出

9、危险文件操作

可选自定义

1、长度限制

2、循环界限

3、总超时

4、IoControlCode 超时

5、递归

6、符号化数据部分

工具要求

angr==9.2.18

ipython==8.5.0

ipdb==0.13.9

工具下载&安装

由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/zeze-zeze/ioctlance.git

切换到项目目录中,根据需求选择安装方式即可:

cd ioctlance

源码构建

dpkg --add-architecture i386apt-get updateapt-get install git build-essential python3 python3-pip python3-dev htop vim sudo \openjdk-8-jdk zlib1g:i386 libtinfo5:i386 libstdc++6:i386 libgcc1:i386 \libc6:i386 libssl-dev nasm binutils-multiarch qtdeclarative5-dev libpixman-1-dev \libglib2.0-dev debian-archive-keyring debootstrap libtool libreadline-dev cmake \libffi-dev libxslt1-dev libxml2-devpip install angr==9.2.18 ipython==8.5.0 ipdb==0.13.9

Docker使用

docker build .

工具帮助信息

# python3 analysis/ioctlance.py -husage: ioctlance.py [-h] [-i IOCTLCODE] [-T TOTAL_TIMEOUT] [-t TIMEOUT] [-l LENGTH] [-b BOUND][-g GLOBAL_VAR] [-a ADDRESS] [-e EXCLUDE] [-o] [-r] [-c] [-d]pathpositional arguments:path                  包含待分析驱动程序的目录或文件路径optional arguments:-h, --help            显示帮助信息和退出-i IOCTLCODE, --ioctlcode IOCTLCODE分析指定的IoControlCode (例如:22201c)-T TOTAL_TIMEOUT, --total_timeout TOTAL_TIMEOUT符号执行的总超时 (默认为1200, 0为不限制)-t TIMEOUT, --timeout TIMEOUT分析每一个IoControlCode的超时 (默认为40, 0为不限制)-l LENGTH, --length LENGTH限制LengthLimiter的指令数量 (默认为0, 0为不限制)-b BOUND, --bound BOUNDLoopSeer边界 (默认为0, 0为不限制)-g GLOBAL_VAR, --global_var GLOBAL_VAR.data字段中的字节数据量 (默认为0 hex)-a ADDRESS, --address ADDRESSioctl句柄地址 (例如:140005c20)-e EXCLUDE, --exclude EXCLUDE要排除的函数地址,用逗号分隔 (例如:140005c20,140006c20)-o, --overwrite       如果x.sys已被分析则覆盖x.sys.json (默认为False)-r, --recursion        递归检测模式 (默认为False)-c, --complete         获取完整的基状态 (默认为False)-d, --debug           分析过程中输出调试信息 (默认为False)

执行安全评估

# python3 evaluation/statistics.py -husage: statistics.py [-h] [-w] pathpositional arguments:path        目标目录或文件路径optional arguments:-h, --help    显示帮助信息和退出-w, --wdm   将WDM驱动程序拷贝至<path>/wdm

许可证协议

本项目的开发与发布遵循GPL-3.0开源许可协议。

项目地址

IOCTLance:【GitHub传送门】

参考资料

https://codeblue.jp/2023/en/

https://drive.google.com/file/d/1lEegyJ1SBB_lDts6F3W3JPySucM3nugR/view?usp=sharing

GitHub - ucsb-seclab/popkorn-artifact

GitHub - eclypsium/Screwed-Drivers: "Screwed Drivers" centralized information source for code references, links, etc.

GitHub - koutto/ioctlbf: Windows Kernel Drivers fuzzer

LOLDrivers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis之List列表

目录 一.列表讲解 二.列表命令 三.内部编码 四.应用场景 Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 一.列表讲解 列表类型是用来存储多个有序的字符串&#xff0c;如下所示&#xff0c;a、b、c、d、e五个元素从左到右组成了一个有序的列表&#xff0c;列表中的…

标准IO中fopen函数返回的FILE*指针的存储位置

程序的内存分配&#xff1a; 一个由C/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其 操作方式类似于数据结构中的栈。 …

软链接跟硬链接有什么区别

‌软连接和‌硬连接是‌linux文件系统中的两种不同类型的链接&#xff0c;它们的主要区别在于&#xff1a; 本质不同&#xff1a;硬连接是同一文件的不同名称&#xff0c;而软连接则指向另一个文件或目录的路径。硬连接与原始文件共享相同的inode信息&#xff0c;因此它们指向同…

微软史诗级的蓝屏

本周经历了微软的蓝屏&#xff0c;一直到周末还在加班处理公司的问题。 个人终端受到的影响较大&#xff0c;服务器上也受到了影响。因为蓝屏的事情导致不少麻烦&#xff0c;据同事说因为蓝屏的问题&#xff0c;MGH 的手术安排也受到了影响。 目前我们也在着手处理有部署 Wind…

【Apollo学习笔记】—— Cyber RT之创建组件, test ok

0. 前置知识 这部分内容详见第三章:Component组件认知与实践https://apollo.baidu.com/community/article/1103 0.1 什么是 Component Apollo 的 Cyber RT 框架是基于组件(component)概念来构建的。每个组件都是 Cyber RT 框架的一个特定的算法模块, 处理一组输入并产生其…

Leetcode 3227. Vowels Game in a String

Leetcode 3227. Vowels Game in a String 1. 解题思路2. 代码实现 题目链接&#xff1a;3227. Vowels Game in a String 1. 解题思路 这一题稍微分析一下之后就会发现&#xff0c;这个游戏有且只有一种情况Bob才能够赢&#xff0c;即原始字符串当中不存在元音字母的情况&…

算法:优先级队列(堆)

目录 题目一&#xff1a;最后一块石头重量 题目二&#xff1a;数据流中的第 K 大元素 题目三&#xff1a;前 K 个高频单词 题目四&#xff1a;数据流的中位数 题目一&#xff1a;最后一块石头重量 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c…

基于SpringBoot+Vue的网吧管理系统(带1w+文档)

基于SpringBootVue的网吧管理系统(带1w文档) 基于SpringBootVue的网吧管理系统(带1w文档) 网吧管理系统&#xff0c;为了随时随地查看网吧管理信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理网吧的方式方法&#xff0c;更提供了其他想要了解网吧管理信息及…

Unity如何使摄像机视锥体外的物体不被剔除

在默认情况下&#xff0c;Unity在渲染场景时会剔除掉摄像机视椎体以外的所有物体&#xff0c;这就会导致某些特殊情况下&#xff0c;我们希望显示在场景中的物体反而被剔除了&#xff0c;比如用Shader制作顶点动画时&#xff0c;如果物体本身的位置在摄像机以外&#xff0c;而顶…

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…

SQL39道常见题型

SQL1 查询所有列 现在运营想要查看用户信息表中所有的数据&#xff0c;请你取出相应结果。 select * from user_profile 结果&#xff1a; SQL2 查询多列 还是上面那个输入&#xff0c;题目换成&#xff1a;现在运营同学想要用户的设备id对应的性别、年龄和学校的数据&#…

Springboot同时支持http和https访问

springboot默认是http的 一、支持https访问 需要生成证书&#xff0c;并配置到项目中。 1、证书 如果公司提供&#xff0c;则直接使用公司提供的证书&#xff1b; 如果公司没有提供&#xff0c;也可自己使用Java自带的命令keytool来生成&#xff1a; &#xff08;1&#x…

Flink History Server配置

目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket&#xff1a; nc -lk 9999 如图&#xff1a; 在bigdata111上执行如下命令运行flink应用程序 …

windows下玩转DockerDesktop--学习笔记

视频链接 Window下玩转Docker Desktop_哔哩哔哩_bilibili 安装ubuntu 安装wsl 网站 安装 WSL | Microsoft Learn winr 输入powershell&#xff0c;输入 wsl --install 通过修改Hosts解决国内Github经常抽风访问不到 网址 maxiaof/github-hosts: 通过修改Hosts解决国内G…

手动构建线性回归(PyTorch)

import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt import random #1.构建数据 #构建数据集 def create_dataset():x,y,coefmake_regression(n_samples100,n_features1,random_state0,noise10,coefTrue,bias14.5)#将构建数据转换为张…

录入学生信息

定义学生类Student&#xff0c;包含姓名&#xff0c;年龄&#xff0c;性别&#xff0c;分数四个属性&#xff0c;提供一个用于学员信息输出的方法info(self)。编写测试代码&#xff0c;使用循环录入5位学生的信息&#xff0c;由于录入的学生信息中间使用“#”进行分隔&#xff…

Spark学习之SparkSQL

SparkSQL 1、SparkSql初识案例 :WordCount spark sql处理数据的步骤1、读取数据源2、将读取到的DF注册成一个临时视图3、使用sparkSession的sql函数&#xff0c;编写sql语句操作临时视图&#xff0c;返回的依旧是一个DataFrame4、将结果写出到hdfs上 import org.apache.spark.…

C++基础语法:STL之容器(6)--序列容器中的forward_list

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 序列容器的学习.以<C Prime Plus> 6th Edition(以下称"本书")内容理解 本书中容器内容不多只有几页.最好是有数据结构方面的知识积累,如果没有在学的同时补上 上一篇C基础语法:链表和数据结…

Linux系统命令:监控 CPU 性能的工具mpstat详解

目录 一、概述 二、语法和使用 1、基本语法 2、常用选项 三、安装 mpstat 1、Debian&#xff08;如 Ubuntu&#xff09;的系统安装 2、CentOS 或 Fedora系统的安装 &#xff08;1&#xff09;安装指令 &#xff08;2&#xff09;安装操作 3、使用 四、示例 1. 查看…

【人工智能】Python实现文本转换为语音:使用gTTS库实现

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、准备工作三、使用gTTS实现文本转换为语音详细步骤 四、人工智能与TTS技术五、总结 一、引言 文本转换为语音&#xff08;Text-to-Speech&#xff0c;简称TTS&#xff09;技术是人工智能的重要组成部分&#xf…