我埋了 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、用什么工具、访问的哪个文件。

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


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)

相关推荐
llqbzllll2 小时前
HashMap 的核心结构:从一次 put 看到扩容、桶迁移与树化边界
后端
晚安code2 小时前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
专业程序开发源4 小时前
django新闻推荐系统70655-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·django·课程设计
打工仔折腾 AI4 小时前
把 AI Agent 托管到家里电脑:UU远程端口映射与CLI实测记录
人工智能·后端·python·langchain·电脑·ai agent 实战
vx_Biye_Design4 小时前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
嵌入式学习菌5 小时前
ESP32 ModbusTCP 分片缓存
java·后端·spring
程序员小杰@5 小时前
Spring Boot 常用注解分类速记
java·spring boot·后端
挖掘狂人5 小时前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
vx_Biye_Design5 小时前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计