系统入侵检测脚本

代码脚本 · 安全

全面检测系统安全状态,包括异常进程、可疑端口、新增用户、异常登录、SUID文件、计划任务后门、SSH配置等,生成安全审计报告

详细内容

#!/bin/bash # ========================================== # 系统入侵检测脚本 # 用途:全面检测系统安全状态,发现异常和潜在入侵 # 使用方法:bash security_audit.sh # ========================================== LOG_FILE="/var/log/security_audit.log" REPORT_FILE="/tmp/security_report_$(date +%Y%m%d_%H%M%S).txt" mkdir -p "$(dirname "$LOG_FILE")" log_msg() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" "$REPORT_FILE" } section() { echo "" | tee -a "$REPORT_FILE" echo "==========================================" | tee -a "$REPORT_FILE" echo " $1" | tee -a "$REPORT_FILE" echo "==========================================" | tee -a "$REPORT_FILE" } RISK_COUNT=0 add_risk() { local level="$1" local desc="$2" RISK_COUNT=$((RISK_COUNT + 1)) case "$level" in high) echo " 🔴 [高危] $desc" | tee -a "$REPORT_FILE" ;; medium) echo " 🟡 [中危] $desc" | tee -a "$REPORT_FILE" ;; low) echo " 🔵 [低危] $desc" | tee -a "$REPORT_FILE" ;; esac } log_msg "系统安全审计报告" log_msg "主机: $(hostname)" log_msg "时间: $(date '+%Y-%m-%d %H:%M:%S')" log_msg "系统: $(uname -a)" # 1. 异常进程检测 section "1. 异常进程检测" echo " 所有运行进程:" | tee -a "$REPORT_FILE" ps aux --sort=-%cpu | head -15 | tee -a "$REPORT_FILE" # 检测挖矿进程特征 MINING_PROCS=$(ps aux | grep -iE "xmrig|minerd|cpuminer|stratum|monero|nicehash" | grep -v grep) if [ -n "$MINING_PROCS" ]; then add_risk high "发现疑似挖矿进程: $MINING_PROCS" fi # 检测异常高CPU进程 HIGH_CPU=$(ps aux --sort=-%cpu | awk 'NR>1 && $3>80 {print $2" "$11" ("$3"%)"}') if [ -n "$HIGH_CPU" ]; then echo " ⚠️ 高CPU进程:" | tee -a "$REPORT_FILE" echo "$HIGH_CPU" | while read line; do echo " $line" | tee -a "$REPORT_FILE" done fi # 2. 网络连接和端口检测 section "2. 网络连接和端口检测" echo " 监听端口:" | tee -a "$REPORT_FILE" if command -v ss >/dev/null 2>&1; then ss -tlnp 2>/dev/null | tee -a "$REPORT_FILE" else netstat -tlnp 2>/dev/null | tee -a "$REPORT_FILE" fi # 检测异常对外连接 echo "" | tee -a "$REPORT_FILE" echo " 对外连接数Top 10:" | tee -a "$REPORT_FILE" ss -tn 2>/dev/null | awk 'NR>1{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10 | tee -a "$REPORT_FILE" # 3. 用户账号检测 section "3. 用户账号检测" echo " 具有root权限的用户:" | tee -a "$REPORT_FILE" awk -F: '$3==0 {print " "$1" (UID=0)"}' /etc/passwd | tee -a "$REPORT_FILE" ROOT_USERS=$(awk -F: '$3==0 {print $1}' /etc/passwd | grep -v "^root$") if [ -n "$ROOT_USERS" ]; then add_risk high "发现非root用户具有UID=0权限: $ROOT_USERS" fi echo "" | tee -a "$REPORT_FILE" echo " 可登录用户(shell非nologin):" | tee -a "$REPORT_FILE" awk -F: '$7!~/nologin|false/ {print " "$1" ("$7")"}' /etc/passwd | tee -a "$REPORT_FILE" echo "" | tee -a "$REPORT_FILE" echo " sudoers用户:" | tee -a "$REPORT_FILE" grep -v "^#\|^$" /etc/sudoers 2>/dev/null | grep -E "ALL|sudo" | tee -a "$REPORT_FILE" # 4. SSH配置检测 section "4. SSH配置检测" if [ -f /etc/ssh/sshd_config ]; then PERMIT_ROOT=$(grep -i "^PermitRootLogin" /etc/ssh/sshd_config | awk '{print $2}') PASSWORD_AUTH=$(grep -i "^PasswordAuthentication" /etc/ssh/sshd_config | awk '{print $2}') echo " PermitRootLogin: ${PERMIT_ROOT:-默认(yes)}" | tee -a "$REPORT_FILE" echo " PasswordAuthentication: ${PASSWORD_AUTH:-默认(yes)}" | tee -a "$REPORT_FILE" if [ "$PERMIT_ROOT" = "yes" ] || [ -z "$PERMIT_ROOT" ]; then add_risk medium "SSH允许root直接登录,建议禁用" fi if [ "$PASSWORD_AUTH" = "yes" ] || [ -z "$PASSWORD_AUTH" ]; then add_risk low "SSH允许密码登录,建议改用密钥登录" fi fi # 5. 最近登录记录 section "5. 最近登录记录" echo " 最近10条登录记录:" | tee -a "$REPORT_FILE" last -n 10 2>/dev/null | tee -a "$REPORT_FILE" echo "" | tee -a "$REPORT_FILE" echo " 登录失败记录(最近):" | tee -a "$REPORT_FILE" lastb -n 10 2>/dev/null | tee -a "$REPORT_FILE" || echo " (无法读取,需要root权限)" | tee -a "$REPORT_FILE" # 6. SUID/SGID文件检测 section "6. SUID/SGID文件检测" echo " 所有SUID文件:" | tee -a "$REPORT_FILE" find / -perm -4000 -type f 2>/dev/null | head -30 | tee -a "$REPORT_FILE" # 检测异常SUID文件(非标准路径) ABNORMAL_SUID=$(find / -perm -4000 -type f 2>/dev/null | grep -vE "^(/usr/bin/|/bin/|/usr/sbin/|/sbin/|/usr/lib/)") if [ -n "$ABNORMAL_SUID" ]; then add_risk high "发现非标准路径的SUID文件: $ABNORMAL_SUID" fi # 7. 计划任务检测 section "7. 计划任务检测" echo " /etc/crontab:" | tee -a "$REPORT_FILE" cat /etc/crontab 2>/dev/null | grep -v "^#\|^$" | tee -a "$REPORT_FILE" echo "" | tee -a "$REPORT_FILE" echo " /etc/cron.d/:" | tee -a "$REPORT_FILE" ls -la /etc/cron.d/ 2>/dev/null | tee -a "$REPORT_FILE" echo "" | tee -a "$REPORT_FILE" echo " 用户crontab:" | tee -a "$REPORT_FILE" for user in $(cut -d: -f1 /etc/passwd); do crontab -u "$user" -l 2>/dev/null | grep -v "^#\|^$" | while read line; do echo " [$user] $line" | tee -a "$REPORT_FILE" done done # 8. 系统启动项检测 section "8. 系统启动项检测" echo " systemd服务(已启用):" | tee -a "$REPORT_FILE" systemctl list-unit-files --state=enabled 2>/dev/null | grep -v "^#\|^$" | head -30 | tee -a "$REPORT_FILE" # 总结 section "安全审计总结" if [ "$RISK_COUNT" -eq 0 ]; then echo " ✅ 未发现明显安全风险" | tee -a "$REPORT_FILE" else echo " ⚠️ 发现 $RISK_COUNT 个安全风险项,请及时处理" | tee -a "$REPORT_FILE" fi echo "" | tee -a "$REPORT_FILE" echo " 完整报告已保存到: $REPORT_FILE" echo " 日志文件: $LOG_FILE"

适配环境

适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+

依赖环境:bash 4.0+

参数说明

[{"name": "REPORT_FILE", "label": "\u62a5\u544a\u4fdd\u5b58\u8def\u5f84", "default": "/tmp/security_report.txt"}]
安全入侵检测异常进程端口用户审计

更多安全