Một chút bối cảnh
Vì bạn đang sử dụng MQTT với AWS IoT, nên bạn sẽ sử dụng chứng chỉ X.509 để xác thực và bảo mật. Amazon có một chút hướng dẫn về cách bạn nên bảo mật chứng chỉ của mình, vì vậy tôi sẽ trích dẫn điều đó tại đây:
Chứng chỉ cho phép các khóa bất đối xứng được sử dụng với các thiết bị. Điều này có nghĩa là bạn có thể ghi khóa riêng vào bộ nhớ an toàn trên thiết bị mà không bao giờ cho phép tài liệu mật mã nhạy cảm rời khỏi thiết bị.
Vì bạn hiện đang sử dụng Bảo vệ Đọc ra (RDP) của STM32 , nhưng tất cả những kẻ tấn công kiên quyết nhất sẽ gặp khó khăn khi truy cập chứng chỉ của bạn trong sơ đồ hiện tại của bạn:
Bảo vệ Đọc ra toàn cầu cho phép mã chương trình cơ sở nhúng (được tải sẵn trong bộ nhớ Flash) để bảo vệ chống lại kỹ thuật đảo ngược, bán phá giá bằng các công cụ gỡ lỗi hoặc các phương thức tấn công xâm nhập khác.
- Cấp 0 - Không bảo vệ (mặc định)
- Cấp 1 - Bộ nhớ flash được bảo vệ chống đọc bằng cách gỡ lỗi hoặc đổ mã theo mã được nạp RAM
- Cấp độ 2 - Tất cả các tính năng gỡ lỗi bị vô hiệu hóa
Là lưu trữ bên ngoài sẽ được an toàn?
Nó có lẽ không phải là như an toàn . Nếu khóa riêng của khách hàng của bạn bị đánh cắp, kẻ tấn công có thể gửi dữ liệu dường như từ thiết bị của bạn, khi thực tế không phải vậy. Mặc dù không rõ dữ liệu nào bạn đang gửi, bất kỳ dữ liệu không đáng tin cậy nào cũng có thể là rủi ro bảo mật.
Những bit nào tôi cần giữ riêng tư?
Khi bạn tạo chứng chỉ thiết bị trên AWS IoT, bạn sẽ thấy một hình ảnh như thế này:
Hình ảnh từ trang Tạo và Kích hoạt Chứng chỉ Thiết bị của tài liệu AWS IoT.
Khóa riêng là thứ bạn thực sự cần giữ ... riêng tư và chắc chắn nên được lưu trữ trên bộ nhớ được bảo vệ đọc nếu có thể. Khóa công khai và chứng chỉ được thiết kế để chia sẻ, vì vậy nếu bạn hết dung lượng, bạn có thể di chuyển chúng sang bộ nhớ ngoài một cách an toàn. Bạn có thể có thêm một chút ngữ cảnh trên trang Làm thế nào để SSL / TLS hoạt động? tại Sàn giao dịch bảo mật thông tin và mật mã khóa công khai trên Wikipedia. Tôi nghĩ rằng tôi sẽ làm cho bạn một sự bất đồng nếu tôi không đưa hình ảnh này vào để giải thích tại sao khóa riêng cần phải bí mật:
.
Hình ảnh từ Wikipedia , được phát hành vào phạm vi công cộng.
Khóa chung của thiết bị của bạn là những gì AWS IoT sử dụng để ký tin nhắn để gửi đến thiết bị của bạn (nhưng nó không chứng minh được ai đang gửi tin nhắn ). Vì vậy, thực sự, đó không phải là một thảm họa lớn nếu ai đó đánh cắp khóa công khai, bởi vì nó không có nghĩa là một bí mật.
Khóa riêng là thứ mà thiết bị của bạn sử dụng để giải mã tin nhắn, do đó, vấn đề lớn hơn một chút nếu kẻ tấn công đánh cắp thứ này.
Bạn cũng hỏi chuyện gì sẽ xảy ra nếu kẻ tấn công lấy trộm chứng chỉ RootCA. Nếu ai đó lấy trộm khóa riêng của AWS IoT , điều đó sẽ là thảm họa, nhưng chứng chỉ RootCA trên thiết bị của bạn không phải vậy . Các RootCA.crt
mà Amazon cung cấp cho bạn là hoàn toàn công cộng , và mục đích là để bạn có thể xác minh rằng bạn không bị tấn công trong bất kỳ cách nào (có thể là một man-in-the-middle giả vờ là máy chủ AWS IOT của).
Những thiết bị bị tấn công có thể gây thiệt hại gì?
Thiết bị bị đánh cắp của bạn chỉ có thể thực hiện các hành động được liệt kê trong chính sách . Cố gắng tuân theo nguyên tắc đặc quyền tối thiểu ; chỉ cấp cho thiết bị của bạn những đặc quyền mà nó hoàn toàn cần , vì vậy nếu điều tồi tệ nhất xảy ra, nó không thể tàn phá quá nhiều. Đối với trường hợp cụ thể của bạn:
Điều này chỉ được phép xuất bản tới 2 kênh (tên của nó và kênh cung cấp dữ liệu) được kết nối với bộ xử lý dữ liệu sẽ bỏ qua mọi gói tin lừa đảo đến với nó.
Điều đó thật tốt. Bất kỳ cuộc tấn công nào cũng nên được tách biệt với hai chủ đề MQTT mà thiết bị có thể xuất bản, vì vậy nó sẽ không gây hại lớn.