重回駭入小蟻攝影機
最近想起家裡有一台將近十年的小蟻攝影機,突然覺得可以嘗試讓 AI 協助我,重新駭入這台老設備,認識一下嵌入式系統。
工廠測試後門:記憶卡裡的祕密
當年這台攝影機在社群裡引起轟動,主因是有人發現了一個「後門」:只要在 SD 記憶卡根目錄建立一個名為 test 的資料夾,並在其中放置 equip_test.sh 腳本,系統開機時就會自動執行它。當時的我並不清楚腳本背後的邏輯,但最近透過 AI 的協助解析,終於釐清了它的運作機制。這其實是小蟻韌體在開機時的一個「工廠測試後門」。只要系統偵測到特定名稱的腳本,就會以 Root 權限 執行它,這給了我們完全掌控設備的機會。
腳本核心功能解析
- 植入永久服務 (Telnet & FTP):在
/etc/init.d/建立了S88telnet與S89ftp檔案,確保設備重啟後依然能透過遠端登入。 - 替換核心服務 (HTTP & RTSP):將官方受限的版本替換為加強版,例如覆蓋
/home/rtspsvr以支援標準 RTSP 串流,並建立軟連結(symlink)讓網頁服務能直接讀取錄影檔案。
突破防線:獲取 Root 權限
雖然腳本開啟了 Telnet,但我早已忘記預設密碼。然而我發現 FTP 服務雖然無法讀取系統核心,卻具備寫入權限。於是我就讓AI協助,然後採取了以下策略:
- 在本地端製作一個「無密碼 root」的
new_passwd檔案。 - 透過 FTP 強行覆蓋機器內的
/etc/passwd。 - 成功透過 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: 最終狀態確認
# 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
透過這樣操作,才可以將小蟻相機轉為一台「純區域網路」運作的監控設備,確保影像資料不會在未經許可的情況下傳向公有雲端。如果真的要處理資安問題,應該還是自己弄出的樹莓派機器來操作比較好。




