本系列虽然叫“网络安全自学篇”,但因为系统安全、软件安全与网络安全息息相关,做者一样会分享一些系统安全案例及基础工具用法,也是记录本身的成长史,但愿你们喜欢,一块儿进步。前文 “[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)” 分享了数字签名的原理知识,这篇文章将详细解析数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie、010Editor等工具进行数据提取和分析,这是全网很是新的一篇文章,但愿对您有所帮助~php
做者做为网络安全的小白,分享一些自学基础教程给你们,主要是关于安全工具和实践操做的在线笔记,但愿您们喜欢。同时,更但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力,点赞、评论、私聊都可,一块儿加油喔~html
PS:本文参考了安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献。git
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
基础工具:https://github.com/eastmountyxz/Security-Software-Basedgithub
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。web
前文学习:
[网络安全自学篇] 一.入门笔记之看雪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渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和经常使用渗透命令正则表达式
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包算法
PE文件数字签名可以有效保证文件未被非法篡改,安全软件经过验证文件是否有正规厂商的数字签名来下降误报。其基本流程以下图所示:shell
签名:数据库
验证:编程
PE文件数字签名所使用的工具包括:
咱们首先须要经过makecert.exe工具生成证书test.cer和私钥文件test.PVK,接着调用signcode.exe工具对目标PE文件(test.exe)进行数字签名。其中,经过makecert.exe生成须要的证书常见参数以下:
Error: Invalid algorithm Usage: MakeCert [ basic|extended options] [outputCertificateFile] Extended Options -sc <file> Subject's certificate file -sv <pvkFile> Subject's PVK file; To be created if not present -ic <file> Issuer's certificate file -ik <keyName> Issuer's key container name -iv <pvkFile> Issuer's PVK file -is <store> Issuer's certificate store name. -ir <location> Issuer's certificate store location <CurrentUser|LocalMachine>. Default to 'CurrentUser' -in <name> Issuer's certificate common name.(eg: Fred Dews) -a <algorithm> The signature algorithm <md5|sha1>. Default to 'md5' -ip <provider> Issuer's CryptoAPI provider's name -iy <type> Issuer's CryptoAPI provider's type -sp <provider> Subject's CryptoAPI provider's name -sy <type> Subject's CryptoAPI provider's type -iky <keytype> Issuer key type <signature|exchange|<integer>>. -sky <keytype> Subject key type <signature|exchange|<integer>>. -d <name> Display name for the subject -l <link> Link to the policy information (such as a URL) -cy <certType> Certificate types <end|authority|both> -b <mm/dd/yyyy> Start of the validity period; default to now. -m <number> The number of months for the cert validity period -e <mm/dd/yyyy> End of validity period; defaults to 2039 -h <number> Max height of the tree below this cert -r Create a self signed certificate -nscp Include netscape client auth extension -eku <oid[<,oid>]> Comma separated enhanced key usage OIDs -? Return a list of basic options -! Return a list of extended options
第一步,打开CMD调用makecert.exe并输入命令生成证书文件。
参数表示自签名、我的软件、受权者为YXZ、组织单位是WHU、国家及省份,散列算法采用md5,有效期是2020-03-16到2030-01-01。
makecert -r -$ "individual" /sv "test.PVK" -n "CN=YXZ,O=WHU,C=China,S=Hubei" -a md5 -b 03/16/2020 -e 01/01/2030 test.cer
须要注意设置密码如“123456”,成功以后,能够看到新增长的两个证书和私钥文件。
第二步,双击test.cer点击“安装证书”,并设置信任根证书机构。
信任以后,此时的证书是受信任且合法的,查看证书详细信息,可以看到签名算法md5RSA、散列算法md五、颁发者信息及有效期等,以下图所示。
第三步,利用signcode.exe工具进行数据签名。
选择须要加密的“test02.exe”文件。
选择咱们生成的数字证书“test.cer”和私钥文件“test.PVK”。
注意,这里的散列算法选择“SHA1”。这里的散列算法是PE文件的签名信息, 而以前makecert.exe设置的md5是证书的散列算法。
暂时不设置时间戳,最终成功为“test02.exe”进行数字签名。
第四步,打开test02.exe文件属性,能够看到它增长了一个“数字签名”的区域,而且可以看到此数字签名是正常的及详细信息。
第五步,咱们采用PEView打开已签名和未签名的PE文件对比,发现CERTIFICATE Table区域为前面信息。
注意:图中PPT均为做者制做,相关视频在网易云中查看。
PE文件数字签名信息存放在Certificate Table位置,同时PE文件可选文件头DataDirecotry第5项记录文件偏移及大小。下图为PE文件数字前面的PKCS#7格式。
参考文献:https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format
第一步,使用PEView查看签名的test02.exe文件,能够看到Certificate Table存储相关签名信息。
文件开始位置:00000A00(长度:488H)
对应的结构:
第二步,在PE文件可选文件头DataDirecotry第5项查看文件签名信息的偏移及大小。
此时的偏移地址是“00000A00”、大小为488H,而未前面的PE文件其值均为0。
第三步,wRevision表示证书的版本号,wCertificateType表示证书类型,其值为0x0002,表示包含PKCS#7的SignedData结构。接下来咱们对所提取的签名数据,就须要用该格式进行解析。
第一步,经过010Editor打开签名后的test02.exe文件。
第二步,这里推荐读者在010Editor中导入PE文件解析模板,更方便读者对PE文件的解析。
模板运行结果以下图所示,咱们能够查看各个区域的信息。后一篇文章将讲解PE文件的存储格式。
第三步,经过运行模板找到数字签名的偏移地址0A00h和大小488h。
第四步,定位到签名偏移地址00000A00,Certificate Table从第9个字节开始后为签名信息,将其复制另存为另外一个文件,如“test02.dat”。
此时咱们的签名信息成功导出,后续须要进行数据分析。
PKCS#7 微软官方文档
一个 PKCS#7 SignedData结构包括PE文件的哈希值,一个被软件出版厂商的私钥建立的签名,和将软件出版厂商的签名密钥和法人表明进行绑定的(系列)X.509 v3 证书。PKCS#7 1.5 版本规范定义了以下关于 SignedData 的 ASN.1(抽象语法符号)结构:
注意,导出的“test02.dat”签名数据为 ASN.1抽象结构,须要采用ASN1View或ASN1Dump进行解析,其效果以下图所示:
第一步,调用ASN1Dump打开“test02.dat”解析基础数据。
每一个字段有对应的flag,好比:
第二步,获取证书颁发者信息,包括md5withRSA签名、证书颁发者YXZ、组织WHU、国家及省份。
每块数据一般有一个标记变量,标记变量对应有相关值,好比颁发者标记2.5.4.3和颁发者YXZ、散列算法和散列值等。
第三步,其余相关信息。
核心数据包括:
注意,RSA签名后的数据和公钥值会还原出来第一个hash值,摘要数据和散列算法将计算第二个hash值。若是两个值一致,则表示该PE文件在传输过程当中未被篡改或破坏,且受信任;不然已经被破坏。
第一步,回顾咱们前面的签名信息和证书信息,以下图所示。PE文章签名信息的散列算法是SHA一、签名算法是RSA,签名证书的散列算法是MD5。
第二步,采用ASN1View打开“test02.dat”。
主要由三部分组成,左边是树形ASN1层次结构,右上部分是地址、数据和值,右下部分是对应的解析结构。接着回到最先的签名结构图,咱们分别对每部分数据进行分析。
第三步,分析Contentinfo部分数据。
该部分主要存储PE文件的hash值、以及标记变量、散列算法等。
好比sha1散列算法。
第四步,分析Certificates部分数据。
该部分主要存储证书相关信息,包括证书发布者、证书时间戳等信息。注意,该部份内容能够直接导出,再和“test02.exe”的数字证书进行对比。
好比省份“Hubei”。
接下来,咱们须要导出该部分的证书信息。下图的前4个字节为地址和大小,咱们从“30 82”开始复制。这里采用010Editor工具复制。
第五步,采用010Editor导出证书部分数据,并进行对比实验。
对比从010Editor导出的“output.cer”证书和“test02.exe”数字签名信息,发现是一致的(包括公钥),该实验也证实了签名数据的第二部分为证书信息。
第六部分,分析Signerinfos部分数据。
该部分主要存储签名使用者的信息、签名的hash、时间戳、UTC时间、摘要信息、签名算法等。
以下图所示,第三部分的长度为360,从“30 82”开始为第三部分的具体值。
重要的值包括:
这里我提出一个问题:恶意软件是否能隐藏合法证书并进行签名呢?PE签名文件是否能新增数据而不影响签名的效果呢?
Chrome浏览器中签名目录曾附加数据(配置数据或许可证信息),如GotoMyPc、PowerGrep、RegexBuddy等。那么咱们是否也能完成相关的实验呢?
参考文献:https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-signature/
当咱们修改PE文件的签名数据或新增错误数据时,该PE文件的签名信息会显示被破坏。如何有效的新增数据呢?下面开始咱们的实验。
第一步,用010Editor打开已签名的“test02.exe”文件,并导入PE模板。
第二步,修改PE文件数字签名的Certificate Table大小,咱们将488h修改成498h,至关于增长16h。
第三步,而且在数字签名的末尾增长16h内容
须要注意,增长的字节为8的倍数。
第四步,查看“test02.exe”属性,发现数字签名仍然存在且正常。
最终咱们成功的在数字签名后增长信息,而且没有破坏数字签名。若是咱们将恶意代码隐藏在该数字签名中,是否是其危害更大,若是能绕过杀毒软件并进行相关的hook或植入,是否是很是可怕呢?
文章写到这里,就介绍完毕,本文主要讲解PE文件数字签名,并对其进行详细解析,属于系统安全和PE逆向相关知识,但愿对您有所帮助。内容包括:
文章同时也加深了读者对相关PE解析工具的使用理解,包括:
后续将学习PE文件结构知识、图标修改、对话框分析、EXE解析、加壳解密等。但愿这系列文章对您有所帮助,同时真的感受本身技术好菜,要学的知识好多。这是第61篇原创的安全系列文章,从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,做为初学者,本身真是爬着前行,感谢不少人的帮助,继续爬着,继续加油!
欢迎你们讨论,是否以为这系列文章帮助到您!若是存在不足之处,还请海涵。任何建议均可以评论告知读者,共勉~
武汉加油!湖北加油!中国加油!!!
(By:Eastmount 2020-03-24 下午6点写于贵阳 http://blog.csdn.net/eastmount )
参考文献:
[1] 武大《软件安全》课程
[2] [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[3] http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx
[4] https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-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论坛