[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)

本系列虽然叫“网络安全自学篇”,但因为系统安全、软件安全与网络安全息息相关,做者一样会分享一些系统安全案例及基础工具用法,也是记录本身的成长史,但愿你们喜欢,一块儿进步。前文讲解了i春秋YOU老师的小白渗透之路,并结合做者系列文章总结Web渗透技术点。本文将开启PE文件逆向解析相关内容,预计会连续分享六篇文章,第一篇告诉你们什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深刻分析数字签名的格式及PE病毒内容。本文章适合初学者学习,但愿对您有所帮助~php

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

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

软件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
基础工具:https://github.com/eastmountyxz/Security-Software-Basedgit


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

前文学习:
[网络安全自学篇] 一.入门笔记之看雪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)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制做(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客经常使用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结web


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



一.PE文件的数字签名

1.PE文件
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操做系统上的程序文件(多是间接被执行,如DLL)。后续文章会详细分析PE文件格式。算法


2.为何要对PE文件进行数字签名呢?shell

  • 防篡改:经过对数字签名的验证,保证文件未被非法篡改。
  • 下降误报:安全软件经过验证文件是否有正规厂商的数字签名来下降误报。

3.PE文件数字签名及验证过程
签名:数据库

  • 软件发布者使用散列算法(如MD5或SHA)计算PE文件的散列值。
  • 软件发布者使用私钥对散列值进行签名获得签名数据。
  • 将签名私钥对应的公钥和签名数据等以证书的形式附加在PE文件之中,造成通过数字签名的PE文件。
  • 软件发布者将通过数字签名的PE文件进行发布。

验证:

  • 从PE文件证书中提取软件发布者的公钥、使用的散列算法、签名算法、原始散列值的签名数据。
  • 使用提取的公钥和对应签名验证算法将签名数据还原为原始PE文件的原始散列值。
  • 对现有PE文件使用一样的散列算法计算出对应的散列值。
  • 对比两个散列值是否一致,从而判断数据是否被破坏和篡改。

在这里插入图片描述


4.PE文件数字签名的整体结构
PE文件数字签名信息存放在Certificate Table位置,同时PE文件可选文件头DataDirecotry第5项记录文件偏移及大小。

下一篇文章做者尝试详细讲解PE文件结构及签名解析。

在这里插入图片描述

使用PEView查看签名先后对比图,能够看到Certificate Table存储相关签名信息。

在这里插入图片描述


5.PE文件数字签名查看
这里以Zoomit.exe程序为例,咱们能够看到通过数字签名后的PE文件还会多出一个“数字签名”的属性,点击详细信息能够查看对应的证书。
在这里插入图片描述

对应的证书信息及证书路径以下图所示,包括签名算法、哈希算法、有效期、颁发者信息等。

在这里插入图片描述


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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述


7.数字签名经常使用算法及应用领域
数字签名经常使用算法包括:

  • RSA数字签名算法
    基于大整数分解问题,MD五、SHA
  • DSA数字签名算法
    基于离散对数问题
  • ECDSA椭圆曲线数字签名算法
    ECC+DSA,椭圆加密算法,属于DSA的一个变种,基于椭圆曲线上的离散对数问题

其应用领域包括:

  • PE文件数字签名
  • HTTPS数字签名
  • 电子邮件数字签名
  • Office文档数字签名
  • 代码数字签名

接着看看Github网站进行微软证书验证的过程。

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

在这里插入图片描述

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

在这里插入图片描述

推荐做者前文:
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及签名复现



二.阮一峰老师告诉你们什么是数字签名

参考文章:
数字签名是什么? - 阮一峰
What is a Digital Signature? - 原始网站

写到这里,您可能仍是很疑惑“什么是数字签名”?下面我经过阮一峰老师的博客进行讲解,我的认为这是一篇讲得比较清晰的原理文章,同时也包含了网络安全中加密解密、信息传输等知识。


(1) 假设鲍勃有两把钥匙,一把是公钥,另外一把是私钥。

在这里插入图片描述

(2) 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

在这里插入图片描述

(3) 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就能够达到保密的效果。

在这里插入图片描述

(4) 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即便落在别人手里,也没法解密。

在这里插入图片描述

(5) 鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

在这里插入图片描述

(6) 而后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

在这里插入图片描述

(7) 鲍勃将这个签名,附在信件下面,一块儿发给苏珊。

在这里插入图片描述

(8) 苏珊收信后,取下数字签名,用鲍勃的公钥解密,获得信件的摘要。由此证实,这封信确实是鲍勃发出的。

在这里插入图片描述

(9) 苏珊再对信件自己使用Hash函数,将获得的结果,与上一步获得的摘要进行对比。若是二者一致,就证实这封信未被修改过。

在这里插入图片描述

(10) 复杂的状况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用本身的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,可是还觉得这是鲍勃的公钥。所以,道格就能够冒充鲍勃,用本身的私钥作成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

在这里插入图片描述

(11) 后来,苏珊感受不对劲,发现本身没法肯定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥作认证。证书中心用本身的私钥,对鲍勃的公钥和一些相关信息一块儿加密,生成"数字证书"(Digital Certificate)。

在这里插入图片描述

(12) 鲍勃拿到数字证书之后,就能够放心了。之后再给苏珊写信,只要在签名的同时,再附上数字证书就好了。

在这里插入图片描述

(13) 苏珊收信后,用CA的公钥解开数字证书,就能够拿到鲍勃真实的公钥了,而后就能证实"数字签名"是否真的是鲍勃签的。

在这里插入图片描述

(14) 下面,咱们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。首先,客户端向服务器发出加密请求。

在这里插入图片描述

(15) 服务器用本身的私钥加密网页之后,连同自己的数字证书,一块儿发送给客户端。

在这里插入图片描述

(16) 客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表以内。

在这里插入图片描述

(17) 若是数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

在这里插入图片描述

(18) 若是这张数字证书不是由受信任的机构颁发的,浏览器会发出另外一种警告。若是数字证书是可靠的,客户端就可使用证书中的服务器公钥,对信息进行加密,而后与服务器交换加密信息。

在这里插入图片描述

在这里插入图片描述

数字签名是为了保证数据完整性。经过它能够判断数据是否被篡改,私钥加密完的数据全部知道公钥的均可以解密,这样不安全。私钥加密的做用是为了确认身份,用对应的公钥解密摘要,则证实摘要来自谁,起到签名的做用。



三.Signtool签名PE文件

软件安全:https://github.com/eastmountyxz/Software-Security-Course
基础工具:https://github.com/eastmountyxz/Security-Software-Based

在这里插入图片描述

该test.exe程序后续文章也会分享,均上传至Github。

在这里插入图片描述


第一步,经过makecert.exe生成须要的证书,生成两个文件分别是test.cer和test.PVK。

cd SignTool
makecert -$ "individual" -r /sv "test.PVK" /n "CN=Windows,E=microsoft,O=微软" test.cer

在这里插入图片描述

建立过程当中须要输入私钥密码,这里设置为“123456789”。

在这里插入图片描述


第二步,查看证书信息,若是未信任须要点击“安装证书”。

在这里插入图片描述

安装并信任该证书。

在这里插入图片描述


第三步,利用signcode.exe工具进行数据签名,选择须要签名的“test.exe”程序。

在这里插入图片描述


第四步,自动选择自定义选项,而后点击从文件中选择test.cer文件,test.cer文件在第一个步骤你生成的目录中,而后下一步。

在这里插入图片描述


第五步,点击浏览按钮,添加文件test.PVK,test.PVK文件也是在第一步生成的目录中,点击下一步,哈希算法能够选md5,也能够选sha1,点击下一步。

在这里插入图片描述


第六步,默认点击下一步,出现数据描述框,本身能够填写,也能够不填。点击下一步。

在这里插入图片描述


第七步,填写时间戳服务器URL:http://timestamp.wosign.com/timestamp,也能够不选添加时间戳,点击下一步,完成,弹出签名成功框。

在这里插入图片描述


第八步,此时test.exe文件完成数字签名,打开该exe文件属性,以下图所示,能够看到签名相关信息。注意,该数字签名正常且颁发者为Windows。

在这里插入图片描述

最后咱们使用PEView软件打开PE文件,能够看到签名前和签名后的结构存在“CERTIFICATE Table”区别。

在这里插入图片描述

下一篇文章咱们将详细分析数字签名的结构。

在这里插入图片描述



四.总结

文章写到这里,就介绍完毕,但愿文章对您有所帮助。这篇文章主要讲解:

  • PE文件数字签名
  • 分享阮一峰老师的博客,告诉你们什么是数字签名
  • 结合SignTool工具对EXE文件进行签名

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

欢迎你们讨论,是否以为这系列文章帮助到您!若是存在不足之处,还请海涵。任何建议均可以评论告知读者,共勉~

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

(By:Eastmount 2020-03-10 下午6点写于贵阳 http://blog.csdn.net/eastmount )



参考文献:
[1] 武大《软件安全》课程
[2] (强推) [网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[3] (强推) 数字签名是什么? - 阮一峰
[4] (强推) What is a Digital Signature? - 原始网站
[5] (强推) 对Windows 平台下PE文件数字签名的一些研究 - DoveFeng
[6] (强推) https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format
[7] (强推) 哈希 HASH·数字签名 - Phant
[8] (强推) 恶意文件分析系统中的数字签名验证 - 绿盟科技
[8] (强推) [翻译]Windows PE文件中的数字签名格式 - 看雪银雁冰大神
[9] PE文件数字签名工具 - ahuo
[10] PE文件解析-异常处理表与数字签名 - zhyulo
[11] Authenticode签名伪造——PE文件的签名伪造与签名验证劫持 - 嘶吼RoarTalk
[12] 数字签名 - CTF Wiki
[13] 数字签名算法介绍和区别 - infiniSign
[14] [求助]关于PE文件的数字签名 - 看雪论坛
[15] 区块链:数字签名是什么?- ChinaKingKong
[16] 校验文件数字签名的合法性(VerifyPE) - ahuo
[17] 数字签名 - shinymood
[18] 恶意文件分析系统中的数字签名验证 - 百度文库
[19] 如何判断一个文件是否已经有数字签名 - CSDN论坛