一、清理系统日志:抹除入侵痕迹的核心手段
日志相当于系统的行车记录仪,详细记载着每一次操作的完整脉络。攻击者自然不希望自己的数字足迹被保留,因此清理日志成为首要任务。
CentOS中关键的日志文件位于几个重要位置:/var/log/auth.log(记录登录信息)、/var/log/messages(系统消息)、/var/log/httpd/(Web服务日志),这些文件会忠实地记录攻击者的登录时间、执行过的命令以及修改过的文件。攻击者清理日志时,主要采用以下几种方法:
- 使用
journalctl命令实现精准删除: 在CentOS 7及以上版本中,系统日志由systemd管理,而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天,并自动压缩旧日志。这样一来,日志文件不会无限增长,而早期的入侵痕迹则被完美地掩盖在历史数据之中。
二、木马化系统程序:隐藏进程与文件的关键方法
你以为删除日志就安全了?远非如此。管理员只需运行ps查看进程、使用ls浏览文件、再通过netstat检查网络连接,就能迅速发现蛛丝马迹。因此,攻击者会将目光投向系统本身的核心命令,对其进行“木马化”改造。
具体做法是修改ps、ls、netstat等命令的源代码,在其中植入自定义的过滤逻辑。例如:
- 修改
ps命令: 攻击者在ps命令的源码中添加判断条件,例如“如果某个进程的UID等于8765,则跳过它”。这样一来,攻击者的恶意进程就能隐藏在正常进程之中,而管理员使用ps查看时完全无法发现。 - 修改
ls命令: 原理类似,攻击者会修改ls命令的file_interesting函数,在其中添加规则:“如果文件名包含特定字符串(例如‘...’),则忽略它”。于是,攻击者可以将恶意文件命名为“...”,而ls命令会自动将其视为不存在。 - 修改
netstat命令: 攻击者直接修改netstat的源码,使其自动过滤掉与C2(远程控制服务器)连接的IP或端口。即使恶意程序正在大量发送数据,管理员使用netstat -tulnp查看时,看到的依然是一片平静。
三、隐藏进程与网络连接:规避实时检测的技术
如果你认为仅修改系统命令就万无一失,那还远远不够。真正的高手会采用更底层的技术,直接从系统调用层面进行拦截。
- 隐藏进程:通过
LD_PRELOAD实现进程隐身: 这种手法更为高级。攻击者会编写一个动态链接库(例如将processhider.c编译为libc2.28.so),其中重写了readdir函数。当系统读取进程列表时,该库会默默过滤掉攻击者指定的进程ID。为了持久生效,攻击者会将库的路径写入/etc/ld.so.preload文件(例如echo /usr/local/lib/libc2.28.so >> /etc/ld.so.preload),这样系统启动的任何程序都会自动加载该恶意库,实现永久隐蔽。若要恢复,只需删除该恶意库文件,并清空/etc/ld.so.preload即可。 - 隐藏网络连接:使用反向隧道与加密通信: 为了防止管理员通过
netstat等命令发现异常出站连接,攻击者会采用反向隧道技术(例如Metasploit框架中的reverse_tcp载荷)。将本地端口连接到远程C2服务器的非标准端口(如8080、4444),同时使用TLS对通信内容进行加密。这样一来,流量看起来就像普通的HTTP请求,不易引起注意。此外,攻击者还会开启IP转发功能(echo 1 > /proc/sys/net/ipv4/ip_forward),将流量通过其他主机转发,进一步掩盖真实位置。
四、IP地址欺骗与路由欺骗:隐藏真实来源的进阶手段
要完全消失在网络中,仅靠单机层面的操作远远不够。攻击者会在网络层采用更彻底的欺骗手段。
- IP地址欺骗: 攻击者在发送数据包时,会伪造源IP地址,例如将自己伪装成目标主机信任的内部IP,然后向目标发送SSH登录请求。但这种方法存在明显缺陷——攻击者必须准确猜测TCP序列号才能建立连接,而且由于数据发送到了伪造的IP,发起方无法收到目标的应答。因此,这种方法通常仅用于DoS等攻击,完整会话中很少使用。
- ARP欺骗: 这是局域网内的经典欺骗手段。攻击者在局域网中发送虚假的ARP响应(例如
arp -s 目标IP 攻击者MAC),将目标主机ARP缓存表中网关的MAC地址修改为自己的。这样一来,目标主机发送给网关的所有流量都会流向攻击者。攻击者可以截获、篡改数据(例如窃取密码、注入恶意代码)。为了不被发现,他们通常会同时开启IP转发(echo 1 > /proc/sys/net/ipv4/ip_forward),将捕获的流量再转发给真实网关,使用户几乎察觉不到异常。 - 路由欺骗: 这种手段更为激进。攻击者通过RIP协议(一种内部路由协议)向路由器发送虚假信息,声称“我控制的这台路由器到你的目标路径更短”。路由器信以为真,便会将目标网络的流量全部分发给攻击者。攻击者可以随心所欲地截获、篡改甚至丢弃数据,同时将自己彻底隐藏起来。
五、其他隐藏手段:增强隐蔽性的辅助方法
除了上述常见操作,攻击者还掌握许多奇技淫巧,进一步增强隐蔽性。
- 文件名诡计: 你是否见过使用不可打印字符(例如
\x00)命名文件或目录?攻击者会创建名为“...”的目录(mkdir ".."),然后将恶意程序重命名为“sh”(mv malicious_program sh)。结果就是,ls命令无法显示这个异常目录,ps命令也找不到这个异常进程,因为它们与系统默认内容极为相似。 - 修改系统调用: 这是终极手段。攻击者会编写一个内核模块,拦截
open、read等底层系统调用,在其中添加额外检查:如果文件名匹配攻击者指定的特征,则向用户空间程序(如ls、cat)返回“文件不存在”的错误。这样一来,即使管理员直接进入目录查看,或在命令行输入文件名,程序也无法访问到这些文件。这种隐藏方式隐蔽性极高,但要求攻击者对Linux内核有相当深入的研究。
