原本想監視我家狗狗,卻意外監視到 TP-Link (★ 198 分)
我最近買了一台 TP-Link Tapo 室內攝影機,想看看狗狗在家時都在做什麼,卻發現官方 App 的設定流程痛苦又難以整合到像 Frigate 這類系統中。網路上鮮少詳盡教學,官方還強制推銷「Tapo Care」訂閱,讓人頗感困擾,於是我決定自己逆向工程並設計一套不依賴雲端的離線設定方案。
首先,我利用中間人攻擊(MITM (中間人攻擊))攔截手機 App 與攝影機之間的 TLS 通訊,搭配 frida (動態攔截工具) 強制 App 使用自簽憑證與代理伺服器,再藉由 mitmproxy 記錄初始登入流程,發現設備在雲端密碼同步前就能以預設帳號 `admin` 登入,代表一定存在內建的預設密碼。
接著我用 JADX (反編譯工具) 反編譯官方 APK,搜尋 `"admin"` 找到 `CameraOnboardingViewModel` 類別中的加密函式,並確認加密類型 `encrypt_type: 3` 後,揭露出預設密碼 `TPL075526460603`。利用 PyTapo (與 Tapo 攝影機通訊的 Python 程式庫) 作為參考,我撰寫 mitmproxy 的 Python 腳本 `tapo_decrypt_pretty.py`,破解 `securePassthrough` 通道的加密,並解密、格式化顯示後續所有 API 呼叫,重點流程僅包含:掃描 Wi-Fi 熱點、啟用 RTSP (即時串流協定)/ONVIF (網路影音介面論壇協定) 帳號、修改 admin 密碼,以及連線至指定 AP。
最後整理出一支 Bash 腳本 `tapo_onboard.sh`:以預設密碼登入、掃描並選取 Wi-Fi、關閉畫面浮水印、開啟 RTSP/ONVIF 功能、修改密碼,然後完成網路連線。此過程展現 Tapo 韌體設計的瑕疵,例如部分端點依然使用 MD5 雜湊、二組不一致的 RSA 公鑰,以及雲端密碼不同步等。整個逆向歷程最後換來的,是一段關於愛犬睡覺行為的結論:牠大部分時間都在沙發上或牠的狗床上睡覺。
在 Hacker News 的討論中,不少網友分享了相關專案,如 Tapo C200 的研究報告、PyTapo 程式庫以及其他 TP-Link 韌體解密教學;有人指出這支預設密碼已被 CVE-2022-37255 揭露;對於「硬編碼預設密碼」的安全性,意見分歧,有人認為只要用戶在設定流程中修改即可,不算嚴重漏洞;也有人建議採用設備序號或 QR Code 作為在場證明 (proof-of-presence) 以增強離線驗證;另有不少討論提到 Home Assistant 等在地化智慧家庭方案,以擺脫過度依賴雲端的碎片化生態。
👥 58 則討論、評論 💬
https://news.ycombinator.com/item?id=45251690