欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Authenticode署名在未署名代码中的利用详解

来源:本站整理 作者:佚名 时间:2017-09-01 TAG: 我要投稿

咱们都晓得,攻击者会将正当的数字署名证书利用于他们的歹意软件中,想来应当是为了回避署名校验。此中有个例子便是打单软件Petya。作为一个逆向工程师或许是红队开辟职员,懂得若何将正当署名利用于未署名、攻击者供给的代码中是很重要的。本文将先容代码署名机制,数字署名二进制格局,和在未署名的PE文件中利用数字证书的技巧。很快你就可以看到我下个月宣布的一些研讨与这些技巧无关。
0x01 配景
对PE文件(exe,dll,sys等)署名了意味着甚么?简略来讲便是假如关上PE文件的文件属性,有个标签页是“数字署名”,那末意味着它是署名过的。当你看到标签“数字署名”,意味着PE文件是Authenticode署名,在其文件外部有个二进制数据块,它包括了证书和文件哈希(分外阐明的是,在盘算Authenticode哈希时不考虑PE头)。Authenticode署名的存储格局能够在PE Authenticode尺度中找到。
 

有许多文件有署名,然则却不包括“数字署名”标签页(比方notepad.exe)。这能否意味着文件没有署名或许微软宣布了未署名的代码?固然不是。只管notepad没有内嵌的Authenticode署名,然则它有另一种署名(catalog署名)。Windows包括了一个由许多catalog文件构成的catalog存储,它基本上是个Authenticode哈希列表。每一个catalog文件都被署名,以注解任何婚配哈希的文件都来自catalog文件的署名者(大部分微软文件是如许的)。是以只管Explorer UI没有试图查找catalog署名,然则能够利用其余署名校验工具来查问catalog署名,如powershell中的Get-AuthenticodeSignature和Sysinternals中的Sigcheck工具。
留意:catalog文件位于%windir%\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}

在下面的截图中,SignatureType属性注解notepad.exe是catalog署名。还值得留意的是IsOSBinary属性。只管其完成是未文档化的,假如署名是已知的微软根证书,那末这将表现True。能够经由进程逆向CertVerifyCertificateChainPolicy函数来懂得此中外部道理。
利用“-i”选项挪用Sigcheck来验证catalog证书,它也会表现包括婚配到Authenticode哈希的catalog文件门路。“-h”选项也会盘算并表现PE文件的SHA1和SHA256 Authenticode哈希(PESHA1和PE256)。

晓得了Authenticode哈希,你就可以够检查catalog文件中的各类条款。你能够双击一个catalog文件以检查它的信息。我写了一个CatalogTools的PowerShell模块来剖析catalog文件。“hint”元数据字段注解了确切是notepad.exe的信息。


 
0x02 数字署名二进制格局
如今,你曾经懂得了PE文件的署名(Authenticode和catalog),懂得一些署名的二进制格局是有用的。Authenticode和catalog署名都以PKCS #7 signed data格局存储,它是ASN.1格局的二进制数据。ASN.1只是一个尺度,是用来注解分歧数据范例的二进制数据是若何存储的。在剖析数字署名以前,你必需起首晓得它在文件中是若何存储的。Catalog文件是间接包括了原始的PKCS #7数据。有个在线的ASN.1解码器能够剖析ASN.1数据,并直观的表现进去。比方,测验考试加载notepad.exe的catalog署名,你将直观的看到数据的结构。下面是剖析成果的片断:

ASN.1编码数据中的每一个属性都开端于一个工具ID(OID),这是一种表现数据范例的独一数字序列。下面片断中值得看的OID以下:
1. 1.2.840.113549.1.7.2:这注解了以下是PKCS #7署名数据,它是Authenticode和catalog署名的格局。
2. 1.3.6.1.4.1.311.12.1.1:这注解下面是catalog文件哈希数据
花光阴浏览数字署名中一切的字段是值得的。本文无奈包括一切的字段,但是别的的加密/署名相干的OID能在这里找到。
嵌入的PE Authenticode署名
内嵌在PE文件中Authenticode署名被追加到文件的末端(这是格局良好的PE文件)。很显著,操纵系统必要一些信息以便提掏出内嵌的署名偏移和巨细。利用CFF Explorer看检查下kernel32.dll:
 

内嵌的数字署名的偏移和巨细存储在可选头中的数据目次的平安目次中。数据目次包括了PE文件中各类结构的偏移和巨细,如导出表,导入表,重定位等。在数据目次中的一切的偏移都是绝对虚构地点(RVA),意味着它们是PE文件加载到内存中绝对基址的偏移。只有一个破例,那便是平安目次,其存储的偏移是文件偏移。缘故原由是Windows加载其不会将平安目次的内容加载到内存中。
平安目次中文件偏移指向的二进制数据是一个WIN_CERTIFICATE结构体。下面是这个结构在010Editor中的表现(文件偏移是0x000A9600):

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载