PT632电信“老猫”分析

 

作者:L.A.M@Duncan SecTeam

0x00:引言

本以为电信的“老猫”(老旧光猫)是跑的OpenWrt,所以打一开始就先尝试着在各种操作系统上跑OpenWrt,然后把OpenWrt的系统架构和Luci的东西基本搞明白了,就好拿着master的“老猫”来玩一下。结果,很意外的结果,这款友华2014年之后生产的PT632光猫(在友华官网已经找不到这只猫了。。。),里面跑的压根儿不是电信现在主流的光猫软件系统。从线上和线下了解到的情况来看,现在电信当家光猫的Web应用是基于Luci定制“改发”的。然而,PT632光猫里面跑的是Tiny Core Linux,一个非常mini的Linux发行版,适配Arm架构的版本大小不到10MB,你没看错,这货就是Linux王国里的“矮人族”或者“地精”。

其实,这样也蛮好的,正好有个机会了解一下Tiny Core Linux这个小矮人。说人家是“小矮人”其实也不太恰当,毕竟在Distrowatch的年度排名还是72位哦。出于兴趣和该死的好奇,我下载x86 64位的TinyCore Linux,21MB,还能跑出这样的GUI,我还是很满足的。

差点忘了,按照team的规矩,得先祭上mindmap。。。

 

0x01:PT632软硬件简介

1、硬件

这款猫很老的另一个证明就是他只支持2.4GHz的单频,也就是说没有5GHz的Wi-Fi。对硬件不是很熟悉,就简单粗暴的把cpuinfo扔这里吧。。。

2、软件

操作系统:Tiny Core Linux

从设备的CMIIT ID查询到的信息来看,PT632是友华在2014年就提交注册了的,但是系统信息显示呢,TCLinux是2016年编译的,或许这是系统做了一次在线升级,当然也可能是这猫是在2016年生产的。

 

0x02:Tiny Core Linux

Tiny Core Linux(后统称tcLinux)是有Lauri Kasanen等人发起的一个Linux发行版项目。tcLinux的特点是小,确切的说是极致的精致(Mini),因此官方不推荐安装运行这种典型的Linux运行方式,而是希望使用者每次都从外部存储设备中Load系统到RAM里面(就是所谓的这种Live CD模式),再适合嵌入式设备不过了。当系统启动(Load到RAM之后)后,再加载(mount或者copy)应用程序。之所以选用这种模式的原因,官方给出的解释是:
——快啊
——防止不必要的文件系统修改
——确保系统每次Boot的时候,都是一个原汁原味的、无比纯粹的系统
因此,tcLinux的宗旨就是:方便,快速,易于更新且稳定可靠!

tcLinux有一套自己的Package管理工具,包括基于GUI的和基于CLI的,这里就不细说了。通过tcLinux提供的tce-ab工具,我们可以查询到该平台source里提供的两款httpd工具:

考虑到PT632猫的系统环境,自己测试了一下在tcLinux上搭建基于busybox-httpd的Web服务器。整个搭建工作非常简单,大概有以下几个步骤:
1)通过简单的CLI交互查找package,选中并查看package信息,然后安装package即可。

$tce-ab #不允许root权限运行tce-ab,赞

2)创建所需的web根目录

其中/home/tc/是默认账户tc的家目录,web根目录wwwroot就配置到tc家目录下。由于busybox-httpd不会自动搜索index文件,因此需要自己动手写一个。Cgi-bin里面是busybox的cgi程序,hello.sh是一个测试脚本。一切很完美,支持简单的页面,也支持cgi脚本。这个特性是我很关系的,因为PT632下面也有很多的cgi脚本。

通过tce-ab查询到的busybox-httpd包里面,有服务器启动的信息,很简单就能上手。

另外,有一个很有意思的地方:通过tce-ab安装的这些程序都是存放在tmp目录下的,然后链接到/usr/local目录下。或许,这是因为tcLinux强调在RAM运行的原因,很多东西下载之后都放在tmp下面。但是,预装的dbus为什么也放在/tmp目录下呢?PT632是否也是如此呢?细想,挺有意思的。。。

 

0x03:busybox

对于很多人而言,busybox应该不是一个陌生的概念,尤其是喜欢在手机上安装Linux模拟器的童鞋。大家熟知的Kali Nethunter,还是我们team最喜欢的Andrax,都用了busybox。但是,很多人对它却不甚了解,甚至以为这就是一个Linux的超级迷你的发行版。额,当然不是这样了,所以这里顺势来一个冬日IoT大补丸吧。

Busybox是一个常用的Linux命令“工具包”,整合了很多常用的Linux命令,而且非常适合于嵌入式环境。或许,很多人认为这个东西的存在违背常理,既然是Linux命令,那么整合在一块儿就会变小吗?难不成就跟那酒精兑水一样吗?100毫升纯净水加入100毫升酒精,其体积小于200毫升!当然,不是这个逻辑,主要是Denys Vlasenko将这些常用命令做了简化处理,主要是剔除了各种常用命令中极少使用到的options,那么当然体积就直接呈几何量级的减小。然而,这样的精简并不会影响绝大多数的正常使用,或许这也是“二八原理”在软件维护和系统运维领域的一个典型案例吧。

上面这张图是busybox所整合的全部命令,当然还有一些其它的外部工具可以使用,比如OpenWrt中采用的符合OpenSSH 2.0规范的Dropbear服务器等等。而下面这张图呢,则是PT632中的busybox所提供的全部命令,可以说贫瘠得一毛不拔,连alias,find和grep这样几乎是生活必需品一样的Linux命令都给阉割掉了。虽然友华的工程师这种做法极其过分,但是在一定程度上确实会让hacker没了兴致。

在查找PT632系统中的系统命令和安装程序时,很意外的得到了master家光猫的电信账户和密码,本以为需要解密配置文件或者分析rom文件才能搞到的,没想到来得这么以外,一条ps -ef命令就拿到手了。。。

 

0x04:tcapi

Tcapi是PT632光猫上的一个专门用于操作配置信息“数据库”的helper程序。从功能上来说,tcapi非常类似于在前一篇文章“OpenWrt之入门”中提到的uci。不过,这个tcapi只能处理PT632自身的配置信息,并不能修改其它程序的配置文件。我在tcLinux的发行版中尝试寻找这个程序,结果证明了我的观点:tcapi应该是友华工程师自己开发的,而不是tcLinux自带的。

那么,tcapi到底操作的那个文件呢?在读/boaroot中的CGI脚本时找到了答案——/tmp/var/romfile.cfg。这个文件存储了PT632中的绝大多数信息,包括各种服务的配置,账号信息等等。

从这个xml格式的文件中可以看出,系统中的各种配置都被“逐节”的保存到这个配置文件中了。有了tcapi这个程序,通过几次简单的查询操作之后,我们就能掌握如何使用它来修改PT632的各种配置信息。

Tcapi的命令语法非常简单,仅有9个命令选项,操作的内容就是配置文件中的各个节点和属性值。

在分析romfile.cfg文件之后,我们就很清楚可以通过tcapi获取PT632设备的各种账户信息,但是不包括用户的电信账号和密码。

Tcapi在代码实现的时候有些诡异,在解析这种XML文档时,通常情况下coder们都会选择用“.”来作为节点之间的连接符号,比如Accout节点下的FtpEntry节点,我们会描述为“Account.FtpEntry”。一开始尝通过tcapi设置Ftp服务器属性的时候,一直没有成功,后来翻看/boaroot/cgi/telnet.asp脚本时,发现设置PT632参数的正确打开方式是:

是的,你没看错,这个tcapi就是这么奇葩。一方面,可以不给出上级节点就能直接查到末端节点信息;另一方面,不通过下划线“_”作为连接符号,你没办法设置末端节点的属性值。

当然,要开启Ftp服务器的话,还需要通过tcapi提交修改请求,即执行一下代码:

#tcapi commit Account_FtpEntry

 

0x05:boa http server

Boa是一个针对嵌入式应用环境的Web服务器,文件大小可以妥妥的控制在30KB左右,当然PT632上查看到的代码大小呢,比这个还要小。。。

由于boa的官方网站已经down了,所以从网上查找到的一些残存资料来看,boa是可以做到免配置文件的。当然,PT632还是给boa写了一个配置文件,在/boaroot/boa.conf

/boaroot/boa.conf只是在boa http server配置文件模板的基础上做了适当修改,比如起一个适合的主机名等等

 

0x06:一些小小的tricks

1、关于电信各种猫的维护账号的问题

在拿到PT632之后,自己尝试了很多办法去获得telecomadmin账号的密码,最终都失败了。失败不要紧,关键是发现全国各地,确切地说是各个省直辖市貌似都会自己的维护账号(telecomadmin)和密码。那么,这就存在一个问题了。这个维护密码是通过固件直接写到猫里去的呢?还是设备接入电信网络之后通过TR069协议获取到的呢?

为了解答这个问题,我做了一个实验,也就是把这只PT632“老猫”重置了,然后下载恢复之后的romfile.cfg文件。以下是重置前和重置之后的romfile.cfg文件对比:

很显然,网上所说的电信光猫通用密码“nE7jA%5m”的确是真的,但是这个密码已经可以通过类似TR069或者CPE协议,在设备首次注册的时候就修改了这个密码。当然,电信师傅应该是可以通过他们的终端设备查找到某一台设备的维护账户密码。

2、关于如何启动telnet

从网上找了不少关于电信光猫的资料,没有找到适合PT632的。很多文章给出的方法是通过telecomadmin账户登录后台之后,可以通过Web GUI开启telnet服务。我试过了,不行,即便找到了telecomadmin也不行,Web GUI上没有提供开启telnet服务的接口。

后来,成功登录telecomadmin账户后,尝试着直接访问cgi-bin/telnet.asp,切换到了telnet启动页面。

3、关于如何获取telecomadmin,telnet,ftp等账户及密码

前些年,包括电信在内的很多运营商的确存在管理维护账户使用统一密码的情况,因此我也很自觉地尝试寻找这些所谓的密码,但失败了。后来,浏览到一篇文章,其中提到在普通用户登录的情况下,直接访问cgi-bin目录下的upgrade.asp页面,可以下载PT632的配置文件,结果真就OK了。文件就是之前提到的/tmp/var/romfile.cfg,并且是明文的。

4、关于文件的下载和上传

PT632的USB接口并没有发挥实际的作用,说白了也就是个摆设,因此没办法通过USB备份来获取系统中的各种文件。但是,这些代码和配置文件不拿到手显然是无法愉快的研究,于是就打起了cig-bin/upgrade.asp的注意。很显然,这个所谓的bakup配置文件的功能仅仅提供了下载,并没有加密,所以研究所需的文件都可以打包并保存为/tmp/var/romfile.cfg,这样就可以搞定了。

再者,还可以开启ftp服务。ftp服务器貌似也是被友华的工程师给修改过的,配置文件没法配置ftp根目录。找了半天才找到ftp的root目录在/var/tmp/mnt/dev目录下,奇葩吧。当然,至少ftp服务还是可以启动的,还能用就已经谢天谢地了。

5、关于SSH和Tftp服务

友华的工程师应该是把SSH和Tftp服务器给直接禁用了,虽然配置文件里面依然有相应的配置信息字段。为什么有这个猜测呢?一方面,通过tcapi无法启动SSH和Tftp服务;另一方面,在cgi-bin目录下并没有发现可以远程开启SSH和Tftp的页面。

 

0x07:总结

1、功能性

从功能性来说,PT632毫无疑问能满足普通家庭最基本的光纤上网需求,虽然自带一个“阑尾”式的USB接口,虽然只支持2.4GHz单频,虽然不能打开SSH。但是,这猫不就用来连接互联网吗?而且,据master说,这猫特别稳定,几乎没有任何故障(不包括从来没被他老人家使用过的2.4GHz无线路由功能)。

再者,由于这款猫真的太老了,当前很多贫价路由都有的基本功能,这货都没有。不过,情有可原,毕竟一把年纪了。

2、易用性

这个我没什么发言权。不过,这猫都是电信师傅上门安装的,安装好之后,除非是移机啥的,貌似没什么易用性可言啊!PS:这一节是team member让我写上的。。。

3、安全性

从系统层面来说,PT632还真算不错了,由于没有采用OpenWrt这类灵活的Linux架构,很多分区都是read-only的,因此对于像我这样的小白,hacking这样一台设备的确是有难度的。再者,从busybox的阉割程度来看,友华的工程师是真的用心做了功课的。尽可能剔除无用的api,势必限制了操作系统的可用性,当然会提高黑客攻击的难度。

从应用程序的角度来看,Web界面的权限管理是有问题的,比如通过useradmin(普通用户)权限,就可以直接开启telnet服务。再就是,下载的配置文件居然没有加密,这个着实不应该。当然,还有其它一堆问题,就不在这里拉家常了,毕竟这款猫都已经被友华给淘汰了。。。

 

0x08:参考

1、 友华通信技术有限公司. http://www.youhuatech.cn/about.aspx
2、 Tiye Core Linux Book. http://www.tinycorelinux.net/book.html

(完)