Install Burp Certificate

Υποστήριξη 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 επειδή το σύστημα αρχείων είναι μόνο για ανάγνωση και δεν μπορείτε να το επανατοποθετήσετε σε εγ writable, υπάρχει ένας άλλος τρόπος.

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

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

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

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

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

Μετά το Android 14

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

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

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

Ωστόσο, υπάρχει μια λύση για όσους χρειάζονται να τροποποιήσουν τα πιστοποιητικά CA που είναι εμπιστευμένα από το σύστημα εντός του φακέλου /apex. Αυτό περιλαμβάνει την χειροκίνητη επανατοποθέτηση του /apex για να αφαιρεθεί η ΙΔΙΩΤΙΚΗ προπαγάνδα, καθιστώντας το εγ writable. Η διαδικασία περιλαμβάνει την αντιγραφή των περιεχομένων του /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"

Bind-mounting through NSEnter

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

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

  2. Δέσμευση Μοντάρισμα για Zygote: Χρησιμοποιώντας το nsenter, κάποιος εισέρχεται στο mount 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 κάθε εφαρμογής ξεχωριστά και να εκτελέσει μια παρόμοια δέσμευση. Η απαραίτητη εντολή είναι:

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

Αναφορές

Support HackTricks

Last updated