温馨提示×

CentOS Tomcat日志中如何识别攻击

小樊
48
2025-11-16 00:55:59
栏目: 网络安全

定位日志与关键文件

  • 访问日志:默认位于 $CATALINA_HOME/logs/localhost_access_log.[日期].txt,记录每一次 HTTP 请求的 客户端IP、时间、方法、URL、协议、状态码、User-Agent、Referer 等,是识别扫描与攻击的第一现场。
  • 应用与容器日志:
    • catalina.out / catalina.[日期].log:启动、运行与异常堆栈。
    • localhost.[日期].log:应用级日志与异常。
    • manager.[日期].log / host-manager.[日期].log:管理后台访问与操作。
  • 建议开启并使用日志滚动,避免单文件过大,便于长期留存与取证(如在 logging.properties 中配置 FileHandler.limit/count)。

常见攻击在日志中的特征与排查命令

攻击类型 日志特征关键词或模式 排查命令示例
目录遍历/敏感文件探测 URL 含 /etc/passwd、/WEB-INF/web.xml、/.git/、/.svn/、/backup.zip;大量 404 grep -Ei "../
SQL 注入 参数含 ’ OR 1=1–、UNION SELECT、ORDER BY、sleep(、benchmark(;伴随 500/403 grep -Ei "union\s+select
命令注入/Webshell 落地 访问 .jsp/.jspx/.php 等可执行脚本;请求体或参数含 cmd=、exec=、Runtime、ProcessBuilder;出现 200 且返回内容异常 grep -Ei ".jsp
暴力登录/弱口令 /login /j_security_check /manager/html 路径下高频 401/403,短时间内大量失败 grep -Ei "POST /login
文件上传漏洞利用 请求含 multipart/form-data 且频繁访问 .jsp/.jspx;上传后立刻被访问 grep -Ei “multipart/form-data” localhost_access_log.*.txt
不安全的 HTTP 方法 使用 PUT/DELETE/TRACE/OPTIONS 等;可能返回 405/501 grep -Ei '" (PUT
扫描与爬虫噪音 大量不同路径的 404,User-Agent 含 sqlmap、nmap、acunetix、burp、python-requests grep -Ei " 404 " localhost_access_log.*.txt
DoS/暴力请求 同一 IP 在 1–5 分钟内请求数远超基线;状态码多为 200/429 按 IP 与时间窗聚合计数(见下文脚本)
管理后台滥用 /manager/html、/host-manager/html 异常访问;失败多可能说明口令有效但未授权 grep -Ei "/manager/html
说明:SQL 注入与 Webshell 的排查应同时查看 访问日志catalina.out/localhost.[日期].log 的异常堆栈与错误信息,以确认是否被利用成功。

快速排查与自动化脚本

  • 高频 404 与可疑 UA 聚合
    • 统计 Top 10 404 路径:
      grep -Ei " 404 " localhost_access_log.*.txt | awk ‘{print $7}’ | sort | uniq -c | sort -nr | head -10
    • 统计可疑 UA 与来源 IP:
      grep -Ei “sqlmap|nmap|acunetix|burp|python-requests” localhost_access_log.*.txt | awk ‘{print $1,$12}’ | sort | uniq -c | sort -nr | head
  • 暴力登录与后台访问 Top N
    • 登录失败 Top IP:
      grep -Ei “POST /login|j_security_check|/manager/html” localhost_access_log.*.txt | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head
    • 管理后台访问 Top IP:
      grep -Ei “/manager/html|/host-manager/html” localhost_access_log.*.txt | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head
  • 时间窗内请求频率异常(DoS 粗筛)
    • 1 分钟为窗口统计每 IP 请求数,阈值示例 100
      awk ‘{ip=$1; gsub(/[|]/,“”,$4); split($4,t,“:”); ts=t[2]":“t[3]”:"t[4]; a[ip,ts]++;} END {for (k in a) {split(k,b,SUBSEP); if (a[k]>100) print b[1],b[2],a[k];}}’ localhost_access_log.*.txt
  • 一键拉取可疑线索(SQLi、Webshell、扫描)
    • egrep -i “union\s+select|order\s+by|sleep(|benchmark(|’ or 1=1|.jsp|.jspx|.php|/etc/passwd|.git|.svn|sqlmap|nmap|acunetix|burp” localhost_access_log.*.txt | sort | uniq -c | sort -nr | head
  • 建议将以上命令纳入 cron 定时执行,并通过 邮件/企业微信/Slack Webhook 推送告警,或接入 ELK/Splunk 做可视化与阈值告警。

处置与加固建议

  • 立即处置:对确认的恶意 IP/网段 实施 iptables/firewalld 封禁;对已被访问的可疑文件(如 .jsp/.jspx/.php)进行下线、隔离与恶意代码扫描;必要时临时下线业务或切换到维护页。
  • 访问控制:在反向代理或 server.xml/Valve 层限制管理后台 /manager/html、/host-manager/html 的访问来源;为管理口启用 强口令/双因子IP 白名单
  • 方法收敛:在应用的 web.xml 中禁用不安全 HTTP 方法(如 PUT、DELETE、TRACE、OPTIONS、MOVE、COPY),仅保留业务必需方法。
  • 漏洞修复:对识别出的 SQL 注入 使用 参数化查询/预编译;对 文件上传 限制类型/大小/后缀并在服务端校验;对 命令执行 入口进行严格输入校验与最小权限执行。
  • 运行与观测:保持 Tomcat 与相关组件 及时更新与打补丁;启用 访问日志、错误日志、GC/线程 监控;将日志接入 ELK/Splunk 做长期留存、可视化与自动告警。

0