本文目录导读:

检测系统是否被入侵是一个复杂且需要专业知识的过程。没有任何单一的脚本可以做到100%准确,入侵检测通常依赖于多种手段的综合分析。
以下是一些常用的检测思路和对应的脚本/命令示例,这些脚本可以帮你发现一些常见的入侵痕迹,但请谨慎运行并理解其含义,不建议在未授权的系统上运行。
核心检测思路
- 异常进程与连接:寻找未知的、隐藏的、或外连的可疑网络连接。
- 后门账户与权限:检查是否有新增的、异常的超级用户或系统账户。
- 系统文件完整性:检查关键系统文件是否被修改或替换(如
ls,ps,netstat等)。 - 定时任务与启动项:检查攻击者是否通过
cron,at,systemd等实现了持久化。 - 日志异常:检查登录日志、命令历史等,寻找暴力破解、异常登录时间或 IP。
常用检测脚本/命令 (Linux 系统示例)
以下脚本可以组合成一个bash脚本(如 check_intrusion.sh),但建议逐条手动理解后再运行。
#!/bin/bash
echo "========== 1. 系统基本信息与资源消耗 =========="
# 查看CPU/内存占用最高的进程,寻找异常高负载或未知进程名
ps aux --sort=-%cpu | head -20
echo "---"
ps aux --sort=-%mem | head -20
echo "---"
# 查看网络连接状态,重点关注 ESTABLISHED, LISTEN 状态及外联IP
# 尤其注意连接端口 4444, 31337, 8080等常见后门端口
ss -antp | grep -E 'ESTAB|LISTEN'
netstat -antp 2>/dev/null || ss -antp # 兼容没有netstat的情况
echo ""
echo "========== 2. 异常用户与权限 =========="
# 列出所有用户,检查是否有非正常用户(如 www-data, test, 伪root)
cat /etc/passwd | grep -v '/bin/false\|/sbin/nologin\|/usr/sbin/nologin'
echo "---"
# 检查UID=0的超级用户(正常只有root)
awk -F: '($3 == 0) {print $1}' /etc/passwd
echo "---"
# 检查最近添加的用户
ls -la /etc/passwd /etc/shadow /etc/group
echo ""
echo "========== 3. 检查可疑定时任务 =========="
# 查看所有用户的cron任务
for user in $(cut -f1 -d: /etc/passwd); do echo "Cron tasks for $user:"; crontab -u $user -l 2>/dev/null; done
echo "---"
# 查看系统级cron和关键目录
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
echo ""
echo "========== 4. 检查网络服务与监听端口 =========="
# 监听端口列表,标记非标准端口
ss -tulnp
echo "---"
# 检查隐藏的网络设备或虚拟接口
ip addr | grep -E '^[0-9]'
echo ""
echo "========== 5. 检查历史命令与登录日志 =========="
# 查看root的最近历史命令,寻找可疑操作(如下载未知文件、修改配置)
tail -100 ~/.bash_history
echo "---"
# 检查登录日志,寻找多次失败的SSH登录(暴力破解)
# 需要root权限查看 /var/log/secure 或 /var/log/auth.log
tail -100 /var/log/auth.log 2>/dev/null | grep -i 'failed\|invalid'
echo ""
echo "========== 6. 检查常见的后门文件与隐藏进程 =========="
# 检查 /tmp, /var/tmp, /dev/shm 下是否有可疑脚本或二进制文件
ls -la /tmp /var/tmp /dev/shm
echo "---"
# 使用 lsof 检查被删除但仍在运行的文件(攻击者常用技术)
# 需要安装 lsof
lsof -a +L1 2>/dev/null || echo "lsof not installed, skip."
echo "---"
# 查找SUID文件,攻击者可能利用来提权
find / -perm -4000 -type f 2>/dev/null | grep -v '/usr/bin\|/bin/' # 重点关注非标准路径的SUID
echo ""
echo "========== 7. 内核模块与驱动 =========="
# 查看加载的内核模块,寻找可疑的 rootkit 模块
lsmod | grep -E 'sneaky|hide|back|root|kmod' # 这只是示例关键词,不全面
echo ""
echo "========== 8. 文件完整性初步检查 =========="
# 检查关键二进制文件的MD5是否异常(需提前备份正常值)
# 此处只列出几个关键命令
for cmd in /bin/ls /bin/ps /bin/netstat /bin/ss /usr/sbin/sshd; do
if [ -f $cmd ]; then
md5sum $cmd
fi
done
运行建议与注意事项
- 安全第一:在离线环境或已隔离的系统上运行,入侵者可能已修改
ps,netstat,md5sum等工具,导致结果不可信,建议使用静态编译的版本或 Live CD 系统。 - 静态编译工具:对于高怀疑系统,应使用从USB启动的干净Live Linux系统,挂载硬盘分区后,用外部的
ps,chkrootkit,rkhunter等工具扫描。 - 专业辅助脚本:
- chkrootkit:专门检测rootkit。
- rkhunter:另一个流行的rootkit检测器。
- Lynis: 安全审计工具,功能更全面。
- ossec / Wazuh: 企业级HIDS(主机入侵检测系统),部署在服务器上持续监控。
- 日志的可靠性:入侵者会清理日志(如
history -c, 删除/var/log条目)。日志中没有痕迹不代表没有被入侵。 - 关键异常特征:
- 奇怪的CPU/内存占用:如
./.bash,httpd,httpd2等名字的进程。 - 外联IP:连接至已知的恶意IP或云服务器。
- 不正常的SUID文件:如
/tmp下的文件有s权限。 - 大量失败登录:来自同一IP或分散IP的SSH登录尝试。
- 奇怪的CPU/内存占用:如
- 简单检测:使用上述脚本组合,检查常见入侵点。
- 深度检测:使用
chkrootkit,rkhunter,Lynis。 - 终极方案:如果发现明确入侵痕迹(如木马、后门账户),最安全的做法是备份重要数据(确保不含木马)后,重装操作系统,手动清理非常困难且容易遗漏。
检测脚本是辅助工具,不能替代安全专家的分析和取证流程。