liunx服务异常分析

systemd-journald 服务分析系统日志

实验环境:本地 Centos 7 请勿在 vps 服务器上操作!!!

1 systemd-journald 介绍

systemd-journald 是一个收集并存储各类日志数据的系统服务。 它创建并维护一个带有索引的、
结构化的日志数据库, 并可以收集来自各种不同渠道的日志。

systemd 是内核启动后的第一个用户进程,PID 为 1,是所有其它用户进程的父进程。所有服务的
启动运行日志都可以记录到 systemd-journald 中,日志守护进程会以安全且不可伪造的方式自动收集
每条日志的元数据。默认情况日志是存储在内存中的,系统重启后都会丢失。

黑客入侵系统后一般会将系统日志清空,以达到清理痕迹的作用,如果日志被黑客清空我们就无法通
过日志来分析黑客入侵系统后都做了哪些事情,/var/在很多情况下黑客在清理日志的时候都会忽略内存
中的日志。

2 systemd-journald 持久化配置

由于日志默认存储在内存中,重启就会失效,如果想保存日志可以通过持久化配置将日志保存到本
地。

默认的配置文档中所有的参数都是默认值。

[root@xuegod63 ~] vim /etc/systemd/journald.conf 
[Journal] 
#Compress=yes 
#Seal=yes 
#SplitMode=uid 
#SyncIntervalSec=5m 
#RateLimitInterval=30s 
#RateLimitBurst=1000 
#SystemMaxUse= 
#SystemKeepFree= 
#SystemMaxFileSize= 
#RuntimeMaxUse= 
#RuntimeKeepFree= 
#RuntimeMaxFileSize= 
#MaxRetentionSec= 
#MaxFileSec=1month 
#ForwardToSyslog=yes 
#ForwardToKMsg=no 
#ForwardToConsole=no 
#ForwardToWall=yes 
#TTYPath=/dev/console 
#MaxLevelStore=debug 
#MaxLevelSyslog=debug 
#MaxLevelKMsg=notice 
#MaxLevelConsole=info 
#MaxLevelWall=emerg 
#LineMax=48K 

新建一个配置文档,模板文件我们就不修改了。

[root@xuegod63 ~] mkdir /etc/systemd/journald.conf.d 
[root@xuegod63 ~] vim /etc/systemd/journald.conf.d/99-prophet.conf 
[Journal] 
# 持久化保存到磁盘 
Storage=persistent 
# 压缩历史日志 
Compress=yes 
SyncIntervalSec=5m 
RateLimitInterval=30s 
RateLimitBurst=1000 
# 最大占用空间 10G 
SystemMaxUse=10G 
# 单日志文件最大 200M 
SystemMaxFileSize=200M 
# 日志保存时间 2 周 
MaxRetentionSec=2week  
# 不将日志转发到 syslog 
ForwardToSyslog=no 

Storage 参数详解:
“volatile” 表示仅保存在内存中,也就是仅保存在/run/log/journal 目录中(将会被自动按需创建)。

“persistent” 表示优先保存在磁盘上, 也就优先保存在 /var/log/journal 目录中(将会被自动按
需创建), 但若失败(例如在系统启动早期"/var"尚未挂载), 则转而保存在 /run/log/journal 目录中
(将会被自动按需创建)。

“auto”(默认值) 与 “persistent” 类似, 但不自动创建 /var/log/journal 目录, 因此可以根据
该目录的存在与否决定日志的保存位置。
“none” 表示不保存任何日志(直接丢弃所有收集到的日志), 但日志转发(见下文)不受影响。 默认
值是 “auto”

重启服务使配置文件生效

[root@xuegod63 ~] systemctl restart systemd-journald 

配置持久化后日志文件从临时文件目录/run/log/journal 保存至/var/log/journal 目录

[root@xuegod63 ~] ll /var/log/journal/ 
drwxr-xr-x 2 root root 28 Nov 5 15:44 054c89aaafa04dccbc3f844cfd502639 

缺点:文件体积大,也容易被发现。

3 journalctl 查询日志

直接查询,默认查询规则是从旧到新排序。

[root@xuegod63 ~] journalctl 

liunx服务异常分析_第1张图片

从新到旧排序使用-r 参数

[root@xuegod63 ~] journalctl -r 

liunx服务异常分析_第2张图片

查看指定服务日志

[root@xuegod63 ~] journalctl -u sshd 

在这里插入图片描述
对比系统日志文件

[root@xuegod63 ~] tail -n 4 /var/log/secure 

在这里插入图片描述
系统日志多一条 pam_unix

实时查看最新日志。

[root@xuegod63 ~] journalctl -f

liunx服务异常分析_第3张图片

1、新建终端安装软件

[root@xuegod63 ~] yum install -y lsof 

2、返回实时日志窗口查看

Nov 05 16:01:38 xuegod63.cn yum[10338]: Installed: lsof-4.87-6.el7.x86_64 

问题:Centos 默认不记录系统命令 Ctrl+c 关闭实时窗口,配置系统日志记录系统命令。

3、配置文件中将 PROMPT_COMMAND 输出到系统日志中

[root@xuegod63 ~] vim /etc/bashrc 
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: 
$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' 
readonly PROMPT_COMMAND 

构造消息日志过程:首先通过 history 1 取出当前执行的命来,$?获取该命令执行的返回值。

4、 logger -p local6.debug 自定义消息日志。

readonly PROMPT_COMMAND 设置为只读,防止被修改。

配置完成后重新打开终端窗口即可成效。

注:该配置也可配置到/etc/profile 中,两个位置都可以。

[root@xuegod63 ~] ifconfig 

5、查看实时日志

[root@xuegod63 ~]# journalctl -f 
Nov 05 16:50:19 xuegod63.cn root[10780]: root [10734]: 2021-11-05 16:50:19 $ifconfig 
[0] 

由于前面我们通过配置/etc/profile 对系统日志记录格式进行了自定义,所以这里获取到的信息会有
2 个时间戳,如果觉得重复可以去除/etc/profile 中对历史命令的自定义。

指定查询时间

[root@xuegod63 ~] journalctl --since "2021-11-05 00:00:00" --until "2021-11-05 17:00:00" 

–since 定义开始时间
–until 定义结束时间
两个参数可以单独指定,仅指定开始日期获取开始日期后所有日志,仅指定结束日期获取结束日期前
所有日志。日期格式必须是:YYYY-MM-DD HH:MM:SS

指定输出格式

[root@xuegod63 ~] journalctl -o short-precise 

liunx服务异常分析_第4张图片

输出的时间更加精细,日志信息简洁。

输出详细信息

[root@xuegod63 ~] journalctl -o verbose 

liunx服务异常分析_第5张图片

可信字段是指名称以下划线开头的字段。 这些字段由日志守护进程添加,客户端无法掌控这些字段
的内容, 因此是"可信的"。详细信息中的字段都可以作为查询条件使用。

通过可信字段查询指定用户的日志

[root@xuegod63 ~] journalctl _UID=0 -n 5 

liunx服务异常分析_第6张图片

注:可信字段必须带有下划线

实战清理系统日志后使用 systemd-journald 分析日志

新建用户

[root@xuegod63 ~] useradd xuegod 
[root@xuegod63 ~] echo "123456" | passwd --stdin xuegod 

kali 通过 xuegod 用户登录 centos

┌──(root xuegod53)-[~] 
└─ ssh [email protected] 

切换到 root 用户

[xuegod@xuegod63 ~]$ su - root 

小伙子非常凶狠直接清空了日志

[root@xuegod63 ~] echo > /var/log/secure 
[root@xuegod63 ~] echo > /var/log/messages 
[root@xuegod63 ~] echo > /var/log/lastlog 
[root@xuegod63 ~] echo > /var/log/wtmp 
[root@xuegod63 ~] echo > /var/log/btmp 

登录系统进行排查

[root@xuegod63 ~] last 

wtmp begins Fri Nov 5 17:46:48 2021

[root@xuegod63 ~] lastlog 

liunx服务异常分析_第7张图片

可以看到日志都被删除了无法得知黑客做了什么。

查看日志文件修改时间

[root@xuegod63 ~] cd /var/log/ 
[root@xuegod63 log] stat secure 
 File: ‘secure’ 
 Size: 365 Blocks: 8 IO Block: 4096 regular file 
Device: fd00h/64768d Inode: 34004243 Links: 1 
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) 
Access: 2021-11-05 17:44:43.990999926 +0800 
Modify: 2021-11-05 17:46:48.017997318 +0800 
Change: 2021-11-05 17:46:48.017997318 +0800 
 Birth: - 

得知文件是 17:46 被修改。

查询 17:46 前所有日志,避免误差,加一分钟 17:47,实战中前后信息都要看。查看文件时间只能
确认这个时间内这个文件被修改了,并不是绝对时间。

搜索关键词

[root@xuegod63 log] journalctl --until "2021-11-05 17:47:00" -o short-precise 
/secure  

liunx服务异常分析_第8张图片

可以看到黑客通在 192.168.1.53 通过 ssh 服务登录 xuegod 用户,su - root 切换到 root 用户清
空了日志。

你可能感兴趣的:(运维文档,网络安全专栏,linux,安全威胁分析,web安全)