来源: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内部构件之美的一个新机会。
网友评论