Rust is a memory-safe programming language that disallows undefined behavior. Its safety guarantees have been extensively examined by the community through empirical studies, which has led to its remarkable success. However, unsafe code remains a critical concern in Rust. By reviewing the safety design of Rust and analyzing real-world Rust projects, this paper establishes a systematic framework for understanding unsafe code and undefined behavior, and summarizes the soundness criteria for Rust code. It further derives actionable guidance for achieving sound encapsulation.
academic
Un Approccio Basato su Tracce per l'Analisi della Sicurezza del Codice
Rust è un linguaggio di programmazione sicuro in termini di memoria che vieta comportamenti indefiniti. Le sue garanzie di sicurezza sono state verificate attraverso numerosi studi empirici della comunità, il che rappresenta anche la ragione del suo notevole successo. Tuttavia, il codice unsafe rimane una questione critica in Rust. Questo articolo, attraverso la revisione della progettazione della sicurezza di Rust e l'analisi di progetti Rust nel mondo reale, stabilisce un quadro sistematico per comprendere il codice unsafe e i comportamenti indefiniti, sintetizza gli standard di solidità del codice Rust e propone ulteriormente una guida operativa per l'implementazione di incapsulamento solido.
Limitazioni della promessa di sicurezza di Rust: Sebbene Rust prometta che il codice safe non causerà comportamenti indefiniti, il codice unsafe può comunque introdurre rischi di sicurezza
Mancanza di un quadro sistematico: La ricerca esistente manca di un'analisi teorica sistematica della relazione tra codice unsafe e comportamenti indefiniti
Difficoltà nella verifica della solidità dell'incapsulamento: Mancanza di metodi operativi per verificare la solidità di funzioni e strutture contenenti codice unsafe
Istituzione del Teorema Principale: Prova formalizzata della relazione tra comportamenti indefiniti e codice unsafe, stabilendo il principio fondamentale che "i comportamenti indefiniti derivano esclusivamente dal codice unsafe e sono completamente determinati dai suoi vincoli di sicurezza"
Proposizione di Standard di Solidità: Formulazione di criteri di determinazione della solidità rispettivamente per funzioni safe e unsafe, strutture e moduli
Sviluppo di Guida all'Incapsulamento: Derivazione di principi operativi e corollari per l'implementazione di incapsulamento solido
Costruzione di un Quadro di Audit: Proposizione di un metodo di audit sistematico basato su Grafo di Propagazione Unsafe (UPG)
Il compito fondamentale di questo articolo è stabilire un quadro teorico per analizzare la sicurezza della parte unsafe nel codice Rust, includendo specificamente:
Input: Programmi Rust contenenti codice unsafe
Output: Determinazione della solidità e guida all'incapsulamento
Vincoli: Basati sul sistema di tipi Rust e sui vincoli di sicurezza
Teorema Principale (Teorema 1): Per un programma Rust P ben tipizzato, il comportamento indefinito si verifica solo se P contiene codice unsafe e viola i relativi vincoli di sicurezza:
P ⊢ UB ⇒ (P ∋ UC) ∧ (P ⊬ SC_UC)
Dove UC rappresenta il codice unsafe e SC_UC rappresenta i vincoli di sicurezza del codice unsafe.
Requisiti di solidità per la struttura S = {C, F, M, d}:
Metodi Statici: Tutti i costruttori e i metodi statici devono soddisfare i principi di incapsulamento della funzione
Metodi Dinamici: Considerare l'impatto dei metodi distruttivi, garantendo che i vincoli di sicurezza siano soddisfatti in tutte le combinazioni di costruttori e metodi
Metodo di Analisi Basato su Tracce: Simile all'analisi di taint, il codice unsafe è considerato come fonte di taint e l'uscita della funzione come sink
Solidità Stratificata: Analisi progressiva da funzione → struttura → modulo → crate
Gestione dei Metodi Distruttivi: Considerazione innovativa dell'impatto dei metodi mutabili sugli invarianti di sicurezza di altri metodi
Grafo di Propagazione Unsafe: Fornisce uno strumento di audit visualizzato
Rust Team. Soundness (of code / a library). Rust Unsafe Code Guidelines.
Zihao Rao, et al. Annotating and Auditing the Safety Properties of Unsafe Rust. arXiv preprint arXiv:2504.21312, 2025.
Valutazione Complessiva: Questo articolo fornisce importanti contributi teorici nell'analisi della sicurezza del codice unsafe di Rust, stabilendo un quadro di analisi sistematico. Sebbene vi sia ancora spazio per miglioramenti nella verifica sperimentale e nell'implementazione strumentale, il suo valore teorico e il potenziale pratico meritano riconoscimento. Questo lavoro fornisce una base teorica solida per la ricerca e la pratica della sicurezza di Rust.