NSA vàCISAđang kêu gọi các nhà phát triển sử dụng các ngôn ngữ lập trình giúp giảm thiểu rủi ro từ các lỗ hổng bảo mật bộ nhớ.
Trong một thời gian dài, giới công nghệ đã cố gắng khắc phục vấn đề này.
Cách tiếp cận trước đây là với đào tạo đầy đủ, công cụ thông minh và làm việc cẩn thận, các nhà phát triển có thể tránh được những lỗi này.
Nhưng bằng chứng cho thấy cách tiếp cận đó không đủ hiệu quả.
Bộ nhớ của máy tính giống như một bức tường gồm vô số hộp thư.
Khi một chương trình chạy, nó được cấp phát một số hộp để lưu trữ thông tin.
Lỗi bảo mật bộ nhớ xảy ra khi chương trình mắc sai lầm và ghi thông tin vào nhầm hộp, hoặc cố đọc từ một hộp không thuộc về nó.
Nghe có vẻ nhỏ, nhưng đây chính là nguyên nhân gốc rễ của một số cuộc tấn công mạng khét tiếng nhất.
Bạn còn nhớ lỗi Heartbleed?
Nó ảnh hưởng đến hàng trăm nghìn trang web và làm lộ dữ liệu riêng tư của hàng triệu người, bao gồm cả bệnh nhân bệnh viện.
Một lỗi khác là BadAlloc, tấn công cơ sở hạ tầng quan trọng và khoảng 195 triệu xe hơi.
Đây không phải là những vấn đề nhỏ lẻ;
chúng là những thảm họa phổ biến gây ra bởi những sai lầm đơn giản về bảo mật bộ nhớ.
Trong một nghiên cứu năm 2019, gần hai phần ba tất cả các lỗ hổng bảo mật trong iOS và macOS của Apple là do vấn đề bộ nhớ.
Nhóm Project Zero của Google phát hiện ra rằng 75% các vụ hack trong thực tế mà họ phân tích đều khai thác các lỗi kiểu này.
Nội dung chính
Ngôn ngữ an toàn bộ nhớ:
Cách thông minh hơn để xây dựng phần mềm
Giải pháp được NSA và CISA đẩy mạnh là xây dựng bảo mật ngay từ đầu;
được gọi là triết lý “secure by design”.
Thay vì viết mã rồi kiểm tra lỗi, các ngôn ngữ an toàn bộ nhớ (MSL) như Rust, Java, Go và Python được thiết kế để ngăn chặn toàn bộ các lỗi bảo mật bộ nhớ ngay từ đầu.
Kiểm tra giới hạn hoạt động như một người bảo vệ, ngăn chương trình ghi dữ liệu ra ngoài khu vực được chỉ định, từ đó ngăn chặn lỗi tràn bộ đệm.
Quản lý bộ nhớ tự động giống như một đội dọn dẹp chạy trong nền.
Một số ngôn ngữ như Java và Go sử dụng “trình thu gom rác” để tự động tìm và giải phóng bộ nhớ không còn sử dụng.
Các ngôn ngữ khác như Rust sử dụng hệ thống “quyền sở hữu” nơi bản thân ngôn ngữ theo dõi ai được phép sử dụng một phần bộ nhớ tại bất kỳ thời điểm nào.
Cả hai phương pháp đều giúp ngăn chặn lỗi “use-after-free”, khi chương trình cố sử dụng bộ nhớ đã trả lại.
Nhóm phát triển Android đã áp dụng điều này với kết quả đáng kinh ngạc.
Năm 2019, 76% lỗi bảo mật của họ liên quan đến bộ nhớ.
Nhận ra cần thay đổi, họ quyết định tất cả mã mới sẽ được viết bằng các ngôn ngữ an toàn bộ nhớ như Rust và Java.
Họ không cố viết lại toàn bộ hệ thống cùng lúc, vì đó sẽ là nhiệm vụ khổng lồ.
Thay vào đó, họ tập trung đảm bảo tất cả phần mới được xây dựng an toàn.
Kết quả?
Đến năm 2024, lỗ hổng bảo mật bộ nhớ giảm mạnh chỉ còn 24%.
Cải thiện bảo mật bộ nhớ là việc quan trọng
Tất nhiên, chuyển đổi không đơn giản như bật công tắc.
Với các công ty có hàng triệu dòng mã hiện có, viết lại toàn bộ thường là điều không tưởng.
NSA và CISA hiểu điều này và khuyến nghị cách tiếp cận thực tế hơn, từng bước một.
Hành trình bắt đầu bằng việc sử dụng MSL cho các dự án mới hoặc tính năng mới thêm vào dự án cũ.
Với phần mềm hiện có, các nhóm có thể xác định phần rủi ro cao nhất (ví dụ:
mã xử lý kết nối mạng hoặc xử lý tệp từ internet) và tập trung viết lại những thành phần quan trọng đó.
Thay đổi này để cải thiện bảo mật bộ nhớ đòi hỏi đầu tư thực sự vào đào tạo và công cụ mới.
Tuy nhiên, các cơ quan này cho rằng chi phí ban đầu dễ dàng được bù đắp bởi khoản tiết kiệm dài hạn từ ít sự cố bảo mật hơn, thời gian ngừng hoạt động ít hơn và phần mềm đáng tin cậy hơn.
Cách chúng ta xây dựng phần mềm lâu nay đã mở cửa rộng cho kẻ tấn công.
Áp dụng ngôn ngữ an toàn bộ nhớ là một trong những cách mạnh mẽ nhất để đóng cửa đó, làm cho thế giới số của chúng ta an toàn hơn cho tất cả mọi người.
Đây là một thay đổi lớn, nhưng là điều cần thiết.
Tags:coding , cybersecurity , development , go , java , languages , memory safety , programming , python , rust , security