Installer le certificat Burp

Reading time: 10 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Proxy systĂšme via ADB

Configurez un proxy HTTP global afin que toutes les applications acheminent le trafic via votre intercepteur (Burp/mitmproxy) :

bash
# Set proxy (device/emulator must reach your host IP)
adb shell settings put global http_proxy 192.168.1.2:8080

# Clear proxy
adb shell settings put global http_proxy :0

Astuce : Dans Burp, liez votre listener Ă  0.0.0.0 afin que les appareils sur le LAN puissent se connecter (Proxy -> Options -> Proxy Listeners).

Sur une machine virtuelle

Tout d'abord, vous devez télécharger le certificat Der depuis Burp. Vous pouvez le faire dans Proxy --> Options --> Import / Export CA certificate

Exportez le certificat au format Der et transformons-le pour obtenir une forme que Android pourra comprendre. Notez que pour configurer le certificat Burp sur la machine Android dans AVD vous devez exécuter cette machine avec l'option -writable-system.
Par exemple vous pouvez l'exécuter comme :

bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system

Ensuite, pour configurer le certificat de burps, faites :

bash
openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
mv burp_cacert.pem $CERTHASHNAME #Correct name
adb root && sleep 2 && adb remount #Allow to write on /syste
adb push $CERTHASHNAME /sdcard/ #Upload certificate
adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correct location
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine

Une fois que la machine a terminé le redémarrage, le certificat Burp sera utilisé par celle-ci !

Using Magisc

Si vous avez rootĂ© votre appareil avec Magisc (peut‑ĂȘtre un Ă©mulateur), et que vous ne pouvez pas suivre les Ă©tapes prĂ©cĂ©dentes pour installer le certificat Burp parce que le systĂšme de fichiers est en lecture seule et que vous ne pouvez pas le remonter en Ă©criture, il existe une autre mĂ©thode.

Expliqué dans cette vidéo vous devez :

  1. Installer un certificat CA : Il suffit de drag&drop le certificat Burp au format DER en changeant l’extension en .crt sur le mobile pour qu’il soit stockĂ© dans le dossier Downloads et aller Ă  Install a certificate -> CA certificate
  • VĂ©rifiez que le certificat a Ă©tĂ© correctement stockĂ© en allant dans Trusted credentials -> USER
  1. Le rendre approuvĂ© par le systĂšme : TĂ©lĂ©chargez le module Magisc MagiskTrustUserCerts (un fichier .zip), drag&drop le sur le tĂ©lĂ©phone, allez dans l’app Magics du tĂ©lĂ©phone Ă  la section Modules, cliquez sur Install from storage, sĂ©lectionnez le module .zip et une fois installĂ© redĂ©marrez le tĂ©lĂ©phone :
  • AprĂšs le redĂ©marrage, allez dans Trusted credentials -> SYSTEM et vĂ©rifiez que le certificat Postswigger est prĂ©sent

Learn how to create a Magisc module

Consultez https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437

Post Android 14

Dans la derniĂšre release d’Android 14, un changement important a Ă©tĂ© observĂ© dans la gestion des certificats d’autoritĂ© (CA) approuvĂ©s par le systĂšme. Auparavant, ces certificats Ă©taient stockĂ©s dans /system/etc/security/cacerts/, accessibles et modifiables par les utilisateurs avec les privilĂšges root, ce qui permettait une application immĂ©diate sur l’ensemble du systĂšme. Cependant, avec Android 14, l’emplacement de stockage a Ă©tĂ© dĂ©placĂ© vers /apex/com.android.conscrypt/cacerts, un rĂ©pertoire situĂ© dans le chemin /apex, qui est immuable par nature.

Les tentatives de remonter le APEX cacerts path en Ă©criture Ă©chouent, car le systĂšme n’autorise pas ce type d’opĂ©ration. MĂȘme les tentatives de dĂ©montage ou de superposition du rĂ©pertoire avec un systĂšme de fichiers temporaire (tmpfs) ne contournent pas l’immuabilitĂ© ; les applications continuent d’accĂ©der aux donnĂ©es de certificats d’origine quelles que soient les modifications au niveau du systĂšme de fichiers. Cette rĂ©silience est due au fait que le montage de /apex est configurĂ© avec une PRIVATE propagation, ce qui garantit que toute modification au sein du rĂ©pertoire /apex n’affecte pas les autres processus.

L’initialisation d’Android implique le processus init qui, au dĂ©marrage du systĂšme d’exploitation, lance Ă©galement le processus Zygote. Ce dernier est responsable du lancement des processus d’application avec un nouveau mount namespace qui inclut un montage privĂ© /apex, isolant ainsi les modifications de ce rĂ©pertoire des autres processus.

NĂ©anmoins, il existe un contournement pour ceux qui doivent modifier les certificats CA approuvĂ©s par le systĂšme dans le rĂ©pertoire /apex. Il consiste Ă  remonter manuellement /apex pour retirer la PRIVATE propagation, rendant ainsi le rĂ©pertoire modifiable. Le processus inclut la copie du contenu de /apex/com.android.conscrypt vers un autre emplacement, le dĂ©montage du rĂ©pertoire /apex/com.android.conscrypt pour Ă©liminer la contrainte en lecture seule, puis la restauration du contenu Ă  son emplacement d’origine dans /apex. Cette approche nĂ©cessite une exĂ©cution rapide pour Ă©viter des plantages systĂšme. Pour garantir l’application des changements Ă  l’échelle du systĂšme, il est recommandĂ© de redĂ©marrer le system_server, ce qui redĂ©marre effectivement toutes les applications et ramĂšne le systĂšme Ă  un Ă©tat cohĂ©rent.

bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
mkdir -p -m 700 /data/local/tmp/tmp-ca-copy

# Copy out the existing certificates
cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/

# Create the in-memory mount on top of the system certs folder
mount -t tmpfs tmpfs /system/etc/security/cacerts

# Copy the existing certs back into the tmpfs, so we keep trusting them
mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/

# Copy our new cert in, so we trust that too
mv $CERTIFICATE_PATH /system/etc/security/cacerts/

# Update the perms & selinux context labels
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*

# Deal with the APEX overrides, which need injecting into each namespace:

# First we get the Zygote process(es), which launch each app
ZYGOTE_PID=$(pidof zygote || true)
ZYGOTE64_PID=$(pidof zygote64 || true)
# N.b. some devices appear to have both!

# Apps inherit the Zygote's mounts at startup, so we inject here to ensure
# all newly started apps will see these certs straight away:
for Z_PID in "$ZYGOTE_PID" "$ZYGOTE64_PID"; do
if [ -n "$Z_PID" ]; then
nsenter --mount=/proc/$Z_PID/ns/mnt -- \
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
fi
done

# Then we inject the mount into all already running apps, so they
# too see these CA certs immediately:

# Get the PID of every process whose parent is one of the Zygotes:
APP_PIDS=$(
echo "$ZYGOTE_PID $ZYGOTE64_PID" | \
xargs -n1 ps -o 'PID' -P | \
grep -v PID
)

# Inject into the mount namespace of each of those apps:
for PID in $APP_PIDS; do
nsenter --mount=/proc/$PID/ns/mnt -- \
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts &
done
wait # Launched in parallel - wait for completion here

echo "System certificate injected"

Bind-mounting through NSEnter

  1. Setting Up a Writable Directory: Initialement, un répertoire inscriptible est créé en montant un tmpfs sur le répertoire systÚme de certificats non-APEX existant. Ceci est réalisé avec la commande suivante :
bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
  1. PrĂ©paration des certificats CA : AprĂšs la crĂ©ation du rĂ©pertoire en Ă©criture, les certificats CA que l'on souhaite utiliser doivent ĂȘtre copiĂ©s dans ce rĂ©pertoire. Cela peut impliquer de copier les certificats par dĂ©faut depuis /apex/com.android.conscrypt/cacerts/. Il est essentiel d'ajuster les permissions et les labels SELinux de ces certificats en consĂ©quence.
  2. Montage bind pour Zygote : En utilisant nsenter, on entre dans le namespace de montage de Zygote. Zygote, étant le processus responsable du lancement des applications Android, nécessite cette étape afin de s'assurer que toutes les applications lancées à partir de ce moment utilisent les certificats CA nouvellement configurés. La commande utilisée est :
bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts

Cela garantit que chaque nouvelle application démarrée respectera la configuration mise à jour des certificats CA.

  1. Appliquer les modifications aux applications en cours d'exécution : Pour appliquer les modifications aux applications déjà en cours d'exécution, nsenter est à nouveau utilisé pour entrer dans l'espace de noms de chaque application individuellement et effectuer un bind mount similaire. La commande nécessaire est :
bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
  1. Approche alternative — redĂ©marrage logiciel: Une mĂ©thode alternative consiste Ă  effectuer le bind mount sur le processus init (PID 1), suivie d'un redĂ©marrage logiciel du systĂšme d'exploitation avec les commandes stop && start. Cette approche propagerait les changements Ă  travers tous les namespaces, Ă©vitant la nĂ©cessitĂ© de traiter individuellement chaque application en cours d'exĂ©cution. Cependant, cette mĂ©thode est gĂ©nĂ©ralement moins privilĂ©giĂ©e en raison de la gĂȘne occasionnĂ©e par le redĂ©marrage.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks