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

热点专题 浏览(972)

在分享这篇文章之前,我想简单谈谈我对学习网络安全和系统安全的感受。在过去的六个月里,作为一个网络安全的初学者,我写了近50篇安全文章,从网络渗透到CTF,从二进制分析到恶意代码检测,从CVE漏洞到木马病毒和论文,但我仍然觉得很特别,还没有进入安全圈。每当我想测试一个网站或复制一个漏洞,我就会身心俱疲,甚至想放弃。最初,一个非常小的问题会涉及许多知识点,需要一个一个地学习和克服,包括加密算法、IP段和端口、安全工具、Python脚本、Powershell、openssl命令、外联网、系统漏洞等。

唉,我写代码已经十年了。即使我得到一个很难挖掘数据的项目,我也能一点一点克服它,最终实现它。然而,安全性确实不同。也许一个漏洞已经涉及到另一个领域,当然它与自身的联系更少。然而,每当一个漏洞被复制或一个网站被占领,这种快乐就无法被其他程序所取代。我希望全世界都知道是我干的。因此,给安全初学者一些建议,多练习,不要气馁,多交流,多阅读安全网站和黑客老板的文章、教程和视频,多关注CVE漏洞和新消息。当你做不到的时候,我这个菜鸟也撞到了电脑另一边的墙上。同时,网络空间安全确实非常重要。只有通过不断的、真实的实践和总结,我才能成为一个优秀的白帽子。我会朝着这个方向努力,分享更多的安全文章。我希望你喜欢!让我们加油~

回到正题。我分享了病毒原理的简单知识,通过批量编码制作病毒,包括自动启动、密码修改、定时关机、蓝屏、进程关机等功能。本文将分享微软证书漏洞CVE-2020-0601,并解释椭圆曲线密码算法,视窗认证机制,并复制可执行文件签名证书的例子。我希望这篇基础文章对你有所帮助。我也希望每个人都能提高他们的安全意识并学习相关的预防措施。我也欢迎大家来讨论它。

作为网络安全的小白,作者分享了一些自学的基本教程,主要是关于安全工具和实际操作的在线笔记。我希望你喜欢它们。同时,我也参考了丹尼尔的许多文章和视频。详情参见参考资料。我希望你能和我一起工作并取得进步。稍后,您将了解更多关于网络安全和系统安全的知识,并分享相关实验。总之,我希望这一系列的文章能对博客有所帮助。写文章不容易。伟大的神不喜欢喷它们。谢谢!如果这篇文章对你有帮助,它将是我创作的最大动力。表扬、评论和私人聊天都是可以接受的。振作起来~

PS:本文是指安全网站上的文章和参考资料(详见参考资料),是结合我自己的经验和实践写的。还建议大家阅读参考资料。

下载地址:网络安全自学

文章目录1。漏洞背景2。脆弱性原则1。椭圆曲线加密算法2。Windows证书验证3。利用可执行文件签名1。证书视图2。环境建设3。漏洞恢复4。防御措施及总结

前期研究:

[网络安全自学]一、引言说明见斯诺网络安全学习及独家或解密示例

[网络安全自学]二。Chrome浏览器保留密码功能渗透分析和登录加密简介注释

[网络安全自学] iii。Burp套件工具安装配置、代理基本用法和暴露示例

[网络安全自学] 4。让我们用CTF实战

[的网络渗透和隐写术进行实验网络安全自学] 5。初步了解IDA专业反汇编工具和逆向工程解密实战

[网络安全自学] 6。OllyDbg动态分析工具和Crackeme Reverse

[网络安全自学的基本用法] 7。Chrome浏览器网络分析和Python爬虫讨论快速手视频下载

[网络安全自学] 8。网络漏洞和端口扫描的网络安全扫描和定向工具

[网络安全自学] 9。社会的基本概念

[网络安全自学[15]。Python攻防的多线程、C段扫描和数据库编程(2)

[网络安全自学] 16。Python攻击和防御的弱密码、自定义词典的生成和网站爆发的保护

[网络安全自学] 17。Python攻防的网络目录扫描器和ip代理池的构建(4)

[网络安全自学] XVIII。XSS跨站脚本攻击原理及代码攻防示范(1)

[网络安全自学]十九。Powershell的基本介绍和常用用法(1)

[网络安全自学] XX。Powershell的基本介绍和常用方法(2)

[网络安全自学版] 21。极客网络极客大赛和ShowTime

[网络安全自修安全攻防技术总结] 22。网站信息、域名信息、港口信息、敏感信息和指纹信息的网络渗透收集

[网络安全自学] 23。安全领域基于机器学习和机器学习的恶意请求识别

[网络安全自学] 24。基于机器学习的恶意代码识别和人工智能中的恶意代码检测

[网络安全自学] 25。网络安全学习路径与木马、病毒及防御初探

[网络安全自学] 26。详细说明搜索引擎和Python命令行调用

[网络安全自学] 27。Sqlmap的基本用法,CTF实战和请求参数设置(1)

[网络安全自学] 28。文件上传漏洞及财道介绍及防御原则(1)

[网络安全自学版] 29。文件上传漏洞和IIS6.0分析漏洞和防御原则(2)

[网络安全自学版] 30。文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防御(3)

[网络安全自学] 31。上传-实验室文件上传漏洞范围和CTF主题01-10(4)

[网络安全自学] 32。上传-实验室文件上传漏洞范围和CTF主题11-20(5)

[网络安全自学] 33。一句话原则的文件上传漏洞周围的狗和旁路安全狗(6)

[自学网络安全] 34。视窗系统中的五个转移漏洞启动计算机

[网络安全自学] 35。恶意代码攻击的可追踪性和恶意样本的分析

[网络安全自学] 36。WinRAR漏洞重现(CVE-2018-)和恶意软件自启动劫持

[网络安全自学] 37。黑盒子在线范围注册和介绍知识为网络渗透促进班

[自学网络安全]38。黑客入侵密封舱与九头蛇密码爆炸与蟒蛇加密后请求(2)

[网络安全自学] 39。黑客入侵黑客攻击扫描路径和Sqlmap高级注入用法(3)

[网络安全自学] 40。phpMyAdmin 4.8.1背景文件包含漏洞重现和详细解释(CVE-2018-)

[网络安全自学] 41。中间人攻击和ARP欺骗原理的细节和漏洞恢复

[网络安全自学] 42。域名系统欺骗和网络钓鱼网站的原理和漏洞修复的细节

[网络安全自学] 43。特洛伊木马原理详情,远程服务器IPC$漏洞和特洛伊木马植入实验

[网络安全自学文章] 44。Windows远程桌面服务漏洞的重现和详细说明(CVE-2019-0708)

[网络安全自学文章] 45。病毒详细说明和批量病毒生成(自启动、修改密码、定时关机、蓝屏、进程关机)

[渗透攻击与防御]一、从数据库原理学习网络攻击与防御,防止SQL注入

[渗透攻击与防御]二。SQL地图工具解释数据库和基本用法

[渗透攻击和防御]三。数据库和菜刀利器的差异备份

[渗透攻击和防御]四。MySQL数据库攻防详解和提琴手神器分析数据包

语句:我坚决反对用教学方法犯罪,一切犯罪行为都将受到严惩。绿色电网需要我们的共同维护,建议每个人都理解背后的原则,并更好地保护它们。

一、漏洞背景

1月15日,微软发布了CVE安全补丁-2020-0601。该漏洞是在Microsoft实施椭圆曲线加密(ECC)算法数字证书验证时生成的。

有趣的是,在微软宣布之后,美国国家安全局还发布了一份关于CVE-2020-0601漏洞的预警通知。根据通知,该漏洞首先由美国国家安全局独立发现,并报告给微软(微软在报告中感谢美国国家安全局)。这也被认为是美国国家安全局公开披露的第一个软件系统漏洞。当然,可能有特殊的战术目的。

此漏洞位于。验证椭圆曲线加密算法的证书。可能影响信任的一些示例包括:

HTTPS连接

文件签名

电子邮件签名

以用户模式启动的签名可执行文件

此外,此漏洞允许攻击者伪造代码签名证书来签名恶意的可执行文件,使文件看起来来自可信来源。例如,可以给勒索软件或其他间谍软件看似有效的证书,从而提示用户安装它们。中间人攻击和解密用户连接到受影响软件的机密信息也是主要攻击场景之一。

目前,支持使用带指定参数的椭圆曲线密钥的证书的微软视窗版本将受到影响,包括视窗10、视窗服务器2016/2019和视窗加密应用程序。以前版本的Windows 10(如Windows 7和Windows Server 2008 R2)不受该漏洞的影响。因为win7默认不添加微软的ECC根证书,而且crypt32.dll没有这个哈希值,所以不能直接比较和传递,所以它不受影响。

2。漏洞原则

本节主要参考以下两篇文章。再次感谢你,我强烈建议你阅读这两位老师的博客。花这么多时间介绍原理知识,一方面是完善自己的安全知识体系,另一方面是只有深刻理解原理才能做得更好。

[M01N]CVE-2020-0601 Windows CryptoAPI欺诈漏洞分析-绿色联盟科技教师

cve-2020-0601漏洞原理简介-阿鲁卡阿鲁卡教师

1。椭圆曲线加密算法

CVE-2020-0601植根于微软crypt32.dll加密库的椭圆曲线加密算法的实现。首先,让我们了解椭圆加密算法的基本原理。

基础知识

ECC私钥椭圆曲线=ECC公钥

漏洞原因

微软私钥微软选择的椭圆曲线=微软根证书中的公钥

黑客私钥黑客选择的椭圆曲线=微软根证书中的公钥

不同的椭圆曲线和不同的私钥,可以产生相同的公钥。Win10默认添加微软的椭圆曲线根证书。当进行证书验证时,它将始终验证微软根证书中的公钥哈希值。这个值直接写在crypt32.dll。在验证时,它不比较是否是同一个椭圆曲线,而只比较公钥值,这导致黑客使用他们的私钥签名,然后可以伪装成微软的签名。

椭圆曲线加密算法

要直观地理解椭圆曲线加密算法,可以看下图。下面是符合椭圆曲线的方程和图像。

y2=x3 AXB

y 2=x3a XB

y2=x3 AXB

椭圆曲线具有一些独特的属性,使其适合加密算法:

椭圆曲线关于x轴对称

任何非垂直线与曲线相交最多三点

曲线是光滑的。也就是说,曲线的所有点在椭圆曲线上的任意两点A和B上没有两条或更多不同的切线

如果A和B重合,它们将是A的切线。一条直线与椭圆曲线的另一个点C′相交,一条与Y轴相交的平行线在点C处与椭圆曲线相交,定义为AB=C。

如果A和B是同一点,用A做椭圆曲线的切线,用同样的方法得到相应的结果C=2A。

Next是与椭圆曲线加密相关的关键点。如果累积了多个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,很容易计算

椭圆曲线密码和RSA也是公钥加密技术。原始数据用公钥加密,用私钥解密。即使攻击者获得了密文和公钥,他也无法解密并获得明文(在合理的时间或成本下)。椭圆曲线密码通常用于数字签名。私钥用于加密生成的签名,公钥用于解密和验证签名。如果与原件相同,则签名验证成功。公钥加密是可靠的,因为它们在公钥加密领域使用单向函数原理。正向操作非常简单,而反向操作非常困难。从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版本中,使用椭圆曲线密码算法签名验证函数时,情况正是如此。原函数没有添加参数验证,计算中涉及的基点G的内容由验证后的证书随机指定,使得未授权证书能够构造私钥k=1的特殊解,成功通过椭圆加密算法的签名验证过程。

2。Windows证书验证

以SSL协议为例,解释Windows如何执行证书验证。例如,小明在一个电子商务网站上买了一本书,然后调用了SSL协议进行通信。下图总结了建立SSL协议的步骤。

基本步骤包括:

①打招呼:小明和电子商务相互介绍,小明和电子商务协商具体的加密算法以供后续步骤使用。在这个漏洞中,算法是椭圆曲线加密算法。(此步骤不使用密码工具)

②认证:电子商务向小明验证其身份,电子商务发送包含其公钥的证书。此证书由权威的第三方证书颁发机构(CA)颁发。小明使用认证中心的公开认证密钥来验证证书中主键的签名。(漏洞触发的地方)

③信息加密:小明生成一个随机密钥MS,用于生成K1和K2,对双方传输的信息进行对称加密。微软用小明的公钥加密,然后交给电子商务。电子商务提供商通过解密他们的私钥获得移动台。此时,双方都获得了加密通信的密钥

当一个视窗系统访问一个网站时,该网站将向视窗系统发送一个由第三方机构签署的网站证书。

Windows系统将验证证书是否由CA颁发。如果验证通过,视窗系统将成功建立与网站的顶级域名系统链接。

为了便于下一次更快的访问,Windows将把成功验证的证书放入内存中的证书缓存(Certificate Cache)。在下一次检查中,如果证书存在于缓存中,缓存中的值将被直接用于检查。这里使用CVE-2020-0601。

在成功缓存证书数据后,根据下面描述的视窗证书缓存机制,恶意网站可以伪造假网站(如github.com)证书,并通过视窗认证来伪装成合法网站。

当窗口收到新证书时,窗口遍历新收到的证书并将其与缓存证书的公钥进行比较,以找到匹配的值。

伪造的恶意证书与缓存的证书具有相同的公钥,但曲线项不在验证范围内,因此可以通过构造自定义曲线来伪造证书。以便证书验证过程仍然被建立,但是被验证的证书不再是先前被成功验证的安全证书。

写在这里,如果你感到困惑,没关系!我哭着晕倒了几次,并发出了求助帖。那么让我们看看实际操作~

3。利用可执行文件

1的签名缺陷。检查证书

首先,我给你看一下Windows证书。在操作过程中输入“certmgr.msc”,可以看到有5个根证书由默认的ECC签名,如下图所示。

我们随意导出一个根证书,并直接选择Base64编码的根证书进行导出。

可以看到导出的ECC密钥证书,如下图所示,包括证书有效期等信息。这是微软正在实施的椭圆曲线加密(ECC)算法的数字证书,它位于CryptoAPI.dll文件中,也是我们用来伪造可信来源的签名缺陷。

同样,我们可以通过Powershell查看默认的根证书(上面推荐使用)。

2。环境构建

Linux系统,Windows系统WSL软件(Linux的Windows子系统)

Ruby环境,Python环境

Github资源:main.rb,openssl_cs.conf,签名证书

可执行文件(用于签名

Linux软件的Windows子系统)安装在这里,因为作者在Windows环境中,但需要运行Linux命令。

第一步是打开应用程序商城并搜索“WSL”,您可以根据需要选择安装一个或多个Linux系统。

Step 2,安装后,你可以在最近添加的开始菜单中打开Ubuntu。第一次打开Ubuntu时,系统会提示您创建新的用户帐户和密码。这个用户帐户只是一个普通的非管理员用户,如果你想升级你的权限,你需要使用sudo命令。

我们可以测试环境是否已经成功构建,并且我们可以在Windows下运行Linux。

步骤3,我们复制文件进入。作者使用WSL主要是因为它还有另外一个优点:它可以访问系统的内容,并且可以灵活地复制和切换文件。

(1)您可以输入以下命令CD/mnt

(2)您可以输入以下命令explorer.exe。

(3)复制ca.cer文件

at:\ wsl $ \ Ubuntu \ Home \ YXZ

Step 4,使用openssl查看证书信息的内容,稍后我们将重复使用此命令。

OpenSSL是计算机网络上的一个开源软件库包。应用程序可以使用这个包进行安全通信,避免窃听,并在另一端确认连接器的身份。这个包被广泛用于互联网上的网络服务器。

3。漏洞恢复

接下来,我们将详细解释如何恢复伪装漏洞的可执行签名证书。

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

安装环境:sudo apt install ruby

view version:ruby-v

create file:touch Helloworld . ry

edit code:vim Helloworld . ry

run code:ruby hello world . ry

将主. rb文件和导出的微软椭圆曲线签名证书文件复制或上传到Linux系统或WSL。请注意,这里的椭圆曲线证书也可以使用我们上面导出的文件。

然后运行ruby代码。

Generate " spoofed _ ca . key "公钥文件

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

步骤3,基于此密钥生成一个新的x509证书,这将是我们自己的欺诈性证书颁发机构。

请注意,国家、地区和作者可以随意填写表格。此时,会生成一个“欺骗的ca.crt”公钥文件。

步骤4,生成一个新密钥。这把钥匙可以是你想要的任何类型。它将用于创建一个代码签名证书,我们将使用自己的证书颁发机构对其进行签名。

此时生成一个新的“cert.key”密钥文件。

步骤5,接下来创建一个新的证书签名请求(CSR)。该请求通常被发送到一个可信的CA,但是因为有一个欺骗的请求,我们可以自己签名。

注意,openssl_cs.conf文件需要被复制进来,此时将生成“cert.csr”文件。

步骤6,使用我们的欺诈性证书和证书密钥来签署新的企业社会责任。该证书将于2047年到期,而真正受信任的微软认证中心将于2043年到期。

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

步骤7,将证书的密钥和欺诈性的证书颁发机构打包到PKCS12文件中,以签署可执行文件。

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

步骤8:用PKCS12文件签署可执行文件。

请注意,可能需要安装osslsigncode,如下所示。

用PKCS12文件对可执行文件进行签名,最后生成“python_signed.exe”签名的可执行文件。

Step 9,右击属性“打开”,如下图所示,有更多的“数字签名”,您可以查看“详细信息”。

点击“查看证书”查看具体信息,如2047年到期,发行人为我们设置的“黑客”,签名信息设置,证书可靠。可执行文件的数字签名通过了验证,并成功欺骗了系统。

如果更新了补丁智虎,则无法验证可执行文件的数字签名。

IV。防御措施和总结“缓解措施”快速补丁采用是目前已知的更好的缓解措施。虽然没有任何公开攻击或案例,但建议每个人都及时安装安全更新。更新后,当系统检测到有人试图使用CVE-2020-0601进行攻击时,每次重新启动窗口日志后,都会在事件查看器中生成一个事件标识。

(1)从网络流量中提取证书并检查可疑属性;

除了安装补丁,企业还可以采取其他措施来保护端点,例如:

(1)从网络流量中提取证书并检查可疑属性;

(2)不使用窗口进行证书验证的代理设备通过执行TLS检查来传输流量;

(3)在企业内部部署私有根证书颁发机构,并控制特定计算机/服务器位置的第三方软件的部署和使用;

(4)符合条件的企业可以申请加入微软安全更新验证计划(SUVP)或微软主动保护计划(MAPP),提前从微软获得安全更新以进行相关测试和分析。

下一个作者会试图利用这个漏洞来重现HTTPS劫机案,并且真的花了很多精力,希望你喜欢。

我希望这一系列的文章对你有所帮助。我真的觉得我有很好的技能,有很多知识要学。这是第46个原创安全系列,从网络安全到系统安全,从特洛伊木马病毒到后门劫持,从恶意代码到可追溯性分析,从渗透工具到二进制工具,以及Python安全、顶级论文、黑客竞赛和漏洞共享。作为一个初学者,我真的向前爬行,感谢许多人的帮助,继续爬行和加油。

欢迎讨论,你认为这一系列的文章会对你有帮助吗?任何建议都可以被评论并告诉给读者,以相互鼓励。

武汉,加油!加油,湖北!来吧,中国!

(时间2020-02-16东部时间下午8点左右)

参考:

[1]

[2]

[3]

[4] 绿盟博客:欺骗漏洞分析/

[5] FreeBuf博客:

[6] 奇安信博客:

[7] 奇安信博客:

[8] Evi1cg’s博客:

[9] CE653A博客:

[10] 阿鲁卡博客:

[11]

[12] samsho2博客:

[13] 安全客分析:

[14] 自己的博客:

完整命令: