

威胁文件识别与分析入门
本文旨在帮助读者掌握威胁文件的基本概念,熟练运用Yara规则和VirusTotal进行分析,并结合Cobalt Strike/Metasploit演示,从攻防两端深入理解恶意文件。
威胁文件简述#
简单来说,威胁文件是指任何被设计用来在计算机系统或网络上执行恶意活动的文件。这些文件是攻击者实现其恶意目标的载体,它们可能伪装成普通程序、文档、图片、压缩包,甚至脚本代码。
常见表现形式#
常见的表现形式包括:
- 恶意软件 (Malware): 这是最广泛的术语,涵盖了所有类型的恶意程序,例如可执行文件 (.exe, .dll, .app, .elf)。
- 恶意文档 (Malicious Documents): 利用办公软件(如Microsoft Office, Adobe PDF Reader)漏洞或宏 (Macro) 功能的文档,如 .docm, .xlsm, .pptm, .pdf (可能内嵌恶意脚本或链接)。
- 恶意脚本 (Malicious Scripts): 如 PowerShell (.ps1), VBScript (.vbs), JavaScript (.js), Python (.py), Bash (.sh) 等,可以直接执行或被其他程序调用,执行恶意命令。
主要分类#
- 病毒 (Virus): 会自我复制并感染其他文件或程序,通常需要宿主文件才能传播和激活。
- 蠕虫 (Worm): 与病毒类似,可以自我复制,但它能独立传播到其他计算机,通常利用网络漏洞或弱口令。
- 木马 (Trojan) / 远控 (RAT - Remote Access Trojan): 伪装成合法或有用的程序,诱骗用户执行。一旦运行,它会暗中执行恶意功能,如窃取信息、下载其他恶意软件,或者允许攻击者远程控制受害者计算机 (RAT)。
- 勒索软件 (Ransomware): 加密用户计算机上的文件(文档、图片、数据库等)或锁定整个系统,然后向用户勒索赎金以换取解密密钥或恢复访问。
- 间谍软件 (Spyware) / 信息窃取器 (Stealer): 秘密收集用户的敏感信息,如键盘记录、网站浏览历史、登录凭证、银行账户信息等,并将其发送给攻击者。
- 下载器 (Downloader) / 释放器 (Dropper): 这类恶意软件本身的核心恶意行为可能较少,其主要功能是下载其他更复杂的恶意软件到受害者系统 (Downloader),或者将内嵌的恶意软件释放到系统中 (Dropper)。它们通常是多阶段攻击的第一步。
- (Optional) 无文件攻击中的恶意负载 (Fileless Malware Payloads): 这类攻击不直接在磁盘上写入传统的恶意可执行文件,而是将恶意代码(即“负载”)直接注入到合法进程的内存中执行,或者利用操作系统自带的工具(如PowerShell、WMI)来执行恶意命令。虽然没有“文件”实体,但其执行的“负载”本身是恶意的,并且是威胁的核心。
威胁文件的传播途径#
- 邮件附件与链接
- 恶意网站与下载
- 移动存储介质 (U盘等)
- 软件供应链与捆绑安装
- 漏洞利用
威胁文件的危害#
数据泄露、系统瘫痪、经济损失、声誉受损等
Yara规则入门#
在理解了威胁文件的基本概念后,本章节将介绍一个强大的工具——Yara,它被誉为“恶意软件模式匹配瑞士军刀”。
Yara 是一个旨在帮助恶意软件研究人员识别和分类恶意软件样本的工具。通过创建基于文本或二进制模式的描述(称为“规则”),Yara 可以在文件(或内存中)寻找这些模式。如果一个文件匹配了某条规则,那么它很可能就是该规则所描述的恶意软件家族的一员。
简单来说,Yara 允许你创建自定义的“指纹”来匹配恶意软件。
Yara的应用场景#
Yara 的灵活性使其在多个安全领域都有广泛应用:
- 威胁狩猎 (Threat Hunting): 主动在大量文件中搜索已知的或新兴的恶意软件特征,发现潜在的未被传统安全产品检测到的威胁。
- 应急响应 (Incident Response): 在安全事件发生后,快速创建规则来识别受感染系统中的恶意文件、变种或相关攻击工具。
- 样本分类 (Malware Triage & Classification): 根据样本匹配的Yara规则,将其归类到特定的恶意软件家族或攻击组织,有助于后续的深入分析和情报共享。
- 安全产品集成: 许多EDR(终端检测与响应)、SIEM(安全信息和事件管理)和沙箱系统都支持集成Yara规则,以增强其检测能力。
Yara规则基本语法#
Writing YARA rules — yara 4.5.0 documentation(完整参数见此文档) ↗
-
rule <规则名称>:
- 每条规则以关键字 rule 开始,后面跟着规则的唯一标识符(名称)。
- 规则名称的命名规范:可以包含字母、数字和下划线,但不能以数字开头,并且通常区分大小写(取决于Yara编译器的设置)。
-
meta: (元数据部分)
可选部分,用于提供关于规则的描述性信息。
- 常见的元数据字段包括:
author
: 规则的作者。description
: 规则的简要描述。date
: 规则创建或最后修改的日期。version
: 规则的版本。reference
: 相关分析报告或样本哈希的链接。hash
: 规则针对的特定样本哈希。
- 这些信息对于规则的管理和共享非常重要。
- 常见的元数据字段包括:
-
strings: (字符串定义部分)
- 定义规则要查找的一个或多个特征模式。
- 字符串以
$
符号开头,后跟一个标识符(字符串变量名)。 Yara
支持三种类型的字符串:- 文本字符串 (Text strings):
- 用双引号括起来,如 $str1 = “evil_payload.exe”。
- 可以附加修饰符来改变匹配行为:
nocase
: 不区分大小写匹配。ascii
: 只匹配ASCII字符编码的字符串(默认)。wide
: 匹配UTF-16等宽字符编码的字符串。base64
: base64编码。xor
: 异或加密。fullword
: 确保字符串作为一个完整的单词被匹配(前后有非字母数字字符)。
- 十六进制字符串 (Hexadecimal strings):
- 用花括号括起来,由十六进制数字组成,如
$hex1 = { E8 ?? ?? ?? ?? FF D0 }
。 ??
是通配符,代表任意一个字节。- 还可以使用跳跃符
[n-m]
,表示跳过n到m个字节,如{ E8 [4-6] FF D0 }
表示 E8 之后跳过4到6个字节,然后是 FF D0。
- 用花括号括起来,由十六进制数字组成,如
- 正则表达式 (Regular expressions):
- 用正斜杠括起来,遵循
Perl
兼容的正则表达式语法,如$re1 = /cmd\.exe \/c \w+/
。 - 同样可以附加
nocase
,ascii
,wide
,fullword
修饰符。
- 用正斜杠括起来,遵循
- 文本字符串 (Text strings):
-
condition: (条件部分)
- 必需部分,定义规则匹配的逻辑条件。
- 使用布尔表达式
(and, or, not)
和字符串标识符来构建。 - 示例:
$str1
(如果找到 $str1 则匹配)$str1 and $hex1
(同时找到 hex1 才匹配)any of them
(在strings部分定义的任一字符串被找到即可)all of them
(在strings部分定义的所有字符串都被找到才匹配)2 of ($str1, $str2, $str3)
(三个字符串中至少有两个被找到)$str1 at 0
(字符串 $str1 出现在文件的开头位置)#str1 > 5
(字符串 $str1 出现的次数大于5次,#用于获取字符串出现次数)filesize > 10KB
(文件大小大于10KB)
编写Yara规则#
rule Find_Evil_Mutex
{
meta:
author = "Security Department"
description = "Detects a specific mutex used by EvilApp"
date = "2025-06-04"
strings:
$mutex = "Global\\EvilAppMutex123" wide
condition:
$mutex
}
plaintextYara工具使用#
Yara本身是一个命令行工具。下载并安装Yara后 (通常在Linux系统或Windows的WSL中很方便,也有Windows编译版),可以通过命令行来使用它。
命令行扫描单个文件/目录#
最基本的使用方法是:
yara <规则文件.yar> <目标文件或目录>
shell- <规则文件.yar>: 包含一条或多条Yara规则的文本文件。
- <目标文件或目录>: 要扫描的单个文件,或者包含多个文件的目录。
常用参数:
- -r : 递归扫描目录。
- -s : 显示匹配到的字符串信息。
- -m : 显示匹配到的元数据信息。
- -n : 只显示不匹配的文件 (取反)。
- -c : 只显示匹配规则的数量。
- -d <外部变量名>=<值> : 定义外部变量,可以在规则的condition部分使用。
- -t <标签> : 只运行带有指定标签的规则 (规则中可以用 tags: 关键字定义标签)。
示例:
# 使用 my_rules.yar 扫描 sample.exe 文件,并显示匹配的字符串
yara -s my_rules.yar sample.exe
# 递归扫描 /tmp/suspicious_files/ 目录,并显示匹配规则的元数据
yara -r -m my_rules.yar /tmp/suspicious_files/
shell相关工具#
Loki#
Neo23x0/Loki: Loki - Simple IOC and YARA Scanner ↗
[WARNING]
FILE: .\suspicious_files\revshell.exe SCORE: 70 TYPE: UNKNOWN SIZE: 73802
FIRST_BYTES: 4d5a90000300000004000000ffff0000b8000000 / <filter object at 0x0000015A34344A30>
MD5: 6efc9db3a4e5038add0f0395ff02fe0e
SHA1: f304b4f677b8c96ab89d1da869c0360e2b427161
SHA256: e6ff42299ca14c96a7bbccba5c6d4d8a57055593a1c60f184cb6f675d36b1d2e CREATED: Thu Jun 5 10:26:04 2025 MODIFIED: Thu Jun 5 10:26:04 2025 ACCESSED: Thu Jun 5 15:37:24 2025
REASON_1: Yara Rule MATCH: Windows_Trojan_Metasploit_a6e956c9 SUBSCORE: 70
DESCRIPTION: Identifies the API address lookup function leverage by metasploit shellcode REF: - AUTHOR: Elastic Security
MATCHES: $a1: '`\x89\xe51\xc0d\x8bP0\x8bR
\x8bR\x8br(\xb7J&1\xff\xac<a|, '
[NOTICE] Results: 0 alerts, 1 warnings, 270 notices
[RESULT] Suspicious objects detected!
[RESULT] Loki recommends a deeper analysis of the suspicious objects.
[INFO] Please report false positives via https://github.com/Neo23x0/signature-base
[NOTICE] Finished LOKI Scan SYSTEM: DESKTOP-LML13S4 TIME: 20250605T07:37:24Z
shellyarGen#
Neo23x0/yarGen: yarGen is a generator for YARA rules ↗
常用参数#
-m
是要生成规则的文件的路径 。--excludegood
强制排除所有合法字符串。-o
希望输出 Yara 规则的位置和名称 。
python.exe .\yarGen.py -m ..\suspicious_files\ --excludegood -o ..\suspicious_files\myGenRules.yar
shell.\yara-master-v4.5.4-win64\yara64.exe .\suspicious_files\myGenRules.yar -m .\suspicious_files\
suspicious_files_shell_2 [description=" - file shell.asp",author="yarGen Rule Generator",reference="https://github.com/Neo23x0/yarGen",date="2025-06-05",hash1="093efcf1cb21fe605c3b921a289accc97d4535fd2a80c3ff963592078101e2f2"] .\suspicious_files\\shell.asp
suspicious_files_shell [description=" - file shell.ashx",author="yarGen Rule Generator",reference="https://github.com/Neo23x0/yarGen",date="2025-06-05",hash1="0719349a1e6a7e76cf061ab59a5663713835479890234395219571edf089ffeb"] .\suspicious_files\\shell.ashx
suspicious_files_shell_6 [description=" - file shell.php",author="yarGen Rule Generator",reference="https://github.com/Neo23x0/yarGen",date="2025-06-05",hash1="3cf81eba189cdedde93a9f4fbbb85bed58dbfade1bc7a81656c205957a7de677"] .\suspicious_files\\shell.php
revshell [description=" - file revshell.exe",author="yarGen Rule Generator",reference="https://github.com/Neo23x0/yarGen",date="2025-06-05",hash1="e6ff42299ca14c96a7bbccba5c6d4d8a57055593a1c60f184cb6f675d36b1d2e"] .\suspicious_files\\revshell.exe
shell_uni [description=" - file shell_uni.jsp",author="yarGen Rule Generator",reference="https://github.com/Neo23x0/yarGen",date="2025-06-05",hash1="d8bf05b5aea5f088610ec33435927c36c2790ff9b33236a1df3a1b5e095c4430"] .\suspicious_files\\shell_uni.jsp
plaintext