系统日志是攻击者留下的“数字脚印”的主要载体,CentOS系统中的日志文件(如/var/log/auth.log
记录登录信息、/var/log/messages
记录系统消息、/var/log/httpd/
记录Web服务日志)会详细记录攻击者的登录行为、命令执行、文件修改等活动。攻击者通常会通过以下方式清理日志:
journalctl
是清理日志的核心工具。攻击者可通过journalctl --vacuum-time=3d
删除3天前的旧日志,或journalctl --vacuum-size=100M
将日志文件大小限制在100MB以内,保留最新日志以维持系统正常运行;还可通过journalctl --vacuum-by-service=ssh.service
针对性清理SSH服务的日志,消除登录痕迹。/var/log
目录下的特定日志文件(如/var/log/secure
记录SSH登录、/var/log/wtmp
记录用户登录历史),或使用rm -rf /var/log/*
清空整个日志目录。为避免系统因缺少日志无法排查问题,部分攻击者会先备份日志(如cp -r /var/log /var/log_backup
)再删除。logrotate
工具设置日志自动轮转策略(如/etc/logrotate.d/ssh
配置文件),将日志按天分割、保留7天并压缩旧日志(如daily rotate 7 compress missingok notifempty create 640 root adm
),使日志文件不会无限增长,同时隐藏早期的入侵痕迹。攻击者会修改系统关键程序(如ps
、ls
、netstat
),使其跳过自身进程或隐藏特定文件,避免被管理员通过常规命令发现:
ps
命令的源代码中添加过滤逻辑(如if (sb.st_uid == 8765) continue;
),使ps
命令跳过UID为8765的进程(攻击者进程),从而隐藏恶意进程。修改后的ps
命令会正常显示其他进程,但不会暴露攻击者的活动。ls
命令的file_interesting
函数(如if (strstr(next->d_name, "...")) return 0;
),使ls
命令忽略名称包含特定字符串(如“…”)的文件或目录。攻击者可将恶意文件命名为“…”,从而隐藏在ls
命令的输出中。netstat
命令的源代码,隐藏与C2服务器(攻击者控制的远程服务器)的连接(如过滤特定IP或端口),使管理员无法通过netstat -tulnp
查看异常网络连接。攻击者通过特殊技术使恶意进程或网络连接不被常规工具检测到:
LD_PRELOAD
环境变量加载恶意库(如processhider.c
编译的libc2.28.so
),该库会拦截readdir
等系统调用,过滤掉特定进程(如攻击者进程)。攻击者需将恶意库路径添加到/etc/ld.so.preload
文件中(如echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preload
),使系统在启动所有进程时自动加载该库,从而隐藏进程。清理时只需删除恶意库文件并清空/etc/ld.so.preload
即可恢复进程可见性。reverse_tcp
payload),将本地端口连接到远程C2服务器的非标准端口(如8080、4444),并通过加密通信(如TLS)隐藏流量内容。此外,攻击者还会修改/proc/sys/net/ipv4/ip_forward
为1(echo 1 > /proc/sys/net/ipv4/ip_forward
),开启IP转发功能,将流量转发到其他主机,进一步隐藏自身位置。攻击者通过伪造IP地址或修改路由表,使流量看起来来自其他主机,规避源追踪:
arp -s 目标IP 攻击者MAC
),将目标主机的ARP缓存表中的网关MAC地址替换为自己的MAC地址。这样,目标主机的所有流量都会发送到攻击者主机,攻击者可截获并篡改流量(如窃取密码、注入恶意代码)。为避免被发现,攻击者会开启IP转发(echo 1 > /proc/sys/net/ipv4/ip_forward
),将流量转发到真正的网关。\x00
)命名文件(如“…”目录),或重命名恶意程序为系统命令(如“sh”),使ls
或ps
命令无法正常显示。例如,创建名为“…”的目录(mkdir ".."
),将恶意程序重命名为“sh”(mv malicious_program sh
),这样ls
命令不会显示异常目录,ps
命令不会显示异常进程。open
、read
等系统调用,隐藏特定文件或进程。例如,内核模块会检查文件名,若为攻击者文件则返回“文件不存在”的错误,使ls
或cat
命令无法访问该文件。这种方法隐蔽性极高,但需要对内核有深入了解。