Google dùng AI và kỹ thuật fuzzing để chuyển mã C cũ sang Rust
Nhóm bảo mật của Google vừa công bố phương pháp chuyển đổi mã C tồn đọng trong thư viện xử lý ảnh giflib sang Rust nhằm loại bỏ các lỗ hổng bộ nhớ cố hữu. Quá trình di chuyển được tự động hóa, đảm bảo khả năng tương thích và giảm thiểu rủi ro zero-day, đồng thời chứng minh rằng bản dịch do AI tạo ra vẫn cần sự giám sát liên tục của con người.
Google vừa công bố một phương pháp mới giúp chuyển đổi mã C tồn đọng sang Rust — ngôn ngữ lập trình được thiết kế để loại bỏ phần lớn các lỗ hổng liên quan đến quản lý bộ nhớ. Thử nghiệm được thực hiện trên giflib, thư viện xử lý ảnh GIF được sử dụng rộng rãi trong nhiều hệ thống.
Điểm đáng chú ý là quá trình chuyển đổi được tự động hóa bằng AI, kết hợp với kỹ thuật fuzzing vi phân (differential fuzzing) để kiểm tra tính tương đương về hành vi giữa mã C gốc và mã Rust mới.
Vì sao chuyển từ C sang Rust?
C là ngôn ngữ nền tảng của rất nhiều thư viện hệ thống, nhưng cũng là nguồn gốc của vô số lỗ hổng bảo mật nghiêm trọng như tràn bộ đệm, use-after-free hay null pointer dereference. Những lỗi này thường bị khai thác để thực thi mã từ xa hoặc leo thang đặc quyền.
Rust giải quyết vấn đề này ở cấp độ ngôn ngữ nhờ hệ thống quyền sở hữu (ownership) và kiểm tra mượn (borrow checker), giúp ngăn chặn các lỗi bộ nhớ ngay từ khâu biên dịch. Đây cũng là lý do nhiều dự án lớn — từ nhân Linux đến Android — đang dần chuyển các thành phần quan trọng sang Rust.
Việc chuyển đổi hàng triệu dòng mã C thủ công là bất khả thi với hầu hết tổ chức. Đây chính là bài toán mà nhóm của Google muốn giải quyết.
Quy trình chuyển đổi hoạt động ra sao?
Theo mô tả của nhóm nghiên cứu, quy trình gồm ba giai đoạn chính:
- Dịch mã tự động bằng AI: Mô hình ngôn ngữ lớn được dùng để chuyển từng hàm C sang Rust, giữ nguyên chữ ký hàm và ngữ nghĩa gốc.
- Kiểm tra tương đương hành vi: Kỹ thuật differential fuzzing chạy song song hai phiên bản C và Rust với cùng một tập dữ liệu đầu vào, sau đó so sánh kết quả đầu ra. Bất kỳ sai lệch nào cũng bị đánh dấu để xem xét thủ công.
- Tinh chỉnh bởi kỹ sư: Các đoạn mã không đạt yêu cầu hoặc có hành vi khác biệt sẽ được con người sửa lại trực tiếp.
Cách tiếp cận này cho phép tận dụng tốc độ của AI mà vẫn đảm bảo độ tin cậy — điều đặc biệt quan trọng với các thư viện đã được dùng trong hàng triệu ứng dụng.
Kết quả và bài học
Dự án đã giữ nguyên hiệu năng thực thi so với phiên bản C gốc, đồng thời loại bỏ được các lỗ hổng tiềm ẩn liên quan đến bộ nhớ. Tuy nhiên, nhóm nghiên cứu nhấn mạnh một điểm: AI không thể thay thế hoàn toàn con người.
Các mô hình dịch mã vẫn có thể tạo ra những đoạn mã sai ngữ nghĩa ở các trường hợp biên, đặc biệt là khi mã C gốc sử dụng các thủ thuật tối ưu hóa hoặc phụ thuộc vào hành vi không xác định (undefined behavior). Nếu không có bước kiểm tra của kỹ sư, việc chuyển đổi tự động có thể tạo ra lỗ hổng mới thay vì loại bỏ lỗ hổng cũ.
Ý nghĩa với cộng đồng phát triển phần mềm
Với các doanh nghiệp và dự án mã nguồn mở đang duy trì lượng lớn mã C cũ, phương pháp này mở ra một hướng đi thực tế: không cần viết lại toàn bộ hệ thống, mà có thể chuyển đổi từng mô-đun một với sự hỗ trợ của AI và kiểm thử tự động.
Tại Việt Nam, nhiều đội ngũ phát triển vẫn phụ thuộc vào các thư viện C lâu đời trong sản phẩm nhúng, thiết bị IoT hoặc hệ thống backend hiệu năng cao. Việc theo dõi các phương pháp như thế này có thể giúp các nhóm kỹ thuật xây dựng lộ trình nâng cấp an toàn hơn, thay vì chờ đến khi lỗ hổng bị khai thác mới xử lý.

