隐藏在证书文件中的PowerShell(一)

栏目: 编程工具 · 发布时间: 6年前

内容简介:Windows系统中的证书文件有多种后缀格式,如.cer 和 .crt,通常,.cer 文件包含的是二进制数据,而 .crt 文件包含的则是一些ASCII数据。但随着多种微软应用程序的出现,这两种扩展名可以互换,应用程序仍然也能正确处理这两种互换过后缀扩展名的证书文件(他们会查看证书内容并进行相应的解析)。本文中我们还是遵守惯例,即用.cer 文件来包含二进制数据,而 .crt 文件来包含ASCII数据。.cer 文件中包含的认证数据是按照DER可辨别编码规则(Distinguished Encoding

隐藏在证书文件中的PowerShell(一) 最近,NVISO实验室分析人员开发了某种YARA规则,利用它发现了多种恶意证书文件(.crt),这些证书文件中包含的并不是真正的认证证书,而是一个恶意的PowerShell脚本。作为《隐藏在证书文件中的PowerShell》系列的第1部份,本文中我们一起来探讨如何制作这种YARA规则,去揭开攻击者的这种“潜伏“行为。

认证证书(Certificates)

Windows系统中的证书文件有多种后缀格式,如.cer 和 .crt,通常,.cer 文件包含的是二进制数据,而 .crt 文件包含的则是一些ASCII数据。但随着多种微软应用程序的出现,这两种扩展名可以互换,应用程序仍然也能正确处理这两种互换过后缀扩展名的证书文件(他们会查看证书内容并进行相应的解析)。

本文中我们还是遵守惯例,即用.cer 文件来包含二进制数据,而 .crt 文件来包含ASCII数据。.cer 文件中包含的认证数据是按照DER可辨别编码规则(Distinguished Encoding Rules)来编码的,这是x.690标准指定的编码格式。以Microsoft office程序为例,以下是其安装目录中的 .cer 文件示例:

隐藏在证书文件中的PowerShell(一) .crt 文件中包含的是ASCII数据,说白了,它也就是对 .cer文件的base64编码。根据 RFC 7468标准 来看,.crt 文件格式以“—BEGIN CERTIFICATE”为开头,以“—END CERTIFICATE”为结尾,中间则是一些经base64编码过的数据。使用 Certutil工具 ,可将 .cer文件转换生成 .crt文件,以下就是 .crt的一个示例:

隐藏在证书文件中的PowerShell(一) 对工具 Certutil 的利用

Certutil是一个 Windows下的多功能程序 ,可用来执行各种证书和服务操作。自从Casey Smith在Twitter上 发推演示了Certutil 的 base64解码编码 之后,一些红队人员和网络犯罪份子就开始利用这种编码技术来生成各种可绕过入侵检测和杀毒软件的恶意文件。

Certutil不会验证要编码的二进制数据,也就是说,它能对任意文件进行编码。一些Windows 下的可执行程序(PE文件)都能用Certutil工具来轻松完成编码,编码之后的格式,很多入侵检测和杀毒软件都无法识别。以下是Windows可执行程序编码成 .crt文件的示例:

隐藏在证书文件中的PowerShell(一) 从上图可以看到,这种base64编码数据的第一个字母是T。因为使用Certutil工具进行编码的PE文件通常都是这种类型的:也就是,PE文件的第一个字节是大写字母M,这里的M来自“MZ”,即MS-DOS的主要开发者 Mark Zbikowski 的缩写,用二进制来标记,也就是01001101。而base64编码是以6个比特块来编码的,所以 010011 就是第一个被编码的块,010011 用十进制表示就是19,而在base64编码中,0编码成A,1编码成B,以此类推…,19则被编码成T,如下所示:

隐藏在证书文件中的PowerShell(一)

这也就是为什么base64编码的PE文件总是以T开头的原因。有很多种检测规则:就比如,如果文件以“—BEGIN CERTIFICATE–”开头,之后是一个大写字母T,那么这种检测规则也能触发。

这就是一种“known-bad”式的检测规则,因为PE文件经Certutil工具编码后存在固定格式,所以,按照这种格式来针对性的查找就行。这种检测规则直接有效,我们利用它已经检测到很多编码过的PE文件。

检测规则制作

然而,在NVISO实验环境中,我们尝试做出比上述“已知恶意文件”(known-bad)更好的检测规则来,所以,这就是我们着力构建检测证书文件不包含真正证书的检测环境原因了,最终,我们的检测规则,不仅能检测出包含PE文件的证书文件,还能检测出其它不包含特定证书数据的恶意证书文件。

X.509格式证书是被广泛使用的数字证书标准,是用于标志通讯各方身份信息的一系列数据。常见的X.509格式证书包含 .cer 和 .crt类证书,它们都以二进制形式存放,不含私钥。

X.509标准证书数据都是以RFC 5280 定义的ASN.1语法来编码的,也就是以ASN.1序列开始的,这个序列标记号为 0×30,所以,这个开头的0×30数据也是经DER编码的二进制数据。

隐藏在证书文件中的PowerShell(一) 如我们前述的PE文件编码说明,可以确定其在ASCII字节环境下,它是以0×30开头的,而在base64编码过程中,它首先则是以大写字母M开头的。

所以,基于此种原因,根据 RFC 7468标准 ,任何X.509标准的有效证书文件编码后都是以“—BEGIN CERTIFICATE–”开头,之后紧跟大写字母M。

也就是说,那些包含“—BEGIN CERTIFICATE–”,但之后紧跟的字母不是M的证书文件,它们都不是有效的X.509标准证书文件。

最后,我们以此为方法创建了一条YARA规则,放到了 VirusTotal Intelligence跑了几个月:

rule certificate_payload
{
    strings:
        $re1 = /-----BEGIN CERTIFICATE-----\r\n[^M]/
    condition:
        $re1 at 0
}

发现目标

应用这条YARA规则,我们检测到很多伪装成证书文件的PE文件和一些有意思的其它文件,而且也没对有效证书发出误报。

其中我们检测到比较有意思的一个证书文件是,它的MD5 哈希值为 0082aed588f76b517946a824fba43994 ,大概样子如下:

隐藏在证书文件中的PowerShell(一) 一开始,在VirusTotal的60个杀毒软件检测引擎中,它的被检测率为0,也就是全部通过,但当我们用base64dump.py对它进行base64解码之后,看到了一些有意思的发现:

隐藏在证书文件中的PowerShell(一)

隐藏在证书文件中的PowerShell(一) 这个证书文件竟然包含了经过编码的PowerShell脚本程序,吓得我们….。这个脚本的检测需要几个步骤,在《隐藏在证书文件中的PowerShell》系列的第2部份,我们会继续讨论。


以上所述就是小编给大家介绍的《隐藏在证书文件中的PowerShell(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP Essentials

HTTP Essentials

Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99

The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具