移动GS3101光猫分析 —— 狸猫换太子

阅读量708179

发布时间 : 2022-03-02 14:30:15

 

转载:DuncanSecTeam

作者:L.A.M@DuncanSecTeam

0x00:引言

之前,倒腾PT632光猫的时候,是出于对OpenWrt的好奇,结果发现PT632跑的是Boa Web服务器,根本就没有把OpenWrt放里头。后来,在倒腾ZN600的时候,发现OpenWrt并不是“后宫的娘娘”,只不过是豢养的“少奶奶”罢了。这跟我眼中的Windows非常不一样,但又一样一样的——总是不断引入新的东西,完了执着的保留旧的东西。电信的光猫也是如出一辙,一方面,每一代的电信光猫都非常“奇葩”,总会让你感到下巴搁地上了;另一方面,他们对已经停更的Boa Web服务器以及底层E8-C那套东西都始终不离不弃。

明明是要掰扯移动家的“猫”,为啥一直在说电信家的“猫”呢?哈哈哈,这次咱还真得在移动家的“猫”上头继续掰扯电信家的“猫”!很疑惑?没事儿,您接着看。当然,还得先祭上team要求的文章脉络mindmap,team定下的规矩“不能破”。。。

 

0x01:光猫简介

大家可能犯糊涂了,你这葫芦里头到底卖的什么药?明明标题里头写了移动光猫GS3101,咋跟这儿掰扯电信家猫呢?这是个好问题,不过这问题更应该问移动或者移动集采中标的单位。你这葫芦里头到底卖的什么药?明明是移动的光猫GS3101,咋会是PT632呢?私以为,移动的“猫”颜值高些,好看!为什么呀?因为电信的“猫”(PT632)算一只很老的猫了,以当前的眼光来看真的好丑!

或许,大家会问你凭什么说这俩猫都是PT632呢?确实,说话得有证据,master说了不能瞎说,安全圈儿很小的!

——截取自移动光猫GS3101中/usr/etc/devInf.conf

——截取自电信光猫PT632中/usr/etc/devInf.conf

因为手上已经没有电信的光猫(PT632)了,所以只能从dump下来的文件中找出来对应的配置文件,当然移动光猫那张黑底绿晒儿的是新鲜的。很明显,即便有红绿色盲,大家也能看出这两个猫的设备配置文件相似度99%。其中,厂商(Manufacture)和客户软件版本(CustomerSoftwareVersion)存在差异,一个是创发(台商)产的,一个是友华造的。再者,就是这两只猫都是在四川用的,可为什么绿晒儿那猫写的是“PT632-CT-GD-V1.0”呢?CT在电信的猫里头都是“China Telecom”的缩写,而SC和GD则分别是四川和广东的缩写。那么为啥移动GS3101会把四川地区用的猫标注为广东地区用的猫呢?

咱还是接着唠这猫的基本情况吧,继续解剖。。。

 

0x02:软硬件信息

1、硬件

这猫依旧是一个MIPS的芯片,跟PT632是一毛一样。
system type : EcoNet EN751221 SOC
processor : 0
cpu model : MIPS 34Kc V5.8
BogoMIPS : 599.65
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
ASEs implemented : mips16 dsp mt
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available

processor : 1
cpu model : (null) V5.8
BogoMIPS : 448.92
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
ASEs implemented : mips16 dsp mt
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available

processor : 2
cpu model : (null) V5.8
BogoMIPS : 448.92
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
ASEs implemented : mips16 dsp mt
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available

processor : 3
cpu model : (null) V5.8
BogoMIPS : 448.92
wait instruction : yes
microsecond timers : yes
tlb_entries : 64
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0ff8, 0x0ff8]
ASEs implemented : mips16 dsp mt
shadow register sets : 1
core : 0
VCED exceptions : not available
VCEI exceptions : not available

内存也是跟PT632一样

系统中挂载的存储设备

/proc/mtd文件貌似是用来管理ROM存储空间分配的,能够看出外存的划分,猜测具体的用途。

——截取自移动光猫GS3101

值得注意的时,GS3101和PT632的mtd文件存在一定差异,虽然都是脱胎于同一个型号。移动的猫一共11个分区,其中有一个是Java预留的。然而,电信的只有10个分区,没有Java预留分区。其实,这是一个隐藏了很多秘密的细微区别,后面接着唠。

——截取自电信光猫PT632

/etc/partitions文件则是记录了整个系统中的分区情况,包括ROM,RAM以及U盘等。图片最后那个sda是我插上去倒腾文件的U盘。

2、软件

操作系统依旧是Linux tc。至于什么是“Linux tc”嘛,因为查不到资料,所以我们依旧存在非常大的争议,该死的争议。。。

因为传承了PT632嘛,装的也是Linux tc,而且启动脚本里头也大量依赖于tcapi进行系统配置,所以tcapi这个软件是必须有的。这次手欠,尝试了一下跟一个version选项,结果顺带查看到了比较详细的软件版本信息和编译信息。

Boa Web Server也是一道儿挪过来的,其实这东西应该是跟着E8-C一起长大的,算发小儿。抱歉,这里又用到了“应该”是这个极其模糊的字眼儿,因为没资料,因为没设备,因为没法大规模逆向。。。请原谅一个脚本小子的无知和虔诚

下面是从PT632电信光猫里头copy过来的配置文件头部,不是从上面代码里头copy的哦,这可真不是要凑篇幅,搞字数啊。一毛一样,没变化啊,因为这个Boa Web Server项目其实已经停滞了,没人再更新维护了。

这俩猫最大的区别或许就是这个Felix了吧。移动的猫毕竟在代际上已经落后一大截儿了,再不搞点动静儿出来,没法交代啊,还不给骂死啊。于是,移动也开始学着搞插件了。前边也说了,电信厉害啊,在天翼网关3.0里头直接用Lxc跑了一个被jail的OpenWrt,用一丢丢的Lxc容器技术就搞了一个“广阔天地大有可为”的插件平台,兹要是OpenWrt支持的Plugin,我们电信家的猫都能跑!

移动一看急火攻心,那心里头肯定不是滋味儿啊,流氓!完了,他们还不好意思跟着学,不然就跟中国男足一样,大年初一的“脸都不要了”。所以,移动也跟着在猫里头耍起了小心思,给自家猫整上了基于Java的Felix,一个由Apache基金会出钱,遵循OSGi协议开发应用程序框架,把宝压上头了,希望来一个“咸鱼大翻身”。这么一折腾,Felix支持的.jar格式的Plugin不就全能装上了吗?这就直接拉开架势干上了!

PS:以上两段文字纯属小白在严谨技术分析和广泛资料查证之后的合理推(Y)测(Y),如有雷同,纯属巧合!

 

0x03:光猫配置文件及启动脚本

由于小白能力极其有限且水平二班(连一般都赶不上,二班勉强吧),所以只能根据自己的极其肤浅的认识和不懈的倒腾,试着聊一聊这猫的关键配置文件和部分启动脚本(/etc/init.d/rcS)。如有不对之处,望各位大咖,大牛和路过的老师们“给骂骂醒”,小白想做一个有志向的脚本小子,决不与中国男足同流合污。

1、光猫的配置文件

说到这光猫的配置文件(包括PT632,甚至是E8-A和E8-C)其实都有非常多,比如光猫自身的配置文件,Wi-Fi配置文件,TR-069协议配置文件(一个专门跟你过不去的协议,Dan疼),运营商及区域运营商配置文件,总之海了去。。。不过,我觉得比较有意思的有这么两类配置文件,一个就是光猫本身的配置文件,包括启动程序,设置光猫自身运行配置(借助tcapi实现);另一个就是运营商及区域运营商配置文件,很有意思哦,分析这类配置文件能够极大满足你的“偷窥欲”,哈哈哈。。。

从目前的分析来看,光猫的配置文件/userfs/profile.cfg是由/etc/init.d/rcS启动脚本来进行解析的,具体的解析方法呢,在小白看来还是很巧妙啦(毕竟,我知识的圈圈太小,圈圈外头的空白太大,瀚若星辰。。。)这帮电信的工程师们把所有的配置选项全部写到一个配置文件里头了—— /userfs/profile.cfg,当然配置文件中的每一行都是以“#”打头的,如果有必要打开某个选项,就把这一行前头的“#”去掉,并且将选项设置为“TCSUPPORT_XXX_YYY=y”,比如下面这个栗子。其中,所有未开启的选项都备注为“is not set”。反之,需要开启的选项则设置“=y”

#
# Automatically generated make config: don't edit
# Wed Apr 26 13:38:33 2017
#
# TCSUPPORT_CPU_TC3162 is not set
# TCSUPPORT_CPU_TC3162U is not set
。。。
TCSUPPORT_2_6_36_KERNEL=y
。。。
# TCSUPPORT_CT_FTP_BACKDOOR is not set
。。。。。。

之后,启动脚本会将这个配置文件权限设置为“777”,其实主要是想让这配置文件可执行!是的,你没听错,就是让配置文件可以执行,这就是shell的魅力啦。走着,咱来品一品/etc/init.d/rcS这个脚本文件。或许,很多小伙伴(像我这样的script小子们)都不知道在Linux中内置的“.”居然是一个命令,这个命令负责执行一个脚本文件(前提是被执行的脚本文件必须得有可执行权限)。从下边儿代码里头能够看出来,在判断/userfs/profile.cfg文件存在之后,这配置文件就给设置为了艾瑞巴蒂可读、可写且可执行的权限。那么,脚本文件中“#”打头的代码权当是装饰了,那些没了“#”符号打头,完了还加个“=y”尾巴的行,其实就相当于声明shell变量了。于是乎,/etc/init.d/rcS脚本就一一判断哪些参数是被开启了的,也就是那些“TCSUPPORT_XXX_YYY=y”的。是不是很像预先定义的全局变量,当然这个只是启动脚本运行时的shell变量,可别跟我似的把这玩意儿全当作环境变量了,够傻吧。。。

在/etc/init.d/rcS这个启动脚本中有很多地方调用tcapi进行参数设置,不过tcapi设置的是偏运营商的选项,因为偏硬件,底层系统以及驱动程序的设置大多都是由/etc/init.d/rcS脚本文件完成的。后面,咱们再接着唠运营商相关的配置文件。

2、启动脚本 —— /etc/init.d/rcS

除了涉及移动自身光猫附加特性之外的东西,这脚本文件跟PT632区别不大。启动脚本会把/userfs/profile.cfg等一众配置脚本先修改为“777”权限,检测其中哪些参数被开启,然后加载特定的驱动,运行特定软件等。虽然这猫是电信传承过来的,但好歹得在移动网络里头跑啊,所以必须得改改。我们search了一下,涉及到CMCC改动的地方有这么一些,都摘在下头了。

#!/bin/sh
PROFILE_CFG=/userfs/profile.cfg
if [ -f $PROFILE_CFG ] ; then
chmod 777 $PROFILE_CFG
. $PROFILE_CFG
fi
。。。
if [ "$TCSUPPORT_CMCC" = "" ] || [ "$TCSUPPORT_CPU_EN7521" = "" ] ;then
if [ "$TCSUPPORT_CT_JOYME" != "" ] ;then
/bin/mkdir -m 0777 -p /var/osgi
fi
fi
。。。
if [ "$TCSUPPORT_CMCCV2" != "" ] && [ "$TCSUPPORT_CT_PORT_BIND_IPV6" != "" ] ;then
insmod $KERNEL_DIR/kernel/net/bridge/netfilter/ebt_mark_m.ko
fi
。。。
if [ "$TCSUPPORT_CMCC" = "" ] || [ "$TCSUPPORT_CPU_EN7521" = "" ] ;then
if [ "$TCSUPPORT_CT_JOYME" != "" ] ;then
insmod /lib/modules/plugin_netlimit.ko
fi
if [ "$TCSUPPORT_CT_JOYME2" != "" ] ;then
insmod /lib/modules/info_utility.ko
fi
fi
。。。
if [ "$TCSUPPORT_CMCCV2" == "" ] ;then
。。。 #这里有很多if语句代码块儿...
fi
。。。
if [ "$TCSUPPORT_CMCCV2" == "" ] ;then
if [ "$TCSUPPORT_USBDEVICE20" != "" ] ;then
echo "TCSUPPORT_USBDEVICE20"
#usb device
insmod /lib/modules/tc3162_udc20.ko
insmod /lib/modules/g_ether.ko
fi
fi
。。。
if [ "$TCSUPPORT_CMCCV2" == "" ] ;then
#USB Backup and Restore
if [ "$TCSUPPORT_CT_USB_BACKUPRESTORE" != "" ] ;then
/userfs/bin/mtd readflash /tmp/var/romfile.cfg~~ 65536 0 romfile
fi
fi
。。。
if [ "$TCSUPPORT_CMCC" = "" ] || [ "$TCSUPPORT_CPU_EN7521" = "" ] ;then
if [ "$TCSUPPORT_CT_JOYME_BANDWIDTH" != "" ] ;then
insmod /lib/modules/bandwidth.ko
fi
。。。 #省略了好多if语句块儿
fi
。。。
if [ "$TCSUPPORT_CMCCV2" == "" ] ;then
insmod /lib/modules/usbhost/nls_utf8.ko
fi
。。。
if [ "$TCSUPPORT_CMCC_WLAN_ENHANCE" != "" ] ;then
/bin/echo 14288 > /proc/net/skbmgr_driver_max_skb
else
if [ "$TCSUPPORT_DUAL_WLAN_MT7612E" != "" ] || [ "$TCSUPPORT_DUAL_WLAN_MT7615E" != "" ];then
/bin/echo 8192 > /proc/net/skbmgr_driver_max_skb
else
/bin/echo 4096 > /proc/net/skbmgr_driver_max_skb
fi
fi
/bin/echo 3072 > /proc/net/skbmgr_limit
if [ "$TCSUPPORT_CMCC_WLAN_ENHANCE" != "" ] ;then
/bin/echo 12240 > /proc/net/skbmgr_4k_limit
else
if [ "$TCSUPPORT_DUAL_WLAN_MT7612E" != "" ] || [ "$TCSUPPORT_DUAL_WLAN_MT7615E" != "" ];then
/bin/echo 6000 > /proc/net/skbmgr_4k_limit
else
/bin/echo 2048 > /proc/net/skbmgr_4k_limit
fi
fi
。。。。。。

其中,网络限速的操作也是在这里头给弄的。除了限速,里头还有很多有意思的配置。

if [ "$TCSUPPORT_CT" != "" ] ;then
/bin/echo 0 > /proc/net/auto_clear_cache
/bin/echo 0 > /proc/net/auto_kill_process
/bin/echo 1 > /proc/sys/kernel/panic
if [ "$TCSUPPORT_CMCC_WLAN_ENHANCE" != "" ] ;then
/bin/echo 14288 > /proc/net/skbmgr_driver_max_skb
else
if [ "$TCSUPPORT_DUAL_WLAN_MT7612E" != "" ] || [ "$TCSUPPORT_DUAL_WLAN_MT7615E" != "" ];then/bin/echo 8192 > /proc/net/skbmgr_driver_max_skb`else
/bin/echo 4096 > /proc/net/skbmgr_driver_max_skb
fi
fi

 

0x04:移动业务配置文件及启动脚本

1、运营商配置文件 —— /userfs/ctromfile.cfg

在GS3101光猫的/userfs目录下有近70个以类似ctromfile_XXX.cfg的配置文件,这些文件都是.tar.gz格式的,并没有加密,仅仅只是gz压缩了一下。也不知道为啥,那么多人在网上兜售各种破解光猫配置文件的技巧甚至是工具,呵呵。

不过,这些XML格式配置文件还是有些意思的,不是那么简单的。每一个解压出来的XML格式配置文件都套了一个文件头(file-header)。从下面的截图中可以看出,这个XML配置文件头部256字节是一个独立于XML主体的头部,应该是用于版本控制和有效性验证吧。

我们测试了一下,不同区域的配置文件在文件头和XML主体上都存在区别。文件头的区别主要在文件最初的16字节,具体没有过多倒腾。完了,不同区域的光猫需要设置不同的地区号或者地区名称拼音缩写,需要设置不同的域名(比如RMS服务器的域名,TR-069服务器域名等等)等等。

注意,各个读取对应的配置文件都是以.tar.gz格式存储于/userfs目录下,并按照”ctromfile_省份拼音首字母大写.cfg”。这个文件是什么时候被加载或者读取到内存中的呢?分析了一下,应该是由/userfs/bin/cfg_manager程序读取并加载至内存,而/userfs/bin/cfg_manager程序则是由启动脚本/etc/init.d/rcS脚本文件启动并运行于后台的。

。。。。。。
/userfs/bin/cfg_manager &
if [ "$TCSUPPORT_CT_BLOCK_PROCESS" = "" ] ;then
echo "sleep 5 after cfg_manager&"
sleep 5
fi
。。。。。。

2、涉及运营商的配置选项

对于运营商而言,光猫是一个比较重要的东西,毕竟每一次集中采购就是一千万上下的量,可不马虎不得。因此,电信在光猫里头配置了ITMS(Integrated Terminal Management Service,终端综合管理系统),移动和联通则是装的RMS(Remote Management Service,远程管理服务)。为了保证正常管理,移动光猫需要配置相应的服务器地址,比如:

<Cwmp>
<Entry Active="Yes"
periodInterval="43200" periodActive="Yes"
acsUrl="http://itms.scmcc.com.cn:9090/ACS-server/ACS"
acsUserName="cpe" acsPassword="cpe" conReqPath="/tr69"
conReqUserName="RMS" conReqPassword="RMS" CPHostName="rms.sc.chinamobile.com"
CpePort="9090" CpePath="/entry_basic/node1/tr069" ManufacturerName="HGW"
ManufacturerOUI="" ProductClass="" SerialNum="" PrvCode="" CRAuthFlag="1" ValueTypeFlag="1" conReqPort="7547" Persistent_Data="" WarrantyDate="" AcsConnStatus="0"
MWMgtUrl="0.0.0.0" MWMgtPort="0" Tr069Enable="1" prePassword=""
saveDelay="2"/>
</Cwmp>

再者,我们对比了一下不同区域移动光猫的配置文件,差距不大,主要就是在运营商本地服务器域名和一些细节性的东西,比如:

# diff ctromfile_CQ.cfg ctromfile_SC.cfg
。。。
87c86
< acsUrl="http://rms.cq.chinamobile.com:8012"
---
> acsUrl=http://itms.scmcc.com.cn:9090/ACS-server/ACS
89,93c88,92
< conReqUserName="RMS" conReqPassword="RMS" CPHostName="rms.cq.chinamobile.com"
< CpePort="8012" CpePath="/entry_basic/node1/tr069" ManufacturerName="HGW"
< ManufacturerOUI="" ProductClass="" SerialNum="" PrvCode="" CRAuthFlag="0" ValueTypeFlag="1" conReqPort="7547" Persistent_Data="" WarrantyDate="" AcsConnStatus="0"
< MWMgtUrl="0.0.0.0" MWMgtPort="0" Tr069Enable="1" prePassword="" tcapiMode="2" delayTime="6"
< saveDelay="2" tcpmss="1460"/>
---
> conReqUserName="RMS" conReqPassword="RMS" CPHostName="rms.sc.chinamobile.com"
> CpePort="9090" CpePath="/entry_basic/node1/tr069" ManufacturerName="HGW"
> ManufacturerOUI="" ProductClass="" SerialNum="" PrvCode="" CRAuthFlag="1" ValueTypeFlag="1" conReqPort="7547" Persistent_Data="" WarrantyDate="" AcsConnStatus="0"
> MWMgtUrl="0.0.0.0" MWMgtPort="0" Tr069Enable="1" prePassword=""
> saveDelay="2"/>
。。。
507c505
< <Entry debug="0" MgtURL="bms.cq.chinamobile.com" Port="60004" Heartbeat="600" Ability="0" LocatePort="17998" InterfaceRight="" OperateSAddr="" OperateSPort="" WLanStartTime="" WLanEndTime="" WLanScheduleEable="" ledstatus="on"/>
---> <Entry debug=”0″ MgtURL=”223.86.3.20″ Port=”19123″ Heartbeat=”600″ Ability=”0″ LocatePort=”17998″ InterfaceRight=”” OperateSAddr=”” OperateSPort=”” WLanStartTime=”” WLanEndTime=”” WLanScheduleEable=”” ledstatus=”on” speedTestSession=”3″/>`

其实,把这两部分内容仔细捋一捋基本就能搞清楚光猫里头这两个分量极重的配置文件到底都配置了些啥。因为我们不太清楚移动RMS究竟实现了些啥,登录这个服务器是否存在硬件层面的限制,反正看到登录的用户名和密码都是“RMS”。

 

0x05:软件分析

按照前头脑图的脉络,我们接下来会掰扯一下光猫中比较重要的几个软件。

1、Linux tc

在这移动光猫里头,在我看来最重要且最神秘的应该是这个叫做“Linux tc”的操作系统。我们用nmap -A扫过,显示的是Unix操作系统。然后呢,电信官方一直将它视作自己的“智能操作系统”。完了,这个基于Linux内核开发的天翼智能网关操作系统虽然没有开源,但却被用在了行业竞争对手移动的光猫上头,你说这世界是不是很神奇啊。而且,我们搜索了很多电信相关的资料,除了上海电信研究院介绍他们天翼系列智能网关的文章上能看到“智能操作系统”这几个字儿,其它啥也找不到,包括某流氓文库也全都找了。如果大家对Linux tc操作系统感兴趣,我们在前面的文章中提到过一些,或许可以翻一番【1】

2、Tcapi

因为看到了熟悉的“Linux tc”操作系统,而且在/etc/init.d/rcS启动脚本中看到了通过/userfs/bin/tcapi来设置运营商相关选项的值,所以确定tcapi这东西是存在的。而且,还因为手欠还发现了一个隐藏的version选项。

再者,网上很多修改光猫配置的帖子都是让直接修改配置文件。其实,在了解tcapi的功能和使用方法后,那些修改配置文件的方法一下就很low了。Tcapi不仅可以动态修改光猫中的配置信息,还可以提交并且持久化。整个操作步骤就三个:
——set命令:指明需要修改的节点和属性,以及需要改成什么值
——commit命令:提交修改
——save命令:保存修改

如果不放心,可以通过show命令查看一下修改之后的值。并且,如果仅仅修改值但不commit提交的话,修改不会生效并且不会写入到配置文件。用tcapi修改的好处就是,优雅,不用下载和上传文件,毕竟有些猫的shell限制得很死。再者,只要获得了telnet shell就可以改,不需要额外的U盘或者搭建FTP服务器。

3、Boa

在前边儿简介里头也提到过了,GS3101和PT632的Boa服务器版本信息是一致的,我们也对比了一下两个猫的Boa配置文件,几乎一模一样:

要强调一下的是,我们发现后期移动的光猫(至少有一个型号的光猫)没有使用Boa了,换了别的Web服务器。然而,电信那边儿却一直在用Boa服务器直到“天翼网关 3.0”。因为还没成功搞定天翼网关 4.0的telnet shell,因此没法确定Boa是否延续到了4.0版本的天翼网关。

4、Felix

Felix是一个非常牛逼的软件,一方面它是严格遵循了OSGi框架(Open Services Gateway initiative,开放网关协议),另一方面这东西是Apache基金会拿钱砸的,靠谱,至少移动认为这东西靠谱!

补一补OSGi的知识【2】:“OSGi是Open Services Gateway initiative的缩写,叫做开放服务网关协议。我们说到OSGi时,根据上下文不同,通常可能指OSGi联盟、OSGi标准或者OSGi框架。OSGi联盟成立于1999年,当时是为了建立一套将可管理的服务(Managed Service)通过网络交付到设备中的开放标准。可见,OSGi最开始面向的是从嵌入式和移动设备,这也不难理解OSGi名称的由来了。不过现在OSGi已经不作为开放服务网关协议的缩写了,OSGi联盟官方网站的介绍中,OSGi只是作为一种技术的名称,而不是一种缩写了。因为时至今日,OSGi已经逐渐扩展到了企业应用领域,在JAVA企业级开发中扮演越来越重要的角色。

OSGi联盟现在将OSGi定义为一种技术:

OSGi技术是指一系列用于定义Java动态化组件系统的标准。这些标准通过为大型分布式系统以及嵌入式系统提供一种模块化架构减少了软件的复杂度。”

“随着OSGi技术的不断发展,OSGi联盟的成员数量已经由最开始的几个增长到目前超过100个,很多世界著名的IT企业都加入到OSGi的阵营之中,如Adobe、IBM、Oracle、SAP、RedHat和Siemens等。”

Apache Felix项目包含了一个OSGi R4服务平台(Service Platform)标准的实现,以及大量相关的OSGi功能与技术的实现。Felix下的子项目有二十多个。除了核心框架的实现,也对主要的OSGi服务进行了实现,同时还提供了iPojo这样的OSGi编程模型(后面我们将会详细介绍)。Felix还提供了一个强大的Shell,名叫Gogo, 用以与OSGi框架之间的交互。

Felix的配置文件是/userfs/config.properties,里头设定了Felix运行相关的参数,比如安全级别,需要加载的.jar文件等等,比如下面这个截图。

此外,GS3101的Felix配置文件中默认是开启了8080端口的,如下图。当然,至于为什么会如此配置Felix,还没时间去倒腾。

值得注意的是:
——Felix官文中明确说过,一旦用户获得了Remote Shell就拥有了远程控制整个Felix框架的能力。
——通过Remote Shell可以轻松的在网络上下载并安装.jar格式的插件,嘿嘿嘿。。。
——至于如何获得GS3101的Felix Remote Shell嘛,还没有弄明白。

 

0x06:some tricks

1、开启telnet

GS3101和PT632开启光猫telnet的方法大致一样,在用户(光猫背后标注的用户)登录光猫后,访问一个特定的页面(http://192.168.1.1/cgi-bin/getGateWay.cgi)即可开启。移动光猫在开启telnet之后,还要回显一下用户名和密码,估计是为了方便移动宽带安装和运维人员使用吧。如果对开启GS3101 telnet服务感兴趣,可以参考这篇文章【3】。 而且,有一点非常奇怪,在GS3101中,telnet账户并不是我们熟悉的“CMCCAdmin”,而是“admin”。这些变化让人多少有点儿不舒服,本来就是一个PT632的猫,为啥非要整出这些幺儿子呢,让人绕了不少冤枉路。

2、通过tcapi查看相关账户信息

在顺利开启telnet服务之后,咱们就没必要绕弯儿去找出telnet对应的账户和密码了。只要对ctromfile.cfg配置文件中的基本信息稍微熟悉一下,直接用tcapi查询,修改就OK了。以下是getGateWay.cgi中开启telnet服务服务的代码片段。

 

0x07:总结

在使劲儿捣鼓移动GS3101光猫之前,真的是打死也想不到这猫居然和PT632还有这么一段血缘关系。毕竟是基于PT632来改的,功能性,易用性和安全性都跟PT632差不多。不过,由于移动采用了遵循OSGi协议的Felix框架,从理论上来说,可以加载很多的第三方插件(具体还要看移动如何定义Felix的安全策略)。从这一点来看,GS3101是比PT632更强的,毕竟内嵌了一个极具开放性的Felix框架。不过,相较于ZN600等“天翼智能网关 3.0”等设备而言,个人觉得移动基于Felix来实现兼容第三方插件的解决方案不如电信基于容器技术运行OpenWrt的方案,主要有两点原因:

OpenWrt是一个专门针对路由器等网络设备的嵌入式Linux操作系统(当然,也能用作智能机器人的OS),先天就是“万里挑一”的体质,而且后边还有上千个可以安装的插件,可谓是如虎添翼。而且,Lxc容器技术也已经应用快二十年了,算是久经考验的容器技术了,安全这点也不是什么大的问题。

Felix是Apache基金会遵循OSGi框架来实现的一个应用软件框架,而且这东西不是只针对嵌入式环境的(毕竟Java有很好的的设备兼容性),而且没有那么多人在嵌入式系统上开发基于Felix框架的应用程序包。再者,官方也说了这个Felix的远程shell是可以控制整个框架的,因此安全性上难免或多或少存在那么一些安全隐患。

 

0x08:引用

1.《PT632电信“老猫”分析》. https://www.anquanke.com/post/id/259503
2.《Hello OSGI —- Apache Felix》. https://developer.aliyun.com/article/278273
3.《关于破解移动宽带光猫 型号: GS3101 超级管理员密码》. https://www.cnblogs.com/scoluo/p/13945175.html

分享到:微信
+110赞
收藏
邓肯安全小组
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66