恶意软件研究人员的瑞士军刀-yara

恶意软件研究人员的瑞士军刀-yara

yara简介

YARA是旨在(但不限于)帮助恶意软件研究人员识别和分类恶意软件样本的工具。使用YARA,您可以基于文本或二进制模式来创建恶意软件家族的描述(或任何您想描述的)。每个描述(也称为规则)都由一组字符串和一个布尔表达式组成,它们决定了逻辑。让我们来看一个例子:

rule silent_banker : banker
{
    meta:
        description = "This is just an example"
        threat_level = 3
        in_the_wild = true

    strings:
        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}
        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}
        $c = "UVODFRYSIHLNWPEJXQZAKCBGMT"

    condition:
        $a or $b or $c
}

上面的规则告诉YARA,任何包含三个字符串之一的文件都必须报告为silent_banker。这只是一个简单的示例,可以使用通配符,不区分大小写的字符串,正则表达式,特殊运算符以及您将在YARA文档中找到的许多其他功能来创建更复杂,更强大的规则。

YARA是多平台的,可以在WindowsLinuxMac OS X上运行,可以通过其命令行界面使用,也可以从带有yara-python扩展名的Python脚本中使用。

额外资源

如果打算使用YARA扫描压缩文件(.zip,.tar等),则应查看yextend,它是由Bayshore Networks开发和开源的YARA的非常有用的扩展。

此外,InQuest的人员还精心策划了一系列与YARA相关的资料

谁在使用YARA

yara规则

  • AlienVault实验室规则
    • 来自AlienVault实验室的研究人员的工具,签名和规则的集合。在仓库中搜索.yar和.yara扩展名,找到大约两打规则,范围从APT检测到通用沙箱/ VM检测。最后更新时间为2016年1月。
  • 苹果OSX
    • 苹果有约40个YARA签名,可用于检测OSX上的恶意软件。XProtect.yara文件可在/System/Library/CoreServices/XProtect.bundle/Contents/Resources/中本地获得。
  • bamfdetect规则
    • 来自Brian Wallace的自定义规则用于bamfdetect,以及来自其他来源的一些规则。
  • 野蛮人YARA规则 👀
    • 收集个人YARA规则
  • BinaryAlert YARA规则
    • 作为其BinaryAlert工具的一部分,AirBnB编写并发布了几十条规则(请参阅下一节)。在Linux,Window和OS X上检测黑客工具,恶意软件和勒索软件。这是一个新的活跃项目。
  • burp YARA规则
    • 旨在通过Yara-Scanner扩展与Burp代理一起使用的YARA规则的集合。这些规则主要针对通常通过HTTP传送的非exe恶意软件,包括HTML,Java,Flash,Office,PDF等。最近更新于2016年6月。
  • BinSequencer
    • 在一组样本中找到一个通用的字节模式,然后从识别出的模式中生成一个YARA规则。
  • CAPE规则 👀
    • 来自不同作者的规则与Config And Payload Extraction Cuckoo Sandbox扩展捆绑在一起(请参阅下一节)。
  • CDI规则
    • Cyber​​Defenses发布供公众使用的YARA规则集合。根据情报档案,档案和文件工作中的信息构建。
  • 公民实验室恶意软件签名
    • 由市民实验室开发的YARA签名。涵盖各种恶意软件家族的数十个签名。还包括Vim的语法文件。最近一次更新是在2016年11月。
  • ConventionEngine规则 ✨
    • 一组Yara规则寻找具有PDB路径且具有独特,异常或明显具有恶意外观的关键字,术语或其他功能的PE。
  • 死位规则 👀
    • Splunk的首席威胁英特尔Adam Swanda公开了YARA规则的集合。分析师,来自他自己最近对恶意软件的研究。
  • 迪迪埃·史蒂文斯规则 💎
    • 迪迪埃·史蒂文斯(Didier Stevens)收集的规则,这是一套用于检查OLE / RTF / PDF的工具。迪迪埃的规则值得仔细研究,通常是为狩猎而写的。新规则经常通过NVISO Labs博客宣布。
  • ESET IOC 👀
    • 从ESET研究人员收集的IOC中收集YARA和Snort规则。在此仓库中,大约有十几条YARA规则可供收集,搜索文件扩展名.yar。该存储库似乎每月大约更新一次。ESET WeLiveSecurity博客上经常提到新的IOC 。
  • 费德利斯规则
    • 您可以在Fidelis Cyber​​的IOC储存库中找到半打YARA规则。他们大约每季度更新一次此存储库。此存储库中也提供了完整的博客内容。
  • 弗洛里安·罗斯规则 👀 💎
    • 弗洛里安·罗斯(Florian Roth)的签名库是不断更新的IOC和YARA规则的集合,涵盖了广泛的威胁。有数十条正在积极维护的规则。观看存储库,了解规则随着时间的推移而发展,以解决错误的正负值。
  • 弗洛里安·罗斯(Florian Roth)的IDDQD规则
    • 概念验证规则,显示检测红队和威胁组工具及代码实际上有多容易。
  • 弗兰克·博尔德温规则
  • FSF规则
    • 主要是来自EmersonElectricCo FSF项目的文件类型检测规则(请参阅下一节)。
  • GoDaddy ProcFilter规则
    • GoDaddy编写和发布了数十条规则,可与ProcFilter一起使用(请参阅下一节)。规则示例包括检测包装工,mimikatz和特定的恶意软件。
  • h3x2b规则 💎
    • 来自h3x2b的签名集合非常突出,因为它们是通用的,可用于辅助逆向工程。有YARA规则,用于标识加密例程,高度熵的部分(例如,证书发现),发现注入/挂钩功能等等。
  • 冰水规则
    • 来自Icewater.io的自动生成的YARA规则的存储库。该存储库使用新生成的签名进行了快速更新,这些签名在文件大小范围和部分内容散列上基本匹配。
  • 整数规则 ✨
    • Intezer Labs发布的YARA规则。
  • InQuest规则 👀
    • InQuest研究人员发布的YARA规则主要针对Virus Total上的威胁搜寻。随着收集新样本并发现新的关键点,规则也会更新。在审讯博客经常会讨论新的发现。
  • jeFF0Falltrades规则 ✨
    • 各种恶意软件系列的YARA签名集合。
  • kevthehermit规则
    • 凯文·布雷恩(Kevin Breen)个人收藏中的数十条规则。自2016年2月以来,此存储库尚未更新。
  • 卑鄙的社区规则
    • Android APK恶意软件的社区贡献规则。
  • 卢亚拉
    • 规则集,用于扫描Linux服务器的外壳,垃圾邮件,网络钓鱼和其他Web服务器恶意程序。
  • NCC组规则 👀
    • NCC集团的网络防御团队发布了一些YARA规则。
  • Malice.IO YARA插件规则 👀
    • 从各种来源收集有关Malice.IO框架的YARA组件的主题。
  • 马尔代夫自动生成的规则 ✨
    • 一个zip文件,其中包含使用Malpedia的YARA-Signator创建的所有自动生成的基于代码的规则
  • McAfee Advanced Threat Research IOC
    • 包括YARA规则在内的IOC会与McAfee ATR的博客和其他公共帖子一起出现。
  • McAfee Advanced Threat Research Yara-Rules
    • McAfee ATR Teams制定的YARA规则存储库。
  • mikesxrs YARA规则集 👀 🏆
    • 大量开源规则收集自各种来源,包括博客和其他更短暂的来源。超过100个类别,1500个文件,4000条规则和20Mb。如果您要拉下一个回购来玩,那就是那个。
  • 帕特里克·奥尔森规则 💎
    • 少量规则收集,具有广泛的检测范围。RAT,文档,PCAP,可执行文件,内存中,销售点恶意软件等。不幸的是,自2014年下半年以来,该存储库一直没有更新。
  • QuickSand Lite规则
    • 此存储库包含一个C框架和用于恶意软件分析的独立工具,以及为该项目开发的一些有用的YARA规则。
  • Rastrea2r
    • 在数分钟内对可疑系统进行分类,并在成千上万的端点上寻找危害指标(IOC)。
  • ReversingLabs YARA规则 ✨ 👀
    • 由ReversingLabs发布的一系列yara规则,涵盖了漏洞利用程序,信息窃取者,勒索软件,木马和病毒。
  • Sophos AI YaraML规则
    • 自动创建的Yara规则存储库,作为机器学习模型的翻译。每个目录都有一个规则和随附的元数据:训练中使用的文件的哈希值和准确性图(ROC曲线)。
  • SpiderLabs规则
    • SpiderLabs研究人员的与恶意软件分析相关的工具和脚本的资料库。这里只有三个YARA规则,最近一次更新是在2015年,但值得探索。
  • 成立规则
    • Tenable Network Security的少量收藏。
  • TjadaNel规则
    • 一小部分恶意软件规则。
  • VectraThreatLab规则
    • YARA识别反RE恶意软件技术的规则。
  • x64dbg签名 💎
    • 有趣的打包程序,编译器和加密标识签名的集合。
  • 亚拉法医
    • 文件类型标识规则的集合。
  • yara4pentesters
    • 识别包含多汁信息(例如用户名,密码等)的文件的规则。
  • YaraRules项目官方仓库 👀
    • 社区不断更新的大量规则集。
  • 亚拉(Yara-Unprotect)
    • 为Unprotect Project创建的规则,用于检测恶意软件规避技术。

项目地址

GitHub https://github.com/virustotal/yara

yara下载地址

①GitHub: github.com/VirusTotal/yara
②雨苁网盘: https://w.ddosi.workers.dev/

yara安装方法

YARA是在Windows,Linux和Mac OS X上运行的多平台程序。
您可以在https://github.com/VirusTotal/yara/releases找到最新版本。

编译和安装YARA

下载源tarball并准备对其进行编译:

tar -zxf yara-4.0.0.tar.gz
cd yara-4.0.0
./bootstrap.sh

请确保您系统中安装有automakelibtoolmake 并gccpkg-config。Ubuntu和Debian用户可以使用如下命令安装yara:

sudo apt-get install automake libtool make gcc pkg-config

如果您打算修改YARA的源代码,可能还需要flex以及 bison生成词法分析器和解析器的方法:

sudo apt-get install flex bison

以标准方式编译和安装YARA:

./configure
make
sudo make install

运行测试用例以确保一切正常:

make check

YARA的某些功能取决于OpenSSL库。只有在系统中安装了OpenSSL库的情况下,才能启用这些功能。否则,YARA会正常工作,但您将无法使用禁用的功能。该configure脚本将自动检测是否已安装OpenSSL。如果要强制执行与OpenSSL相关的功能,则必须传递 --with-cryptoconfigure脚本。Ubuntu和Debian用户可以 用来安装OpenSSL库。
sudo apt-get install libssl-dev

默认情况下,以下模块未编译为YARA:

  • cuckoo
  • magic
  • dotnet

如果打算使用它们,则必须将相应的参数传递给脚本。--enable-<module name>configure

例如:

./configure --enable-cuckoo
./configure --enable-magic
./configure --enable-dotnet
./configure --enable-cuckoo --enable-magic --enable-dotnet

模块通常取决于外部库,根据您选择安装的模块,您将需要以下库:

  • cuckoo:依赖于Jansson解析JSON。一些Ubuntu和Debian版本已经包含名为的软件包 libjansson-dev,如果对您不起作用,则从其仓库中获取源代码 。sudo apt-get install libjansson-dev
  • magic:取决于libmagic,这是Unix标准程序文件使用的库 。Ubuntu,Debian和CentOS包含一个软件包 libmagic-dev。源代码可以在这里找到 。

使用vcpkg安装

您还可以使用vcpkg依赖性管理器下载并安装YARA :

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install yara

Microsoft团队成员和社区贡献者不断更新vcpkg中的YARA端口。如果版本过时,请在vcpkg存储库上创建问题或请求请求

在Windows上安装

可以在下面的链接中找到32位和64位版本的Windows编译二进制文件。
只需下载所需的版本,解压缩存档,然后将 yara.exe和和yarac.exe二进制文件放在磁盘的任何位置。

下载Windows二进制文件

要使用ScoopChocolatey安装YARA ,只需输入 scoop install yara  或choco install yara
《Scoop》和《Chocolatey》的整合并不是由YARA的作者们各自维护的。

使用Homebrew在Mac OS X上安装

要使用Homebrew安装YARA ,只需键入 。

brew install yara

yara-python安装 

如果您打算从Python脚本中使用YARA,则需要安装 yara-python扩展。请参阅https://github.com/VirusTotal/yara-python 以获得有关如何安装它的说明。

首次运行YARA

现在您已经安装了YARA,您可以编写一个非常简单的规则并使用命令行工具来扫描某些文件:

echo rule dummy { condition: true } > my_first_rule
yara my_first_rule my_first_rule

不要my_first_rule为的参数 重复而感到困惑yara,我只是传递与规则和要扫描的文件相同的文件。您可以传递要扫描的任何文件(第二个参数)。

如果一切顺利,您应该获得以下输出:

dummy my_first_rule

这意味着文件my_first_rule与名为的规则匹配dummy

如果收到这样的错误:

yara: error while loading shared libraries: libyara.so.2: cannot open shared
object file: No such file or directory

这意味着加载程序找不到libyara位于中的库/usr/local/lib。在某些Linux版本中,加载器默认情况下不会在此路径中查找库,我们必须通过添加/usr/local/lib到加载器配置文件中来指示它这样做 /etc/ld.so.conf

sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig

如果您使用Windows PowerShell作为命令shell程序,则可能返回以下错误:yara my_first_rule my_first_rule

my_first_rule(1): error: non-ascii character

您可以通过Set-Content在创建规则文件时使用cmdlet指定ascii输出来避免这种情况:

Set-Content -path .\my_first_rule -Value "rule dummy { condition: true }" -Encoding Ascii
.\yara my_first_rule my_first_rule

yara在windows运行演示

解压—cd到该目录下,输入 yara64 –help

C:\Users\ddos1\Desktop\yara-v4.0.2-1347-win64>yara64 --help
YARA 4.0.2, the pattern matching swiss army knife.
Usage: yara [OPTION]... [NAMESPACE:]RULES_FILE... FILE | DIR | PID

长选项的强制参数对于短选项也是强制的。

       --atom-quality-table=FILE        带有atom质量表的文件的路径
  -C,  --compiled-rules                 导入编译规则
  -c,  --count                          只输出匹配的数量
  -d,  --define=VAR=VALUE               定义外部变量
       --fail-on-warnings               失败的警告
  -f,  --fast-scan                      快速匹配模式
  -h,  --help                           显示帮助并退出
  -i,  --identifier=IDENTIFIER          仅输出命名为标识符的规则
  -l,  --max-rules=NUMBER               在匹配大量规则后终止扫描
       --max-strings-per-rule=NUMBER    设置每个规则的最大字符串数(默认值为10000)
  -x,  --module-data=MODULE=FILE        将文件内容作为额外数据传递给模块
  -n,  --negate                         只输出不满足的规则(否定)
  -w,  --no-warnings                    禁用警告
  -m,  --print-meta                     输出元数据
  -D,  --print-module-data              输出模块数据
  -e,  --print-namespace                输出规则的名称空间
  -S,  --print-stats                    输出规则的统计数据
  -s,  --print-strings                  输出匹配的字符串
  -L,  --print-string-length            输出匹配字符串的长度
  -g,  --print-tags                     打印标签
  -r,  --recursive                      递归搜索目录(在符号链接后面)
       --scan-list                      扫描文件中列出的文件,每行一个
  -k,  --stack-size=SLOTS               设置最大堆栈大小(默认=16384)
  -t,  --tag=TAG                        只打印标记为标签的规则
  -p,  --threads=NUMBER                 使用指定数目的线程扫描目录
  -a,  --timeout=SECONDS                在给定的秒数后中止扫描
  -v,  --version                        显示版本信息

可发送bug报告和建议到该邮箱: vmalvarez@virustotal.com

更多操作说明使用方法请自行查阅如下yara说明书

yara说明书

https://yara.readthedocs.io/en/stable/