Install Burp Certificate

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Σε Εικονική Μηχανή

Καταρχάς, πρέπει να κατεβάσετε το πιστοποιητικό Der από το Burp. Μπορείτε να το κάνετε αυτό στο Proxy --> Options --> Import / Export CA certificate

Εξαγάγετε το πιστοποιητικό σε μορφή Der και ας το μετατρέψουμε σε μια μορφή που το Android θα μπορεί να καταλάβει. Σημειώστε ότι για να διαμορφώσετε το πιστοποιητικό burp στη μηχανή Android στο AVD πρέπει να τρέξετε αυτήν τη μηχανή με την επιλογή -writable-system. Για παράδειγμα, μπορείτε να την τρέξετε ως:

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

Στη συνέχεια, για να διαμορφώσετε το πιστοποιητικό του burp:

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

Μόλις το μηχάνημα τελειώσει την επανεκκίνηση, το πιστοποιητικό burp θα είναι σε χρήση από αυτό!

Χρησιμοποιώντας το Magisc

Αν έχετε ρουτάρει τη συσκευή σας με το Magisc (ίσως ένας εξομοιωτής), και δεν μπορείτε να ακολουθήσετε τα προηγούμενα βήματα για να εγκαταστήσετε το πιστοποιητικό Burp επειδή το σύστημα αρχείων είναι μόνο για ανάγνωση και δεν μπορείτε να το ανακατεύετε σε εγγράψιμη κατάσταση, υπάρχει άλλος τρόπος.

Εξηγείται σε αυτό το βίντεο πρέπει να:

  1. Εγκαταστήστε ένα πιστοποιητικό CA: Απλά σύρετε και αφήστε το πιστοποιητικό Burp σε μορφή DER αλλάζοντας την κατάληξη σε .crt στο κινητό ώστε να αποθηκευτεί στον φάκελο Λήψεων και πηγαίνετε σε Εγκατάσταση πιστοποιητικού -> Πιστοποιητικό CA

  • Ελέγξτε ότι το πιστοποιητικό αποθηκεύτηκε σωστά πηγαίνοντας σε Αξιόπιστα διαπιστευτήρια -> ΧΡΗΣΤΗΣ

  1. Κάντε το System εμπιστευτικό: Κατεβάστε το module Magisc MagiskTrustUserCerts (ένα αρχείο .zip), σύρετε και αφήστε το στο τηλέφωνο, πηγαίνετε στην εφαρμογή Magics στο τηλέφωνο στην ενότητα Ενότητες, κάντε κλικ στο Εγκατάσταση από αποθήκευση, επιλέξτε το module .zip και μόλις εγκατασταθεί επανεκκινήστε το τηλέφωνο:

  • Μετά την επανεκκίνηση, πηγαίνετε σε Αξιόπιστα διαπιστευτήρια -> ΣΥΣΤΗΜΑ και ελέγξτε αν το πιστοποιητικό Postswigger είναι εκεί

Μετά το Android 14

Στην πιο πρόσφατη έκδοση Android 14, παρατηρήθηκε μια σημαντική αλλαγή στη χειρισμό των πιστοποιητικών Αρχής Πιστοποίησης (CA) που εμπιστεύονται το σύστημα. Προηγουμένως, αυτά τα πιστοποιητικά βρίσκονταν στο /system/etc/security/cacerts/, προσβάσιμα και τροποποιήσιμα από χρήστες με δικαιώματα ρίζας, που επέτρεπε την άμεση εφαρμογή σε όλο το σύστημα. Ωστόσο, με το Android 14, η τοποθεσία αποθήκευσης μεταφέρθηκε στο /apex/com.android.conscrypt/cacerts, ένας κατάλογος εντός της διαδρομής /apex, η οποία είναι αναπόσπαστη από φύσης.

Οι προσπάθειες επανατοποθέτησης της διαδρομής APEX cacerts σε εγγράψιμη κατάσταση αντιμετωπίζονται με αποτυχία, καθώς το σύστημα δεν επιτρέπει τέτοιες λειτουργίες. Ακόμη και οι προσπάθειες αποπροσάρτησης ή επικάλυψης του καταλόγου με ένα προσωρινό σύστημα αρχείων (tmpfs) δεν παρακάμπτουν την αναποσπαστότητα. Οι εφαρμογές συνεχίζουν να έχουν πρόσβαση στα αρχικά δεδομένα πιστοποιητικών ανεξάρτητα από τις αλλαγές στο επίπεδο του συστήματος αρχείων. Αυτή η ανθεκτικότητα οφείλεται στο γεγονός ότι η τοποθέτηση /apex έχει ρυθμιστεί με ιδιωτική προώθηση, εξασφαλίζοντας ότι οι τροποποιήσεις εντός του καταλόγου /apex δεν επηρεάζουν άλλες διεργασίες.

Η εκκίνηση του Android περιλαμβάνει τη διαδικασία init, η οποία, κατά την έναρξη του λειτουργικού συστήματος, εκκινά επίσης τη διαδικασία Zygote. Αυτή η διαδικασία είναι υπεύθυνη για την εκκίνηση των διεργασιών εφαρμογών με ένα νέο χώρο προσάρτησης που περιλαμβάνει μια ιδιωτική τοποθέτηση /apex, απομονώνοντας έτσι τις αλλαγές σε αυτό τον κατάλογο από άλλες διεργασίες.

Ωστόσο, υπάρχει ένα παράκαμψη για όσους χρειάζονται να τροποποιήσουν τα πιστοποιητικά CA που εμπιστεύονται το σύστημα εντός του καταλόγου /apex. Αυτό περιλαμβάνει τη χειροκίνητη επανατοποθέτηση του /apex για την κατάργηση της ιδιωτικής προώθησης, καθιστώντας το εγγράψιμο. Η διαδικασία περιλαμβάνει την αντιγραφή του περιεχομένου του /apex/com.android.conscrypt σε άλλη τοποθεσία, την αποπροσάρτηση του καταλόγου /apex/com.android.conscrypt για την εξάλειψη του περιορισμού μόνο για ανάγνωση, και στη συνέχεια την επαναφορά του περιεχομένου στην αρχική του θέση εντός του /apex. Αυτή η προσέγγιση απαιτεί γρήγορη δράση για να αποφευχθούν κραδασμοί του συστήματος. Για να εξασφαλιστεί η εφαρμογή αυτών των αλλαγών σε όλο το σύστημα, συνιστάται η επανεκκίνηση του system_server, η οποία επανεκκινεί όλες τις εφαρμογές και φέρνει το σύστημα σε μια συνεκτική κατάσταση.

# 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"

Δέσμευση μέσω NSEnter

  1. Δημιουργία Εγγράψιμου Καταλόγου: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με τη δέσμευση ενός tmpfs πάνω στον υπάρχοντα μη-κατάλογο πιστοποιητικών συστήματος non-APEX. Αυτό επιτυγχάνεται με την ακόλουθη εντολή:

mount -t tmpfs tmpfs /system/etc/security/cacerts
  1. Προετοιμασία Πιστοποιητικών CA: Ακολουθώντας τη διαδικασία εγκατάστασης του εγγράψιμου καταλόγου, τα πιστοποιητικά CA που προτίθεται κάποιος να χρησιμοποιήσει πρέπει να αντιγραφούν σε αυτόν τον κατάλογο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από /apex/com.android.conscrypt/cacerts/. Είναι ουσιώδες να προσαρμοστούν αναλόγως οι άδειες και οι ετικέτες SELinux αυτών των πιστοποιητικών.

  2. Σύνδεση Προσάρτησης για το Zygote: Χρησιμοποιώντας το nsenter, μπαίνουμε στο namespace προσάρτησης του Zygote. Το Zygote, ως η διαδικασία υπεύθυνη για την εκκίνηση των εφαρμογών Android, απαιτεί αυτό το βήμα για να διασφαλίσει ότι όλες οι εφαρμογές που εκκινούνται στη συνέχεια χρησιμοποιούν τα νεότερα ρυθμισμένα πιστοποιητικά CA. Η εντολή που χρησιμοποιείται είναι:

nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts

Αυτό εξασφαλίζει ότι κάθε νέα εφαρμογή που ξεκινά θα τηρεί την ενημερωμένη ρύθμιση πιστοποιητικών CA.

  1. Εφαρμογή Αλλαγών σε Εκτελούμενες Εφαρμογές: Για να εφαρμόσετε τις αλλαγές σε ήδη εκτελούμενες εφαρμογές, το nsenter χρησιμοποιείται ξανά για να εισέλθετε στο namespace κάθε εφαρμογής ξεχωριστά και να εκτελέσετε ένα παρόμοιο bind mount. Η απαραίτητη εντολή είναι:

nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
  1. Εναλλακτική Προσέγγιση - Μαλακή Επανεκκίνηση: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση του bind mount στη διαδικασία init (PID 1), ακολουθούμενη από μια μαλακή επανεκκίνηση του λειτουργικού συστήματος με τις εντολές stop && start. Αυτή η προσέγγιση θα μεταφέρει τις αλλαγές σε όλους τους namespaces, αποφεύγοντας την ανάγκη να αντιμετωπιστεί καθένα από τα εκτελούμενα apps ξεχωριστά. Ωστόσο, αυτή η μέθοδος συνήθως προτιμάται λιγότερο λόγω της ενόχλησης της επανεκκίνησης.

Αναφορές

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated