应急响应-linux日志分析
# linux日志分析
# 前置知识补充
常见日志文件
Linux系统中的日志文件通常存储在/var/log
目录下,记录下我感兴趣的日志文件
- /var/log/syslog:记录系统的各种信息和错误。
- /var/log/auth.log:记录身份验证相关的信息,如ssh登录和认证失败。
- /var/log/httpd/:记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
- /var/log/nginx/:记录Nginx服务器的访问和错误日志(若安装了Nginx)。
- /var/log/secure:记录安全相关的消息。
- /var/log/kern.log:记录内核生成的日志信息。
- /var/log/dmesg:记录系统启动时内核产生的消息。
- /var/log/boot.log:记录系统启动过程中的消息。
- /var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。
一些重点日志
/var/log/auth.log
auth.log 会记录ssh登录,sudo权限等内容。它通常包含系统关于用户登录、登录失败、权限提升(如 sudo 操作)、认证请求、会话启动和关闭等方面的信息。
- 用户注册:"new user",创建新的用户
- 用户登录:成功的
SSH
登录(通过sshd
服务),登录的时间、用户名、来源 IP 地址等信息 - 登录失败:失败的
SSH
登录尝试,登录的时间、用户名、来源 IP 地址等信息 - 用户注销:用户注销信息,包括成功或失败的会话关闭
- 权限提升:用户尝试使用
sudo
或其他权限提升命令,包括成功或失败的尝试 - su 命令(切换用户):用户通过 su 命令切换用户的日志,记录目标用户和源用户
- SSH 公钥认证:使用公钥认证登录过程,会记录登录成功失败的信息
/var/log/syslog
系统级别的日志文件,可能会包含 useradd、adduser 或 usermod 等命令的相关记录。
Nov 18 12:34:56 server useradd[12345]: new user 'testuser' added
/var/log/nginx/access.log
Nginx 的访问日志,记录了所有客户端对 Nginx 服务器的访问请求,包括请求的 URL、请求方法、客户端 IP 地址、响应状态码、响应大小等信息。
# 环境及要求
账号root密码linuxrz
ssh root@IP
- 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
- 2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
- 3.爆破用户名字典是什么?如果有多个使用","分割
- 4.登陆成功的IP共爆破了多少次
- 5.黑客登陆主机后新建了一个后门用户,用户名是多少
# 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割
linux日志系统会保存ssh的记录,一般来说,SSH登录尝试会记录在 /var/log/auth.log.1(这是固定的)
常见的爆破攻击痕迹
- 攻击者在用暴力破解的方式测试不同的用户名和密码
- Failed password for root from 192.168.1.100 记录到某ip爆破root用户
- Failed password for invalid user admin from 192.168.1.100 记录到某ip尝试爆破不存在的admin用户
Nov 18 12:34:56 server sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:34:57 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
Nov 18 12:34:58 server sshd[12345]: Connection closed by authenticating user root 192.168.1.100 port 54321 [preauth]
2
3
查看auth.log
文件,找找包含"Failed password for root"的记录,提取ip
cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more
- cat auth.log.1 将日志文件 auth.log.1 的内容输出到标准输出
- grep -a "Failed password for root" 过滤日志文件中的内容,仅保留包含字符串 Failed password for root 的行
- awk '{print $11}' 在
SSH
日志中,第 11 列通常是登录尝试来源的 IP 地址,提取ip - sort 对提取出的 IP 地址进行排序
- uniq -c 统计每个
IP
爆破次数 - sort -nr 按次数降序排序
- more 分页显示结果
4 192.168.200.2
1 192.168.200.32
1 192.168.200.31
2
3
flag{192.168.200.2,192.168.200.32,192.168.200.31}
# 2.ssh爆破成功登陆的IP是多少,如果有多个使用","分割
关于ssh
登录成功的日志记录信息
Ubuntu/Debian 系统
日志存储在 /var/log/auth.log 中,登录成功的记录类似:
Nov 18 12:45:10 server sshd[12345]: Accepted password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:45:10 server sshd[12345]: pam_unix(sshd:session): session opened for user root by (uid=0)
2
CentOS/RHEL 系统
日志存储在 /var/log/secure 中,登录成功的记录类似:
Nov 18 12:45:10 server sshd[12345]: Accepted password for root from 192.168.1.100 port 54321 ssh2
Nov 18 12:45:10 server sshd[12345]: pam_unix(sshd:session): session opened for user root by (uid=0)
2
找一下成功登录的ip记录
cat auth.log.1 | grep -a "Accepted " | awk '{print $11}' | sort | uniq -c | sort -nr | more
flag{192.168.200.2}
# 3.爆破用户名字典是什么?如果有多个使用","分割
在ssh日志中,登录失败的记录中,会记录尝试的用户名
Nov 18 12:34:57 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
查一下爆破的用户名
cat auth.log.1 | grep -a "Failed password for invalid user" | awk '{print $11}' | sort | uniq -c | sort -nr | more
执行的结果:
5 user
5 hello
5 from
1 test3
1 test2
1 test1
2
3
4
5
6
这里是错的,惯性思维直接简单修改了一下上面的命令。在匹配类似日志时,错误的匹配到了一个from
,这是为什么?把包含Failed password for invalid user
的行整个都打出来看看
ctf@linux$ cat auth.log.1 | grep -a "Failed password for invalid user"
Aug 1 07:40:50 linux-rz sshd[7461]: Failed password for invalid user test1 from 192.168.200.35 port 33874 ssh2
Aug 1 07:41:04 linux-rz sshd[7465]: Failed password for invalid user test2 from 192.168.200.35 port 51640 ssh2
Aug 1 07:41:13 linux-rz sshd[7468]: Failed password for invalid user test3 from 192.168.200.35 port 48168 ssh2
Aug 1 07:46:41 linux-rz sshd[7475]: Failed password for invalid user user from 192.168.200.2 port 36149 ssh2
Aug 1 07:46:47 linux-rz sshd[7478]: Failed password for invalid user user from 192.168.200.2 port 44425 ssh2
Aug 1 07:46:50 linux-rz sshd[7480]: Failed password for invalid user user from 192.168.200.2 port 38791 ssh2
Aug 1 07:46:54 linux-rz sshd[7482]: Failed password for invalid user user from 192.168.200.2 port 37489 ssh2
Aug 1 07:46:56 linux-rz sshd[7484]: Failed password for invalid user user from 192.168.200.2 port 35575 ssh2
Aug 1 07:46:59 linux-rz sshd[7486]: Failed password for invalid user hello from 192.168.200.2 port 35833 ssh2
Aug 1 07:47:02 linux-rz sshd[7489]: Failed password for invalid user hello from 192.168.200.2 port 37653 ssh2
Aug 1 07:47:04 linux-rz sshd[7491]: Failed password for invalid user hello from 192.168.200.2 port 37917 ssh2
Aug 1 07:47:08 linux-rz sshd[7493]: Failed password for invalid user hello from 192.168.200.2 port 41957 ssh2
Aug 1 07:47:10 linux-rz sshd[7495]: Failed password for invalid user hello from 192.168.200.2 port 39685 ssh2
Aug 1 07:47:26 linux-rz sshd[7525]: Failed password for invalid user from 192.168.200.2 port 37013 ssh2
Aug 1 07:47:30 linux-rz sshd[7528]: Failed password for invalid user from 192.168.200.2 port 37545 ssh2
Aug 1 07:47:32 linux-rz sshd[7530]: Failed password for invalid user from 192.168.200.2 port 39111 ssh2
Aug 1 07:47:35 linux-rz sshd[7532]: Failed password for invalid user from 192.168.200.2 port 35173 ssh2
Aug 1 07:47:39 linux-rz sshd[7534]: Failed password for invalid user from 192.168.200.2 port 45807 ssh2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
通过日志可以发现,最后匹配到from的列因为用户名为空,从而匹配到了后面的from
flag{user,hello,test3,test2,test1}
# 4.登陆成功的IP共爆破了多少次
通过要求2可以知道,ip:192.168.200.2
在成功登上root了,找一下他的爆破记录
cat auth.log.1 | grep -a "Failed password for root" | grep -a "192.168.200.2"
Aug 1 07:47:13 linux-rz sshd[7497]: Failed password for root from 192.168.200.2 port 34703 ssh2
Aug 1 07:47:18 linux-rz sshd[7499]: Failed password for root from 192.168.200.2 port 46671 ssh2
Aug 1 07:47:20 linux-rz sshd[7501]: Failed password for root from 192.168.200.2 port 39967 ssh2
Aug 1 07:47:22 linux-rz sshd[7503]: Failed password for root from 192.168.200.2 port 46647 ssh2
2
3
4
# 5.黑客登陆主机后新建了一个后门用户,用户名是多少
查看新建的用户的常见步骤:
确定日志文件:
通常与用户登录和用户管理活动相关的日志文件是 /var/log/auth.log
或其备份文件如 /var/log/auth.log.1
搜索创建用户的关键字:
使用 grep 命令搜索与创建用户相关的关键字,如 new user。这样可以找到所有新建用户的日志条目。
cat /var/log/auth.log.1 | grep -a "new user"
提取新用户信息
从日志中提取新用户的详细信息,包括用户名、创建时间等。
例如,假设你得到了如下输出:
Aug 1 07:50:45 linux-rz useradd[7551]: new user: name=test2, UID=1000, GID=1000, home=/home/test2, shell=/bin/sh
这条日志显示了创建的新用户 test2
分析执行上下文
确认新用户的创建是否由合法用户执行,或是否有可疑的远程登录记录。
可以使用以下命令查找所有用户登录的情况,以确定是否有可疑的登录行为:
grep "Accepted" /var/log/auth.log.1
进一步确认
结合其他日志文件,如 /var/log/syslog
,查看是否有异常的命令执行或系统变更。
**总结
- 确定相关日志文件。
- 搜索特定关键字,找到新用户创建的记录。
- 提取并分析详细信息,确认新用户的合法性。
- 结合其他日志文件,确认是否有异常活动。
在/var/log/auth.log
里查询到新建两个用户,不知道哪个是后门用户
Aug 1 07:50:45 linux-rz useradd[7551]: new user: name=test2, UID=1000, GID=1000, home=/home/test2, shell=/bin/sh
Aug 1 08:18:27 ip-172-31-37-190 useradd[487]: new user: name=debian, UID=1001, GID=1001, home=/home/debian, shell=/bin/bash
2
这道题先创建的test2,后创建的debian,为什么说黑客创建的用户是test2呢?
参考、致谢: