行业新闻

ZN600电信光猫分析 —— 初识

ZN600电信光猫分析 —— 初识

 

作者:L.A.M@Duncan SecTeam

0x00:引言

这应该是OpenWrt系列的第三篇文章了,这次终于要谈到主题了——OpenWrt,按照这个进度来说,好像真的是非常慢热。。。在上一篇文章《PT632电信“老猫”分析》中,做了一些关于PT632光猫的简单分析,但是这款猫已经停产了,因此没有对这款光猫进行更深入的剖析。这篇文章将会对电信新款的ZN600光猫(众多品牌天翼智能网关中的一款)进行相对深入的分析,当然主要是从操作系统和网络安全的角度来讲。如果想要详细了解如何捣鼓光猫的话,可以去恩山和chinaadsl上去搜罗一下,有很多大牛和一线技术人员的分析文章,非常棒,也给了我们很多的启发,在此一并表示感谢!

这篇文章涉及到的内容会比较多一些,因为ZN600光猫较之于PT632而言做了很多升级(本质上来说存在两个代际的跨越),主要包括但不限于:Lxc,OpenWrt,tcLinux等。在开始正文之前,还是按照Duncan SecTeam的老规矩,祭上本文的mindmap,便于各位客官把我文章脉络,“挑肥拣瘦”。

 

0x01:ZN600电信光猫简介

ZN600是深圳兆能科技有限公司的一款天翼智能网关,目前还能在官网上查询到。但遗憾的是,公司官网上并没有给出这款光猫的技术细节,能够查到的最detail信息的也就是下面这张截图了。可以看到,官方只是给出了CPU,内存,FLASH等一些最基本的硬件信息,至于系统信息则是完全没有的。不过,咱这不就给它慢慢补上了嘛。。。

1、硬件信息

a) CPU简介

从兆能官网的信息来看,主CPU采用的是MTK 7526GT芯片,但是网上找不到任何技术资料,包括MTK官网,着实很吊诡。难道是定制芯片的原因吗?希望路过的学硬件的同学可以给科普一下啦。。。

b) Wi-Fi芯片——2.4G,5G双频

Wi-Fi芯片组其实也存在类似前面主芯片组的问题,找不着对应的MTK 7692N 2.4GHz芯片和MTK 7612EN 5GHz芯片,勉强在官网找到了一个MT7612E的芯片信息,迷茫。。。

c) 内存 —— /proc/meminfo

从官方给出的内存信息来看ZN600应该有512MB大小,但实际的内存为469092KB(458MB),这个地方暂时没搞明白。有懂硬件的童靴,请多多指教啦!

d) FLASH存储

从下面的图片中可以看到ZN600一共有12个分区,总共的大小为180282KB(约177MB),这大小跟官方说的128MB FLASH又有出入,请懂硬件的童鞋给科普一下啦^_^

各个分区的用途也都非常清楚了

2、软件

a) Linux tc

ZN600光猫跑的是Linux内核是3.18.21版本,这个版本算是很低了,但是已经能够支持Linux Container容器。在这里,我被要求代表team给各位看官大爷道个歉,之前关于电信网关中跑的“tc” Linux给出了错误的信息,天翼网关中的“tc” Linux与Tiny Core Linux项目或许并不是同宗同源的,很可能只是凑巧用了同样的缩写“tc” Linux。下面两张图分别截取了在天翼网关上的uname命令执行结果和在Tiny Core Linux系统上执行uname命令的执行结果。可以看出,天翼网关的系统名称为“Linux tc”,而Tiny Core Linux的系统名称为“Linux box”。

起初,我坚定认为天翼网关是从Tiny Core Linux项目fork过来的原因是,他们俩的定位是一致的针对嵌入式系统的Linux,而且他们都有各种有一套类似于dbus的系统参数配置命名,而且名字也是非常相似,所以就犯懒了,草率的认定这俩系统就是一个祖宗。

b) Linux Container —— Lxc

我们team一致认为ZN600这只光猫最大的亮点在于采用了Lxc容器技术,这一点比起其他两家运行商来说在技术上显得更加大胆和自信,毕竟像光猫这种千家万户都在用的设备在设计之初就是一个“稳”字当头啊,一是怕大规模断网,二是怕美丽国通过这些智能网关设备对我们搞大规模监听(这是master说的)。

当然,也正是使用了这种操作系统级别的虚拟化技术,工程师们才能够比较容易的将电信传统的Web管理平台和“离经叛道”的OpenWrt项目整合到了一起。Master说,正是因为使用了容器技术,才使得电信工程师们在温和的技术改革中,既不需要在传统的Web管理界面中生硬的加入OpenWrt项目的各种功能(防火墙,行为管理等),也不用不着在OpenWrt中加上一大堆支持TR069协议的代码。这就是容器技术带来的技术变革和好处。

c) Busyboxc) Busybox

在ZN600光猫中,这款Linux操作系统“小军刀”仍然有在使用,不过显然是做了升级,解除了对grep命令的封杀,大快人心啊。。。

d) Boa

对比之前的电信PT632光猫来看,Boa Web服务器基本没变化。估计电信工程师们应该是被那套老的Web管理界面给害苦了,坑惨了吧,都不愿意碰那套东西。历史遗留代码往往没人愿意在上面花精力维护,况且他们还把OpenWrt那套东西给塞进来了。

e) Openwrt

从参考文章[3]“打造智慧家庭连接新生态,中国电信明年推天翼网关3.0版本”中,可以看到电信在2018年推出了天翼网关3.0版本,这算得上给360、小米等智能路由器品牌当头一棒吧,直接亮底牌——谁才是家庭网关的王?

从上面这张图中,我们可以找到Lxc的身影——“先进的容器隔离技术”,当然这个“先进”应该是对照另外两家提供固网服务的后起友商吧,毕竟lxc算不得什么先进技术啊(都发展十几年了)!再者,所谓的智能OS难道就是一个针对嵌入式系统的Linux魔改版?当然,最让人捉摸不透的就是所谓的“智能应用插件”技术。从前面分析已经看出来了,电信传统的Web端口算是彻底废了,只是目前还把持网络通信这块儿的功能,其余的所谓“智能”技术全部交给了OpenWrt。。。

这里有一个小问题,电信的工程师或者乙方工程师有考虑过OpenWrt的开源软件许可权吗?OpenWrt是遵循GNU GPL v.2许可的,按理说,相关基于OpenWrt二次开发的源代码以及用于管理Lxc容器的saf程序的源代码都应该是要公开的吧?

 

0x02:与PT632光猫的软件对比分析

1、关于“Linux tc”

之前,team一直都以为天翼网关用的是Tiny Core Linux,简称tcLinux,但是这个“事实”似乎遭受到了挑战。从参考文章[3]来看,电信研究院定制开发了自己的“智能”操作系统。在电信ZN600光猫上,执行uname命令得到如下信息:

很明显,系统用的是Linux而不是Unix,其中那个“tc”到底对应什么?我们team开始产生分歧了,我个人 觉得应该是Tiny Core这个单词中tc的缩写,但是他们都认为就是Tele前缀和communication这个单词的首字母缩写。当然,这个好像对于hacking而言没有太大关系。再者,人电信说是“智能”操作系统也没问题啊,小米的路由跑上OpenWrt不也就变身“智能”路由了吗?当然,如果天翼网关中跑的是Tiny Core Linux的话,那从内核信息来看,这应该是从一个很老的Tiny Core Linux系统fork过来的版本了。

总的来说,不论天翼网关的操作系统是否为Tiny Core Linux,在天翼网关从1.0版本升级到最新的4.0版本,系统本身并没有多大变化,依旧在使用自己定义的xml格式配置文件存储信息,依旧在使用tcapi命令来读写这个xml配置文件,依旧在使用那一套老的Web App来进行光猫的管理与配置。

2、Busybox略有升级

Busybox依旧是“阉割”过的版本,没有alias,没有find,没有ftpd,当然也有一些升级,比如把grep添加进来了。在telnet远程连接到ZN600时,有grep过滤一下,可以更加从容的处理想要的信息了。其实,我们在讨论为什么grep会拿进来?莫非是电信工程师们也觉得在debug的时候,或者在查看、修改配置文件的时候,面对一堆的输出结果很费眼?

当然,我们还是觉得电信工程师在Busybox的“阉割”上是做得非常好的,不出意外应该是三大里头做得最好的,毕竟多暴漏一个对于自己没有意义的命令就算不会便宜那帮“黑客”,但至少对自己没任何好处啊。。。至于移动、联通的猫嘛,等master买回来了我们会一一为大家解剖的。

3、Boa原地踏步

其实,严格意义上讲,电信天翼网关 4.0跑了两个HTTP Server,一个是boa,另一个则是OpenWrt项目中的Luci。对于后者,大家应该很熟悉,因为OpenWrt火啊,再者登录自己天翼网关的时候都会看到类似: http://192.168.1.1/cgi-bin/luci这样的链接,其中cgi-bin/luci就是Luci HTTP Server的web根目录。然而,对于boa的话,熟悉的人应该不多,虽然我们在之前PT632光猫的文章里也讲过,但是boa这个项目似乎已经流产了,没有更进一步的信息。

可能是碍于Boa已死的事实,电信工程师也赖得对boa进行升级了,只要保证系统能够正常使用(GPON终端)能够正常使用就行,当一天和尚撞一天钟嘛,何必跟自己认真呢?至于“智能”化的责任嘛,那就全部丢给了后面的OpenWrt吧。。。

4、Lxc开天辟地

前面,我们说到了电信在天翼网关中引入了容器技术,这举动应该是运营商里头最为激进的。这话是master说的,他是在分析最新的移动和电信光猫之后得出的结论,但是我觉得有点突突,毕竟咱team不是还没碰联通的猫吗?

当然,电信工程师在天翼网关中引入容器技术的确很超前(相对于另外两个龟速选手),但是也不至于像中国电信上海研究院领导PPT里头讲的那么夸张,“先进的容器隔离技术”。Linux Container,lxc,仅仅是一种操作系统级别的虚拟化技术,而且都已经玩儿了十几年了,怕谈不上先进吧?

再者,不得不再次表扬电信工程师们,把lxc也给无情的“阉割”了,“阉割”了,“阉割”了。。。Lxc默认安装之后,lxc软件包里头原本有许多个命令,如下图所示:

结果,电信工程师们把Lxc给“阉割”得啥也不是啊,比太监都还不如啊,就只剩下了四个命令,如下图:

如果你们认为电信工程师们就这点狠劲儿的话,那你们太小看他们了。除此之外,他们还专门写一个叫做“saf”的容器管理程序,专门用来管理名为saf的容器(OpenWrt的母体)。我们team头脑风暴了好几次,始终没明白这个“saf”是啥意思?关键是,这个程序的console选项需要输入密码!密码!密码!而且,这个密码不是电信超级用户密码。

由于Lxc被阉割,没办法通过lxc-attach或者lxc-console命令进入OpenWrt容器,那么也就没法安装OpenWrt插件。这一切都是拜saf所赐!当然,牛人无处不在,chinadsl.net上的大牛songee就自己写了一个脚本绕过saf,实现了在某些型号的天翼网关上跑新版OpenWrt,拜一个先!!!

5、OpenWrt顺应发展

在我们看来,天翼网关3.0开始以来,电信工程师们就试图在人员有限的情况下找到一条对抗互联网公司试图“逼宫”的出路。毕竟,猫才是千家万户接入互联网的第一个隘口,小米,360,极路由啥的寄希望于在“王”的背后建立起另一个国中国,并试图从三大抢走资源与用户,这个不是摆明了找死吗?电信研究院能眼看着地盘被抢吗?于是,一场不是你死就是我活的决斗开始了。电信工程师取了个巧,确切地说是跟着学,用成熟的OpenWrt框架作为自己路由功能的技术依托和支撑,然后借助OpenWrt庞大的生态(相比其他软路由)来解决自己人员不足的问题,这么一来其他什么“智能路由”或者“傻瓜路由”都没活路了。。。

貌似跑题了。。。

从技术上来说,为了能够减小所需付出的研发成本,然后以最快的时间解决战斗,电信工程师们选择基于 “先进的容器技术”——Lxc容器技术,为自己猫武装上OpenWrt。

 

0x03:小结

本以为一篇文章就能够把ZN600说清楚,但是拿到猫之后发现两个代际的变化真不是盖的,很多东西需要静下心来仔细分析,认真的品一品电信工程师们的技术路线更迭。当然,总的来说电信的新款光猫给人的感觉依旧是“虽然不咋地,但是三大我第一”。

1、在技术上电信光猫的确走在了前头(相比于另外两只乌龟),不论是出于市场的需要,还是图自己省事儿的“初心”,总之采用“先进的容器隔离技术”让原本索然无味的光猫有了一丝嚼劲儿。

2、OpenWrt的引入让光猫这个原本定位清晰的EPON终端变得更加鬼魅,当然也顺势通过“全屋Wi-Fi”的概念抢走了一大块儿市场蛋糕。

3、在安全的考量上电信光猫无疑是做得非常好的。当然,这个“好”并不是单纯指技术,更重要的是在busybox等软件的“约束”上体现出了很严谨的软件安全思维。master他老人家说,这一点非常值得我这种脚本小子和网安小白虚心学习。

 

0x04:参考

1、《PT632电信“老猫”分析》. https://www.anquanke.com/post/id/259503
2、ZN600@深圳兆能科技有限公司. http://www.superelectron.com.cn/product/1260978261601550338/1262223589059334146/
3、《打造智慧家庭连接新生态,中国电信明年推天翼网关3.0版本》. https://www.sohu.com/a/208951906_234937
4、《F650/F450、HS8145等ARM平台,LXC容器内运行 OpenWrt 19.07.1 子系统》. http://www.chinadsl.net/thread-166731-1-1.html

关闭