IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Rust Discussion :

Google a adopté Rust dans Android pour des raisons de sécurité


Sujet :

Rust

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 1 001
    Par défaut
    Citation Envoyé par fdecode Voir le message
    ...
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carrément impossible, l'algorithme de la racine carré-inverse rapide ne semble pas non plus pouvoir être tolérée par le compilateur (spéculatif, je n'ai pas essayé ; mais étant donné qu'il faille jouer avec les différents motifs mémoire fonction du types des nombres, en Rust ça doit être un enfer) ; la compilation est affreusement lente quand il faut récupérer tous les paquets Cargo pour un gros projet. Franchement passé la hype, je ne vois pas comment Rust pourrait avoir une trajectoire différente d'Ocaml ou Haskell, c'est un truc d'université/laboratoire qui ne semble pas pouvoir s'adapter à la réalité des entreprises.

  2. #2
    Membre confirmé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2021
    Messages : 111
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carrément impossible, l'algorithme de la racine carré-inverse rapide ne semble pas non plus pouvoir être tolérée par le compilateur (spéculatif, je n'ai pas essayé ; mais étant donné qu'il faille jouer avec les différents motifs mémoire fonction du types des nombres, en Rust ça doit être un enfer) ; la compilation est affreusement lente quand il faut récupérer tous les paquets Cargo pour un gros projet. Franchement passé la hype, je ne vois pas comment Rust pourrait avoir une trajectoire différente d'Ocaml ou Haskell, c'est un truc d'université/laboratoire qui ne semble pas pouvoir s'adapter à la réalité des entreprises.
    Cela a l'air très personnels et émotionnels comme griefs. Je vais simplement répondre à la demande concrète de votre message: "algorithme de la racine carré-inverse rapide" (de quake, je suppose).
    Dans la mesure où c'est un algorithme de calcul très approximatif, et que l'instruction SSE RSQRT existe désormais, il me paraît assez peu intéressant, mais il a quand même été facile de trouver un exemple d'implémentation [playground]:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    fn inv_sqrt(x: f32) -> f32 {
        let i = x.to_bits();
        let i = 0x5f3759df - (i >> 1);
        let y = f32::from_bits(i);
     
        y * (1.5 - 0.5 * x * y * y)
    }
     
     
    fn print_both(v: f32) {
        println!("quake: {}", inv_sqrt(v));
        println!("real:  {}", 1.0 / v.sqrt());
        println!();
    }
     
    fn main() {
        print_both(4.0);
        print_both(10.0);
        print_both(3.1415);
    }
    Ceci-dit, le code de quake n'est pas très intéressant puisque le calcul exact tient en 3 instructions machine.

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 731
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    Reste qu'apparemment, il n'est pas possible de tout faire en Rust et certain projet comme construire une librairie Rust semble carrément impossible
    Je vais supposer que tu t'es mal expliqué parce qu'il est évident que Rust peut faire des bibliothèques. Le dépôt standard de Rust contient plus de 150 000 crates dont la plupart sont des bibliothèques.
    Si tu voulais parler de bibliothèque qui s'interface avec d'autre langages, c'est aussi possible, à condition d'avoir une interface qui respecte l'ABI C. C'est en effet limitant, mais c'est pareil pour tout les langages qui veulent s'interfacer avec d'autres.

    Citation Envoyé par 23JFK Voir le message
    l'algorithme de la racine carré-inverse rapide ne semble pas non plus pouvoir être tolérée par le compilateur (spéculatif, je n'ai pas essayé ; mais étant donné qu'il faille jouer avec les différents motifs mémoire fonction du types des nombres, en Rust ça doit être un enfer) ;
    C'est un peu le problème, beaucoup de gens ont un avis très tranché sur Rust, basé sur des spéculations fausses. Rust peut tout à fait faire des manipulations de bit basiques, c'est juste que les hacks comme les conversions douteuses ou les dépassement volontaires, sont remplacés par des fonctions explicites pour être sur qu'ils sont fait à dessein et que ce n'est pas des erreurs.

    Citation Envoyé par 23JFK Voir le message
    la compilation est affreusement lente quand il faut récupérer tous les paquets Cargo pour un gros projet.
    Ça c'est vrai, mais pour le coup on ne compile pas un gros projet de zéro si souvent que ça. Quand on recompile un projet sur lequel on travaille, ça va beaucoup plus vite. Ça reste plus lent que le C mais pas vraiment plus lent que des langages plus complexes comme le C++.

    Citation Envoyé par fdecode Voir le message
    Ceci-dit, le code de quake n'est pas très intéressant puisque le calcul exact tient en 3 instructions machine.
    Il me semble que la racine inverse rapide est encore pas mal utilisée dans la 3D, l’approximation étant relativement bonne et le gain sensible. Toutes les instructions machines ne se valent pas, 3 instructions complexes, peuvent prendre plus de cycles qu'une dizaine d'instructions plus simples.

  4. #4
    Communiqués de presse

    Femme Profil pro
    Traductrice Technique
    Inscrit en
    Juin 2023
    Messages
    2 589
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Traductrice Technique

    Informations forums :
    Inscription : Juin 2023
    Messages : 2 589
    Par défaut Durant la transition vers les langages à mémoire sécurisée, Google sécurise sa base de code C++ existante
    La transition de Google vers des langages à mémoire sécurisée comme Rust prendra plusieurs années : en attendant, Google applique également des principes de conception sécurisée à sa base de code C++ existante.

    Selon Google, la transition C++ vers Rust prendra plusieurs années. Pour garantir la sécurité de ces utilisateurs, Google décide d'appliquer également les principes de conception sécurisée à sa base de code C++ existante "chaque fois que cela est possible". Google a partagé comment elle a déployé ses principes ainsi que l'impact qu'elle a constaté dans son code C++.

    Dans le monde de la programmation, les langages C et C++ ont longtemps dominé le développement de firmware. Cependant, Google a récemment fait une déclaration audacieuse : remplacer ces langages par Rust serait non seulement possible, mais aussi relativement facile. Les ingénieurs d'Android avait notamment affirmé : "Vous verrez à quel point il est facile de renforcer la sécurité avec des remplacements Rust".

    Un responsable de Google avait même déclaré : "Les équipes Rust chez Google sont deux fois plus productives que celles qui se servent de C++". Ajoutant : "Nous avons noté une réduction de 50 % de l’effort nécessaire pour mettre sur pied un service en langage Rust ainsi que pour en assurer la maintenance". Si ces déclarations lancent un débat de la productivité entre Rust et C++, elles confirment que Google est convaincu de la transition C++ vers Rust.

    Cependant, Google a récemment annoncé que sa transition vers le Safe Coding et les langages à mémoire sécurisée "prendra plusieurs années". C'est pourquoi ils appliquent également les principes de conception sécurisée à la base de code C++ existante "dans la mesure du possible". Google précise qu'ils travaillent également à "faciliter l'interopérabilité avec les langages à mémoire sécurisée". La migration de C++ vers Safe Buffers réduit l'écart entre les langages, "ce qui simplifie l'interopérabilité et potentiellement même une éventuelle traduction automatisée".

    En effet, les attaquants exploitent régulièrement les vulnérabilités liées à la sécurité de la mémoire spatiale, qui se produisent lorsque le code accède à une allocation de mémoire en dehors des limites prévues, pour compromettre les systèmes et les données sensibles. Ces vulnérabilités représentent un risque majeur pour la sécurité des utilisateurs. Sur la base d'une analyse de Google, les vulnérabilités de sécurité spatiale représentent 40 % des exploits de sécurité de la mémoire au cours de la dernière décennie :

    Nom : 1.jpg
Affichages : 44705
Taille : 31,3 Ko

    Voici les déclarations de Google concernant sa base de code C++ :

    Google adopte une approche globale de la sécurité de la mémoire. L'un des éléments clés de notre stratégie est le codage sécurisé et l'utilisation de langages sans risque pour la mémoire dans le nouveau code. Cela entraîne une diminution exponentielle des vulnérabilités liées à la sécurité de la mémoire et améliore rapidement le niveau de sécurité global d'une base de code, comme le montre notre article sur l'évolution d'Android vers la sécurité de la mémoire.

    Toutefois, cette transition prendra plusieurs années, le temps d'adapter nos pratiques de développement et notre infrastructure. Pour garantir la sécurité de nos milliards d'utilisateurs, nous devons donc aller plus loin : nous appliquons également les principes de conception sécurisée à notre base de code C++ existante chaque fois que cela est possible.

    À cette fin, nous nous efforçons d'introduire la sécurité de la mémoire spatiale dans le plus grand nombre possible de nos bases de code C++, y compris Chrome et la base de code monolithique qui alimente nos services.

    Nous avons commencé par activer la libc++ renforcée, qui ajoute la vérification des limites aux structures de données C++ standard, éliminant ainsi une catégorie importante de bogues liés à la sécurité spatiale. Bien que le C++ ne devienne pas totalement sûr pour la mémoire, ces améliorations réduisent les risques, comme nous l'expliquons plus en détail dans notre point de vue sur la sécurité de la mémoire, ce qui permet d'obtenir des logiciels plus fiables et plus sûrs.
    Voici comment Google met en place la libc++ renforcée dans sa base de code :

    Structures de données dont les limites sont vérifiées : Le fondement de la sécurité spatiale

    L'une des principales stratégies de Google pour améliorer la sécurité spatiale en C++ consiste à mettre en place un contrôle des limites pour les structures de données courantes, en commençant par renforcer la bibliothèque standard C++ (libc++ de LLVM). La libc++ renforcée introduit un ensemble de contrôles de sécurité conçus pour détecter les vulnérabilités telles que les accès hors limites en production.

    Par exemple, la libc++ renforcée garantit que chaque accès à un élément d'un std::vector reste dans les limites qui lui ont été attribuées, en empêchant les tentatives de lecture ou d'écriture au-delà de la zone de mémoire valide. De même, la libc++ renforcée vérifie qu'un std::optional n'est pas vide avant d'autoriser l'accès, empêchant ainsi l'accès à une mémoire non initialisée.

    Cette approche reflète ce qui est déjà une pratique standard dans de nombreux langages de programmation modernes comme Java, Python, Go et Rust. Ils intègrent tous la vérification des limites par défaut, reconnaissant son rôle crucial dans la prévention des erreurs de mémoire. Le C++ a été une exception notable, mais des efforts comme la libc++ renforcée visent à combler cette lacune. Il convient également de noter qu'un renforcement similaire est disponible dans d'autres bibliothèques standard C++, telles que libstdc++.


    Rehausser le niveau de sécurité de base dans tous les domaines

    Après le déploiement de la libc++ renforcée dans Chrome en 2022, Google a décidé de la mettre par défaut dans ses systèmes de production côté serveur. Google affirme que cela a amélioré la sécurité de la mémoire spatiale dans tous ses services, y compris les composants essentiels aux performances de produits tels que Search, Gmail, Drive, YouTube et Maps. Bien qu'un très petit nombre de composants restent exclus, Google annonce travailler activement pour réduire ce nombre et à relever la barre de la sécurité dans tous les domaines, même dans les applications présentant un risque d'exploitation plus faible.

    Google commente notamment :

    L'impact de ces changements sur les performances a été étonnamment faible, bien que la base de code C++ moderne de Google fasse un usage intensif de libc++. Le renforcement de libc++ a eu un impact moyen de 0,30 % sur les performances de nos services (oui, seulement un tiers de pour cent).

    Cela est dû à la fois à la capacité du compilateur à éliminer les vérifications redondantes lors de l'optimisation et à la conception efficace de la libc++ renforcée. Bien qu'une poignée de chemins de code critiques en termes de performances requièrent encore l'utilisation ciblée d'accès explicitement non sécurisés, ces cas sont soigneusement examinés en termes de sécurité. Des techniques telles que les optimisations guidées par le profil ont encore amélioré les performances, mais même sans ces techniques avancées, la surcharge de la vérification des limites reste minime.

    Nous surveillons activement l'impact de ces vérifications sur les performances et nous nous efforçons de minimiser toute surcharge inutile. Par exemple, nous avons identifié et corrigé une vérification inutile, ce qui a conduit à une réduction de 15 % de la surcharge (de 0,35 % à 0,3 %), et nous avons reversé la correction au projet LLVM pour partager les avantages avec la communauté C++ au sens large.

    Si, dans la plupart des cas, la surcharge de libc++ renforcée est minime pour les applications individuelles, son déploiement à l'échelle de Google a nécessité un engagement substantiel en termes de ressources informatiques. Cet investissement souligne notre volonté d'améliorer la sûreté et la sécurité de nos produits.

    Des tests à la production

    L'activation de libc++ renforcée nécessite un déploiement en plusieurs étapes afin d'éviter de perturber accidentellement les utilisateurs ou de provoquer une panne. Voici les étapes que Google a suivi :

    1. Tests : Nous avons activé pour la première fois la libc++ renforcée dans nos tests il y a plus d'un an. Cela nous a permis d'identifier et de corriger des centaines de bogues non détectés auparavant dans notre code et nos tests.
    2. Adaptation : Nous avons laissé le runtime renforcé "travailler" dans nos environnements de test et de pré-production, ce qui a donné aux développeurs le temps de s'adapter et de résoudre les nouveaux problèmes qui sont apparus. Nous avons également procédé à des évaluations approfondies des performances, en veillant à ce que l'impact sur l'expérience de nos utilisateurs soit minimal.
    3. Déploiement progressif de la production : Nous avons ensuite déployé la version renforcée de libc++ en production sur plusieurs mois, en commençant par un petit ensemble de services et en l'étendant progressivement à l'ensemble de notre infrastructure. Nous avons surveillé de près le déploiement, en corrigeant rapidement tout plantage ou régression des performances.
    Google a également partagé l'impact de ce choix dans la base de code C++ :

    Prévention des exploits : La version renforcée de libc++ a perturbé un exercice interne de l'équipe rouge (test d'attaque) et en aurait empêché un autre qui s'est déroulé avant le renforcement. Selon Google, cela démontre son efficacité à contrecarrer les exploits. Les contrôles de sécurité ont permis de découvrir plus de 1 000 bogues et permettraient d'éviter 1 000 à 2 000 nouveaux bogues par an au rythme actuel de développement du C++.

    Amélioration de la fiabilité et de la correction : Le processus d'identification et de correction des bogues découverts par la libc++ renforcée a entraîné une réduction de 30 % du taux de défaillance de segmentation de base dans la production, ce qui indique une amélioration de la fiabilité et de la qualité du code. Au-delà des pannes, les vérifications auraient également permis de détecter des erreurs qui se seraient autrement manifestées sous la forme d'un comportement imprévisible ou d'une corruption de données.

    Nom : 2.jpg
Affichages : 8695
Taille : 23,0 Ko

    Débogage facilité : La libc++ renforcée aurait permis d'identifier et de corriger de nombreux bogues qui se cachaient dans la base de code C++ de Google depuis plus de dix ans. Les vérifications transforment de nombreuses corruptions de mémoire difficiles à diagnostiquer en erreurs immédiates et faciles à déboguer, ce qui permet aux développeurs d'économiser un temps et des efforts précieux.

    Combler le fossé avec des langages à mémoire sécurisée

    Si le renforcement de libc++ offre des avantages immédiats en ajoutant la vérification des limites aux structures de données standard, il ne s'agit que d'une pièce du puzzle en ce qui concerne la sécurité spatiale. Google continue d'étendre le contrôle des limites à d'autres bibliothèques et travaillent à la migration de son code vers Safe Buffers, qui exige que tous les accès soient contrôlés par les limites. Pour la sécurité spatiale, les structures de données renforcées, y compris leurs itérateurs, et les Safe Buffers sont nécessaires.

    Google commente ce choix en concluant :

    La libc++ renforcée est un moyen pratique et efficace d'améliorer la sécurité, la fiabilité et le débogage du code C++ avec un surcoût minimal. C'est pourquoi nous encourageons vivement les organisations qui utilisent le langage C++ à activer le mode renforcé de leur bibliothèque standard de manière universelle et par défaut.

    Chez Google, l'activation du mode renforcé de libc++ n'est que la première étape de notre voyage vers une base de code C++ spatialement sûre. En développant la vérification des limites, en migrant vers Safe Buffers et en collaborant activement avec l'ensemble de la communauté C++, nous souhaitons créer un avenir où la sécurité spatiale sera la norme.
    Conclusion

    Ces annonces peuvent questionner sur le projet de Google de migrer son code C++ vers Rust. Mais au-delà de l'amélioration de la sécurité du code C++, Google s'efforcerait également de faciliter l'interopérabilité avec les langages à sécurité mémoire. La migration du code C++ vers les Safe Buffers réduit l'écart entre les langages, ce qui simplifie l'interopérabilité et potentiellement même une éventuelle traduction automatisée.

    Dans ce sens, Google avait accordé une subvention d’un million de dollars à la Fondation Rust pour soutenir les efforts d’interopérabilité avec le langage C++. En toile de fond, le géant technologique cherche à faciliter la transition à Rust que de plus en plus d’observateurs jugent supérieur à C et à C++ pour la sécurisation des logiciels.

    Source : Google

    Et vous ?

    Pensez-vous que ce choix de Google de renforcée son code C++ est crédible ou pertinent ?
    Quel est votre avis sur le sujet ?

    Voir aussi :

    Google fait état d'une baisse des vulnérabilités liées à la sécurité de la mémoire sur Android à mesure que l'utilisation de Rust augmente. Elles seraient passées de 223 en 2019 à 85 en 2022

    Les détracteurs du Rust s'unissent autour de l'initiative Fil-C : Une implémentation sécurisée des langages C et C++, destinée à redonner au langage C sa grandeur

    Éjecté du top 3, le langage C recule dans l'indice TIOBE, Java et Rust gagnent en popularité, car les développeurs recherchent des langages sécurisés et faciles à apprendre
    Publication de communiqués de presse en informatique. Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  5. #5
    Communiqués de presse

    Femme Profil pro
    Traductrice Technique
    Inscrit en
    Juin 2023
    Messages
    2 589
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Traductrice Technique

    Informations forums :
    Inscription : Juin 2023
    Messages : 2 589
    Par défaut Google a adopté Rust dans Android pour des raisons de sécurité
    Google a adopté Rust pour des raisons de sécurité et a constaté une réduction de 1 000 fois des vulnérabilités liées à la sécurité de la mémoire, comparé à C et C++

    Google a adopté Rust pour des raisons de sécurité et a constaté une réduction de 1 000 fois des vulnérabilités liées à la sécurité de la mémoire, un taux de rollback 4 fois plus faible et une réduction de 25 % du temps consacré à la révision du code par rapport au C et au C++. Google a partagé comment une stratégie de sécurité mémoire axée sur la prévention des vulnérabilités ne se contente pas de corriger les problèmes, mais aide également à aller plus vite. Selon Google, les données de 2025 continuent de valider cette approche, les vulnérabilités liées à la sécurité mémoire passant pour la première fois sous la barre des 20 % du total des vulnérabilités.

    Dans le monde de la programmation, les langages C et C++ ont longtemps dominé le développement de firmware. Cependant, Google a fait une déclaration audacieuse : remplacer ces langages par Rust serait non seulement possible, mais aussi relativement facile. Les ingénieurs d'Android avait notamment affirmé : "Vous verrez à quel point il est facile de renforcer la sécurité avec des remplacements Rust".

    Rust est un langage de programmation polyvalent. Il est réputé pour l'importance qu'il accorde aux performances, à la sécurité des types, à la concurrence et à la sécurité de la mémoire. Rust est réputé pour garantir la sécurité de la mémoire (c'est-à-dire que toutes les références pointent vers une mémoire valide) sans collecteur de mémoire classique. À la place, les erreurs de sécurité de la mémoire et les conflits d'accès aux données sont évités grâce au « vérificateur d'emprunt », qui suit la durée de vie des objets référencés au moment de la compilation.

    Mais en novembre 2024, Google a affirmé que la transition C++ vers Rust prendra plusieurs années. Pour garantir la sécurité de ces utilisateurs, Google a décidé d'appliquer également les principes de conception sécurisée à sa base de code C++ existante "chaque fois que cela est possible". Google avait alors partagé comment elle a déployé ses principes ainsi que l'impact qu'elle a constaté dans son code C++.

    Récemment, un an après cette affirmation, Google partage comment une stratégie de sécurité mémoire axée sur la prévention des vulnérabilités ne se contente pas de corriger les problèmes, mais aide également à aller plus vite. Selon Google, les données de 2025 continuent de valider cette approche, les vulnérabilités liées à la sécurité mémoire passant pour la première fois sous la barre des 20 % du total des vulnérabilités, notamment dans Android.

    Android est un système d'exploitation basé sur une version modifiée du noyau Linux et d'autres logiciels open source, conçu principalement pour les appareils mobiles à écran tactile tels que les smartphones et les tablettes. Android a été développé par un consortium de développeurs connu sous le nom d'Open Handset Alliance, mais sa version la plus largement utilisée est principalement développée par Google.

    Nom : 1.jpg
Affichages : 79021
Taille : 43,6 Ko

    Google a adopté Rust pour sa sécurité et constate une réduction de 1 000 fois de la densité des vulnérabilités de sécurité de la mémoire par rapport au code C et C++ d'Android. Mais la plus grande surprise a été l'impact de Rust sur la livraison des logiciels. Avec un taux de rollback quatre fois plus faible et un temps de révision du code réduit de 25 %, la voie la plus sûre est désormais aussi la plus rapide.

    Construire de meilleurs logiciels, plus rapidement

    Le développement d'un système d'exploitation nécessite le contrôle de bas niveau et la prévisibilité des langages de programmation système tels que C, C++ et Rust. Si Java et Kotlin sont importants pour le développement de la plateforme Android, leur rôle est complémentaire à celui des langages système plutôt qu'interchangeable. Google a introduit Rust dans Android comme alternative directe à C et C++, offrant un niveau de contrôle similaire, mais sans la plupart de leurs risques. Ils ont concentré cette analyse sur le code nouveau et activement développé, car les données montrent que cette approche est efficace.

    Lorsqu'on examine le développement dans les langages système (à l'exclusion de Java et Kotlin), deux tendances se dégagent : une forte augmentation de l'utilisation de Rust et un déclin plus lent mais constant du nouveau C++.

    Nom : 2.jpg
Affichages : 24365
Taille : 33,6 Ko

    Le graphique montre que le volume de nouveau code Rust rivalise désormais avec celui de C++, ce qui permet de comparer de manière fiable les mesures du processus de développement logiciel. Pour mesurer cela, ils utilisent le cadre DORA, un programme de recherche mené depuis dix ans qui est devenu la norme industrielle pour évaluer les performances des équipes d'ingénierie logicielle. Les mesures DORA se concentrent sur :

    - Débit : la vitesse de livraison des modifications logicielles.
    - Stabilité : la qualité de ces modifications.

    Les comparaisons entre langages peuvent être difficiles. Ils ont utilisé plusieurs techniques pour garantir la fiabilité des comparaisons.

    - Changements de taille similaire : Rust et C++ ont une densité fonctionnelle similaire, bien que Rust soit légèrement plus dense. Cette différence favorise C++, mais la comparaison reste valable. Ils utilisent les définitions de taille de changement de Gerrit.

    - Pools de développeurs similaires : l'équipe de Google ne prend en compte que les changements effectués par les développeurs de la plateforme Android. La plupart sont des ingénieurs logiciels chez Google, et il existe un chevauchement considérable entre les pools, beaucoup contribuant aux deux.

    -Suivi des tendances au fil du temps : à mesure que l'adoption de Rust augmente, les indicateurs changent-ils de manière régulière, s'accélèrent-ils ou reviennent-ils à la moyenne ?

    Débit

    La révision du code est une partie du processus de développement qui prend beaucoup de temps et qui présente un temps de latence élevé. La refonte du code est l'une des principales sources de ces retards coûteux. Les données montrent que le code Rust nécessite moins de révisions. Cette tendance est constante depuis 2023. Les modifications Rust d'une taille similaire nécessitent environ 20 % de révisions en moins que leurs équivalents C++.

    Nom : 3.jpg
Affichages : 24299
Taille : 40,0 Ko

    De plus, les modifications Rust prennent actuellement environ 25 % moins de temps en révision de code que celles en C++. Selon Google, le changement significatif en faveur de Rust entre 2023 et 2024 est dû à l'expertise accrue de l'équipe Android en matière de Rust.

    Nom : 4.jpg
Affichages : 24190
Taille : 37,6 Ko

    Si la réduction des retouches et l'accélération de la révision du code offrent des gains de productivité modestes, les améliorations les plus significatives concernent la stabilité et la qualité des modifications.

    Stabilité

    Rust se distingue par des modifications stables et de haute qualité. DORA utilise le taux de rollback pour évaluer la stabilité des modifications. Le taux de rollback de Rust est très faible et continue de diminuer, même si son adoption dans Android dépasse celle du C++.

    Nom : 5.jpg
Affichages : 24153
Taille : 37,7 Ko

    Pour les modifications moyennes et importantes, le taux de rollback des modifications Rust dans Android est environ quatre fois inférieur à celui du C++. Ce faible taux de rollback n'est pas seulement un gage de stabilité, il améliore aussi activement le débit global du développement. Les retours en arrière perturbent fortement la productivité, créant des frictions organisationnelles et mobilisant des ressources bien au-delà du développeur qui a soumis la modification défectueuse. Les retours en arrière nécessitent des retouches et davantage de révisions de code, et peuvent également entraîner des remaniements, des analyses a posteriori et le blocage d'autres équipes. Les analyses a posteriori qui en résultent introduisent souvent de nouvelles mesures de sécurité qui alourdissent encore davantage la charge de développement.

    Dans une enquête auto-déclarée réalisée en 2022, les ingénieurs logiciels de Google ont indiqué que Rust était à la fois plus facile à réviser et plus susceptible d'être correct. Les données concrètes sur les taux de rollback et les délais de révision confirment ces impressions.

    Pour résumer

    Historiquement, les améliorations en matière de sécurité avaient souvent un coût. Une sécurité accrue impliquait davantage de processus, des performances plus lentes ou des fonctionnalités retardées, ce qui obligeait à faire des compromis entre la sécurité et d'autres objectifs liés au produit. Le passage à Rust est différent : Google améliore la sécurité, l'efficacité du développement et les indicateurs de stabilité des produits.


    Élargir le champ d'action

    La prise en charge de Rust étant désormais mature pour la création de services et de bibliothèques système Android, Google se concentre sur l'extension de ses avantages en matière de sécurité et de productivité à d'autres domaines.

    - Noyau : le noyau Linux 6.12 d'Android est notre premier noyau avec prise en charge de Rust et notre premier pilote Rust en production. D'autres projets passionnants sont en cours, tels que la collaboration continue de Google avec Arm et Collabora sur un pilote GPU en mode noyau basé sur Rust.

    - Micrologiciel : la combinaison de privilèges élevés, de contraintes de performances et d'une applicabilité limitée de nombreuses mesures de sécurité rend le micrologiciel à la fois très risqué et difficile à sécuriser. Le passage du micrologiciel à Rust peut apporter une amélioration majeure en matière de sécurité. Google déploit Rust dans le micrologiciel depuis des années et avons même publié des tutoriels, des formations et du code pour la communauté au sens large. Google déclare être particulièrement enthousiastes à l'idée de sa collaboration avec Arm sur Rusted Firmware-A.

    - Applications propriétaires : Rust garantit la sécurité de la mémoire dès le départ dans plusieurs applications Google critiques pour la sécurité, telles que :

    ° Présence à proximité : le protocole permettant de détecter de manière sécurisée et privée les appareils locaux via Bluetooth est implémenté dans Rust et fonctionne actuellement dans Google Play Services.

    ° MLS : le protocole pour la messagerie RCS sécurisée est implémenté dans Rust et sera inclus dans l'application Google Messages dans une prochaine version.

    ° Chromium : les analyseurs syntaxiques pour les formats PNG, JSON et les polices web ont été remplacés par des implémentations sécurisées en Rust, ce qui permet aux ingénieurs Chromium de traiter plus facilement les données provenant du web tout en respectant la règle de 2.

    Ces exemples soulignent le rôle de Rust dans la réduction des risques de sécurité, mais les langages sécurisés en mémoire ne sont qu'une partie d'une stratégie globale de sécurité en mémoire. Google continue à employer une approche de défense en profondeur, dont la valeur a été clairement démontrée lors d'un récent incident évité de justesse.



    Une première vulnérabilité de sécurité mémoire Rust... ou presque

    Google rapporte avoir évité de livrer sa toute première vulnérabilité de sécurité mémoire basée sur Rust : un débordement de tampon linéaire dans CrabbyAVIF. Pour garantir que le correctif soit traité en priorité et suivi tout au long du processus de publication, Google lui a attribué l'identifiant CVE-2025-48530.

    Voici les principales conclusions de l'analyse rétrospective de Google :

    Allocateur renforcé Scudo pour la victoire

    Une conclusion importante est que l'allocateur renforcé Scudo d'Android a rendu cette vulnérabilité inexploitable de manière déterministe grâce aux pages de garde entourant les allocations secondaires. Bien que Scudo soit l'allocateur par défaut d'Android, utilisé sur Google Pixel et de nombreux autres appareils, Google continue à travailler avec ses partenaires pour le rendre obligatoire. En attendant, Ils publieront des CVE d'une gravité suffisante pour les vulnérabilités qui pourraient être évitées par Scudo.

    En plus de protéger contre les débordements, l'utilisation de pages de garde par Scudo a permis d'identifier ce problème en transformant un débordement de mémoire silencieux en un crash bruyant. Cependant, ils ont découvert une lacune dans le système de signalement des crashes : il ne montrait pas clairement que le crash était le résultat d'un débordement, ce qui ralentissait le triage et la réponse. Ce problème a été corrigé et Google dispose désormais d'un signal clair lorsque des débordements se produisent dans les pages de garde Scudo.

    Révision et formation sur les codes non sécurisés

    Le développement de systèmes d'exploitation nécessite des codes non sécurisés, généralement en C, C++ ou Rust non sécurisé (par exemple, pour FFI et l'interaction avec le matériel), il n'est donc pas envisageable de simplement interdire les codes non sécurisés. Lorsque les développeurs doivent utiliser des codes non sécurisés, ils doivent comprendre comment le faire de manière sûre et responsable.

    À cette fin, ils ajoutent une nouvelle formation approfondie sur le code non sécurisé à notre formation complète sur Rust. Ce nouveau module, actuellement en cours de développement, vise à enseigner aux développeurs comment raisonner sur le code Rust non sécurisé, la sécurité et les comportements indéfinis, ainsi que les meilleures pratiques telles que les commentaires de sécurité et l'encapsulation du code non sécurisé dans des abstractions sécurisées.

    Une meilleure compréhension du code Rust non sécurisé permettra d'obtenir un code de meilleure qualité et plus sécurisé dans l'écosystème des logiciels open source et au sein d'Android.


    Comparaison des densités de vulnérabilité

    Cette quasi-catastrophe soulève inévitablement la question suivante : « Si Rust peut présenter des vulnérabilités en matière de sécurité mémoire, alors à quoi bon ? »

    L'intérêt réside dans le fait que la densité est plus faible. Tellement faible qu'elle représente un changement majeur en matière de sécurité. Sur la base de son accident évité de justesse, Google a fait une estimation prudente. Avec environ 5 millions de lignes de code Rust dans la plateforme Android et une vulnérabilité potentielle de sécurité mémoire détectée (et corrigée avant la sortie), ils estiment la densité de vulnérabilité de Rust à 0,2 vulnérabilités par million de lignes (MLOC).

    Les données historiques de Google pour C et C++ montrent une densité plus proche de 1 000 vulnérabilités de sécurité mémoire par MLOC. Le code Rust affiche actuellement une densité inférieure d'un ordre de grandeur : une réduction de plus de 1 000 fois.

    La sécurité mémoire fait à juste titre l'objet d'une attention particulière, car cette catégorie de vulnérabilités est particulièrement puissante et (historiquement) très répandue. Une densité de vulnérabilité élevée compromet une conception de sécurité par ailleurs solide, car ces failles peuvent être enchaînées pour contourner les défenses, y compris celles qui ciblent spécifiquement les exploits de sécurité mémoire. Réduire considérablement la densité de vulnérabilité ne se limite pas à réduire le nombre de bogues ; cela augmente considérablement l'efficacité de l'ensemble de notre architecture de sécurité.

    La principale préoccupation en matière de sécurité concernant Rust concerne généralement les quelque 4 % de code écrits dans des blocs unsafe{}. Ce sous-ensemble de Rust a alimenté d'importantes spéculations, des idées fausses et même des théories selon lesquelles Rust non sécurisé pourrait être plus bogué que C. Les preuves empiriques montrent que cela est tout à fait faux.

    Les données indiquent que même une hypothèse plus conservatrice, selon laquelle une ligne de Rust non sécurisé est aussi susceptible de contenir un bogue qu'une ligne de C ou de C++, surestime considérablement le risque lié à Rust non sécurisé. Plusieurs facteurs contribuent probablement à cette situation :

    - unsafe{} ne désactive pas réellement tous les contrôles de sécurité de Rust, ni même la plupart d'entre eux (une idée fausse courante).

    - La pratique de l'encapsulation permet un raisonnement local sur les invariants de sécurité.

    - L'examen supplémentaire dont font l'objet les blocs unsafe{}.

    Google conclut son rapport : "Historiquement, nous devions accepter un compromis : atténuer les risques liés aux défauts de sécurité de la mémoire nécessitait des investissements substantiels dans l'analyse statique, les mesures d'atténuation à l'exécution, le sandboxing et les correctifs réactifs. Cette approche visait à aller vite, puis à réparer les dégâts par la suite. Ces protections multicouches étaient essentielles, mais elles avaient un coût élevé en termes de performances et de productivité des développeurs, tout en offrant une assurance insuffisante.

    Si les langages C et C++ continueront d'exister et que les mécanismes de sécurité logiciels et matériels resteront essentiels pour une défense multicouche, la transition vers Rust constitue une approche différente où la voie la plus sûre s'avère également plus efficace. Au lieu d'avancer rapidement puis de réparer les dégâts plus tard, nous pouvons avancer plus vite tout en corrigeant les problèmes. Et qui sait, à mesure que notre code deviendra de plus en plus sûr, nous pourrons peut-être commencer à récupérer encore plus de performances et de productivité que nous avons sacrifiées au profit de la sécurité, tout en améliorant cette dernière.
    "

    Ce rapport rappelle que depuis 2024, le géant technologique cherche à faciliter la transition à Rust que de plus en plus d’observateurs jugent supérieur à C et à C++ pour la sécurisation des logiciels. En février 2024, Google a notamment accordé une subvention d’un million de dollars à la Fondation Rust pour soutenir les efforts d’interopérabilité avec le langage C++. En mars 2024, un responsable de l'entreprise a également déclaré : « Les équipes Rust chez Google sont deux fois plus productives que celles qui se servent de C++ ».

    Source : Google

    Et vous ?

    Pensez-vous que ce rapport est crédible ou pertinent ?
    Quel est votre avis sur le sujet ?

    Voir aussi :

    Google annonce la prise en charge du langage Rust pour le développement d'Android, l'intérêt est de résoudre les problèmes de sécurité de la mémoire

    Rust, réalité et fiction : 5 leçons tirées de l'expérience Rust de Google en 2022, selon l'enquête de Lars Bergstrom et Kathy Brennan

    La communauté Rust reconnaît que le langage n'est pas sécurisé au travers d'une récente annonce, de lancement d'une initiative de vérification de 7500 fonctions non sûres de la bibliothèque standard Rust
    Publication de communiqués de presse en informatique. Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 155
    Par défaut
    Quand on programme comme des cochons et que l'on utilise pas de macro de test désactivable à la compilation, ni même d'outil de surveillance de la mémoire ce normal, c'est la différence avec des vrais professionnels qui sont plus lent, mais plus sûr.

  7. #7
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 731
    Par défaut
    Sauf que justement l'article parle d'une base de code C++ et C qui est très suivie niveau sécurité avec de bonne pratiques mises en place pour réduire les risques, avec succès d'ailleurs, j'ai lu dans un autre article que le nombre de vulnérabilités dans le code C++ de Google avait légèrement diminué.

    Cependant les tests ne vérifient que ce que l'on a pensé a vérifier et les outils d'analyse dynamique, comme leur nom l'indique ne détectent que les cas qui se présentent a eux, là où Rust garantit que le code ne présente pas d'erreur mémoire tant que l'on abuse pas des blocs unsafe. C et C++ resteront intrinsèquement beaucoup plus sujet aux vulnérabilités mémoire que Rust qui a été construit de base pour mieux prendre en compte cette problématique.
    En C++ la sécurité mémoire reste quelque chose dont il faut se soucier et même un bon programmeur n'est pas à l'abri de faire une erreur, alors que c'est le défaut en Rust.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/04/2024, 12h26
  2. Réponses: 0
    Dernier message: 22/01/2024, 23h24
  3. Réponses: 14
    Dernier message: 19/03/2022, 02h00
  4. Réponses: 5
    Dernier message: 22/07/2020, 21h13
  5. Impossible d'hériter d'une classe pour des raisons de sécurité
    Par padodanle51 dans le forum Silverlight
    Réponses: 7
    Dernier message: 15/06/2010, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo