当前位置: 首页 > news >正文

微软CrowdStrike驱动蓝屏以及内核签名

原因

当Windows操作系统遇到严重错误导致系统崩溃时,屏幕显示为蓝色,通常伴有错误代码和信息,这被称为“蓝屏死机”(Blue Screen of Death,简称BSOD)

https://www.thepaper.cn/newsDetail_forward_28126297 这次蓝屏事件影响非常广泛,主要原因是CrowdStrike 的内核驱动升级导致的,CrowdStrike是国外广泛使用的一个安全防护软件厂商,类似于国内的毒霸 360之类。

Microsoft says 8.5M systems hit by CrowdStrike BSOD, releases USB recovery tool When reboots don't work, bootable USB sticks may help ease fixes for some PCs.

微软为此发布了一个修复说明,核心意思是说,你用一个PE工具进入系统,然后把CrowdStrike 的内核驱动 C-00000291*.sys删掉,然后就可以了。

https://support.microsoft.com/en-us/topic/kb5042421-crowdstrike-issue-impacting-windows-endpoints-causing-an-0x50-or-0x7e-error-message-on-a-blue-screen-b1c700e0-7317-4e95-aeee-5d67dd35b92f

什么是sys文件

.sys格式的文件实际上是window 的内核驱动文件,做软件开发的工程师多少都会有些了解。内核驱动直接访问了操作系统的底层资源,如果这个文件有bug,系统很容易蓝屏,且无法恢复,因为重启的时候它又会自动加载。

先来看看.sys在widnows操作系统所处的层级,非常的low level

什么设备需要内核驱动

需要操作系统内核资源的任务或者设备,本质上都可以写一个内核驱动来调用内核资源。通常windows的外设,比如显卡、USB设备、自研PCIe设备、串口设备 都需要对应的内核驱动去实现与硬件的交互,尤其是pcie 设备,只有用内核驱动代码才能访问对应资源,从而驱动外设。

内核驱动安全策略

强制数字签名。

数字签名在Windows操作系统中扮演着重要角色,尤其是为了增强系统稳定性和安全性。数字签名是一种加密技术,用于验证软件的来源和完整性。在Windows环境下,数字签名用于确保驱动程序和其他软件来自可信赖的发布者,并且自发布以来未被篡改。

以下是数字签名在Windows系统中的几个关键作用:

  • 验证来源:数字签名可以确认软件是由已知和信任的开发人员或公司创建的,这有助于防止恶意软件和病毒的传播。
  • 确保完整性:签名过程使用公钥加密技术来创建一个唯一的数字指纹,如果软件在传输过程中或安装后被修改,数字签名将不再匹配,提示用户软件可能已被篡改。
  • 提升系统稳定性:Windows强制要求所有内核模式驱动程序都有数字签名,这是为了确保这些驱动程序遵循Microsoft的操作系统编程规范,从而减少由驱动程序引发的蓝屏事件。
  • 驱动程序认证:在Windows Vista及更高版本中,操作系统默认启用了驱动程序签名强制执行,即所有加载到内核的驱动程序必须带有有效的数字签名。这有助于防止不兼容或恶意的驱动程序加载,从而减少系统崩溃的风险。

数字签名

Windows设备安装利用数字签名来验证驱动程序包的完整性和确认提供驱动程序包的供应商(软件发布者)的身份。此外,64位版本的Windows Vista及其后续Windows版本的内核模式代码签名策略规定,内核模式驱动程序必须经过签名才能加载。

Windows 10桌面版(家庭版、专业版、企业版和教育版)以及Windows Server 2016的内核模式驱动程序必须由Windows硬件开发者中心Windows Hardware Quality Labs (WHQL)进行签名,这要求具备扩展验证(EV)证书。详情请参阅驱动程序签名策略。

所有为Windows 10(从版本1507,Threshold 1开始)由硬件开发者中心签名的驱动程序都是使用SHA2算法签名的。有关特定操作系统版本的详细签名要求,请参阅按版本划分的签名要求。

在WIN10之前,用户的内核驱动只要有EV证书签名就可以被操作系统认可,但是实际上这个策略非常不安全,因为EV证书签名很容易获取,即使不是出于非法目的,随意的内核驱动EV签名也可能频繁导致系统BSOD故障或者卡死,因为驱动开发人员不能保证它的测试项覆盖了所有必要的情况。

如何或得签名

https://learn.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-started-dashboard-submissions

  • 首先你得有一个EV证书,这个需要到第三方授权机构 购买,你没办法自己凭空生成一个被认可的证书,对你的内核驱动进行签名。
  • 到微软 注册账号
  • 需要为驱动代码进行测试,微软有一套通用测试列表,在win10之前 叫HCK https://learn.microsoft.com/en-us/windows/win32/w8cookbook/windows-hardware-certification-kit ,win10之后叫HLK https://learn.microsoft.com/en-us/windows-hardware/test/hlk/
  • 通过测试后,打包上传 等待微软签名

我们看一下经过认证的驱动签名是什么样子的。

后续会记录如何为驱动进行测试和签名。

为什么CrowdStrike 做了认证还会死机

这大概率是CrowdStrike 钻了微软的空子,因为数字签名的测试步骤非常繁琐,做1个测试至少要1天的时间,并且微软签名并不检查当前驱动打包文件的日期,只要你曾经做过一次成功的测试,保留了日志文件,那么理论上你可以跳过测试让微软签名。

这大概率会导致出现问题。当前市面上有些中介机构,号称可以做WHQL认证,实际上也是这个策略,它根本不会给你做测试,只是偷偷把你的驱动打包到已经做了测试的文件中,然后签名,没有任何成本。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 谷粒商城实战笔记-45-商品服务-API-三级分类-查询-递归树形结构数据获取
  • Lua 语法学习笔记
  • 【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决
  • 压缩包方式windows安装mysql
  • ORBSLAM3 ORB_SLAM3 Ubuntu20.04 ROS Noetic 虚拟机镜像 下载
  • 【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)
  • CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解
  • 如何查看jvm资源占用情况
  • JavaScript(11)——对象
  • SSD基本架构与工作原理
  • MongoDB教程(十一):MongoDB关系管理与文档关联
  • 加密传输及相关安全验证:
  • bash 笔记
  • Web开发:xmlns解析
  • SpringBoot:SpringBoot通过注解监测Controller接口
  • Android开源项目规范总结
  • Create React App 使用
  • ES6 学习笔记(一)let,const和解构赋值
  • JavaScript-Array类型
  • Js基础——数据类型之Null和Undefined
  • Puppeteer:浏览器控制器
  • Python_网络编程
  • 创建一个Struts2项目maven 方式
  • 订阅Forge Viewer所有的事件
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 记一次用 NodeJs 实现模拟登录的思路
  • 开源地图数据可视化库——mapnik
  • 如何选择开源的机器学习框架?
  • 使用common-codec进行md5加密
  • 线上 python http server profile 实践
  • 限制Java线程池运行线程以及等待线程数量的策略
  • FaaS 的简单实践
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​学习一下,什么是预包装食品?​
  • # 计算机视觉入门
  • #include到底该写在哪
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)bark-ml
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (三分钟)速览传统边缘检测算子
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (已解决)什么是vue导航守卫
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)母版页和相对路径
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .form文件_SSM框架文件上传篇
  • .gitignore文件设置了忽略但不生效
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core中的时区转换问题
  • .net 获取某一天 在当月是 第几周 函数
  • .NET/C# 使窗口永不获得焦点
  • .net连接oracle数据库
  • .stream().map与.stream().flatMap的使用