1
PE文件
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。
2
数字签名和数字证书
数字签名:
数字签名基于Microsoft公钥基础架构技术,该技术基于Microsoft Authenticode和可信认证机构(CA)基础架构。基于行业标准的Authenticode允许供应商或软件发行商使用CA颁发的代码签名数字证书对文件或文件集(如驱动程序包)进行签名。
Windows 使用有效的数字签名来验证以下各项:
①文件或文件集合已签名。
②签名者是受信任的。
③对签名者进行身份验证的证书颁发机构是受信任的。
④文件集合在发布之后未被更改。
数字证书:
数字证书将实体(如个人、组织或系统)绑定到特定的公钥和私钥对。可以将数字证书视为用于验证个人、系统或组织身份电子凭据。
各种类型的数字证书用于各种目的,例如:
①安全多用途 Internet 邮件扩展 (S/MIME) 电子邮件签名的数字证书。
②安全套接字层 (SSL) 和 Internet 协议安全性 (IPSec) 用于对网络连接进行身份验证的数字证书。
③用于登录到个人计算机的智能卡数字证书。
Windows代码签名技术使用X.509代码签名证书,这是互联网工程任务组(IETF)拥有的标准。代码签名证书允许软件发行商或分销商对软件进行数字签名。
证书包含在数字签名中,并验证签名的来源。证书所有者的公钥位于证书中,用于验证数字签名。这种做法避免了必须建立一个分发证书的中心设施。证书所有者的私钥单独保存,只有证书所有者知道。
软件发布者必须从证书颁发机构(CA)获得证书,该机构保证证书的完整性。通常,CA要求软件发布者提供唯一的标识信息。CA使用此信息在颁发证书之前验证请求者的身份。软件发行商还必须同意遵守CA设置的策略。如果他们未能遵守,CA可以吊销证书。
数字证书和数字签名两者的关系:
数字证书和数字签名都可以用来保障互联网的安全性,而两者的真实性也需要双方互相进行验证。数字签名需要数字证书中的公钥来验证;数字证书则需要第三方机构的数字签名来证明。
文件数字签名的作用:
以前经常会遇到这种情况,从网上下载并安装一个软件,结果发现会安装很多其他的软件或者驱动,结果发现电脑开始变的很慢,还有很多隐藏的进程执行(比如木马程序),这是由于安装软件被篡改了,被第三方加载了很多恶意软件或者木马程序。还有windows上经常遇到的DLL劫持问题等,都是因为文件被篡改后导致的。
文件的数字签名作用:
一.用来防止被篡改,能确保用户通过互联网下载时能确信此代码没有被非法篡改和来源可信,从而保护了代码的完整性、保护了用户不会被病毒、恶意代码和间谍软件所侵害。
二.一些杀毒软件也是通过检测程序中的证书来实现查杀判定的,这样可以使用数字签名来降低误报。
3
手工查看PE文件的签名信息
在文件的右击属性窗口中,如果包含数字签名属性页,就表示该PE文件已被签名,如下图所示:
选中签名信息,点击右下角详细信息即可查看文件签名的详细信息,可以看到签名者信息以及签名时间等信息。
高级选项中可以看到摘要算法、颁发者等更多详细信息。
点击常规中的详细信息还可以看到证书的有效期。
对于一个PE文件的安全性来说,可以通过对PE文件是否签名,签名的合法性和签名算法以及签名的有效期时间来进行校验。
4
PE文件数字签名在文件的结构
首先简单了解一下PE的文件结构,用PEView打开一个PE文件。
再往下就都是节数据了。
一般情况我们只需要检测可执行文件的签名信息,对于检测来说,第一步是检测是否为PE文件
可以使用PEview进行一个一个筛查,也可以用python进行第一步的批量筛选。
以使用lief进行判断为例:
判断出文件是否为PE文件,然后再判断签名信息。
PE文件数字签名信息存放在Certificate Table位置。
可以看到证书的存储信息。
PE文件签名信息偏移及大小存储在可选文件头DataDirecotry中。
5
如何批量检测文件和文件目录下的文件签名信息
微软为我们提供了相应的工具,官网下载地址为:https://learn.microsoft.com/zh-cn/sysinternals/downloads/sigcheck
Sigcheck 是一个命令行实用工具,它显示文件版本号、时间戳信息和数字签名详细信息,包括证书链。它还包括一个选项,用于检查 VirusTotal 上的文件状态、针对 40 多个防病毒引擎执行自动文件扫描的网站,以及上传文件以供扫描的选项。
用法:
sigcheck [-a][-h][-i][-e][-l][-n][[-s]|[-c|-ct]|[-m]][-q][-r][-u][-vt][-v[r]
sigcheck -d [-c|-ct]
usage: sigcheck -t[u][v] [-i] [-c|-ct]
用法:
参数说明
-a显示扩展版本信息。报告的 entropy 度量值是文件内容信息的字节数。
-accepteula无提示地接受 Sigcheck EULA (没有交互式提示)
-c带逗号分隔符的 CSV 输出
-ct带制表符分隔符的 CSV 输出
-d转储目录文件的内容
-e仅扫描可执行映像 (,而不考虑其扩展)
-f在指定的目录文件中查找签名
-h显示文件哈希
-i显示目录名称和签名链
-l遍历符号链接和目录交界点
-m转储清单
-n仅显示文件版本号
-o使用 -h 选项时,执行以前由 Sigcheck 捕获的 CSV 文件中捕获的哈希的病毒总数查找。此用法适用于脱机系统的扫描。
-nobanner不显示启动横幅和版权消息。
-r禁用证书吊销检查
-p根据指定的策略(由 GUID 表示)验证签名。
-s递归子目录
-t[u][v]为所有存储) 转储指定证书存储 (“*”的内容。
指定 -tu 以查询用户存储 (计算机存储是默认) 。
追加“-v”以让 Sigcheck 下载受信任的 Microsoft 根证书列表,并且仅输出未在该列表上为证书建立根的有效证书。如果无法访问站点,则改用当前目录中的 authrootstl.cab 或 authroot.stl(如果存在)。
-u如果启用了 VirusTotal 检查,则显示 VirusTotal 未知的文件或未检测,否则仅显示未签名的文件。
-v[rs]基于文件哈希的恶意软件查询 VirusTotal (www.virustotal.com) 。
添加“r”以打开包含非零检测的文件的报表。
如果指定了“s”选项,则报告为以前未扫描的文件将上传到 VirusTotal。请注意,扫描结果可能不可用 5 分钟或更多分钟。
-vt在使用 VirusTotal 功能之前,必须接受 VirusTotal 服务条款。请参阅:https://www.virustotal.com/en/about/terms-of-service/ 如果尚未接受条款并省略此选项,系统会以交互方式提示你。
对单个文件进行验证:
对安装目录以及递归目录下文件的验证:
6
总结
对一个软件进行文件签名安全检测时,如果只对其中重要的几个文件进行检测,可以使用右键属性,查看其签名信息,但一般的检测还是以安装包为主,对整个安装软件包进行检测,就要使用检测工具进行检测,检测项以签名者的合法性、签名摘要算法、签名有效期、以及是否需要签名几个点进行检测。
END
直达链接
往期精彩推荐
●隐私保护知多少
●横向联邦学习技术原理浅析
●Windows DLL劫持漏洞分析
●利用Firmadyne进行固件模拟
●构造溯源蜜罐——伪造MySQL服务端
●Cisco RV110W 堆栈缓冲区溢出漏洞分析
●IoT产品固件提取方式
●应用抓包进阶
●Zeoticus勒索病毒技术分析
●NAND Flash 固件读取及解包处理
●如何正确的校验URL
CSL
联想GIC全球安全实验室(中国)[email protected]
原文始发于微信公众号(联想全球安全实验室):PE文件签名信息检测
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论