逆向华为路由器-part2(翻译)

在第1部分中,我们找到了一个调试通用异步收发器端口,它允许我们访问一个Linux外壳。在这一点上,我们可以像开发人员一样访问路由器来调试问题、控制系统等。 该系统的第一个概述很容易访问,不需要昂贵的工具,并且通常会产生非常有趣的结果。如果你想进行一些硬件黑客攻击,但没有时间把你的手弄脏,这通常是你停止深入硬件,开始在更高层次的接口上工作的时候:网络漏洞,互联网服务提供商配置协议,等等。 这些帖子是面向硬件的,所以我们将使用这个访问来收集一些随机的数据。任何能帮助我们理解这个系统或者以后会派上用场的东西。

从我们停下的地方继续
Picture of Documented UARTs

我们启动串行终端应用程序并在计算机中运行,然后启动路由器。
Boot Sequence
我们按回车键,从三磷酸腺苷命令行界面获得登录提示;介绍凭证管理员:admin,我们在可承诺量命令行中。执行命令外壳,我们就可以进入BusyBox命令行界面(稍后将详细介绍BusyBox)。
-------------------------------
-----Welcome to ATP Cli------
-------------------------------
Login: admin
Password:    #Password is ‘admin'
ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# ls
var   usr   tmp   sbin  proc  mnt   lib   init  etc   dev   bin
至此,我们已经看到了Ralink集成电路中的3个基本固件层:
  1.  U-boot:设备的引导加载器。它了解设备的内存映射,启动主固件执行,并处理其他一些低级任务 
  2. Linux:路由器运行Linux来保持对硬件的整体控制,协调并行进程等。可承诺量命令行界面和BusyBox都在它上面运行 
  3. Busybox:一个小的二进制文件,包括多个linux命令的简化版本。它还提供了我们调用这些命令的外壳。

较低级别的接口不太直观,可能无法访问所有数据,增加了阻塞设备的机会;从BusyBox开始,一路走下去总是个好主意。 现在,让我们关注引导序列本身。开发人员认为在引导过程中显示某些数据会很有用,所以让我们看看是否有什么可以使用的。

引导调试消息
我们发现多个随机的数据分散在引导序列中。我们会找到有用的信息,例如用于某些闪存段的压缩算法:
boot msg kernel lzma
当我们开始提取外部闪存时,关于外部闪存结构的信息将非常有用。
ram data. not very useful
SPI Flash Memory Map!
更多压缩英特尔:
root is squashfs'd
当我们试图从外部闪存访问原始数据时,我们将不得不处理压缩算法,所以最好知道哪些算法正在被使用。
什么是ATP命令行界面和BusyBox?[理论]
该路由器中的Ralink集成电路运行一个Linux内核来控制内存和并行进程,保持对系统的整体控制等。在这种情况下,根据Ralink的产品简介,他们使用了Linux 2.6.21软件开发工具包。可承诺量命令行界面是运行在Linux之上或作为内核一部分的命令行界面。它为系统提供了第一层身份验证,但除此之外,它非常有限:
ATP>help
Welcome to ATP command line tool.
If any question, please input "?" at the end of command.
ATP>?
cls
debug
help
save
?
exit
ATP>
help没有提到shell命令,但它通常是shell或sh。此可承诺量命令行界面包含少于10个命令,不支持任何复杂的过程控制或文件导航。这就是BusyBox的作用。 BusyBox是一个包含通用unix命令简化版本的二进制文件,这既是为了开发方便,也是最重要的是为了节省内存。从ls和cd到顶部,系统V初始化脚本和管道,它允许我们使用Ralink集成电路,有点像你的普通Linux盒。 BusyBox二进制文件包含的一个实用程序是外壳本身,它可以访问其余的命令:
ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# ls
var   usr   tmp   sbin  proc  mnt   lib   init  etc   dev   bin
#
# ls /bin
zebra        swapdev      printserver  ln           ebtables     cat
wpsd         startbsp     pppc         klog         dns          busybox
wlancmd      sntp         ping         kill         dms          brctl
web          smbpasswd    ntfs-3g      iwpriv       dhcps        atserver
usbserver    smbd         nmbd         iwconfig     dhcpc        atmcmd
usbmount     sleep        netstat      iptables     ddnsc        atcmd
upnp         siproxd      mount        ipp          date         at
upg          sh           mldproxy     ipcheck      cwmp         ash
umount       scanner      mknod        ip           cp           adslcmd
tr111        rm           mkdir        igmpproxy    console      acl
tr064        ripd         mii_mgr      hw_nat       cms          ac
telnetd      reg          mic          ethcmd       cli
tc           radvdump     ls           equipcmd     chown
switch       ps           log          echo         chmod
#
在探索文件系统时,您会注意到不同的busybox怪癖,例如/bin/中BusyBox二进制文件的符号链接。知道这一点很好,因为任何可能包含敏感数据的命令都不会是BusyBox二进制文件的一部分。
探索文件系统

现在我们已经进入系统,知道哪些命令可用,让我们看看其中是否有什么有用的东西。我们只是想要系统的第一个概述,所以我不想麻烦暴露每一个微小的数据。 top命令将帮助我们识别哪些进程消耗了最多的资源。这可以非常好地表明一些过程是否重要。不过,路由器空闲时,它不会说什么:
top
正在运行的进程之一是usbmount,因此路由器必须支持将“某些东西”连接到USB端口。让我们在那里插入一个闪存驱动器…
usb 1-1: new high speed USB device using rt3xxx-ehci and address 2
[...]
++++++sambacms.c 2374 renice=renice -n +10 -p 1423
USB被识别并安装到/mnt/usb1_1/,samba服务器启动。这些文件显示在/etc/samba/中:
# ls -l /etc/samba/
-rw-r--r--    1 0        0             103 smbpasswd
-rw-r--r--    1 0        0               0 smbusers
-rw-r--r--    1 0        0             480 smb.conf
-rw-------    1 0        0            8192 secrets.tdb
# cat /etc/samba/smbpasswd
nobody:0:XXXXXXXXXXXXXXXXXXX:564E923F5AF30J373F7C8_______4D2A:[U ]:LCT-1ED36884:
更多数据,以防有用: 
  • netstat-a:设备正在监听的网络端口 
  • iptables-list:我们可以建立telnet并通过网络继续,但我更愿意尽可能靠近裸机
  •  wlancmd help:控制WiFi无线电的实用程序,有很多可用选项 
  • /etc/profile 
  • /etc/inetd 
  • /etc/services 
  • /var/:包含系统在运行过程中使用的文件 
/var/ and /etc/总是包含大量有用的数据,有些数据乍一看显而易见。上面写的是/etc/serverkey.pem吗??/etc/:系统配置文件等。
Blurred /etc/serverkey.pem
在嵌入式系统中找到私钥是很常见的。它们可以是用于与服务器进行相互验证的顶级域名系统连接的RSA私钥、隐藏在应用程序要加载的文件中的变量等。通过硬件访问一台设备,您可以获得密钥,帮助您窃听加密连接、攻击服务器、最终用户或车队中的其他设备。 
该密钥可用于与华为或互联网服务提供商的一些服务器通信,尽管这种情况并不常见。另一方面,找到用于与远程服务器通信的公共证书也很常见。 
在这种情况下,我们在私钥旁边找到两个证书;两者都是由同一个“人”自行签名的:
  • /etc/servercert.pem:很可能是服务器密钥的证书
  • /etc/root.pem:可能用于连接互联网服务提供商或华为的服务器。不确定。
/etc/ppp256/config和/etc/ppp258/config中还有一些数据:

评论

此博客中的热门博文

逆向华为路由器-part1(翻译)

固件逆向-part1