Nous faisons tout pour garantir la sécurité de la plate-forme Android pour tous les utilisateurs sur tous les appareils. Des mises à jour de sécurité sont publiées chaque mois avec des correctifs pour les vulnérabilités trouvées par les membres du programme Vulnerability Rewards (VRP) . Cependant, nous essayons également de protéger la plate-forme contre d'autres vulnérabilités potentielles, par exemple en utilisant un compilateur et en améliorant l'environnement de test. L'écosystème Android comprend des appareils avec une grande variété de capacités, de sorte que toutes les décisions doivent être équilibrées et doivent prendre en compte les données disponibles.
Cet article explique comment nous sélectionnons les contrôles de sécurité pour des circonstances spécifiques et comment ils sont mis en œuvre.
La sécurisation d'Android adopte une approche holistique. Pour rendre plus difficile l'exploitation des vulnérabilités potentielles, nous prenons des décisions basées sur les données en utilisant plusieurs principes et techniques. Lorsqu'il s'agit de renforcer la plate-forme, les questions suivantes doivent être répondues:
- De quelles données disposons-nous et comment peuvent-elles nous aider à prendre des décisions?
- Quels outils de prévention des attaques sont disponibles? Comment peuvent-ils être améliorés? Dans quelles situations doivent-ils être appliqués?
- Quels problèmes peuvent survenir lors de l'utilisation de certains outils de sécurité? Quelles dispositions possibles faut-il prendre en compte?
Les principes que nous utilisons dans nos choix de sécurité reflètent notre approche globale de la protection des utilisateurs de la plate-forme Android.
Prenez des décisions de sécurité basées sur les données
Pour savoir pour quels composants de plate-forme certaines solutions seront efficaces, nous nous tournons vers diverses sources. Le programme Android Vulnerability Rewards (VRP) est peut-être le plus instructif de tous. Nos ingénieurs en sécurité analysent toutes les vulnérabilités découvertes par les participants au programme, en déterminant leur cause première et leur niveau de gravité (sur la base de ces recommandations ). De plus, il existe des rapports de bogues internes et externes. Ils aident à identifier les composants vulnérables ainsi que les extraits de code qui provoquent souvent des échecs. En sachant à quoi ressemblent ces fragments et en comprenant la gravité et la fréquence des erreurs qui en résultent, nous pouvons prendre des décisions éclairées sur les mesures de sécurité qui seront les plus efficaces.
Vulnérabilités de gravité élevée et critique corrigées dans les bulletins de sécurité Android 2019.
Cependant, ne vous fiez pas uniquement aux rapports de vulnérabilité. Ils donnent d'abord une image déformée, car les professionnels de la sécurité prêtent souvent attention aux zones «chaudes», c'est-à-dire aux zones où des vulnérabilités ont déjà été trouvées (par exemple, Stagefright ). Ou, ils peuvent rechercher des vulnérabilités là où elles sont plus faciles à détecter à l'aide de solutions prêtes à l'emploi. Par exemple, si un outil d'analyse de sécurité est publié sur la plateforme GitHub, de nombreux professionnels l'utiliseront.
Nous essayons de répartir nos efforts pour améliorer la sécurité de manière égale. Nos équipes sont attentives aux composants les moins explorés et les plus complexes de la plateforme. De plus, des tests de fuzzing automatisés sont effectués en continu sur les machines virtuelles et les appareils Android physiques, ce qui vous permet de trouver et de corriger les bogues dès les premiers stades de développement. Lors du choix des outils à utiliser, nous analysons également les causes profondes et la gravité des problèmes que nous rencontrons.
Dans le cadre du programme Android VRP, nous encourageons les développeurs à ajouter des chaînes de vulnérabilité complètesvous permettant de suivre l'ensemble du processus d'attaque du début à la fin. En règle générale, les cybercriminels exploitent plusieurs vulnérabilités à la fois, et dans de telles chaînes, ces «bundles» sont clairement visibles, ils sont donc très informatifs. Nos ingénieurs en sécurité analysent à la fois des chaînes entières et leurs liens individuels et tentent de découvrir de nouvelles stratégies d'attaque en leur sein. Cette analyse aide à déterminer des stratégies pour empêcher l'exploitation séquentielle des vulnérabilités (par exemple, l'allocation d'espace d'adressage aléatoire et les méthodes d' intégrité du flux de contrôle ), et comprend également si l'attaque peut être atténuée si le processus obtient un accès indésirable aux ressources.
Évidemment, certaines vulnérabilités peuvent être incluses dans plusieurs chaînes à la fois et sont situées dans un ordre différent. Par conséquent, il est préférable d'utiliser la «défense en profondeur», réduisant l'efficacité des vulnérabilités individuelles et allongeant les chaînes d'exploits. Dans ce cas, il sera plus difficile pour un attaquant de construire une chaîne efficace et de mener une attaque.
Pour comprendre les menaces de sécurité actuelles et prédire les tendances futures, vous devez constamment garder le doigt sur le pouls de la communauté de la sécurité, en particulier:
- travailler en étroite collaboration avec des experts en sécurité tiers;
- lire des publications thématiques et assister à des conférences;
- étudier les technologies utilisées par les logiciels malveillants;
- suivre les derniers développements dans le domaine de la sécurité;
- participer à des projets parallèles comme KSPP , syzbot, LLVM, Rust, etc.
En conséquence, vous aurez une meilleure compréhension de votre stratégie de sécurité globale, de l'efficacité des solutions existantes et des opportunités d'amélioration.
Pourquoi une protection plus forte est nécessaire
Renforcer la protection et prévenir les attaques
L'analyse des données permet d'identifier les domaines dans lesquels une atténuation efficace des attaques peut traiter des classes entières de vulnérabilités. Par exemple, si certains composants de la plate-forme développent de nombreuses vulnérabilités en raison d'erreurs de dépassement d'entiers, vous devez utiliser un désinfectant de comportement non spécifié ( UBSan ), tel que Integer Overflow Sanitizer. Si les vulnérabilités d'accès à la mémoire sont courantes, vous devez utiliser des allocateurs de mémoire renforcés ( activés par défaut dans Android 11 ) et des outils de prévention des attaques (tels que Control Flow Integrity ) qui résistent au débordement de mémoire et aux vulnérabilités Use-After. Gratuit.
Avant de parler d'utilisation des données, nous proposons une classification des outils pour renforcer la sécurité de la plateforme. Voici les principaux segments dans lesquels tous ces outils peuvent être décomposés (bien que certains outils et méthodes puissent s'appliquer à plusieurs d'entre eux à la fois):
- Exploiter les outils d'élimination
- Les outils de correction d'exécution déterministes détectent les comportements indéfinis ou indésirables et interrompent l'exécution du programme. Cela élimine la corruption des données dans la mémoire, tout en maintenant la probabilité de pannes mineures seulement. Souvent, ces outils peuvent être appliqués ponctuellement, et ils seront toujours efficaces, car ils sont conçus pour des erreurs individuelles. Exemples: désinfectant de débordement d'entier et BoundsSanitizer .
- . . . . , . : , Control Flow Integrity (CFI), , .
- , . , . : .
-
- . , . , .
En fonction du problème spécifique, nous décidons lesquels des outils décrits doivent être utilisés et comment. Par exemple, chacun d'eux convient si nous avons affaire à un grand processus impliquant le traitement de données non fiables et une analyse complexe. Les plates-formes multimédias ont été une excellente démonstration de la façon dont la décomposition de l'architecture peut être utilisée pour atténuer plus efficacement les exploits et empêcher l'élévation des privilèges.
Décomposition de l'architecture et isolement des cadres médiatiques dans un contexte historique
Les cibles des attaques à distance (NFC, Bluetooth, Wi-Fi et contenus multimédias) sont traditionnellement associées aux vulnérabilités les plus graves, le renforcement de leur sécurité doit donc être une priorité. En règle générale, ces vulnérabilités sont causées par les causes profondes les plus courantes trouvées dans le programme VRP, et nous avons récemment ajouté des désinfectants pour toutes.
Les outils de prévention des attaques sont utiles pour les bibliothèques et les processus qui définissent ou résident dans des limites de sécurité (par exemple, libbinder , ainsi que les bibliothèques standard libui , libcore et libcutils), car ils ne sont pas liés à des processus spécifiques. Cependant, ces bibliothèques sont responsables du fonctionnement efficace et stable des systèmes, donc avant d'utiliser une méthode particulière, vous avez besoin d'une garantie sérieuse qu'elle améliorera la sécurité.
Enfin, il est important de protéger le noyau, étant donné son haut niveau de privilèges. Toutes les bases de code ont des caractéristiques et des fonctionnalités différentes, de sorte que la probabilité de vulnérabilités est différente. Les principaux critères ici sont la stabilité et les performances. N'utilisez que des mesures de sécurité efficaces qui n'interféreront pas avec le travail des utilisateurs. Par conséquent, avant de choisir la stratégie optimale pour durcir la protection, nous analysons attentivement toutes les données disponibles liées au noyau.
L'approche basée sur les données a donné des résultats tangibles. Après la découverte de la vulnérabilité Stagefright en 2015, nous avons commencé à recevoir des rapports sur un grand nombre d'autres vulnérabilités critiques dans la plate-forme multimédia Android. Pour compliquer les choses, bon nombre d'entre eux étaient accessibles à distance. Nous avons effectué une décomposition massive du système Android Nougat et accéléré la correction des vulnérabilités dans les composants multimédias . Grâce à ces changements, en 2020, aucun rapport de vulnérabilités critiques dans les plates-formes multimédias accessibles via Internet n'a été signalé.
Comment la décision de déploiement est prise
Naturellement, il est logique de se concentrer sur les outils de prévention des attaques qui fonctionnent le mieux. Pour les identifier, nous examinons comment chaque outil affecte les performances, la quantité de travail nécessaire pour le déployer et le prendre en charge, et s'il affectera négativement la stabilité du système.
Performance
Lorsque vous choisissez un outil de prévention des attaques, vous devez comprendre comment il affecte les performances de l'appareil. Si certains composants ou le système dans son ensemble ne peuvent pas supporter la charge, la durée de vie de la batterie et les performances globales peuvent être réduites. Cela est particulièrement vrai pour les appareils d'entrée de gamme qui nécessitent également une sécurité accrue. Ainsi, nous privilégions les solutions les plus efficaces qui n'affectent pas les performances des appareils.
Lors de l'évaluation des performances, nous prêtons attention non seulement au temps du processeur, mais également à l'utilisation de la mémoire, à la longueur du code, à la durée de vie de la batterie et aux cas de gel de l'interface.... Pour s'assurer qu'un outil fonctionne bien dans tout l'écosystème Android, il est particulièrement important de tester les paramètres répertoriés sur les appareils d'entrée de gamme.
Il est très important pour quel composant les mesures de protection sont appliquées. Par exemple, la liaison est le plus couramment utilisée pour la communication interprocessus. Par conséquent, toute charge excessive affectera instantanément le fonctionnement de l'appareil. Dans le cas d'un lecteur multimédia qui ne traite que les images à la vitesse d'origine, la situation est différente. Si la vitesse vidéo est beaucoup plus élevée que la vitesse d'affichage, la charge supplémentaire ne sera pas si critique.
Nous utilisons des benchmarks pour déterminer l'impact sur les performances d'une solution particulière. S'il n'y a pas de résultats de référence pour un composant, vous devez les obtenir, par exemple, en appelant le codec concerné pour décoder le fichier multimédia. Si les tests indiquent une charge inacceptable, il existe plusieurs options:
- Désactivez de manière sélective la prévention des attaques pour les fonctionnalités qui ont un impact significatif sur les performances. En règle générale, seules quelques fonctions consomment des ressources au moment de l'exécution. En ne leur appliquant pas d'atténuation des attaques, vous pouvez maintenir les performances et maximiser votre impact sur la sécurité. Voici un exemple de cette approche pour l'un des codecs multimédias. Pour éliminer les risques, les fonctions mentionnées doivent être vérifiées au préalable pour les erreurs.
- Optimiser l'utilisation de la prévention des attaques. Cela nécessite souvent des modifications du compilateur. Par exemple, notre équipe est passée à l'utilisation de Integer Overflow Sanitizer et Bounds Sanitizer.
- Certaines options d'atténuation des attaques, telles que la résilience de tas intégrée de Scudo, peuvent être ajustées pour améliorer les performances.
Bon nombre de ces améliorations nécessitent des modifications de la conception de LLVM. En conséquence, non seulement la plate-forme Android l'emporte, mais également d'autres membres de la communauté LLVM.
Déploiement et support
Lorsque vous choisissez un outil de prévention des attaques, vous devez tenir compte non seulement des considérations de sécurité et de performances, mais également des coûts de déploiement et de support à long terme.
Impact des mesures de sécurité sur le fonctionnement stable du système
Il est important de comprendre s'il est possible de déclencher à tort un outil de prévention d'attaque particulier. Par exemple, si le désinfectant Bounds génère une erreur, il s'agit certainement d'un accès refusé (même s'il n'a peut-être pas été utilisé). Dans le cas du désinfectant Integer Overflow, des faux positifs sont possibles, car un dépassement d'entier est souvent un processus absolument normal et inoffensif.
Par conséquent, il est important de prendre en compte l'impact des outils de prévention des attaques sur la stabilité du système. Peu importe qu'il y ait eu un faux positif ou une réelle menace pour la sécurité - dans tous les cas, l'utilisateur subit des inconvénients. Là encore, nous notons qu'il est nécessaire de bien comprendre pour quels composants telle ou telle mesure de sécurité doit être utilisée. Parce que les pannes de certains composants ont un impact plus important sur la stabilité du système. Si Attack Prevention plante le codec multimédia, la lecture de la vidéo s'arrêtera simplement. Cependant, en cas d'erreur dans le processus
netd
lors de l'installation de la mise à jour, l'appareil peut ne plus s'allumer. Même si les faux positifs ne posent pas de problème pour certains outils anti-attaques (par exemple, comme c'est le cas avec le désinfectant Bounds), nous effectuons toujours des tests approfondis pour nous assurer que l'appareil est stable. Par exemple, les erreurs de biais par un peuvent ne pas se bloquer normalement et le désinfectant Bounds interrompt le processus et perturbe la stabilité du système.
Il est également important de comprendre s'il est possible d'identifier à l'avance tous les composants que l'outil de prévention des attaques peut désactiver. Par exemple, dans le cas du désinfectant Integer Overflow, il est très difficile de prédire les risques sans effectuer de tests approfondis, car il est difficile de déterminer quels débordements d'entiers sont intentionnels (autorisés) et lesquels peuvent entraîner des vulnérabilités.
Soutien
Il faut considérer non seulement les problèmes éventuels dans le déploiement des outils de prévention des attaques, mais aussi les spécificités de leur accompagnement sur le long terme. Nous estimons le temps nécessaire pour intégrer l'outil aux systèmes existants, l'activer et le déboguer, le déployer sur les appareils, puis le service après le lancement. La technologie SELinux en est un bon exemple. Il faut beaucoup de temps et d'efforts pour créer un ensemble de règles. Et cet ensemble doit être maintenu pendant des années, indépendamment des changements de code, ainsi que de l'ajout ou de la suppression de fonctionnalités individuelles.
Nous nous efforçons de garantir que les outils de prévention des attaques ont un impact minimal sur la stabilité et que les développeurs disposent de toutes les informations dont ils ont besoin. Pour atteindre ces objectifs, nous améliorons nos algorithmes actuels afin de réduire le nombre de faux positifs, et nous publions la documentation sur source.android.com . En facilitant le débogage en cas de panne, vous pouvez réduire la charge de maintenance des développeurs. Par exemple, pour faciliter la détection des bogues dans le désinfectant UBSan, nous avons ajouté par défaut la prise en charge minimale de l'exécution UBSan au système de construction Android . Initialement, le temps d'exécution minimum a été ajouté d'autres développeurs Google spécifiquement à cet effet. Si le programme se bloque en raison du désinfectant Integer Overflow, l'extrait de code suivant est ajouté au message d'erreur SIGABRT:
Abort message: 'ubsan: sub-overflow'
Après avoir vu ce message, les développeurs comprendront qu'il est nécessaire d'activer le mode de diagnostic pour imprimer des informations sur l'échec:
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:2188:32: runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'size_t' (aka 'unsigned long')
Parallèlement, SELinux dispose d'un outil audit2allow qui permet de proposer des règles permettant certaines opérations bloquées:
adb logcat -d | audit2allow -p policy
#============= rmt ==============
allow rmt kmem_device:chr_file { read write };
Bien qu'audit2allow ne suggère pas toujours les bonnes options, il est d'une grande aide pour les développeurs novices dans SELinux.
Conclusion
Avec chaque version d'Android, nous vous apportons de nouveaux outils qui protègent l'ensemble de l'écosystème, garantissant les performances et la stabilité dont vous avez besoin. L'analyse des données joue un rôle important à cet égard. Nous espérons que cet article vous a aidé à mieux comprendre les défis de la mise en œuvre de nouveaux outils de prévention des attaques et comment nous les traitons.
Merci à nos collègues et auteurs: Kevin Deus, Joel Galenson, Billy Lau, Ivan Lozano - experts en sécurité et confidentialité Android. Un merci spécial à Zviad Kardava et Jeff Van Der Stup pour leur aide dans la préparation de cet article.