Site icon TAPIT

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

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ị

Tại thiết bị Datalogger, bộ nhớ Flash là một trong những mục tiêu có nguy cơ bị tấn công cao. Đây là bộ nhớ chính để người dùng sử dụng lưu trữ chương trình ứng dụng và các dữ liệu. Tại nghiên cứu này, chúng ta quan tâm đến việc bảo vệ bộ nhớ Flash qua hai phương thức là bảo vệ đọc và bảo vệ ghi.

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.

1. Bảo vệ đọc bộ nhớ Flash

Bảo vệ đọc (tên tiếng anh là ReaDout Protection, viết tắt là RDP) bộ nhớ Flash cho phép mã chương trình nhúng được bảo vệ, chống việc sao chép (copy), kỹ thuật đảo ngược (reverse engineering), kết xuất (dumping), sử dụng công cụ gỡ lỗi (debug tools) hoặc chèn mã (code injection). Người dùng cần thiết lập bảo vệ đọc sau quá trình biên dịch và tải mã nhị phân vào bộ nhớ Flash của vi điều khiển.

RDP có thể được thiết lập ở 3 mức độ (0,1 và 2) được định nghĩa như sau:

Hình 1. Ví dụ về các mức độ bảo vệ đọc RDP (Dòng STM32L4) (Nguồn: st.com)

2.  Bảo vệ ghi bộ nhớ Flash

Giải pháp bảo vệ ghi (tên tiếng Anh là WRite Protection, viết tắt là WRP) được sử dụng để bảo vệ nội dung của vùng nhớ khỏi việc xóa hoặc thay đổi nội dung. Ví dụ về một trường hợp sử dụng, bảo vệ ghi có thể được đặt trên page hoặc sector của bộ nhớ Flash để ngăn chặn sự thay đổi của dữ liệu bộ nhớ trong quá trình cập nhật chương trình firmware hoặc dữ liệu. WRP cũng được đặt theo mặc định trên vùng bộ nhớ không sử dụng để ngăn chặn việc chèn các phần mềm độc hại. 

WRP là phương pháp cần được sử dụng. Phương pháp này sẽ bảo vệ bộ nhớ khi diễn ra các hoạt động ghi dữ liệu hay cập nhật chương trình ứng dụng. 

3.  Triển khai bảo mật chương trình ứng dụng và dữ liệu tại thiết bị

Tại nghiên cứu này, chúng ta quan tâm đến việc bảo mật chương trình ứng dụng và dữ liệu qua hai phương thức là bảo vệ đọc và bảo vệ ghi bộ nhớ Flash. Có hai cách để thực thi hai phương thức này: (1) Sử dụng thuật toán bảo vệ đọc và bảo vệ ghi bộ nhớ Flash; (2) Sử dụng công cụ phần mềm STM32Programmer để thiết lập bảo vệ trên các Option byte. Chi tiết hơn về hai cách thực hiện này:

Bản chất của việc cấu hình chế độ bảo vệ đọc và bảo vệ ghi là việc thiết lập giá trị của Option bytes trong vi điều khiển. Cụ thể, Option bytes là tập hợp các byte được dùng để cấu hình các chế độ bảo vệ đọc/ghi (read/write protection), mức độ BOR, watchdog phần mềm/phần cứng và reset lại MCU nếu thiết bị ở chế độ Standby hoặc Stop mode. Người dùng có thể đọc, thay đổi các giá trị của Option byte qua thanh ghi FLASH_OBR. Các hàm chức năng Write Protection in Flash( ) và Readout Protection in Flash( ) sẽ thay đổi các giá trị bit tương ứng với chức năng của chúng tại Option byte.

Hình 2. Thuật toán kết hợp bảo vệ đọc và bảo vệ ghi bộ nhớ Flash

Hình 3. Sử dụng công cụ để kiểm tra cấu hình Option byte

Hình 4. Thiết lập bảo vệ đọc mức AA (mức 1)

Hình 5. Thiết lập bảo vệ ghi

Trong quá trình thử nghiệm, hai cách để thiết lập bảo vệ chương trình và dữ liệu tại bộ nhớ đều được kiểm nghiệm thành công. Nhưng khi tích hợp lại giải pháp này với chương trình ứng dụng, cách sử dụng thuật toán (cách 1) được ưu tiên trong tích hợp. Cách sử dụng công cụ để thiết lập (cách 2) không được lựa chọn vì cách này yêu cầu người dùng trực tiếp phải kết nối thiết bị với máy tính một cách thủ công và phức tạp hơn.

4. Kết quả triển khai

Sử dụng phần mềm STM32CubeProgrammer để phân tích quá trình. Sau khi kết nối thiết bị với máy tính, người dùng có thể đọc được dữ liệu được lưu trữ trong bộ nhớ.

Hình 6. Dữ liệu tại bộ nhớ Flash

Sau khi thực hiện cấu hình bảo vệ đọc và bảo vệ ghi thành công, cửa sổ Memory & File edition xuất hiện cảnh báo Data read failed và người dùng không thể đọc và thay đổi dữ liệu tại Flash.

Hình 7. Lỗi do không thể xóa, ghi, sửa đổi dữ liệu trong bộ nhớ Flash 

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ệ đầu tiên –  Bảo vệ chương trình ứng dụng và dữ liệu tại thiết bị. Các bạn nhớ đón chờ phần 4 – Giải pháp bảo vệ khi giao tiếp cổng vật lý nhé!

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:
Fanpage TAPIT: TAPIT – AIoT Learning