Rust at scale: An added layer of security for WhatsApp
Bài tóm tắt WhatsApp 2026 4. Điều chỉnh Độ khó: Trung bình
WhatsApp · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Bối cảnh
- WhatsApp mã hoá đầu cuối mặc định cho hơn 3 tỉ người (2026). Mã hoá không chặn được file độc: một ảnh hay video được chế tác có thể khai thác lỗi chưa vá trong hệ điều hành, thư viện của hệ điều hành, hay chính app.
- 2015, Stagefright: lỗ hổng trong thư viện xử lý media của Android; app không vá được, và user mất nhiều tháng mới cập nhật hệ điều hành. WhatsApp sửa thư viện C++ đa nền tảng wamedia (vốn để gửi và định dạng MP4 nhất quán) để phát hiện file không đúng chuẩn MP4 có thể kích hoạt lỗi ở máy nhận. Cách này bảo vệ user nhanh hơn chờ cập nhật hệ điều hành.
- Vì wamedia tự chạy khi tải file và xử lý dữ liệu không tin cậy, nó sớm được xem là ứng viên cho ngôn ngữ an toàn bộ nhớ.
Thay đổi chính
- Viết lại song song, không thay dần: bản Rust phát triển cạnh bản C++; dùng differential fuzzing cùng unit test và integration test để bảo đảm hai bản cư xử như nhau.
- Hai trở ngại lớn: kích thước binary tăng vì kéo theo thư viện chuẩn Rust, và hỗ trợ hệ build cho rất nhiều nền tảng; họ chấp nhận đầu tư dài hạn vào cả hai.
- Kết quả: 160.000 dòng C++ (không tính test) thay bằng 90.000 dòng Rust (tính cả test); bản Rust nhanh hơn và dùng ít bộ nhớ hơn. Rollout cho mọi user trên Android, iOS, Mac, Web, thiết bị đeo. Theo WhatsApp, đây là đợt triển khai thư viện Rust lớn nhất thế giới mà họ biết: mỗi tháng tới hàng tỉ thiết bị của WhatsApp, Messenger, Instagram.
- Kaleidoscope: bộ kiểm mở rộng dần: cấu trúc không chuẩn trong một số loại file (chống parser differential), dấu hiệu rủi ro ở file đúng chuẩn (PDF có file nhúng hay script), file giả loại khác qua đuôi hay MIME, gắn cờ file nguy hiểm đã biết (file thực thi, app).
- Chiến lược chung: đa số lỗ hổng nghiêm trọng họ công bố đến từ lỗi an toàn bộ nhớ trong C/C++. Ba hướng song song: thiết kế sản phẩm giảm bề mặt tấn công; tăng bảo đảm cho mã C/C++ còn lại (CFI, allocator cứng, API buffer an toàn, đào tạo, phân tích tự động, SLA sửa lỗi); mặc định ngôn ngữ an toàn bộ nhớ cho mã mới.
Bài học cho SWE
- Thành phần tự xử lý dữ liệu không tin cậy (parser media) là nơi đầu tiên đáng đổi sang ngôn ngữ an toàn bộ nhớ.
- Viết lại song song với differential fuzzing cho phép đổi lõi mà không đổi hành vi, và có bằng chứng tương đương trước khi chuyển.
- Một lớp kiểm ở app có thể che lỗi của tầng dưới (hệ điều hành) mà mình không vá được.
Liên quan
Đổi ngôn ngữ và runtimeKiểm thử độ tin cậy (chaos, fault injection, mô phỏng tất định)Migration không downtimeMã hoá đầu cuối và hệ thống mà server không được đọc
#Rust#C++#wamedia#Stagefright#Memory safety#Differential fuzzing#Parallel rewrite#Binary size#Kaleidoscope#MIME spoofing#Client-side security
Được nhắc tới trong
Chủ đề (4)
Công ty (1)