ADB trong trình duyệt (WebUSB) có an toàn không? Giải thích bảo mật
Quyền WebUSB và xác thực ADB bảo vệ điện thoại ra sao, trang web làm được và không làm được gì, ADBKit gửi dữ liệu đi đâu, và cách tự kiểm tra.
Có, ADB trong trình duyệt qua WebUSB an toàn để dùng, với điều kiện bạn tin tưởng trang mình mở và cẩn thận với gỡ lỗi USB như với bất kỳ công cụ ADB desktop nào. Trang web không thể thấy điện thoại cho đến khi bạn chọn nó trong hộp chọn thiết bị của trình duyệt, và không thể chạy lệnh ADB cho đến khi bạn chạm Allow trên điện thoại. Hai lớp phê duyệt độc lập đó, cộng với việc trang chỉ hoạt động khi tab còn mở, khiến bề mặt tấn công nhỏ hơn nhiều người nghĩ. Bài này giải thích từng lớp, chỉ ra dữ liệu đi đâu trong ADBKit, và các thói quen giữ bạn an toàn.
Quyền WebUSB hoạt động thế nào
WebUSB được thiết kế có chủ ý hẹp:
- Chỉ HTTPS. Trang bạn giao tiếp được xác thực và không thể bị sửa trên đường truyền.
- Cần thao tác của người dùng. Trang không tự mở được hộp chọn thiết bị; bạn phải bấm vào gì đó trước.
- Chọn một, không liệt kê. Trang không bao giờ nhận được danh sách thiết bị USB. Bạn chọn một thiết bị trong hộp chọn, và chỉ thiết bị đó hiện ra với trang.
- Theo từng origin. Quyền thuộc về một trang. Cho adbkit.com truy cập điện thoại không có nghĩa trang khác cũng được.
- Thu hồi được. Trong Chrome hoặc Edge, bấm biểu tượng ổ khoá trên thanh địa chỉ, mở cài đặt trang và gỡ thiết bị USB, hoặc xoá dữ liệu trang.
Một trang chưa từng được cấp quyền thậm chí không biết có điện thoại đang cắm hay không. Nền tảng kỹ thuật ở bài WebADB là gì.
Xác thực ADB hoạt động thế nào
Quyền của trình duyệt chỉ cho phép trang gửi byte tới giao diện ADB của điện thoại. Android sau đó áp dụng kiểm tra riêng, giống hệt adb trên desktop:
- Lần kết nối đầu tiên, trang tạo một cặp khoá RSA. Khoá riêng được lưu trong trình duyệt cho origin đó và không bao giờ rời máy tính của bạn.
- Điện thoại nhận khoá công khai và hiện hộp thoại Allow USB debugging? kèm vân tay (fingerprint) của khoá.
- Nếu bạn chạm Allow, phiên mở ra. Nếu bạn tích Always allow from this computer, điện thoại ghi nhớ khoá đó và bỏ qua hộp thoại ở lần sau.
- Bạn có thể xoá danh sách bằng Revoke USB debugging authorizations trong Tuỳ chọn nhà phát triển, hoặc tắt hẳn gỡ lỗi USB.
Vì khoá nằm trong trình duyệt, xoá dữ liệu trang sẽ xoá khoá và điện thoại hỏi lại. Hồ sơ trình duyệt khác hay máy khác có khoá khác, cần Allow riêng. Nếu hộp thoại không bao giờ hiện, xem sửa lỗi ADB device busy hoặc unauthorized.
Trang web làm được và không làm được gì
Khi cả hai phê duyệt đã có, trang có quyền ngang lệnh adb: cài gói, đọc log, chuyển tệp, điều khiển màn hình. Đó là lý do các phê duyệt quan trọng. Giới hạn cũng quan trọng không kém:
| Trang làm được | Trang không làm được |
|---|---|
| Giao tiếp với đúng một thiết bị bạn đã chọn | Thấy bất kỳ thiết bị USB nào khác |
| Chạy lệnh ADB khi tab còn mở | Chạy bất cứ gì sau khi bạn đóng tab hoặc ngắt kết nối |
| Giữ khoá RSA của riêng nó trong trình duyệt | Đọc khoá hay quyền của trang khác |
| Hỏi lại sau khi bạn thu hồi | Tự kết nối lại mà không có cú bấm của bạn và Allow trên điện thoại |
Không có truy cập nền: tab đóng là kết nối chết. Và chỉ một chương trình giữ được giao diện ADB mỗi lúc, nên tab trình duyệt và server adb desktop không thể cùng điều khiển điện thoại.
Dữ liệu đi đâu trong ADBKit
ADBKit được xây để dữ liệu thiết bị chỉ có một đường đi: giữa tab trình duyệt và điện thoại.
- Khung hình, ảnh chụp, bản ghi, log, tệp, APK và số serial chỉ đi giữa trình duyệt ↔ thiết bị. ADBKit không có máy chủ nào nhận chúng.
- Không tài khoản. Không đăng nhập, không hồ sơ.
- Quảng cáo chỉ trên các trang web. Trang chủ, blog và trang pháp lý tải Google AdSense; workspace tại
/appthì không, và quảng cáo không bao giờ dùng nội dung thiết bị. - Analytics là tuỳ chọn. Nếu bạn chấp nhận thông báo, Google Analytics 4 đếm lượt xem trang và tính năng được dùng, ví dụ "mở Logcat". Nó không bao giờ nhận khung hình, tệp, log, số serial, model máy, tên gói hay bất cứ gì bạn gõ. Từ chối thì workspace vẫn chạy y hệt.
- Log máy chủ tiêu chuẩn. Máy chủ lưu log yêu cầu (địa chỉ IP, user agent, URL) vì lý do bảo mật, không chứa dữ liệu thiết bị.
Những gì được đẩy lên điện thoại
Để chiếu và điều khiển màn hình, ADBKit chép server mã nguồn mở của scrcpy vào một vị trí tạm trên thiết bị và khởi động nó qua ADB. Tệp này được phục vụ từ chính origin của ADBKit, không phải bên thứ ba. Không ứng dụng nào được cài, không có gì xuất hiện trong danh sách ứng dụng. Cài APK luôn là hành động chủ động của bạn trong bảng Install APK, và ADBKit hỏi trước khi thay thế ứng dụng đang có.
Note: Bất cứ điều gì trình duyệt làm được qua ADB, một công cụ desktop cũng làm được. Câu hỏi không bao giờ là "trình duyệt hay desktop" mà là "tôi có tin mã này với quyền gỡ lỗi USB không".
Mô hình đe doạ và thói quen hợp lý
Rủi ro thực tế giống hệt với ADB desktop, và cùng những thói quen đó hoá giải chúng.
- Tin tưởng trang trước khi bấm Allow. Chỉ mở các trang WebADB bạn biết. Hộp thoại trên điện thoại hiện lên bất ngờ là lý do để chạm Deny.
- Tắt gỡ lỗi USB khi không cần. Bật cho một phiên làm việc rồi tắt sau đó, nhất là trên điện thoại chứa dữ liệu cá nhân. Bài cách bật gỡ lỗi USB chỉ chỗ công tắc.
- Đừng để "Always allow" trên máy dùng chung. Trên PC phòng lab hay laptop đồng nghiệp, chạm Allow mà không tích ô để quyền hết hiệu lực cùng phiên. Nếu lỡ tích, hãy thu hồi sau đó.
- Cẩn thận với ADB qua Wi-Fi trên mạng công cộng.
adb tcpip 5555khiến điện thoại lắng nghe trên mạng. Kiểm tra RSA vẫn áp dụng, nhưng lưu lượng không mã hoá và máy đã được cấp quyền trong cùng mạng có thể kết nối. Chỉ dùng trên mạng tin cậy, chạyadb usbkhi xong; xem ADB qua Wi-Fi. Trình trợ giúp của ADBKit chỉ lắng nghe trên127.0.0.1, máy khác không chạm tới được. - Khoá màn hình và máy tính. Ai ngồi trước trình duyệt đang mở khoá của bạn đều dùng được kết nối. Khoá máy khi rời đi, ngắt kết nối khi xong.
Warning: Thu hồi quyền USB của trình duyệt không thu hồi xác thực trên điện thoại, và ngược lại. Muốn sạch hoàn toàn, làm cả hai: gỡ quyền trang trong trình duyệt và chạm Revoke USB debugging authorizations trên điện thoại.
So với công cụ chiếu màn hình desktop và dịch vụ đám mây
Cài một công cụ chiếu màn hình desktop ngẫu nhiên nghĩa là chạy mã native với toàn quyền trên máy tính, thường kèm adb riêng, driver riêng và trình tự cập nhật. Một trang web chạy trong sandbox của trình duyệt với đúng một thiết bị USB bạn đã cấp; xét theo trục này, trình duyệt bị ràng buộc chặt hơn.
Dịch vụ chiếu màn hình đám mây và thiết bị từ xa gửi khung hình, đôi khi cả tệp, qua máy chủ của họ theo thiết kế. Với làm việc nhóm thì chấp nhận được, nhưng nếu dịch vụ cho bạn thấy điện thoại từ mạng khác, dữ liệu đã rời khỏi máy bạn. "Trình duyệt" của ADBKit là cục bộ: tab và điện thoại trên cùng một bàn, nối bằng cáp.
Cách tự kiểm tra
Không điều nào ở trên cần tin suông:
- Kiểm tra nền tảng. ADBKit chạy client ADB mã nguồn mở Tango (ya-webadb) và server của scrcpy. Cả hai là dự án công khai bạn đọc được.
- Theo dõi mạng. Mở DevTools, chọn tab Network, kết nối điện thoại và dùng màn hình trực tiếp, logcat, bảng tệp. Bạn sẽ thấy tài nguyên của trang và, nếu cho phép, vài sự kiện analytics nhỏ, nhưng không có khung hình, log hay tệp nào được tải lên, vì không có endpoint cho chúng.
- Xem lại quyền. Biểu tượng ổ khoá trên thanh địa chỉ cho biết trang đang giữ thiết bị USB nào; Tuỳ chọn nhà phát triển trên điện thoại cho thấy các xác thực bạn đã cấp.
- Thu hồi rồi kết nối lại. Gỡ quyền, xoá dữ liệu trang, và xác nhận điện thoại hỏi lại: khoá chưa từng ở đâu ngoài trình duyệt của bạn.
Dùng theo cách này, ADB trong trình duyệt an toàn ngang ADB desktop, với ít thành phần phải vá hơn. Quy tắc vẫn vậy: tin mã, chỉ phê duyệt máy bạn thực sự muốn, và tắt gỡ lỗi USB khi xong việc.