Site icon TAPIT

Chuỗi bài viết đề tài “Giải pháp bảo mật cho thiết bị Datalogger” (P4)

Quyền truy cập thường không bị cản trở tại các cổng vật lý của thiết bị. Đặc biệt khi kết hợp với các lỗ hổng bảo mật khác, có thể cho phép kẻ tấn công thực hiện nhiều cuộc tấn công khác nhau. Các cổng cần được bảo vệ để đảm bảo an toàn cho thiết bị. Tại phần 4 của chuỗi bài viết, mình sẽ phân tích về giải pháp bảo vệ khi giao tiếp cổng vật lý.

Các bạn tham khảo nội dung các phần trước của chuỗi bài viết:

? Phần 1: Tổng quan vấn đề bảo mật trên các hệ thống IoT. Xem tại đây.

? Phần 2: Đề xuất giải pháp bảo mật cho thiết bị Datalogger. Xem tại đây.

? Phần 3: Giải pháp 1 – Bảo vệ chương trình ứng dụng và dữ liệu tại thiết bị. Xem tại đây.

Phần 4. Giải pháp 2 – Bảo vệ khi giao tiếp cổng vật lý

1. Giới thiệu cổng vật lý

Cổng vật lý tại thiết bị là những cổng đầu vào có khả năng được truy cập, đánh cắp và sửa đổi dữ liệu bao gồm: cổng debug chương trình SWD/JTAG và cổng cấu hình Serial.

Ngoài ra, thiết bị còn có các cổng đọc dữ liệu khi giao tiếp với cảm biến qua giao thức RS-232 và RS-485, thường được sử dụng trong giai đoạn phát triển sản phẩm, tại quá trình thử nghiệm, chạy gỡ lỗi. Với quyền truy cập cổng vật lý trực tiếp vào thiết bị, kẻ tấn công có thể sử dụng cáp nối để kết nối cổng trên thiết bị với máy tính xách tay để thu thập dữ liệu hay sửa đổi dữ liệu.

Một số phương pháp bảo vệ thiết bị khỏi truy cập cổng vật lý như:

2. Bảo vệ cổng debug chương trình SWD

Tại tài liệu “Introduction to STM32 microcontrollers security”  được cung cấp bởi hãng ST, phương pháp được đề xuất nhằm bảo vệ cổng debug chương trình SWD là phương pháp bảo vệ đọc bộ nhớ đã được đề cập tại mục 3.3.1 và quá trình triển khai được đề cập tại mục 3.3.3.

Thiết bị cần được thiết lập bảo vệ đọc ở mức độ 2 để đảm bảo rằng bất kì ai có ý định chống phá đều không thể truy cập và chỉnh sửa được dữ liệu bên trong thiết bị. Có hai cách thức triển khai thiết lập bảo vệ đọc mức độ 2: sử dụng chương trình thuật toán; sử dụng công cụ phần mềm STM32Programmer để thiết lập bảo vệ trên các Option byte (tham khảo tại phần 3). 

3. Bảo vệ cổng cấu hình UART

Tại đề tài này, chúng tôi sử dụng hai phương pháp để áp dụng: (1) Đảm bảo mật khẩu mặc định của quản trị viên đã được thay đổi; (2) Đảm bảo quyền truy cập được bảo vệ thông qua quá trình xác thực bằng mật khẩu phức tạp. Các bước thực hiện bảo vệ giao tiếp cổng cấu hình UART:

Hình 1. Sơ đồ Use Case quá trình thực hiện bảo vệ giao tiếp cổng cấu hình UART

Để cấu hình được các thông số của thiết bị, người dùng cần sử dụng được bảng cú pháp dưới đây. Với mỗi câu lệnh bao gồm các ký tự kết thúc câu “\r\n”.

Bảng 1. Bảng cú pháp câu lệnh thực hiện cấu hình cổng UART

STT Cú pháp câu lệnh Mô tả
1 CFG+DEVPASS Nhập mật khẩu để truy cập cổng cấu hình
2 CFG+DEVNAME Cấu hình tên của thiết bị theo từng dự án (Ví dụ: TTQTMT), nhằm hỗ trợ việc cập nhật chương trình từ xa.
3 CFG+DEVID Cấu hình mã ID của thiết bị, ID được sử dụng để phân biệt các thiết bị trong hệ thống, hỗ trợ cho việc quản lý hệ thống nhiều thiết bị. (Ví dụ: 01, 02, 03, …, 30)
4 CFG+FTPUSER Cấu hình tên người dùng đăng nhập của hệ thống Server
5 CFG+FTPPASS Cấu hình mật khẩu người dùng đăng nhập của hệ thống Server
6 CFG+FTPURL Cấu hình đường dẫn truy cập hệ thống máy chủ bằng giao thức FTPS (Ví dụ: 103.97.125.226 hoặc secure.tapit.vn)
7 CFG+FTPPATH Cấu hình đường dẫn truy cập vào các thư mục, tệp chứa dữ liệu hay chương trình ứng dụng để tải các tệp tin trong ứng dụng cập nhật chương trình từ xa (Ví dụ: /public_html/firmware)

Tổng kết lại, qua bài viết này, mình đã hướng dẫn các bạn triển khai giải pháp bảo vệ thứ hai –  Bảo vệ khi giao tiếp cổng vật lý tại thiết bị. Các bạn nhớ đón chờ phần 5 – Giải pháp bảo mật quá trình khởi động của thiết bị.

Chúc các bạn thành công!

Nguyễn Thùy Nhiên – Đề tài Capstone Project tại TAPIT

Tìm hiểu thêm:
Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32
Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
Fanpage TAPIT: TAPIT – AIoT Learning