跳到主要内容
博客安全问题Linode安全摘要 2022年1月23-30日

2022年1月23日至30日Linode安全摘要

Linode安全摘要

本周,我们将介绍一个名为Sysjoker的新的恶意软件标本和一份Linux内存取证指南。尽管取证指南并不全面,当然也不完全详细,但它可能有助于理解使用Volatility进行内存提取和分析过程的基础知识。

Sysjoker后门

在最近的一次 由Intezer发布据悉,作者分析了一个能够在多个操作系统上运行的新后门。根据分析,"Sysjoker "可以在macOS、Linux和Windows上运行。 Sysjoker隐藏在系统更新中,并使用不同的方法来隐藏和改变其命令和控制(C2)服务器的IP地址。

同样令人担忧的是,该样本在VirusTotal扫描中没有问题,这可能表明该后门是相当新的。虽然它用来感染系统的方法在不同的操作系统上是不同的,但一旦它在一个系统上获得持久性,它就开始与C2服务器进行通信。在分析中,Intezer表示,他们还没有看到C2服务器的下一阶段指令。该帖子建议使用内存扫描器来检测该恶意软件。

另一种进行取证分析的方法是转储内存并使用像Volatility这样的知名工具进行分析。在旧版本的Linux内核中,转储内存可以通过使用dd这样的命令行工具从/dev/mem复制虚拟内存来实现;但是,由于潜在的安全问题,这种方法已经被废弃。 

Linux内存取证

我们可以把法医分析概括为在证据获取、证据分析和安全事件后果的记录中使用的不同方法。在确认发生安全漏洞后,通常会进行法医分析,以更好地了解被破坏的系统中发生了什么。有许多证据来源,你可以通过分析来对事件的来源进行辩护;然而,我们只对一个被入侵的Linux系统进行实践性的内存分析,以展示一些你可以使用的方法和工具。

记忆

就性质而言,RAM是不稳定的。它需要不断地通过电源才能发挥作用,而且每次系统重启时它都会被重置。Linux将存储在内存中的数据保存在/dev/mem目录下;然而,在最近的发行版中,不可能直接使用这个分区从内存中提取人工制品。这是因为从Linux内核4.16开始,一个选项(CONFIG_STRICT_DEVMEM)被默认启用,以禁止对这个敏感分区的访问。 

尽管这使得获取内存映像更加困难,但也使得对手(和没有经验的用户)更加难以对系统造成毁灭性的破坏。如果这个选项被禁用,一个拥有系统root权限的攻击者可能会使用mem设备直接向内核注入代码。

我们在我们的一个数据中心为这个演示启动了一个Debian 9 Linode,主机名是 "forensics"。我们将取证箱配置为一个构建和分析环境的例子。虽然没有必要在外部机器上做这些,但篡改持有证据的计算机是不可取的。以下是我们分析的步骤。

  1. 使用一台具有相同操作系统和内核构建/版本的机器为被攻击的系统创建一个Volatility配置文件。
  2. 用你选择的工具(本演示中的AVML)倾倒内存。
  3. 使用你在插件的帮助下为Volatility创建的配置文件检查转储的内存。

警告

由于目前正在进行的Volatility3的兼容性问题,我们将使用Volatility的Python 2资源库进行演示。我们知道对Python 2的支持在2020年结束;这完全是为了演示在受控环境中使用该工具。如果你想跟着指南走,请自行承担风险。

要求

默认情况下,Debian 9 Linodes将缺少一些我们将在这个演示中使用的工具。建议在进行其他说明之前,用以下命令安装所有这些工具。

sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto

挥发性

Volatility框架是一个完全开放的工具集合,在GNU通用公共许可证下用Python ,用于从易失性内存(RAM)样本中提取数字人工制品。

在分析内存转储时,确保使用正确的Volatility配置文件是很重要的。配置文件是一个包含内核数据结构和调试符号信息的文件,可以用来正确解析内存镜像。幸运的是用Volatility创建一个配置文件是非常简单的。你也可以查看Volatility配置文件库中的一些预建的配置文件。

建立一个简介

在安装了必要的工具之后,我们可以开始为它所运行的机器建立我们的Volatility配置文件。

1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info

最初的一行(1)将克隆Volatility仓库到用户的主目录。通过进入(2)~/volatility/tools/linux目录,我们可以使用make (3)来重新编译内核的模块。事先下载好内核头文件是很重要的,否则这个过程可能会失败。 

这就产生了一个module.dwarf。然后下一个命令(4)使用这个模块从/boot读取系统地图,生成我们需要在Volatility中使用的配置文件。然后我们可以把这个配置文件(5)复制到正确的目录中,这样Volatility就可以使用它了。最后,为了验证我们的配置文件是否正确的加载到了Volatility中,我们可以用info标志(6)运行一次Volatility。如果所有的步骤都成功了,我们应该在输出的Profiles部分看到我们的自定义配置文件。

安装隐藏的内核模块

在这个例子中,我们用HiddenWall生成了一个隐藏的Linux内核模块(LKM),将其命名为 "cantfindme",并将其加载到另一个Debian 9 Linode上,内核构建/版本与 "取证 "机器相同。虽然该模块已经被加载,但当lsmodmodprobe在系统上执行时,它是看不到的。 

点击图片放大。

记忆获取

在Linux中,有很多很好的工具可以用来转储内存;然而,在本指南中,我们将使用AVML(Acquire Volatile Memory for Linux),因为LiME在网上经常被报道。AVML是微软为Linux制作的一个开源的内存获取工具。你可以在这里找到最新的版本,并下载二进制文件到你想转储内存的机器上。记住,我们要转储内存的计算机必须具有与我们之前生成的Volatility配置文件相同的内核/操作系统构建和版本。

在现实生活中,重要的是不要篡改被破坏的系统,以确保我们收集的证据在法庭上可以被采纳。同样重要的是,尽可能不要压缩任何图像,因为逐位获取可能会提供压缩后的图像所不能提供的数据。

在将AVML二进制文件下载到主目录后,你可以使用以下命令将系统的内存转储到主目录。

sudo ~/avml ~/output.lime

AVML将以LiME格式转储内存,这样我们就可以用我们创建的Volatility配置文件开始我们的分析。你也可以检查一下转储的大小,确保它与设备上的总内存相匹配。Volatility不应该篡改内存转储,但最好是复制一个文件,在确保它们的哈希值匹配后,分析复制的数据而不是原始数据。

在转储了'pwnd'盒子的内存后,我们已经将其转移到'取证'盒子中进行分析。

波动性插件

Volatility提供了许多插件来帮助法医分析人员。你可以在他们的Github页面找到这些插件的列表。通过使用Volatility的插件,我们可以快速了解内存镜像的情况。分析内存映像的命令格式见下文。

python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>

这是插件linux_hidden_modules的输出,它列出了内存镜像中隐藏的加载的内核模块。

点击图片放大。

这个插件可以帮助你找到隐藏的可能是恶意的Linux内核模块。即使当你在系统上运行lsmod时看不到这些模块,它们也可以被检测到并从内存转储中提取出来。你可以使用linux_moddump插件,通过在regex模式中指定内核模块的名称或指定内存镜像中模块的基本地址来转储内核模块。

点击图片放大。

还有更多可以用波动性来做的事情,我们在这篇文章中根本无法涵盖。欢迎在下面留言,分享你的想法和建议。


注释

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*