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
Une Approche Basée sur les Traces pour l'Analyse de la Sécurité du Code
Rust est un langage de programmation garantissant la sécurité mémoire et interdisant les comportements indéfinis. Ses garanties de sécurité ont été validées par de nombreuses études empiriques menées par la communauté, ce qui explique son succès remarquable. Cependant, le code unsafe demeure un enjeu critique en Rust. Cet article établit un cadre systématique pour comprendre le code unsafe et les comportements indéfinis en examinant la conception de sécurité de Rust et en analysant des projets Rust du monde réel. Il synthétise les critères de solidité du code Rust et propose des directives opérationnelles pour la mise en œuvre d'encapsulations solides.
Limitations des promesses de sécurité de Rust: Bien que Rust promette que le code safe ne provoquera pas de comportements indéfinis, le code unsafe peut toujours introduire des risques de sécurité
Absence de cadre systématisé: Les recherches existantes manquent d'une analyse théorique systématique de la relation entre le code unsafe et les comportements indéfinis
Difficulté de vérification de la solidité de l'encapsulation: Absence de méthodes opérationnelles pour vérifier la solidité des fonctions et structures contenant du code unsafe
Établissement d'un théorème principal: Preuve formalisée de la relation entre les comportements indéfinis et le code unsafe, établissant le principe fondamental selon lequel "les comportements indéfinis proviennent uniquement du code unsafe et sont entièrement déterminés par ses contraintes de sécurité"
Proposition de critères de solidité: Établissement de critères de jugement de solidité respectifs pour les fonctions safe et unsafe, les structures et les modules
Développement de directives d'encapsulation: Dérivation de principes opérationnels et de corollaires pour la mise en œuvre d'encapsulations solides
Construction d'un cadre d'audit: Proposition d'une méthode d'audit systématisée basée sur le graphe de propagation non sécurisée (UPG)
Théorème Principal (Théorème 1): Pour un programme Rust bien typé P, les comportements indéfinis ne se produisent que si P contient du code unsafe et viole ses contraintes de sécurité associées:
P ⊢ UB ⇒ (P ∋ UC) ∧ (P ⊬ SC_UC)
Où UC représente le code unsafe et SC_UC représente les contraintes de sécurité du code unsafe.
Exigences de solidité pour une structure S = {C, F, M, d}:
Méthodes statiques: Tous les constructeurs et méthodes statiques doivent satisfaire les principes d'encapsulation de fonction
Méthodes dynamiques: Considération de l'impact des méthodes destructrices, garantissant que les contraintes de sécurité sont satisfaites dans toutes les combinaisons de constructeurs et de méthodes
Méthode d'analyse basée sur les traces: Similaire à l'analyse de taint, traite le code unsafe comme source de taint et les sorties de fonction comme points de fuite
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.
Évaluation Globale: Cet article apporte des contributions théoriques importantes à l'analyse de la sécurité du code unsafe en Rust, établissant un cadre d'analyse systématisé. Bien que la vérification expérimentale et l'implémentation d'outils méritent d'être renforcées, sa valeur théorique et son potentiel pratique sont dignes de reconnaissance. Ce travail fournit une base théorique solide pour la recherche et la pratique en matière de sécurité de Rust.