我埋了 8 个假文件,看谁会上钩:12 天 502 次扫描实录

先说结论:12 天,502 次访问,119 个独立 IP,天天有人来。

来的人里有专业泄露扫描平台、有商业攻击面扫描服务、有伪装成 iPod 的自动化工具。他们最爱找的是一个叫 .env 的文件 —— 光是这一个,就占了我记录的一大半。

这篇不讲大道理,就讲三件事:我埋了什么、他们怎么上钩的、以及这件事对普通项目意味着什么。

你只有一台公网机器,每天有几千次扫描撞上来,日志里密密麻麻全是 404。这些记录的问题是:你分不清谁是"随手扫一下",谁是"盯着你在找东西"。

两种情况在日志里长得一模一样 —— 都是一条 GET /something 404。

所以我换了个思路:既然挡不住被扫,那就把扫描引到一个专门的地方去,看他们到底想要什么。

这就是蜜罐。不是那种动辄要部署一套系统的重型方案,就是几个假文件而已。

不是随便放个文件就行。你放一个 readme.txt 没人理;你要放的是那种"正常项目里绝对不该出现在公网,但一旦出现就是事故"的东西。

.env 这种文件里放的是数据库密码、密钥、第三方服务的凭据。它是全网扫描器的第一优先级 —— 我这个蜜罐里一半的访问都冲它来的,位置排得比第二名高出快一倍。

关键是做得像真的:格式要对(KEY=value 一行一个)、内容要专业(数据库连接串、Redis 地址、各种密钥)、还得有点"人味"。

什么叫人味?我在里面留了一行运维备注,大意是"这是割接时临时放的,割完记得删"。

这一行是整个诱饵里最值钱的部分。因为它传递了一个信息:这不是设计如此,这是有人疏忽了。 攻击者看到"临时"、"忘了删"这种字眼,判断力会立刻下降一档 —— 他觉得自己撞上了别人的失误,而不是陷阱。

一份"运维笔记",里面写着架构说明、待办清单,还有一些看起来很要命的细节。

同样是那个逻辑:文档里要有"不该外传"的味道,还要有 TODO("换掉临时密钥"这种),让人相信这是一份真实的、还没被清理的内部资料。

扫描器会批量探测 /api/admin/...、/internal/... 这类路径。与其让它 404,不如给它一个 JSON 响应。

光记录 IP 没什么意思 —— 攻击者不会用真实 IP 来扫你的蜜罐,他多半走代理、走云主机。

所以我加了另一层东西:每一次响应里都塞一个唯一的追踪标识。

具体做法是让服务器在每个诱饵文件的响应里插入一个随机串,同时把这个串和"谁在什么时间访问了什么"一起记进日志。

假设一年后,网上流出某份"某公司内部配置"的截图,里面带着那个串。我就能反查到:这份东西是从哪一次访问漏出去的,当时是哪个 IP、用什么工具、访问的哪个文件。

这不是为了抓人 —— 追不到。是为了搞清楚泄露路径。安全事件里最难的部分从来不是"被偷了什么",而是"从哪漏的"。

那些伪装的很好认:User-Agent 写着"iPod touch + 火狐浏览器",然后来请求 .env。iPod 上装火狐,还专门来翻配置文件 —— 这种组合是不存在的。

第一名的占比之高有点意外 —— 但也合理,因为 .env 是所有框架通用的,一个脚本就能扫遍全网,投入产出比最高。

一是路径变形。 有人不满足于直接请求,试了这些:

这些都是在试图绕过服务器的路径匹配规则。会做这一步的,说明前面已经扫到了响应,正在琢磨怎么拿到更多。

来源:稀土掘金 原文