美文网首页
Linux威胁狩猎入门

Linux威胁狩猎入门

作者: Threathunter | 来源:发表于2021-09-13 08:39 被阅读0次

来源:https://medium.com/verint-cyber-engineering/linux-threat-hunting-primer-part-i-dd11b156cb7d

https://medium.com/verint-cyber-engineering/linux-threat-hunting-primer-part-ii-69484f58ac92

第一部分

一、介绍

这篇文章将讨论Linux威胁搜索的主要困境,Linux系统执行威胁搜索的方法,以及如何确定搜索向量。

当我们讨论威胁搜索时,我们假设网络中有一个攻击者,我们想要主动搜索他。为了提高效率,这种搜索应该围绕最有可能被滥用的系统对象进行。在猎杀威胁的过程中,我们面临的主要挑战是筛选我们收集的大量数据。通常,网络中的大多数Linux计算机都是服务器,这对我们来说并不容易——服务器通常生成大量数据。

大量的数据使得寻找异常的过程变得困难。这就是为什么深入了解系统的正常活动和操作系统内部是必要的。

在搜索过程的每个阶段,您都需要停下来思考如何过滤掉操作系统的“已知良好”行为。例如,使用二进制文件的标准路径或默认情况下init运行的内容。另一种方法是根据网络中特定服务器的角色、普通用户和其他独特特性来确定其正常行为的基线。

二、选择一个威胁狩猎载体

你决定要开始狩猎了。您知道您希望关注网络中的Linux服务器(经常被忽略,但目标明确)。

你怎么决定要狩猎什么?

一个好的起点是阅读关于基于Linux的攻击的博客和文章,当然还有MITRE ATT&CK矩阵,它专门针对Linux的威胁,映射到网络攻击链。

在我们的研究中,我们将MITRE ATT&CK矩阵的数据与近年来发布的其他关于Linux恶意软件的统计报告相结合。结合所有这些数据,我们可以可视化基于linux的攻击的统计分布。

首先,我们将看看MITRE Linux黑客技术在攻击链的不同部分之间的联系。

这张图展示了MITRE ATT&CK矩阵的“世界”,包括所有的技术和战术以及它们是如何连接的。我们希望找到最小数量的战术(红色圆圈)覆盖最大数量的技术(蓝色圆圈)。图表中不同实体之间的联系帮助我们理解,为了获得良好的覆盖,只需要寻找一小群战术就足够了。

下一个图表描述了2018年针对基于linux系统的网络攻击中使用的技术,分为MITRE ATT&CK战术。

从这两个图(图1、图2)的统计分布来看,考虑到服务器的关注点,我们可以得出结论,通过寻找三种技术:(1)持久性,(2)防御规避和(3)特权升级,我们可以很好地覆盖常用的技术。

我们将专注于投资回报率最高的战术。因此,这些策略最有可能被恶意工具和恶意软件使用,并且需要最少的投资。

二、最常见的攻击和技术

下面的列表描述了最常见的攻击、技术和战术。这些技术的优先级是根据寻找它们所需的研究和测试工作,而不是它们所提供的价值。对于这些,我们还添加了:常见的自动启动位置,常见的目标目录和生活在土地二进制文件living off the land binaries(使用https://gtfobins.github.io的数据)。请注意,下面所有的技术和战术名称都取自MITRE ATT&CK框架。

最常用的技术(按优先级排序):  

1、脚本Scripting

2、凭证转储  Credential Dumping

3、用户执行   User Execution

4、混淆文件或信息 Obfuscated Files or Information

5、鱼叉钓鱼附件Spearfishing Attachment

6、命令行接口 Command-Line Interface

7、标准应用层协议Standard Application Layer Protocol

8、远程文件复制   Remote File Copy

9、有效的帐户  Valid Accounts

10、文件删除    File Deletion

Linux持久性persistence 技术:

1、隐藏文件和目录Hidden Files and Directories

2、创建账户  Create Account

3、有效的帐户    Valid Accounts

4、当地的作业调度   Local Job Scheduling

5、  Web Shell

6、Bootkit

7、端口敲门 Port Knocking

8、. bash_profile和. bashrc

9、Systemd服务  Systemd Service

10、setuid和setgid

Linux特权提升技术:

1、进程注入 Process Injection

2、有效的帐户Valid Accounts

3、利用特权提升Exploitation for Privilege Escalation

4、 Web Shell

5、sudo缓存 sudo caching

Linux执行execution技术:

1、命令行接口Command-Line Interface

2、脚本 Scripting

3、用户执行 User Execution

4、利用客户端执行 Exploitation for Client Execution

5、当地的作业调度 Local Job Scheduling

Linux窃密 exfiltration 技术:

1、数据加密 Data Encryption

2、数据压缩 Data Compression

3、通过命令和控制通道外窃密 Exfiltration Over Command and Control Channels

4、通过替代协议窃密Exfiltration Over Alternative Protocols

5、计划传输 Scheduled Transfers

Linux防御规避defense evasion技术:

1、文件删除 File Deletion

2、进程注入 Process Injection

3、伪装 Masquerading

4、禁用安全工具 Disabling Security Tools

5、时间戳 Timestamp

6、移除主机指示器 Indicator Removal on Host

7、二进制填充 Binary Padding

三、一个健康的威胁狩猎过程

选择了狩猎矢量和特定的战术,我们将对每种技术执行以下步骤:

1、熟悉组织的网络

2、Linux内部标准行为研究

3、学习如何过滤特定于组织的标准活动(由已知软件、脚本等生成)。

4、研究你想要寻找的异常行为

5、搜索网络中的异常行为

6、创建经过微调的威胁狩猎查询并研究查询输出

需要注意的是,这是一个迭代过程,因此我们可能需要多次重新访问研究步骤,直到查询输出提供所需的精确数据量(具体到足以避免非常大的结果集,但足够宽,不会错过任何可疑的活动)。

在下一篇文章(Linux威胁搜索第二部分)中,我将使用一个特定技术的例子来说明和解释威胁搜索的过程。威胁搜索查询应该在您现有的数据湖或EDR解决方案上实现和使用,以监控网络。请注意,如果不能查询所有数据,就很难甚至不可能在整个网络上执行威胁搜索。

我希望这篇文章能帮助你理解如何开始猎杀威胁的过程,以及如何决定哪种初始投资会有最好的回报。

第二部分

在前一篇文章“Linux威胁搜索入门-第一部分”中,我们讨论了如何启动威胁搜索过程,并回顾了Linux战术和技术的统计分布。我们还创建了在执行ROI估计后进行搜索的技术列表。此外,我们开始列出威胁狩猎过程中所需要的不同阶段。在这篇文章中,我们将描述和演示一个完整的威胁狩猎过程在一个MITRE ATT&CK技术。

我将要展示的所有查询都将使用TPSQL语言(Verint威胁保护系统(TPS)查询语言)。别担心,语言很容易理解。

TPS代理使用各种技术收集数据,包括auditd和自定义内核模块。您可以参考系统上的strace、ptrace和auditd文档或输出,以进一步了解我们将在文章中使用的字段和查询。

一、凭证转储-完整的威胁搜索过程示例

1、阶段0:理解你想要找到的攻击和/或技术

在这一点上有两个重要的问题要问我们自己:

(1)在执行攻击时,攻击者想要完成什么?

(2)他要怎么做呢?

2、什么是凭证转储?

“凭证转储是指从操作系统和软件中获取帐户登录和密码信息的过程,这些信息通常以哈希值或明文密码的形式存在。[MITRE ATT&CK定义,T1003]

在Linux中,滥用/proc目录是这类攻击的最常见操作之一。一种常见的技术是从/proc/[pid]/maps中读取进程的内存,并使用根权限转储/获取密码。

作为演示,我们将检查是否可以在内存转储中找到纯文本密码。对于下面的例子,我使用Linux内存提取器(LiMe),https://github.com/504ensicsLabs/LiME:

“shachar”用户属于sudo组,可以使用该帐户进行权限升级。我使用LiMe转储内存并搜索纯文本密码(使用字符串和grep命令)。

从用户的角度看:

Image 1: The user wanted to perform an action, which required “root” privileges

从攻击者的角度(内存转储):

Images 2–4: I looked for Shachar’s user login action in the memory and for a password pattern

现在我们已经验证了可以在内存中找到一些纯文本密码,显然攻击者也可以利用它来窃取密码。接下来,我们将研究实现这种攻击的不同方法。

3、阶段1:寻找实现此技术的方法

现在我们已经了解了这项技术,我们想要找到实现它的各种方法。例如,攻击的不同阶段涉及哪些系统调用、文件或进程?

在这个阶段,我们将看到实施攻击的恶意工具以及它们是如何进行攻击的。此外,我们将寻找操作系统上的攻击足迹。

阅读之前关于“凭证转储”credential dumping的研究论文(见http://www.foo.be/cours/mssi-20072008/davidoff-clearmem-linux.pdf),证实并强化了我们在上一阶段目睹的行为。研究表明,攻击者可以在不同的进程内存中看到用户的账户信息,如:

通过查看Gnome Display Manager进程内存转储,我们可以看到Linux的ASCII登录密码以及来自/etc/shadow和/etc/passwd.的信息这包括登录影子密码、用户名、长名 long name、UID、GID、主目录和shell。

thunderbird-bin进程内存包含用户的纯文本电子邮件密码、姓名、电子邮件地址、邮件服务器和相关信息。

明文SSH密码以ASCII文本的形式存储在内存映像中的一大块空值中。

4、阶段2:寻找异常

利用我们从这项技术研究中收集的信息。现在,我们将通过关注异常来搜索网络中的可疑行为(寻找使用多个维度的技术:父/子关系、命令行参数、环境变量、帐户、权限、内存等)。

下面的例子将帮助你定义你的搜索:

搜索使用/proc/<pid>/maps, /etc/passwd, /etc/shadow文件或修改/etc/login.defs文件的进程,/etc/login.defs文件提供了一些用户帐户参数的默认配置信息。

请注意useradd、usermod、userdel和groupadd系统命令以及其他用户管理实用程序读取login.defs文件。我们可以研究这些命令与login.defs之间的交互,以便在接下来的调查中过滤掉预期的行为(如误报)

查找对操作系统创建的内存转储文件执行文件活动的用户。

通常,内存崩溃文件位于/var/crash中,但也可以在/var/spool或/var/lib/systemd/ coreump中找到。

Kdump是一个内核崩溃转储工具。可以使用systemctl命令启用该实用程序。我们可以查找如下命令:

$ systemctl enable kdump.service

$ systemctl start kdump.service

此外,我们可以检查是否修改了coredump sysctl config /etc/sysctl.d/50-coredump.conf。以下是可被恶意转储操纵的附加文件:

    /etc/systemd/coredump.conf

    /etc/systemd/coredump.conf.d/*.conf

    /run/systemd/coredump.conf.d/*.conf

    /usr/lib/systemd/coredump.conf.d/*.conf

    /etc/systemd/systemd.conf

我们还可以查看内存转储命令的使用情况,比如:
   1、  gcore

    2、cat /proc/<pid>/maps

    3、gdb -pid <pid> Then in the GDB shell: (gdb) dump memory /root/output offset

以及常见的凭证转储工具,如:
1、mimipenguin

2、3snake

让我们更深入地了解这些工具,从mimipenguin开始。

mimipenguin—Linux用户登录密码转储工具。

为了理解mimipenguin进程活动,我们将看一看进程树。更具体地说,我们将在进程树中搜索gcore工具(见下面-任何在bash→sudo下运行的gcore映像),因为我们知道mimipinguin使用它来转储内存。

通过分析过程树,我们可以发现可疑的亲子关系,了解过程活动:

图5-6:Verint TPS为每个执行的进程构建树。我们可以从这张图中看到,“mimipenguin”在“sudo”进程下运行,“sudo”进程是“bash”的子进程,它创建了一个“dash”子进程,该子进程是“gnome-keyring-daemon”进程(存储密码的服务)的父进程。进程树帮助我们理解流程父-子维度中的完整活动。

在我们从进程树中获得初始引导之后,我们可以进一步研究原始数据并分析参数,如命令行、路径和用户。

image 7-8: Verint的TPS为每个执行的进程提供完整的命令行、image路径、用户和MD5。我们可以在这个图像中看到完整的命令,进程在root用户下以“sudo”权限运行。这对行为分析和威胁捕猎很重要。

(获取完整信息的另一种方法是——结合ps、who、uname、ptrace、strace和file命令的输出)

我们将寻找不在其正常父进程下运行的gnome-keyring-daemon进程。为了理解什么是“正常”,我们将看一看良性的“gnome-keyring”进程树。

图9:我们将从进程树中查看良性“gnome-keyring-daemon”进程的子进程和父进程。

图10:在“Xsession”父进程中查找“gnome-keyring-daemon”全进程树。

总之,我们将寻找没有在以下树下运行的gnome-keyring-daemon:

gdm-session-worker→Xsession→gnome-keyring-daemon→gnome-keyring-daemon

现在我们来看看上面提到的另一个工具“3snake”。

3snake——转储sshd和sudo凭证相关的字符串

通过了解“3snake”如何工作,你可以学习如何在数据中搜索它:

(1)3snake从SSHD和sudo系统调用中读取内存,处理基于密码的身份验证

(2)它不写入被跟踪进程的内存

(3)3snake为运行的每一个SSHD和sudo命令生成一个新进程

(4)使用netlink套接字侦听proc事件,以获取要跟踪的候选进程

当它检测到正在运行的进程使用sshd或sudo时,将附加ptrace并跟踪读写系统调用,提取与基于密码的身份验证相关的字符串。

从上面的分析中,我们可以得出结论,3snake创建了多个线程和进程。我们将寻找一个过度的进程活动 excessive process activity,如下面的进程树:

您应该查找这种异常情况——进程“3snake”的3代多个进程在一个端点上执行。

图11:Verint的TPS为每个执行的进程构建了一棵树。在上面的图片中,我们注意到“3snake”自己多次生成。

第三阶段:过滤掉“正常”活动

在这一阶段,我们将学习网络的正常活动。这将帮助你减少结果的数量。小心你的假设,这样你就不会过滤掉太多的数据或过度适合特定的系统。不要忘记重构查询。当您完成时,检查是否有技术缺失或更多“已知的好”数据需要过滤掉。

在我们的凭证转储搜索中,我们可以做以下工作:

1、确定正常的passwd活动,例如,查找所有的passwd引用作为一个进程或作为一个进程命令行:

图12:TPS端点取证代理从内核收集进程执行信息我们可以在该数据上搜索“passwd”文件/系统命令参考。另一种获取完整信息的方法是——结合“ps”、“who”、“uname”、“ptrace”、“strace”和“file”命令的输出。

2. 查找良性活动的指示器,如full process tree:(systemd→anacron→dash→run-parts→dash→(cmp,chmod,cmp,cp)), user: root

图13:我们可以在该数据上搜索“影子”文件\系统命令参考,以便基线良性活动。

3.检查系统进程正常活动的相关命令(如compgen, getent, passwd, useradd, groupadd, usermod, chsh, chfn, users, id, groups, last, logname, w, who, whoami, members, groupmod, finger, su, gpasswd, chgrp)

4. 搜索/etc/shadow和/etc/passwd是否被同一用户或同时复制(这是使用' John the Ripper ',一种用于密码破解的开源工具来消除阴影 unshadow)。

5. 检查系统二进制活动;尝试通过多个参数(命令行、特权、内存等)指定可疑的活动,以避免白名单完整的二进制文件可能被毒害(即用恶意的二进制文件替换系统二进制文件)。

例如:如果您将“ls”二进制活动(仅根据名称和进程树)列入白名单以避免结果过载,那么在“ls”被恶意文件替换的情况下,您可能会错过恶意活动。

第4阶段:查询、提炼和重复

现在我们已经了解了攻击和正常行为是什么样子的,我们将把两者结合起来,用它来进行威胁捕猎。

搜索内存转储文件

我们将查找不是由abrt进程创建的所有转储文件(abrt,原子错误报告工具,是Linux系统守护进程,它读取进程内存,可能看起来可疑)。

查询的例子:

依赖转储文件名来包含字符串“dump”是不好的,但是为了这个解释,请允许我这样做。

查找使用用户凭证创建活动的进程,例如:

1、在包含密码的文件上执行活动的进程,并且不运行unser“run-parts”,“getnet”或“abrt-watch-log”系统命令,这些都是系统正常活动的一部分。

2、进程的命令行,包括重要的用户控制文件,如 shadow, passwd, login。

3、不要忘记从正常的操作系统行为中过滤子查询的结果(比如“600 shadow.bak”特定命令)

4、在进程命令行中查找转储文件创建

我们将寻找转储工具的活动,例如:

为了查找与用户凭证相关的文件,我们将搜索所有不是由系统用户控制命令创建的/etc/passwd, /etc/shadow文件的活动,例如:

现在,对于每个查询输出,分析数据并尝试更好地理解系统行为。使用关于行为的结论重构查询。此外,过滤掉特定于您的网络的“已知良好”活动(例如,删除SAP实用程序活动)

小心-过滤掉全部命令将降低您检测注射或二进制中毒的能力。

结论

我们描述了一个威胁狩猎过程,包括四个阶段:

1、了解你想要找到的攻击技术

2、研究攻击者如何实现这些技术

3、搜索组织中的可疑数据,发现需要进一步分析的异常

4、过滤掉看起来不正常的正常活动

在细化查询时重复上述过程,直到没有异常或识别出攻击为止。

为了举例说明这个过程的实现,我们使用了来自MITRE ATT&CK Matrix的信息,以及调查了过去针对基于Linux系统的攻击的学术论文,以优先考虑一个狩猎假设。我将重点放在“凭据转储”技术上,因为它是一种常见的、易于理解的技术,而且不需要进行大量研究就可以对其大多数实现进行威胁搜索。

本博客提供的信息包括对恶意数据的查询和已知良好行为的例子,我们可以仔细地列入白名单。每种环境都有其独特的异常。您需要仔细分析您发现的所有异常,并删除那些不能描述对您的网络的真正威胁的异常。这是一个冗长而反复的过程,但最终你将能够得出关于你的狩猎假设的结论。

我希望这篇文章能帮助您对处理Linux威胁搜索变得更加兴奋。我认为,如果你系统地对待每一种战术,你会发现它很有趣。把这段经历看作是看到Linux内部构件之美的一个新机会。

相关文章

网友评论

      本文标题:Linux威胁狩猎入门

      本文链接:https://www.haomeiwen.com/subject/mnwtgltx.html