持久化意味着攻击者能够在系统重启或配置更改后,依然保持对目标系统的访问和控制
本文将深入探讨几种常见的Linux持久化方法,并简要介绍相应的检测和防护策略
一、Linux持久化技术概述 持久化是攻击者渗透系统后的首要目标之一
通过持久化技术,攻击者可以确保在系统重启、用户登录或特定事件发生时,他们的恶意代码或后门依然能够执行
这不仅使攻击者能够持续监控系统状态,还能在系统被重新加固前再次发起攻击
二、创建后门账户 在Linux系统中,创建后门账户是持久化的一种常见手段
攻击者通常会利用系统漏洞(如越权、远程代码执行RCE、本地文件包含LFI等)查看`/etc/passwd`文件,以了解系统中的账户信息
随后,他们可能会使用`useradd`命令创建新的隐藏账户,因为相较于`adduser`,`useradd`提供了更灵活的配置选项,如用户分组、家目录和Shell设置
创建一个没有家目录的用户账户
sudo useradd -M 这个文件位于` 攻击者可以生成自己的SSH密钥对,并将公钥内容添加到目标系统的`authorized_keys`文件中
生成SSH密钥对
ssh-keygen -t rsa -b 2048
将公钥内容复制到authorized_keys文件中
三、利用计划任务
计划任务是Linux系统中另一种重要的持久化手段 攻击者可以通过`crontab`命令或直接在`/etc/cron.`目录下添加计划任务,来在系统特定时间或周期执行恶意脚本
使用`crontab`命令添加计划任务:
编辑当前用户的crontab文件
crontab -e
添加计划任务,例如每分钟执行一次恶意脚本
- /path/to/malicious/script.sh
如果攻击者获得了Root权限,他们还可以在`/etc/cron.d`目录下添加系统级别的计划任务,或者在`/etc/cron.daily`、`/etc/cron.weekly`、`/etc/cron.monthly`等目录下放置恶意脚本,以实现定时执行
此外,`systemd`服务也是实现持久化的一种新方法 攻击者可以创建`.service`和`.timer`文件,来定义一个在特定时间或事件触发时执行的服务
创建service文件
【Unit】
Description=This is a test service
【Service】
ExecStart=/root/test.sh
创建timer文件
【Unit】
Description=This is a test timer
【Timer】
OnBootSec=60
OnCalendar=daily
OnUnitActiveSec=5m
Unit=test-script.service
【Install】
WantedBy=timers.target
启动并启用timer
systemctl daemon-reload
systemctl enable test_timer.timer
systemctl start test_timer.timer
四、修改Shell配置文件
Linux系统中存在多个Shell配置文件,它们可以在用户登录或执行Shell脚本前后执行特定的命令 攻击者可能会将这些配置文件作为持久化的载体,将恶意脚本路径添加到这些文件中
常见的配置文件包括用户级的`~/.bashrc`、`~/.bash_profile`、`~/.profile`,以及系统级的`/etc/bash.bashrc`、`/etc/profile`、`/etc/profile.d`
将恶意脚本添加到/etc/profile中
echo /path/to/malicious/script.sh ] /etc/profile
五、动态链接库劫持
动态链接库(Dynamic Linking Library, DLL)劫持是一种高级持久化技术 在Linux系统中,动态链接器(如`ld-linux.so`)负责在程序运行时加载和链接共享库 攻击者可以通过设置`LD_PRELOAD`环境变量,使动态链接器首先加载他们定义的共享库,从而覆盖程序真正加载的共享库中的符号信息
设置LD_PRELOAD环境变量
export LD_PRELOAD=/path/to/malicious/library.so
这种方法常被用于调试、性能测试,但也可能被恶意软件利用,以实现隐蔽的持久化
六、端口复用与SSH软链接
端口复用技术允许攻击者将特定服务的流量重定向到其他端口,从而绕过防火墙规则 例如,攻击者可能会将SSH服务的流量通过HTTP服务的80端口转发到SSH服务的22端口
配置iptables规则,将80端口的流量重定向到22端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 22
此外,攻击者还可能通过创建SSH软链接来绕过认证机制 他们可以将`/usr/sbin/sshd`链接到其他路径,并配置这些路径以在特定端口上启动SSH服务
七、检测与防护策略
面对上述持久化技术,系统管理员和安全团队需要采取有效的检测和防护策略 以下是一些建议:
1.定期审计账户和权限:定期检查/etc/passwd、`/etc/shadow`和`/etc/group`文件,以及`authorized_keys`文件,确保没有未知或异常账户和密钥
2.监控计划任务:使用工具(如crontab -l和`systemctl list-timers`)定期检查`crontab`和`systemd`计划任务,确保没有未经授权的条目
3.审查Shell配置文件:定期检查Shell配置文件,确保它们没有被篡改或添加恶意脚本
4.加强动态链接库管理:监控LD_PRELOAD环境变量的设置,确保它没有被恶意利用
5.网络流量监控:使用网络监控工具(如tcpdump、`Wireshark`)分析网络流量,检测异常端口复用行为
6.安全日志分析:利用日志分析工具(如Splunk、ELK Stack)对系统日志进行深度分析,以发现潜在的攻击行为
7.定期更新和补丁管理:及时更新系统和应用程序,以修复已知的安全漏洞
8.采用多因素认证:为SSH和其他关键服务启用多因素认证,提高账户安全性
通过综合运用上述策略,系统管理员和安全团队可以显著提高Linux系统的安全性,降低遭受持久化攻击的风险 然而,值得注意的是,安全是一个持续的过程,需要不断的监控、更新和改进