Εγκατάσταση Πιστοποιητικού Burp
Reading time: 9 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Σε μια Εικονική Μηχανή
Πρώτα απ' όλα, πρέπει να κατεβάσετε το πιστοποιητικό 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 επειδή το filesystem είναι μόνο για ανάγνωση και δεν μπορείτε να το ξανατοποθετήσετε ως εγγράψιμο, υπάρχει ένας άλλος τρόπος.
Εξηγείται σε αυτό το βίντεο που πρέπει να κάνετε:
- Εγκαταστήστε ένα πιστοποιητικό CA: Απλά σύρετε και αποθέστε το DER πιστοποιητικό Burp αλλάζοντας την επέκταση σε
.crt
στο κινητό ώστε να αποθηκευτεί στον φάκελο Λήψεις και πηγαίνετε στοΕγκατάσταση πιστοποιητικού
->Πιστοποιητικό CA
.png)
- Ελέγξτε ότι το πιστοποιητικό αποθηκεύτηκε σωστά πηγαίνοντας στο
Έμπιστες πιστοποιήσεις
->ΧΡΗΣΤΗΣ
.png)
- Κάντε το εμπιστευμένο από το Σύστημα: Κατεβάστε το module Magisc MagiskTrustUserCerts (ένα αρχείο .zip), σύρετε και αποθέστε το στο τηλέφωνο, πηγαίνετε στην εφαρμογή Magics στο τηλέφωνο στην ενότητα
Modules
, κάντε κλικ στοΕγκατάσταση από αποθήκευση
, επιλέξτε το module.zip
και μόλις εγκατασταθεί επανεκκινήστε το τηλέφωνο:
.png)
- Μετά την επανεκκίνηση, πηγαίνετε στο
Έμπιστες πιστοποιήσεις
->ΣΥΣΤΗΜΑ
και ελέγξτε ότι το πιστοποιητικό Postswigger είναι εκεί
.png)
Μετά το Android 14
Στην τελευταία έκδοση Android 14, έχει παρατηρηθεί μια σημαντική αλλαγή στη διαχείριση των πιστοποιητικών Αρχής Πιστοποίησης (CA) που είναι εμπιστευμένα από το σύστημα. Προηγουμένως, αυτά τα πιστοποιητικά βρίσκονταν στο /system/etc/security/cacerts/
, προσβάσιμα και τροποποιήσιμα από χρήστες με δικαιώματα root, γεγονός που επέτρεπε άμεση εφαρμογή σε όλο το σύστημα. Ωστόσο, με το Android 14, η τοποθεσία αποθήκευσης έχει μεταφερθεί στο /apex/com.android.conscrypt/cacerts
, έναν φάκελο εντός της διαδρομής /apex
, ο οποίος είναι εκ φύσεως αμετάβλητος.
Οι προσπάθειες να ξανατοποθετηθεί η διαδρομή APEX cacerts ως εγγράψιμη αποτυγχάνουν, καθώς το σύστημα δεν επιτρέπει τέτοιες λειτουργίες. Ακόμη και οι προσπάθειες να αποσυνδεθεί ή να επικαλυφθεί ο φάκελος με ένα προσωρινό σύστημα αρχείων (tmpfs) δεν παρακάμπτουν την αμεταβλησία; οι εφαρμογές συνεχίζουν να έχουν πρόσβαση στα αρχικά δεδομένα πιστοποιητικού ανεξάρτητα από τις αλλαγές στο επίπεδο του συστήματος αρχείων. Αυτή η ανθεκτικότητα οφείλεται στο ότι η τοποθέτηση /apex
έχει ρυθμιστεί με ΙΔΙΩΤΙΚΗ προπαγάνδα, διασφαλίζοντας ότι οποιεσδήποτε τροποποιήσεις εντός του φακέλου /apex
δεν επηρεάζουν άλλες διαδικασίες.
Η αρχικοποίηση του Android περιλαμβάνει τη διαδικασία init
, η οποία, κατά την εκκίνηση του λειτουργικού συστήματος, ξεκινά επίσης τη διαδικασία Zygote. Αυτή η διαδικασία είναι υπεύθυνη για την εκκίνηση διαδικασιών εφαρμογών με ένα νέο namespace τοποθέτησης που περιλαμβάνει μια ιδιωτική τοποθέτηση /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"
Bind-mounting through NSEnter
- Ρύθμιση ενός Εγγράψιμου Καταλόγου: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με την τοποθέτηση ενός
tmpfs
πάνω από τον υπάρχοντα κατάλογο πιστοποιητικών συστήματος που δεν είναι APEX. Αυτό επιτυγχάνεται με την ακόλουθη εντολή:
mount -t tmpfs tmpfs /system/etc/security/cacerts
- Προετοιμασία Πιστοποιητικών CA: Αφού ρυθμιστεί ο εγγράψιμος φάκελος, τα πιστοποιητικά CA που προορίζονται για χρήση θα πρέπει να αντιγραφούν σε αυτόν τον φάκελο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από το
/apex/com.android.conscrypt/cacerts/
. Είναι απαραίτητο να προσαρμοστούν οι άδειες και οι ετικέτες SELinux αυτών των πιστοποιητικών αναλόγως. - Δέσμευση Μοντάρισμα για 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 πιστοποίηση.
- Εφαρμογή Αλλαγών σε Τρέχουσες Εφαρμογές: Για να εφαρμοστούν οι αλλαγές σε ήδη τρέχουσες εφαρμογές, χρησιμοποιείται ξανά το
nsenter
για να εισέλθει στο namespace κάθε εφαρμογής ξεχωριστά και να εκτελέσει μια παρόμοια δέσμευση. Η απαραίτητη εντολή είναι:
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
- Εναλλακτική Προσέγγιση - Ήπια Επανεκκίνηση: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση της δέσμευσης στο
init
διαδικασία (PID 1) ακολουθούμενη από μια ήπια επανεκκίνηση του λειτουργικού συστήματος με τις εντολέςstop && start
. Αυτή η προσέγγιση θα διαδώσει τις αλλαγές σε όλα τα namespaces, αποφεύγοντας την ανάγκη να απευθυνθεί κανείς ξεχωριστά σε κάθε εκτελούμενη εφαρμογή. Ωστόσο, αυτή η μέθοδος γενικά προτιμάται λιγότερο λόγω της ταλαιπωρίας της επανεκκίνησης.
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.