Microsoft mở CHERIoT, một giải pháp phần cứng để cải thiện bảo mật mã C

Microsoft đã phát hiện ra các phát triển liên quan đến dự án CHERIoT (Khả năng mở rộng phần cứng cho RISC-V cho Internet of Things), nhằm ngăn chặn các vấn đề bảo mật trong mã hiện có trong C và C++. CHERIoT cung cấp giải pháp cho phép bạn bảo vệ cơ sở mã C/C++ hiện có mà không cần phải làm lại chúng. Việc bảo vệ được thực hiện thông qua việc sử dụng trình biên dịch đã sửa đổi sử dụng bộ hướng dẫn bộ xử lý (ISA) mở rộng đặc biệt, do bộ xử lý cung cấp và giám sát quyền truy cập bộ nhớ ở cấp độ phần cứng, kiểm tra tính chính xác của công việc bằng con trỏ và đảm bảo cách ly các khối mã.

Dự án được tạo ra với mục tiêu thực tế là bản chất cấp thấp của ngôn ngữ C trở thành nguồn gây lỗi khi làm việc với bộ nhớ, dẫn đến các vấn đề như tràn bộ đệm, truy cập vào bộ nhớ đã được giải phóng, vô hiệu hóa con trỏ hoặc giải phóng kép . Thực tiễn cho thấy ngay cả những tập đoàn lớn như Google và Microsoft, những tập đoàn có chính sách xem xét thay đổi nghiêm ngặt và sử dụng các phương pháp phát triển hiện đại cũng như công cụ phân tích tĩnh, cũng không thể đảm bảo không có lỗi khi làm việc với bộ nhớ (ví dụ: khoảng 70% lỗ hổng trong Microsoft và Google là do mất an toàn bộ nhớ).

Vấn đề có thể được giải quyết bằng cách sử dụng các ngôn ngữ lập trình đảm bảo hoạt động an toàn với bộ nhớ hoặc liên kết với các kiểm tra bổ sung, chẳng hạn như bằng cách sử dụng thay vì các con trỏ thông thường như MiraclePtr (raw_ptr), thực hiện kiểm tra bổ sung để truy cập các vùng bộ nhớ được giải phóng. Nhưng các phương pháp như vậy phù hợp hơn với mã mới và việc làm lại các dự án C/C++ hiện có khá khó khăn, đặc biệt nếu chúng được thiết kế để chạy trong môi trường hạn chế về tài nguyên, chẳng hạn như hệ thống nhúng và thiết bị Internet of Things.

Các thành phần phần cứng CHERIoT được thiết kế dưới dạng một bộ vi điều khiển dựa trên kiến ​​trúc RISC-V, triển khai kiến ​​trúc bộ xử lý CHERI (Khả năng mở rộng phần cứng sang RISC-V) được bảo vệ, cung cấp mô hình truy cập bộ nhớ được kiểm soát dựa trên “khả năng” (mỗi lần đọc và ghi). hoạt động vào bộ nhớ được ủy quyền). Dựa trên kiến ​​trúc tập lệnh (ISA) được cung cấp trong CHERIoT, một mô hình phần mềm được xây dựng nhằm đảm bảo sự an toàn khi làm việc với bộ nhớ ở cấp độ đối tượng riêng lẻ, cung cấp khả năng bảo vệ khỏi quyền truy cập vào bộ nhớ đã được giải phóng và triển khai hệ thống cách ly truy cập bộ nhớ nhẹ . Mô hình bảo vệ phần mềm được chỉ định được phản ánh trực tiếp trong mô hình ngôn ngữ C/C++, cho phép nó được sử dụng để bảo vệ các ứng dụng hiện có (chỉ cần biên dịch lại và chạy trên thiết bị hỗ trợ ISA CHERIoT).

Giải pháp được đề xuất cho phép bạn chặn các lỗi khiến đối tượng vượt quá ranh giới của bộ nhớ, không cho phép thay thế con trỏ (tất cả các con trỏ phải được tạo từ các con trỏ hiện có) và giám sát việc truy cập bộ nhớ sau khi giải phóng (mọi quyền truy cập vào bộ nhớ bằng cách sử dụng địa chỉ không chính xác). con trỏ hoặc con trỏ tham chiếu đến một đối tượng được giải phóng sẽ dẫn đến một ngoại lệ được ném ra). Ví dụ: sử dụng CHERIoT cho phép bạn triển khai việc kiểm tra giới hạn tự động, theo dõi tuổi thọ bộ nhớ và thực thi tính toàn vẹn của con trỏ trong các thành phần xử lý dữ liệu không đáng tin cậy mà không yêu cầu bất kỳ thay đổi mã nào.

Dự án bao gồm đặc điểm kỹ thuật của kiến ​​trúc tập lệnh CHERIoT mở rộng, triển khai tham chiếu của CPU RISC-V 32 bit hỗ trợ CHERIoT ISA và bộ công cụ LLVM được sửa đổi. Sơ đồ nguyên mẫu CPU và mô tả khối phần cứng trong Verilog được phân phối theo giấy phép Apache 2.0. Lõi Ibex từ dự án lowRISC được sử dụng làm nền tảng cho CPU. Mô hình mã CHERIoT ISA được xác định bằng ngôn ngữ Sail và được cấp phép theo giấy phép BSD.

Ngoài ra, một nguyên mẫu của hệ điều hành thời gian thực CHERIoT RTOS đã được đề xuất, cung cấp khả năng cách ly các ngăn ngay cả trên các hệ thống nhúng có RAM 256 MB. Mã CHERIoT RTOS được viết bằng C++ và được phân phối theo giấy phép MIT. Các thành phần cơ bản của HĐH như bộ nạp khởi động, bộ lập lịch và hệ thống phân phối bộ nhớ được thiết kế dưới dạng các ngăn.

Một ngăn trong CHERIoT RTOS là sự kết hợp biệt lập giữa mã và các biến toàn cục giống như một thư viện dùng chung, nhưng không giống như thư viện dùng chung, nó có thể thay đổi trạng thái (có thể thay đổi) và chạy trong bối cảnh bảo mật riêng biệt. Không có mã nào từ bên ngoài có thể chuyển điều khiển sang mã trong một ngăn và truy cập các đối tượng, ngoại trừ bằng cách truy cập các điểm vào được xác định đặc biệt và sử dụng con trỏ tới các đối tượng được truyền rõ ràng khi gọi một ngăn khác. Tính toàn vẹn và bảo mật được đảm bảo cho mã và các đối tượng chung trong một ngăn.

Nguồn: opennet.ru

Thêm một lời nhận xét