😇
牛牛的安全 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
  • 简介
  • telnet分析
  • 反向shell分析
  • hilink程序分析
  • 小结
  1. 固件分析案例
  2. 智能门锁、手环

华为智联旗下小豚AI摄像头的完整分析(下)

Previous云丁鹿客门锁BLE通信的分析(上)Next华为智联旗下小豚AI摄像头的完整分析(上)

Last updated 3 years ago

简介

本篇我们继续分享一些关于华为智联旗下小豚AI摄像头的研究内容,在上一篇文章中,我们已经通过串口顺利登录设备的Linux操作系统,接下来我们还会介绍两种登录设备系统的方法,可以在串口无法使用时发挥作用。下文中,我们需要编译可以在摄像头设备中正常运行的程序,所以开始之前,先要把SDK开发环境配置好,比如说交叉编译器等。好在我们买到的SDK还不错,该有的文档、必要的脚本一个都不差,按照指示步骤逐步操作即可。在开发文档中,可以找到配置SDK相关的章节,如下图:

按照上图中的SDK安装方法,逐步配置完成安装SDK。在安装过程中可能需要下载一些文件,别担心,在正常的网络环境下,都是可以顺利下载到的,不需要额外的辅助工具。配置完毕之后,开始本篇的正题。

telnet分析

串口虽然可以登录摄像头设备,但毕竟还需要硬件电路连接,使用起来比较麻烦,而如果能通过telnet登录则会更加方便快捷。启动摄像头的telnetd也需要两步操作:其一是重新编译busybox,增加telnetd功能;其二是在linux启动脚本中挂载设备文件。

在binwalk提取的squashfs文件系统中,可以找到telnetd软链接,链接到了busybox程序。逆向分析busybox程序之后,就可以发现固件中的busybox程序并没有实现telnetd功能,如下图所示:

上图中, busybox支持的命令中没有telnetd。为解决此问题,需要重新编译SDK中的busybox程序,我们之前已经完成了开发环境的SDK部署工作。SDK中包含了编译busybox所需要的代码以及相关的makefile文件,我们只需要调整.config文件,确定编译出的busybox程序包含telnetd、tftpd等需要的功能,然后执行make hibusybox即可,如下图所示:

编译完成之后,用编译得到的busybox替换固件文件系统中的原有busybox程序,就可以保证摄像头有了telnetd功能。接下来还需要挂载devpts设备文件,否则telnetd在建立第一个telnet连接后就会崩溃。将挂载devpts设备文件的两条指令放在linux的启动脚本(big_run.sh和small_run.sh)中,并加上启动telnetd的指令,就完成了对文件系统的全部调整,如下图:

最后,将文件系统重打包并烧录到Flash中,再次上电后即可通过telnet登录摄像头设备。

反向shell分析

虽然通过前文的两个方法已经能够顺利登录linux操作系统了,但是Flash已经被热风枪吹下来了,就再多准备一种后备措施,这样可以避免因为前两种方法都失效而翻来覆去地吹焊Flash。在本节中,我们准备了一个简单的反向(reverse) shell作为后备措施,反向shell代码有很多,我们随便选择一种就好,下面的代码段即为我们将要编译的reverse shell代码:

代码比较简单,建立tcp连接之后,将输入和输出重定向到tcp连接。

用SDK中包含的交叉编译器编译该程序,然后用qemu进行本地测试,测试通过后将其放入固件的文件系统中,然后在linux启动脚本中,增加启动反向shell的指令,最后打包文件系统,烧录固件至Flash中。待摄像头正常启动之后,在主机使用nc监听设置的端口,即可通过反向shell登录设备linux系统中,如下图所示:

hilink程序分析

在正常登录设备Linux系统之后,我们就开始分析和调试设备中运行的程序,在前文提到的3种登录方式之中,telnet是最简单易用的,所以我们在后文中统一使用telnet作为登录方式。

首先使用ps指令查看系统中正在运行的关键进程,如下图所示:

上图中,有三个关键进程:hilink是负责华为智联的关键模块、ipc是负责摄像头主要逻辑功能的模块而monitor看起来是负责监控设备运行状态的模块。我们在上一篇中提到摄像头和云端的TLS通信就是由hilink程序产生的,接下来我们就分析分析这个hilink程序。

照惯例,先开启该程序的运行日志。通过逆向分析该程序,可以找到用于判断是否打印日志的函数,如下图所示:

上图中,logLevel函数即为判断当前等级(R0=3)的日志是否需要打印,我们只需要修改logLevel函数的返回值永远为1,即可打印出所有日志。

通过运行日志可以大体上掌握程序的执行流程。在程序启动后,首先会在云端注册登录,由关键字符串“LoginToCloud”找到关键代码段,如下图:

根据上图中的内容,推测其通信内容除了TLS加密外,还有一次应用层加密。此时,仅仅做静态分析有些困难,我们编译一份gdbserver传到设备上调试一下。在SDK中,包含了gdb项目,只要正常编译出来就可以直接使用。我们编译的busybox包含了tftp功能,可以用来传输文件。关于gdbserver调试相关的内容,可以参考海康萤石的那篇分析文章,这里不再复述。调试截图如下:

通过调试可以确定,有很大一部分请求并没有执行hilink_encrypt_coap_buf函数,这意味着并没有进行应用层加密。

接下来,我们试着给程序打个补丁,修正一下其TLS证书,然后做一个中间人攻击,看看是否能够拿到通信数据,用于打补丁的脚本如下:

这个脚本功能也很简单,只是把程序中的TLS证书更改为我们自己生成的TLS证书。 最后再写一个实施中间人攻击的脚本,将通信内容进行简单的整理,即可获得下图中的内容:

上图中的这些通信内容,可以帮助我们继续深入分析,但这里就不做过多的陈述,感兴趣的读者可以自行尝试。

小结

关于小豚AI摄像头的分析文章到此就结束了,在这两篇分析中,我们介绍了3种登录linux操作系统的常用方式,分别是串口、telnet和reverse shell,各位读者在分析其他设备时可以根据实际情况选择其中一种合适的方法。此外,经由这两篇对这个摄像头进行的各种尝试,设备已经处于一个可调试的状态,文章中我们只对摄像头中运行的hilink程序进行了初步分析,感兴趣的读者完全可以在此基础上继续探索,挖掘潜在的漏洞。

图1-1 配置SDK开发环境
图2-1 busybox支持的命令列表
图2-2 编译busybox时的.config文件
图2-3 调整Linux启动脚本
图3-1 反向shell小程序
图3-2 通过reverse shell登录
图4-1 摄像头设备中正在运行的程序
图4-2 打印日志前的判断
图4-3 hilink登录到云端
图4-4 调试hilink程序
图4-5 给hilink程序打补丁
图4-6 获取hilink程序通信内容