脚本如何检测系统是否被入侵

wen 实用脚本 3

本文目录导读:

脚本如何检测系统是否被入侵

  1. 核心检测思路
  2. 常用检测脚本/命令 (Linux 系统示例)
  3. 运行建议与注意事项

检测系统是否被入侵是一个复杂且需要专业知识的过程。没有任何单一的脚本可以做到100%准确,入侵检测通常依赖于多种手段的综合分析。

以下是一些常用的检测思路和对应的脚本/命令示例,这些脚本可以帮你发现一些常见的入侵痕迹,但请谨慎运行并理解其含义,不建议在未授权的系统上运行。

核心检测思路

  1. 异常进程与连接:寻找未知的、隐藏的、或外连的可疑网络连接。
  2. 后门账户与权限:检查是否有新增的、异常的超级用户或系统账户。
  3. 系统文件完整性:检查关键系统文件是否被修改或替换(如 ls, ps, netstat 等)。
  4. 定时任务与启动项:检查攻击者是否通过 cron, at, systemd 等实现了持久化。
  5. 日志异常:检查登录日志、命令历史等,寻找暴力破解、异常登录时间或 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

运行建议与注意事项

  1. 安全第一:在离线环境已隔离的系统上运行,入侵者可能已修改 ps, netstat, md5sum 等工具,导致结果不可信,建议使用静态编译的版本或 Live CD 系统。
  2. 静态编译工具:对于高怀疑系统,应使用从USB启动的干净Live Linux系统,挂载硬盘分区后,用外部的 ps, chkrootkit, rkhunter 等工具扫描。
  3. 专业辅助脚本
    • chkrootkit:专门检测rootkit。
    • rkhunter:另一个流行的rootkit检测器。
    • Lynis: 安全审计工具,功能更全面。
    • ossec / Wazuh: 企业级HIDS(主机入侵检测系统),部署在服务器上持续监控。
  4. 日志的可靠性:入侵者会清理日志(如 history -c, 删除 /var/log 条目)。日志中没有痕迹不代表没有被入侵
  5. 关键异常特征
    • 奇怪的CPU/内存占用:如 ./.bash, httpd, httpd2 等名字的进程。
    • 外联IP:连接至已知的恶意IP或云服务器。
    • 不正常的SUID文件:如 /tmp 下的文件有 s 权限。
    • 大量失败登录:来自同一IP或分散IP的SSH登录尝试。
  • 简单检测:使用上述脚本组合,检查常见入侵点。
  • 深度检测:使用 chkrootkit, rkhunter, Lynis
  • 终极方案:如果发现明确入侵痕迹(如木马、后门账户),最安全的做法是备份重要数据(确保不含木马)后,重装操作系统,手动清理非常困难且容易遗漏。

检测脚本是辅助工具,不能替代安全专家的分析和取证流程。

抱歉,评论功能暂时关闭!