freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

电信天翼网关3.0分析 — 下
2023-05-06 17:25:58
所属地 四川省

Author:閦蠱@DuncanSecTeam

0x00:前言

中国电信是三大运营商中最大的固网宽带接入服务提供商,同时也是最早开始建设光纤宽带的运营商。如下图,从早期的e8-C,到后来的天翼智能网关1.0,2.0,3.0以及最新的4.0,其固网光纤终端接入设备(后统称:光猫)始终走在三大运营商的最前列。我们希望能通过一系列的文章对电信光猫进行深入浅出的介绍,重点分析其中涉及网络安全的技术细节。

0x01:文章内容

前两篇文章中,我们对电信光猫3.0设备的源码获取,启动过程,Web应用进行了分析,基于这些分析能够更好的控制或分析光猫系统。在本文中,我们会继续对光猫进行分析,只不过重点聚焦于光猫运行的lxc容器。碍于能力有限,加之可以参考的资料非常有限,如文中所言有不当之处敬请指教!

1683364129_64561921b6a4beb242abc.png!small?1683364130239

0x02:lxc容器

2.1、什么是LXC容器?

“LXC于2008年首次引入,从其之前的Solaris Containers(或Solaris Zones)和FreeBSD jail中采用了其大部分功能。容器使软件应用程序与操作系统脱钩,从而为用户提供了一个干净而最小的Linux环境,同时在一个或多个隔离的“容器”中运行其他所有内容。容器的目的是启动一组有限的应用程序或服务(通常称为微服务),并使它们在独立的沙盒环境中运行。这种隔离可防止在给定容器中运行的进程监视或影响在另一个容器中运行的进程。同样,这些容器化服务不会影响或干扰主机。能够将分散在多个物理服务器上的许多服务整合为一个的想法是数据中心选择采用该技术的众多原因之一。”【1】

“现在称为容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail。2001 年,通过 Jacques Gélinas 的 VServer 项目,隔离环境的实施进入了 Linux 领域。在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。很快,更多技术结合进来,让这种隔离方法从构想变为现实。控制组(cgroups)是一项内核功能,能够控制和限制一个进程或多组进程的资源使用。而 systemd 初始化系统可设置用户空间,并且管理它们的进程,cgroups 使用该系统来更严密地控制这些隔离进程。这两种技术在增加对 Linux 的整体控制的同时,也成为了保持环境隔离的重要框架。”【2】

2.2、lxc容器使用的一般过程

下图给出了lxc容器使用的一般过程,主要包括:lxc服务安装,lxc运行环境检查,运行lxc容器以及终止lxc容器。

1683364276_645619b42130da36a204c.png!small?1683364276748

0x03:电信光猫3.0 LXC容器分析

根据前期的分析,以及利用telnet在OpenWrt容器里面运行各种插件的实践,这里先给出我们team关于电信天翼光猫LXC容器部署的一个猜想:

1、天翼光猫利用LXC部署了OpenWrt的Privileged容器,以便运行完整的OpenWrt系统;

2、借助OpenWrt容器,天翼光猫可直接运行OpenWrt插件以及基于OpenWrt框架开发的智能插件。

接下来,我们将通过一系列的分析和实验,来检验前面的猜想。

3.1、OpenWrt容器

在登录电信光猫的时候,经常可以看到类似下面图片中以“/cgi-bin/luci”结尾的URL地址。正是这个地址让,让我们开始怀疑电信光猫3.0是不是基于OpenWrt进行了重写,以支持上篇中提到的智慧家庭等新的应用场景【3、4】。对路由刷机以及OpenWrt有所了解的朋友,应该都知道OpenWrt强大的软件生态和丰富的三方插件。为了能够更深入的了解电信光猫3.0,搞清楚内部的实现机理,能够更好的玩转这一代光猫,于是我们team才切入了这个很有意思的研究领域。

1683364315_645619db7b3a62eb6174f.png!small?1683364316786

我们试图通过搜索引擎寻找电信光猫与OpenWrt之间的联系,所能知道的资料并不多,其中【5】介绍了如何通过Dropbear SSH接入光猫内部的OpenWrt,但提及的光猫型号与我们手上的光猫不是同一个厂商。【6】较为详细的介绍了电信光猫中的LXC容器,并分析了用于运用容器的saf程序,这篇文章对我们team的帮助特别大,在此感谢songee@chinadsl.net。

结合【6】的分析,我们通过ps命令可以查看到saf执行时传入的参数,可以判断8 9 10这三个参数大概率是硬编码的。

1683364338_645619f276cf547ef76f3.png!small?1683364338904

这样我们就可以将“saf service 8 9 10”作为目标字符串,在光猫的脚本及二进制elf文件(elf文件的导入、导出表及资源节都是明文)中进行搜索,发现/bin/proxyDaemon文件中存在该字符串。顺藤摸瓜,发现/bin/reg_server及/bin/startup程序调用了proxyDaemon。其中,/bin/reg_server从名字判断应该是在电信光猫未注册时调用,而/bin/startup则是光猫正常启动流程中调用的。进一步回溯,最终调用/bin/startup的是/etc/init.d/rc32脚本,该脚本代码如下图:

1683364355_64561a03e40a1ea8ffca0.png!small?1683364356498

3.2、saf程序

文章【6】对saf程序进行了简单分析,认为saf程序负责调用lxc创建,运行以及监控OpenWrt容器,但给出的信息相对有限。我们会在文章【6】的基础上进行适当的延展,试图还原一个更加细化的OpenWrt容器。

如前文所属,/etc/init.d/rc32脚本文件以后台运行方式执行/bin/startup程序,并传入了serice  8  9  10等4个参数。通过/proc/mtd文件来看,8、9、10分别对应了FLASH中的:framework1,framework2以及apps等3个存储区域。

1683364374_64561a16f092cfb8d7f4e.png!small?1683364375790

再结合saf程序的帮助信息,如下图。我们基本可以判断saf会根据指定的mtd编号,加载指定的文件,然后创建并启动容器。那么问题就来了,运行一个OpenWrt容器,为什么需要加载3个存储区域的文件呢?

1683364434_64561a52e842d672cfa60.png!small?1683364435341


3.3、利用LXC提供的软件操作光猫中的容器

在光猫的/usr/bin目录下,我们发现了LXC容器管理所需的程序,如下图。为了能更好的分析光猫中的容器,我们在Ubuntu环境下安装了LXC,并尝试部署了OpenWrt容器。于是,我们尝试利用光猫中已有的LXC容器操作程序,查看OpenWrt容器信息。

1683364488_64561a88386d5e675fc1d.png!small?1683364488927

Lxc-ls程序能够查看当前系统中正在运行的容器,但是遗憾的是电信光猫做了定制化裁剪,lxc-ls程序无法直接运行。

1683364511_64561a9f3690aaa564940.png!small?1683364511573

于是,我们尝试在可写的/tmp目录下创建bin目录,并从OpenWrt容器对应的文件系统中拷贝运行lxc-ls所需的程序,并将/tmp/bin添加至PATH变量中,就可以成功执行了。如下图,通过lxc-ls查看到当前系统中仅存在一个容器,即saf。这个实验结果与我们之前的猜测是吻合的,也就是说天翼网关3.0中通过LXC部署了OpenWrt系统。但电信光猫中对LXC的应用仅限于此吗?为什么运行一个OpenWrt系统,saf需要从FLASH存储中加载3个存储区域的内容呢?

1683364583_64561ae78361818424619.png!small?1683364583959



3.4、俄罗斯套娃

我们在已经dump下来的运行时文件系统中搜索lxc相关程序时,发现一个很有意思的现象,一度让我们迷惑不已,见下图。用于启动LXC容器的lxc-start程序居然同时存在于光猫宿主文件系统和OpenWrt容器文件系统中(OpenWrt容器在光猫中对应的文件位于/opt/upt/framework/rootfs/usr/bin目录)。

1683364638_64561b1e09989e8e76424.png!small?1683364638547


如上图,我们看到这样的搜索结果,第一反应是OpenWrt自带LXC软件?但是,对比我们在Ubuntu中部署的OpenWrt容器,可以确定OpenWrt并不是原生支持LXC,也就是说原生的OpenWrt是没有安装LXC的。于是,我们进一步查看了/opt/upt/framework/rootfs/usr/bin目录下与LXC相关的其他程序,如下图。令人吃惊的是,OpenWrt容器中确实安装有LXC,但是原生的支撑程序被删减到了4个。那么,我们可以就此得出两个推论:

1、OpenWrt系统中也使用了LXC容器;

2、OpenWrt系统中的容器只需要执行最简单的启动,关闭等操作。

1683364668_64561b3ce53b5d1e628b0.png!small?1683364669327

为了验证上述结论,我们试图将光猫宿主文件系统中的LXC支撑软件拷贝至OpenWrt容器中,最终查看到光猫中运行的LXC容器。

1683364695_64561b576c6be5858a4f4.png!small?1683364695995

1683364702_64561b5e14f6971cd2227.png!small?1683364702480

如上图,我们可以看到,OpenWrt系统中还运行了6LXC容器。当然,为什么电信运营商会采用这种俄罗斯套娃的方式运行自己的智能插件(姑且这么称呼吧),如何运行和管理插件,这些内容属于运营商业务领域的东西,我们就不展开了。


0x04:小结

这篇文章是电信天翼网关3.0安全分析的下篇,也是最后一篇文章了。因为时间缘故,针对运营商光纤网络终端(Optical Network Terminal,ONU)【6】中最常见的光猫(Home Gateway Unit,HGU)的分析也就完结了。结合前文的分析,从传统网络安全和物联网网络安全视角而言,电信光猫的攻击面主要集中在以下几个方面(运营商ITMS管理系统安全不考虑):

1、光猫的Web应用,asp脚本、cgi程序等等。

2、光猫无线网络接入,3.0光猫大多自带Wi-Fi,且默认开放。

3、OpenWrt及其攻击面,攻击者是否可以借助OpenWrt实现持久化?OpenWrt所支持的tcpdump等插件是否会被用于网络攻击?

文中若有不对之处,敬请谅解!

0x05:参考

【1】云原生时代,你真的懂Docker和LXC的区别吗? https://zhuanlan.zhihu.com/p/411276481

【2】什么是 Linux 容器. https://www.redhat.com/zh/topics/containers/whats-a-linux-container#什么是-lxc-项目?

【3】MWC落幕!中国电信“天翼网关”2.0完美呈现!//https://www.sohu.com/a/153967240_515599

【4】打造智慧家庭连接新生态,中国电信明年推天翼网关3.0版本//https://www.sohu.com/a/208951906_234937

【5】唤醒华为智能网关光猫隐藏的小宇宙:OpenWRT. https://www.right.com.cn/forum/thread-352805-1-1.html

【6】ONU、ONT、SFU、HGU……有什么区别. https://zhuanlan.zhihu.com/p/402225304

# 终端安全 # 系统安全 # 物联网安全 # IoT安全 # 设备安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录