对基于Philips TriMedia CPU的网络摄像机进行逆向工程(一)
导语:本文,我介绍了Philips TriMedia架构。
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”选项)进行熵分析:
熵分析
熵加特征分析
通过观察这些图表,我们可以看到几乎第一个兆字节的数据有一个非常高的熵,而从变化来看,我们不能完全确定它只是被压缩或加密了。尽管我试图对熵做更详尽的分析,但我无法识别任何已知的算法或密码。此时,我确定我没有处理一个通用的固件映像。
此时,我尝试的最后一件事是查看字符串(字符串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界面设置用户和密码),就会得到以下信息:
在获得了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界面:
默认管理员用户为“ 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,检查了所有内容:
似乎我们找不到任何未经验证的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接口。
这些都是好消息,但是我们必须确定正确的引脚排列。这并不总是一件容易的事,但是,我的第一种方法是尝试使用电压表对引出线进行逆向工程,如下所述,一段时间后,我得出以下结果:
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架构。
发表评论