当前位置: 首页 > news >正文

安防IP Camera固件分析

liwenhaosuper · 2014/08/21 16:48

0x00 背景


之前一直看的是传统的系统安全问题,最近了解了下嵌入式设备的安全,颇有意思。

首先要从下面一个图说起:

这是由一位匿名的黑客通过端口探测等方式得到的2012年全球可攻击利用的嵌入式设备热点分布图,被叫做“Internet Census of 2012”,具体更详尽信息可见其网站:Internet Census of 2012。

这些设备完全就是在互联网上裸跑,不管是管理员还是黑客都可以随意控制它们。

跟传统的现代处理器保护机制不一样,这些嵌入式设备处理器很多都没有我们习以为常的如虚拟内存、特权级等的概念,如何保护他们的安全目前是研究界的一大热点,USENIX Security 2013有篇论文是专门针对这些问题讨论的,叫Sancus: Low-cost trustworthy extensible networked devices with a zero-software Trusted Computing Base。

既然嵌入式设备都在裸跑,那么研究下它们里面的东西,作进一步分析是非常有必要的。

0x01 细节


接下来要考虑的是研究哪种嵌入式设备,选择路由器?好像乐趣不多;前几天看了部电影《风暴》,我对里面警察通过监控摄像头查找证据的场景印象深刻,当时浮现的想法是:如果匪徒也能控制这些监控摄像头,反过来通过它们监控警察的行踪,或者在他们作案前或作案后将监控摄像头的数据删除掉,那么警匪的力量就不会这么悬殊,剧情会不会更有意思?

在现实生活中,如果我作为黑客能够控制所有的摄像头,如室内的家庭安防,那是多么可怕的场景:

摄像头的本意的用于防护别人保护自己安全,而一旦被人利用了就可能反过来自己遭受监控!由此目标就锁定在安防摄像头上了。

首先面临的问题是如何找到目标设备?最直接的方法是通过它们暴露的接口:它们必须与客户端连接!

那么就找个客户端:vMEyeSuper,google一下看到这个博客www.petsdreampark.com/blog/archiv…提供的设备地址:pdp.ns01.biz,然后就是找机会入侵啦:端口扫描,暴力破解。

通过工具发现设备的telnet是可登录的,然后就是暴力破解,用户名密码一下子就出来了(user name: root, password就不贴了)。试了下,成功登录进去,root权限哦!

登陆进去后它打印显示“welcome to monitor tech”,“嗯,不客气,反正我都来了”。先查看系统信息吧:

可看到系统用的是ucLinux,内核是3.0.8,处理器是ARM926EJ-S,芯片是海思的Hi3518,google一些这方面的信息,海思的hi3XXX都是有名的安防解决方案,海思的SDK可在这里下载。

找了一番发现系统就是一个ucLinux内核加一个busybox组成的,核心IPC固件在/usr/bin下,ps一下看到进程主要是Sofia和dvrbox,而关键是Sofia。:

重启Sofia可以看到一系列log信息,其中它开了一个web server,目录在/mnt/web下。

我想做的一个事情是将所有有用的文件拷贝下来分析,因为看到里面有用户名、密码信息等,但是由于busybox提供的工具太少了,关键是ssh,scp, wget, ftp等这些都没有,没办法上传下载,真是无奈:没有现有的工具,有root权限能干的事情也很有局限性呀!

想到它开有web server,于是打算将文件放到/mnt/web下再从浏览器下载下来。可惜不成功:目录只读!

想到一个办法:虽然/mnt/web下是只读的cramfs文件系统,可通过mount mtd到/mnt/web下覆盖原有目录做到:

mount -t jffs2 /dev/mtdblock5 /mnt/web
复制代码

总算顺利将所有文件都拖下来了!

分析发现searchIp、Sofia执行文件都用了upx进行压缩的,需要先进行解压。然后就用IDA Pro进行反汇编分析了。

分析发现searchIp是作为一个server用于被客户端扫描发现并主动连接到Sofia的工具。

基于此,只要写个扫描工具就能够发现并登录同厂商大量的裸露安防摄像头设备了!

接下来有空的话要做的事情就是尝试扫描网络发现这些设备并利用google map组成一个摄像头监控网络。

目前尚未解决的问题:由于无法物理接触到这些设备,系统busybox里面又没有可用的工具,尚不能上传文件到设备上。

相关文章:

  • java汇总
  • zookeeper
  • js练习题
  • Oracle 索引扫描的五种类型
  • 《Netty官方文档》开发者指南
  • 忘记cacti密码的解决方法
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Xcode 各版本简介
  • VMware Ubuntu NAT 不能上网
  • 网络爬虫基本原理(一)
  • 音频中采样位数,采样率,比特率的名词解释(转)
  • Android内存泄漏的常见场景及解决方案
  • Linux CentOS下安装、配置mysql数据库
  • virtualenv和virtualenvwrapper的安装和使用
  • 【Kafka】
  • ----------
  • 【mysql】环境安装、服务启动、密码设置
  • Django 博客开发教程 8 - 博客文章详情页
  • DOM的那些事
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • gcc介绍及安装
  • JavaScript类型识别
  • js写一个简单的选项卡
  • nodejs:开发并发布一个nodejs包
  • PAT A1050
  • SpingCloudBus整合RabbitMQ
  • Vue2 SSR 的优化之旅
  • Web标准制定过程
  • 半理解系列--Promise的进化史
  • 关于 Cirru Editor 存储格式
  • 汉诺塔算法
  • 使用Swoole加速Laravel(正式环境中)
  • 算法---两个栈实现一个队列
  •  一套莫尔斯电报听写、翻译系统
  • Nginx实现动静分离
  • 整理一些计算机基础知识!
  • #mysql 8.0 踩坑日记
  • (2020)Java后端开发----(面试题和笔试题)
  • (52)只出现一次的数字III
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (规划)24届春招和25届暑假实习路线准备规划
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (学习日记)2024.01.09
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)3D模板阴影原理
  • (转)Sublime Text3配置Lua运行环境
  • .NET CLR Hosting 简介
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 中viewstate的原理和使用
  • .net快速开发框架源码分享
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中 MVC 工厂模式浅析
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚