重回駭入小蟻攝影機

最近想起家裡有一台將近十年的小蟻攝影機,突然覺得可以嘗試讓 AI 協助我,重新駭入這台老設備,認識一下嵌入式系統。

工廠測試後門:記憶卡裡的祕密

當年這台攝影機在社群裡引起轟動,主因是有人發現了一個「後門」:只要在 SD 記憶卡根目錄建立一個名為 test 的資料夾,並在其中放置 equip_test.sh 腳本,系統開機時就會自動執行它。當時的我並不清楚腳本背後的邏輯,但最近透過 AI 的協助解析,終於釐清了它的運作機制。這其實是小蟻韌體在開機時的一個「工廠測試後門」。只要系統偵測到特定名稱的腳本,就會以 Root 權限 執行它,這給了我們完全掌控設備的機會。

腳本核心功能解析

  • 植入永久服務 (Telnet & FTP):在 /etc/init.d/ 建立了 S88telnetS89ftp 檔案,確保設備重啟後依然能透過遠端登入。
  • 替換核心服務 (HTTP & RTSP):將官方受限的版本替換為加強版,例如覆蓋 /home/rtspsvr 以支援標準 RTSP 串流,並建立軟連結(symlink)讓網頁服務能直接讀取錄影檔案。

突破防線:獲取 Root 權限

雖然腳本開啟了 Telnet,但我早已忘記預設密碼。然而我發現 FTP 服務雖然無法讀取系統核心,卻具備寫入權限。於是我就讓AI協助,然後採取了以下策略:

  1. 在本地端製作一個「無密碼 root」的 new_passwd 檔案。
  2. 透過 FTP 強行覆蓋機器內的 /etc/passwd
  3. 成功透過 Telnet 免密碼登入系統。

硬體規格探秘

進入系統後,首先確認了這台機器的「心臟」。原來它是採用鼎鼎有名的 HiSilicon Hi3518 晶片,是一個「自帶後門」的晶片。

# cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 218.72
Features        : swp half thumb fastmult edsp java 
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : hi3518
Revision        : 0000
Serial          : 0000000000000000

系統與記憶體資訊

這是一個典型的嵌入式 Linux 系統,核心版本相當老舊,且記憶體配置極小(僅約 35MB),在現今標準看來非常精簡。

# uname -a
Linux (none) 3.0.8 #1 Wed Apr 30 16:56:49 CST 2014 armv5tejl GNU/Linux

# free   
             total         used         free       shared      buffers
  Mem:        35212        33772         1440            0           56
 Swap:            0            0            0
Total:        35212        33772         1440

當初我的數個定點攝影計畫,許多都仰賴這台攝影機呢,當初的錄製影片儲存路徑,掛載在 /tmp/hd1/record/

資安問題

即便對小蟻相機進行了基礎的 Hack,系統內建的雲端服務依然會嘗試與外部伺服器通訊。

Step 1: 網路狀態初步掃描

首先使用 netstat -atunp 查看目前的連線狀態。可以看到 p2pserver 開啟了 UDP ,這個應該就是用手機連線可以直接穿透內網看到攝影機的關鍵

# netstat -atunp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:46742           0.0.0.0:* 4363/p2pserver

Step 2: 殺不死的 p2pserver?

當我嘗試 kill -9 4363 (p2pserver) 後,再次檢查網路狀態,發現它竟然以新的 PID (21241) 重新啟動,並且瘋狂嘗試外連!連線的遠端伺服器顯示是 p2pserver 正向百度 (220.181.x.x) 與 AWS (46.137.x.x) 發送 SYN_SENT 請求。

# netstat -atunp
tcp        0      1 192.168.1.104:57766     220.181.111.147:80      SYN_SENT    21241/p2pserver
tcp        0      1 192.168.1.104:35924     46.137.188.54:80        SYN_SENT    21241/p2pserver
tcp        0      1 192.168.1.104:32999     61.188.37.216:8000      SYN_SENT    21241/p2pserver

Step 3: 斬草除根 —— 關閉 watch_process

這代表系統中有監控腳本在維持雲端服務的運作。透過 ps | grep watch,找到了元兇:/home/watch_process

# ps | grep watch
 1096 root       840 S     /home/watch_process
# kill -9 1096

先殺掉監控進程 watch_process,再殺掉 p2pserver,它就不會再自動重啟了。

Step 4: 最終狀態確認

淨化完成: 目前系統僅剩下本地端服務 (FTP, HTTP, Telnet),所有外連嘗試皆已停止。
# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:21              0.0.0.0:* LISTEN      1248/tcpsvd
tcp        0      0 :::80                   :::* LISTEN      1145/server
tcp        0      0 :::23                   :::* LISTEN      667/telnetd
tcp        0     93 ::ffff:192.168.1.104:23 ::ffff:192.168.1.114:39804 ESTABLISHED 667/telnetd

透過這樣操作,才可以將小蟻相機轉為一台「純區域網路」運作的監控設備,確保影像資料不會在未經許可的情況下傳向公有雲端。如果真的要處理資安問題,應該還是自己弄出的樹莓派機器來操作比較好。

« 上一篇 Previous 較舊的文章