😇
牛牛的安全 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
  • 简介
  • 外部分析
  • 硬件分析
  • 串口分析
  1. 固件分析案例
  2. 智能门锁、手环

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

Previous华为智联旗下小豚AI摄像头的完整分析(下)Next海康萤石智能门锁的网关分析(4)

Last updated 3 years ago

简介

分享一下华为智联旗下的小豚AI摄像头。

外部分析

照惯例,拿到一款新设备肯定是正常使用一下,看看设备都提供什么功能、猜一猜其背后的运行逻辑。通过监听正常使用时的通信数据,可以获得手机、摄像头通信内容如下图所示:

上图中,手机和摄像头之间存在COAP协议通信数据。此部分通信仅在给摄像头配网的过程中出现,在这之后,手机和摄像头不再直接通信,而是完全由云端转发两者的通信数据,摄像头和云端的通信内容如下图所示:

可以看到,摄像头与云端的绝大部分通信都是TLS加密通信。事实上,摄像头对云端的TLS证书有校验,我们无法用简单的中间人攻击拿到通信内容。 除通信监听外,我们还对摄像头开放的tcp端口进行了扫描,截图如下:

结果显示该设备并没有监听任何tcp端口,是个麻烦的设备啊。

硬件分析

在此前的文章中,我们已经分析过不少设备固件了,这里就轻车熟路地开始吧。简单翻阅设备官网,可以确定固件并没有在官网提供下载链接。那就直接拆开设备看一看吧,如下图所示:

可以看到,该设备使用hi3518ev300作为SoC,还有型号为winbond的16MB Flash存储器。

分析过华为设备的小伙伴肯定知道他们官网是没有公开海思芯片的相关资料,只有经过官方认证的组织才能拿到指定型号的芯片手册,显然我们并没有被认证。不过,万能的淘宝帮了我们一把,可以在淘宝上买到了hi3518ev300的芯片手册以及开发SDK,这些资料在后文中发挥了重要作用。

将Flash存储器用热风枪从板子上吹下来,放入编程器提取Flash内容,并将提取得到的文件交给binwalk分析一下,结果很让人满意,该分析的都分析出来了,如下图:

在IoT奖励计划的列表中,路由器、AI音箱2等设备都是无法直接用binwalk分析的,有机会再和大家分享那些设备的分析过程。

通过binwalk的分析结果,我们可以确定摄像头中运行了一个嵌入式Linux操作系统,那么,接下来的工作就是以某种方式登录到系统之中,由此观察系统中程序的运行状态并调试感兴趣的程序代码。虽然qemu也可以用于调试工作,但在原设备上直接分析和调试肯定是更好的选择。为了登录系统,我们踩了不少坑,这些踩坑过程我们就不在文章中复述,感兴趣的读者可以找找当时会议分享的PPT,这里直接给出我们用到的3种登录方法:串口登录、telnet登录以及反向(reverse) shell 登录。

串口分析

借助在淘宝买到的芯片手册以及万用表,就可以确定电路板上悬空的几个过孔即为SoC的UART接口,如下图:

仅仅接通电路板上的UART接口是无法正常使用UART串口的,开启摄像头的串口还需要两步操作:其一是调整uboot在引导linux kernel时使用的启动参数(bootargs);其二是调整linux启动脚本中对串口的各种设置。 用16进制编辑器打开固件中的uboot部分,观察这部分固件内容,并与SDK文档中描述的uboot固件结构进行对比,如下图:

通过对比图4-2上下两图,可以确定起始4个字节为magic word,代表着设备启动了secure boot机制。在该机制的保护下,boot rom代码会对uboot部分进行RSA签名校验,以防止uboot程序被篡改。紧接着4个字节代表uboot部分的总长度,在该设备中为0x036A58字节。

由于整个uboot部分被RSA签名校验保护,而我们又没有签名私钥以重新计算签名,所以uboot这部分是没办法改动的。但是通过深入地逆向分析uboot代码,我们发现uboot并没有对固件其他部分进行签名校验,这意味着我们可以随意调整文件系统。此外,我们又发现了linux kernel的引导参数被保存在了uboot之外的部分,如下图所示:

上图中,kernel的引导参数保存位置为0x40000,已经超过了uboot的范围。所以我们可以调整引导参数,如下图:

上图中起始的4个字节为crc32校验,我们更改了启动参数,所以需要重新计算crc32值并填回此处。 接着,查看squashfs文件系统中的启动脚本(big_run.sh和small_run.sh两个),并对比SDK文档中芯片手册内容,如下图:

可以看到,在启动脚本中,SoC的此引脚被设置为GPIO功能。我们需要调整启动脚本,将该引脚重新设置为UART功能,如下图所示:

在完成上述两个调整之后,需要将固件重新打包并烧录至Flash中。由于linux启动脚本在binwalk提取的squashfs文件系统中,所以我们需要用SDK中的mksquashfs工具,重新打包squashfs文件系统,具体方法在胖猴专题之前的关于海康萤石设备分析的文章中介绍过,这里就不再赘述。

完成以上工作后,给设备重新上电,即可使用串口登录设备,如下图:

到此即是我们对小豚AI摄像头的第一篇,在本文中,我们对此设备进行了简单的外部分析,并顺利的开启了设备的串口功能。但事实上,我们分析的很多设备是无法启用串口的,所以在下一篇文章中,我们会继续分享其他的系统登录方法。在登录系统之后,我们还会分析其中的一个关键程序,就是产生TLS加密通信的关键程序。最后,还希望各位读者能够从中有所收获。

图2-1 摄像头和手机之间的通信内容
图2-2 摄像头和云端之间的通信内容
图2-3 对摄像头进行nmap扫描
图3-1 摄像头电路板
图3-2 淘宝购买全套资料
图3-3 binwalk分析结果
图4-1 电路板UART接口
图4-2 摄像头固件结构
图4-3 摄像头Linux启动参数
图4-4 调整Linux启动参数
图4-5 启动脚本中队引脚的设置
图4-6 调整后的启动脚本
图4-7 通过串口顺利登录设备