Blog

从博客被扫描说起:常见 Web 攻击特征

即便是静态站,OpenResty 的 access log 也从不缺 /wp-login.php、/.git/config、/phpmyadmin。七月把连续几周的日志按模式归了类——不是因为被入侵,而是因为 被扫描才是公网默认态。下文当攻击模式图鉴用:路径与特征来自真实日志聚合,可直接对照你自己的 Top 路径。读完应能快速判断「噪声还是要起床」。

怎么从日志里抽出「图鉴」

# 路径 Top
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -40

# 状态码 × 路径
awk '{print $9, $7}' access.log | sort | uniq -c | sort -nr | head -40

# 可疑 query 与穿越痕迹
awk -F\" '{print $2}' access.log | grep -E '(\.\./|\.env|wp-)' | head

先看 404 海洋里的高峰,再对 200 与 403 做二次确认。扫描可以忽略噪声;意外的 200 才要心跳加速。建议每周或每月留一份 Top 路径快照,方便发现「新出现的字典」而不是凭印象说「最近好安静」。若前面还有 Cloudflare,源站日志与边缘日志不一致时,攻击面以边缘为准看谁在敲门,源站只看见回源请求。把「本月新出现且带利用意味的路径」单独记一条,比无限加黑名单更可持续。

模式一:CMS 与面板狙击

特征路径: /wp-login.php、/xmlrpc.php、/wp-admin/、/user/login、/administrator/、/phpmyadmin/、/adminer.php,以及各类面板探测路径。

意图: 撞库、已知远程代码执行、弱口令。静态博客永远返回 404 或 444 即可;真有面板的,应根本不在公网,或仅隧道可达。

日志画像: 同一地址短时间扫字典式路径;UA 常为 curl、python、空、或伪造的旧版浏览器。间隔可能极短,也有意拉长以躲简单限流。我这边比例最高的一类噪声几乎总是 WordPress 相关,尽管站点从未跑过 PHP。

模式二:密钥与环境文件

特征: /.env、/.env.bak、/.git/config、/.git/HEAD、私钥文件名、压缩备份包、config.yml 一类。

意图: 直接拿走数据库口令、云密钥、源码。Web 根目录出现仓库或备份包是高危运维事故,不是「扫描太狠」。扫描器只是在量你的暴露面,真正的锅在发布与打包流程。

处置: 确认磁盘上不存在这些文件;规则层对前缀直接 444;CI 产物与备份放在非 Web 路径;发布检查加一条「根目录不得出现 .git 与 .env」。这类探测一旦对上真实文件,后果比 CMS 撞库来得更快。

模式三:路径穿越与探针式远程执行

特征: URL 编码的 ../、%2e%2e/,可疑查询参数如 cmd、exec,模板注入风味的花括号片段,半截 log4j 或 JNDI 字符串。即便你的栈完全不相关,脚本仍会撒网。

意图: 找任意文件读与老框架漏洞。静态站大多无害,但反向代理若错误拼接根路径,可能把穿越打到上游文件系统或内部服务。

处置: 规范化 URI;上游不暴露随意文件 API;对明显 payload 记日志并直接断开。重点查是否出现过成功响应,而不是和扫描器比谁路径字典更全。偶发夹杂在正常爬虫里的单次探针,可以只记;同一源持续变换 payload,就值得加限流或封禁。

模式四:利用套件与批量指纹

特征: 固定 UA 家族、请求顺序高度一致(先根路径再一串 CVE 路径)、带特定头组合。有时混在「正常」爬虫里,需要结合频率与路径多样性判断。

意图: 自动化挂马与僵尸网络扩张。个人站业务价值低,仍占带宽与日志体积,也会掩盖你真正想看的访问。

处置: 全局限流;边缘拦一波;源站再兜。不追求签名大全,追求可维护的小规则集,并能在误伤时快速回滚。套件指纹会变,依赖「永远最新的规则包」不如依赖「暴露面本来就小」。

模式对照表

模式 典型路径或信号 静态站正常响应 升级条件
CMS 狙击 wp-login、phpmyadmin 404 / 444 若 200 立刻排查
密钥文件 .env、.git 同上 磁盘存在即事故
穿越与探针 ../、cmd、jndi 同上 上游异常 200
套件扫描 字典序加怪 UA 限流加断开 带宽或 5xx 异常

缓解层级(静态站版)

死路径直接断开,再加 IP 限流,再确保不在 Web 根放仓库与备份,应用与面板保持更新,管理入口收进 VPN。响应分级可以很简单:纯扫描且全是失败响应,只记趋势;明确利用尝试则收紧规则并检查是否出现成功响应;有入侵迹象则断网、快照、走应急流程。

规则可以两边都写(边缘与源站),薄而可解释优于抄一整份商业规则却从不敢改。被扫描不代表被入侵;被扫描说明暴露面在被持续测量。图鉴的意义是:下次日志里出现同类路径,你知道该继续喝咖啡,还是该打开应急清单。

若只做一件事:把 Web 根与备份目录物理隔开,并对点环境和点 git 路径直接断开。这比研究最新扫描器 UA 更能降低真实事故概率。图鉴是分类工具,减法才是防御本身。

← Back to Blog