主机入侵痕迹自动化排查工具(Shell 脚本)
cor0ps
cor0ps
Web安全
2026年6月29日 20:00
广东
在小说阅读器读本章
去阅读
服务器遭遇入侵攻击时,逐个人工核查进程、网络、容器、定时任务等风险点耗时费力,排查极易出现遗漏。整理一套适配微服务容器环境的排查脚本,覆盖系统基线、恶意进程、外联会话、容器内部风险、登录审计、后门文件、计划任务等全维度检测,执行后自动生成带时间戳完整审计日志,快速定位入侵痕迹,大幅缩短应急溯源处置时间。
#!/bin/bash
# ========================================
# 安全排查脚本 - 针对Java容器环境
# 生成带时间戳的日志文件
# ========================================
# 设置日志文件(带时间戳)
LOG_DIR=\"./security_check_logs\"
mkdir -p \"$LOG_DIR\"
LOG_FILE=\"$LOG_DIR/security_check_$(date +%Y%m%d_%H%M%S).log\"
# 颜色输出函数(仅终端显示,不写入日志)
RED='\\033[0;31m'
GREEN='\\033[0;32m'
YELLOW='\\033[1;33m'
NC='\\033[0m'# No Color
# 日志函数:同时输出到终端和日志文件
log() {
local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $1\"
echo -e \"$msg\" | tee -a \"$LOG_FILE\"
}
log_cmd() {
local cmd=\"$1\"
local separator=\"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\"
echo\"\" | tee -a \"$LOG_FILE\"
echo\"$separator\" | tee -a \"$LOG_FILE\"
echo\"【执行命令】$cmd\" | tee -a \"$LOG_FILE\"
echo\"【执行时间】$(date '+%Y-%m-%d %H:%M:%S')\" | tee -a \"$LOG_FILE\"
echo\"$separator\" | tee -a \"$LOG_FILE\"
# 执行命令并追加输出到日志
eval\"$cmd\" >> \"$LOG_FILE\" 2>&1
local exit_code=$?
if [ $exit_code -ne 0 ]; then
echo\"⚠️ 命令执行异常,退出码: $exit_code\" | tee -a \"$LOG_FILE\"
fi
echo\"\" | tee -a \"$LOG_FILE\"
}
# ========================================
# 开始排查
# ========================================
echo -e \"${GREEN}╔══════════════════════════════════════════════════════════╗${NC}\"
echo -e \"${GREEN}║ 安全排查脚本 - 开始执行 ║${NC}\"
echo -e \"${GREEN}╚══════════════════════════════════════════════════════════╝${NC}\"
echo -e \"${YELLOW}日志文件: $LOG_FILE${NC}\"
echo\"\"
# ========================================
# 1. 系统基本信息
# ========================================
log\"========== 系统基本信息 ==========\"
log_cmd \"uname -a\"
log_cmd \"cat /etc/os-release | head -5\"
log_cmd \"uptime\"
log_cmd \"who -a\"
# ========================================
# 2. 可疑进程排查
# ========================================
log\"========== 可疑进程排查 ==========\"
log_cmd \"ps aux | grep -E '(bash|sh|nc|python|perl|curl|wget)' | grep -v grep\"
log_cmd \"ps aux | grep -E 'java.*-jar' | grep -v grep\"
# 重点关注可疑的java子进程
log_cmd \"ps -ef | grep java | grep -v grep\"
# 进程树
log\"========== 进程树(查看父子关系)==========\"
log_cmd \"pstree -p | head -200\"
# 显示CPU/内存占用最高的进程
log\"========== 资源占用TOP 10 ==========\"
log_cmd \"ps aux --sort=-%cpu | head -11\"
log_cmd \"ps aux --sort=-%mem | head -11\"
# ========================================
# 3. 网络连接排查
# ========================================
log\"========== 网络连接排查 ==========\"
log_cmd \"netstat -antlp 2>/dev/null | grep ESTABLISHED\"
log_cmd \"ss -antlp 2>/dev/null\"
log_cmd \"netstat -antlp 2>/dev/null | grep LISTEN\"
log_cmd \"lsof -i -P -n 2>/dev/null | head -100\"
# ========================================
# 4. 登录记录
# ========================================
log\"========== 登录记录 ==========\"
log_cmd \"last -i | head -50\"
log_cmd \"lastlog | grep -v 'Never logged in'\"
log_cmd \"who -a\"
# ========================================
# 5. Docker容器检查
# ========================================
log\"========== Docker容器信息 ==========\"
log_cmd \"docker ps -a --format 'table {{.Names}}\\t{{.Status}}\\t{{.Image}}\\t{{.Ports}}'\"
# 逐个检查指定容器
for container in hzlf-dji-web emqx hzlf-dji-boot minio; do
log\"---------- 容器: $container ----------\"
log_cmd \"docker inspect $container 2>/dev/null | head -100\"
# 检查容器内是否有可疑进程
log_cmd \"docker exec $container ps aux 2>/dev/null | grep -E '(bash|sh|nc|python|perl|curl|wget)' | grep -v grep\"
# 检查容器网络连接
log_cmd \"docker exec $container netstat -antlp 2>/dev/null | grep ESTABLISHED\"
log_cmd \"docker exec $container ss -antlp 2>/dev/null\"
done
# ========================================
# 6. 额外安全排查
# ========================================
log\"========== 额外安全排查 ==========\"
# 定时任务检查
log_cmd \"crontab -l 2>/dev/null\"
log_cmd \"cat /etc/crontab 2>/dev/null | head -30\"
# 最近修改的可执行文件
log_cmd \"find /tmp -type f -executable -mtime -7 2>/dev/null | head -20\"
log_cmd \"find /var/tmp -type f -executable -mtime -7 2>/dev/null | head -20\"
# 检查可疑的SUID文件
log_cmd \"find / -perm -4000 -type f 2>/dev/null | head -20\"
# 检查SSH配置
log_cmd \"cat /etc/ssh/sshd_config 2>/dev/null | grep -E '^(PermitRootLogin|PasswordAuthentication|Port)'\"
# 查看系统日志中的异常
log_cmd \"tail -50 /var/log/auth.log 2>/dev/null\"
log_cmd \"tail -50 /var/log/syslog 2>/dev/null | grep -i error\"
# ========================================
# 7. 汇总
# ========================================
log\"========== 排查完成 ==========\"
# 统计关键信息
echo\"\" | tee -a \"$LOG_FILE\"
echo\"【排查汇总】\" | tee -a \"$LOG_FILE\"
echo\"日志文件: $LOG_FILE\" | tee -a \"$LOG_FILE\"
echo\"生成时间: $(date '+%Y-%m-%d %H:%M:%S')\" | tee -a \"$LOG_FILE\"
# 提取可能的可疑进程列表
echo\"\" | tee -a \"$LOG_FILE\"
echo\"【可疑进程摘要】\" | tee -a \"$LOG_FILE\"
ps aux | grep -E '(bash|sh|nc|python|perl|curl|wget)' | grep -v grep | grep -v \"$0\" | tee -a \"$LOG_FILE\" 2>/dev/null || echo\"未发现明显可疑进程\" | tee -a \"$LOG_FILE\"
# 提取ESTABLISHED连接摘要
echo\"\" | tee -a \"$LOG_FILE\"
echo\"【活跃连接摘要】\" | tee -a \"$LOG_FILE\"
netstat -antlp 2>/dev/null | grep ESTABLISHED | tee -a \"$LOG_FILE\" || echo\"未发现活跃ESTABLISHED连接\" | tee -a \"$LOG_FILE\"
echo\"\" | tee -a \"$LOG_FILE\"
echo -e \"${GREEN}✅ 排查完成!日志已保存至: $LOG_FILE${NC}\"
echo -e \"${YELLOW}💡 提示:建议重点关注 '可疑进程排查' 和 '网络连接排查' 部分${NC}\"
# 显示日志位置
ls -lh \"$LOG_FILE\"
注: Windows 上传脚本会存在换行符兼容报错,执行修复命令:sed -i 's/\r$//' check.sh
运行结果部分截图:
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论