Part 1: osquery 简介
osquery是适用于 Windows、OSX、Linux 和 FreeBSD 的操作系统工具框架。这些工具使低级操作系统分析和监控既高效又直观。
osquery中的SQL表表示抽象概念,例如运行进程、加载的内核模块、开放式网络连接、浏览器插件、硬件事件或文件哈希。**osqueryi**是osquery交互式查询控制台/shell。它是完全独立的,不与守护进程通信,不需要以管理员身份运行。
**osqueryd**是一个主机监控守护程序,允许我们计划查询和记录操作系统状态更改。守护进程会随着时间的推移聚合查询结果并生成日志,这些日志根据每个查询指示状态的变化。守护进程还使用OS事件API来记录受监控的文件和目录更改、硬件事件、网络事件等。
查询包是一组或一组查询,旨在完成一项功能或任务。查询包通常配置有特定的运行计划,以帮助避免对主机造成任何潜在影响。例如,有用于事件响应、漏洞管理、法规遵从性、已知OS X恶意软件等的查询包。
Part 2: 在Linux系统上安装osquery
Osquery 包可用于大多数跨平台操作系统。我们可以根据使用的操作系统从其官方网站(https://osquery.io/downloads/official/5.2.2)下载所需的包。
我们也可以使用它的 apt 存储库来安装它,因为 osquery 被发布到一个 apt 存储库,而 DEB 的依赖关系非常少,它应该可以在大多数操作系统上运行。可以运行一下命令进行安装:
$ export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $OSQUERY_KEY
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $OSQUERY_KEY
$ sudo apt-get update -y
$ sudo apt-get install osquery
Part 3: Osquery 组件和用法
现在我们已经成功安装了 osquery,现在我们可以访问它的三个有用的组件,它们是 osqueryi、osqueryd 和 osqueryctl。
Osqueryi 是一个完全独立且不与守护进程通信的交互式查询外壳。它不需要以管理员身份运行。它使用 shell 对查询进行原型设计并探索操作系统的当前状态。运行以下命令以查找交互式 shell 可用的所有命令行选项和标志:
osqueryi --help
*** osqueryd是主机监控守护进程,它记录操作系统状态变化并允许您安排*查询。守护程序随时间聚合查询结果并生成日志,这些日志根据每个查询指示状态更改。
osquery 的第三个组件是***osqueryctl***,它被操作系统的服务管理器用来启动/停止/重新启动 osqueryd。它是一个帮助脚本,用于测试部署或配置 osquery。
当我们进入osquery的shell后,我们可以输入.tables命令来查询**数据库表。**
例如:我们想要查询当前安装在系统中的安全存储库(要过滤安全存储库,只需在查询中过滤名称中带有“security”的那些。)
select name,version,source from apt_sources where name LIKE 'security.ubuntu.com/ubuntu focal-security';
Part 4: 启用事件和系统日志
OSQuery
默认情况下不启用事件。您需要先启用基于事件的表才能看到它们。执行以下命令并尝试访问事件表:
SELECT * FROM file_events;
我们可以发现,这里并没有任何输出结果。我们需要对系统配置进行一些修改以启用事件。我们将修改操作系统的 Syslog 应用程序以允许 osquery 使用和查询系统日志。退出 osquery shell 并使用文本编辑器将以下行添加到文件
/etc/rsyslog.conf
中。
template(
name="OsqueryCsvFormat"
type="string"
string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n"
)
*.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")
然后,输入命令就可以看到相应的输出:
SELECT name, platform, version, discovery_executions from osquery_packs where active = 1;
Part 5: 文件完整性监控
为了实现文件完整性监控,我们需要创建一个新的查询包,其中包含将用于文件完整性监控的查询和指令。具体可以查看链接。然后我们可以在osquery的shell中输入命令:
SELECT target_path, action FROM file_events;
这是我们可以发现,命令执行成功但没有事件,所以让我们新的终端中触发一些事件,然后就可以有相应的输出:
Part 6: 使用 YARA 进行恶意软件分析
osquery 中有两个与 YARA 相关的表,它们的用途非常不同。第一个表名为
yara_events
,使用 osquery 的事件框架来监视文件系统更改,并在文件更改事件触发时执行 YARA。第二个表,刚刚称为
yara
,是用于执行按需 YARA 扫描的表。
YARA 示例配置:
{
// Description of the YARA feature.
"yara": {
"signatures": {
// Each key is an arbitrary group name to give the signatures listed
"sig_group_1": [ "/Users/wxs/sigs/foo.yar", "/Users/wxs/sigs/bar.yar" ],
"sig_group_2": [ "/Users/wxs/sigs/baz.yar" ]
},
"file_paths": {
// Each key is a key from file_paths
// The value is a list of signature groups to run when an event fires
// These will be watched for and scanned when the event framework
// fire off an event to yara_events table
"system_binaries": [ "sig_group_1" ],
"tmp": [ "sig_group_1", "sig_group_2" ]
}
},
// Paths to watch for filesystem events
"file_paths": {
"system_binaries": [ "/usr/bin/%", "/usr/sbin/%" ],
"tmp": [ "/Users/%/tmp/%%", "/tmp/%" ]
}
}
首先要注意的是该
file_paths
部分,它用于描述监视更改的路径。每个键是任意类别名称,值是路径列表。使用的语法记录在FIM页面上描述的 osquery 通配符规则中。当由 osquery 扩展时,这些路径会被监视更改并由 file_events表处理。
要注意的第二件事是该
yara
部分,它包含在 osquery 中用于 YARA 的配置。该
yara
部分包含两个键:
signatures
和
file_paths
。
signatures
密钥包含一组任意密钥名称,称为“签名组” 。这些组中的每一个的值都是将在 osquery 中编译和存储的签名文件的路径。签名文件的路径必须是绝对路径(不是相对路径)。该
file_paths
键将全局部分中描述的事件的类别名称映射
file_paths
到扫描时使用的签名分组。
例如,当
/usr/bin/
和中的文件
/usr/sbin/
被更改时,它将被扫描
sig_group_1
,它由
foo.yar
和组成
bar.yar
。当
/Users/%/tmp/
(递归)中的文件更改时,它将使用
sig_group_1
和进行扫描
sig_group_2
,该文件由所有三个签名文件组成。
下面提供了两个 Linux 恶意软件样本的链接。**注意:这些Linux*恶意软件样本是恶意的,在任何情况下都不应打包、编译或执行***。
Sample 1: https://github.com/MalwareSamples/Linux-Malware-Samples/blob/main/e6995b5428e887d790c6b77b32fddc143658ce2125ba192e8255d1ab70db6cacSample 2: https://github.com/MalwareSamples/Linux-Malware-Samples/blob/main/2923843a5ee9f6772b5a2a2c63bf606bd01fcb28bfeaede60a83b49e9a93266b
然后我们需要识别存在的恶意软件字符串用来创建YARA 规则:
恶意软件中存在的字符串不会为您提供全部信息,因为恶意软件样本使用 base64 编码或其他方法进行模糊处理,以保护代码免受恶意软件研究人员或逆向工程的影响。但是,某些字符串未编码,可以提供有关恶意软件的一般情况。(恶意软件分析需要一种调查方法,因为大多数信息都被恶意软件编写者混淆了)。这些字符串以明文形式出现,可能包含系统调用、API 调用或其他硬编码信息(IP 地址、横幅、命令...)等信息。
这里有一段简单的yara rule:
rule sample_rule
{
meta:
description: "YARA Rule"
strings:
$a = {6A 40 60 00 68 6A 8D}
$b = {8A 4D B0 2B}
$c = "DFDSDSDSNEVERSDSDGONNADFDFDGIVEDFDYOUDFDFUPDFDF"
condition:
$a or $b or $c
}
Meta:Meta标签用于提供有关恶意软件的元数据。meta可以包括恶意软件的描述、作者姓名、日期和哈希值。提供散列值是识别特定变量所必需的。
strings:字符串用于检测恶意软件可能包含的字符串$变量可以初始化为存储字符串或二进制值。
Condition:Condition标签用于告诉YARA如何找到字符串
我们可以使用命令:strings sample_1 来查看恶意软件的字符串。**但是**如果我们无法在互联网上发现可接受的Yara规则,我们必须制定自己的规则。通过手动开发Yara规则,您可能会编写过于具体或不够详细的规则。在这种情况下,我们可以考虑使用YARGEN,这是一种强大而通用的快速生成YARA规则的方法。yargen从恶意软件文件或目录生成Yara规则。它通过识别恶意软件文件中的字符串并删除良性文件中出现的已知字符串来开发Yara规则。 There is a tip for How to install yarGen.
运行以下命令确保已安装所有依赖项:
sudo pip install pefile cd
sudo pip install scandir lxml naiveBayesClassifier
然后cd 进入YarGen 目录并运行以下命令下载内置数据库。
python3 yarGen.py —-update
要使用包含的数据库生成规则,只需运行以下命令:
python yarGen.py -m PATH_TO_MALWARE_DIRECTORY -o xxxx.yar
此命令将为 PATH_TO_MALWARE_DIRECTORY 下的恶意软件文件扫描并创建规则。将在当前目录中创建一个名为**yargen_rules.yar的文件,其中包含生成的规则。**
** ** 例如:这里有一个使用yarGen对sample_1创建规则:
Meta Section:
规则的“元”部分包括有关规则的描述、作者、引用、日期和哈希的信息。
Strings Section:
以$s开头的字符串(“非常特定的字符串”)是授权软件中不存在的非常特定的字符串。这些字符串可能包含危险的服务器地址、黑客工具和恶意软件的名称、黑客工具的输出以及常用字符串中的错误。例如,当恶意软件文件试图作为正版软件传递时,可能会包含拼写错误的短语,如“Micorsoft”或“Monitor”。
Condition Section:
在YARA规则中,条件是表示规则额外条件的布尔表达式。
YarGen的条件部分由一个魔法头、文件大小和字符串组成。例如,上述规则中的约束表明,文件还必须满足以下条件才能被归类为“后门”:
1.具有0x457f的魔法头
2.文件小于100KB,
3.“字符串”部分中必须指定8个字符串
然后执行命令:
yara -s -r xxx.yar “Malware_File_Path"
Part 7: 使用 OSQUERY 和 YARA 识别恶意软件样本
我们将 OSquery 与 YARA 集成,我们将使用您的自定义 YARA 规则来识别两个恶意软件样本。带有 OSquery 的 YARA 可用作文件完整性检测和基于签名的检测。在这一部分中,我们将使用我们创建的 YARA 规则执行按需 YARA 扫描以检测恶意软件。参阅 OSquery 文档以获取更多信息。
YARA 配置:
在osquery.conf 文件中进行配置。这是一个示例的osquery 的配置:
{
// Description of the YARA feature.
"yara": {
"signatures": {
// Each key is an arbitrary group name to give the signatures listed
"sig_group_1": [ "/Users/wxs/sigs/foo.yar", "/Users/wxs/sigs/bar.yar" ],
"sig_group_2": [ "/Users/wxs/sigs/baz.yar" ]
},
"file_paths": {
// Each key is a key from file_paths
// The value is a list of signature groups to run when an event fires
// These will be watched for and scanned when the event framework
// fire off an event to yara_events table
"system_binaries": [ "sig_group_1" ],
"tmp": [ "sig_group_1", "sig_group_2" ]
}
}
我们将利用 YARA 表对上述提到的两个 Linux 恶意软件样本执行按需 YARA 扫描。当所有配置准确无误后,我们可以获得以下类似的输出结果:
**Reference: **
[1]https://yara.readthedocs.io/en/stable/gettingstarted.html
[2]https://www.freebuf.com/sectool/238293.html
[3]https://github.com/Neo23x0/yarGen
[4]https://infosecwriteups.com/diving-into-yargen-9e8c00e18b65
版权归原作者 逗猫的狗 所有, 如有侵权,请联系我们删除。