- WhatsApp, yang memiliki lebih dari 3 miliar pengguna, memperkenalkan lapisan keamanan berbasis Rust untuk memperkuat pertahanan terhadap ancaman malware
- Library konsistensi media ditulis ulang dengan Rust dan didistribusikan ke miliaran perangkat serta browser, menyelesaikan validasi penggunaan nyata pada skala global
- Sebanyak 160 ribu baris kode C++ lama digantikan dengan 90 ribu baris Rust, sekaligus meningkatkan performa dan efisiensi memori
- Setelah kerentanan Stagefright pada 2015, perusahaan mendorong adopsi bahasa yang aman terhadap memori seperti Rust untuk meningkatkan keamanan pemrosesan file media
- Perubahan ini menjadi titik balik yang memperbesar porsi bahasa aman memori dalam strategi keamanan WhatsApp·Messenger·Instagram secara keseluruhan
Strategi pemrosesan media WhatsApp
- WhatsApp adalah layanan pesan terenkripsi end-to-end yang digunakan oleh lebih dari 3 miliar orang, dan terus mengembangkan strateginya untuk menghadapi ancaman keamanan yang berkelanjutan
- Saat pengguna membagikan media seperti gambar dan video, ada kemungkinan media tersebut mengandung malware
- Sebagian file dapat mengeksploitasi kerentanan yang belum ditambal pada sistem operasi atau aplikasi
- Untuk mencegah hal ini, bahasa Rust diperkenalkan ke fitur berbagi media guna memastikan keamanan memori
- Ini disebut sebagai salah satu kasus distribusi library berbasis Rust dengan skala terbesar di dunia
Kerentanan Android Stagefright 2015 dan responsnya
- Kerentanan Stagefright di Android pada 2015 berada di library pemrosesan media tingkat OS, sehingga tidak dapat diperbaiki di level aplikasi
- WhatsApp memperbarui library C++ miliknya, “wamedia”, agar dapat mendeteksi file yang tidak mengikuti standar MP4
- Dengan begitu, pengguna dapat dilindungi tanpa harus menunggu pembaruan OS
- Namun, karena wamedia secara otomatis memproses input yang tidak tepercaya, muncul kebutuhan untuk beralih ke bahasa yang aman terhadap memori
Transisi ke Rust: penulisan ulang skala besar dan hasilnya
- WhatsApp mengembangkan versi Rust dari wamedia secara paralel dengan versi C++ yang sudah ada
- Differential fuzzing, integration test, dan unit test digunakan untuk memverifikasi kompatibilitas antara kedua implementasi
- Pada awalnya ada masalah ukuran biner yang membesar akibat standard library Rust dan kompatibilitas dengan sistem build, tetapi dukungan jangka panjang berhasil dibangun
- Hasilnya, 160 ribu baris C++ → 90 ribu baris Rust, dengan peningkatan pada performa dan efisiensi penggunaan memori
- Distribusi penuh versi Rust telah selesai ke semua platform seperti Android, iOS, Mac, Web, dan wearable
- Setelah itu, sistem “Kaleidoscope” diperkenalkan untuk mendeteksi jenis file berisiko seperti PDF dan file executable, serta mengidentifikasi pemalsuan ekstensi dan MIME spoofing
Pendekatan keamanan WhatsApp
- WhatsApp mengoperasikan berbagai lapisan keamanan seperti enkripsi end-to-end, backup terenkripsi, key transparency, dan fitur perlindungan panggilan
- Risiko diidentifikasi melalui pengungkapan CVE, audit keamanan internal dan eksternal, fuzzing dan analisis statis, manajemen rantai pasok, serta analisis attack surface
- Dengan memperluas program Bug Bounty, peneliti diberi Research Proxy agar dapat menganalisis protokol jaringan WhatsApp
- Setelah memastikan bahwa banyak kerentanan utama berasal dari masalah keamanan memori di C/C++, tiga strategi dijalankan secara paralel
- Meminimalkan attack surface yang tidak perlu
- Memperkuat jaminan keamanan pada sisa kode C/C++
- Mengalihkan bahasa default untuk kode baru ke bahasa yang aman terhadap memori
Percepatan adopsi Rust dan arah ke depan
- Rust memungkinkan WhatsApp mengembangkan library keamanan berperforma tinggi dan lintas platform
- Perubahan ini memberi pengguna lapisan keamanan tambahan yang tidak terlihat, sebagai bagian dari strategi defense-in-depth
- Tim keamanan WhatsApp dan Meta tengah memperluas area penerapan Rust dengan dampak tinggi, dan berencana mempercepat adopsi Rust di masa depan
1 komentar
Komentar Hacker News
WhatsApp adalah messenger yang digunakan oleh 3 miliar orang setiap hari
Di AS memang tidak terlalu dipakai, tetapi secara global sudah menjadi infrastruktur komunikasi yang mendasar
Jika ingin membangun produk untuk pasar global, kita harus memahami pola pikir dan kebiasaan para pengguna ini
Masih ada setidaknya puluhan orang independen seperti ini
Tolong jangan ikut membuat WhatsApp jadi semakin tak terhindarkan
Kebanyakan orang hampir tidak pernah memeriksa email
Saya mengelola komunitas developer, dan sering terbentur batas anggota grup (1024 orang)
Walaupun mencoba pindah ke Discord atau Slack, akhirnya selalu kembali ke WhatsApp
Karena berkat bundle data operator, WhatsApp pada praktiknya gratis
Artikel tentang spam pesan bisnis sudah beberapa kali dimuat di TechCrunch, tetapi kenyataannya hampir tidak ada yang berubah
UX fitur komunitasnya juga kurang bagus
Pada akhirnya, masalahnya adalah ketergantungan yang makin dalam pada ekosistem Facebook
Saya sudah 10 tahun tidak memakai WhatsApp, dan sebagian besar teman serta keluarga saya juga sudah pindah ke Signal
Di Eropa masih ada wilayah yang tetap memakai Viber
Disebut sebagai deployment library berbasis Rust terbesar, tetapi sebenarnya Fontations mungkin lebih besar
Karena sudah masuk ke Chromium, dan jika menghitung dependensinya, basis instalasinya bisa jadi lebih luas
Dari kutipannya, tampaknya WhatsApp tidak langsung memakai libsignal
Contoh: image-png, CrabbyAvif, qr_code, icu4x
Menurunnya jumlah kode dari 160 ribu baris ke 90 ribu baris memang bagus, tetapi yang lebih menarik adalah strategi rollout paralel
Menjalankan versi Rust dan C++ secara bersamaan lalu memverifikasi kesetaraannya lewat differential fuzzing terasa sangat realistis
Di klien mobile, ukuran biner itu penting, jadi investasi pada tooling build juga mengesankan
Bisa jadi itu optimasi yang hanya mungkin di nightly build
Bagian tersulit dari rewrite seperti ini bukan implementasi Rust-nya sendiri, melainkan menjaga kompatibilitas bug parser lama
File media di dunia nyata sering kali formatnya rusak, jadi kalau parsing terlalu ketat, data pengguna bisa rusak
differential fuzzing pada praktiknya adalah satu-satunya pendekatan yang benar-benar praktis
Pernyataan bahwa WhatsApp melakukan deployment Rust terbesar kemungkinan karena ia berjalan di lebih banyak perangkat daripada Windows 11
Meski begitu, tetap diragukan apakah WhatsApp benar-benar memakai libsignal secara langsung
Android sendiri sudah memuat banyak kode berbasis Rust, dan di perangkat embedded juga digunakan secara luas
sementara Windows masih tetap berpusat pada C/C++
Disebutkan bahwa adopsi standard library Rust menyebabkan peningkatan ukuran biner, tetapi tidak dijelaskan bagaimana itu diatasi
Commit terkait: commit1, commit2
Masalah utamanya bukan ukuran itu sendiri, melainkan dependensi Rust yang terduplikasi
Dalam build campuran C++ dan Rust, masing-masing membawa libstd sendiri, jadi diperlukan sistem build terpadu seperti Bazel
Awalnya mereka menerima overhead sekitar 200KiB, tetapi dengan migrasi ke Buck2 ukuran dan waktu build sama-sama turun
Ini berkat optimasi clang terbaru dan peningkatan LTO
Saya penasaran apakah Signal juga melakukan hal serupa
libsignal memang diimplementasikan dalam Rust, tetapi untuk bagian lainnya saya kurang tahu
Ada kalimat yang menyebut “secara default memberikan end-to-end encryption kepada 3 miliar orang”, tetapi pernah juga ada berita bahwa pesan-pesannya bisa dibaca
Skype juga terenkripsi secara default, tetapi bisa dinonaktifkan tergantung konfigurasi server
Pertanyaannya adalah apakah kita bisa mempercayai bahwa Meta tidak mengintip data itu
Ironis bahwa Meta begitu giat dalam hal lain, tetapi tidak menghentikan phishing atau penipuan kartu prabayar
Menarik bahwa jumlah bug banyak berkurang setelah adopsi Rust
C++ memiliki banyak sekali undefined behavior (UB), sedangkan Rust memblokirnya secara struktural
Berkat sistem tipe yang kuat, keandalannya meningkat besar