欢迎加入我的知识星球,目前正在更新免杀相关的东西,129/永久,每100人加29。
加好友备注(星球)!!!
一些资源的截图:
什么是恶意软件
恶意软件毋庸置疑,星球其实已经发了很多恶意软件相关的项目,无论是DLL,还是一些其他的项目,足以让我们去绕过国内的某些杀软。
恶意软件包含了,蠕虫,键盘记录程序,后门程序以及内核木马等等。
恶意软件分析类型
恶意软件分析的类型主要为三种,分别是静态分析,动态分析,内存分析。
静态分析:
关于静态分析其实就是在不执行恶意软件的情况下分析,主要用于检查恶意软件的代码和结构,而不触发其行为。
动态分析:
关于动态分析就是通过执行恶意软件来进行分析,观察和记录恶意软件在运行时的行为。
内存分析:
在恶意软件执行之后,对RAM(主内存)进行分析。主要关注内存中的数据和进程,以发现恶意软件的运行痕迹和潜在的隐藏活动。
静态分析
分析步骤
首先我们先来看看静态分析。静态分析的步骤如下:
确定文件类型:识别恶意软件的文件格式。
生成加密哈希:使用哈希值来为恶意软件创建指纹。
提取字符串: 从文件中提取可读的字符串,帮助识别其意图。
检测文件混淆: 检测文件是否使用了加壳或加密技术。
提交到多引擎病毒扫描: 利用多种反病毒引擎进行扫描。
使用YARA进行模式匹配: 通过规则匹配模式来识别恶意代码。
模糊哈希和比较: 使用模糊哈希来检测相似的文件。
检查PE文件的导入表: 查看PE文件的导入函数。
检查PE头: 分析文件头部信息,以识别恶意特征。
识别文件类型
在恶意软件分析中,识别文件类型是非常重要的一步,我们可以通过文件类型来判断恶意软件是为那个操作系统或架构设计的,例如Windows,Linux,Macos等等。
例如文件类型是PE文件,这通常意味着该恶意软件是为windows操作系统设计的。需要注意的是确定文件的类型不能靠文件扩展名来进行判断,因为后缀名相对来说是很容易来进行更改的,比如白加黑,在黑dll中写了一个读取文件的loader,那么读取的这个文件可以是任意的后缀,比如.conf,.txt,.help等等都是可以的。
或者说有些恶意软件会伪装成普通的文档文件,比如PDF,DOC等等。
在确定文件类型时,我们可以使用一些比较专业的工具来进行分析,常见的文件检测工具有File utility
,这个工具适用于UNIX系统,通过检查文件的头信息和结构来确定其真实的类型,而不是简单的通过扩展名,我们可以输入file filename
这种方式来查看。
除了File
这个工具之外,我们也可以使用pestudio
这个工具,这个工具适用于windows操作系统,这个工具是一种专门用于分析Windows文件的工具,可以提供文件的类型,头信息,导入的函数和库等详细信息。
恶意软件指纹
我们可以对其恶意软件生成不同加密强度的哈希值,密码哈希可以用于分享给其他研究人员,以帮助他们来识别恶意软件,哈希值是文件内容的唯一指纹,即使文件的名字或扩展名字被修改,只要内容不变,哈希值就不会发生改变。
我们可以通过在线搜索该哈希值来确定恶意软件是否已经被识别,这通常在病毒数据库或恶意存储库中查找。
我们一般可以使用多个工具来生成不同加密强度的哈希值。
比如linux环境的话,我们可以使用md5sum
sha256sum 1sha1sum
那么如果是windows系统的话,可以直接使用pestudio
工具来直接生成哈希值。
那么这样的话我们是不是也有一个其他的思路呢?比如说我们现在已经知道了这个恶意文件的哈希值为:B65786010CC9FE3766554C811E95FEE5054872B3621603D02368AD6C739E029B
那么一般我们在打攻防的时候,我们如果怀疑我们的恶意文件被提交到了微步,我们可以直接去搜索这个哈希值即可。
如果搜索一个不存在的哈希值,那么会显示报告不存在。
这样我们就可以及时的去更新我们的恶意软件是否被当做样本去提交了。然后及时去更改我们的恶意软件代码即可。
字符串
字符串是文件中嵌入的明文ASCII或Unicode字符,文件中的字符串可以揭示该恶意软件的功能以及其执行的命令,而且字符串中可能会包含很多有趣的东西,比如域名,文件名,URL等信息,这些信息可以帮助我们进行溯源操作。
在Linux环境下,我们可以通过strings
来提取文件中的字符串,而在Windows下,我们可以通过pestudio
工具分析windows可执行文件中的字符串。
strings.exe -a beacon.exe
查杀引擎
我们也可以将其恶意软件上传到查杀引擎来进行识别。但是这个东西有一点不靠谱,一般我们可以上传到VT来进行查杀,但是VT是一个沙箱,是可以绕过的,所以不是那么的靠谱。
并且VT查杀也是会提取字符串的,但是搜索字符串的话是需要企业账号的,一般我们是没有的。
文件混淆分析
恶意软件作者一般使用混淆技术使其文件更难被检测或分析,混淆可以隐藏代码的真实意图,从而绕过防病毒检测和静态分析。
常用的混淆技术有打包工具,打包工具通过将恶意软件代码压缩或加密,减少其可见的内容,当文件被加载到内存时,他会解压或解密,恢复原始的恶意代码。
混淆后的文件通常会减少文件中的字符串和函数的数量,使其更难通过传统的字符串提取和API调用分析恶意软件的行为。这会导致无法找到通常标识恶意行为的线索,比如域名,关键的一些API等等。
确定文件是否被混淆是恶意软件的一个关键步骤,如果分析人员判断文件被混淆,可以采取动态分析或逆向。
我们可以使用Exeinfo PE
工具来检测,这个工具能够识别文件的打包器或混淆器类型。
工具下载如下:
https://github.com/ExeinfoASL/ASL
YARA规则匹配
YARA是一种基于规则的检测工具,广泛用于恶意软件分析和威胁检测,它通过一组规则匹配文本或二进制模式,帮助分析人员识别特定类型的恶意软件样本,这些规则可以在文本内容中查找特定字符串,数据结构或模式,从而快速识别恶意软件类型。
YARA规则可以匹配文件中的纯文本字符串或二进制数据模式,例如YARA可以通过文本模式检测到恶意软件的特定代码字符串,也可以匹配文件头部的二进制结构。
YARA规则的结构是由一组字符串和一个布尔表达式组成的。
字符串: YARA 规则中定义的模式,可以是字符串或十六进制格式的数据。例如,一个规则可以指定一组特定的恶意代码片段。
布尔表达式: 布尔表达式用于决定规则是否匹配目标文件。它会定义字符串的组合逻辑(例如 AND、OR),只有当目标文件中的数据符合布尔表达式中的条件时,YARA 才会将其视为匹配。例如,可以指定“必须包含字符串 A 和 B”或“包含字符串 A 或字符串 B”。
比如我们举一个例子,如果我们知道恶意软件中包含了特定字符串,比如包含了Hacker
,shellcode_str
,那么我们就可以来编写YARA规则了。
rule MalwareDetection
{
strings:
$str1 = "Hacker"
$str2 = "Sleep"
condition:
$str1 and $str2
}
在如上规则中,MalwareDetection
会检测目标文件是否同时包含了Hacker
和Sleep
这两个字符串。我们也可以将其and
设置为or
。
可以看到这里检测到t.exe文件中有一个sleep的字符串,并且标注了它的位置,这里的0xbaa表示在偏移地址0xbaa处发现了该字符串。
我们使用winhex打开。定位到0xbaa偏移处,可以看到就是我们的字符串。
这样的话我们就可以匹配恶意文件中的字符串了。
模糊哈希及Fuzz
模糊哈希是一种用于比较文件或数据的技术,能确定他们的相似性程度,而不仅仅是寻找完全匹配,与传统哈希不同,传统哈希生成的哈希值对相同文件是唯一且不可逆的,而模糊哈希生成的哈希值可以揭示不同文件之间的相似性。这在分析可能是彼此修改版本的文件时很有用。在恶意软件的分析中,模糊哈希可以帮助识别与已知恶意软件样本相似的文件,如果发一个新的恶意文件和旧的恶意文件哈希相似,则可能意味着这个新的文件是旧的文件的变种。
我们可以使用ssdeep
工具来进行模糊哈希,它可以为每个文件生成上下文触发的分段哈希,允许比较文件之间的相似性。
下载地址如下:
https://github.com/ssdeep-project/ssdeep/releases
我们这里简单去编译一个代码。我们可以看到第一个文件的哈希如下:
我们简单去修改一下该代码,我们看一下哈希是否会改变。
可以看到哈希发生了很大的变化,其实我在第二个文件中就删除了几个print打印语句就导致哈希变化如此之大。
PE导入表
可执行文件通过多个共享库并调用API函数来执行特定操作,比如解析域名,建立HTTP连接等等,都需要使用到相关的函数。
我们可以通过检查可执行文件导入的共享库类型和API调用列表,可以推测恶意软件的功能。
我们可以通过dumpbin /imports
的方式来查看导入表。
也可以使用pestudio
来查看。
如上图我们可以看到一些相关的危险函数,比如OpenProcess函数打开进程的,包括结束掉进程的函数,还有一些获取到线程ID的函数等等。
在比如这个恶意文件,这个文件里面加载了wsock32.dll中的相关函数,这表明这个恶意文件是具有网络通信能力的。
PE头部信息
在PE头部信息中有一个Time Stamp字段来记录程序的编译时间,我们可以通过这个时间来推测恶意软件的创建时间,有助于建立攻击活动的时间线。
包括Resource相关的选项。
我们可以看到这个恶意文件是2003年编译的,这一看都是假的,,,
所以我们在分析的时候,一定要去查看恶意文件的编译时间和资源文件。