2 điểm bởi GN⁺ 2023-12-16 | 1 bình luận | Chia sẻ qua WhatsApp

Đảo ngược kỹ thuật bộ điều khiển đèn LED Bluetooth LE, hay tôi đã phá hỏng đèn Giáng sinh của mình như thế nào

  • Thiết bị giao tiếp qua Bluetooth LE và có ứng dụng đi kèm rất đáng để tích hợp vào hệ thống tự động hóa gia đình.
  • Tôi đã dành khá nhiều thời gian để đảo ngược kỹ thuật và tự động hóa các dải đèn LED giá rẻ.
  • Gần đây, tôi đã thành công kết nối một dải đèn 5M không định địa chỉ điều khiển bằng Bluetooth LE rẻ nhất, giá £2.38, với Home Assistant chỉ trong vài giờ.

Bước 1. Byte đi qua dây

  • Để điều khiển thiết bị bằng phần mềm riêng, bước đầu tiên là kiểm tra các byte Bluetooth mà ứng dụng gửi tới thiết bị.
  • Android giúp quá trình này trở nên dễ dàng. Hãy bật chế độ nhà phát triển, cài ứng dụng điều khiển đèn, sau đó bật Bluetooth HCI snoop trong phần cài đặt nhà phát triển để ghi log.
  • Mở log bằng Wireshark để xem chính xác các byte và tìm các mẫu giá trị nhằm xác định chuỗi byte cho từng thao tác.

Bước 2. Tấn công phát lại

  • Nếu mục tiêu chỉ là bật và tắt đèn, thì chuỗi byte lặp lại đã quan sát được có thể là đủ để điều khiển nguồn.
  • Có thể dùng gatttool để kết nối với thiết bị BLE và gửi byte để thử nghiệm.

Bước 3. Giải biên dịch ứng dụng Android

  • Tải APK của ứng dụng và mở bằng jadx để khám phá những bí mật bên trong.
  • Trong mã nguồn, tôi phát hiện có tham chiếu đến AES, cho thấy khả năng giao thức được mã hóa.
  • Dữ liệu mã hóa không thay đổi mỗi lần, cần giải mã nhanh trên MCU công suất thấp, và có khả năng dùng khóa cố định không riêng cho từng thiết bị.

Bước 4. Toàn bộ chức năng

  • Tôi lần lượt thử từng chức năng của ứng dụng và ghi lại các byte được gửi đi.
  • Việc ghi chép từng hành động, lặp lại, phát hiện mẫu và đối chiếu byte đã bắt được với ghi chú là rất hữu ích.

Bước 5. Cỗ máy tạo rác thải điện tử tự động

  • Trong lúc khám phá việc đổi màu, tôi nhận thấy ứng dụng không gửi giá trị lớn hơn 0x1F cho đỏ, xanh lá và xanh dương.
  • Tôi thử các giá trị 8-bit và phát hiện màu sáng hơn vẫn hoạt động tốt.
  • Tò mò không biết có hiệu ứng bổ sung nào không, tôi thử bằng một vòng lặp đơn giản.
  • Mọi thứ hoạt động tốt đến hiệu ứng thứ 10, nhưng ở hiệu ứng thứ 11 tôi phát hiện một chế độ bí mật, và đến hiệu ứng thứ 12 thì bóng tối ập đến.
  • Tôi đã thử khởi động lại, nhưng đèn không sáng trở lại và cũng không còn phát quảng bá Bluetooth, nên không thể kết nối nữa.
  • Tôi suy đoán rằng firmware đã bị hỏng do tràn bộ đệm.
  • Tuy nhiên, bản thân LED là loại LED định địa chỉ tiêu chuẩn, nên vẫn có thể dùng bằng cách nối sang một vi điều khiển khác.

Tôi có thể phá hỏng đèn của mình như thế nào

  • Dù gặp sự cố, tôi vẫn đã tài liệu hóa phần lớn giao thức và tạo một dự án Github bao gồm cả thành phần tùy chỉnh cho Home Assistant.
  • Nó hoạt động, nhưng bạn phải tự chấp nhận rủi ro khi làm theo.

Ý kiến của GN⁺

  • Điều quan trọng nhất trong bài viết này là tinh thần DIY và niềm đam mê đảo ngược kỹ thuật khi một cá nhân muốn tích hợp đèn thông minh dùng trong nhà vào hệ thống tự động hóa.
  • Quá trình đảo ngược kỹ thuật không chỉ đòi hỏi kiến thức kỹ thuật mà còn cần khả năng giải quyết vấn đề và sự sáng tạo, nên đây là chủ đề rất thú vị ngay cả với kỹ sư phần mềm mới vào nghề.
  • Việc chia sẻ trải nghiệm thất bại giúp người khác tránh lặp lại cùng một sai lầm, và việc chia sẻ tri thức công khai như vậy là một trong những giá trị cốt lõi của cộng đồng mã nguồn mở.

1 bình luận

 
GN⁺ 2023-12-16
Ý kiến trên Hacker News
  • Phân tích gói tin đã giải mã

    • Kết quả thử giải mã gói tin cho thấy có một header cố định và byte thứ 5 chuyển giữa 1 và 0 để biểu thị bật và tắt, còn lại được điền bằng 0. Điều này được cho là thể hiện độ dài lệnh, lệnh ("TURN"), tham số (0 hoặc 1) và được đệm thành 16 byte.
  • Vấn đề cấp nguồn

    • Dải LED WS281x phát sáng rất mạnh và tiêu thụ nhiều dòng điện. Bộ nguồn 12V, 3A chỉ vừa đủ để chạy toàn bộ 100 dải ở độ sáng tối đa. Việc firmware dường như chỉ dùng mức 31 trên tối đa 255 cho thấy có thể cầu chì đã bị đứt.
  • Thử reverse engineering đèn mã hóa

    • Đã thử reverse engineering đèn pin LED Amaran 60d và pin đèn LED SmallRig RM75 nhưng phát hiện chúng đã được mã hóa. Cả hai loại đèn đều dùng cùng một quy trình thương lượng nhưng sử dụng thư viện khác nhau. Đã cố mô phỏng quá trình trao đổi khóa Diffie-Hellman nhưng bỏ cuộc vì không xác định được mục đích của các con số trông như ngẫu nhiên ở một bước bổ sung (một khóa khác chăng?). Bài viết này khiến người bình luận nghĩ đến việc thử dùng khóa hard-code.
  • Ý kiến về đèn BLE

    • Đã đọc đủ nhiều về các bộ đèn dùng BLE và cảm ơn tác giả vì đã nhắc đến điều đó. Nó gợi nhớ đến video Analog Technology Connections.
  • Thử tự động hóa đèn Giáng sinh kết nối BLE

    • Đã thử tự động hóa đèn Giáng sinh kết nối BLE nhưng chỉ tạo ra rác thải điện tử. Giờ thì bạn cũng có thể làm như vậy.
  • Thắc mắc về việc mã hóa thông điệp

    • Đặt câu hỏi vì sao thông điệp lại được mã hóa và liệu đây có phải là tiêu chuẩn hay không.
  • Bình luận về mã hóa

    • "Không thể gửi plaintext qua không trung, như vậy không an toàn" và bình luận "Đừng lo, tôi đã thêm mã hóa AES rồi".
  • Bình luận hài hước về việc hack đèn

    • Trước câu nói "Hãy chỉ tôi cách hack đèn của tôi", phản hồi là "Haha! Tôi thích điều đó".
  • Câu hỏi của người mới về reverse engineering đèn Govee

    • Câu hỏi của người mới về lý do vì sao không thể reverse engineering đèn WiFi như Govee, và liệu MITM (tấn công trung gian) có khó hơn không.