【THM】-Yara(恶意样本检测工具)-学习

发布时间 2023-12-15 01:13:20作者: Hekeatsl

本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/yara

本文相关内容:了解有关Yara的应用程序和语言规则,以便将其用于威胁情报收集、取证分析和威胁追踪。

image-20231211005436983

什么是Yara(雅拉)?

Yara的GitHub存储库链接:https://github.com/virustotal/yara

"Yara是恶意软件研究人员(以及其他所有人)用于模式匹配的瑞士军刀"(Virustotal., 2020)

YARA是一个旨在(但不限于)帮助恶意软件研究人员识别和分类恶意软件样本的工具,使用YARA,你可以基于文本或二进制模式创建关于恶意软件家族的描述(或任何你想要描述的内容)。每个描述,也就是一个规则,由一组字符串和一个布尔表达式组成,这些字符串和布尔表达式决定了它的逻辑。

Yara可以基于二进制和文本模式识别信息,例如识别指定文件中所包含的字符串或者十六进制(hexadecimal)。

规则可以被用于标记模式,例如,编写Yara规则通常是为了根据文件所呈现的特性(或模式)来确定文件是否恶意。

字符串是编程语言的基本组成部分,应用程序往往使用字符串来存储文本等数据。例如,下面的代码片段将打印"Hello World",其中文本“Hello World”将作为字符串被存储。

print("Hello World!")  //python编程语言

如果我们愿意,我们就可以编写一个Yara规则来在操作系统上的每个程序中搜索“hello world”。

恶意软件就像我们刚才提到的“Hello World”应用程序一样,使用字符串来存储文本数据。以下是一些不同类型的恶意软件在字符串中存储的数据示例:

Type 类型 Data 数据 Description 描述
Ransomware(勒索软件) 12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw 用于支付赎金的比特币钱包
Botnet(僵尸网络) 12.34.56.7 命令与控制 (C&C) 服务器的 IP 地址

tips:本文并未展开解释恶意软件的具体功能。

答题

image-20231211064717245

部署与本文相关的实验环境

在与本文相关的实验房间中,Tryhackme为我们提供了一台基本的实验虚拟机,此机器中包含了完成本文实践操作所需的所有工具。

image-20231214010700289

在完成机器部署之后,我们可以在THM所提供的浏览器页面中直接访问实验虚拟机或者在攻击机上使用下面的凭据以通过SSH访问实验虚拟机。

  • IP Address: MACHINE_IP(在Tryhackme实验房间页面中部署机器,然后我们将随机获得相关的IP地址)
  • Username: cmnatic
  • Password: yararules!
  • SSH Port: 22

通过Tryhackme提供的内置浏览器分屏访问实验虚拟机时将看到如下的类似界面:

image-20231211234842264

Yara规则简介

Yara用于编写规则的专有语言学习起来相当简单,但很难掌握,这是因为你编写的规则的有效性取决于你对你想要搜索的模式的理解。

使用Yara规则很简单,每个yara命令需要两个参数才能有效,它们是:

  1. 我们所创建的规则文件;
  2. 要使用规则的文件名称、目录或进程ID。

每条规则都必须有名称和条件,例如,如果我们想针对目录"some directory"来使用"myrule.yar"规则,我们将输入如下的命令:

yara myrule.yar somedirectory

注意:.yar是所有Yara规则的标准文件扩展名。

接下来,我们将按照以下步骤来制定一个最基本的规则:

1.通过touch somefile命令创建一个名为“somefile”的文件。

#Creating a file named somefile
cmnatic@thm:~$ touch somefile

2.创建一个新文件并将其命名为“myfirstrule.yar”,如下所示:

#Creating a file named myfirstrule.yar
cmnatic@thm:~$ touch myfirstrule.yar

3.使用文本编辑器(例如nano)打开“myfirstrule.yar”并输入以下代码片段,然后再保存该.yar文件:

rule examplerule {
        condition: true
}
#Inputting our first snippet into "myfirstrule.yar" using nano

cmnatic@thm:~$ nano myfirstrule.yar   
GNU nano 4.8 myfirstrule.yar Modified
rule examplerule {
        condition: true
}

此代码段中的规则名称为 examplerule ,并且在规则中我们添加了一个条件(在本例中为condition: true)。如前所述,每个规则都需要有名称和条件才能有效,我们在编写上述规则时已经满足了这两个要求。

现在,我们所制定的规则会通过condition: true来检查我们指定的文件/目录/PID是否存在,如果确实存在,那么我们将得到匹配examplerule规则的输出结果。

让我们针对上述步骤1中所创建的文件“somefile”来测试一下:

yara myfirstrule.yar somefile

如果“somefile”文件存在,Yara将会告诉我们匹配examplerule规则的结果(因为此时已经满足模式):

#Verifying our the examplerule is correct
cmnatic@thm:~$ yara myfirstrule.yar somefile 
examplerule somefile

如果“somefile”文件不存在,那么Yara将输出如下的错误提示:

#Yara complaining that the file does not exist
cmnatic@thm:~$ yara myfirstrule.yar sometextfile
error scanning sometextfile: could not open file

扩展Yara规则

我们可以对上一小节的基础Yara规则做进一步改进。

通过Yara来检查文件是否存在对于我们来说并没有太大的帮助,毕竟,我们可以自己解决这个问题或者选择使用更好的工具来完成这项简单工作。

在编写或制定Yara规则时,我们有一些条件可以选择,具体的条件列表请参考如下链接:https://yara.readthedocs.io/en/stable/writingrules.html

接下来,我们将简单介绍一些与Yara规则相关的内容并解释其目的。

Keyword 关键词
Meta
Desc
Strings
Conditions
Weight

Meta

在Yara规则中,meta是用于提供关于规则本身的元信息的部分,而不是用于定义条件的部分。meta节包含有关规则的描述性信息,例如作者、版本、描述等。这些元信息不直接影响规则的匹配,而是提供有关Yara规则的额外信息和说明。

Yara规则的这一部分是为规则的作者所保留的描述性信息。例如,你可以使用desc,description(描述)的缩写,来总结规则检查的内容,这部分中的任何内容都不会影响规则本身,与注释代码类似,总结规则也很有用。

tips:在Yara规则中,desc关键字属于meta节的一部分。

Strings

我们可以使用字符串来搜索文件或程序中的特定文本、十六进制。例如,假设我们想在目录中搜索包含“Hello World!”的所有文件,我们将创建如下的Yara规则:

rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"
}

我们可以定义关键字strings,其中包括了我们想要搜索的字符串,例如——将"Hello World!" 存储在变量$hello_world中。

当然,我们还需要添加一个条件来使上述规则有效,在刚才的例子中,为了使字符串成为匹配条件,我们需要在规则的condition中指定存储字符串内容的变量名称:

rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"

	condition:
		$hello_world
}

现在,如果指定目录下的任何文件的内容包含了字符串"Hello World!",那么在我们执行相关Yara命令时,上述规则就会匹配成功。

然而,上述规则示例实际上只匹配字符串“Hello World!”,而不会匹配"hello world"或者"HELLO WORLD",为了解决这个问题,我们可以编写如下所示的规则:

rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"
		$hello_world_lowercase = "hello world"
		$hello_world_uppercase = "HELLO WORLD"

	condition:
		any of them
}

tips:上述规则中的条件any of them允许我们搜索多个字符串。

现在,任何包含以下字符串之一的文件在我们执行相关Yara命令时,都将触发规则匹配:Hello World!、hello world、HELLO WORLD。

Conditions(条件)

在上文内容中,我们已经使用过了trueany of them条件,与常规编程非常相似,我们还可以使用以下运算符来设置条件:

  • <= 小于或等于
  • >= 大于或等于
  • != 不等于

例如,我们可以在条件中使用运算符以编写如下的规则:

rule helloworld_checker{
	strings:
		$hello_world = "Hello World!"

	condition:
        #hello_world <= 10
}

上述规则现在将:

  1. 查找"Hello World!"字符串;
  2. 只有当"Hello World!"字符串出现次数少于或等于10次时才认为规则匹配。

Combining keywords(组合关键词)

此外,我们还可以在Yara规则中使用如下所示的操作符来组合关键字:

  • and: 表示逻辑与操作,要求两个(或多个)条件同时满足才能使整个条件成立。
  • not: 表示逻辑非操作,用于否定一个条件,即如果条件不满足,则整个条件成立。
  • or: 表示逻辑或操作,只要满足其中一个条件(两个或多个条件中的一个),整个条件就成立。

假设我们现在想检查文件是否包含指定字符串内容("Hello World!")并且还限制文件大小在一定范围内(<10 kb ),那么我们可以编写如下的Yara规则:

rule helloworld_checker{
	strings:
		$hello_world = "Hello World!" 
        
        condition:
	        $hello_world and filesize < 10KB 
}

只有当规则中的两个条件都为真时,上述规则才会被成功匹配,如果指定文件的内容确实包含了“Hello World!”,但是它的文件大小大于10KB,那么我们将得到如下的命令执行结果:

#Yara failing to match the file mytextfile because it is larger than 10kb
cmnatic@thm:~$ yara myfirstrule.yar mytextfile.txt
cmnatic@thm:~$ <output intentionally left blank> 
#输出会有意留空

如果指定文件的内容既包含了“Hello World!”,又具有小于10KB的文件大小,那么我们将得到如下的结果:

#Yara successfully matching the file mytextfile because it has "Hello World" and a file size of less than 10KB
cmnatic@thm:~$ yara myfirstrule.yar mytextfile.txt
helloworld_textfile_checker mytextfile.txt

注意:上述命令执行结果中的helloworld_textfile_checker是我们所使用的规则的名称,而mytextfile.txt则是成功匹配规则的文件的名称。

Yara规则剖析

image-20231212194638392

信息安全研究员“fr0gger_”创建了一个方便理解的备忘单(安全信息图表),它分解并可视化了YARA规则的元素(如上图所示,所有图片均出自他手),这是一个很好的入门参考。

相关链接如下:https://medium.com/malware-buddy/security-infographics-9c4d3bd891ef#18dd

提高Yara规则的技术性

Cuckoo Sandbox 或者 Python's PE Module等框架可以让我们将Yara规则的技术性大幅度提高。

Cuckoo(布谷鸟)

Yara是一种用于规则匹配的工具,通常用于检测和分类恶意软件,用户可以创建自定义的Yara规则,描述要在文件中搜索的模式,并使用这些Yara规则来识别特定的恶意行为或恶意软件家族,而这些Yara规则也可以在各种恶意软件分析环境中集成使用,包括Cuckoo Sandbox。

Cuckoo Sandbox是一个开源的自动化恶意软件分析环境,它用于执行恶意样本,监视其行为(了解其执行过程、文件操作、注册表更改等),收集信息,并能生成有关样本行为的报告。

我们可以根据Cuckoo Sandbox中发现的恶意行为来生成Yara规则,即:当我们在Cuckoo Sandbox分析环境中执行恶意软件时,可以通过对恶意软件进行深入分析以帮助我们发现新的模式和特征,然后我们就可以为特定的行为(如运行时字符串等)创建更有效的Yara规则。

简而言之:在Cuckoo Sandbox中,用户可以定义Yara规则,使其在样本分析期间用于检测和报告特定的行为,这样,Cuckoo就可以利用Yara引擎来进行模式匹配,并能根据自定义的Yara规则来生成有关恶意样本的检测报告。

可参考资料:

Python PE

Python的PE模块允许我们根据Windows可移植可执行文件(PE)结构的各个部分和元素创建Yara规则。

简而言之:通过使用Python中的PE模块,我们就可以解析Windows PE文件的结构(包括文件头、节表、导入表、导出表等PE结构),提取其中的信息,然后再利用这些信息创建Yara规则,这些规则可以用于检测具有相似结构或特征的恶意PE文件,这在恶意软件分析或安全研究中非常有用。

检查PE文件的内容是恶意软件分析中的一项基本技术,这是因为通过使用该技术:无需逆向工程或执行样本就可以在很大程度上识别加密、蠕虫等恶意行为。

Yara与其他工具集成

了解如何创建自定义的Yara规则很有用,但幸运的是——我们不必从头开始创建很多规则就可以直接使用Yara来进行恶意软件检测;这是因为有很多的开源工具以及大量的GitHub资源(包括商业产品)可以在用户进行威胁狩猎、事件响应等活动时利用Yara引擎。

接下来,我们将简单介绍一些集成了Yara模式匹配引擎的开源工具(非常多,本小节只是简单介绍几个)。

LOKI(洛基)

LOKI是由Florian Roth创建/编写的免费开源IOC(威胁指标-Indicator of Compromise)扫描器。

根据LOKI的GitHub页面,LOKI的检测基于4种方法:

  1. 文件名IOC检查(File Name IOC Check):通过Regex(正则表达式)匹配完整的文件路径/名称。

  2. Yara规则检查(Yara Rule Check):使用Yara签名匹配文件数据和进程内存。

  3. 哈希校验(Hash Check):将已知的恶意哈希值(MD5, SHA1, SHA256)与被扫描的文件进行比较。

  4. C2回连检查(C2 Back Connect Check):将进程连接端点与C2 IOCs进行比较 (LOKI版本v10以后的新增功能)。

LOKI还可以用于其他检查,具体请参考相关的GitHub自述文件:https://github.com/Neo23x0/Loki/blob/master/README.md

LOKI可以在Windows和Linux系统上使用,相关的下载链接如下:https://github.com/Neo23x0/Loki/releases

#Displaying Loki's help menu 显示Loki的帮助菜单
cmnatic@thm:~/Loki$ python3 loki.py -h
usage: loki.py [-h] [-p path] [-s kilobyte] [-l log-file] [-r remote-loghost]
               [-t remote-syslog-port] [-a alert-level] [-w warning-level]
               [-n notice-level] [--allhds] [--alldrives] [--printall]
               [--allreasons] [--noprocscan] [--nofilescan] [--vulnchecks]
               [--nolevcheck] [--scriptanalysis] [--rootkit] [--noindicator]
               [--dontwait] [--intense] [--csv] [--onlyrelevant] [--nolog]
               [--update] [--debug] [--maxworkingset MAXWORKINGSET]
               [--syslogtcp] [--logfolder log-folder] [--nopesieve]
               [--pesieveshellc] [--python PYTHON] [--nolisten]
               [--excludeprocess EXCLUDEPROCESS] [--force]

Loki - Simple IOC Scanner

optional arguments:
  -h, --help            show this help message and exit
  ......

可参考资料:https://www.freebuf.com/articles/system/166610.html

THOR Lite(托尔 精简版)

THOR Lite是一种多平台IOC AND YARA扫描器,有适用于Windows、Linux和macOS的预编译版本。THOR Lite的一个很好的功能是能够对扫描进行节流,这可以有效地限制CPU资源的耗尽。

要了解关于THOR Lite的更多信息以及下载相关的二进制文件,请访问以下链接:https://www.nextron-systems.com/thor-lite/

tips:我们需要订阅THOR Lite官网的邮件列表才能获取THOR Lite二进制文件的副本,这不会产生任何费用。

请注意,THOR是面向企业客户的,THOR Lite才是免费的工具版本。

#Displaying Thor Lite's help menu 显示Thor Lite的帮助菜单
cmnatic@thm:~$ ./thor-lite-linux-64 -h
Thor Lite
APT Scanner
Version 10.7.3 (2022-07-27 07:33:47)
cc) Nextron Systems GmbH
Lite Version

> Scan Options
  -t, --template string      Process default scan parameters from this YAML file
  -p, --path strings         Scan a specific file path. Define multiple paths by specifying this option multiple times. Append ':NOWALK' to the path for non-recursive scanning (default: only the system drive) (default [])
      --allhds               (Windows Only) Scan all local hard drives (default: only the system drive)
      --max_file_size uint   Max. file size to check (larger files are ignored). Increasing this limit will also increase memory usage of THOR. (default 30MB)

> Scan Modes
      --quick     Activate a number of flags to speed up the scan at cost of some detection.
                  This is equivalent to: --noeventlog --nofirewall --noprofiles --nowebdirscan --nologscan --noevtx --nohotfixes --nomft --lookback 3 --lookback-modules filescan

FENRIR(芬里厄)

该工具由Neo23x0 (Florian Roth) 创建,Fenrir是一个bash脚本,它可以在任何能够运行bash的系统上运行(甚至是Windows系统)。

#Running Fenrir
cmnatic@thm-yara:~/tools$ ./fenrir.sh
##############################################################
    ____             _
   / __/__ ___  ____(_)___
  / _// -_) _ \/ __/ / __/
 /_/  \__/_//_/_/ /_/_/
 v0.9.0-log4shell

 Simple Bash IOC Checker
 Florian Roth, Dec 2021
##############################################################

可参考资料:https://www.freebuf.com/sectool/216061.html

YAYA

YAYA(Yet Another Yara Automaton)由EFF(电子前沿基金会)创建并于2020年9月发布,根据其官网描述,“YAYA 是一个新的开源工具,可以帮助研究人员管理多个YARA规则存储库。YAYA首先将导入一组高质量的YARA规则,然后让研究人员添加自己的规则、禁用特定的规则集并运行文件扫描。”

注意:目前,YAYA只能运行在Linux系统上。

#Running YAYA
cmnatic@thm-yara:~/tools$ yaya
YAYA - Yet Another Yara Automaton
Usage:
yaya [-h]  
    -h print this help screen
Commands:
   update - update rulesets
   edit - ban or remove rulesets
   add - add a custom ruleset, located at 
   scan - perform a yara scan on the directory at 

在下一节中,我们将进一步研究LOKI(洛基)……

使用LOKI及其Yara规则集

作为一名安全分析师,你可能需要研究各种威胁情报报告、博客文章等,并且需要收集有关过去或现在使用的最新安全策略和安全技术的信息。通常在这些阅读材料中,一些IOC(哈希值,IP地址,域名等)可被共享,以便我们能够创建Yara规则来检测指定环境中的这些安全威胁;另一方面,你可能会发现自己遇到了未知的情况,这将导致你的安全工具栈无法/没有检测到恶意行为;因此,当我们在使用LOKI等工具时,就需要根据威胁情报收集或者事件响应参与(取证)的具体发现来添加一些自定义的Yara规则。

如前所述,LOKI已经拥有一套Yara规则,我们可以从中受益并能立即开始扫描指定端点上的恶意行为。

在与本文相关的实验环境中,Tryhackme已经为我们提供了Loki工具,我们可以在实验虚拟机的如下目录中找到Loki:

#Listing the tools directory
cmnatic@thm-yara:~/tools$ ls
Loki  yarGen

然后导航到Loki目录,运行python loki.py -h命令即可查看可用的参数选项。

如果是在自己的本地kali机器上运行Loki,则应运行的第一条命令是--update,这将添加signature-base目录,Loki可用它来扫描已知的恶意行为。

如果是使用实验环境所附加的虚拟机来运行Loki,那么--update命令已经在附加的虚拟机中预先执行过了,我们不必重复执行。

#Listing Loki signature-base directory
cmnatic@thm-yara:~/tools/Loki/signature-base$ ls
iocs  misc  yara

我们可以继续导航到如上所示的yara目录,并随意检查Loki所使用的不同Yara文件,以了解这些规则将寻找什么。

要运行Loki以扫描可疑文件,我们可以使用如下的命令(此处我们先切换到了可疑文件所在的目录下):

#Instructing Loki to scan the suspicious file
cmnatic@thm-yara:~/suspicious-files/file1$ python ../../tools/Loki/loki.py -p .

答题

tips:根据相关实验场景完成操作并回答本小节的问题。

本节实验场景:你是一家中型律师事务所的安全分析师,一位同事在公司的web服务器上发现了可疑文件,这些文件是在更新公司网站时发现的。现在,这些文件已被复制到你的机器上供你进行分析,具体文件位于实验机器上的suspicious-files目录下。请使用Loki检查相关恶意文件并回答下面的问题。

部署实验虚拟机,找到suspicious-files目录,使用loki扫描file1目录:

cd suspicious-files
cd file1
python ../../tools/Loki/loki.py -p .    
#loki命令参数-p表示路径(path),而.则表示扫描当前目录,即file1目录
#file1目录下只有一个文件ind3x.php,所以我们实际上扫描的就是ind3x.php

image-20231214191143272

image-20231214192506544

从检测结果的RESULT部分可知:file1是suspicious(可疑)的

从检测结果的REASON_1部分以及随后的MATCH部分可知:file1匹配的Yara规则是webshell_metaslsoft规则

从检测结果的DESCRIPTION部分可知:Loki 将此文件分类为Web Shell

从检测结果的MATCHES部分的第一个字段可知:可疑文件与Yara规则相匹配的是Str1字符串

从检测结果的first_bytes部分的最后一部分字段可知:该可疑文件的名称和版本是b374k 2.2

查看标记file1的实际Yara文件:

nano /home/cmnatic/tools/Loki/signature-base/yara/thor-webshells.yar
#按F6以启用nano中的搜索功能,并输入webshell_metaslsoft,然后再按下enter键

image-20231214193507140

image-20231214193242725

image-20231214193413368

检查标记file1的实际Yara文件,在相关的规则中,我们可以看到有1个strings来标记此文件。

image-20231214195517887

使用loki扫描file2目录:

cd ~/suspicious-files/file2
python ../../tools/Loki/loki.py -p .
#loki命令参数-p表示路径(path),而.则表示扫描当前目录,即file2目录
#file1目录下只有一个文件1ndex.php,所以我们实际上扫描的就是1ndex.php

image-20231214200027284

image-20231214200341215

从检测结果的RESULT部分可知:file2是benign(良性)的

继续查看file2目录下的文件内容:

cmnatic@thm-yara:~/suspicious-files/file2$ ls -l
total 224
-rw-rw-r-- 1 cmnatic cmnatic 223978 Nov  9  2020 1ndex.php
cmnatic@thm-yara:~/suspicious-files/file2$ nano 1ndex.php

image-20231214200701717

image-20231214201003781

相关的web shell的名称和版本是:b374k 3.2.3

tips: https://github.com/b374k/b374k

image-20231214201134575

使用yarGen创建Yara规则

在上一小节的实验操作中,我们发现了一个未被Loki标记的web shell文件,即在实验虚拟机中file2目录下的1ndex.php文件。

因此,我们需要创建一个Yara规则来检测本文实验环境中的这个特定web shell,这种创建Yara规则的操作通常是在发生安全事件(会对组织产生负面影响的事件)的情况下要求我们所做的事情。

我们可以手动打开暂时无法被检测到的可疑文件,并尝试逐行筛选文件中的代码,以找到可以在新创建的Yara规则中使用的字符串。

让我们先检查一下这个特定的文件(1ndex.php)有多少行内容:strings <file name> | wc -l

#Using wc to count the amount of lines in the file 使用wc命令计算文件内容中的行数
cmnatic@thm-yara:~/suspicious-files/file2$ strings 1ndex.php | wc -l
3580

#strings: 这是一个命令,通常用于从二进制文件中提取可打印的字符序列,它会输出文件中的所有字符串。
#1ndex.php: 这是一个文件路径或文件名,它指定了要对其执行strings命令的文件;文件名以.php 表示它是一个PHP脚本文件。
#|: 这是管道符号,它将前面命令的输出传递给后面的命令;在此处,它将strings命令的输出传递给下一个命令。
#wc -l: 这是另一个命令,wc是“word count”的缩写,用于计算文件中的行数、单词数和字节数;在这里,-l参数选项将告诉wc命令只计算行数。

如果你尝试手动逐行遍历这个文件内容中的每个字符串,你应该很快就会意识到这可能是一项艰巨的任务。

#Catting the output of 1ndex.php 捕获1index.php的输出

if(res=='error'){
$('.ulProgress'+ulType+i).html('( failed )');
}
else{
$('.ulRes'+ulType+i).html(res);
}
loading_stop();
},
error: function(){
loading_stop();
$('.ulProgress'+ulType+i).html('( failed )');
$('.ulProgress'+ulType+i).removeClass('ulProgress'+ulType+i);
$('.ulFilename'+ulType+i).removeClass('ulFilename'+ulType+i);
}
});
}

function ul_go(ulType){
ulFile = (ulType=='comp')? $('.ulFileComp'):$('.ulFileUrl');
ulResult = (ulType=='comp')? $('.ulCompResult'):$('.ulUrlResult');
ulResult.html('');

ulFile.each(function(i){
if(((ulType=='comp')&&this.files[0])||((ulType=='url')&&(this.value!=''))){
file = (ulType=='comp')? this.files[0]: this.value;
filename = (ulType=='comp')? file.name: file.substring(file.lastIndexOf('/')+1);

ulSaveTo = (ulType=='comp')? $('.ulSaveToComp')[i].value:$('.ulSaveToUrl')[i].value;
ulFilename = (ulType=='comp')? $('.ulFilenameComp')[i].value:$('.ulFilenameUrl')[i].value;

--snippet cropped for brevity--

幸运的是,我们可以使用yarGen来帮助我们完成筛选字符串的任务。

什么是yarGen?yarGen是YARA规则的生成器。

根据yarGen的Github自述文件所述:“其主要原理是根据恶意软件文件中找到的字符串来创建yara规则,同时删除所有也会出现在良好软件文件中的字符串。因此,yarGen包含了一个大的良好软件字符串和操作码数据库作为ZIP存档,该存档必须在我们第一次使用yarGen之前提取。”

我们可以在实验虚拟机中导航到yarGen目录,它位于tools目录下。

cmnatic@thm-yara:~/tools$ ls
Loki  yarGen
cmnatic@thm-yara:~/tools$ cd ~/tools/yarGen

如果是在自己的本地kali机中运行yarGen,那么我们还需要先运行以下命令来完成关于数据库的更新:python3 yarGen.py --update。此更新命令将从在线存储库中更新包含了良好操作码和良好字符串的数据库,该过程需要几分钟的时间来完成。

成功完成更新后,我们将在相关输出的末尾看到以下消息:

#Updating yarGen 更新yarGen
cmnatic@thm-yara:~/tools/yarGen$ python3 yarGen.py --update
------------------------------------------------------------------------
                   _____
    __ _____ _____/ ___/__ ___
   / // / _ `/ __/ (_ / -_) _ \
   \_, /\_,_/_/  \___/\__/_//_/
  /___/  Yara Rule Generator
         Florian Roth, July 2020, Version 0.23.3

  Note: Rules have to be post-processed
  See this post for details: https://medium.com/@cyb3rops/121d29322282
------------------------------------------------------------------------
Downloading good-opcodes-part1.db from https://www.bsk-consulting.de/yargen/good-opcodes-part1.db ...

要使用yarGen为上一小节的file2生成Yara规则,我们可以运行以下命令:

cmnatic@thm-yara:~/tools/yarGen$ python3 yarGen.py -m /home/cmnatic/suspicious-files/file2 --excludegood -o /home/cmnatic/suspicious-files/file2.yar

对以上参数的简要说明:

  • -m:是我们要为其生成规则的文件的所在路径;
  • --excludegood:强制排除(exclude)所有好的字符串(这些字符串存在于正版软件中,如果不排除可能会增加误报);
  • -o:我们想要输出的Yara规则的位置和名称。

如果一切顺利,我们应该能够看到以下输出结果:

#Using yarGen to generate a rule for file2 使用yarGen为file2生成规则
[=] Generated 1 SIMPLE rules.
[=] All rules written to /home/cmnatic/suspicious-files/file2.yar
[+] yarGen run finished

image-20231214233409494

一般来说,我们还可以检查生成的Yara规则并删除我们认为可能产生误报的任何字符串;但在本小节实验中,我们将保留生成的Yara规则不变并测试该规则是否会标记file2目录中的相关文件。

注意:还有一个可以帮助我们更好地创建Yara规则的工具是——yarAnalyzer,虽然在本文中我们不会展开介绍该工具,但是建议在创建自定义Yara规则时尝试使用该工具。

关于创建Yara规则和使用yarGen的更多相关资料:

答题

tips:部署实验虚拟机,然后完成本小节要求的操作并回答相关问题。

针对实验虚拟机中的file2目录生成新的Yara规则,并使用它来检测上一小节中未被标记的可疑文件(/home/cmnatic/suspicious-files/file2/1ndex.php):

cd ~/tools/yarGen
python3 yarGen.py --update

python3 yarGen.py -m /home/cmnatic/suspicious-files/file2 --excludegood -o /home/cmnatic/suspicious-files/file2.yar

cd /home/cmnatic/suspicious-files/file2
yara /home/cmnatic/suspicious-files/file2.yar 1ndex.php  #此处的语法可以参考第三节中的内容

image-20231214233246828

image-20231214233416269

image-20231214233635019

image-20231214225727974

我们把刚才生成的新Yara规则移动到Loki的signature-base/yara目录中:

mv /home/cmnatic/suspicious-files/file2.yar /home/cmnatic/tools/Loki/signature-base/yara/

使用Loki测试现有的Yara规则能否成功标记file2目录中的可疑文件:

cd /home/cmnatic/suspicious-files/file2
python ../../tools/Loki/loki.py -p . #或者python /home/cmnatic/tools/Loki/loki.py -p .

image-20231214233859765

image-20231214234016039

image-20231214225839109

检查新添加的那个Yara规则,查看其内容:

cd /home/cmnatic/tools/Loki/signature-base/yara/
nano file2.yar

image-20231214234235366

在新Yara规则的内容中包含了 20 个strings

在新Yara规则中限制了文件必须小于700kb

image-20231214225856744

Valhalla介绍

Valhalla是一个在线Yara规则源(Online Yara feed),由Nextron-Systems(Florian Roth) 负责创建和托管。

根据该网站所述,“凭借着数千条人工制作的高质量YARA规则,使用Valhalla将大大提升你的检测能力。”

让我们尝试访问以下链接:https://valhalla.nextron-systems.com/

image-20231214231207333

如上图所示,我们可以根据关键字、标记、 ATT&CK 技术、 sha256或规则名称来进行信息搜索。

我们可以查看Valhalla网站给我们提供的最新规则信息,如下所示:

image-20231214231409183

在上图中,我们可以看到规则的名称、规则的简要描述、规则的日期、以及关于规则的更多信息的参考链接。

tips:了解产品的最好方法就是直接上手,请自行探索Valhalla网站页面。

接下来让我们利用Valhalla来收集威胁情报并完成本小节的答题任务。

答题

为了方便我们使用Valhalla来完成本小节的答题,我们先在实验虚拟机上快速查看一下上文所提及的file1、file2目录下的可疑文件的SHA256散列值:

#我们需要使用到上一小节中所创建的新Yara规则,所以在完成上一小节任务之后,可以先保持虚拟机环境处于启动状态,以便我们在此使用命令查看可疑文件的SHA256值

#查看file1目录中的可疑文件的SHA256值
cd /home/cmnatic/suspicious-files/file1
python ../../tools/Loki/loki.py -p .

#查看file2目录中的可疑文件的SHA256值
cd /home/cmnatic/suspicious-files/file2
python ../../tools/Loki/loki.py -p . #或者python /home/cmnatic/tools/Loki/loki.py -p .

image-20231214234436237

image-20231214234548887

file1目录中的可疑文件的SHA256值为:5479f8cd1375364770df36e5a18262480a8f9d311e8eedb2c2390ecb233852ad

file2目录中的可疑文件的SHA256值为:53fe44b4753874f079a936325d1fdc9b1691956a29c3aaf8643cdbd49f5984bf

在Valhalla网站页面输入file目录中的可疑文件的SHA256值,并查看搜索结果:

image-20231214234904963

image-20231214234848426

该可疑文件是否属于某个APT组织:Yay(是)

在Valhalla网站上对file2目录中的可疑文件执行同样的操作:

image-20231214235546446

最适合检测相关可疑文件的Yara规则的名称是:Webshell_b374k_rule1

检查来自Virus Total(VT)的关于file2目录中的可疑文件的信息(此信息位于VirusTotal页面的Community选项卡上,而不在Detection上)。

回到我们刚才使用Valhalla网站检测file2目录中的可疑文件的结果页面,然后点击页面中的最佳Yara规则所对应的VT链接:

image-20231214235929732

image-20231215000158685

或者在Virus Total中搜索ile2目录中可疑文件的SHA256散列,并查看相关结果中的Community选项卡信息:

image-20231215001224907

相关的Yara签名匹配是来自于哪个扫描器:THOR APT Scanner

将file2目录中的可疑文件的SHA256散列输入VT页面:

image-20231215000540000

是否每个病毒检测的结果都是标记为恶意:Nay(否)

查看Virustotal的“详细信息”选项卡,以查找相关可疑文件的其他扩展名。

image-20231215000912353

image-20231215000928343

除了.PHP,VT还记录了这个可疑文件(file2目录中的)的哪些其他扩展名:exe

回到我们刚才使用Valhalla网站检测file2目录中的可疑文件的结果页面,然后点击页面中的最佳Yara规则所对应的参考链接:

image-20231215001812135

刚才的链接会将我们带到一个Github页面(也就是目标恶意文件的Github项目页面):

image-20231215002105577

我们在此Github页面按control + f搜索扩展名为 .js 的文件:

image-20231215002223388

file2目录中的可疑文件使用了哪个JavaScript库:zepto.js

回到我们所部署的实验虚拟机的终端界面,让我们看看能否在Loki工具的目录中找到上述提及的最佳匹配的Yara规则(Webshell_b374k_rule1):

ls /home/cmnatic/tools/Loki/signature-base/yara/ | grep "Webshell_b374k_rule1"
#无有效返回结果

image-20231215002909480

这个最佳匹配的Yara规则是否在Loki用于检测此类黑客工具的默认Yara文件中:Nay(否)

image-20231215002409693

本文小结

在本文内容中,我们探索了如何简单使用Yara,并且介绍了如何手动创建基本的Yara规则,我们还探索了一些与Yara相关的开源工具,这些工具可以利用Yara规则引擎来检测端点上的恶意行为。

尽管集成了Yara引擎的商业产品也并不完美,但是与常规集成了Yara的开源工具相比,商业产品将拥有更丰富的Yara规则集。无论是集成了Yara的商业产品还是开源工具都将允许我们添加新的Yara规则,以进一步扩展它们检测威胁行为的能力。

有了Yara以及Yara规则,我们可以更好地进行恶意行为检测,请自行探索有关这个工具的更多具体应用。