先说结论: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、用什么工具、访问的哪个文件。
这不是为了抓人 ------ 追不到。是为了搞清楚泄露路径。安全事件里最难的部分从来不是"被偷了什么",而是"从哪漏的"。
12 天看到了什么
谁在扫
绝大多数是自动化工具,其中能识别出来的:
- 一个专门做泄露情报的平台,扫了 48 次
- 一家知名安全厂商的攻击面扫描服务,来过 8 次(它的 User-Agent 里直接写着"这是我们的扫描行为,详情见 xxx",很坦荡)
- 一个网络空间测绘搜索引擎的爬虫
- 大量
curl和伪装成正常浏览器的脚本
那些伪装的很好认:User-Agent 写着"iPod touch + 火狐浏览器",然后来请求 .env。iPod 上装火狐,还专门来翻配置文件 ------ 这种组合是不存在的。
他们想要什么
按访问次数排下来:
javascript
配置类文件 占了一半以上
通用配置 JSON
安全声明文件
一个提示页
备份目录
内部运维文档
伪装的后台接口
第一名的占比之高有点意外 ------ 但也合理,因为 .env 是所有框架通用的,一个脚本就能扫遍全网,投入产出比最高。
有人真的上钩了
有几个动作能明确看出"上钩":
一是路径变形。 有人不满足于直接请求,试了这些:
bash
/.//.env
//.env
/%2eenv ← URL 编码
/api/uploads/%2e%2e%2f%2e%2e%2f.env ← 路径穿越
这些都是在试图绕过服务器的路径匹配规则。会做这一步的,说明前面已经扫到了响应,正在琢磨怎么拿到更多。
二是下载动作。 我那个假备份目录里放了一个文件名很像数据库导出的 .sql.gz,有 4 次访问是直奔它去的。
下载比浏览更能说明意图 ------ 浏览可能是爬虫顺手,下载是明确想要那个东西。
这件事对普通项目意味着什么
我想说的不是"你们都去部署蜜罐",而是几个更朴素的点:
第一,被扫是常态,不是你的问题。
一台刚上线的公网机器,几小时内就会开始被扫,跟你做得好不好没关系。全网的自动化扫描是持续运行的。
第二,真正的风险不是被扫,而是"被扫到了真东西"。
我这个蜜罐 12 天收到 500 多次访问,什么事都没有,因为里面全是假的。但如果那台机器上真的有一个 .env 挂在 web 目录下呢?同样这 500 多次访问里,只要有一次命中了,就是事故。
所以最实际的防护动作不是买设备,是确保那些不该出现在公网的东西,真的不在公网。这一步做完,能挡掉绝大多数真实风险。
第三,日志的价值取决于你记的是什么。
如果日志里全是回源节点 IP、全是 404,那它只能用来排查故障,做不了安全分析。
先把"谁来了"这件事记准(这是前置条件),再考虑"怎么把他们引出来"(蜜罐)。顺序反了的话,诱饵抓到的数据你也看不懂。
最后
整套东西的成本:几个静态文件,几十行配置。没有额外服务,没有性能开销,也不碰任何真实数据。
要说建议只有一条 ------ 埋诱饵的时候宁可做得少,也别做得太花。诱饵最怕的不是没人上钩,而是被人一眼看穿。一个写着"这是诱饵文件"的假配置,起不到作用,还等于告诉对方你在做这件事。
真实的疏忽感,比精巧的设计更重要。
对了,前面提到的那三个同段的 IP,到现在还在来。每天准时,每次都拿到 200,每次都读走同一份假配置。
按它们的视角,这是个持续命中率 100% 的目标。 ------------ 关于作者
变量探索(SEQVEC)