首页
社区
课程
招聘
[原创] 猫鼠游戏:在不引起安全社区注意的情况下快速制造大规模僵尸网络
发表于: 2024-6-1 13:03 3106

[原创] 猫鼠游戏:在不引起安全社区注意的情况下快速制造大规模僵尸网络

2024-6-1 13:03
3106

黑客制造僵尸网络进行网络犯罪牟利,安全研究人员在互联网上部署大量探针监测僵尸网络的传播情况,这是一场猫鼠游戏。目前来看,安全研究人员在这场游戏中占据了上风,威胁情报厂商不间断地曝光新僵尸网络家族展示他们的能力。本文探索了绕过安全研究人员部署的层层防线,在不引起安全社区的注意下快速制造大规模僵尸网络的可行性。

研究目标与挑战

本文的研究目标是在不引起安全社区注意的情况下快速制造大规模僵尸网络。要达成这一目标,至少要解决以下三个挑战:

  1. 不能以主动扫描整个IPv4网络的方式寻找可入侵设备,这极有可能触发扫描流量告警。2016年爆发的Mirai事件中,Google就提前检测到了Mirai的扫描流量

  2. 具备蜜罐检测能力,否则样本会被安全研究人员捕获

  3. 与被入侵设备建立shell会话后,部分shell会话是受限的,只能执行白名单中的命令,导致无法执行payload在设备上部署僵尸网络。需要使用受限shell逃逸漏洞

本文成功解决了以上三个挑战,并在数天内发现了3w台可入侵设备。

方法

建立C&C服务器

C&C服务器需要一个公网IP,不能使用云服务来搭建C&C服务器,这会暴露攻击者的身份。解决方法是扫描公网上公开的内网代理服务,如frp,寻找不需要访问验证就可以直接使用的内网代理服务,这样就可以将个人计算机暴露在公网上作为C&C服务器使用。

使用FoFa搜索语句 protocol="frp" 可以找到公网上的frp服务,然后编写一个脚本爆破不需要token验证的frp服务即可。出于安全考虑,不公开脚本,只截图如下,其中以 [+] 开头的都是不需要token验证的frp服务。

frp扫描结果

WARNING:这些frp服务可能被其它攻击者用来作为代理隐匿攻击流程,强烈呼吁为公网上的frp服务添加token验证

扫描可入侵设备

互联网上运行着无数的扫描器,它们大多由黑产从业者运营,包括弱口令扫描,N/0Day漏洞扫描等。扫描器的竞争非常激烈,在没有0day漏洞的情况下,如何让我们的扫描器能够在竞争中脱颖而出,快速发现大量可入侵设备?

以telnet弱口令扫描器为例,已有的扫描器都只会扫描23/2323等telnet服务默认端口,但是互联网上有许多telnet服务是开放在非标准端口上的。这些非标准端口仍然没有被扫描器扫描过,它们之中可能存在大量弱口令问题。IPv4公网IP有4亿多个,每个IP有65536个端口,要扫描全量IP与全量端口是一个不现实的任务。但是网络空间测绘引擎帮助我们完成了这一任务,使用Fofa规则 protocol="telnet" && port!=23 && port!=2323,我们就能发现大量开放在非标准端口上的telnet服务。同时,发现一个弱口令telnet服务后,我们就能对它进行自动化指纹提取,而后基于该指纹,使用网络空间测绘引擎快速发现大量同类弱口令telnet服务。基于这两点,我们可以在三天内发现3w台弱口令设备。

同时,我们还发现一些很有意思的telnet服务,正常的telnet服务连接后需要登陆验证,这些telnet服务连接后可以直接获得shell无需验证。因为正常的telnet服务的启动命令行是 telnetd -l /bin/login,这表示在建立连接后启动/bin/login程序进入登陆验证,这些telnet服务的启动命令行是 tlenetd -l /bin/sh,这表示在建立连接后直接启动/bin/sh打开一个shell会话。

无需登录验证的telnet服务

使用Fofa规则 protocol="telnet" && banner="/bin/sh" 就可以快速找到这些telnet服务。简单解释一下这条规则为什么能工作,网络空间搜索引擎发现一个开放端口时,会尝试通过与这个端口进行交互以识别端口服务,交互过程会被记录在banner字段中。当Fofa发现这个telnet服务端口时,先发送了一个HTTP GET请求,这个请求会被shell会话作为命令执行,会返回 /bin/sh command not found 的错误,因此当banner中存在 /bin/sh 时,多半就说明这是个无需登录验证的telnet服务。

Fofa搜索结果

还有一些规则可以找到这些telnet服务,如 protocol="telnet" && banner="ash"。有时Fofa因为某些机制,没有向端口发送包含\n的请求,端口也就不会返回/bin/sh not command found错误,如下图banner所示,但是它也是一个无需登录验证的telnet服务,如何识别到它呢?busybox的ash组件很特殊,打开shell会话后会输出一个类似于 busybox built-in shell (ash)的字符串,因此使用ash作为关键字即可识别到这类telnet服务。类似的技巧还有很多,不赘述。
Fofa搜索结果

WARNING:建议网络空间搜索引擎服务商封禁有关关键字!

通过指纹搜索同类设备

我们通过一个例子来简单说明这个过程:当通过扫描发现123.241.222.*:60023的telnet服务的弱密码是guest/guest,并且其banner是"UTT login:",监听端口为60023时,我们使用网络空间搜索引擎去搜索所有匹配这些特征的telnet服务,Fofa规则是"protocol="telnet" && banner="UTT login:" && port="60023"",然后我们尝试使用guest/guest登录这些设备。有时telnet服务的banner会有一些“噪声”,解决方案是搜索login关键字,提取login关键字前的若干个单词作为banner。

使用这一方法能快速发现同类的脆弱性设备。

蜜罐识别

蜜罐按对与攻击者的交互仿真能力分为低、中、高三个等级的蜜罐。已有蜜罐的仿真实现可以分为两类方案,基于模式匹配的仿真以及基于虚拟机/Docker的仿真。前者对攻击者的输入进行模式匹配,产生输出,比如检测到输入ps,就返回预先内置的进程列表等。这种仿真方式存在很多问题,比如2016年Mirai爆发时,没有任何蜜罐能捕获到Mirai样本,因为Mirai的扫描器使用cat /bin/echo命令判断目标机器CPU架构,当时的蜜罐在模式匹配时都没有实现cat命令,直接返回command not found。后者是将攻击者的输入重定向进入虚拟机或Docker容器,并将输出重定向给攻击者。这两种方式都有问题。

首先谈谈基于模式匹配的实现方式存在的问题,当攻击者输入"ps k"命令时,在真实系统中,输出会是k is an invalid option,在蜜罐中,输出会是一个进程列表,其中包含一个"ps k"进程。本质上来说,基于模式匹配的仿真方式就不可能“尽善尽美”,攻击者总能找到疏忽检测到蜜罐。

然后是基于虚拟机/Docker的实现方式。已有蜜罐的实现都是对攻击者的输入按\n进行分割,然后输入虚拟机/Docker执行,如果攻击者只输入\t不包括\n,那么在真实系统下,应该返回命令自动补全候选列表,但是在蜜罐中,不会有任何响应。

上述提到的都是trick,蜜罐检测还有一些更本质的方案,比如蜜罐会为不同的连接开启不同的仿真会话,只要同时打开连接,观察在一个会话中对文件进行的创建与删除等操作是否会可以在另一个会话中观测到即可。

受限shell逃逸漏洞

有些telnet服务即使存在弱口令,但是建立的shell会话也是受限的,只能执行白名单中的命令。以ZTE F660光猫的shell为例,无法执行busybox与uname等命令,因为不在白名单中,可以执行在白名单中的pwd命令。因为只能执行白名单中的命令,所以下载payload与执行payload等操作都是不可完成的,也就无法控制这台设备。
ZTE F660

受限shell可以分为两类,一类是shell是bash/ash等linux shell,但是厂商对它进行修改加入了白名单策略,二类是shell是由厂商开发的自定义shell,但是有的厂商预留了命令可以打开进入一个linux shell。对于前者,可以使用受限shell逃逸漏洞,对于后者,找到厂商预留的命令即可。下面简单介绍一些技术细节。

ZTE光猫受限shell逃逸漏洞

该漏洞已提交至CNVD漏洞库。

简单来说,cat命令在白名单中,并且可以通过cat命令覆盖/bin目录下的文件。因此执行cat > /bin/ip,覆盖/bin/ip写入"busybox ash"内容,而后执行ip命令,就可以打开一个不受限的shell会话。如下图所示,在原shell会话中不可以执行busybox命令,执行漏洞逃逸受限shell后可以执行busybox命令。

ZTE F660逃逸

NetGear路由器受限shell逃逸漏洞

该漏洞已提交至CNVD漏洞库。

常见的 ; && || 等命令连接符号已经被过滤,但是我们可以通过 echo < $(ls),以输入重定向的方式执行ls命令,成功逃逸受限shell获得执行任意命令的能力。

NetGear逃逸

C/Python编程环境逃逸

有的shell会话提供了一个编程环境,如下图所示提供了cint命令可以打开一个C模拟器。在C模拟器中调用system命令,就实现了受限shell逃逸可以执行任意命令。
可执行C模拟器的shell

例如使用system函数执行sleep 2指令,确实经过2秒system函数才返回,证明可以执行任意命令。

C模拟器逃逸

预置命令打开linux shell

总结了一些常见的打开linux shell的内置命令,如下:

  • enable -> quote sh
  • exec-shell
  • sh
  • $linux
  • system

如下图所示,通过执行 enable -> quote sh 打开linux shell。
打开linux shell

讨论

通过蜜罐攻击厂商的威胁情报系统

我们发现了互联网上数百个蜜罐,通过对这些蜜罐注入恶意payload,是否可以攻击厂商的威胁情报平台?比如不断在蜜罐中执行wget下载大文件,是否可以对厂商的蜜罐系统实现DDoS攻击?以及wget下载经过特殊处理的恶意样本,是否可以使得厂商的威胁情报分析团队产生误判?

这些不安全的设备的来源是什么

用户手动破解

以ZTE光猫为例,默认是不会开启telnet服务的,用户采用破解手段打开telnet服务后,如果又恰好申请了公网IP,那么这个弱口令telnet服务就被暴露在公网上随时可能被黑客入侵。

不安全的固件

有淘宝商家提供了一个电视盒子安装包,其中包含后门,会将telnet服务通过frp转发到公网上,这产生了一个奇观,一个公网IP下挂了5000台电视盒子的telnet服务,并且都是前文提到的不需要登录验证的telnet服务,黑客连上就能控制对应的盒子。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 1464
活跃值: (1913)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这手 frp 直接上你家查水表了
2024-6-14 10:12
0
雪    币: 1516
活跃值: (913)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这是真牛逼
2024-6-14 10:28
0
雪    币: 772
活跃值: (637)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嘿嘿直接全文报保存了
2024-6-14 11:23
0
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
5
就看这种文章还能存在多久了
2024-6-14 14:37
0
游客
登录 | 注册 方可回帖
返回
//