Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

ShadowCallStack

ShadowCallStack (SCS) est un mode d' instrumentation LLVM qui protège contre les écrasements d'adresse de retour (comme les débordements de tampon de pile) en enregistrant l'adresse de retour d'une fonction dans un ShadowCallStack alloué séparément dans le prologue de fonction des fonctions non-feuilles et en chargeant l'adresse de retour de ShadowCallStack dans la fonction épilogue. L'adresse de retour est également stockée sur la pile normale pour la compatibilité avec les dérouleurs, mais elle est autrement inutilisée. Cela garantit que les attaques qui modifient l'adresse de retour sur la pile régulière n'ont aucun effet sur le flux de contrôle du programme.

Sur aarch64, l'instrumentation utilise le registre x18 pour référencer le ShadowCallStack, ce qui signifie que les références au ShadowCallStack n'ont pas à être stockées en mémoire. Cela permet d'implémenter un runtime qui évite d'exposer l'adresse du ShadowCallStack à des attaquants capables de lire de la mémoire arbitraire.

la mise en oeuvre

Android prend en charge ShadowCallStack pour le noyau et l'espace utilisateur.

Activation de SCS pour le noyau

Pour activer ShadowCallStack pour le noyau, ajoutez la ligne suivante au fichier de configuration du noyau:

CONFIG_SHADOW_CALL_STACK=y

Activation de SCS dans l'espace utilisateur

Pour activer ShadowCallStack dans les composants de l'espace utilisateur, ajoutez les lignes suivantes au fichier de plan directeur d'un composant:

sanitize: {
  scs: true
}

SCS suppose que le registre x18 est réservé pour stocker l'adresse du ShadowCallStack et n'est pas utilisé à d'autres fins. Bien que toutes les bibliothèques système soient compilées pour réserver le registre x18 , cela est potentiellement problématique si SCS est activé pour les composants de l'espace utilisateur qui interagissent avec le code hérité en cours de processus (par exemple, les bibliothèques qui pourraient être chargées par des applications tierces), ce qui peut résorber le registre x18 . En tant que tel, nous vous recommandons d'activer SCS uniquement dans les composants autonomes qui ne seront pas chargés dans les binaires hérités.

Validation

Il n'y a pas de test CTS spécifiquement pour SCS. Assurez-vous plutôt que les tests CTS réussissent avec et sans SCS activé pour vérifier que SCS n'affecte pas le périphérique.