一些以前的笔记,最近正巧有网友询问,于是整理了下,如果是从事恶意文件分析与威胁狩猎方向还是比较重要的。
背景
恶意软件(Malware)是一种攻击计算机系统的恶意程序,旨在窃取、破坏或篡改数据,或对系统造成其他伤害。这些软件的不断增长和演变,给计算机安全带来了很大的挑战。特征提取是一种在恶意软件分析中常用的技术,可以帮助分析人员有效地识别、分类和分析恶意软件,以便采取相应的措施保护计算机系统。
特征提取是指从恶意软件样本中提取有用的信息,以便进行分析和分类。这些特征可以是静态的,如文件大小、文件类型、文件结构等;也可以是动态的,如恶意软件执行期间所使用的系统资源、系统调用、注册表项等。静态特征可以从文件头、文件尾、导入和导出表、节区头、节尾等位置提取;动态特征则需要在恶意软件运行时监控系统的行为,并记录相应的数据。
公开的实践与研究
在过去的几年中,许多恶意软件样本的特征提取方法已经得到了广泛的研究和实践。以下是一些公开报告中引用的一些特征提取技术:
1. 机器学习模型:机器学习模型是一种广泛应用于恶意软件分类和识别的特征提取技术。该方法通过训练一个分类器来识别已知的恶意软件和良性软件之间的差异。分类器可以使用多种算法,如支持向量机(SVM)、随机森林(Random Forest)、朴素贝叶斯(Naive Bayes)等。训练数据通常包括静态和动态特征,如文件大小、文件类型、文件结构、API调用等。一旦分类器被训练好了,它可以用来分类新的恶意软件样本。
2. 静态特征分析:静态特征分析是一种在不运行恶意软件的情况下提取特征的技术。这种技术可以分析文件头、导入表、导出表、节区头等信息,并使用这些信息来生成恶意软件样本的特征向量。这些特征向量可以用来训练机器学习模型,或者用来比较不同恶意软件之间的相似性。
3. 动态特征分析:动态特征分析是一种在恶意软件运行时提取特征的技术。这种技术可以监控系统调用、文件系统访问、注册表操作等系统行为,并记录这些信息。通过分析这些信息,可以得出恶意软件的行为模式,并提取相应的特征向量。这些特征向量可以用于训练机器学习模型,或者用于检测恶意软件。
4. 数据流分析:数据流分析是一种在程序运行时动态跟踪数据流的技术。该技术可以记录数据在程序中的流向,并分析这些数据的内容和用途。通过数据流分析,可以提取恶意软件的行为模式,并生成相应的特征向量。这些特征向量可以用于训练机器学习模型,或者用于检测恶意软件。
5. 指令序列分析:指令序列分析是一种在程序运行时跟踪指令序列的技术。该技术可以记录程序执行时的指令序列,并分析这些指令的内容和用途。通过指令序列分析,可以提取恶意软件的行为模式,并生成相应的特征向量。这些特征向量可以用于训练机器学习模型,或者用于检测恶意软件。
6. 字符串分析:字符串分析是一种在程序代码中提取字符串的技术。该技术可以识别程序中使用的字符串,并分析这些字符串的内容和用途。通过字符串分析,可以提取恶意软件的行为模式,并生成相应的特征向量。这些特征向量可以用于训练机器学习模型,或者用于检测恶意软件。
常用的特征
特征提取是恶意软件分析的重要部分,其中一些常见的特征规则包括:
ImpHash:ImpHash(Import Hash)是一个用于恶意软件识别的特征,它通过对PE文件导入表中DLL函数的哈希值进行计算,从而生成一个哈希字符串。ImpHash可以用于识别不同变种的恶意软件,并且与样本的MD5或SHA1值相比,ImpHash更不容易被修改或伪造。
Ssdeep:Ssdeep是一种基于内容的恶意软件特征提取技术,它通过对恶意代码的内容进行哈希计算来生成一个特征码。Ssdeep可以识别在代码中插入了空格、换行符或其他格式变化的恶意软件,从而提高了检测的准确性。
TLSH:TLSH(Trend Micro Locality Sensitive Hash)是一种基于局部敏感哈希算法的恶意软件特征提取技术。它能够将文件转换成一个字符串,并根据文件内容计算出一个哈希值。相似的文件通常具有相似的哈希值,因此可以使用TLSH来查找具有相似特征的恶意软件。
Telfhash:Telfhash是一种基于指令序列的恶意软件特征提取技术,它通过对恶意代码的指令序列进行哈希计算来生成一个特征码。Telfhash可以用于识别具有相似指令序列的恶意软件变种,从而帮助安全人员快速发现新的恶意软件。
Vhash:Vhash是由VirusTotal提供的,它不是开源的。对于使用Vhash,用户需要使用VirusTotal的服务,其中一些功能是免费的,但其他功能可能需要用户购买订阅才能访问。
Yara规则:Yara规则是一种用于检测恶意软件的强大工具,它可以通过匹配恶意软件的特定特征来识别潜在的恶意软件。它允许用户创建自定义规则来检测恶意软件。Yara规则通常由一系列字符串、通配符、正则表达式和逻辑运算符组成,用于描述恶意软件的特征。这些规则可以用于识别已知的恶意软件家族或者检测新的恶意软件变种。
Yara规则这块,可以考虑提取特定的加解密算法实现代码片段或特殊的代码逻辑片段,或者是特殊的字符串(非通用的字符串),应用平台: https://analyze.intezer.com/
以下是一些常见的恶意样本特征提取方式:
1. 字符串提取:恶意软件通常会包含一些特定的字符串,例如命令和控制服务器(C2)的URL,用户名和密码等。这些字符串可以在Yara规则中使用,以帮助识别类似的恶意软件样本。
2. 导出函数提取:恶意软件通常会包含一些特定的导出函数,例如用于操纵系统,绕过安全措施或执行远程命令的函数。这些导出函数可以在Yara规则中使用,以帮助识别包含这些函数的恶意软件样本。
3. 文件头和元数据提取:恶意软件的文件头和元数据(例如编译时间戳和PE文件头信息)可以用于帮助确定恶意软件样本的来源和类型。这些信息可以在Yara规则中使用,以帮助识别类似的恶意软件样本。
4. 指令序列提取:指令序列是指在二进制代码中执行的一组指令。恶意软件的指令序列通常会包含一些特定的指令或操作码,例如用于创建或执行进程的指令。这些指令可以在Yara规则中使用,以帮助识别包含这些指令的恶意软件样本。
5. 加密和编码算法提取:恶意软件通常会使用加密或编码算法来隐藏其真实目的和行为。识别这些算法可以帮助检测类似的恶意软件样本。在Yara规则中使用这些算法的签名可以帮助检测这些恶意软件样本。
除了上述提到的恶意样本特征提取方法,还有以下一些常见的特征提取方法:
1. 密码哈希提取:恶意软件通常会尝试窃取用户的密码和凭证。密码哈希是一种将密码转换为固定长度的字节序列的算法,这些哈希值可以用于比较密码是否匹配。恶意软件通常会在其代码中包含一些哈希函数,用于对窃取的密码进行哈希。在Yara规则中使用这些哈希函数的签名可以帮助检测包含这些函数的恶意软件样本。
2. API调用提取:恶意软件通常会调用一些特定的API函数,例如用于操纵系统,执行远程命令或绕过安全措施的函数。这些API调用可以在Yara规则中使用,以帮助识别包含这些API调用的恶意软件样本。
3. 配置文件提取:恶意软件通常会使用配置文件来存储其行为和设置。这些配置文件可能包含用于控制恶意软件行为的指令,例如C2服务器的URL和加密密钥。在Yara规则中使用这些指令的签名可以帮助检测包含这些指令的恶意软件样本。
4. PE资源提取:PE资源是指Windows可执行文件中包含的各种资源,例如图标,位图,字符串等。恶意软件通常会包含一些特定的PE资源,例如用于欺骗用户和隐藏恶意行为的图标和字符串。在Yara规则中使用这些PE资源的签名可以帮助检测包含这些资源的恶意软件样本。
这些特征提取方法都可以帮助识别恶意软件样本,并且可以根据不同类型的恶意软件选择合适的特征提取方式。
还有一些比较冷门的特征提取方法,可能并不适用于所有恶意软件样本,但在某些情况下可以提供有用的信息:
1. 模块依赖提取:恶意软件可能会依赖于某些DLL或其他系统库,以执行其功能。这些依赖项可以通过检查PE文件的导入表来获取。在Yara规则中使用这些导入表的签名可以帮助识别恶意软件样本。
2. 突变代码提取:恶意软件可能会使用代码突变技术来使其代码难以被静态分析和检测。这些突变代码可能包括使用伪随机数生成器生成的随机值,以及使用反射和动态代码加载技术来隐藏其行为。在Yara规则中使用这些突变代码的签名可以帮助检测包含这些代码的恶意软件样本。
3. 垃圾代码提取:恶意软件可能会包含大量无用的、冗余的或混淆的代码,以混淆其真实行为和目的。这些垃圾代码可以通过静态分析恶意软件的二进制代码来获取。在Yara规则中使用这些垃圾代码的签名可以帮助检测包含这些代码的恶意软件样本。
这些特征提取方法都需要进行深入的静态分析,并且可能需要针对特定的恶意软件样本进行定制。但是,对于那些采取一些比较高级的技术来逃避检测的恶意软件来说,这些方法可能是非常有效的。
除了已经列出的方法外,以下是一些能够检测到高级恶意样本的Yara规则提供的技巧:
1. 检测高级加密:恶意软件可能会使用高级加密算法来隐藏其代码或通信内容。通过检测使用高级加密算法的函数或特定的加密密钥可以帮助识别此类恶意软件。例如,可以搜索与加密算法(如AES、RC4、RSA等)相关的字符串或特定的API调用。
2. 检测虚拟化环境:恶意软件可能会检测是否在虚拟化环境中运行,以躲避检测或执行特定的恶意行为。通过检测虚拟化环境相关的特定系统文件、注册表项或其他指示符可以帮助识别此类恶意软件。
3. 检测系统漏洞利用:恶意软件可能会利用已知或未知的系统漏洞来实现攻击。通过检测与已知系统漏洞相关的字符串、特定的API调用或其他指示符可以帮助识别此类恶意软件。
4. 检测代码混淆:恶意软件可能会使用代码混淆技术来隐藏其真实行为和目的。通过检测与代码混淆相关的字符串、特定的API调用或其他指示符可以帮助识别此类恶意软件。
这些技巧需要进行深入的静态分析,并且可能需要针对特定的恶意软件样本进行定制。但是,通过利用这些技巧可以提高Yara规则的检测率,并且能够检测到一些比较高级的恶意软件样本。
PE文件头信息:PE文件头是Windows可执行文件的一个重要部分,它包含了文件的元数据信息,例如文件名、文件大小、入口点地址、导入表、导出表等。恶意软件通常会修改PE文件头信息来隐藏其真实身份,因此识别恶意软件时需要仔细分析PE文件头信息。
PE文件的Rich Header是用于存储编译器信息的数据结构,其中包含了丰富的信息,如编译器版本、链接器版本、目标平台等。根据PE文件的Rich Header计算的hash值可以作为一种特征,用于文件分类和恶意代码检测。以下是一些PE Rich Header Hash特征:
1. PE文件的Rich Header hash值是由一个32位的无符号整数和一个64位的有符号整数组成的,可以通过将这两个整数相加得到。因此,PE文件的Rich Header hash值通常是一个96位的值。
2. 在PE文件中,Rich Header结构的偏移量是固定的,一般在文件头后的0x80字节处。可以根据这个偏移量找到Rich Header结构,并计算其hash值。
3. 计算Rich Header hash时,一般采用MD5或SHA1等加密算法。这些算法可以将任意长度的数据映射为固定长度的hash值,从而方便进行比较和匹配。
4. Rich Header hash值可以用于恶意代码检测。由于编译器和链接器版本的差异,不同编译器和链接器生成的PE文件的Rich Header hash值往往是不同的。因此,通过比较不同PE文件的Rich Header hash值,可以发现相同编译器和链接器生成的文件,从而识别出恶意代码。
5. Rich Header hash值也可以用于文件分类。由于不同软件生成的PE文件的Rich Header hash值往往是不同的,因此可以通过对大量的PE文件计算Rich Header hash值,建立hash值与软件类型之间的映射关系,从而将未知PE文件分类。
6. Rich Header hash值还可以用于判断PE文件是否被修改过。由于Rich Header hash值是由编译器和链接器生成的,因此对PE文件进行修改可能会改变其Rich Header hash值。因此,如果两个PE文件的Rich Header hash值不同,那么它们很可能是不同版本的同一个软件,或者其中一个被修改过。
7. 需要注意的是,Rich Header hash值并不是唯一的特征,它只能用于辅助文件分类和恶意代码检测。在实际应用中,需要结合其他特征和算法进行综合分析,才能得到更准确的结果。
域名和IP地址:恶意软件通常会尝试与C&C服务器进行通信,以接收指令或向攻击者传输数据。通过分析恶意软件的域名和IP地址,可以识别恶意软件家族、攻击者的位置和意图。
Authentihash:Authentihash是一种基于数字签名的恶意软件特征提取技术,它通过计算PE文件的数字签名来生成一个哈希值。Authentihash可以用于识别已知的恶意软件家族或验证文件的完整性。
Similar by VT feature hash:这种特征提取方法是基于VirusTotal的扫描结果,使用哈希算法计算VirusTotal中对于同一个样本所提取的各种特征的哈希值,如导入函数、资源、字符串等。然后将这些哈希值组合成一个特征码,用于识别具有相似特征的恶意软件变种。
Similar by code blocks:这种特征提取方法是基于指令序列的恶意软件特征提取技术。它通过将恶意代码分解成多个基本块,然后计算每个基本块的哈希值。最后,将这些哈希值组合成一个特征码,用于识别具有相似代码块的恶意软件变种。
编译时间戳:编译时间戳是PE文件中的一个时间戳属性,记录了编译该文件的日期和时间。这种特征可以用于确定文件的编译时间,从而帮助安全人员识别和分类不同类型的恶意软件。
数字签名:数字签名是一种基于公钥密码学的技术,用于验证文件的真实性和完整性。数字签名可以用于识别已知的恶意软件家族或验证文件的来源和完整性。
Main_icon_dhash:Main_icon_dhash是一种基于图像的恶意软件特征提取技术,它通过对文件的主图标进行哈希计算来生成一个特征码。Main_icon_dhash可以用于识别恶意软件家族中的不同变种,并提供一种快速的恶意软件识别方法。
字符串组相似性:字符串组相似性是一种基于字符串的恶意软件特征提取技术,它通过对恶意软件的字符串进行哈希计算,生成一个特征码。这种特征可以用于识别在不同变种中使用了相似字符串的恶意软件,从而帮助安全人员快速发现和分类新的恶意软件,应用平台:https://analyze.intezer.com/
PDB相似路径:PDB相似路径是一种基于PE文件的调试信息(PDB)提取的恶意软件特征提取技术。PDB文件是编译器在编译源代码时生成的一种调试信息文件。PDB相似路径可以用于识别恶意软件家族中使用了相似PDB路径的不同变种,从而帮助安全人员快速发现新的恶意软件。
最后总结
以上是一些恶意软件特征提取技术的例子,实际上还有很多其他的技术可供选择。选择哪种技术取决于特定的应用场景和需求。在实践中,常常需要组合多种特征提取技术,并使用各种手段对特征进行加权和筛选,以获得更准确的分析结果。
总的来说,特征提取是恶意软件分析中至关重要的一部分。通过提取恶意软件样本的静态和动态特征,可以识别和分类恶意软件,并获得有关恶意软件行为模式的重要信息。特征提取技术的不断发展,将为恶意软件分析提供更加准确和有效的方法和工具,有助于提高计算机系统的安全性和保护用户的隐私。
原文始发于微信公众号(OnionSec):恶意样本的特征规则提取