Blackbird

From The French Apple Wiki
Jump to navigationJump to search

Exploit Blackbird

[edit | edit source]
Vulnérabilité dans SEPROM
Vulnérable sur A8, A9, A10, série T2, et potentiellement S3
Divulgué 6 août 2020 [1]
Découvert par windknown et littlelailo (indépendamment) [2]

L'exploit Blackbird est une vulnérabilité du SEPROM (Secure Enclave Processor Read-Only Memory) permettant l'exécution de code non signé sur les SEP (Secure Enclave Processor) des appareils équipés de puces A8, A9, A10, ou T2, ainsi que leurs variantes, avec une exploitabilité possible mais non confirmée sur la puce S3. Cette vulnérabilité nécessite une exécution de code préalable sur un autre cœur avant que la zone TZ0 ne soit verrouillée, par exemple via un exploit du BootROM de l'AP (Application Processor) comme checkm8 ou un exploit d'iBoot.

La vulnérabilité

[edit | edit source]

La vulnérabilité réside dans une erreur de lecture des registres TZ0/TZ1 (contrôlés par l'attaquant). Le SEP lit ces registres comme un entier non signé de 32 bits, puis décale immédiatement l'adresse de 12 bits vers la gauche [note 1], rendant les bits au-delà du 20e bit invisibles pour le SEP. En revanche, le AMCC (Apple Memory Cache Controller) semble convertir le registre 32 bits en une valeur 64 bits avant de décaler les bits, ce qui lui permet de voir les bits 21 à 32, invisibles pour le SEP. Cela pourrait avoir été une tentative de correction de l'exploit hardbird, en supprimant la possibilité pour les attaquants d'écrire dans les sélecteurs de canaux [3].

Comme l'AMCC protège et rend inaccessible la plage d'adresses spécifiée par les registres TZ0 et TZ1, le SEP lit et écrit à une adresse différente de celle vue par l'AMCC, permettant ainsi à un attaquant de lire et d'écrire dans les adresses mémoire TZ0 et TZ1.

Les registres TZ0/TZ1 mentionnés concernent les registres de base et de fin, dont les adresses (pour les puces vulnérables à Blackbird) et les registres de verrouillage sont documentés dans le tableau suivant :

Type Base Fin Verrouillage
TZ0 0x200000480 0x200000484 0x200000490
TZ1 0x200000488 0x20000048C 0x200000494

Exploitation

[edit | edit source]

Puces A8(X) et A9(X)

[edit | edit source]

Sur les puces A8(X) et A9(X), la dernière page de TZ0 est non chiffrée, rendant ces SoCs vulnérables à une attaque de key pinning. Cette région de mémoire non chiffrée contient des données de « randomisation » à partir desquelles les clés de chiffrement TZ0 sont dérivées. Avec un accès en lecture/écriture à TZ0, un attaquant peut écraser ces données pour que les clés soient toujours dérivées de la même manière à chaque démarrage. Ainsi, l'exploit Blackbird ne nécessite d'être utilisé qu'une seule fois avec une image de firmware SEPOS valide pour capturer des blocs TZ0 valides. Ensuite, l'attaquant peut simplement rejouer ces blocs lors des démarrages suivants, même si l'image SEPOS utilisée diffère.

De plus, le SEPROM stocke les tables de pages dans TZ0. Ces pages sont chiffrées, mais le key pinning permet de réutiliser les blocs de texte chiffré capturés à travers les démarrages, offrant la possibilité de réécrire la table de pages et ainsi de contrôler la cartographie mémoire du SEP.

Puces A10(X) et T2

[edit | edit source]

Sur les puces A10(X) et T2, seule une attaque de replay est possible, car la randomisation utilisée pour dériver les clés de chiffrement TZ0 est stockée dans la SRAM, traitée comme une mémoire normale mise en cache [4]. Cela rend l'attaque de key pinning impossible. Par conséquent, ces puces nécessitent un firmware SEP valide à chaque redémarrage pour être exploitées.

Puces A7

[edit | edit source]

Les puces A7 ne sont pas vulnérables à Blackbird, car leur SEPROM utilise des valeurs 64 bits pour les adresses. Cependant, elles sont vulnérables à l'exploit hardbird, qui exploite les bits supérieurs ignorés par les appareils compatibles avec Blackbird, permettant de contrôler les sélecteurs de canaux pour obtenir un accès lecture/écriture à TZ0.

Puces A8

[edit | edit source]

Sur les puces A8, Blackbird n'est même pas nécessaire pour accéder à la mémoire TZ0, car il existe une autre vulnérabilité : le SEPROM ne vérifie pas si les registres TrustZone sont verrouillés avant le démarrage. En désactivant simplement le verrouillage dans iBoot, l'AMCC ne protège pas les régions TrustZone, permettant un accès normal depuis l'AP.

Puces A11 et ultérieures

[edit | edit source]

L'exploit Blackbird ne permet pas de lire/écrire dans la mémoire TZ0 sur les puces A11, et même avec un accès lecture/écriture à TZ0, l'arbre d'intégrité mémoire empêche l'exploitation. Les puces A12 et ultérieures sont supposées ne plus ignorer les bits, rendant la vulnérabilité inexploitable.

Puces S1P, S2 et T1

[edit | edit source]

Les puces S1P, S2 et T1 ne sont pas vulnérables à cette vulnérabilité, car les cœurs AP et SEP sont en 32 bits, ce qui empêche d'écrire dans les bits 63:20 du registre TZ0 nécessaires pour déclencher le bug. Les bits 31:20 sont techniquement utilisables mais en lecture seule.

Exploits publics

[edit | edit source]

L'exploit checkra1n contient la seule implémentation open-source de Blackbird (disponible dans le code source de pongoOS), mais elle ne prend en charge que les puces A10 et T2. Actuellement, aucun exploit public n'est disponible pour les puces A7, A8(X), A9(X) ou S3.

[Note 1] : Ce décalage est effectué pour maintenir une granularité de 4 KiB pour les régions TZ0 et TZ1.

Conclusion

[edit | edit source]

L'exploit Blackbird est une vulnérabilité critique dans le SEPROM des puces A8, A9, A10 et T2, permettant l'exécution de code non signé sur le SEP via un accès lecture/écriture à TZ0. En exploitant une mauvaise gestion des registres TZ0/TZ1, il permet des attaques comme le key pinning (A8/A9) ou le replay (A10/T2). Cependant, son utilisation nécessite un accès préalable via un exploit comme checkm8 ou un exploit iBoot. Les puces plus récentes (A12 et au-delà) et certaines puces comme S1P, S2 et T1 ne sont pas vulnérables, tandis que les puces A7 nécessitent l'exploit hardbird. Seule une implémentation limitée est disponible publiquement via checkra1n.

Pour plus d'informations, consultez The Apple Wiki.