Bezbednost u aplikacijama koje koriste milijarde ljudi ne zavisi samo od enkripcije poruka, već i od načina na koji se obrađuju podaci koji na prvi pogled deluju bezazleno. WhatsApp je zato uveo novi sloj zaštite zasnovan na programskom jeziku Rust, kako bi dodatno ojačao odbranu od sofisticiranih malver napada skrivenih u medijskim fajlovima.
U pitanju je jedna od najvećih produkcionih primena Rust koda na klijentskoj strani do sada. Biblioteke napisane u Rustu danas se distribuiraju na milijarde uređaja, uključujući telefone, računare, pregledače i nosive uređaje, širom WhatsApp, Messenger i Instagram ekosistema.
Zašto su medijski fajlovi i dalje ozbiljan bezbednosni rizik
WhatsApp već godinama koristi end-to-end enkripciju za poruke i pozive, ali bezbednost aplikacije ne prestaje u trenutku kada se poruka dešifruje na uređaju. Deljenje slika, video zapisa, PDF dokumenata i drugih fajlova predstavlja poseban izazov, jer se radi o neproverenom ulazu koji se automatski obrađuje.
Iako aplikacija upozorava na očigledno rizične fajlove poput APK instalacija, napadi su često znatno suptilniji. Zlonamerni kod može biti sakriven u naizgled ispravnoj slici ili videu i iskoristiti ranjivosti u operativnom sistemu, sistemskim bibliotekama ili samoj aplikaciji. Problem dodatno komplikuje činjenica da korisnici često mesecima ne ažuriraju operativni sistem.
Stagefright kao prelomni trenutak
Ključni trenutak za promenu strategije desio se još 2015. godine, tokom poznate Android “Stagefright” ranjivosti. Greška se nalazila u sistemskim bibliotekama za obradu medija, što je značilo da aplikacije poput WhatsApp-a nisu mogle direktno da je zakrpe.
Umesto da se oslanja isključivo na brzinu ažuriranja operativnog sistema, WhatsApp je tada modifikovao sopstvenu C++ biblioteku za obradu MP4 fajlova, poznatu kao wamedia. Ideja je bila da se pre slanja proveri da li fajl poštuje standard i da li može da izazove grešku na uređaju primaoca. Time je omogućena zaštita korisnika znatno brže nego kroz OS zakrpe.
Međutim, upravo zato što se ti medijski fajlovi obrađuju automatski i potiču iz nepouzdanog izvora, postalo je jasno da je C++ rizičan izbor za ovako kritičan deo sistema.
Rust kao dugoročno rešenje, ne eksperiment
Umesto postepenog prepisivanja, WhatsApp je razvio Rust verziju wamedia biblioteke paralelno sa postojećom C++ implementacijom. Korišćeni su diferencijalni fuzzing, kao i opsežni integracioni i unit testovi, kako bi se obezbedilo da obe verzije proizvode identične rezultate.
Prelazak nije bio trivijalan. Rust standardna biblioteka je u početku povećala veličinu binarnih fajlova, a dodatni izazov bilo je prilagođavanje build sistema za veliki broj platformi koje WhatsApp podržava. Ipak, dugoročna investicija se isplatila.
Na kraju je 160.000 linija C++ koda zamenjeno sa oko 90.000 linija Rust koda, uključujući testove. Nova implementacija pokazala je bolje performanse i manju potrošnju memorije u odnosu na staru, što je dodatno olakšalo odluku da se Rust verzija u potpunosti pusti svim korisnicima.
Kaleidoscope: višeslojna zaštita fajlova
Tokom vremena, sistem je dodatno unapređen nizom provera koje WhatsApp interno naziva Kaleidoscope. On ne proverava samo da li fajl poštuje format, već i da li pokazuje obrasce tipične za napade koji koriste razlike u parserima različitih biblioteka.
Posebna pažnja posvećena je rizičnijim tipovima fajlova, poput PDF dokumenata koji sadrže ugrađene skripte ili dodatne fajlove. Sistem takođe detektuje situacije u kojima se jedan tip fajla predstavlja kao drugi, kroz lažnu ekstenziju ili MIME tip, kao i poznate opasne formate poput izvršnih fajlova, koji se u korisničkom interfejsu posebno obeležavaju.
Iako ove provere ne mogu zaustaviti svaki napad, one značajno smanjuju površinu za eksploataciju i predstavljaju važan deo višeslojne odbrane.
Šira bezbednosna strategija i zaokret ka bezbednim jezicima
Uvođenje Rust-a deo je šire strategije bezbednosti u okviru Meta ekosistema. WhatsApp aktivno prijavljuje CVE ranjivosti koje otkrije, čak i kada nema dokaza o njihovoj zloupotrebi, kako bi korisnici i organizacije mogli brže da reaguju.
Analiza internih podataka pokazala je da je većina najkritičnijih ranjivosti u prošlosti bila povezana sa problemima bezbednosti memorije u C i C++ kodu. Kao odgovor, WhatsApp je usvojio tri paralelna pravca: smanjenje nepotrebne attack surface, dodatno obezbeđivanje postojećeg C i C++ koda, i podrazumevani izbor jezika koji su bezbedni po pitanju memorije za sav novi razvoj.
Rust se u tom kontekstu pokazao kao praktično i skalabilno rešenje, sposobno da radi na velikom broju platformi bez kompromisa po pitanju performansi.
Za WhatsApp, ovo nije eksperiment već temelj dugoročne strategije. Kako se količina zlonamernog sadržaja i složenost napada povećavaju, oslanjanje na jezike koji eliminišu čitave klase grešaka postaje ne samo dobra praksa, već nužnost za aplikacije koje funkcionišu na globalnom nivou.
0 komentara