Nella versione 6.18 del kernel Linux è stata accettata l'implementazione di Binder IPC per Android, scritta in Rust.

Nel codice sorgente del kernel Linux, su cui si basa il rilascio 6.18, è stata integrata l'implementazione del meccanismo di comunicazione interprocesso Binder, scritta in linguaggio Rust. Binder è utilizzato in Android per gestire l'interazione tra i processi e le chiamate remote ai metodi (un processo Android può richiamare un metodo o una funzione in un altro processo Android, utilizzando Binder per identificare, invocare e trasmettere argomenti tra i processi). Il codice di Binder è stato riscritto in Rust nell'ambito di un progetto volto a migliorare la sicurezza, promuovere tecniche di programmazione sicura e aumentare l'efficienza nell'individuazione di problemi di gestione della memoria in Android (circa il 70% di tutte le vulnerabilità critiche identificate in Android è causato da errori nella gestione della memoria).

L'uso di Rust ha permesso di risolvere alcuni problemi affrontati dagli sviluppatori di Binder, tra cui errori legati al conteggio dei riferimenti, blocchi e controlli dei limiti, riducendo notevolmente anche la complessità della gestione degli errori. L'implementazione di Binder in Rust è funzionalmente simile alla versione originale in C, supera tutti i test AOSP (Android Open-Source Project) e può essere utilizzata per creare versioni operative delle ROM Android. Nonostante le avanzate capacità e il supporto per oggetti con una complessa semantica di proprietà, il driver in Rust risulta essere più piccolo rispetto alla versione in C: 5,5 contro 5,8 mila righe di codice.

Nella descrizione del commit, l'autore menziona i seguenti motivi per riscrivere Binder:

  • Binder si è evoluto per 15 anni e nel corso di questo tempo la sua funzionalità e complessità sono aumentate significativamente: il progetto si colloca all'intersezione di tutti i componenti di Android e copre molteplici compiti che vanno oltre l'IPC:
    • un'analisi e trasformazione corretta del contenuto delle transazioni, che possono contenere più oggetti di tipi diversi (ad esempio, puntatori, descrittori di file), interagendo tra loro;
    • controllo delle dimensioni dei pool di thread nello spazio utente e assegnazione delle transazioni ai thread in modo da evitare situazioni di blocco durante l'esaurimento dei thread nel pool;
    • monitoraggio dei contatori dei riferimenti agli oggetti condivisi da più processi, con corretta trasmissione delle modifiche ai contatori dei riferimenti tra i processi;
    • gestione di numerosi scenari di errore e combinazione di 13 blocchi diversi, 7 contatori di riferimenti e variabili atomiche. Dovrebbe eseguire tali compiti nel modo più rapido e preciso possibile.
  • Nel vecchio codice si è accumulato un notevole debito tecnico che complicava sia la ricerca degli errori sia lo sviluppo futuro. Ad esempio, nel nucleo si trovano grandi funzioni di oltre mille righe di codice, metodi di gestione degli errori dubbiosi e strutture intricate.
  • Binder è un componente critico per la sicurezza di Android, poiché gli elementi della piattaforma che operano in ambienti sandbox isolati, come il processo di rendering in Chrome e SW Codec, hanno accesso diretto ad esso. Una vulnerabilità in Binder potrebbe aggirare l'isolamento. L'alta complessità insieme al debito tecnico complicano significativamente il mantenimento di un elevato livello di sicurezza in Binder.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster