对基于Philips TriMedia CPU的网络摄像机进行逆向工程(一)
2020-02-28 11:00:00 Author: www.4hou.com(查看原文) 阅读量:223 收藏

Trimedia

Trimedia 是由Philips公司1996年推出的新一代媒体处理器(Media Processor)芯片。被1996年美国微处理器论坛(Micro-Processor Forum)推荐为多媒体处理器的佼佼者。它是一款针对实时处理音频、视频、图像和通信数据流的通用微处理器,它选用了强大、通用的超长指令字VLIW(Very Long Instruction Word)的CPU和内嵌式DSP(Digital Signal Processing)相结合的方案,同时包含分离的数据和指令cache(高速缓冲存储器),峰值计算速度可达40亿次/秒。

它的主要结构由下述几部分组成:可编程的VLIW CPU、专门的数据和指令cache、无缝的存储系统接口、高速内部总线(数据高速通路)、视频输入单元(Video In)、视频输出单元(Video Out)、音频输入和输出单元(Audio In/Out)、专用的协处理器:图像协处理器ICP(Image Co-Processor)及变长解码协处理器VLD(Variable Length Decoder)、I2C接口、同步串行接口SSI(Synchronous Serial Interface)及定时器等。

我们通常都会认为网络摄像机内部装有ARM或MIPS CPU,但实际情况并非如此。该模型以及DCS-5xxx系列的其他模型都具有TriMedia CPU,这是一个非常旧的CPU。为什么这很有趣?就我个人而言,这是一个新的体系结构,这很棒,因为我可以学习新事物。但是,关于TriMedia CPU的文档很少。

固件分析

开始分析新设备时,我要做的第一件事通常是从供应商的站点获取固件。固件的最新可用版本是A3 1.06(2009),但是我决定分析以前的版本v1.05,因为它是我在相机上安装的版本。

我会在固件映像运行binwalk,结果如下:

fastix@fastix-virtual-machine:~/dcs-5300$ binwalk dcs5300_firmware_105.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
978627        0xEEEC3         HTML document header
979192        0xEF0F8         HTML document footer
979238        0xEF126         HTML document header
995907        0xF3243         HTML document header
996327        0xF33E7         HTML document footer
997041        0xF36B1         HTML document header
997325        0xF37CD         HTML document footer
998169        0xF3B19         HTML document header
1000439       0xF43F7         HTML document footer
1000448       0xF4400         HTML document header
1000689       0xF44F1         HTML document footer
1000698       0xF44FA         HTML document header
1000743       0xF4527         HTML document footer
1007314       0xF5ED2         HTML document footer
1007323       0xF5EDB         HTML document header
1008041       0xF61A9         HTML document footer
1010780       0xF6C5C         HTML document footer
1010789       0xF6C65         HTML document header
1011723       0xF700B         HTML document footer
1011737       0xF7019         HTML document header
1012801       0xF7441         HTML document header
1013342       0xF765E         HTML document footer
1013438       0xF76BE         HTML document header
1017960       0xF8868         HTML document footer
1017969       0xF8871         HTML document header
1018032       0xF88B0         HTML document footer
1021031       0xF9467         HTML document footer
1025042       0xFA412         HTML document footer
1030588       0xFB9BC         HTML document footer
1034276       0xFC824         HTML document footer
1036344       0xFD038         HTML document footer
1038311       0xFD7E7         HTML document footer
1044539       0xFF03B         HTML document footer
1046711       0xFF8B7         HTML document footer
1047499       0xFFBCB         HTML document footer
1049110       0x100216        HTML document footer
1049897       0x100529        HTML document footer
1049906       0x100532        HTML document header
1050018       0x1005A2        HTML document footer
1050026       0x1005AA        HTML document header
1056592       0x101F50        HTML document footer
1060214       0x102D76        HTML document header
1060247       0x102D97        HTML document footer
1060755       0x102F93        XML document, version: "1.0"
1096400       0x10BAD0        Unix path: /usr/local/etc/zoneinfo
1103113       0x10D509        Base64 standard index table
1103407       0x10D62F        HTML document header
1103549       0x10D6BD        HTML document footer
1103557       0x10D6C5        HTML document header
1103691       0x10D74B        HTML document footer
1103699       0x10D753        HTML document header
1103857       0x10D7F1        HTML document footer
1106328       0x10E198        Microsoft Cabinet archive data, 278748 bytes, 1 file
1385220       0x152304        Certificate in DER format (x509 v3), header length: 4, sequence length: 964
1386188       0x1526CC        Certificate in DER format (x509 v3), header length: 4, sequence length: 1023
1387215       0x152ACF        Certificate in DER format (x509 v3), header length: 4, sequence length: 1215
1388434       0x152F92        Certificate in DER format (x509 v3), header length: 4, sequence length: 1269
1388593       0x153031        Digi International firmware, load address: 0x204D6963, entry point: 0x66742053,
1390788       0x1538C4        JPEG image data, JFIF standard 1.02
1392148       0x153E14        GIF image data, version "89a", 1 x 1
1392191       0x153E3F        GIF image data, version "89a", 1022 x 124
1424806       0x15BDA6        GIF image data, version "89a", 584 x 8
1426129       0x15C2D1        GIF image data, version "89a", 96 x 96
1431469       0x15D7AD        GIF image data, version "89a", 107 x 48
1432998       0x15DDA6        GIF image data, version "89a", 8 x 476
1434185       0x15E249        GIF image data, version "89a", 4 x 402
1434868       0x15E4F4        GIF image data, version "89a", 552 x 6
1436408       0x15EAF8        GIF image data, version "89a", 592 x 33
1440118       0x15F976        GIF image data, version "89a", 592 x 33
1445416       0x160E28        GIF image data, version "89a", 592 x 33
1450651       0x16229B        GIF image data, version "89a", 592 x 33
1455879       0x163707        GIF image data, version "89a", 107 x 48
1457575       0x163DA7        GIF image data, version "89a", 107 x 48
1459238       0x164426        GIF image data, version "89a", 107 x 48
1461378       0x164C82        GIF image data, version "89a", 107 x 48
1463544       0x1654F8        GIF image data, version "89a", 107 x 48
1465357       0x165C0D        GIF image data, version "89a", 107 x 48
1467138       0x166302        GIF image data, version "89a", 107 x 48
1468934       0x166A06        GIF image data, version "89a", 107 x 48
1470780       0x16713C        GIF image data, version "89a", 107 x 48
1472975       0x1679CF        GIF image data, version "89a", 107 x 48
1475212       0x16828C        GIF image data, version "89a", 107 x 48
1476772       0x1688A4        GIF image data, version "89a", 107 x 48
1478325       0x168EB5        GIF image data, version "89a", 107 x 48
1480001       0x169541        GIF image data, version "89a", 107 x 48
1481655       0x169BB7        GIF image data, version "89a", 107 x 48
1483360       0x16A260        GIF image data, version "89a", 107 x 48
1485155       0x16A963        GIF image data, version "89a", 107 x 48
1486785       0x16AFC1        GIF image data, version "89a", 107 x 48
1488409       0x16B619        GIF image data, version "89a", 107 x 48
1489931       0x16BC0B        GIF image data, version "89a", 107 x 48
1491372       0x16C1AC        GIF image data, version "89a", 107 x 48
1493089       0x16C861        GIF image data, version "89a", 107 x 48
1494774       0x16CEF6        GIF image data, version "89a", 45 x 62
1496151       0x16D457        GIF image data, version "89a", 45 x 62
1497544       0x16D9C8        GIF image data, version "89a", 592 x 33
1502797       0x16EE4D        GIF image data, version "89a", 592 x 33
1506569       0x16FD09        GIF image data, version "89a", 107 x 48
1508333       0x1703ED        GIF image data, version "89a", 107 x 48
1511052       0x170E8C        GIF image data, version "89a", 107 x 48
1512824       0x171578        GIF image data, version "89a", 58 x 34
1513950       0x1719DE        GIF image data, version "89a", 58 x 34
1515053       0x171E2D        GIF image data, version "89a", 107 x 48
1517167       0x17266F        GIF image data, version "89a", 107 x 48
1519329       0x172EE1        GIF image data, version "89a", 68 x 37
1521849       0x1738B9        GIF image data, version "89a", 68 x 37
1524424       0x1742C8        GIF image data, version "89a", 37 x 37
1525605       0x174765        GIF image data, version "89a", 37 x 37
1526826       0x174C2A        GIF image data, version "89a", 37 x 68
1529382       0x175626        GIF image data, version "89a", 37 x 68
1532007       0x176067        GIF image data, version "89a", 68 x 68
1536479       0x1771DF        GIF image data, version "89a", 68 x 68
1540151       0x178037        GIF image data, version "89a", 37 x 68
1542697       0x178A29        GIF image data, version "89a", 37 x 68
1545300       0x179454        GIF image data, version "89a", 37 x 37
1546541       0x17992D        GIF image data, version "89a", 68 x 37
1549014       0x17A2D6        GIF image data, version "89a", 68 x 37
1551567       0x17ACCF        GIF image data, version "89a", 37 x 37
1553024       0x17B280        HTML document header
1555494       0x17BC26        HTML document footer
1556564       0x17C054        HTML document header
1556598       0x17C076        HTML document footer
1556607       0x17C07F        HTML document header
1556720       0x17C0F0        HTML document footer
1556729       0x17C0F9        HTML document header
1557234       0x17C2F2        HTML document footer
1557742       0x17C4EE        GIF image data, version "89a", 82 x 40
1559960       0x17CD98        GIF image data, version "89a", 81 x 40
1562052       0x17D5C4        GIF image data, version "89a", 54 x 40
1564516       0x17DF64        Base64 standard index table
1565332       0x17E294        Base64 standard index table

从输出中可以看到,binwalk仅能识别一些HTML,XML和GIF文件。还有一些似乎是一些Base64索引表的证书,但是没有任何引导加载程序,内核或文件系统的迹象。通常,引导加载程序和内核映像通常位于固件映像文件的开头,但事实并非如此。

Binwalk还识别出一种称为“ Digi International固件”的东西,但是稍后我们将看到这只是一个误报。

binwalk能够识别一些从偏移量0xEEEC3开始的文件,其余的呢?我假设文件开头的二进制Blob被加密/压缩,或者两者都加密/压缩,所以我决定使用binwalk(“-E”和“ -B -E”选项)进行熵分析:

熵分析

2.png

熵加特征分析

3.png

通过观察这些图表,我们可以看到几乎第一个兆字节的数据有一个非常高的熵,而从变化来看,我们不能完全确定它只是被压缩或加密了。尽管我试图对熵做更详尽的分析,但我无法识别任何已知的算法或密码。此时,我确定我没有处理一个通用的固件映像。

此时,我尝试的最后一件事是查看字符串(字符串dcs5300_firmware_105.bin> output.txt),但是我没有找到任何可以提示我正在处理什么的东西。

因此,我暂时放弃了这种方法,我们将在稍后看到此二进制blob中包含的内容,并尝试了一些不同的方法。

寻找攻击面

接下来我试着去分析相机,看看是否有什么漏洞。

首先进行nmap扫描:

nmap -sV 192.168.1.0/24

Nmap scan report for 192.168.1.106
Host is up (0.0018s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE        VERSION
21/tcp   open  ftp
23/tcp   open  telnet
80/tcp   open  http           D-Link Internet Camera
5001/tcp open  commplex-link?
5002/tcp open  rfe?
5003/tcp open  filemaker?
3 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port21-TCP:V=7.60%I=7%D=11/7%Time=5A01C181%P=i686-pc-windows-windows%r(
SF:NULL,20,"220\x20DCS-5300\x20FTP\x20server\x20ready\.\r\n")%r(GenericLin
SF:es,34,"220\x20DCS-5300\x20FTP\x20server\x20ready\.\r\n530\x20access\x20
SF:denied\.\r\n")%r(Help,34,"220\x20DCS-5300\x20FTP\x20server\x20ready\.\r
SF:\n530\x20access\x20denied\.\r\n")%r(SMBProgNeg,34,"220\x20DCS-5300\x20F
SF:TP\x20server\x20ready\.\r\n530\x20access\x20denied\.\r\n");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port23-TCP:V=7.60%I=7%D=11/7%Time=5A01C181%P=i686-pc-windows-windows%r(
SF:NULL,26,"\xff\xfd\x18DCS-5300\x20Telnet\x20Daemon\r\nPassword\x20:\x20"
SF:)%r(GenericLines,26,"\xff\xfd\x18DCS-5300\x20Telnet\x20Daemon\r\nPasswo
SF:rd\x20:\x20")%r(tn3270,26,"\xff\xfd\x18DCS-5300\x20Telnet\x20Daemon\r\n
SF:Password\x20:\x20")%r(GetRequest,31,"\xff\xfd\x18DCS-5300\x20Telnet\x20
SF:Daemon\r\nPassword\x20:\x20Password\x20:\x20")%r(RPCCheck,26,"\xff\xfd\
SF:x18DCS-5300\x20Telnet\x20Daemon\r\nPassword\x20:\x20")%r(Help,31,"\xff\
SF:xfd\x18DCS-5300\x20Telnet\x20Daemon\r\nPassword\x20:\x20Password\x20:\x
SF:20")%r(SIPOptions,94,"\xff\xfd\x18DCS-5300\x20Telnet\x20Daemon\r\nPassw
SF:ord\x20:\x20Password\x20:\x20Password\x20:\x20Password\x20:\x20Password
SF:\x20:\x20Password\x20:\x20Password\x20:\x20Password\x20:\x20Password\x2
SF:0:\x20Password\x20:\x20Password\x20:\x20")%r(NCP,26,"\xff\xfd\x18DCS-53
SF:00\x20Telnet\x20Daemon\r\nPassword\x20:\x20");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port80-TCP:V=7.60%I=7%D=11/7%Time=5A01C181%P=i686-pc-windows-windows%r(
SF:GetRequest,10D,"HTTP/1\.1\x20401\x20Unauthorized\r\nWWW-Authenticate:\x
SF:20Basic\x20realm=\"DCS-5300\"\r\nContent-Type:\x20text/html\r\nServer:\
SF:x20D-Link\x20Internet\x20Camera\r\n\r\n\n\nProtected
SF:\x20Object\nProtected\x20ObjectThis\x20ob
SF:ject\x20on\x20the\x20server\x20is\x20protected\.\n")%r
SF:(HTTPOptions,6E,"HTTP/1\.1\x20405\x20Method\x20Not\x20Allowed\r\nAllow:
SF:\x20GET,\x20HEAD,\x20POST\r\nContent-Length:\x200\r\nServer:\x20D-Link\
SF:x20Internet\x20Camera\r\n\r\n")%r(RTSPRequest,6E,"HTTP/1\.1\x20405\x20M
SF:ethod\x20Not\x20Allowed\r\nAllow:\x20GET,\x20HEAD,\x20POST\r\nContent-L
SF:ength:\x200\r\nServer:\x20D-Link\x20Internet\x20Camera\r\n\r\n")%r(Four
SF:OhFourRequest,E8,"HTTP/1\.1\x20404\x20Not\x20Found\r\nContent-Type:\x20
SF:text/html\r\nServer:\x20D-Link\x20Internet\x20Camera\r\n\r\n\n\nObject\x20Not\x20Found\nObject\x20
SF:Not\x20FoundThe\x20requested\x20URL\x20\x20was\x20not\x20found\x20
SF:on\x20the\x20server\.\n")%r(SIPOptions,6E,"HTTP/1\.1\x
SF:20405\x20Method\x20Not\x20Allowed\r\nAllow:\x20GET,\x20HEAD,\x20POST\r\
SF:nContent-Length:\x200\r\nServer:\x20D-Link\x20Internet\x20Camera\r\n\r\
SF:n");
MAC Address: 00:0D:88:7E:35:B9 (D-Link)

相机提供以下服务:

HTTP服务器:用于管理网络摄像机,可以从Web界面启用HTTPS服务器,但默认情况下不启用。

FTP服务器:用于访问相机可以生成的屏幕截图和音频,这是访问多媒体文件的最简单的方法。

Telnet服务器:用于对摄像机进行更“高级”的管理。

一开始我还不确定其他三项服务的功能,但是经过谷歌搜索后,我可以发现一些有趣的东西:

1. RFE (TCP 5002)是指无线免费以太网;

2. 无线免费以太网(RFE)是一种网络音频广播系统,它由允许音频数据包在网络上传输的程序和工具组成。

3. 摄像机内置了麦克风,因此该服务可能用于广播捕获的音频。

4. Filemaker(TCP 5003)服务用于流式传输实时视频,这是一种RTP/RTSP服务,借助D-ViewCam应用程序,我们可以访问相机传输的音频和视频。通过请求video.vam文件,通过HTTP进行传输。

5. commplex-link (TCP 5001) 服务用于同步摄像机传输的音频和视频;

所有这些服务似乎都是定制的,我没有找到知名的HTTP,FTP等服务器的banner。

Telnet服务

连接到Telnet服务器时,必须指定密码。密码为“admin”,用户无法在Web界面或使用Telnet服务进行更改。

如果输入“帮助”,则会出现以下菜单:

DCS-5300 Telnet Daemon
Password : Authorized and start service
Supported commands :
        debug   : Dump debug information
        dinote  : Dump changed input status
        stop    : Stop dumping debug info and input status
        diquery : Dump current input status
        do1=h   : Set output 1 to high
        do1=l   : Set output 1 to low
        erase graph : Erase all graphics
        erase homepage : Erase custom homepage
        lock    : Lock network settings
        unlock  : Reset network settings
        clear   : Restore factory settings
        reset   : Restart system
        save    : Save parameters

我们有一个重置为出厂设置的选项,一个重置网络设置的选项,另一个重启摄像机的选项,以及一些调试选项。例如,“调试”选项显示以下信息:

TLN: Start debugging
SYS: MAC address = 00-0D-88-7E-35-B9
ETH: Activate Ethernet
ETH: Ethernet link speed is 100Mbps.
SYS: Ethernet is chosen
SYS: -----NET INFO-----
SYS: Host IP=192.168.1.106
SYS: Subnet Mask=255.255.255.0
SYS: Default gateway=192.168.1.1
SYS: Primary DNS server=186.56.20.66
SYS: Secondary DNS server=186.56.20.67
SYS: Video modulation is NTSC
SYS: No logo
TLN: Server starts up
FTP: Server starts up
SYS: No background
SYS: No custom homepage
H263 Encode Task start!
Audio Encode Task start!
comm res0:0
h263_control.dwBitRate=356000
WWW: Server starts up
Reboot Timer started
Reboot after 86400 sec = 1day 00hr:00min:00sec
SYS: System starts at 2017/11/07 12:01:54 in local time
[UPNPMiniServer] Bind at port 19815
UPnP started:0
[RpSendingServerPushResponse]
TLN: Xf00b
 -STOP-

我们有关于摄像头的网络设置信息(MAC, IP, DNS服务器),不同服务运行的状态。

通常,总是可以选择获得shell,但实际情况并非如此。这似乎是一个非常有限的(伪造)Telnet服务器,只有几个选项。如果映像固件文件中的grep字符串,你会发现一些有趣的事情:

SYS: -----NET INFO-----
SYS: Host IP=%s
SYS: Subnet Mask=%s
SYS: Default gateway=%s
SYS: Fail to set gateway
SYS: Primary DNS server=%s
SYS: Secondary DNS server=%s
192.168.0.99
Network Interface OK
DHCP proceeding
DHCP proceed failed
DHCP proceed OK
End of get IP loop
!!!!
SYS: Ethernet is chosen
SYS: Jump out NetTask
system.log
network.log
video@%04d%02d%02d%02d%02d%02d.jpg
video.jpg
EML: socket error
0000000%04d%02d%02d
TLN: Telnet is logged in as admin
TLN: Telnet rejects user
reset
help
pass
stop
debug
newweb
Restart Web %X
conn?
conn%02d %d %02d %08X    conn%02d %d %02d %08X
mess?
mess=%d
lock
Fail
unlock
save
clear
erase graph
erase homepage
dinote
diquery
DI1=H
DI1=L
setmac
setlanguage
iicw
iicr
(%02X, %01X)->%02X
hang
suicide
fanon
on ok
fanoff
off ok
ethernet
report
Unknown command:
 -WRAPPED-
 -STOP-
TLN: Connected
 by %s
Telnet timeout for no action

在我们看到的一些Telnet命令中,有些字符串似乎是其他“未记录”命令的一部分,例如“ fanon”和“ fanoff”,我想它们分别用于打开和关闭。还有一个有趣的命令叫“suicide”,用来重启摄像机。还有一个“newweb”命令,用于为web服务器创建新根。

FTP服务器

当连接到FTP服务器时(匿名是默认的连接类型,我们可以从Web界面设置用户和密码),就会得到以下信息:

8.png

在获得了FTP服务器的根后,这是我们唯一可访问的文件夹。另外,如你所见,我们能得到的文件并不多,大多数文件大小为0。

我们可以看到一个名为“flash.bin”的文件,该文件包含相机的文件系统,但我们无法下载它,其仅为写入权限,并没有访问权限。但是,我们确实可以访问config.ini文件。该文件包含摄像机的所有配置,包括Web界面凭据。因此,假设我们将来会遇到一个远程执行代码漏洞,那么此文件就是我们应该获得的文件。以下是“config.ini”文件的部分内容:

DCS-5300 Initial Configuration File

[SYSTEM]YesDCS-5300000D887E35B9PT31x2-DLNK-0105b2017/11/0712:19:12-3(0)admin
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)(0)admin

目前,我们无法对FTP服务器做太多其他事情,它主要用于存储相机收集的所有媒体(截图、音频、视频)。

HTTP服务器

HTTP服务器使我们可以通过浏览器访问Web界面:

10.PNG

默认管理员用户为“ admin”,密码为空。如你所见,你可以在Web界面中对其进行更改。另外,你可以添加不同的用户并将其限制为使用I/O和PT功能。一件有趣的事是,有一个 'guest'帐户,用户名为 'demo' ,密码为空。该来宾帐户使我们可以通过快照访问视频流。不幸的是,从攻击者的角度来看,默认情况下该帐户是禁用的。但是,我在shodan.io中找到的某些摄像机已启用了演示帐户。

如今,如果你在Shodan之类的服务中搜索DCS-5300摄像机,你将不会得到太多结果。

如果你注意到在响应的“WWW-Authenticate”标头中使用的“realm”,你会看到如果你在固件镜像文件中使用grep,则网络会报告一个不同的“用户代理”服务器:


Web服务器报告的“用户代理”是Vivotek 网络摄像机VVTK使用的代理,但是否与Vivotek使用的Web服务器相同,我还不确定。因为它共享与某些Vivotek 网络摄像机几乎相同的CGI API。例如,这是Vivotek PT31x4 网络摄像机提供的WEB API(请选中“网络摄像机的URL命令”部分),而这是DCS-5300提供的。你看到相似之处了吗?

与许多其他情况一样,CGI程序是寻找漏洞的很好的起点,我们的目标是通过Web管理界面对摄像机进行未经身份验证的访问,该界面通常是互联网的公开部分。

到目前为止,唯一已知的漏洞,或者至少我唯一能找到的漏洞,是CVE-2012-5319 ,它是/setup/security.cgi应用程序中的CSRF,,在这个程序中,通过身份验证的用户可能会被骗去跟踪一个链接,从而劫持管理员帐户。以下是此漏洞的PoC:


但是,此漏洞要求用户登录到Web管理界面。那不是我们想要的,我们需要未经身份验证的访问。所以,我决定把所有可能的CGI程序列在D-Link和Vivotek 网络摄像机的文档中:

CGIs available in the Vivotek IP camera documentation
--

/cgi-bin/video.jpg requires admin access (Protected Object)
/cgi-bin/getdi.cgi requires admin access (Protected Object)
/cgi-bin/setdo.cgi requires admin access (Protected Object)
/setup/restore.cgi requires admin access (Protected Object)
/setup/reset.cgi requires admin access (Protected Object)
/setup/system.cgi object not found
/setup/security.cgi object not found
/setup/network.cgi object not found
/setup/ddns.cgi requires admin access (Protected Object)
/setup/mailftp.cgi object not found
/setup/video.cgi object not found
/setup/ptcamera.cgi requires admin access (Protected Object)
/setup/image.cgi object not found
/setup/app.cgi object not found

CGIs available in the D-Link IP camera documentation
--

/cgi-bin/sysinfo.cgi requires admin access (Protected Object)
/cgi-bin/admin/configfile.cgi requires admin access (Protected Object)
/setup/setmd.cgi requires the privilege of I/O access control (Protected Object)
/cgi-bin/camctrl.cgi requires camera control access privilege (Protected Object)
/cgi-bin/recall.cgi requires camera control access privilege (Protected Object)
/cgi-bin/senddata.cgi requires camera control access privilege (Protected Object) (Only for models with RS-485 port)

此外,该文档还列出了CGI程序使用的所有参考URL:

Homepage name Referenced URL
Client settings page /client.html
configuration page /setup/config.html
system option /setup/system.html
security option /setup/security.html
network option /setup/network.html
DDNS & UPnP option /setup/ddns.html
audio/video option /setup/video.html
camera control option /setup/ptframe.html
motion detection /setup/motion.html
image quality option /setup/image.html
application option /setup/app.html
system log /setup/logfile.html
system parameters /setup/parafile.html
set factory default /setup/factory.html

Vivotek文档中列出的大多数CGI程序在D-Link相机中都不可用,而可用的那些都需要进行身份验证。 D-Link的文档中列出的内容也会发生同样的情况,所有CGI程序都需要进行身份验证。在某些其他Vivotek 网络摄像机模型中,其中一些CGI过去曾受到不同漏洞的影响,例如标记为CVE-2013-1594,getparam.cgi和parafile.html页面的漏洞。

为了确保我没有错过任何CGI程序,我对固件映像文件做了grep,检查了所有内容:

15.PNG

似乎我们找不到任何未经验证的CGI。

然后,我花了一些时间使用Burp Suite和某些CGI程序,以查看是否可以找到身份验证后漏洞(主要是远程命令执行)来访问内部文件系统,并以此方式访问CGI二进制文件。我尝试了最常见的问题,例如路径遍历,在DDNS,NTP,config之类的位置进行分号注入,但是由于缺少输出,我不确定命令是否成功。为了深入了解,我打开了摄像机的内部。

探索硬件

我决定打开相机,希望找到一个像UART之类的接口,以便能够通过外壳访问文件系统。相机有两个PCB。最大的组件具有我们可以在此类设备中找到的几乎所有有趣的组件(CPU,RAM,闪存等),而最小的组件则具有一些用于PTZ功能的芯片。

点此查看最大的PCB正面的图片,在这张图片中,我们可以识别出以下组件:

· SDRAM:华邦W9812G2DH-7 SDRAM

· 闪存:16 MB MX29LV160BBTC-90

· WiFi /以太网:RTL8100BL

· EEPROM:Altera EPM3032A

· 视频解码器:飞利浦SAA7113H

我们拥有128 MB的RAM,WiFi /以太网功能,16 MB的闪存,小型视频解码器和EEPROM芯片。

点此查看PCB背面的图片:在这张图片中,我们可以看到只有一块大芯片被标识为Philips TriMedia PNX1300EH(32位处理器),这是这篇文章的研究对象,我们将有一个专门的章节专门讨论它。

点此查看第二块PCB的图片,在这张图片中,我们可以看到一个Winbond W78E54BP-40和两个Allegro A3967SLBT芯片,所有这些东西都用于相机移动擎并使某些LED闪烁的装置。

如你所见,这款相机中的大多数硬件是任何人都希望在这种设备中找到的。它没有什么特别之处,除了CPU不是你今天在销售的网络摄像机中通常看到的,大多数都使用ARM或MIPS CPU。

在详细介绍TriMedia CPU之前,让我们先讨论一下此设备上的引脚排列。

查看这张图片,即最大的PCB正面的图片,我们可以看到两个有趣的引脚排列,可以看到有10个标有红色矩形的引脚和12个标有黄色矩形的引脚,乍一看,它们看上去都不错,但10个引脚距离主CPU有点远,并且没有可见的痕迹。取而代之的是,这12个引脚确实靠近主CPU,并且似乎在该方向上走线。如果我们阅读数据手册,特别是第18章“ JTAG功能规范”,我们可以看到TriMedia CPU具有JTAG接口。

这些都是好消息,但是我们必须确定正确的引脚排列。这并不总是一件容易的事,但是,我的第一种方法是尝试使用电压表对引出线进行逆向工程,如下所述,一段时间后,我得出以下结果:

20.png

P1:电压波动:0,94-1,14-2,x-3,46(TX?);

P2:电压波动:2,x-3,46(几秒钟后,稳定在3,46)(RX?);

P3/P4:固定电压:3.29;

P5/P7/P11:电压波动:3,27-3,29-3,30;

P9:固定电压:1,79;

P6/P8/P10/P12:GND

即使获得了有关信号性质的一些信息,但我们也无法通过电压表获得过多的详细信息。在这种情况下,我们需要的工具是一个示波器。使用示波器,你可以检查信号的基本性质(VCC,GND,上拉线,数字信号)并猜测其参数,比如最大电压,频率等。那时,我手里没有那个工具,只装备了一个电压表和一个总线海盗(Bus Pirate),BusPirate 是由Dangerous prototypes 设计出品的一款硬件黑客方面的瑞士军刀,支持多项常见协议并可跨平台Windows/Linux/MAC,并拥有丰富的帮助文档。。即使可以使用Bus Pirate来构建廉价的示波器,带宽和采样率也不是很好(每秒5720个采样;实际上,可测量的最大频率约为1kHz)。最后,为了继续进行这项工作,我购买了PicoScope 2204A,详情我会在下面讲到。

顺便提一句,Monument Data Systems提供了一个用于TriMedia微处理器的JTAG PCI调试器,可用于调试在此CPU上运行的代码。我不确定在这种情况下是否有用,但是很高兴知道我们还有更多选择。

总结

本文,我介绍了Philips TriMedia架构。我以网络摄像机为切入点,谈论如何研究一个基于TriMedia的设备,并介绍了软件和硬件有哪些公共信息资源、有多少公共信息资源,以及如何处理其神奇的ASM。

下文,我将深入探讨TriMedia架构。

本文翻译自https://blog.quarkslab.com/reverse-engineering-a-philips-trimedia-cpu-based-ip-camera-part-1.html如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/wR4X
如有侵权请联系:admin#unsafe.sh