-
08/10/2013
-
401
-
989 bài viết
Vấn đề bảo mật giao thức MQTT trong các hệ thống IoT
Giao thức MQTT (Message Queue Telemetry) là giao thức tầng ứng dụng, được sử dụng rộng rãi trong việc định kỳ truyền dữ liệu từ các thiết bị IoT lên đám mây qua mạng Internet, từ đó có thể giám sát từ xa trong thời gian thực. Ưu điểm của MQTT là thủ tục truyền tin nhanh, đơn giản khi cài đặt. Về độ tin cậy khi truyền tin được thực hiện mềm dẻo thông qua cơ chế QoS.
MQTT gồm 2 phần chính là broker và clients. Client có thể là publisher (gửi tin) hoặc subscriber (nhận tin). Publisher đẩy bản tin lên một topic trên Broker, và Broker sẽ chuyển tiếp bản tin đó cho Subscriber mà trước đó đã đăng ký topic. Điều này giống như khi bạn dùng Youtube, bạn là subscriber, đăng ký một kênh nào đó thì mỗi khi kênh đó đẩy video mới lên, Youtube sẽ thông báo cho bạn biết.
Hình dưới đây minh họa hoạt động giao thức MQTT, trong đó thiết bị Gateway đẩy bản tin publish lên cloud với topic có tên là Data và sau đó cloud chuyển cho client đã đăng ký nhận bản tin từ topic đó. Khi hoạt động thì MQTT có thể sử dụng 3 mức QoS là mức 0 mức 1 và mức 2, trong đó mức 0 không có bản tin báo nhận nhưng hoạt động nhanh nhất.
Do được sử dụng rộng rãi nên MQTT (version 3.x) cần được lưu ý vấn đề bảo mật khi truyền thông trên mạng Internet.
- Vấn đề xác thực
Đầu tiên, khi cài đặt giao thức MQTT, bạn có thể sử dụng trường username/password trong bản tin publish để xác thực client trên broker. (Cần lưu ý là trong MQTT, username/password được truyền đi dưới dạng bản rõ.)
Tiếp theo, vì mỗi MQTT-client đều có số ID duy nhất để định danh, do vậy phía Broker có thể dùng số ID để xác thực client, sẽ làm tăng thêm độ bảo mật, bên cạnh việc dùng username/password.
Một lưu ý nữa đó là với những hệ thống cần độ bảo mật cao, khuyến nghị nên sử dụng chuẩn X.509.
- Vấn đề quản lý quyền truy cập
Publisher có quyền đẩy thông tin lên một topic nào đó với một mức QoS nhất định trên broker. Subscriber có quyền nhận dữ liệu từ topic nào đó với một mức QoS nhất định từ Broker. Như vậy trong MQTT thì vấn đề quản lý quyền truy cập có thể nói ngắn gọn là: cấp quyền cho client được làm gì trên topic nào với mức QoS bao nhiêu.
Như đã đề cập ở trên, vì mỗi client đều có ID duy nhất, do vậy trên Broker có thể dùng Danh sách điều khiển truy cập Access Control List (ACL) gắn với ID để quản lý quyền của từng client. Ví dụ một ACL theo dạng sau:
Khi client thực hiện một hành động không đủ thẩm quyền, phía Broker có thể lựa chọn một vài phương án:
Do MQTT hoạt động ở tầng 7, truyền các bản tin ở dạng bản rõ nên để đảm bảo tính bí mật, khuyến nghị nên sử dụng giao thức TLS (Transport Layer Security) ở tầng 4. TLS là giao thức mật mã được thiết kế để cung cấp truyền thông an toàn (mã hóa dữ liệu trên đường truyền, xác thực được các bên tham gia truyền thông, kiểm tra được tính toàn vẹn của dữ liệu) qua mạng Internet. Khi cài đặt giao thức TLS, cần lưu ý đầy đủ 3 thành phần:
+ Mã hóa dữ liệu: để đảm bảo tính bí mật
+ Xác thực thông qua khóa
+ Toàn vẹn dữ liệu với Message Authentication Code (MAC)
Tham khảo
HiveMQ Security MQTT
Cloudflare TLS
MQTT gồm 2 phần chính là broker và clients. Client có thể là publisher (gửi tin) hoặc subscriber (nhận tin). Publisher đẩy bản tin lên một topic trên Broker, và Broker sẽ chuyển tiếp bản tin đó cho Subscriber mà trước đó đã đăng ký topic. Điều này giống như khi bạn dùng Youtube, bạn là subscriber, đăng ký một kênh nào đó thì mỗi khi kênh đó đẩy video mới lên, Youtube sẽ thông báo cho bạn biết.
Hình dưới đây minh họa hoạt động giao thức MQTT, trong đó thiết bị Gateway đẩy bản tin publish lên cloud với topic có tên là Data và sau đó cloud chuyển cho client đã đăng ký nhận bản tin từ topic đó. Khi hoạt động thì MQTT có thể sử dụng 3 mức QoS là mức 0 mức 1 và mức 2, trong đó mức 0 không có bản tin báo nhận nhưng hoạt động nhanh nhất.
Do được sử dụng rộng rãi nên MQTT (version 3.x) cần được lưu ý vấn đề bảo mật khi truyền thông trên mạng Internet.
- Vấn đề xác thực
Đầu tiên, khi cài đặt giao thức MQTT, bạn có thể sử dụng trường username/password trong bản tin publish để xác thực client trên broker. (Cần lưu ý là trong MQTT, username/password được truyền đi dưới dạng bản rõ.)
Tiếp theo, vì mỗi MQTT-client đều có số ID duy nhất để định danh, do vậy phía Broker có thể dùng số ID để xác thực client, sẽ làm tăng thêm độ bảo mật, bên cạnh việc dùng username/password.
Một lưu ý nữa đó là với những hệ thống cần độ bảo mật cao, khuyến nghị nên sử dụng chuẩn X.509.
- Vấn đề quản lý quyền truy cập
Publisher có quyền đẩy thông tin lên một topic nào đó với một mức QoS nhất định trên broker. Subscriber có quyền nhận dữ liệu từ topic nào đó với một mức QoS nhất định từ Broker. Như vậy trong MQTT thì vấn đề quản lý quyền truy cập có thể nói ngắn gọn là: cấp quyền cho client được làm gì trên topic nào với mức QoS bao nhiêu.
Như đã đề cập ở trên, vì mỗi client đều có ID duy nhất, do vậy trên Broker có thể dùng Danh sách điều khiển truy cập Access Control List (ACL) gắn với ID để quản lý quyền của từng client. Ví dụ một ACL theo dạng sau:
Khi client thực hiện một hành động không đủ thẩm quyền, phía Broker có thể lựa chọn một vài phương án:
- Ngắt kết nối với client đó hoặc
- Từ chối hành động và gửi thông báo cho client biết.
Do MQTT hoạt động ở tầng 7, truyền các bản tin ở dạng bản rõ nên để đảm bảo tính bí mật, khuyến nghị nên sử dụng giao thức TLS (Transport Layer Security) ở tầng 4. TLS là giao thức mật mã được thiết kế để cung cấp truyền thông an toàn (mã hóa dữ liệu trên đường truyền, xác thực được các bên tham gia truyền thông, kiểm tra được tính toàn vẹn của dữ liệu) qua mạng Internet. Khi cài đặt giao thức TLS, cần lưu ý đầy đủ 3 thành phần:
+ Mã hóa dữ liệu: để đảm bảo tính bí mật
+ Xác thực thông qua khóa
+ Toàn vẹn dữ liệu với Message Authentication Code (MAC)
Tham khảo
HiveMQ Security MQTT
Cloudflare TLS
Chỉnh sửa lần cuối: