作者前文介绍了宏病毒相关知识,它仍然活跃于各个APT攻击样本中,具体内容包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。
文章目录:
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵! 接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
作者的github资源:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)
(1) PE文件 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。后续文章会详细分析PE文件格式。
(2) 为什么要对PE文件进行数字签名呢?
(3) 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) 数字签名常用算法及应用领域 数字签名常用算法包括:
其应用领域包括:
接着看看Github网站进行微软证书验证的过程。
在第23篇文章中,我们将详细复现微软证书CVE-2020-0601漏洞。
参考文章: 数字签名是什么?- 阮一峰 What is a Digital Signature? - 原始网站
写到这里,您可能还是很疑惑“什么是数字签名”?下面我通过阮一峰老师的博客进行讲解,个人认为这是一篇讲得比较清晰的原理文章,同时也包含了网络安全中加密解密、信息传输等知识。
数字签名是为了保证数据完整性。通过它可以判断数据是否被篡改,私钥加密完的数据所有知道公钥的都可以解密,这样不安全。私钥加密的作用是为了确认身份,用对应的公钥解密摘要,则证明摘要来自谁,起到签名的作用。
该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”区别。
下一篇文章将详细分析数字签名的结构。
文章写到这里,就介绍完毕,希望文章对您有所帮助。这篇文章主要讲解:
作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢小伙伴和师傅们的教导。从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、实验室小伙伴的教导,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
前文回顾(下面的超链接可以点击喔):
2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,谢谢。2021年继续加油!
参考文献: