一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例

枫少@KillBoy
枫少@KillBoy
管理员
219
文章
0
粉丝
资源分享305,950字数 946阅读3分9秒阅读模式
AI智能摘要
你以为所有Docker蜜罐都在"钓鱼"?真相却令人警觉!本文揭秘一种新型蜜罐的致命破绽:通过ZoomEye搜索"Server: Docker + Content-Length: 626",竟能精准捕获伪装成Docker API的异常服务。它们非但不吸引攻击,反而悄悄阻断访问IP——核心线索藏在JSON空格差异与2019年遗留的18.06.1-ce版本特征中。安全研究员将手把手教你用三步搜索语法识别此类陷阱,避开无效扫描,大幅提升威胁情报效率。读完即掌握实战验证的蜜罐甄别术,守护你的资产防线。
— AI 生成的文章内容摘要

在写《一个通过ZoomEye获取IOC的案例》我发现搜索Docker的关键词:Server: Docker会匹配到大量的蜜罐,而这些蜜罐符合Anglerfish类蜜罐的特征,目前这里蜜罐非常常见部署也非常多,显然它并不是今天的主角,我们先通过排除掉这些Anglerfish类的数据,搜索语法:

"Server: Docker" -"<title>"

[解释下:因为我们要搜索的Docker是个API服务基本上是不可能出现"<title>"这个词的,所以直接排除] 如下:

一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例-图片1

一共得到3.6w+的结果,随机做一些访问确认发现一个比较有意思显现,Docker api默认端口为2375,但是在侧栏的端口分布栏来看可以看出很多其他端口,我们使用排除语法搜索:

"Server: Docker" -"<title>" -port:2375

一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例-图片2

尝试访问基本都访问不到,端口服务处于关闭状态,这是一个非常异常的情况。然后我们看看banner信息,从ZoomEye里显示的banner信息很多请求应该是直接获取dorker版本信息的请求记录,注意观察你会发现这些请求都是版本信息Server: Docker/18.06.1-ce (linux)及Content-Length: 626都非常统一,继续搜索:

"Server: Docker" +"Content-Length: 626"

可以得到1.2w+的结果,而且这些很多基本访问不到,或者开始能访问,访问几次后就没有响应了,非常奇怪现象。随即我选了几个IP查看IP档案页面看看其他端口情况:
一种通过 ZoomEye 捕获全新 Docker 蜜罐的案例-图片3

从这个Server:头的很典型的“蜜罐”风格,初步推测这些是设备为“蜜罐”并且带有IP阻断功能。当然可能有人会问你这个Content-Length: 626很可能默认的配置就是这个长度,那么我们那在banner里选一个其他的关键词进行,完整的banner如下:

HTTP/1.1 200 OKDate: Thu, 11 Mar 2021 07:04:33 GMTServer: Docker/18.06.1-ce (linux)Api-Version: 1.38Docker-Experimental: falseOstype: linuxContent-Type: application/jsonContent-Length: 626{"Platform": {"Name": ""}, "Components": [{"Name": "Engine", "Version": "18.06.1-ce", "Details": {"ApiVersion": "1.38", "Arch": "amd64", "BuildTime": "2018-10-26T23:39:57.000000000+00:00", "Experimental": "false", "GitCommit": "e68fc7a/18.06.1-ce", "GoVersion": "go1.10.3", "KernelVersion": "4.14.47-64.38.amzn2.x86_64", "MinAPIVersion": "1.12", "Os": "linux"}}], "Version": "18.06.1-ce", "ApiVersion": "1.38", "MinAPIVersion": "1.12", "GitCommit": "e68fc7a/18.06.1-ce", "GoVersion": "go1.10.3", "Os": "linux", "Arch": "amd64", "KernelVersion": "4.14.47-64.38.amzn2.x86_64", "BuildTime": "2018-10-26T23:39:57.000000000+00:00"}

我们选GitCommit这个值e68fc7a/18.06.1-ce搜索语法:Server: Docker+e68fc7a/18.06.1-ce得到1.4w+的结果,继续我们看看还有没有其他Content-Length的目标 搜索语法:Server: Docker+e68fc7a/18.06.1-ce-Content-Length: 626找到2,465 条而且都是2019年的数据,具体banner如下:

HTTP/1.1 200 OKContent-Length: 583Server: Docker/18.06.1-ce (linux)Ostype: linuxApi-Version: 1.38Docker-Experimental: falseDate: Sat, 20 Apr 2019 23:57:57 GMTContent-Type: application/json{"Platform":{"Name":""},"Components":[{"Name":"Engine","Version":"18.06.1-ce","Details":{"ApiVersion":"1.38","Arch":"amd64","BuildTime":"2018-10-26T23:39:57.000000000+00:00","Experimental":"false","GitCommit":"e68fc7a/18.06.1-ce","GoVersion":"go1.10.3","KernelVersion":"4.14.47-64.38.amzn2.x86_64","MinAPIVersion":"1.12","Os":"linux"}}],"Version":"18.06.1-ce","ApiVersion":"1.38","MinAPIVersion":"1.12","GitCommit":"e68fc7a/18.06.1-ce","GoVersion":"go1.10.3","Os":"linux","Arch":"amd64","KernelVersion":"4.14.47-64.38.amzn2.x86_64","BuildTime":"2018-10-26T23:39:57.000000000+00:00"}

从http头及下面返回的内容参数除里http头里的Date内容好像没啥不一样,但是这个Content-Length是不一样的,一个是626 一个是583,然后仔细核对你会发现,在http body里的json里626的是多了很多空格,如:

{"Platform": {"Name": ""}{"Platform":{"Name":""}

这个空格的问题让我想起《利用 ZoomEye 追踪多种 Redteam C&C 后渗透攻击框架》 https://paper.seebug.org/1301/ 这篇文章里提到的,到这里基本上可以实锤,搜索语法搜索出来的Server: Docker+Content-Length: 626就是“蜜罐”,而且从选用的模版信息可以确定,这个蜜罐模版选用18.06.1-ce版本最为模版,而这个版本主要出现在2019年!

最后一个问题一直困扰着我:既然是“蜜罐”不应该是吸引火力吗?为什么直接拦jie访问IP呢?

编者注:ZoomEye一直提供蜜罐识别业务,打标结果目前只对VIP用户开放。目前ZoomEye已经支持这类蜜罐识别并打标!

https://www.freebuf.com/sectool/265911.html

 
枫少@KillBoy
评论  30  访客  29  作者  1
    • 社恐旁观者
      社恐旁观者 0

      这种排查思路挺有意思的,之前没想过从Content-Length这种细节入手。

        • 心海浮光
          心海浮光 1

          @ 社恐旁观者 老哥分析得挺细的,从端口异常到版本特征,一步步推理,逻辑清晰。

        • 夜境
          夜境 1

          为啥蜜罐要阻断IP呢?正常不是应该放进来记录行为吗?

          • 海音子
            海音子 0

            手头正好有个项目涉及到Docker安全,回头按这个方法去扫一遍看看。

            • Etherealwisp
              Etherealwisp 1

              感觉有点绕,直接看banner异常不就行了吗,整这么复杂。

                • 宇宙诗语
                  宇宙诗语 1

                  @ Etherealwisp 直接看banner不够准,很多蜜罐会模仿正常服务,这种细节过滤能提高精度。

                • 梅雪迎春
                  梅雪迎春 0

                  GitCommit那个值居然能搜出那么多,确实有点东西。

                  • 竹林幽
                    竹林幽 0

                    所以这些蜜罐是2019年那批部署的,现在还在跑?

                    • 烤串终结者
                      烤串终结者 1

                      之前用ZoomEye搜Shodan的语法比较多,这种排除法确实能滤掉不少干扰。

                      • GiggleSprout
                        GiggleSprout 1

                        问个细节,排除“”是因为Docker API不会返回网页标题对吧?

                          • 青石阶梯
                            青石阶梯 0

                            @ GiggleSprout 是的,Docker API返回的是JSON数据,不会有HTML的title标签,这个排除条件很关键。

                          • 猎户座心
                            猎户座心 0

                            有点没看懂,所以最后结论是这些全是蜜罐?

                            • 雷霆霸主
                              雷霆霸主 0

                              从端口分布异常到锁定特定版本,这个分析过程挺扎实的。

                              • 绛紫幽兰
                                绛紫幽兰 0

                                用Content-Length差异来识别蜜罐的思路很巧妙,我之前只关注banner。

                                • 灰狼灰
                                  灰狼灰 1

                                  这种排查方法对做资产梳理和威胁狩猎挺有帮助的。

                                  • 英招巡天
                                    英招巡天 0

                                    问下,如果蜜罐更新了模板,用新的GitCommit值,这个方法还能用吗?

                                    • 无敌小逗比
                                      无敌小逗比 0

                                      之前也遇到过类似情况,扫出来一堆端口开着的服务,但实际连接不上,当时没深究。

                                      • 地煞七星
                                        地煞七星 1

                                        所以这些蜜罐的目的是啥?只是单纯记录扫描行为,还是有别的意图?

                                        • 火麒麟
                                          火麒麟 0

                                          从2019年部署到现在还在活跃,说明这套东西一直有效,或者维护者懒得更新?

                                          • 俏皮的小兔子
                                            俏皮的小兔子 0

                                            看起来像是某种研究项目或者安全公司部署的,用来收集攻击者手法。

                                            • 刃痕
                                              刃痕 0

                                              对于刚接触ZoomEye的新手来说,这种案例跟着操作一遍应该能学到不少。

                                              • 钢骨魔影
                                                钢骨魔影 0

                                                那如果是用其他搜索引擎,比如Shodan或者Fofa,同样的语法思路通用吗?

                                                • Phantasmlight
                                                  Phantasmlight 1

                                                  这些蜜罐的阻断策略有点意思,可能是在识别到特定扫描模式后才触发。

                                                  • 无限循环的楼梯精灵
                                                    无限循环的楼梯精灵 1

                                                    嗯,方法可行,但实际用的时候还得考虑误报,比如一些配置特殊的正常服务。

                                                    • 墨画浮生
                                                      墨画浮生 1

                                                      这排查思路挺巧啊

                                                      • 量子之梦
                                                        量子之梦 1

                                                        原来蜜罐还会主动阻断IP,这招够狠的

                                                        • 晨光微
                                                          晨光微 1

                                                          内容长度583和626的区别居然在空格上,有点意思。

                                                          • 狮王者
                                                            狮王者 1

                                                            这排查手法挺细的。

                                                              • 枫少@KillBoy
                                                                枫少@KillBoy

                                                                @ 狮王者 排查过程确实绕了不少弯,发现规律后还挺有意思的。

                                                              • 小猫花花
                                                                小猫花花 1

                                                                用Content-Length来筛,这思路可以。

                                                              匿名

                                                              发表评论

                                                              匿名网友

                                                              拖动滑块以完成验证