<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
[**Des scripts comme celui-ci**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) ou [**celui-ci**](https://github.com/octomagon/davegrohl.git) peuvent être utilisés pour transformer le hash en **format hashcat**.
Une autre commande en une ligne qui va extraire les informations d'identification de tous les comptes non-service au format hashcat `-m 7100` (macOS PBKDF2-SHA512):
Notez que lors de l'utilisation du binaire security pour **extraire les mots de passe décryptés**, plusieurs invites demanderont à l'utilisateur d'autoriser cette opération.
Selon ce commentaire [juuso/keychaindump#10 (comment)](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760), il semble que ces outils ne fonctionnent plus dans Big Sur.
Un outil nommé **keychaindump** a été développé pour extraire des mots de passe des trousseaux macOS, mais il rencontre des limitations sur les versions plus récentes de macOS comme Big Sur, comme indiqué dans une [discussion](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). L'utilisation de **keychaindump** nécessite que l'attaquant obtienne l'accès et élève les privilèges à **root**. L'outil exploite le fait que le trousseau est déverrouillé par défaut lors de la connexion de l'utilisateur pour des raisons de commodité, permettant aux applications d'y accéder sans nécessiter le mot de passe de l'utilisateur de manière répétée. Cependant, si un utilisateur choisit de verrouiller son trousseau après chaque utilisation, **keychaindump** devient inefficace.
**Keychaindump** fonctionne en ciblant un processus spécifique appelé **securityd**, décrit par Apple comme un démon pour l'autorisation et les opérations cryptographiques, essentiel pour accéder au trousseau. Le processus d'extraction implique l'identification d'une **Clé Maîtresse** dérivée du mot de passe de connexion de l'utilisateur. Cette clé est essentielle pour lire le fichier du trousseau. Pour localiser la **Clé Maîtresse**, **keychaindump** analyse le tas de mémoire de **securityd** en utilisant la commande `vmmap`, recherchant des clés potentielles dans des zones signalées comme `MALLOC_TINY`. La commande suivante est utilisée pour inspecter ces emplacements mémoire :
Après avoir identifié les clés maîtresses potentielles, **keychaindump** recherche à travers les tas un motif spécifique (`0x0000000000000018`) qui indique un candidat pour la clé maîtresse. D'autres étapes, y compris la désobfuscation, sont nécessaires pour utiliser cette clé, comme indiqué dans le code source de **keychaindump**. Les analystes se concentrant sur ce domaine doivent noter que les données cruciales pour décrypter le trousseau de clés sont stockées dans la mémoire du processus **securityd**. Une commande d'exemple pour exécuter **keychaindump** est :
[**Chainbreaker**](https://github.com/n0fate/chainbreaker) peut être utilisé pour extraire les types d'informations suivants d'un trousseau de clés OSX de manière forensiquement fiable :
* Mot de passe du trousseau de clés hashé, adapté pour être craqué avec [hashcat](https://hashcat.net/hashcat/) ou [John the Ripper](https://www.openwall.com/john/)
Avec le mot de passe de déverrouillage du trousseau de clés, une clé maîtresse obtenue en utilisant [volafox](https://github.com/n0fate/volafox) ou [volatility](https://github.com/volatilityfoundation/volatility), ou un fichier de déverrouillage tel que SystemKey, Chainbreaker fournira également les mots de passe en texte brut.
Si vous connaissez le mot de passe de l'utilisateur, vous pouvez l'utiliser pour **extraire et décrypter les trousseaux qui appartiennent à l'utilisateur**.
Le fichier **kcpassword** est un fichier qui contient le **mot de passe de connexion de l'utilisateur**, mais uniquement si le propriétaire du système a **activé la connexion automatique**. Par conséquent, l'utilisateur sera connecté automatiquement sans être invité à saisir un mot de passe (ce qui n'est pas très sécurisé).
Le mot de passe est stocké dans le fichier **`/etc/kcpassword`** xoré avec la clé **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Si le mot de passe de l'utilisateur est plus long que la clé, la clé sera réutilisée.\
Cela rend le mot de passe assez facile à récupérer, par exemple en utilisant des scripts comme [**celui-ci**](https://gist.github.com/opshope/32f65875d45215c3677d).
La plupart des informations intéressantes seront dans **blob**. Vous devrez donc **extraire** ce contenu et le **transformer** en un format **lisible par l'homme** ou utiliser **`strings`**. Pour y accéder, vous pouvez faire :
for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select Z_PK from ZICNOTEDATA;"); do sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select writefile('body1.gz.z', ZDATA) from ZICNOTEDATA where Z_PK = '$i';"; zcat body1.gz.Z ; done
Dans les applications macOS, les préférences se trouvent dans **`$HOME/Library/Preferences`** et dans iOS, elles se trouvent dans `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences`. 
**`/usr/sbin/cfprefsd`** gère les services XPC `com.apple.cfprefsd.daemon` et `com.apple.cfprefsd.agent` et peut être appelé pour effectuer des actions telles que la modification des préférences.
Le démon principal pour les notifications est **`/usr/sbin/notifyd`**. Pour recevoir des notifications, les clients doivent s'inscrire via le port Mach `com.apple.system.notification_center` (vérifiez-les avec `sudo lsmp -p <pid notifyd>`). Le démon est configurable avec le fichier `/etc/notify.conf`.
Les noms utilisés pour les notifications sont des notations DNS inversées uniques et lorsqu'une notification est envoyée à l'un d'eux, le(s) client(s) qui ont indiqué pouvoir la gérer la recevront.
Il est possible de consulter l'état actuel (et de voir tous les noms) en envoyant le signal SIGUSR2 au processus notifyd et en lisant le fichier généré : `/var/run/notifyd_<pid>.status` :
```bash
ps -ef | grep -i notifyd
0 376 1 0 15Mar24 ?? 27:40.97 /usr/sbin/notifyd
sudo kill -USR2 376
cat /var/run/notifyd_376.status
[...]
pid: 94379 memory 5 plain 0 port 0 file 0 signal 0 event 0 common 10
Le **Centre de notification distribué** dont le binaire principal est **`/usr/sbin/distnoted`**, est un autre moyen d'envoyer des notifications. Il expose certains services XPC et effectue des vérifications pour essayer de vérifier les clients.
### Notifications Push Apple (APN)
Dans ce cas, les applications peuvent s'inscrire à des **sujets**. Le client générera un jeton en contactant les serveurs d'Apple via **`apsd`**.\
Ensuite, les fournisseurs auront également généré un jeton et pourront se connecter aux serveurs d'Apple pour envoyer des messages aux clients. Ces messages seront reçus localement par **`apsd`** qui transmettra la notification à l'application qui l'attend.
Les préférences sont situées dans `/Library/Preferences/com.apple.apsd.plist`.
Il existe une base de données locale de messages située dans macOS dans `/Library/Application\ Support/ApplePushService/aps.db` et dans iOS dans `/var/mobile/Library/ApplePushService`. Elle comporte 3 tables : `incoming_messages`, `outgoing_messages` et `channel`.
Il est également possible d'obtenir des informations sur le démon et les connexions en utilisant :
```bash
/System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status
```
## Notifications Utilisateur
Ce sont des notifications que l'utilisateur devrait voir à l'écran :
* **`CFUserNotification`** : Cette API fournit un moyen d'afficher à l'écran une fenêtre contextuelle avec un message.
* **Le tableau d'affichage** : Cela s'affiche dans iOS sous forme de bannière qui disparaît et sera stockée dans le Centre de notifications.
* **`NSUserNotificationCenter`** : Il s'agit du tableau d'affichage iOS sur MacOS. La base de données des notifications est située dans `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`