Contents

Nhà Trắng muốn lập trình an toàn bộ nhớ, nhưng đó là gì?

Đường dẫn nhanh

⭐Nhà Trắng đang nói gì?

⭐Tại sao nó quan trọng?

⭐Ngôn ngữ không an toàn trông như thế nào?

⭐Mã An toàn Bộ nhớ trông như thế nào?

⭐Tôi có nên chuyển đổi ngôn ngữ không?

Bài học chính

Nhà Trắng đã khuyến nghị sử dụng các ngôn ngữ lập trình ưu tiên an toàn bộ nhớ, chẳng hạn như Rust, để giảm thiểu rủi ro bảo mật tiềm ẩn liên quan đến lỗi mã hóa và lỗ hổng bảo mật.

Trong các ngôn ngữ lập trình nguyên thủy hơn, chẳng hạn như C, khả năng cao là các lỗi trong mã có thể dẫn đến vi phạm an ninh.

Rust, một ngôn ngữ nổi tiếng với các biện pháp an toàn, cung cấp thêm một lớp bảo mật thông qua quản lý bộ nhớ tự động và khả năng ngăn ngừa lỗi tích hợp.

Một chỉ thị gần đây do cơ quan chính phủ Hoa Kỳ ban hành ủng hộ các chuyên gia lập trình áp dụng các ngôn ngữ an toàn cho bộ nhớ như Rust và Java. Tuy nhiên, nó đặt ra câu hỏi về điều gì phân biệt những ngôn ngữ này với những ngôn ngữ khác và liệu sự khác biệt này có ý nghĩa quan trọng trong thực tế hay không.

Nhà Trắng đang nói gì?

Trong tuyên bố ngày 26 tháng 2, Văn phòng Giám đốc Mạng Quốc gia tại Nhà Trắng đã ủng hộ các nhà phát triển phần mềm sử dụng các ngôn ngữ lập trình an toàn cho bộ nhớ như Rust.

ONCD cho biết:

Với tư cách là một xã hội, chúng ta có khả năng và nghĩa vụ giảm thiểu lỗ hổng của không gian mạng bằng cách cản trở việc tạo ra các lỗ hổng bảo mật bao gồm một loạt các lớp, thông qua việc áp dụng các ngôn ngữ lập trình an toàn cho bộ nhớ. Tuy nhiên, đây là một vấn đề đầy thách thức cần có giải pháp.

Tại sao nó lại quan trọng?

Văn phòng Đổi mới Không gian mạng và Kỹ thuật số (ONCD), được thành lập vào năm 2021, hoạt động dưới sự chỉ đạo trực tiếp của Tổng thống, cung cấp cố vấn chuyên môn về các vấn đề liên quan đến an ninh mạng và các mối quan ngại liên quan. Người ta dự đoán rằng các quyết định được đưa ra ở Hoa Kỳ liên quan đến lĩnh vực này sẽ có ảnh hưởng đáng kể đến bối cảnh tiến bộ công nghệ rộng lớn hơn cả trong nước và quốc tế.

Một số vi phạm bảo mật đáng chú ý được cho là do sai sót trong quản lý bộ nhớ, đây là khía cạnh cơ bản của lập trình. Việc sử dụng các ngôn ngữ cấp thấp, cũ hơn mang lại cho các nhà phát triển nhiều khả năng đa dạng, đồng thời làm tăng khả năng mã hóa sai có thể dẫn đến hậu quả bất lợi.

Mặc dù vậy, xu hướng sử dụng các ngôn ngữ lập trình an toàn bộ nhớ như Rust, Python và JavaScript ngày càng tăng. Rất có thể ủy ban tiêu chuẩn hóa Đối tượng, Lớp và Dữ liệu (ONCD) đã đưa ra thông báo này do sự phổ biến của các ngôn ngữ không an toàn như C đã ăn sâu vào cơ sở hạ tầng công nghệ của chúng tôi và được sử dụng phổ biến trong nhiều ứng dụng hàng ngày.

Ngôn ngữ không an toàn trông như thế nào?

Chắc chắn, tôi sẽ vui lòng cung cấp một bản trình bày tinh tế hơn về tuyên bố đó. Đây là nỗ lực của tôi trong việc diễn đạt lại nó một cách tao nhã: Điều đáng chú ý là mã lập trình nguy hiểm không phải lúc nào cũng thể hiện vẻ ngoài đáng lo ngại hoặc độ phức tạp phức tạp. Một trường hợp điển hình có thể được quan sát thấy trong trường hợp của một chương trình C cơ bản, tuy nhiên chương trình này có thể ẩn chứa những rủi ro tiềm ẩn đối với tính bảo mật và ổn định của hệ thống.

#include <stdio.h>

int main (void) {
    int arr[3] = { 0, 0, 0 };
    printf("%d\n", arr[3]);
    return 0;
}

Điều này minh họa một ví dụ điển hình về một sai sót có thể dẫn đến

/vi/images/memory-safety-c-overflow.png

Thông tin được lưu trữ ở vị trí được chỉ định bởi biến “arr[3]” tạo thành một địa chỉ bộ nhớ hợp pháp, có thể so sánh với các địa chỉ khác trong hệ thống. Tuy nhiên, địa chỉ cụ thể này không tương ứng với một phần tử trong ranh giới mảng đã xác định. Do đó, bất kỳ dữ liệu nào cũng có thể được lưu trữ ở vị trí đó, với các kết quả có thể xảy ra từ lỗi hệ thống hoàn chỉnh đến vi phạm an ninh nghiêm trọng. Trong lịch sử, nhiều tội phạm mạng đã lợi dụng các lỗ hổng tương tự.

Mặc dù đưa ra thông báo cảnh báo, trình biên dịch C vẫn tiếp tục tạo ra một chương trình thực thi. Nhà phát triển có toàn quyền quyết định ngăn chặn hoặc che giấu những cảnh báo đó bằng các chỉ thị trình biên dịch cụ thể. Bất kể tùy chọn này là gì, C vẫn tiếp tục tạo ra khả năng gây hại cho bản thân, trong khi các ngôn ngữ lập trình thay thế như Rust không cung cấp công cụ cần thiết để đạt được những kết quả như vậy.

Mã an toàn bộ nhớ trông như thế nào?

Trong ngôn ngữ lập trình ưu tiên sự an toàn và ngăn ngừa hỏng dữ liệu như Rust, vấn đề tràn bộ đệm không phát sinh. Đoạn mã sau thể hiện khái niệm này trong Rust:

fn main() {
    let arr: [u32; 5] = [0;3];
    println!("{}", arr[3]);
} 

Mặc dù đúng ngữ pháp nhưng Rust sẽ không thể xử lý đoạn mã cụ thể này do lỗi biên dịch.

/vi/images/memory-safety-rust-compile-error.png

Ngôn ngữ lập trình Rust thể hiện sự tuân thủ nghiêm ngặt các nguyên tắc riêng của nó, từ chối thực thi bất kỳ mã nào vi phạm các nguyên tắc đã thiết lập của nó. Khi gặp mã có vấn đề, trình biên dịch sẽ đưa ra lời giải thích rõ ràng về vấn đề, ngăn chặn hiệu quả việc tạo ra một chương trình thực thi.

Rust cung cấp vô số tính năng bổ sung ngoài những tính năng đã đề cập trước đó, nhằm mục đích nâng cao tính an toàn thông qua quản lý bộ nhớ tự động và tránh các tham chiếu con trỏ null. Chúng bao gồm việc triển khai các con trỏ thông minh, giúp quản lý tài nguyên một cách hiệu quả và giảm thiểu các lỗi tiềm ẩn do việc sử dụng hoặc xử lý các con trỏ này không phù hợp.

Tôi có nên chuyển đổi ngôn ngữ không?

Điều cần thiết là phải nhận ra rằng mỗi ngôn ngữ lập trình phục vụ chức năng và mục đích cụ thể của nó, do đó sẽ là thiếu thận trọng nếu bỏ qua sự thận trọng khi xem xét việc tránh tuyệt đối một số ngôn ngữ nhất định, bất kể sự chứng thực của chúng bởi các cá nhân cấp cao như tổng thống. Bất chấp thiên hướng thông thạo một ngôn ngữ cụ thể của một người, việc đạt được trình độ thông thạo nhiều ngôn ngữ có thể mang lại nhiều cơ hội mở rộng để có tính linh hoạt và khả năng thích ứng trong những nỗ lực trong tương lai.

An toàn bộ nhớ là một đặc điểm nổi bật trong nhiều ngôn ngữ lập trình hiện đại, khiến việc làm quen với ít nhất một ngôn ngữ như vậy là điều cần thiết. Mặc dù C có thể sở hữu một số tiện ích nhất định nhưng nó gây ra rủi ro đáng kể do thiếu các biện pháp an toàn. May mắn thay, tồn tại các lựa chọn thay thế cung cấp các tính năng và hiệu quả bảo mật nâng cao, đặc biệt là Rust, nên được xem xét bởi những người đang tìm kiếm một ngôn ngữ có cơ chế an toàn mạnh mẽ trong khi vẫn duy trì khả năng tối ưu hóa hiệu suất.