- Tôi mua camera Tapo để quan sát chú chó trong nhà, nhưng ngoài dự kiến lại dẫn tới việc phân tích ngược cách thiết bị và ứng dụng TP-Link hoạt động
- Để phân tích quy trình onboarding và cấu trúc giao tiếp API được mã hóa, tác giả đã dùng nhiều kỹ thuật như MITM, giải biên dịch APK, tạo script giải mã
- Thông qua việc phát hiện mật khẩu quản trị ban đầu và quá trình suy ra khóa phiên, tác giả đã giải mã được các thông điệp được mã hóa và xác định vấn đề đồng bộ thiếu tin cậy giữa thiết bị và tài khoản đám mây
- Sau khi phân tích toàn bộ luồng onboarding, tác giả đã tự động hóa bằng script Bash các bước gọi API chính, tạo tài khoản, đổi mật khẩu và kết nối Wi‑Fi
- Bài viết chỉ ra lỗ hổng trong thiết kế bảo mật firmware Tapo, cách triển khai mã hóa kém tinh vi và việc đồng bộ tài khoản không ổn định — những đặc trưng thường thấy ở thiết bị IoT giá rẻ
Tổng quan dự án
- Tác giả đã mua và sử dụng camera Tapo giá rẻ để theo dõi chú chó trong nhà
- Trong quá trình sử dụng, do việc thiết lập bất tiện và thiếu thông tin trên mạng, tác giả có động lực đào sâu vào cách sản phẩm vận hành
- Khi gặp các vấn đề ngoài dự kiến như tích hợp với frigate, kích hoạt 2way audio, tác giả bắt đầu quan tâm tới phương pháp onboarding trực tiếp không cần tích hợp đám mây
Phân tích cấu trúc onboarding và xác thực
- Để phân tích quy trình kết nối của camera Tapo, tác giả đã dùng MITM proxy và công cụ hook động frida để chặn lưu lượng giữa ứng dụng và camera
- Do các ứng dụng mới thường có cơ chế chống vượt qua như bỏ qua proxy, certificate pinning, nên phương pháp dùng công cụ động tỏ ra hiệu quả
- Sau khi thiết lập được cơ chế vượt qua này, tác giả đã xác nhận chính xác quy trình đăng nhập bằng tài khoản quản trị mặc định trong luồng onboarding của camera
- Tác giả phát hiện API đăng nhập mặc định hoạt động bằng mật khẩu mặc định riêng của thiết bị, tách biệt với mật khẩu tài khoản đám mây
Cấu trúc mã hóa và quá trình tìm mật khẩu mặc định
- Thông qua giải biên dịch APK (dùng JADX) và phân tích mã, tác giả đã lấy được mật khẩu mặc định của tài khoản
admin là TPL075526460603
- Ngay cả khi đổi mật khẩu đám mây, các camera đã liên kết từ trước vẫn không nhận ra thay đổi này, cho thấy việc đồng bộ mật khẩu giữa ứng dụng và camera là không chính xác
- Sau khi tìm ra mật khẩu mặc định, tác giả đã hiện thực logic suy ra khóa phiên (
lsk, ivb), từ đó có thể giải mã các thông điệp API được mã hóa theo thời gian thực
Script mitmproxy và phân tích API
- Tham khảo dự án mã nguồn mở PyTapo, tác giả đã phân tích chi tiết luồng API của quy trình onboarding Tapo thực tế
- Thông qua script
tapo_decrypt_pretty.py, tác giả có thể:
- phát hiện bắt tay đăng nhập
- trích xuất khóa phiên
- giải mã API được mã hóa, xuất kết quả dễ đọc và lưu JSON
- Từ toàn bộ nhật ký gọi API trong quá trình onboarding, tác giả chỉ chọn ra các bước chính có ý nghĩa để tạo workflow tự động hóa
- lấy danh sách Wi‑Fi (
scanApList)
- kích hoạt tài khoản RTSP/ONVIF
- đổi mật khẩu quản trị
- kết nối Wi‑Fi
Tự động hóa và kết quả
- Tác giả đã xây dựng script Bash (
tapo_onboard.sh) để tự động thực thi toàn bộ quy trình onboarding ở trên
- đăng nhập admin mặc định
- chọn và kết nối Wi‑Fi
- gỡ logo khỏi feed camera
- cho phép sử dụng RTSP/ONVIF
- đặt lại mật khẩu quản trị
- Từ cấu trúc firmware của camera, tác giả phát hiện các đặc điểm và điểm yếu sau
- một số API dùng băm SHA-256, nhưng một số khác vẫn giữ cách mã hóa cũ như MD5
- tồn tại 2 khóa công khai, nhưng không rõ trong tình huống nào cần dùng khóa nào
- đồng bộ mật khẩu giữa ứng dụng và thiết bị rất thiếu ổn định
Kết luận và cảm nhận
- Tác giả cảm thấy cấu trúc bảo mật của firmware và API camera Tapo mang tính vá víu và thiết kế chưa tinh vi
- Đây là một trải nghiệm gián tiếp cho thấy những lỗ hổng bảo mật và sự thiếu hoàn thiện của hệ thống onboarding trên các thiết bị IoT giá rẻ
- Mục tiêu cuối cùng của dự án là kiểm tra chú chó đã đạt được, và tác giả chủ yếu thấy chú chó đang ngủ trên sofa hoặc trên giường
Chưa có bình luận nào.