😇
牛牛的安全 Odin
  • 个人介绍
  • 数据安全
  • 工控安全
    • 工控概念
  • 车联网安全合规
    • R155
    • CSMS\VTA
    • GDPR认证
  • 车联网安全
    • 漏洞订阅
    • 汽车攻击时间轴
    • 汽车信息安全研究
      • 车厂安全需求 Custom Requirement
      • 安全威胁
      • 参考文章
      • Who’s Behind the Wheel?
      • 安全研究基础
      • 智能网联汽车安全渗透指标
      • 智能网联汽车软件安全测试关键技术研究
      • 基于硬件在环的整车控制器功能安全测试技术研究
      • 智能网联汽车信息安全解决方案
      • 自动驾驶汽车的安全性-识别挑战
    • ECU逆向案例
      • 特斯拉攻击链
      • 汽车动力系统ECU固件逆向工程初探
  • 物联网安全
    • IoT 技术和协议
    • 智能设备常规测试思路总结
    • 各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
    • QEMU 系统仿真
      • 如何“用 QEMU 模拟它”
      • 处理加密的路由器固件
    • 自动分析Automated Approach
    • IOT渗透测试(一)
    • 物联网安全目录
  • 固件分析案例
    • 智能门锁、手环
      • MCU固件反汇编
      • 云丁鹿客门锁中bootloader和FreeRTOS的分析
      • 云丁鹿客门锁BLE通信的分析(下)
      • 云丁鹿客门锁BLE通信的分析(中)
      • 云丁鹿客门锁BLE通信的分析(上)
      • 华为智联旗下小豚AI摄像头的完整分析(下)
      • 华为智联旗下小豚AI摄像头的完整分析(上)
      • 海康萤石智能门锁的网关分析(4)
      • 海康萤石智能门锁的网关分析(3)
      • 海康萤石智能门锁的网关分析(2)
      • 海康萤石智能门锁的网关分析(1)
      • idapython编写和调试
      • 果加智能门锁的全面分析(下)
      • 果加智能门锁的全面分析(中)
      • 果加智能门锁的全面分析(上)
      • BLE智能手环
      • 耶鲁智能门锁的简单测试(下)
      • 耶鲁智能门锁的简单测试(上)
      • 耶鲁门锁漏洞
      • 对一款BLE灯泡的分析
      • BLE协议栈与Android BLE接口简介
    • 在IoT设备中查找端口对应进程的四种方法
    • 路由器命令执行
    • 对基于Philips TriMedia CPU的网络摄像机进行逆向工程
    • 从Microsoft Band以及 Hello Sense 设备中提取自己的历史数据
    • CVE-2021-22909- 深入研究 UBIQUITI 固件更新错误
    • 复现|摄像头固件重打包
    • Dlink_DWR-932B路由器固件分析
    • 针对小米九号平衡车的无接触式攻击
    • 记一次智能印章设备的漏洞挖掘
  • APP 逆向
    • Go二进制文件逆向分析从基础到进阶——综述
    • Switch APP逆向分析
  • 传统静态代码分析
    • 静态分析案例
      • ELF恶意软件的静态分析原理和方法(上)
      • ELF恶意软件的静态分析原理和方法(下)
    • 静态代码分析工具清单
    • 企业级静态代码分析工具清单
  • 应用安全测试
    • DAST、SAST、IAST
    • IAST 工具初探
  • 芯片架构
    • ARM指令集概念
    • ARM指令集
    • 冯·诺伊曼结构
    • 指令集
    • 处理器架构、指令集和汇编语言,三者有何关系?
  • 病毒分析
    • 熊猫烧香
  • 编程知识
    • REST API 教程
  • 流量分析工具
    • 卡巴斯基开源的智能手机流量劫持工具
    • 利用 Burp Suite 劫持 Android App 的流量(二)
    • 利用 Burp Suite 劫持 Android App 的流量(一)
  • 区块链安全
    • 安全多方计算
    • Chainalysis 团队从区块链的角度分析发现 2020 年最大的 4 起勒索软件攻击实现存在关联
  • 攻击案例
    • 特斯拉Powerwall网关可能受到黑客攻击
  • 移动应用
    • Mac上使用Charles抓包
    • 手机抓包工具汇总
    • APP渗透测试流程和技巧大全
    • 加壳和脱壳
    • 浅谈 Android Dex 文件
    • 移动应用漏洞分析样例分享
    • 移动应用常见漏洞分析
    • 移动应用漏洞分析工具介绍
    • 渗透测试流程详解 及 移动APP安全测试要点
    • Frida Android hook
  • 安全设计
    • 【软件安全设计】安全开发生命周期(SDL)
Powered by GitBook
On this page
  • 网关分析
  • 2.1 串口分析
  • 2.2 重打包固件
  • 2.3 固件烧录
  • 小结
  1. 固件分析案例
  2. 智能门锁、手环

海康萤石智能门锁的网关分析(2)

Previous海康萤石智能门锁的网关分析(3)Next海康萤石智能门锁的网关分析(1)

Last updated 3 years ago

我们将继续分析海康萤石的智能网关,其思路是先从简单的地方着手,把不需要逆向分析的,可以直接就能观察到的输出和文件都看一看,然后再深入的研究某个细节。 在本专题的上一篇文章中,我们已经获取了电路板上Flash存储的固件内容,同时对MCU的UART引脚进行测试,确认该引脚与软排线接口连通。那么就下来,我们就想办法连上软排线的接口。

网关分析

2.1 串口分析

为了接通软排线,我们需要购买一段20pin的软排线,淘宝可以买到,楼下手机店可能也有。软排线的另一端连接转接板,将0.5mm间距的软排线转接为常见的2.54mm间距的排针。如下图所示:

接下来,左侧转接板再通过usb转ttl模块连接电脑。usb转ttl模块的作用是调整电平逻辑,通过该模块,使usb接口的RS232逻辑电平转为MCU的ttl逻辑电平,反之亦然。可以在淘宝买到该模块,截图如下:

上图中,左侧有5个引脚,我们需要重点关注其中三个,分别是RXD引脚、TXD引脚和GND引脚。RXD引脚是该模块的输入引脚,要连接MCU的 TXD引脚,就是将MCU的输出作为usb转ttl模块的输入。TXD引脚链接MCU的RXD引脚。最后通过接通MCU的GND引脚和该模块的GND引脚实现共地。连接完成之后,如下图:

另外,最好给网关单独准备一个带开关的电源插座,以便于我们反复重启网关,否则来回插拔网关容易导致各种问题。我们在实际操作中,软排线和软排线接口的触点位置经常虚接,暂无法确定海康萤石的软排线接口是否需要特殊的软排线才能连接,但这样也勉强能用。

将usb转ttl模块插入电脑之后,在电脑的“设备管理器”选项卡中就会出现一个COM口,并为其分配了一个COM编号,如下图所示:

为了读取此COM口的通信数据,我们还需要一个软件,可以选择Xshell、SecureCRT或者sscom串口调试工具等。我们这里用Xshell作为读取串口的软件,相关配置如下:

按照图中的方式完成配置,其中Port选择刚刚识别到的COM口编号,其他参数选择默认就好,如有变动,我们会额外指出的。

配置完毕后,连接该串口,给网关上电,如果一切操作都正确无误,那么就可以看到如下的输出内容:

上图中的输出内容显然是网关上电之后的输出日志,待系统启动完成之后,我们可以试着输入一些内容,这时就会出现登陆嵌入式Linux系统的提示字符,看来还能通过COM口登陆呢,但是登陆用户和登陆密码我们暂不知道。好吧,那就重新去翻一翻提取出来的网关固件。

2.2 重打包固件

在本专题的上一篇中,我们已经把完整的网关内容提取出来了,在其中的cpio文件系统中,可以找到/etc/shadow文件,文件内容如下:

借助于彩虹表,就可以找到root用户的登陆密码为abc123。使用该用户名,就可以顺利登陆海康萤石的智能网关,并使用串口shell提供的各种功能了。但是上文也提到了,我们的软排线触点可能有点虚接,有时候吹口气就断了,还是想办法弄个更稳定的连接吧。

在海康萤石的网关固件中翻一翻,可以发现在/sbin目录中有telnetd程序,如果我们可以通过telnet连接智能网关,或许会稳定很多,如下图所示:

注意,该程序是指向busybox的软链接,如果把解压缩出的固件内容拿到windows环境后,可能会导致/sbin目录中是空的。可以使用串口shell登陆设备,然后运行telnetd程序,但这就意味着每次设备重启之后,我们都要使用shell启动telnetd程序,这样操作也很麻烦。

继续翻找,我们在squashfs文件系统中找到initrun.sh脚本,通过名字和内容可以判断该脚本是在网关上电启动后进行初始化操作的。如果我们在该脚本中启动telnetd,然后将固件重新打包烧录回去,应该就不需要软排线了,为此我们给initrun.sh增加telnetd命令,如下图:

接下来,就要考虑如何将固件重新打包,然后刷回至Flash中了。固件解包时,只要binwalk跑一下就完事了,但是重打包就相对麻烦一些。我们刚刚修改了initrun.sh文件,该文件在squashfs文件系统中,所以就需要重新打包squashfs文件系统,但mksquashfs在打包时,有很多细节的参数和配置,这些参数和配置将直接影响我们重打包的系统是否可以正常运行,此外,还有设备只能识别特定版本的mksquashfs打包出来的固件。

为解决squashfs文件系统打包的问题,我们最好参考一下MT7688AN的官方SDK。假设海康萤石的开发者基于该SDK的进行开发的,那么我们也根据SDK中的固件打包方法进行操作,得到的固件应该就是可运行的。首先在官网上下载MT7688 SDK,链接如下:http://labs.mediatek.com/zh-cn/platform/linkit-smart-7688,如下图:

同时,在‘staging_dir\host\bin’目录中可以找到图2-11 中的mksquashfs4程序,如下图所示:

我们试着用图2-12中的程序和图2-11中的参数打包一下开启telnetd程序的squashfs文件系统,如下图所示:

上图中,-comp xz是选择xz压缩格式,通过binwalk可以直接查看到原固件中的压缩格式,所以我们也选择该压缩格式。

最后,将打包后的文件系统重新放回固件文件中。我们用了一个颇为简单粗暴的方法,即用UltraEdit直接16进制编辑。上一篇的binwalk分析结果显示从地址0x700000开始的位置是squashfs文件系统的位置,如下图:

我们只需要将重新打包的squashfs文件覆盖到此处即可,需要注意的是固件文件从地址0x900000起始就是另一个squashfs文件系统了,所以,覆盖完成后需要调整两个文件系统之间的填充字节数量以保证另一个squashfs文件系统的起始偏移仍然是0x900000。至此,我们完成了重打包工作。

2.3 固件烧录

固件的烧录和固件的提取是类似的,依旧是把Flash芯片用热风枪吹下来,然后通过编程器以及配套的软件将2.2章中我们获得的固件文件烧录至Flash中,操作过程可以参考本专题第九篇中的提取固件过程,这里就不再赘述了。

烧录完成之后,我们给智能网关上电,可以观测到网关是正常启动了,那么这说明我们重打包的固件是可以运行的。由此,我们获得了固件编辑能力,如果有必要的话,可以随时编辑和调整固件中的各种程序。

小结

在本篇中,我们主要讨论了2件事情,其一是使用usb转ttl模块连接上了海康萤石网关设备的软排线接口,通过UART接口观察到了系统启动时的输出,并登陆了嵌入式Linux系统;其二是我们开启了海康萤石的网关的telnetd程序,并对该固件进行重打包,最后将重打包的固件刷入Flash中,我们的固件是可以顺利执行的。在本专题的后续文章中,我们在此基础上继续分析和研究海康萤石的智能网关,希望各位读者能有所收获。

图2-1 软排线连接转接板
图2-2 usb转ttl模块
图2-3 连接MCU的UART接口
图2-4 设备管理器选项卡
图2-5 Xshell配置串口连接
图2-6 串口输出内容
图2-7 文件系统中/etc/shadow文件
图2-8 智能网关中/sbin/telnetd程序
图2-9 在initrun.sh中启动telnetd程序
图2-10 下载MT7688 SDK文件
图2-11 打包squashfs文件系统的命令和参数
图2-12 打包squashfs文件系统需要的程序
图2-13 完成squashfs文件系统打包
图2-14 十六进制编辑固件