mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/mobile-pentesting/android-app-pentesting/avd-androi
This commit is contained in:
parent
db026462c1
commit
58ca01a3b5
@ -1,10 +1,10 @@
|
||||
# Εφαρμογές Android Pentesting
|
||||
# Android Applications Pentesting
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Βασικά για Εφαρμογές Android
|
||||
## Βασικά εφαρμογών Android
|
||||
|
||||
Συνιστάται ιδιαίτερα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά στοιχεία σχετικά με την ασφάλεια Android και τα πιο επικίνδυνα συστατικά σε μια εφαρμογή Android**:
|
||||
Συνιστάται θερμά να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να μάθετε σχετικά με τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα συστατικά σε μια εφαρμογή Android**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -14,14 +14,14 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε με μια συσκευή Android (εξομοιωμένη ή φυσική).\
|
||||
**ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Network** από έναν υπολογιστή. Αυτό το εργαλείο επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, τη **δημιουργία αντιγράφων ασφαλείας** δεδομένων, την **ανάγνωση** των logs, μεταξύ άλλων λειτουργιών.
|
||||
**ADB** σας επιτρέπει να ελέγχετε συσκευές είτε μέσω **USB** είτε μέσω **Network** από έναν υπολογιστή. Αυτό το εργαλείο επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, τη **δημιουργία αντιγράφων ασφαλείας** δεδομένων, την **ανάγνωση** logs, μεταξύ άλλων λειτουργιών.
|
||||
|
||||
Ρίξτε μια ματιά στην παρακάτω λίστα των [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
Ρίξτε μια ματιά στην ακόλουθη λίστα των [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (π.χ. πολύ καλά obfuscated passwords ή flags). Σε αυτή την περίπτωση, μπορεί να είναι ενδιαφέρον να αποσυμπιλέξετε το apk, να τροποποιήσετε τον κώδικα και να το επανασυμπιέσετε.\
|
||||
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για αρκετές δοκιμές κατά τη διάρκεια της dynamic analysis** που πρόκειται να παρουσιαστούν. Επομένως, **έχετε πάντα υπόψη αυτήν την πιθανότητα**.
|
||||
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (π.χ. καλά obfuscated passwords ή flags). Τότε, μπορεί να είναι χρήσιμο να κάνετε decompile το apk, να τροποποιήσετε τον κώδικα και να το recompile.\
|
||||
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική λύση για διάφορες δοκιμές κατά τη διάρκεια του dynamic analysis** που πρόκειται να παρουσιαστούν. Έτσι, **κρατήστε πάντα στο μυαλό σας αυτή τη δυνατότητα**.
|
||||
|
||||
## Άλλα ενδιαφέροντα κόλπα
|
||||
|
||||
@ -29,7 +29,7 @@ android-applications-basics.md
|
||||
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
|
||||
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md)
|
||||
- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md)
|
||||
- **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- **Λήψη APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Εξαγωγή APK από τη συσκευή:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
@ -49,7 +49,7 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk
|
||||
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
|
||||
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
```
|
||||
## Μελέτες Περιπτώσεων & Ευπάθειες
|
||||
## Μελέτες Περίπτωσης & Ευπάθειες
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -63,39 +63,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
## Στατική Ανάλυση
|
||||
|
||||
Πρώτα απ' όλα, για την ανάλυση ενός APK πρέπει **να ρίξετε μια ματιά στον κώδικα Java** χρησιμοποιώντας έναν decompiler.\
|
||||
Πρώτα απ' όλα, για την ανάλυση ενός APK θα πρέπει να **ρίξετε μια ματιά στον Java κώδικα** χρησιμοποιώντας έναν decompiler.\
|
||||
Παρακαλώ, [**διαβάστε εδώ για να βρείτε πληροφορίες σχετικά με διαφορετικούς διαθέσιμους decompilers**](apk-decompilers.md).
|
||||
|
||||
### Αναζήτηση ενδιαφέρουσων πληροφοριών
|
||||
### Αναζήτηση ενδιαφερόντων πληροφοριών
|
||||
|
||||
Απλά κοιτάζοντας τα **strings** του APK μπορείτε να ψάξετε για **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... ψάξτε ακόμα για code execution **backdoors** ή authentication backdoors (hardcoded admin credentials στην εφαρμογή).
|
||||
Απλώς κοιτώντας τις **strings** του APK μπορείτε να αναζητήσετε **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **API** keys, **encryption**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... ψάξτε ακόμη για code execution **backdoors** ή authentication backdoors (hardcoded admin credentials στην εφαρμογή).
|
||||
|
||||
**Firebase**
|
||||
|
||||
Δώστε ιδιαίτερη προσοχή στα **firebase URLs** και ελέγξτε αν είναι κακώς ρυθμισμένα. [Περισσότερες πληροφορίες σχετικά με το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
Δώστε ιδιαίτερη προσοχή σε **firebase URLs** και ελέγξτε αν είναι κακώς διαμορφωμένα. [Περισσότερες πληροφορίες για το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml
|
||||
|
||||
Η **εξέταση των αρχείων _Manifest.xml_ και _strings.xml_ μιας εφαρμογής μπορεί να αποκαλύψει πιθανούς κινδύνους ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης αρχείου του APK σε .zip και αποσυμπίεση.
|
||||
Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανά θέματα ασφάλειας**. Αυτά τα αρχεία μπορούν να προσπελαστούν με decompilers ή αλλάζοντας την επέκταση του APK σε .zip και κάνοντας unzip.
|
||||
|
||||
**Οι ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν:
|
||||
**Ευπάθειες** που μπορούν να εντοπιστούν από το **Manifest.xml** περιλαμβάνουν:
|
||||
|
||||
- **Debuggable Applications**: Εφαρμογές που ορίζονται ως debuggable (`debuggable="true"`) στο _Manifest.xml_ αποτελούν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορούν να οδηγήσουν σε εκμετάλλευση. Για περισσότερη κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε έναν οδηγό για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Backup Settings**: Το attribute `android:allowBackup="false"` πρέπει να ορίζεται ρητά για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες ώστε να αποτρέπονται μη εξουσιοδοτημένα backups δεδομένων μέσω adb, ειδικά όταν το usb debugging είναι ενεργοποιημένο.
|
||||
- **Network Security**: Προσαρμοσμένες ρυθμίσεις network security (`android:networkSecurityConfig="@xml/network_security_config"`) σε _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως certificate pins και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεψή του HTTP traffic για συγκεκριμένα domains.
|
||||
- **Exported Activities and Services**: Ο εντοπισμός exported activities και services στο manifest μπορεί να αναδείξει components που θα μπορούσαν να χρησιμοποιηθούν καταχρηστικά. Περαιτέρω ανάλυση κατά τη διάρκεια dynamic testing μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα components.
|
||||
- **Debuggable Applications**: Εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο _Manifest.xml_ αποτελούν ρίσκο καθώς επιτρέπουν συνδέσεις που μπορούν να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την ανεύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Backup Settings**: Το `android:allowBackup="false"` πρέπει να ορίζεται ρητά για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες για να αποτρέπεται μη εξουσιοδοτημένο backup δεδομένων μέσω adb, ειδικά όταν είναι ενεργοποιημένο το usb debugging.
|
||||
- **Network Security**: Προσαρμοσμένες ρυθμίσεις network security (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφάλειας όπως certificate pins και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP κίνηση για συγκεκριμένα domains.
|
||||
- **Exported Activities and Services**: Ο εντοπισμός exported activities και services στο manifest μπορεί να υποδείξει components που ενδέχεται να κακοχρησιμοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικών δοκιμών μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα components.
|
||||
- **Content Providers and FileProviders**: Εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η διαμόρφωση των FileProviders πρέπει επίσης να ελεγχθεί προσεκτικά.
|
||||
- **Broadcast Receivers and URL Schemes**: Αυτά τα components θα μπορούσαν να αξιοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς τα URL schemes διαχειρίζονται καθώς μπορεί να έχουν input vulnerabilities.
|
||||
- **SDK Versions**: Τα attributes `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία να μην υποστηρίζονται παρωχημένες, ευάλωτες εκδόσεις Android για λόγους ασφάλειας.
|
||||
- **Broadcast Receivers and URL Schemes**: Αυτά τα components θα μπορούσαν να αξιοποιηθούν για εκμετάλλευση, δίνοντας ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για τυχόν ευπάθειες εισόδου.
|
||||
- **SDK Versions**: Τα attributes `minSdkVersion`, `targetSDKVersion` και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία να μην υποστηρίζονται ξεπερασμένες, ευάλωτες εκδόσεις Android για λόγους ασφαλείας.
|
||||
|
||||
Από το αρχείο **strings.xml** μπορούν να εντοπιστούν ευαίσθητες πληροφορίες όπως API keys, custom schemas και άλλες σημειώσεις των developers, υπογραμμίζοντας την ανάγκη προσεκτικής αναθεώρησης αυτών των resources.
|
||||
Από το αρχείο **strings.xml**, μπορούν να ανακαλυφθούν ευαίσθητες πληροφορίες όπως API keys, custom schemas και άλλες σημειώσεις προγραμματιστή, τονίζοντας την ανάγκη προσεκτικής ανασκόπησης αυτών των πόρων.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** είναι μια επίθεση όπου μια κακόβουλη εφαρμογή εκκινείται και τοποθετείται πάνω από μια εφαρμογή-θύμα. Μόλις καλύψει ορατά την εφαρμογή-θύμα, η διεπαφή χρήστη της σχεδιάζεται έτσι ώστε να παραπλανά τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ παράλληλα προωθεί την αλληλεπίδραση στην εφαρμογή-θύμα.\
|
||||
Στην ουσία, τυφλώνει τον χρήστη ώστε να μην γνωρίζει ότι πραγματικά εκτελεί ενέργειες στην εφαρμογή-θύμα.
|
||||
Το **Tapjacking** είναι μια επίθεση όπου μια **malicious** **application** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή-θύμα**. Μόλις καλύψει οπτικά την εφαρμογή-θύμα, το UI της έχει σχεδιαστεί έτσι ώστε να ξεγελάει τον χρήστη να αλληλεπιδράσει με αυτό, ενώ ταυτόχρονα προωθεί την αλληλεπίδραση στην εφαρμογή-θύμα.\
|
||||
Στην ουσία, **τυφλώνει τον χρήστη ώστε να μην γνωρίζει ότι εκτελεί πραγματικά ενέργειες στην εφαρμογή-θύμα**.
|
||||
|
||||
Βρείτε περισσότερες πληροφορίες στο:
|
||||
Βρείτε περισσότερες πληροφορίες σε:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -104,82 +104,82 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
Μια **activity** με το **`launchMode`** ορισμένο σε **`singleTask` χωρίς να έχει οριστεί `taskAffinity`** είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια εφαρμογή μπορεί να εγκατασταθεί και αν εκκινηθεί πριν από την πραγματική εφαρμογή να **καταλάβει το task της πραγματικής εφαρμογής** (ώστε ο χρήστης να αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**).
|
||||
Μια **activity** με το `launchMode` ρυθμισμένο σε **`singleTask` χωρίς να έχει οριστεί `taskAffinity`** είναι ευάλωτη σε Task Hijacking. Αυτό σημαίνει ότι μια **application** μπορεί να εγκατασταθεί και αν εκκινηθεί πριν από την πραγματική εφαρμογή, θα μπορούσε **να hijack-άρει το task της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **malicious application** πιστεύοντας ότι χρησιμοποιεί την πραγματική).
|
||||
|
||||
Περισσότερες πληροφορίες στο:
|
||||
Περισσότερες πληροφορίες σε:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
android-task-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Μη ασφαλής αποθήκευση δεδομένων
|
||||
### Insecure data storage
|
||||
|
||||
**Internal Storage**
|
||||
Internal Storage
|
||||
|
||||
Στο Android, αρχεία που **αποθηκεύονται** στην **internal** storage έχουν σχεδιαστεί ώστε να είναι προσβάσιμα αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφάλειας επιβάλλεται από το Android operating system και είναι γενικά επαρκές για τις ανάγκες ασφάλειας των περισσοτέρων εφαρμογών. Ωστόσο, οι developers μερικές φορές χρησιμοποιούν modes όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** την κοινή χρήση αρχείων μεταξύ διαφορετικών εφαρμογών. Αυτά τα modes, όμως, **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
Στο Android, τα αρχεία που **αποθηκεύονται** στην **internal storage** έχουν σχεδιαστεί ώστε να είναι προσπελάσιμα αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν modes όπως τα `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** την κοινή χρήση αρχείων μεταξύ διαφορετικών εφαρμογών. Αυτά τα modes **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
|
||||
1. **Static Analysis:**
|
||||
- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` εξετάζεται **προσεκτικά**. Αυτά τα modes **μπορούν ενδεχομένως να εκθέσουν** αρχεία σε **μη επιθυμητή ή μη εξουσιοδοτημένη πρόσβαση**.
|
||||
- **Ελέγξτε** προσεκτικά τη χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE`. Αυτά τα modes **μπορεί να εκθέσουν** αρχεία σε **μη προοριζόμενη ή μη εξουσιοδοτημένη πρόσβαση**.
|
||||
2. **Dynamic Analysis:**
|
||||
- **Επαληθεύστε** τα **permissions** που έχουν οριστεί στα αρχεία που δημιουργεί η εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν κάποια αρχεία είναι **ρυθμισμένα ώστε να είναι readable ή writable worldwide**. Αυτό μπορεί να αποτελεί σημαντικό κίνδυνο ασφαλείας, καθώς θα επέτρεπε σε **οποιαδήποτε εφαρμογή** εγκατεστημένη στη συσκευή, ανεξαρτήτως προέλευσης ή σκοπού, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
- **Επιβεβαιώστε** τα **permissions** που έχουν οριστεί σε αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν κάποια αρχεία έχουν οριστεί να είναι readable ή writable worldwide. Αυτό μπορεί να αποτελέσει σημαντικό ρίσκο ασφαλείας, καθώς θα επέτρεπε **οποιαδήποτε εφαρμογή** εγκατεστημένη στη συσκευή, ανεξάρτητα από την προέλευση ή τη πρόθεσή της, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
|
||||
**External Storage**
|
||||
External Storage
|
||||
|
||||
Όταν χειρίζεστε αρχεία σε **external storage**, όπως SD Cards, πρέπει να ληφθούν υπόψη ορισμένες προφυλάξεις:
|
||||
Όταν χειρίζεστε αρχεία σε **external storage**, όπως SD Cards, πρέπει να ληφθούν υπόψη τα εξής:
|
||||
|
||||
1. **Accessibility**:
|
||||
- Τα αρχεία στο external storage είναι **globally readable and writable**. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
|
||||
- Τα αρχεία στην external storage είναι **παγκοσμίως αναγνώσιμα και εγγράψιμα**. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
|
||||
2. **Security Concerns**:
|
||||
- Δε συνιστάται να αποθηκεύετε ευαίσθητες πληροφορίες στο external storage λόγω της εύκολης πρόσβασης.
|
||||
- Το external storage μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας το λιγότερο ασφαλές.
|
||||
- Δε συνίσταται η αποθήκευση ευαίσθητων πληροφοριών στην external storage λόγω της ευκολίας πρόσβασης.
|
||||
- Η external storage μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας την λιγότερο ασφαλή.
|
||||
3. **Handling Data from External Storage**:
|
||||
- Πάντα **εκτελέστε input validation** στα δεδομένα που ανακτώνται από το external storage. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή.
|
||||
- Η αποθήκευση εκτελέσιμων ή class files στο external storage για dynamic loading αποθαρρύνεται έντονα.
|
||||
- Αν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από το external storage, βεβαιωθείτε ότι αυτά τα αρχεία είναι **signed και cryptographically verified** πριν γίνουν dynamic loaded. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ακεραιότητας ασφάλειας της εφαρμογής σας.
|
||||
- Πάντα **εκτελέστε validation εισόδου** στα δεδομένα που ανακτώνται από external storage. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή.
|
||||
- Η αποθήκευση εκτελέσιμων αρχείων ή class files στην external storage για dynamic loading δεν συνιστάται.
|
||||
- Εάν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από την external storage, βεβαιωθείτε ότι αυτά τα αρχεία είναι **signed και cryptographically verified** πριν από το dynamic loading. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ακεραιότητας ασφαλείας της εφαρμογής σας.
|
||||
|
||||
External storage μπορεί να **προσπελαστεί** στα `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard`
|
||||
Η external storage μπορεί να προσπελαστεί σε `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard`
|
||||
|
||||
> [!TIP]
|
||||
> Από το Android 4.4 (**API 17**) και μετά, η SD card έχει μια δομή directories που **περιορίζει την πρόσβαση μιας εφαρμογής στον κατάλογο που είναι ειδικά για αυτήν την εφαρμογή**. Αυτό αποτρέπει κακόβουλες εφαρμογές από το να αποκτήσουν read ή write πρόσβαση στα αρχεία άλλης εφαρμογής.
|
||||
> Από το Android 4.4 (**API 17**) και μετά, η SD card έχει μια δομή φακέλων που **περιορίζει την πρόσβαση μιας εφαρμογής στον κατάλογο που προορίζεται ειδικά για αυτήν**. Αυτό αποτρέπει μια malicious application από το να αποκτήσει ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
|
||||
|
||||
**Ευαίσθητα δεδομένα αποθηκευμένα σε απλό κείμενο**
|
||||
**Ευαίσθητα δεδομένα αποθηκευμένα σε clear-text**
|
||||
|
||||
- **Shared preferences**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στη διαδρομή `/data/data/<packagename>/shared_prefs/` και μερικές φορές είναι δυνατόν να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
- **Databases**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα sqlite databases στη διαδρομή `/data/data/<packagename>/databases/` και μερικές φορές είναι δυνατόν να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
- **Shared preferences**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα xml αρχεία στο μονοπάτι `/data/data/<packagename>/shared_prefs/` και μερικές φορές είναι δυνατό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν το φάκελο.
|
||||
- **Databases**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει sqlite βάσεις δεδομένων στο μονοπάτι `/data/data/<packagename>/databases/` και μερικές φορές είναι δυνατό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν το φάκελο.
|
||||
|
||||
### Σπασμένο TLS
|
||||
### Broken TLS
|
||||
|
||||
**Accept All Certificates**
|
||||
Accept All Certificates
|
||||
|
||||
Για κάποιο λόγο, μερικές φορές οι developers αποδέχονται όλα τα πιστοποιητικά ακόμα και αν, για παράδειγμα, το hostname δεν ταιριάζει, με γραμμές κώδικα όπως η ακόλουθη:
|
||||
Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμα και αν, για παράδειγμα, το hostname δεν ταιριάζει, με γραμμές κώδικα όπως η ακόλουθη:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a πιστοποιητικό for a different hostname and use it.
|
||||
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
|
||||
|
||||
### Ελαττωματική Κρυπτογραφία
|
||||
|
||||
**Κακές διαδικασίες διαχείρισης κλειδιών**
|
||||
|
||||
Κάποιοι developers αποθηκεύουν ευαίσθητα δεδομένα στο local storage και τα κρυπτογραφούν με ένα key hardcoded/predictable στον κώδικα. Αυτό δεν πρέπει να γίνεται καθώς κάποιο reversing θα μπορούσε να επιτρέψει σε attackers να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
Κάποιοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί hardcoded/predictable μέσα στον code. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποιο reversing μπορεί να επιτρέψει σε attackers να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
|
||||
**Use of Insecure and/or Deprecated Algorithms**
|
||||
**Χρήση ανασφαλών και/ή παρωχημένων αλγορίθμων**
|
||||
|
||||
Οι developers δεν πρέπει να χρησιμοποιούν **deprecated algorithms** για να πραγματοποιούν authorisation **checks**, **store** ή **send** δεδομένα. Μερικοί από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για να αποθηκεύσουν passwords για παράδειγμα, πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt.
|
||||
Οι προγραμματιστές δεν πρέπει να χρησιμοποιούν **deprecated algorithms** για να εκτελούν authorisation **checks**, να **αποθηκεύουν** ή να **στέλνουν** δεδομένα. Μερικοί από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για να αποθηκεύονται passwords για παράδειγμα, πρέπει να χρησιμοποιηθούν hashes brute-force **resistant** με salt.
|
||||
|
||||
### Άλλοι έλεγχοι
|
||||
|
||||
- Συνιστάται να **obfuscate the APK** για να δυσκολέψετε το έργο του reverse engineer στους attackers.
|
||||
- Αν η app είναι ευαίσθητη (όπως bank apps), θα πρέπει να πραγματοποιεί δικούς της ελέγχους για να δει αν το mobile είναι **rooted** και να ενεργεί ανάλογα.
|
||||
- Αν η app είναι ευαίσθητη (όπως bank apps), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Αν η app είναι ευαίσθητη (όπως bank apps), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να διαπιστώσει αν έχει τροποποιηθεί.
|
||||
- Χρησιμοποιήστε [**APKiD**](https://github.com/rednaga/APKiD) για να δείτε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για να χτιστεί το APK
|
||||
- Συνιστάται να **obfuscate το APK** ώστε να δυσκολεύεται η εργασία των reverse engineers και των attackers.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να πραγματοποιεί δικούς της ελέγχους για να διαπιστώνει αν το mobile είναι rooted και να ενεργεί ανάλογα.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** ώστε να διαπιστώνει αν έχει τροποποιηθεί.
|
||||
- Χρησιμοποιήστε [**APKiD**](https://github.com/rednaga/APKiD) για να ελέγξετε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για το build του APK
|
||||
|
||||
### Εφαρμογή React Native
|
||||
|
||||
Read the following page to learn how to easily access javascript code of React applications:
|
||||
Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να αποκτάτε εύκολα πρόσβαση στο javascript code των React εφαρμογών:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -188,26 +188,26 @@ react-native-application.md
|
||||
|
||||
### Εφαρμογές Xamarin
|
||||
|
||||
Read the following page to learn how to easily access C# code of a xamarin applications:
|
||||
Διαβάστε την παρακάτω σελίδα για να μάθετε πώς να αποκτάτε εύκολα πρόσβαση στο C# code μιας xamarin εφαρμογής:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../xamarin-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### Superpacked Applications
|
||||
### Superpacked Εφαρμογές
|
||||
|
||||
According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.**
|
||||
Σύμφωνα με αυτό το [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας Meta αλγόριθμος που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μοναδικό αρχείο. Το blog περιγράφει την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και έναν ταχύτερο τρόπο που περιλαμβάνει να **εκτελέσετε την εφαρμογή και να συλλέξετε τα αποσυμπιεσμένα αρχεία από το filesystem.**
|
||||
|
||||
### Automated Static Code Analysis
|
||||
### Αυτοματοποιημένη Στατική Code Ανάλυση
|
||||
|
||||
Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να εντοπίζει **vulnerabilities** σαρώνοντας τον **code** της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από **known sources** (που δείχνουν στο εργαλείο τα **σημεία** όπου το **input** ελέγχεται από τον χρήστη), **sinks** (που δείχνουν στο εργαλείο **επικίνδυνα** **σημεία** όπου κακόβουλο input χρήστη μπορεί να προκαλέσει ζημιά) και **rules**. Αυτοί οι κανόνες υποδεικνύουν τον **συνδυασμό** **sources-sinks** που υποδηλώνει μια vulnerability.
|
||||
Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να εντοπίζει **vulnerabilities** κάνοντας **scanning** του **code** της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από **known sources** (που υποδεικνύουν στο εργαλείο τα **places** όπου το **input** είναι **controlled by the user**), **sinks** (που υποδεικνύουν στο εργαλείο **dangerous** **places** όπου κακόβουλο user input θα μπορούσε να προκαλέσει βλάβες) και **rules**. Αυτοί οι κανόνες υποδεικνύουν τον **συνδυασμό** **sources-sinks** που δηλώνει μια vulnerability.
|
||||
|
||||
Με αυτή τη γνώση, **mariana-trench will review the code and find possible vulnerabilities on it**.
|
||||
Με αυτή τη γνώση, **mariana-trench θα ανασκοπήσει τον code και θα βρει πιθανές vulnerabilities σε αυτόν**.
|
||||
|
||||
### Secrets leaked
|
||||
|
||||
An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
Μια εφαρμογή μπορεί να περιέχει secrets (API keys, passwords, hidden urls, subdomains...) μέσα της που μπορεί να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### Bypass Biometric Authentication
|
||||
|
||||
@ -216,14 +216,14 @@ An application may contain secrets (API keys, passwords, hidden urls, subdomains
|
||||
bypass-biometric-authentication-android.md
|
||||
{{#endref}}
|
||||
|
||||
### Other interesting functions
|
||||
### Άλλες ενδιαφέρουσες λειτουργίες
|
||||
|
||||
- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load`
|
||||
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
|
||||
|
||||
### **Other tricks**
|
||||
### **Άλλα κόλπα**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -234,107 +234,115 @@ content-protocol.md
|
||||
|
||||
---
|
||||
|
||||
## Dynamic Analysis
|
||||
## Δυναμική Ανάλυση
|
||||
|
||||
> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.
|
||||
> Πρώτα απ' όλα, χρειάζεστε ένα περιβάλλον όπου μπορείτε να εγκαταστήσετε την εφαρμογή και όλο το απαραίτητο περιβάλλον (Burp CA cert, Drozer και Frida κυρίως). Επομένως, μια rooted συσκευή (emulated ή όχι) συνιστάται ιδιαίτερα.
|
||||
|
||||
### Online Dynamic analysis
|
||||
|
||||
Μπορείτε να δημιουργήσετε έναν **free account** στο: [https://appetize.io/](https://appetize.io). Αυτή η πλατφόρμα επιτρέπει να **upload** και να **execute** APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.
|
||||
Μπορείτε να δημιουργήσετε ένα **free account** στο: [https://appetize.io/](https://appetize.io). Αυτή η πλατφόρμα σας επιτρέπει να **upload** και να **execute** APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.
|
||||
|
||||
Μπορείτε ακόμα να **δειτε τα logs της εφαρμογής** στο web και να συνδεθείτε μέσω **adb**.
|
||||
Μπορείτε ακόμη να **δειτε τα logs της εφαρμογής σας** στο web και να συνδεθείτε μέσω **adb**.
|
||||
|
||||
.png>)
|
||||
|
||||
Χάρη στη σύνδεση ADB μπορείτε να χρησιμοποιήσετε **Drozer** και **Frida** μέσα στους emulators.
|
||||
Χάρη στη σύνδεση ADB μπορείτε να χρησιμοποιήσετε **Drozer** και **Frida** μέσα στα emulators.
|
||||
|
||||
### Local Dynamic Analysis
|
||||
### Τοπική Δυναμική Ανάλυση
|
||||
|
||||
#### Using an emulator
|
||||
#### Χρήση emulator
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator).
|
||||
- Learn to set it up in this page:
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι τελευταίες x86** εκδόσεις **υποστηρίζουν ARM βιβλιοθήκες** χωρίς να χρειάζεται ένας αργός arm emulator).
|
||||
- Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, χρειάζεται να δημιουργήσετε account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._)
|
||||
- [**Nox**](https://es.bignox.com) (Free, αλλά δεν υποστηρίζει Frida ή Drozer).
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, χρειάζεται να δημιουργήσετε account. _Συνιστάται να **κατεβάσετε** την έκδοση **ΜΕ**_ _**VirtualBox** για να αποφύγετε πιθανά σφάλματα._)
|
||||
- [**Nox**](https://es.bignox.com) (Δωρεάν, αλλά δεν υποστηρίζει Frida ή Drozer).
|
||||
|
||||
> [!TIP]
|
||||
> Όταν δημιουργείτε ένα νέο emulator σε οποιαδήποτε πλατφόρμα θυμηθείτε ότι όσο μεγαλύτερη είναι η οθόνη τόσο πιο αργά θα τρέχει ο emulator. Οπότε επιλέξτε μικρές οθόνες αν είναι δυνατό.
|
||||
> Όταν δημιουργείτε ένα νέο emulator σε οποιαδήποτε πλατφόρμα, θυμηθείτε ότι όσο μεγαλύτερη είναι η οθόνη τόσο πιο αργά θα τρέχει ο emulator. Επομένως επιλέξτε μικρές οθόνες αν είναι δυνατόν.
|
||||
|
||||
Για να **install google services** (όπως AppStore) στο Genymotion πρέπει να κάνετε κλικ στο κόκκινο κουμπί όπως στην εικόνα:
|
||||
Για να **install google services** (όπως AppStore) στο Genymotion πρέπει να πατήσετε το κόκκινο κουμπί που φαίνεται στην παρακάτω εικόνα:
|
||||
|
||||
.png>)
|
||||
|
||||
Επίσης, παρατηρήστε ότι στην **διαμόρφωση του Android VM στο Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν σκοπεύετε να συνδεθείτε στο Android VM από ένα διαφορετικό VM με τα εργαλεία).
|
||||
Επίσης, σημειώστε ότι στις **ρυθμίσεις του Android VM στο Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν θα συνδέεστε στο Android VM από ένα διαφορετικό VM με τα εργαλεία).
|
||||
|
||||
#### Use a physical device
|
||||
#### Χρήση φυσικής συσκευής
|
||||
|
||||
Πρέπει να ενεργοποιήσετε τις **debugging** επιλογές και θα είναι καλό αν μπορέσετε να το **root**:
|
||||
Πρέπει να ενεργοποιήσετε τις **επιλογές debugging** και είναι προτιμότερο αν μπορείτε να την **root**:
|
||||
|
||||
1. **Settings**.
|
||||
2. (FromAndroid 8.0) Select **System**.
|
||||
3. Select **About phone**.
|
||||
4. Press **Build number** 7 times.
|
||||
5. Go back and you will find the **Developer options**.
|
||||
2. (FromAndroid 8.0) Επιλέξτε **System**.
|
||||
3. Επιλέξτε **About phone**.
|
||||
4. Πατήστε **Build number** 7 φορές.
|
||||
5. Επιστρέψτε πίσω και θα βρείτε τις **Developer options**.
|
||||
|
||||
> Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο που πρέπει να κάνετε είναι να τη δοκιμάσετε και να εξερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\
|
||||
> Προτείνω να **εκτελέσετε αυτή την αρχική dynamic analysis χρησιμοποιώντας MobSF dynamic analysis + pidcat**, έτσι θα μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **συλλαμβάνει** πολλά **interesting** **data** που μπορείτε να ελέγξετε αργότερα.
|
||||
|
||||
Magisk/Zygisk quick notes (συνιστάται σε Pixel devices)
|
||||
- Patch το boot.img με την εφαρμογή Magisk και flash μέσω fastboot για να αποκτήσετε systemless root
|
||||
- Ενεργοποιήστε Zygisk + DenyList για απόκρυψη root; σκεφτείτε LSPosed/Shamiko όταν απαιτείται ισχυρότερη απόκρυψη
|
||||
- Κρατήστε το original boot.img για ανάκτηση μετά από OTA updates; επανα-παστάρετε μετά από κάθε OTA
|
||||
- Για screen mirroring, χρησιμοποιήστε scrcpy στον host
|
||||
|
||||
|
||||
> Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να τη δοκιμάσετε, να διερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτή.\
|
||||
> Προτείνω να **εκτελέσετε αυτή την αρχική δυναμική ανάλυση χρησιμοποιώντας MobSF dynamic analysis + pidcat**, έτσι ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **captures** πολλά **interesting** **data** που μπορείτε να εξετάσετε αργότερα.
|
||||
|
||||
### Unintended Data Leakage
|
||||
|
||||
**Logging**
|
||||
|
||||
Οι developers πρέπει να είναι προσεκτικοί με την έκθεση **debugging information** δημόσια, καθώς μπορεί να οδηγήσει σε ευαίσθητα data leaks. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των application logs ώστε να εντοπιστούν και να προστατευθούν ευαίσθητες πληροφορίες. Το **Pidcat** προτιμάται για την ευκολία χρήσης και την αναγνωσιμότητα.
|
||||
Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί ώστε να μην εκθέτουν **debugging information** δημόσια, καθώς αυτό μπορεί να οδηγήσει σε ευαίσθητα data leaks. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για παρακολούθηση των logs της εφαρμογής ώστε να εντοπιστούν και να προστατευθούν ευαίσθητες πληροφορίες. **Pidcat** προτιμάται για την ευκολία χρήσης και την αναγνωσιμότητα.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι από **εκδόσεις μεταγενέστερες του Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να προσεγγίσουν logs άλλων apps.\
|
||||
> Παρ' όλα αυτά, εξακολουθεί να συνιστάται να **μην καταγράφετε ευαίσθητες πληροφορίες**.
|
||||
> Σημειώστε ότι από **later newer than Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Επομένως οι εφαρμογές δεν μπορούν να αποκτήσουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Παρ' όλα αυτά, εξακολουθεί να συνιστάται **να μην καταγράφονται ευαίσθητες πληροφορίες**.
|
||||
|
||||
**Copy/Paste Buffer Caching**
|
||||
|
||||
Το Android **clipboard-based** framework επιτρέπει λειτουργίες copy-paste στις εφαρμογές, αλλά αποτελεί ρίσκο καθώς **άλλες εφαρμογές** μπορούν να έχουν **access** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιούνται οι copy/paste** λειτουργίες για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποφευχθούν data leaks.
|
||||
Το **clipboard-based** πλαίσιο του Android επιτρέπει λειτουργίες copy-paste στις εφαρμογές, ωστόσο εγκυμονεί ρίσκο καθώς **άλλες εφαρμογές** μπορούν να έχουν **πρόσβαση** στο clipboard, ενδεχομένως εκθέτοντας ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιείτε τις λειτουργίες copy/paste** σε ευαίσθητα τμήματα μιας εφαρμογής, όπως στοιχεία πιστωτικών καρτών, για να αποτρέψετε data leaks.
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
Αν μια εφαρμογή **crashes** και **αποθηκεύει logs**, αυτά τα logs μπορούν να βοηθήσουν attackers, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να γίνει reverse-engineered. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε το logging σε crashes, και αν πρέπει να μεταδοθούν logs μέσω δικτύου βεβαιωθείτε ότι αποστέλλονται μέσω SSL καναλιού για ασφάλεια.
|
||||
Αν μια εφαρμογή **crashes** και **αποθηκεύει logs**, αυτά τα logs μπορούν να βοηθήσουν attackers, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να γίνει reverse-engineering. Για να μειώσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε crashes, και αν logs πρέπει να σταλούν μέσω δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω SSL channel για ασφάλεια.
|
||||
|
||||
Ως pentester, **try to take a look to these logs**.
|
||||
Ως pentester, **προσπαθήστε να ρίξετε μια ματιά στα logs αυτά**.
|
||||
|
||||
**Analytics Data Sent To 3rd Parties**
|
||||
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως Google Adsense, που μπορεί ακούσια να **leak sensitive data** λόγω εσφαλμένης υλοποίησης από τους developers. Για να εντοπίσετε πιθανές διαρροές, είναι χρήσιμο να **intercept the application's traffic** και να ελέγξετε αν ευαίσθητες πληροφορίες αποστέλλονται σε third-party services.
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως Google Adsense, οι οποίες μπορούν κατά λάθος να **leak** ευαίσθητα δεδομένα λόγω ακατάλληλης υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι συνετό να **παρεμβαίνετε στην κίνηση της εφαρμογής** και να ελέγχετε για οποιεσδήποτε ευαίσθητες πληροφορίες που αποστέλλονται σε τρίτους.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
Οι περισσότερες εφαρμογές θα χρησιμοποιήσουν **internal SQLite databases** για να αποθηκεύσουν πληροφορίες. Κατά το pentest ρίξτε μια **ματιά** στις **databases** που δημιουργούνται, στα ονόματα των **tables** και **columns** και σε όλα τα **δεδομένα** που αποθηκεύονται γιατί μπορεί να βρείτε **ευαίσθητες πληροφορίες** (που θα αποτελούσαν vulnerability).\
|
||||
Οι περισσότερες εφαρμογές θα χρησιμοποιήσουν **internal SQLite databases** για να αποθηκεύσουν πληροφορίες. Κατά τη διάρκεια του pentest ρίξτε μια **ματιά** στις **βάσεις δεδομένων** που δημιουργούνται, τα ονόματα των **πινάκων** και των **στηλών** και όλα τα **δεδομένα** που αποθηκεύονται γιατί μπορεί να βρείτε **ευαίσθητες πληροφορίες** (που θα ήταν vulnerability).\
|
||||
Οι βάσεις δεδομένων θα πρέπει να βρίσκονται στο `/data/data/the.package.name/databases` όπως `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Αν η βάση δεδομένων αποθηκεύει εμπιστευτικές πληροφορίες και είναι **encrypted** αλλά μπορείτε να **find** τον **password** μέσα στην εφαρμογή, αυτό εξακολουθεί να είναι μια **vulnerability**.
|
||||
Εάν η βάση δεδομένων αποθηκεύει εμπιστευτικές πληροφορίες και είναι **encrypted** αλλά μπορείτε να **βρείτε** το **password** μέσα στην εφαρμογή, αυτό εξακολουθεί να αποτελεί **vulnerability**.
|
||||
|
||||
Καταγράψτε τα tables με `.tables` και τις στήλες των tables με `.schema <table_name>`
|
||||
Απαριθμήστε τους πίνακες χρησιμοποιώντας `.tables` και απαριθμήστε τις στήλες των πινάκων με `.schema <table_name>`
|
||||
|
||||
### Drozer (Exploit Activities, Content Providers and Services)
|
||||
|
||||
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
|
||||
Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections.
|
||||
Από τα [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** σας επιτρέπει να **υποδυθείτε τον ρόλο μιας Android app** και να αλληλεπιδράσετε με άλλες εφαρμογές. Μπορεί να κάνει **οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή**, όπως να χρησιμοποιήσει τον μηχανισμό Inter-Process Communication (IPC) του Android και να αλληλεπιδράσει με το underlying operating system. .\
|
||||
Το Drozer είναι ένα χρήσιμο εργαλείο για να **εκμεταλλευτείτε exported activities, exported services και Content Providers** όπως θα μάθετε στις επόμενες ενότητες.
|
||||
|
||||
### Exploiting exported Activities
|
||||
|
||||
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Also remember that the code of an activity starts in the **`onCreate`** method.
|
||||
Θυμηθείτε επίσης ότι ο κώδικας μιας activity ξεκινάει στη μέθοδο **`onCreate`**.
|
||||
|
||||
**Authorisation bypass**
|
||||
|
||||
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.**
|
||||
Όταν μια Activity είναι exported μπορείτε να καλέσετε την οθόνη της από μια εξωτερική app. Επομένως, αν μια activity με **ευαίσθητες πληροφορίες** είναι **exported** θα μπορούσατε να **bypass** τους μηχανισμούς authentication για να έχετε πρόσβαση σε αυτήν.
|
||||
|
||||
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
You can also start an exported activity from adb:
|
||||
Μπορείτε επίσης να ξεκινήσετε μια exported activity από adb:
|
||||
|
||||
- PackageName is com.example.demo
|
||||
- Exported ActivityName is com.example.test.MainActivity
|
||||
@ -344,105 +352,105 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
**NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Σημειώστε ότι ένα authorisation bypass δεν είναι πάντα μια ευπάθεια — εξαρτάται από το πώς λειτουργεί το bypass και ποιες πληροφορίες εκτίθενται.
|
||||
> Σημειώστε ότι ένα authorisation bypass δεν είναι πάντα ευπάθεια — εξαρτάται από το πώς λειτουργεί το bypass και ποιες πληροφορίες εκτίθενται.
|
||||
|
||||
**Sensitive information leakage**
|
||||
|
||||
**Activities can also return results**. Εάν καταφέρετε να εντοπίσετε μια exported και unprotected activity που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει sensitive information leakage.
|
||||
**Activities can also return results**. Εάν καταφέρετε να βρείτε μια exported και unprotected activity που καλεί την μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει sensitive information leakage.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Εάν το Tapjacking δεν αποτρέπεται, μπορείτε να καταχραστείτε την exported activity για να κάνετε τον **user να εκτελέσει απροσδόκητες ενέργειες**. For more info about [**what is Tapjacking follow the link**](#tapjacking).
|
||||
If tapjacking isn't prevented, μπορείτε να καταχραστείτε την exported activity για να κάνετε τον χρήστη να εκτελέσει **απρόσμενες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**what is Tapjacking follow the link**](#tapjacking).
|
||||
|
||||
### Exploiting Content Providers - Accessing and manipulating sensitive information
|
||||
|
||||
[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
Οι Content providers χρησιμοποιούνται βασικά για να **share data**. Εάν μια εφαρμογή έχει διαθέσιμους content providers μπορεί να είστε ικανοί να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Επίσης είναι ενδιαφέρον να ελέγξετε για πιθανές **SQL injections** και **Path Traversals** καθώς μπορεί να είναι ευάλωτοι.
|
||||
[**Διαβάστε αυτό αν θέλετε να επαναλάβετε τι είναι ένας Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
Οι Content providers χρησιμοποιούνται βασικά για το **μοιράσμα δεδομένων**. Εάν μια εφαρμογή διαθέτει content providers, μπορεί να καταφέρετε να **εξάγετε ευαίσθητα** δεδομένα από αυτά. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς μπορεί να είναι ευάλωτες.
|
||||
|
||||
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Content Providers με το Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Exploiting Services**
|
||||
|
||||
[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\
|
||||
[**Διαβάστε αυτό αν θέλετε να επαναλάβετε τι είναι ένα Service.**](android-applications-basics.md#services)\
|
||||
Θυμηθείτε ότι οι ενέργειες ενός Service ξεκινούν στη μέθοδο `onStartCommand`.
|
||||
|
||||
Ένα Service είναι βασικά κάτι που **can receive data**, **process** it και **returns** (ή όχι) μια απάντηση. Έτσι, εάν μια εφαρμογή εξάγει κάποια services θα πρέπει να **ελέγξετε** τον **κώδικα** για να καταλάβετε τι κάνει και να το **δοκιμάσετε** **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, να παρακάμψετε μέτρα authentication...\
|
||||
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
|
||||
Ένα Service είναι βασικά κάτι που **μπορεί να λαμβάνει δεδομένα**, να τα **επεξεργάζεται** και να **επιστρέφει** (ή όχι) μια απάντηση. Επομένως, αν μια εφαρμογή exports κάποια services θα πρέπει να **ελέγξετε** τον **κώδικα** για να καταλάβετε τι κάνει και να τα **δοκιμάσετε** **δυναμικά** για εξαγωγή εμπιστευτικών πληροφοριών, παράκαμψη μέτρων authentication...\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Services με το Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Exploiting Broadcast Receivers**
|
||||
|
||||
[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
[**Διαβάστε αυτό αν θέλετε να επαναλάβετε τι είναι ένα Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Θυμηθείτε ότι οι ενέργειες ενός Broadcast Receiver ξεκινούν στη μέθοδο `onReceive`.
|
||||
|
||||
Ένας broadcast receiver θα περιμένει έναν τύπο μηνύματος. Ανάλογα με το πώς ο receiver χειρίζεται το μήνυμα, θα μπορούσε να είναι ευάλωτος.\
|
||||
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
|
||||
Ένας Broadcast Receiver θα περιμένει έναν τύπο μηνύματος. Ανάλογα με το πώς ο receiver χειρίζεται το μήνυμα, μπορεί να είναι ευάλωτος.\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Broadcast Receivers με το Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Exploiting Schemes / Deep links**
|
||||
|
||||
Μπορείτε να ψάξετε για deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή scripts όπως [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Μπορείτε να **open** ένα δηλωμένο **scheme** χρησιμοποιώντας **adb** ή έναν **browser**:
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **scheme** χρησιμοποιώντας **adb** ή έναν **browser**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_Σημειώστε ότι μπορείτε να **παραλείψετε το package name** και το κινητό θα καλέσει αυτόματα την εφαρμογή που θα πρέπει να ανοίξει αυτόν τον σύνδεσμο._
|
||||
_Σημειώστε ότι μπορείτε να **παραλείψετε το όνομα του πακέτου** και το κινητό θα καλέσει αυτόματα την εφαρμογή που πρέπει να ανοίξει αυτόν τον σύνδεσμο._
|
||||
```html
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
<!-- fallback in your url you could try the intent url -->
|
||||
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
||||
```
|
||||
**Κώδικας που εκτελείται**
|
||||
**Εκτελούμενος κώδικας**
|
||||
|
||||
Για να βρεις τον **κώδικα που θα εκτελεστεί στην App**, πήγαινε στην activity που καλείται από το deeplink και ψάξε τη συνάρτηση **`onNewIntent`**.
|
||||
Για να βρείτε τον **κώδικα που θα εκτελεστεί στην App**, μεταβείτε στη δραστηριότητα που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
|
||||
|
||||
 (1) (1) (1).png>)
|
||||
|
||||
**Ευαίσθητες πληροφορίες**
|
||||
|
||||
Κάθε φορά που βρίσκεις ένα deep link, έλεγξε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (π.χ. κωδικούς) μέσω παραμέτρων URL**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε **να μιμηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
|
||||
Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω URL παραμέτρων**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε να **μιμηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
|
||||
|
||||
**Parameters in path**
|
||||
**Παράμετροι στο path**
|
||||
|
||||
Πρέπει επίσης να ελέγξεις αν κάποιο deep link χρησιμοποιεί παράμετρο μέσα στο path της URL όπως: `https://api.example.com/v1/users/{username}` , σε αυτή την περίπτωση μπορείς να προκαλέσεις path traversal προσπελάζοντας κάτι σαν: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
Σημείωσε ότι αν βρεις τα σωστά endpoints μέσα στην εφαρμογή μπορεί να καταφέρεις να προκαλέσεις ένα **Open Redirect** (αν μέρος του path χρησιμοποιείται ως domain name), **account takeover** (αν μπορείς να τροποποιήσεις στοιχεία χρηστών χωρίς CSRF token και το vuln endpoint χρησιμοποιούσε τη σωστή μέθοδο) και οποιοδήποτε άλλο vuln. Περισσότερες [info about this here](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Πρέπει επίσης να **ελέγξετε αν κάποιο deep link χρησιμοποιεί παράμετρο μέσα στο path** του URL όπως: `https://api.example.com/v1/users/{username}` , σε αυτή την περίπτωση μπορείτε να αναγκάσετε path traversal προσπελάζοντας κάτι σαν: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή ίσως να μπορείτε να προκαλέσετε ένα **Open Redirect** (εάν μέρος του path χρησιμοποιείται ως domain name), **account takeover** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το vuln endpoint χρησιμοποιούσε τη σωστή μέθοδο) και οποιοδήποτε άλλο vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**More examples**
|
||||
**Περισσότερα παραδείγματα**
|
||||
|
||||
An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Transport Layer Inspection and Verification Failures
|
||||
### Έλεγχος Επιπέδου Μεταφοράς και Σφάλματα Επαλήθευσης
|
||||
|
||||
- **Certificates are not always inspected properly** από τις Android εφαρμογές. Είναι συνηθισμένο αυτές οι εφαρμογές να αγνοούν προειδοποιήσεις και να αποδέχονται self-signed certificates ή, σε κάποιες περιπτώσεις, να επιστρέφουν στη χρήση HTTP connections.
|
||||
- **Negotiations during the SSL/TLS handshake are sometimes weak**, χρησιμοποιώντας insecure cipher suites. Αυτή η ευπάθεια κάνει τη σύνδεση επιρρεπή σε man-in-the-middle (MITM) attacks, επιτρέποντας σε επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Leakage of private information** είναι ένας κίνδυνος όταν εφαρμογές αυθεντικοποιούνται χρησιμοποιώντας secure channels αλλά μετά επικοινωνούν μέσω non-secure channels για άλλες συναλλαγές. Αυτή η προσέγγιση δεν προστατεύει ευαίσθητα δεδομένα, όπως session cookies ή στοιχεία χρηστών, από την υποκλοπή από κακόβουλους φορείς.
|
||||
- **Τα certificates δεν ελέγχονται πάντα σωστά** από εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται self-signed certificates ή, σε ορισμένες περιπτώσεις, να επανέρχονται στη χρήση HTTP συνδέσεων.
|
||||
- **Οι διαπραγματεύσεις κατά το SSL/TLS handshake μερικές φορές είναι αδύναμες**, χρησιμοποιώντας μη ασφαλείς cipher suites. Αυτή η ευαλωτότητα κάνει τη σύνδεση ευάλωτη σε man-in-the-middle (MITM) επιθέσεις, επιτρέποντας σε επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Διαρροή ιδιωτικών πληροφοριών** είναι κίνδυνος όταν εφαρμογές ταυτοποιούνται μέσω ασφαλών καναλιών αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών καναλιών για άλλες συναλλαγές. Αυτή η προσέγγιση δεν προστατεύει ευαίσθητα δεδομένα, όπως session cookies ή λεπτομέρειες χρηστών, από υποκλοπή από κακόβουλες οντότητες.
|
||||
|
||||
#### Certificate Verification
|
||||
#### Επαλήθευση Πιστοποιητικού
|
||||
|
||||
Θα επικεντρωθούμε στην **certificate verification**. Η ακεραιότητα του server's certificate πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο επειδή insecure TLS configurations και η μετάδοση ευαίσθητων δεδομένων πάνω από μη κρυπτογραφημένα κανάλια μπορούν να θέσουν σημαντικούς κινδύνους. Για αναλυτικά βήματα σχετικά με την επαλήθευση server certificates και την επιδιόρθωση ευπαθειών, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει πλήρεις οδηγίες.
|
||||
Θα επικεντρωθούμε σε **certificate verification**. Η ακεραιότητα του πιστοποιητικού του server πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο επειδή μη ασφαλείς TLS ρυθμίσεις και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορούν να προκαλέσουν σημαντικούς κινδύνους. Για λεπτομερή βήματα σχετικά με την επαλήθευση server certificates και την αντιμετώπιση ευπαθειών, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει ολοκληρωμένες οδηγίες.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το server's certificate σε σχέση με ένα γνωστό αντίγραφο που αποθηκεύεται μέσα στην εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την πρόληψη MITM attacks. Η υλοποίηση SSL Pinning συνιστάται έντονα για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του server με αντίγραφο γνωστό και αποθηκευμένο εντός της ίδιας της εφαρμογής. Αυτή η μέθοδος είναι ουσιώδης για την αποτροπή MITM επιθέσεων. Η υλοποίηση SSL Pinning συστήνεται έντονα για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
|
||||
#### Traffic Inspection
|
||||
|
||||
Για να ελέγξεις HTTP traffic, είναι απαραίτητο να **εγκαταστήσεις το certificate του proxy tool** (π.χ. Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, το κρυπτογραφημένο traffic μπορεί να μην είναι ορατό μέσω του proxy. Για οδηγό σχετικά με την εγκατάσταση custom CA certificate, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Για να ελέγξετε το HTTP traffic, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του proxy tool** (π.χ. Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, πιθανότατα η κρυπτογραφημένη κίνηση δεν θα είναι ορατή μέσω του proxy. Για οδηγό εγκατάστασης ενός custom CA certificate, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Εφαρμογές που στοχεύουν **API Level 24 and above** απαιτούν τροποποιήσεις στο Network Security Config για να αποδεχθούν το proxy's CA certificate. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένου traffic. Για οδηγίες σχετικά με την τροποποίηση του Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
|
||||
Εφαρμογές που στοχεύουν **API Level 24 and above** απαιτούν τροποποιήσεις στο Network Security Config για να αποδεχτούν το CA certificate του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση του Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Αν χρησιμοποιείται **Flutter** πρέπει να ακολουθήσεις τις οδηγίες στη [**this page**](flutter.md). Αυτό συμβαίνει επειδή, απλά προσθέτοντας το certificate στο store δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα με έγκυρα CAs.
|
||||
If **Flutter** is being used you need to to follow the instructions in [**this page**](flutter.md). This is becasue, just adding the certificate into the store won't work as Flutter has its own list of valid CAs.
|
||||
|
||||
#### Static detection of SSL/TLS pinning
|
||||
|
||||
Πριν επιχειρήσεις runtime bypasses, κάνε γρήγορο mapping του που εφαρμόζεται pinning στο APK. Η στατική ανακάλυψη βοηθά να σχεδιάσεις hooks/patches και να επικεντρωθείς στα σωστά code paths.
|
||||
Πριν επιχειρήσετε runtime bypasses, χαρτογραφήστε γρήγορα πού εφαρμόζεται το pinning στο APK. Η στατική ανίχνευση βοηθά στο να σχεδιάσετε hooks/patches και να εστιάσετε στα σωστά code paths.
|
||||
|
||||
Tool: SSLPinDetect
|
||||
- Open-source static-analysis utility που decompiles το APK σε Smali (via apktool) και σαρώνει για curated regex patterns υλοποιήσεων SSL/TLS pinning.
|
||||
- Αναφέρει ακριβές file path, αριθμό γραμμής, και ένα code snippet για κάθε match.
|
||||
- Καλύπτει κοινά frameworks και custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.
|
||||
- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations.
|
||||
- Reports exact file path, line number, and a code snippet for each match.
|
||||
- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.
|
||||
|
||||
Install
|
||||
- Prereqs: Python >= 3.8, Java on PATH, apktool
|
||||
Εγκατάσταση
|
||||
- Προαπαιτούμενα: Python >= 3.8, Java on PATH, apktool
|
||||
```bash
|
||||
git clone https://github.com/aancw/SSLPinDetect
|
||||
cd SSLPinDetect
|
||||
@ -456,8 +464,8 @@ python sslpindetect.py -f app.apk -a apktool.jar
|
||||
# Verbose (timings + per-match path:line + snippet)
|
||||
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
|
||||
```
|
||||
Παραδείγματα κανόνων pattern (JSON)
|
||||
Χρησιμοποιήστε ή επεκτείνετε signatures για να εντοπίσετε proprietary/custom pinning styles. Μπορείτε να φορτώσετε το δικό σας JSON και να σαρώσετε σε μεγάλη κλίμακα.
|
||||
Παραδείγματα κανόνων προτύπων (JSON)
|
||||
Χρησιμοποιήστε ή επεκτείνετε signatures για να εντοπίσετε ιδιόκτητα/προσαρμοσμένα στυλ pinning. Μπορείτε να φορτώσετε το δικό σας JSON και να scan σε μεγάλη κλίμακα.
|
||||
```json
|
||||
{
|
||||
"OkHttp Certificate Pinning": [
|
||||
@ -471,43 +479,43 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
|
||||
]
|
||||
}
|
||||
```
|
||||
Notes and tips
|
||||
- Γρήγορη σάρωση μεγάλων εφαρμογών μέσω multi-threading και memory-mapped I/O; προ-συμπιεσμένα regex μειώνουν την επιβάρυνση και τα ψευδώς θετικά.
|
||||
Σημειώσεις και συμβουλές
|
||||
- Γρήγορο σκανάρισμα σε μεγάλες εφαρμογές μέσω multi-threading και memory-mapped I/O; pre-compiled regex μειώνει το overhead/false positives.
|
||||
- Συλλογή patterns: https://github.com/aancw/smali-sslpin-patterns
|
||||
- Τυπικοί στόχοι ανίχνευσης για περαιτέρω αξιολόγηση:
|
||||
- OkHttp: χρήση CertificatePinner, setCertificatePinner, αναφορές πακέτου okhttp3/okhttp
|
||||
- OkHttp: χρήση CertificatePinner, setCertificatePinner, okhttp3/okhttp package references
|
||||
- Custom TrustManagers: javax.net.ssl.X509TrustManager, overrides του checkServerTrusted
|
||||
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init με custom managers
|
||||
- Declarative pins στο res/xml network security config και αναφορές στο manifest
|
||||
- Χρησιμοποιήστε τις αντιστοιχισμένες τοποθεσίες για να σχεδιάσετε Frida hooks, static patches ή ελέγχους config πριν από dynamic testing.
|
||||
- Declarative pins σε res/xml network security config και αναφορές στο manifest
|
||||
- Χρησιμοποιήστε τις εντοπισμένες θέσεις για να σχεδιάσετε Frida hooks, static patches ή ανασκοπήσεις config πριν από dynamic testing.
|
||||
|
||||
|
||||
|
||||
#### Bypassing SSL Pinning
|
||||
#### Παράκαμψη SSL Pinning
|
||||
|
||||
Όταν το SSL Pinning εφαρμόζεται, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της HTTPS κίνησης. Υπάρχουν διάφορες μέθοδοι για αυτό:
|
||||
Όταν εφαρμόζεται SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση του HTTPS traffic. Υπάρχουν διάφορες μέθοδοι διαθέσιμες για αυτόν τον σκοπό:
|
||||
|
||||
- Αυτόματη **τροποποίηση** του **apk** για **παράκαμψη** SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το μεγαλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε ξανά τη νέα, και αυτό δεν δουλεύει πάντα.
|
||||
- Μπορείτε να χρησιμοποιήσετε **Frida** (αναφέρεται παρακάτω) για να παρακάμψετε αυτήν την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **αυτόματα παρακάμψετε** το SSL Pinning χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **αυτόματα παρακάμψετε** το SSL Pinning χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω)
|
||||
- Εάν ακόμα νομίζετε ότι υπάρχει κίνηση που δεν καταγράφετε, μπορείτε να δοκιμάσετε να **προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- Αυτόματα **τροποποιήσετε** το **apk** για να **παρακάμψετε** SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το κύριο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν δουλεύει πάντα.
|
||||
- Μπορείτε να χρησιμοποιήσετε **Frida** (συζητιέται παρακάτω) για να παρακάμψετε αυτήν την προστασία. Εδώ υπάρχει ένας οδηγός για χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω)
|
||||
- Αν νομίζετε ότι υπάρχει ακόμα κίνηση που δεν καταγράφετε, μπορείτε να δοκιμάσετε να **προωθήσετε την κίνηση στο Burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Looking for Common Web Vulnerabilities
|
||||
#### Αναζήτηση κοινών web ευπαθειών
|
||||
|
||||
Είναι σημαντικό επίσης να αναζητήσετε κοινές web ευπάθειες μέσα στην εφαρμογή. Αναλυτικές πληροφορίες για τον εντοπισμό και την αντιμετώπιση αυτών των ευπαθειών υπερβαίνουν το πεδίο αυτής της περίληψης αλλά καλύπτονται εκτενώς αλλού.
|
||||
Είναι σημαντικό επίσης να αναζητήσετε κοινές web ευπάθειες μέσα στην εφαρμογή. Λεπτομέρειες για τον εντοπισμό και την αντιμετώπιση αυτών των ευπαθειών υπερβαίνουν το πλαίσιο αυτής της περίληψης αλλά καλύπτονται εκτενώς αλλού.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) είναι ένα dynamic instrumentation toolkit για developers, reverse-engineers και security researchers.\
|
||||
**Μπορείτε να έχετε πρόσβαση σε μια τρέχουσα εφαρμογή και να κάνετε hook μεθόδους σε runtime για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να τρέξετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να pentest εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
**Μπορείτε να αποκτήσετε πρόσβαση σε τρέχουσα εφαρμογή και να κάνετε hook μεθόδους κατά το runtime για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να pentest Android applications πρέπει να ξέρετε πώς να χρησιμοποιείτε Frida.
|
||||
|
||||
- Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Κάποιες "GUI" λύσεις για ενέργειες με Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Μάθετε πώς να χρησιμοποιείτε Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Κάποια "GUI" για ενέργειες με Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Μπορείτε να βρείτε μερικά Awesome Frida scripts εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Δοκιμάστε να παρακάμψετε anti-debugging / anti-frida μηχανισμούς φορτώνοντας το Frida όπως υποδεικνύεται στο [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Προσπαθήστε να παρακάμψετε anti-debugging / anti-frida μηχανισμούς φορτώνοντας το Frida όπως υποδεικνύεται στο [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
#### Anti-instrumentation & SSL pinning bypass workflow
|
||||
|
||||
@ -517,7 +525,7 @@ android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||
|
||||
### **Dump Memory - Fridump**
|
||||
|
||||
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες στη μνήμη που δεν θα έπρεπε, όπως passwords ή mnemonics.
|
||||
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες στη μνήμη που δεν θα έπρεπε να αποθηκεύει, όπως passwords ή mnemonics.
|
||||
|
||||
Χρησιμοποιώντας [**Fridump3**](https://github.com/rootbsd/fridump3) μπορείτε να κάνετε dump τη μνήμη της εφαρμογής με:
|
||||
```bash
|
||||
@ -534,11 +542,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **Ευαίσθητα δεδομένα στο Keystore**
|
||||
|
||||
Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με επαρκή προνόμια εξακολουθεί να είναι **δυνατό να αποκτηθεί πρόσβαση σε αυτό**.
|
||||
Στο Android το Keystore είναι το καλύτερο μέρος για την αποθήκευση ευαίσθητων δεδομένων, ωστόσο, με επαρκή προνόμια εξακολουθεί να είναι **εφικτό να αποκτηθεί πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε clear text**, οι pentests θα πρέπει να το ελέγχουν, καθώς ένας root user ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να κλέψει αυτά τα δεδομένα.
|
||||
|
||||
Δεδομένου ότι οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε απλό κείμενο**, τα pentests πρέπει να το ελέγχουν ως root χρήστης, διότι κάποιος με φυσική πρόσβαση στη συσκευή μπορεί να καταφέρει να κλέψει αυτά τα δεδομένα.
|
||||
|
||||
Ακόμα κι αν μια εφαρμογή αποθήκευσε δεδομένα στο keystore, αυτά θα πρέπει να είναι κρυπτογραφημένα.
|
||||
Ακόμη και αν μια εφαρμογή αποθήκευε δεδομένα στο keystore, τα δεδομένα πρέπει να είναι κρυπτογραφημένα.
|
||||
|
||||
Για να αποκτήσετε πρόσβαση στα δεδομένα μέσα στο keystore μπορείτε να χρησιμοποιήσετε αυτό το Frida script: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
@ -546,47 +552,47 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Χρησιμοποιώντας το παρακάτω Frida script, ενδέχεται να είναι δυνατό να **bypass fingerprint authentication** που πιθανώς εφαρμόζουν οι Android εφαρμογές για να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
|
||||
Χρησιμοποιώντας το ακόλουθο Frida script, είναι πιθανό να γίνει **bypass fingerprint authentication** που μπορεί να εκτελούν οι εφαρμογές Android, προκειμένου να **προστατέψουν ορισμένες ευαίσθητες περιοχές:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **Εικόνες φόντου**
|
||||
### **Εικόνες παρασκηνίου**
|
||||
|
||||
Όταν τοποθετείτε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει ένα **στιγμιότυπο της εφαρμογής** ώστε όταν επανέλθει στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει ένα **στιγμιότυπο της εφαρμογής** ώστε όταν επανέλθει στο προσκήνιο να αρχίζει να φορτώνει την εικόνα πριν από την εφαρμογή, έτσι φαίνεται σαν να φορτώθηκε η εφαρμογή πιο γρήγορα.
|
||||
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημείωση: χρειάζεστε root για να έχετε πρόσβαση).
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημείωση: χρειάζεστε root για να αποκτήσετε πρόσβαση).
|
||||
|
||||
Τα στιγμιότυπα συνήθως αποθηκεύονται στο: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Το Android παρέχει έναν τρόπο για **να αποτρέψει τη λήψη στιγμιότυπων οθόνης ρυθμίζοντας το layout parameter FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνισή του σε στιγμιότυπα οθόνης ή την προβολή του σε μη ασφαλείς οθόνες.
|
||||
Το Android παρέχει έναν τρόπο για **να αποτρέψει τη λήψη στιγμιότυπων οθόνης θέτοντας την παράμετρο layout FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, τα περιεχόμενα του παραθύρου αντιμετωπίζονται ως ασφαλή, αποτρέποντας την εμφάνισή τους σε στιγμιότυπα οθόνης ή να προβληθούν σε μη ασφαλείς οθόνες.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
### **Android Application Analyzer**
|
||||
|
||||
Αυτό το εργαλείο μπορεί να σας βοηθήσει να διαχειριστείτε διαφορετικά εργαλεία κατά τη dynamic analysis: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
This tool could help you managing different tools during the dynamic analysis: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
|
||||
### Intent Injection
|
||||
|
||||
Οι developers συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, κάτι που μπορεί να είναι επικίνδυνο.
|
||||
Οι developers συχνά δημιουργούν proxy components όπως activities, services, και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, κάτι που μπορεί να είναι επικίνδυνο.
|
||||
|
||||
Ο κίνδυνος έγκειται στο να επιτρέπονται σε επιτιθέμενους να ενεργοποιούν non-exported app components ή να αποκτούν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το `WebView` component που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε malicious Intent injections.
|
||||
Ο κίνδυνος έγκειται στο ότι επιτρέπεται σε επιτιθέμενους να ενεργοποιούν μη-exported components της εφαρμογής ή να αποκτούν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα χαρακτηριστικό παράδειγμα είναι το `WebView` component που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες Intent injections.
|
||||
|
||||
### Essential Takeaways
|
||||
|
||||
- **Intent Injection** είναι παρόμοιο με το web Open Redirect issue.
|
||||
- Exploits περιλαμβάνουν το πέρασμα αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς ενέργειες.
|
||||
- Μπορεί να εκθέσει non-exported components και content providers σε επιτιθέμενους.
|
||||
- **Intent Injection** είναι παρόμοιο με το Open Redirect στο web.
|
||||
- Οι εκμεταλλεύσεις περιλαμβάνουν τη μεταβίβαση αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν ώστε να εκτελέσουν μη ασφαλείς ενέργειες.
|
||||
- Μπορεί να εκθέσει μη-exported components και content providers σε επιτιθέμενους.
|
||||
- Η μετατροπή URL σε `Intent` από το `WebView` μπορεί να διευκολύνει ανεπιθύμητες ενέργειες.
|
||||
|
||||
### Android Client Side Injections and others
|
||||
|
||||
Πιθανώς γνωρίζετε αυτού του είδους τις ευπάθειες από το Web. Πρέπει να είστε ιδιαιτέρως προσεκτικοί με αυτές τις ευπάθειες σε μια Android εφαρμογή:
|
||||
Πιθανόν να γνωρίζετε αυτό το είδος ευπαθειών από τον Web. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια Android εφαρμογή:
|
||||
|
||||
- **SQL Injection:** Όταν χειρίζεστε dynamic queries ή Content-Providers βεβαιωθείτε ότι χρησιμοποιείτε parameterized queries.
|
||||
- **JavaScript Injection (XSS):** Επιβεβαιώστε ότι το JavaScript και το Plugin support είναι απενεργοποιημένα για οποιαδήποτε WebViews (απενεργοποιημένα από προεπιλογή). [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Local File Inclusion:** Οι WebViews θα πρέπει να έχουν την πρόσβαση στο file system απενεργοποιημένη (ενεργοποιημένη από προεπιλογή) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Eternal cookies**: Σε αρκετές περιπτώσεις όταν η android εφαρμογή τελειώνει το session, το cookie δεν ανακαλείται ή μπορεί ακόμη και να αποθηκευτεί στο δίσκο
|
||||
- **SQL Injection:** Όταν χειρίζεστε δυναμικά queries ή Content-Providers, βεβαιωθείτε ότι χρησιμοποιείτε parameterized queries.
|
||||
- **JavaScript Injection (XSS):** Επαληθεύστε ότι το JavaScript και η υποστήριξη Plugin είναι απενεργοποιημένα για οποιαδήποτε WebViews (απενεργοποιημένα από προεπιλογή). [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Local File Inclusion:** Τα WebViews θα πρέπει να έχουν απενεργοποιημένη την πρόσβαση στο file system (ενεργοποιημένη εξ ορισμού) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Eternal cookies**: Σε αρκετές περιπτώσεις όταν η android εφαρμογή τερματίζει τη συνεδρία το cookie δεν ανακαλείται ή μπορεί ακόμη να αποθηκευτεί στο δίσκο
|
||||
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
@ -595,55 +601,55 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
||||
|
||||
**Static analysis**
|
||||
**Στατική ανάλυση**
|
||||
|
||||
.png>)
|
||||
|
||||
Αξιολόγηση ευπαθειών της εφαρμογής χρησιμοποιώντας ένα όμορφο web-based frontend. Μπορείτε επίσης να πραγματοποιήσετε dynamic analysis (αλλά πρέπει να προετοιμάσετε το περιβάλλον).
|
||||
**Αξιολόγηση ευπαθειών της εφαρμογής** χρησιμοποιώντας ένα ωραίο web-based frontend. Μπορείτε επίσης να εκτελέσετε δυναμική ανάλυση (αλλά πρέπει να προετοιμάσετε το περιβάλλον).
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Σημειώστε ότι το MobSF μπορεί να αναλύσει **Android**(apk), **IOS**(ipa) και **Windows**(apx) εφαρμογές (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\
|
||||
Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον source code μιας **Android** ή μιας **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), θα μπορεί να το αναλύσει κι αυτό.
|
||||
Notice that MobSF can analyse **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\
|
||||
Also, if you create a **ZIP** file with the source code if an **Android** or an **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.
|
||||
|
||||
MobSF επίσης επιτρέπει να κάνετε **diff/Compare** analysis και να ενσωματώσετε το **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να θέσετε `VT_UPLOAD` σε `False`, τότε το **hash** θα γίνει **upload** αντί του αρχείου.
|
||||
MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file.
|
||||
|
||||
### Βοηθούμενη Dynamic analysis με MobSF
|
||||
|
||||
**MobSF** μπορεί επίσης να είναι πολύ χρήσιμο για **dynamic analysis** σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το **genymotion** στον host σας (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
|
||||
Ο **MobSF dynamic analyser** μπορεί να:
|
||||
Το MobSF μπορεί επίσης να είναι πολύ χρήσιμο για Dynamic analysis σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και **genymotion** στο host σας (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
|
||||
Ο **MobSF dynamic analyser** μπορεί:
|
||||
|
||||
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots — πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε "**Exported Activity Tester**" για να λάβετε screenshots όλων των exported activities.
|
||||
- Capture **HTTPS traffic**
|
||||
- Use **Frida** to obtain **runtime** **information**
|
||||
- Καταγραφή **HTTPS traffic**
|
||||
- Χρήση **Frida** για να αποκτήσει **runtime** **information**
|
||||
|
||||
Από Android **versions > 5**, θα **ξεκινήσει αυτόματα Frida** και θα ορίσει global **proxy** settings για να **capture** το traffic. Θα καταγράφει μόνο το traffic από την εφαρμογή υπό δοκιμή.
|
||||
From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application.
|
||||
|
||||
**Frida**
|
||||
|
||||
Εξ ορισμού, θα χρησιμοποιήσει επίσης μερικά Frida Scripts για να **bypass SSL pinning**, **root detection** και **debugger detection** και για να **monitor interesting APIs**.\
|
||||
Το MobSF μπορεί επίσης να **invoke exported activities**, να τραβήξει **screenshots** από αυτές και να τα **save** για την αναφορά.
|
||||
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
|
||||
MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report.
|
||||
|
||||
Για να **start** το dynamic testing πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε τα "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις invocation σε hooked methods, τα arguments που περνάνε και τις τιμές που επιστρέφονται (this will appear after pressing "Start Instrumentation").\
|
||||
Το MobSF επίσης επιτρέπει να φορτώσετε τα δικά σας **Frida scripts** (to send the results of your Frida scripts to MobSF use the function `send()`). Έχει επίσης **several pre-written scripts** που μπορείτε να φορτώσετε (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλώς **select them**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στα "**Frida Live Logs**").
|
||||
To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\
|
||||
MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
Επιπλέον, υπάρχουν μερικές βοηθητικές λειτουργίες Frida:
|
||||
Moreover, you have some Auxiliary Frida functionalities:
|
||||
|
||||
- **Enumerate Loaded Classes**: Εκτυπώνει όλες τις loaded classes
|
||||
- **Capture Strings**: Εκτυπώνει όλα τα captured strings κατά τη χρήση της εφαρμογής (super noisy)
|
||||
- **Enumerate Loaded Classes**: Θα εμφανίσει όλες τις loaded classes
|
||||
- **Capture Strings**: Θα εμφανίσει όλα τα captured strings ενώ χρησιμοποιείτε την εφαρμογή (super noisy)
|
||||
- **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τα 2 strings που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False.
|
||||
- **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης.
|
||||
- **Search Class Pattern**: Ψάχνει classes by pattern
|
||||
- **Trace Class Methods**: **Trace** ολόκληρη μια **class** (βλέπει inputs και outputs όλων των μεθόδων της κλάσης). Θυμηθείτε ότι εξ ορισμού το MobSF traces αρκετές ενδιαφέρουσες Android Api methods.
|
||||
- **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (π.χ. "java.io.File") και θα εμφανίσει όλες τις methods της κλάσης.
|
||||
- **Search Class Pattern**: Αναζήτηση classes με βάση pattern
|
||||
- **Trace Class Methods**: Trace μια ολόκληρη κλάση (δείτε τα inputs και outputs όλων των methods της κλάσης). Θυμηθείτε ότι εξ ορισμού το MobSF traces αρκετές ενδιαφέρουσες Android Api methods.
|
||||
|
||||
Μόλις επιλέξετε το auxiliary module που θέλετε να χρησιμοποιήσετε πρέπει να πατήσετε "**Start Instrumentation**" και θα δείτε όλα τα outputs στα "**Frida Live Logs**".
|
||||
Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf παρέχει επίσης ένα shell με μερικές εντολές **adb**, **MobSF commands**, και κοινές **shell** **commands** στο κάτω μέρος της σελίδας dynamic analysis. Κάποιες ενδιαφέρουσες εντολές:
|
||||
MobSF also brings you a shell with some **adb** commands, **MobSF commands**, and common **shell** **commands** at the bottom of the dynamic analysis page. Some interesting commands:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -654,13 +660,13 @@ receivers
|
||||
```
|
||||
**HTTP tools**
|
||||
|
||||
Όταν το http traffic καταγράφεται μπορείτε να δείτε μια άσχημη προβολή του καταγεγραμμένου traffic στο "**HTTP(S) Traffic**" κουμπί ή μια πιο όμορφη προβολή στο πράσινο κουμπί "**Start HTTPTools**". Από τη δεύτερη επιλογή, μπορείτε να **send** τα **captured requests** σε **proxies** όπως Burp ή Owasp ZAP.\
|
||||
Για να το κάνετε, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> πατήστε "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
Όταν η κίνηση http καταγράφεται, μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο κουμπί "**HTTP(S) Traffic**" στο κάτω μέρος ή μια πιο ευχάριστη προβολή στο πράσινο κουμπί "**Start HTTPTools**". Από τη δεύτερη επιλογή, μπορείτε να **send** τα **captured requests** σε **proxies** όπως το Burp ή το Owasp ZAP.\
|
||||
Για να το κάνετε, _power on Burp -->_ _turn off Intercept --> στο MobSB HTTPTools επιλέξτε το request_ --> πατήστε "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Μόλις τελειώσετε την dynamic analysis με MobSF μπορείτε να πατήσετε "**Start Web API Fuzzer**" για να **fuzz http requests** και να αναζητήσετε ευπάθειες.
|
||||
Once you finish the dynamic analysis with MobSF you can press on "**Start Web API Fuzzer**" to **fuzz http requests** an look for vulnerabilities.
|
||||
|
||||
> [!TIP]
|
||||
> Μετά την εκτέλεση μιας dynamic analysis με MobSF, οι ρυθμίσεις proxy ενδέχεται να είναι misconfigured και να μην μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις proxy κάνοντας:
|
||||
> Μετά την εκτέλεση δυναμικής ανάλυσης με MobSF, οι ρυθμίσεις proxy μπορεί να είναι λανθασμένες και να μην μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις proxy κάνοντας:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
@ -668,18 +674,18 @@ receivers
|
||||
|
||||
### Assisted Dynamic Analysis with Inspeckage
|
||||
|
||||
Μπορείτε να λάβετε το εργαλείο από [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Αυτό το εργαλείο θα χρησιμοποιήσει μερικά **Hooks** για να σας δείξει **what is happening in the application** ενώ εκτελείτε **dynamic analysis**.
|
||||
Μπορείτε να αποκτήσετε το εργαλείο από [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Αυτό το εργαλείο θα χρησιμοποιήσει κάποια **Hooks** για να σας ενημερώσει **τι συμβαίνει στην εφαρμογή** ενώ εκτελείτε μια **δυναμική ανάλυση**.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
Αυτό είναι ένα **great tool to perform static analysis with a GUI**
|
||||
Αυτό είναι ένα **εξαιρετικό εργαλείο για την εκτέλεση στατικής ανάλυσης με GUI**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά διάφορες **security related Android application vulnerabilities**, είτε σε **source code** είτε σε **packaged APKs**. Το εργαλείο είναι επίσης **capable of creating a "Proof-of-Concept" deployable APK** και **ADB commands**, για να εκμεταλλευτεί κάποιες από τις βρεθείσες ευπάθειες (Exposed activities, intents, tapjacking...). Όπως και με Drozer, δεν απαιτείται root στη συσκευή δοκιμής.
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να εντοπίζει διάφορες **security related Android application vulnerabilities**, είτε στον **source code** είτε σε **packaged APKs**. Το εργαλείο είναι επίσης **capable of creating a "Proof-of-Concept" deployable APK** και **ADB commands**, για να εκμεταλλευτεί μερικές από τις εντοπισμένες ευπάθειες (Exposed activities, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root τη συσκευή δοκιμών.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -688,22 +694,22 @@ qark --java path/to/specific/java/file.java
|
||||
```
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- Εμφανίζει όλα τα αρχεία που εξάχθηκαν για εύκολη αναφορά
|
||||
- Αυτόματη decompile των αρχείων APK σε μορφή Java και Smali
|
||||
- Εμφανίζει όλα τα εξαγόμενα αρχεία για εύκολη αναφορά
|
||||
- Απομεταγλωττίζει αρχεία APK αυτόματα σε μορφή Java και Smali
|
||||
- Αναλύει το AndroidManifest.xml για κοινές ευπάθειες και συμπεριφορά
|
||||
- Στατική ανάλυση του source code για κοινές ευπάθειες και συμπεριφορά
|
||||
- Στοιχεία συσκευής
|
||||
- και περισσότερα
|
||||
- Στατική ανάλυση πηγαίου κώδικα για κοινές ευπάθειες και συμπεριφορά
|
||||
- Πληροφορίες συσκευής
|
||||
- και άλλα
|
||||
```bash
|
||||
reverse-apk relative/path/to/APP.apk
|
||||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
Το SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, η οποία αναλύει αρχεία _.apk_ αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APKs και εφαρμόζοντας μια σειρά κανόνων για να εντοπίσει αυτές τις ευπάθειες.
|
||||
Το SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, και αναλύει αρχεία _.apk_ αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας APKs και εφαρμόζοντας μια σειρά κανόνων για να εντοπίσει αυτές τις ευπάθειες.
|
||||
|
||||
Όλοι οι κανόνες συγκεντρώνονται στο αρχείο `rules.json`, και κάθε εταιρεία ή tester μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.
|
||||
Όλοι οι κανόνες βρίσκονται σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή δοκιμαστής μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.
|
||||
|
||||
Κατεβάστε τα πιο πρόσφατα binaries από τη [download page](https://superanalyzer.rocks/download.html)
|
||||
Κατεβάστε τα τελευταία binaries από τη [download page](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
@ -711,9 +717,9 @@ super-analyzer {apk_file}
|
||||
|
||||
.png>)
|
||||
|
||||
StaCoAn είναι ένα **crossplatform** εργαλείο που βοηθά προγραμματιστές, bugbounty hunters και ethical hackers να πραγματοποιούν [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) σε mobile applications.
|
||||
StaCoAn είναι ένα **crossplatform** εργαλείο που βοηθά προγραμματιστές, bugbounty hunters και ethical hackers να πραγματοποιούν [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) σε εφαρμογές για κινητά.
|
||||
|
||||
Η ιδέα είναι ότι σύρετε και αποθέτετε το αρχείο της εφαρμογής κινητού σας (ένα .apk ή .ipa file) στην εφαρμογή StaCoAn και θα δημιουργήσει για εσάς μια οπτική και φορητή αναφορά. Μπορείτε να προσαρμόσετε τις ρυθμίσεις και τα wordlists για μια εξατομικευμένη εμπειρία.
|
||||
Η ιδέα είναι ότι σύρετε και αφήνετε το αρχείο της εφαρμογής σας για κινητά (ένα .apk ή .ipa αρχείο) στην εφαρμογή StaCoAn και αυτή θα δημιουργήσει για εσάς μια οπτική και φορητή αναφορά. Μπορείτε να τροποποιήσετε τις ρυθμίσεις και τα wordlists για να έχετε μια εξατομικευμένη εμπειρία.
|
||||
|
||||
Λήψη[ latest release](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
@ -721,7 +727,7 @@ StaCoAn είναι ένα **crossplatform** εργαλείο που βοηθά
|
||||
```
|
||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
||||
|
||||
Το AndroBugs Framework είναι ένα σύστημα ανάλυσης ευπαθειών για Android που βοηθά προγραμματιστές ή hackers να εντοπίσουν πιθανές ευπάθειες ασφαλείας σε εφαρμογές Android.\
|
||||
Το AndroBugs Framework είναι ένα Android vulnerability analysis σύστημα που βοηθά προγραμματιστές ή hackers να εντοπίσουν πιθανές security vulnerabilities σε Android εφαρμογές.\
|
||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||
```
|
||||
python androbugs.py -f [APK file]
|
||||
@ -729,11 +735,11 @@ androbugs.exe -f [APK file]
|
||||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύει και να ειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να εντοπίζει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που μπορεί να αναπτύξει μια Android εφαρμογή.
|
||||
|
||||
Η ανίχνευση γίνεται μέσω της **static analysis** του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως **Smali**, χρησιμοποιώντας τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
|
||||
Η ανίχνευση πραγματοποιείται με την **static analysis** του Dalvik bytecode της εφαρμογής, που αντιπροσωπεύεται ως **Smali**, χρησιμοποιώντας τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Αυτό το εργαλείο αναζητά **συνηθισμένες συμπεριφορές των "bad" applications** όπως: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
|
||||
Το εργαλείο αυτό αναζητά **συνηθισμένες συμπεριφορές των «κακόβουλων» εφαρμογών** όπως: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -741,46 +747,46 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Είναι ένα εργαλείο που συγκεντρώνει κοινά χρησιμοποιούμενα εργαλεία reverse engineering και analysis για mobile applications, ώστε να βοηθήσει στο testing mobile applications απέναντι στις OWASP mobile security threats. Στόχος του είναι να κάνει αυτήν την εργασία πιο εύκολη και φιλική προς τους mobile application developers και security professionals.
|
||||
**MARA** είναι ένα Framework για Mobile Application Reverse engineering και Analysis. Είναι ένα εργαλείο που συγκεντρώνει κοινώς χρησιμοποιούμενα εργαλεία για reverse engineering και ανάλυση mobile εφαρμογών, για να βοηθήσει στη δοκιμή mobile εφαρμογών έναντι των OWASP mobile security threats. Στόχος του είναι να κάνει αυτή την εργασία πιο εύκολη και φιλική για προγραμματιστές mobile εφαρμογών και security professionals.
|
||||
|
||||
Μπορεί να:
|
||||
|
||||
- Extract Java and Smali code using different tools
|
||||
- Εξάγει Java και Smali κώδικα χρησιμοποιώντας διάφορα εργαλεία
|
||||
- Αναλύει APKs χρησιμοποιώντας: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
- Εξάγει private information από το APK χρησιμοποιώντας regexps.
|
||||
- Εξάγει ιδιωτικές πληροφορίες από το APK χρησιμοποιώντας regexps.
|
||||
- Αναλύει το Manifest.
|
||||
- Αναλύει τα domains που βρίσκει χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) και [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- Deobfuscate APK via [apk-deguard.com](http://www.apk-deguard.com)
|
||||
- Αναλύει τα εντοπισμένα domains χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) και [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- Deobfuscate APK μέσω [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
Χρήσιμο για την ανίχνευση malware: [https://koodous.com/](https://koodous.com/)
|
||||
Χρήσιμο για τον εντοπισμό malware: [https://koodous.com/](https://koodous.com/)
|
||||
|
||||
## Απόκρυψη/Αποκρυπτογράφηση κώδικα
|
||||
## Obfuscating/Deobfuscating code
|
||||
|
||||
Σημειώστε ότι, ανάλογα με την υπηρεσία και τη διαμόρφωση που χρησιμοποιείτε για την απόκρυψη του κώδικα, τα μυστικά μπορεί να είναι obfuscated ή όχι.
|
||||
Note that depending the service and configuration you use to obfuscate the code. Secrets may or may not ended obfuscated.
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is an open source command-line tool that shrinks, optimizes and obfuscates Java code. It is able to optimize bytecode as well as detect and remove unused instructions. ProGuard is free software and is distributed under the GNU General Public License, version 2.
|
||||
|
||||
Το ProGuard διανέμεται ως μέρος του Android SDK και τρέχει κατά τη διάρκεια του build της εφαρμογής σε release mode.
|
||||
ProGuard is distributed as part of the Android SDK and runs when building the application in release mode.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Find a step-by-step guide to deobfuscate the apk in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, ο τρόπος λειτουργίας του Dexguard ήταν:
|
||||
(From that guide) Last time we checked, the Dexguard mode of operation was:
|
||||
|
||||
- φορτώνει έναν resource ως InputStream;
|
||||
- περνάει το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το αποκρυπτογραφήσει;
|
||||
- κάνει κάποια άχρηστη obfuscation για να σπαταλήσει μερικά λεπτά από το χρόνο ενός reverser;
|
||||
- περνάει το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να πάρει ένα DEX αρχείο;
|
||||
- φορτώνει ένα resource ως InputStream;
|
||||
- τροφοδοτεί το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το decrypt;
|
||||
- κάνει κάποια άχρηστη obfuscation για να σπαταλήσει μερικά λεπτά από τον reverser;
|
||||
- τροφοδοτεί το decrypted αποτέλεσμα σε ένα ZipInputStream για να πάρει ένα DEX αρχείο;
|
||||
- τέλος φορτώνει το προκύπτον DEX ως Resource χρησιμοποιώντας τη μέθοδο `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard αντιστρέφει τη διαδικασία της απόκρυψης που εκτελούν τα Android obfuscation tools. Αυτό επιτρέπει πλήθος security analyses, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
|
||||
**DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.**
|
||||
|
||||
Μπορείτε να ανεβάσετε ένα obfuscated APK στην πλατφόρμα τους.
|
||||
|
||||
@ -790,15 +796,15 @@ This is a LLM tool to find any potential security vulnerabilities in android app
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Είναι ένας generic android deobfuscator. Το Simplify virtually executes an app για να κατανοήσει τη συμπεριφορά του και στη συνέχεια προσπαθεί να optimize τον κώδικα έτσι ώστε να συμπεριφέρεται ταυτόσημα αλλά να είναι πιο εύκολος στην κατανόηση από άνθρωπο. Κάθε τύπος optimization είναι απλός και generic, οπότε δεν έχει σημασία τι συγκεκριμένο είδος obfuscation χρησιμοποιήθηκε.
|
||||
It is a **generic android deobfuscator.** Simplify **virtually executes an app** to understand its behavior and then **tries to optimize the code** so it behaves identically but is easier for a human to understand. Each optimization type is simple and generic, so it doesn't matter what the specific type of obfuscation is used.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD σας δίνει πληροφορίες για το πώς δημιουργήθηκε ένα APK. Αναγνωρίζει πολλούς compilers, packers, obfuscators και άλλα περίεργα πράγματα. Είναι [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
|
||||
APKiD gives you information about **how an APK was made**. It identifies many **compilers**, **packers**, **obfuscators**, and other weird stuff. It's [_PEiD_](https://www.aldeid.com/wiki/PEiD) for Android.
|
||||
|
||||
### Manual
|
||||
|
||||
[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md)
|
||||
[Διαβάστε αυτό το tutorial για να μάθετε μερικά κόλπα στο **πώς να reverse custom obfuscation**](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
@ -806,19 +812,20 @@ APKiD σας δίνει πληροφορίες για το πώς δημιουρ
|
||||
|
||||
AndroL4b είναι μια Android security virtual machine βασισμένη σε ubuntu-mate που περιλαμβάνει μια συλλογή από τα πιο πρόσφατα framework, tutorials και labs από διάφορους security geeks και researchers για reverse engineering και malware analysis.
|
||||
|
||||
## Αναφορές
|
||||
## References
|
||||
|
||||
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
|
||||
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Είναι μια εξαιρετική λίστα πόρων
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Σύντομο μάθημα για Android
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Σύντομο μάθημα Android
|
||||
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
|
||||
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
||||
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
|
||||
- [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097)
|
||||
- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect)
|
||||
- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns)
|
||||
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
|
||||
## Ακόμα να δοκιμαστούν
|
||||
## Yet to try
|
||||
|
||||
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||
|
@ -2,30 +2,30 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτή η σελίδα παρέχει μια πρακτική ροή εργασίας για να επανακτήσετε τη δυναμική ανάλυση σε Android apps που εντοπίζουν/μπλοκάρουν instrumentation λόγω root ή επιβάλλουν TLS pinning. Επικεντρώνεται σε γρήγορο triage, συνήθεις εντοπισμούς και copy‑pasteable hooks/tactics για να τα παρακάμψετε χωρίς repacking όπου είναι δυνατόν.
|
||||
Αυτή η σελίδα παρέχει ένα πρακτικό workflow για να επανακτήσετε dynamic analysis απέναντι σε Android εφαρμογές που ανιχνεύουν/blockαρουν instrumentation λόγω root ή επιβάλλουν TLS pinning. Εστιάζει σε γρήγορο triage, κοινές ανιχνεύσεις και copy‑pasteable hooks/tactics για να τις παρακάμψετε χωρίς repacking όταν είναι δυνατόν.
|
||||
|
||||
## Detection Surface (what apps check)
|
||||
|
||||
- Root checks: su binary, Magisk paths, getprop values, common root packages
|
||||
- Frida/debugger checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), σάρωση /proc, classpath, φορτωμένες libs
|
||||
- Frida/debugger checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs
|
||||
- Native anti‑debug: ptrace(), syscalls, anti‑attach, breakpoints, inline hooks
|
||||
- Early init checks: Application.onCreate() ή process start hooks που προκαλούν crash αν υπάρχει instrumentation
|
||||
- Early init checks: Application.onCreate() or process start hooks that crash if instrumentation is present
|
||||
- TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins
|
||||
|
||||
## Step 1 — Quick win: hide root with Magisk DenyList
|
||||
|
||||
- Enable Zygisk in Magisk
|
||||
- Enable DenyList, add the target package
|
||||
- Reboot and retest
|
||||
- Ενεργοποιήστε Zygisk στο Magisk
|
||||
- Ενεργοποιήστε το DenyList, προσθέστε το target package
|
||||
- Επανεκκινήστε και επανελέγξτε
|
||||
|
||||
Many apps only look for obvious indicators (su/Magisk paths/getprop). DenyList often neutralizes naive checks.
|
||||
Πολλές εφαρμογές κοιτάνε μόνο για προφανή δείκτες (su/Magisk paths/getprop). Το DenyList συχνά αδρανοποιεί τέτοιους naive ελέγχους.
|
||||
|
||||
References:
|
||||
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
||||
|
||||
## Step 2 — 30‑second Frida Codeshare tests
|
||||
|
||||
Try common drop‑in scripts before deep diving:
|
||||
Δοκιμάστε κοινά drop‑in scripts πριν προχωρήσετε σε βαθύτερη ανάλυση:
|
||||
|
||||
- anti-root-bypass.js
|
||||
- anti-frida-detection.js
|
||||
@ -35,33 +35,50 @@ Example:
|
||||
```bash
|
||||
frida -U -f com.example.app -l anti-frida-detection.js
|
||||
```
|
||||
Αυτά συνήθως δημιουργούν stubs για ελέγχους Java root/debug, σαρώσεις process/service, και native ptrace(). Χρήσιμα σε lightly protected apps; hardened targets μπορεί να χρειαστούν tailored hooks.
|
||||
Αυτά συνήθως stub-άρουν Java root/debug checks, process/service scans και native ptrace(). Χρήσιμα σε ελαφρώς προστατευμένες εφαρμογές· hardened targets μπορεί να χρειαστούν tailored hooks.
|
||||
|
||||
- Codeshare: https://codeshare.frida.re/
|
||||
|
||||
## Βήμα 3 — Παρακάμψτε τους ανιχνευτές init-time συνδέοντας αργότερα
|
||||
## Αυτοματοποιήστε με Medusa (Frida framework)
|
||||
|
||||
Πολλές ανιχνεύσεις τρέχουν μόνο κατά το process spawn/onCreate(). Spawn‑time injection (-f) ή gadgets ανακαλύπτονται; το να συνδεθείς μετά το φόρτωμα της UI μπορεί να περάσει απαρατήρητο.
|
||||
Η Medusa παρέχει 90+ έτοιμα modules για SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception, και άλλα.
|
||||
```bash
|
||||
git clone https://github.com/Ch0pin/medusa
|
||||
cd medusa
|
||||
pip install -r requirements.txt
|
||||
python medusa.py
|
||||
|
||||
# Example interactive workflow
|
||||
show categories
|
||||
use http_communications/multiple_unpinner
|
||||
use root_detection/universal_root_detection_bypass
|
||||
run com.target.app
|
||||
```
|
||||
Συμβουλή: Η Medusa είναι εξαιρετική για γρήγορα αποτελέσματα πριν γράψετε custom hooks. Μπορείτε επίσης να επιλέξετε modules και να τα συνδυάσετε με τα δικά σας scripts.
|
||||
|
||||
## Βήμα 3 — Παράκαμψη των init-time ανιχνευτών με καθυστερημένη προσάρτηση
|
||||
|
||||
Πολλές ανιχνεύσεις εκτελούνται μόνο κατά το process spawn/onCreate(). Η spawn‑time injection (-f) ή τα gadgets εντοπίζονται· η προσάρτηση μετά τη φόρτωση του UI μπορεί να περάσει απαρατήρητη.
|
||||
```bash
|
||||
# Launch the app normally (launcher/adb), wait for UI, then attach
|
||||
frida -U -n com.example.app
|
||||
# Or with Objection to attach to running process
|
||||
aobjection --gadget com.example.app explore # if using gadget
|
||||
```
|
||||
Αν αυτό λειτουργήσει, διατηρήστε τη συνεδρία σταθερή και προχωρήστε σε map και stub checks.
|
||||
Αν αυτό λειτουργήσει, διατηρήστε τη συνεδρία σταθερή και προχωρήστε στη χαρτογράφηση και στους ελέγχους stub.
|
||||
|
||||
## Βήμα 4 — Χαρτογράφηση της λογικής ανίχνευσης μέσω Jadx και αναζήτηση συμβολοσειρών
|
||||
## Βήμα 4 — Χαρτογράφηση της λογικής ανίχνευσης μέσω Jadx και αναζήτησης συμβολοσειρών
|
||||
|
||||
Στατικές λέξεις-κλειδιά για triage στο Jadx:
|
||||
Στατικές λέξεις-κλειδιά (triage) στο Jadx:
|
||||
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
|
||||
|
||||
Τυπικά μοτίβα Java:
|
||||
Συνήθη μοτίβα Java:
|
||||
```java
|
||||
public boolean isFridaDetected() {
|
||||
return getRunningServices().contains("frida");
|
||||
}
|
||||
```
|
||||
Συνηθισμένα APIs για ανασκόπηση/hook:
|
||||
Common APIs to review/hook:
|
||||
- android.os.Debug.isDebuggerConnected
|
||||
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
|
||||
- java.lang.System.loadLibrary / System.load (native bridge)
|
||||
@ -70,7 +87,7 @@ return getRunningServices().contains("frida");
|
||||
|
||||
## Βήμα 5 — Runtime stubbing με Frida (Java)
|
||||
|
||||
Παράκαμψε custom guards για να επιστρέφουν ασφαλείς τιμές χωρίς repacking:
|
||||
Παρακάμψτε custom guards ώστε να επιστρέφουν ασφαλείς τιμές χωρίς repacking:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
const Checks = Java.use('com.example.security.Checks');
|
||||
@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager');
|
||||
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
|
||||
});
|
||||
```
|
||||
Αναλύεις πρώιμες καταρρεύσεις; Dump classes λίγο πριν καταρρεύσει για να εντοπίσεις πιθανά detection namespaces:
|
||||
Διερευνάτε early crashes; Dump classes ακριβώς πριν τερματιστεί για να εντοπίσετε πιθανές detection namespaces:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
Java.enumerateLoadedClasses({
|
||||
@ -94,6 +111,14 @@ onComplete: () => console.log('Done')
|
||||
});
|
||||
});
|
||||
```
|
||||
// Quick root detection stub example (adapt to target package/class names)
|
||||
Java.perform(() => {
|
||||
try {
|
||||
const RootChecker = Java.use('com.target.security.RootCheck');
|
||||
RootChecker.isDeviceRooted.implementation = function () { return false; };
|
||||
} catch (e) {}
|
||||
});
|
||||
|
||||
Καταγράψτε και αδρανοποιήστε ύποπτες μεθόδους για να επιβεβαιώσετε τη ροή εκτέλεσης:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
@ -104,13 +129,53 @@ return false;
|
||||
};
|
||||
});
|
||||
```
|
||||
## Βήμα 6 — Ακολουθήστε το JNI/native μονοπάτι όταν τα Java hooks αποτυγχάνουν
|
||||
## Bypass emulator/VM detection (Java stubs)
|
||||
|
||||
Ανιχνεύστε τα JNI entry points για να εντοπίσετε native loaders και detection init:
|
||||
Συνηθισμένες ευρετικές μέθοδοι: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE που περιέχουν generic/goldfish/ranchu/sdk; ενδείξεις QEMU όπως /dev/qemu_pipe, /dev/socket/qemud; default MAC 02:00:00:00:00:00; 10.0.2.x NAT; απουσία telephony/sensors.
|
||||
|
||||
Γρήγορη παραποίηση των Build fields:
|
||||
```js
|
||||
Java.perform(function(){
|
||||
var Build = Java.use('android.os.Build');
|
||||
Build.MODEL.value = 'Pixel 7 Pro';
|
||||
Build.MANUFACTURER.value = 'Google';
|
||||
Build.BRAND.value = 'google';
|
||||
Build.FINGERPRINT.value = 'google/panther/panther:14/UP1A.231105.003/1234567:user/release-keys';
|
||||
});
|
||||
```
|
||||
Συμπληρώστε με stubs για ελέγχους ύπαρξης αρχείων και αναγνωριστικά (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) ώστε να επιστρέφουν ρεαλιστικές τιμές.
|
||||
|
||||
## SSL pinning bypass quick hook (Java)
|
||||
|
||||
Αχρηστεύστε προσαρμοσμένους TrustManagers και επιβάλετε επιεικείς SSL contexts:
|
||||
```js
|
||||
Java.perform(function(){
|
||||
var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager');
|
||||
var SSLContext = Java.use('javax.net.ssl.SSLContext');
|
||||
|
||||
// No-op validations
|
||||
X509TrustManager.checkClientTrusted.implementation = function(){ };
|
||||
X509TrustManager.checkServerTrusted.implementation = function(){ };
|
||||
|
||||
// Force permissive TrustManagers
|
||||
var TrustManagers = [ X509TrustManager.$new() ];
|
||||
var SSLContextInit = SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;','[Ljavax.net.ssl.TrustManager;','java.security.SecureRandom');
|
||||
SSLContextInit.implementation = function(km, tm, sr){
|
||||
return SSLContextInit.call(this, km, TrustManagers, sr);
|
||||
};
|
||||
});
|
||||
```
|
||||
Σημειώσεις
|
||||
- Επεκτείνετε για OkHttp: κάντε hook το okhttp3.CertificatePinner και το HostnameVerifier όπως χρειάζεται, ή χρησιμοποιήστε ένα universal unpinning script από CodeShare.
|
||||
- Παράδειγμα εκτέλεσης: `frida -U -f com.target.app -l ssl-bypass.js --no-pause`
|
||||
|
||||
## Step 6 — Ακολουθήστε το JNI/native μονοπάτι όταν τα Java hooks αποτυγχάνουν
|
||||
|
||||
Ανιχνεύστε τα σημεία εισόδου JNI για να εντοπίσετε native loaders και την αρχικοποίηση της ανίχνευσης:
|
||||
```bash
|
||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||
```
|
||||
Γρήγορος εγγενής έλεγχος των ενσωματωμένων αρχείων .so:
|
||||
Γρήγορη εγγενής διαλογή των συσκευασμένων αρχείων .so:
|
||||
```bash
|
||||
# List exported symbols & JNI
|
||||
nm -D libfoo.so | head
|
||||
@ -121,7 +186,7 @@ strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root'
|
||||
- Ghidra: https://ghidra-sre.org/
|
||||
- r2frida: https://github.com/nowsecure/r2frida
|
||||
|
||||
Παράδειγμα: αδρανοποιήστε ptrace για να παρακάμψετε απλό anti‑debug σε libc:
|
||||
Παράδειγμα: αδρανοποίηση του ptrace για να παρακάμψετε απλό anti‑debug στο libc:
|
||||
```js
|
||||
const ptrace = Module.findExportByName(null, 'ptrace');
|
||||
if (ptrace) {
|
||||
@ -137,26 +202,28 @@ reversing-native-libraries.md
|
||||
|
||||
## Βήμα 7 — Objection patching (embed gadget / strip basics)
|
||||
|
||||
Αν προτιμάτε το repacking αντί των runtime hooks, δοκιμάστε:
|
||||
Όταν προτιμάτε το repacking αντί για runtime hooks, δοκιμάστε:
|
||||
```bash
|
||||
objection patchapk --source app.apk
|
||||
```
|
||||
Σημειώσεις:
|
||||
- Απαιτεί apktool· βεβαιωθείτε ότι έχετε μια ενημερωμένη έκδοση από τον επίσημο οδηγό για να αποφύγετε προβλήματα κατά το build: https://apktool.org/docs/install
|
||||
- Gadget injection επιτρέπει instrumentation χωρίς root αλλά μπορεί ακόμα να εντοπιστεί από ισχυρότερους init‑time ελέγχους.
|
||||
- Απαιτεί apktool; βεβαιωθείτε για μια τρέχουσα έκδοση από τον επίσημο οδηγό για να αποφύγετε προβλήματα build: https://apktool.org/docs/install
|
||||
- Gadget injection επιτρέπει instrumentation χωρίς root αλλά μπορεί ακόμα να εντοπιστεί από ισχυρότερους ελέγχους init‑time.
|
||||
|
||||
Προαιρετικά, προσθέστε LSPosed modules και Shamiko για ισχυρότερη απόκρυψη root σε περιβάλλοντα Zygisk, και επιμεληθείτε τη DenyList ώστε να καλύπτει child processes.
|
||||
|
||||
Αναφορές:
|
||||
- Objection: https://github.com/sensepost/objection
|
||||
|
||||
## Βήμα 8 — Εφεδρική λύση: Επιδιόρθωση TLS pinning για ορατότητα δικτύου
|
||||
## Βήμα 8 — Εφεδρική λύση: Patch TLS pinning για ορατότητα του δικτύου
|
||||
|
||||
Εάν η instrumentation είναι μπλοκαρισμένη, μπορείτε ακόμη να εξετάσετε την κίνηση αφαιρώντας στατικά το pinning:
|
||||
Εάν το instrumentation αποκλείεται, μπορείτε ακόμα να ελέγξετε την κίνηση αφαιρώντας στατικά το pinning:
|
||||
```bash
|
||||
apk-mitm app.apk
|
||||
# Then install the patched APK and proxy via Burp/mitmproxy
|
||||
```
|
||||
- Εργαλείο: https://github.com/shroudedcode/apk-mitm
|
||||
- Για κόλπα CA‑trust στη ρύθμιση δικτύου (και Android 7+ user CA trust), δείτε:
|
||||
- Για κόλπα CA‑trust στη διαμόρφωση δικτύου (και Android 7+ user CA trust), δείτε:
|
||||
|
||||
{{#ref}}
|
||||
make-apk-accept-ca-certificate.md
|
||||
@ -166,7 +233,7 @@ make-apk-accept-ca-certificate.md
|
||||
install-burp-certificate.md
|
||||
{{#endref}}
|
||||
|
||||
## Χρήσιμη λίστα εντολών
|
||||
## Χρήσιμη σύνοψη εντολών
|
||||
```bash
|
||||
# List processes and attach
|
||||
frida-ps -Uai
|
||||
@ -184,12 +251,12 @@ objection --gadget com.example.app explore
|
||||
# Static TLS pinning removal
|
||||
apk-mitm app.apk
|
||||
```
|
||||
## Συμβουλές & επιφυλάξεις
|
||||
## Συμβουλές & προειδοποιήσεις
|
||||
|
||||
- Προτιμήστε το attaching αργότερα αντί για spawning όταν οι apps crash κατά το launch
|
||||
- Ορισμένες detections επανεκτελούνται σε κρίσιμες ροές (π.χ., payment, auth) — κρατήστε τα hooks ενεργά κατά την πλοήγηση
|
||||
- Συνδυάστε static και dynamic: string hunt στο Jadx για να καταρτίσετε μια σύντομη λίστα με classes; στη συνέχεια hook methods για να επαληθεύσετε στο runtime
|
||||
- Οι hardened apps μπορεί να χρησιμοποιούν packers και native TLS pinning — αναμένετε να reverse native code
|
||||
- Προτιμήστε το attaching αργά αντί για το spawning όταν οι εφαρμογές καταρρέουν κατά την εκκίνηση
|
||||
- Ορισμένες ανιχνεύσεις επανεκτελούνται σε κρίσιμες ροές (π.χ., payment, auth) — κρατήστε τα hooks ενεργά κατά την πλοήγηση
|
||||
- Συνδυάστε static και dynamic: κάνετε string hunt στο Jadx για να περιορίσετε τις κλάσεις; στη συνέχεια hook methods για να τα επαληθεύσετε στο runtime
|
||||
- Οι hardened εφαρμογές μπορεί να χρησιμοποιούν packers και native TLS pinning — αναμένετε να χρειαστεί να reverse native code
|
||||
|
||||
## Αναφορές
|
||||
|
||||
@ -202,5 +269,7 @@ apk-mitm app.apk
|
||||
- [r2frida](https://github.com/nowsecure/r2frida)
|
||||
- [Apktool install guide](https://apktool.org/docs/install)
|
||||
- [Magisk](https://github.com/topjohnwu/Magisk)
|
||||
- [Medusa (Android Frida framework)](https://github.com/Ch0pin/medusa)
|
||||
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,33 +2,33 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Ευχαριστώ πολύ τον [**@offsecjay**](https://twitter.com/offsecjay) για τη βοήθειά του κατά τη δημιουργία αυτού του περιεχομένου.
|
||||
Ευχαριστώ πολύ τον [**@offsecjay**](https://twitter.com/offsecjay) για τη βοήθειά του στη δημιουργία αυτού του περιεχομένου.
|
||||
|
||||
## Τι είναι
|
||||
|
||||
Το Android Studio επιτρέπει να **τρέχετε εικονικές μηχανές Android που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε APKs**. Για να τις χρησιμοποιήσετε θα χρειαστείτε:
|
||||
Το Android Studio επιτρέπει να **τρέξετε εικονικές μηχανές Android που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε APKs**. Για να τις χρησιμοποιήσετε θα χρειαστείτε:
|
||||
|
||||
- Τα **εργαλεία Android SDK** - [Κατεβάστε εδώ](https://developer.android.com/studio/releases/sdk-tools).
|
||||
- Ή το **Android Studio** (με εργαλεία Android SDK) - [Κατεβάστε εδώ](https://developer.android.com/studio).
|
||||
- Τα **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools).
|
||||
- Ή **Android Studio** (με Android SDK tools) - [Download here](https://developer.android.com/studio).
|
||||
|
||||
Στα Windows (στην περίπτωσή μου) **μετά την εγκατάσταση του Android Studio** είχα τα **εργαλεία SDK εγκατεστημένα στο**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
|
||||
Σε Windows (στη δική μου περίπτωση) **μετά την εγκατάσταση του Android Studio** είχα τα **SDK Tools εγκατεστημένα στο**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
|
||||
|
||||
Στο mac μπορείτε να **κατεβάσετε τα εργαλεία SDK** και να τα έχετε στο PATH τρέχοντας:
|
||||
Σε mac μπορείτε να **κατεβάσετε τα SDK tools** και να τα έχετε στο PATH εκτελώντας:
|
||||
```bash
|
||||
brew tap homebrew/cask
|
||||
brew install --cask android-sdk
|
||||
```
|
||||
Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει σε `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/`
|
||||
Ή από **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) το οποίο θα τα εγκαταστήσει σε `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/`
|
||||
|
||||
Για τα προβλήματα με το Java:
|
||||
Για τα προβλήματα με την Java:
|
||||
```java
|
||||
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
|
||||
```
|
||||
## GUI
|
||||
|
||||
### Ετοιμάστε την Εικονική Μηχανή
|
||||
### Προετοιμασία Εικονικής Μηχανής
|
||||
|
||||
Αν έχετε εγκαταστήσει το Android Studio, μπορείτε απλά να ανοίξετε την κύρια προβολή έργου και να αποκτήσετε πρόσβαση: _**Tools**_ --> _**AVD Manager.**_
|
||||
If you installed Android Studio, you can just open the main project view and access: _**Tools**_ --> _**AVD Manager.**_
|
||||
|
||||
<div align="center" data-full-width="false">
|
||||
|
||||
@ -36,38 +36,38 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
|
||||
|
||||
</div>
|
||||
|
||||
Στη συνέχεια, κάντε κλικ στο _**Create Virtual Device**_
|
||||
Then, click on _**Create Virtual Device**_
|
||||
|
||||
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
|
||||
|
||||
_**επιλέξτε** το τηλέφωνο που θέλετε να χρησιμοποιήσετε_ και κάντε κλικ στο _**Next.**_
|
||||
|
||||
> [!WARNING]
|
||||
> Αν χρειάζεστε ένα τηλέφωνο με εγκατεστημένο το Play Store, επιλέξτε ένα με το εικονίδιο του Play Store πάνω του!
|
||||
> Αν χρειάζεστε τηλέφωνο με εγκατεστημένο το Play Store επιλέξτε ένα με το εικονίδιο του Play Store!
|
||||
>
|
||||
> <img src="../../images/image (1144).png" alt="" data-size="original">
|
||||
|
||||
Στη τρέχουσα προβολή θα μπορείτε να **επιλέξετε και να κατεβάσετε την εικόνα Android** που θα τρέχει το τηλέφωνο:
|
||||
Στην τρέχουσα προβολή θα μπορείτε να **επιλέξετε και να κατεβάσετε την εικόνα Android** που θα εκτελεί το τηλέφωνο:
|
||||
|
||||
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Έτσι, επιλέξτε το και αν δεν έχει κατέβει, κάντε κλικ στο _**Download**_ σύμβολο δίπλα στο όνομα (**τώρα περιμένετε μέχρι να κατέβει η εικόνα).**\
|
||||
Άρα, επιλέξτε την και αν δεν είναι κατεβασμένη κάντε κλικ στο σύμβολο _**Download**_ δίπλα στο όνομα (**περιμένετε μέχρι να ολοκληρωθεί το κατέβασμα της εικόνας).**\
|
||||
Μόλις η εικόνα κατέβει, απλά επιλέξτε **`Next`** και **`Finish`**.
|
||||
|
||||
Η εικονική μηχανή θα δημιουργηθεί. Τώρα **κάθε φορά που αποκτάτε πρόσβαση στον AVD manager, θα είναι παρούσα**.
|
||||
Η εικονική μηχανή θα δημιουργηθεί. Τώρα **κάθε φορά που έχετε πρόσβαση στον AVD Manager θα είναι διαθέσιμη**.
|
||||
|
||||
### Εκτέλεση Εικονικής Μηχανής
|
||||
|
||||
Για να **τρέξετε** την εικονική μηχανή, απλά πατήστε το _**Start button**_.
|
||||
Για να την **τρέξετε** απλά πατήστε το _**Start button**_.
|
||||
|
||||
.png>)
|
||||
|
||||
## Εργαλείο Γραμμής Εντολών
|
||||
## Εργαλείο γραμμής εντολών
|
||||
|
||||
> [!WARNING]
|
||||
> Για macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` και το `emulator` στο `/Users/<username>/Library/Android/sdk/emulator/emulator` αν τα έχετε εγκαταστήσει.
|
||||
> Για macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` και τον `emulator` στο `/Users/<username>/Library/Android/sdk/emulator/emulator` αν τα έχετε εγκατεστημένα.
|
||||
|
||||
Πρώτα απ' όλα, πρέπει να **αποφασίσετε ποιο τηλέφωνο θέλετε να χρησιμοποιήσετε**, για να δείτε τη λίστα με τα διαθέσιμα τηλέφωνα εκτελέστε:
|
||||
Πρώτα από όλα πρέπει να **αποφασίσετε ποιο τηλέφωνο θέλετε να χρησιμοποιήσετε**, για να δείτε τη λίστα με τα δυνατά τηλέφωνα εκτελέστε:
|
||||
```
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
|
||||
|
||||
@ -95,8 +95,8 @@ Name: Nexus 10
|
||||
OEM : Google
|
||||
[...]
|
||||
```
|
||||
Αφού αποφασίσετε το όνομα της συσκευής που θέλετε να χρησιμοποιήσετε, πρέπει να **αποφασίσετε ποια εικόνα Android θέλετε να εκτελέσετε σε αυτή τη συσκευή.**\
|
||||
Μπορείτε να καταγράψετε όλες τις επιλογές χρησιμοποιώντας `sdkmanager`:
|
||||
Αφού αποφασίσετε το όνομα της συσκευής που θέλετε να χρησιμοποιήσετε, πρέπει να **αποφασίσετε ποιο Android image θέλετε να τρέξετε σε αυτή τη συσκευή.**\
|
||||
Μπορείτε να δείτε όλες τις επιλογές χρησιμοποιώντας `sdkmanager`:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
|
||||
```
|
||||
@ -104,7 +104,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
|
||||
```
|
||||
Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταχωρήσετε όλες τις κατεβασμένες εικόνες Android** με:
|
||||
Μόλις έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **εμφανίσετε όλες τις ληφθείσες εικόνες Android** με:
|
||||
```
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
|
||||
----------
|
||||
@ -120,12 +120,12 @@ Type: Platform
|
||||
API level: 29
|
||||
Revision: 4
|
||||
```
|
||||
Αυτή τη στιγμή έχετε αποφασίσει τη συσκευή που θέλετε να χρησιμοποιήσετε και έχετε κατεβάσει την εικόνα Android, οπότε **μπορείτε να δημιουργήσετε την εικονική μηχανή χρησιμοποιώντας**:
|
||||
Αυτή τη στιγμή έχετε αποφασίσει ποια συσκευή θέλετε να χρησιμοποιήσετε και έχετε κατεβάσει την εικόνα Android, οπότε **μπορείτε να δημιουργήσετε την εικονική μηχανή χρησιμοποιώντας**:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
|
||||
```
|
||||
Στην τελευταία εντολή **δημιούργησα μια VM με το όνομα** "_AVD9_" χρησιμοποιώντας τη ** συσκευή** "_Nexus 5X_" και την **εικόνα Android** "_system-images;android-28;google_apis;x86_64_".\
|
||||
Τώρα μπορείτε να **καταγράψετε τις εικονικές μηχανές** που έχετε δημιουργήσει με:
|
||||
Στην τελευταία εντολή **δημιούργησα μια VM με όνομα** "_AVD9_" χρησιμοποιώντας τη **συσκευή** "_Nexus 5X_" και την **Android image** "_system-images;android-28;google_apis;x86_64_".\
|
||||
Τώρα μπορείτε **να απαριθμήσετε τις εικονικές μηχανές** που έχετε δημιουργήσει με:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
|
||||
|
||||
@ -143,73 +143,128 @@ Error: Google pixel_2 no longer exists as a device
|
||||
### Εκτέλεση Εικονικής Μηχανής
|
||||
|
||||
> [!WARNING]
|
||||
> Για το macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` και τον `emulator` στο `/Users/<username>/Library/Android/sdk/emulator/emulator` αν τα έχετε εγκαταστήσει.
|
||||
> Για macOS μπορείτε να βρείτε το εργαλείο `avdmanager` στο `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` και το `emulator` στο `/Users/<username>/Library/Android/sdk/emulator/emulator` αν τα έχετε εγκαταστήσει.
|
||||
|
||||
Έχουμε ήδη δει πώς μπορείτε να καταγράψετε τις δημιουργημένες εικονικές μηχανές, αλλά **μπορείτε επίσης να τις καταγράψετε χρησιμοποιώντας**:
|
||||
Έχουμε ήδη δει πώς μπορείτε να απαριθμήσετε τις δημιουργημένες εικονικές μηχανές, αλλά **μπορείτε επίσης να τις απαριθμήσετε χρησιμοποιώντας**:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
|
||||
AVD9
|
||||
Pixel_2_API_27
|
||||
```
|
||||
Μπορείτε απλά να **εκτελέσετε οποιαδήποτε εικονική μηχανή έχει δημιουργηθεί** χρησιμοποιώντας:
|
||||
Μπορείτε απλά να **τρέξετε οποιαδήποτε εικονική μηχανή που έχετε δημιουργήσει** χρησιμοποιώντας:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
|
||||
```
|
||||
Ή χρησιμοποιώντας πιο προηγμένες επιλογές μπορείτε να εκτελέσετε μια εικονική μηχανή όπως:
|
||||
Ή χρησιμοποιώντας πιο προηγμένες επιλογές μπορείτε να τρέξετε μια virtual machine όπως:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
||||
```
|
||||
### Επιλογές γραμμής εντολών
|
||||
|
||||
Ωστόσο, υπάρχουν **πολλές διαφορετικές χρήσιμες επιλογές γραμμής εντολών** που μπορείτε να χρησιμοποιήσετε για να ξεκινήσετε μια εικονική μηχανή. Παρακάτω μπορείτε να βρείτε μερικές ενδιαφέρουσες επιλογές αλλά μπορείτε [**να βρείτε μια πλήρη λίστα εδώ**](https://developer.android.com/studio/run/emulator-commandline)
|
||||
Ωστόσο υπάρχουν **πολλές διαφορετικές χρήσιμες επιλογές γραμμής εντολών** που μπορείτε να χρησιμοποιήσετε για να ξεκινήσετε μια virtual μηχανή. Παρακάτω μπορείτε να βρείτε μερικές ενδιαφέρουσες επιλογές αλλά μπορείτε [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline)
|
||||
|
||||
**Εκκίνηση**
|
||||
|
||||
- `-snapshot name` : Ξεκινήστε το στιγμιότυπο VM
|
||||
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Λίστα με όλα τα καταγεγραμμένα στιγμιότυπα
|
||||
- `-snapshot name` : Εκκίνηση snapshot του VM
|
||||
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Λίστα όλων των snapshots που έχουν καταγραφεί
|
||||
|
||||
**Δίκτυο**
|
||||
|
||||
- `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέπει να υποδείξετε τους διακομιστές DNS χωρισμένους με κόμμα στη VM.
|
||||
- **`-http-proxy 192.168.1.12:8080`** : Επιτρέπει να υποδείξετε έναν HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης χρησιμοποιώντας το Burp)
|
||||
- Αν οι ρυθμίσεις του proxy δεν λειτουργούν για κάποιο λόγο, προσπαθήστε να τις ρυθμίσετε εσωτερικά ή χρησιμοποιώντας μια εφαρμογή όπως "Super Proxy" ή "ProxyDroid".
|
||||
- `-netdelay 200` : Ρυθμίστε την καθυστέρηση δικτύου σε χιλιοστά του δευτερολέπτου.
|
||||
- `-port 5556` : Ρυθμίστε τον αριθμό θύρας TCP που χρησιμοποιείται για την κονσόλα και το adb.
|
||||
- `-ports 5556,5559` : Ρυθμίστε τις θύρες TCP που χρησιμοποιούνται για την κονσόλα και το adb.
|
||||
- **`-tcpdump /path/dumpfile.cap`** : Καταγράψτε όλη την κίνηση σε ένα αρχείο
|
||||
- `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέπει τον καθορισμό, με κόμμα, των DNS servers για το VM.
|
||||
- **`-http-proxy 192.168.1.12:8080`** : Επιτρέπει τον καθορισμό ενός HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης με Burp)
|
||||
- If the proxy settings aren't working for some reason, try to configure them internally or using an pplication like "Super Proxy" or "ProxyDroid".
|
||||
- `-netdelay 200` : Ορίζει την προσομοίωση καθυστέρησης δικτύου σε milliseconds.
|
||||
- `-port 5556` : Ορίζει τον αριθμό TCP port που χρησιμοποιείται για την κονσόλα και το adb.
|
||||
- `-ports 5556,5559` : Ορίζει τις TCP θύρες που χρησιμοποιούνται για την κονσόλα και το adb.
|
||||
- **`-tcpdump /path/dumpfile.cap`** : Καταγράφει όλη την κίνηση σε ένα αρχείο
|
||||
|
||||
**Σύστημα**
|
||||
|
||||
- `-selinux {disabled|permissive}` : Ρυθμίστε το module ασφαλείας Security-Enhanced Linux σε κατάσταση είτε απενεργοποιημένη είτε επιτρεπτική σε ένα λειτουργικό σύστημα Linux.
|
||||
- `-timezone Europe/Paris` : Ρυθμίστε τη ζώνη ώρας για τη εικονική συσκευή
|
||||
- `-screen {touch(default)|multi-touch|o-touch}` : Ρυθμίστε τη λειτουργία οθόνης αφής προσομοίωσης.
|
||||
- **`-writable-system`** : Χρησιμοποιήστε αυτή την επιλογή για να έχετε μια εγγράψιμη εικόνα συστήματος κατά τη διάρκεια της συνεδρίας προσομοίωσης σας. Θα χρειαστεί επίσης να εκτελέσετε `adb root; adb remount`. Αυτό είναι πολύ χρήσιμο για την εγκατάσταση ενός νέου πιστοποιητικού στο σύστημα.
|
||||
- `-selinux {disabled|permissive}` : Ορίζει το Security-Enhanced Linux security module σε disabled ή permissive mode σε σύστημα Linux.
|
||||
- `-timezone Europe/Paris` : Ορίζει τη ζώνη ώρας για τη virtual συσκευή
|
||||
- `-screen {touch(default)|multi-touch|o-touch}` : Ορίζει τη λειτουργία προσομοιωμένης οθόνης αφής.
|
||||
- **`-writable-system`** : Χρησιμοποιήστε αυτή την επιλογή για να έχετε ένα writable system image κατά τη διάρκεια της συνεδρίας emulation. Θα χρειαστεί επίσης να τρέξετε `adb root; adb remount`. Αυτό είναι πολύ χρήσιμο για την εγκατάσταση ενός νέου πιστοποιητικού στο σύστημα.
|
||||
|
||||
## Rooting μιας συσκευής Play Store
|
||||
## Εγκατάσταση CLI σε Linux (SDK/AVD γρήγορη εκκίνηση)
|
||||
|
||||
Αν κατεβάσατε μια συσκευή με Play Store δεν θα μπορέσετε να αποκτήσετε root άμεσα, και θα λάβετε αυτό το μήνυμα σφάλματος
|
||||
Τα επίσημα CLI εργαλεία διευκολύνουν τη δημιουργία γρήγορων, debuggable emulators χωρίς το Android Studio.
|
||||
```bash
|
||||
# Directory layout
|
||||
mkdir -p ~/Android/cmdline-tools/latest
|
||||
|
||||
# Download commandline tools (Linux)
|
||||
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip
|
||||
unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest
|
||||
rm /tmp/cmdline-tools.zip
|
||||
|
||||
# Env vars (add to ~/.bashrc or ~/.zshrc)
|
||||
export ANDROID_HOME=$HOME/Android
|
||||
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH
|
||||
|
||||
# Install core SDK components
|
||||
sdkmanager --install "platform-tools" "emulator"
|
||||
|
||||
# Install a debuggable x86_64 system image (Android 11 / API 30)
|
||||
sdkmanager --install "system-images;android-30;google_apis;x86_64"
|
||||
|
||||
# Create an AVD and run it with a writable /system & snapshot name
|
||||
avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel"
|
||||
emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap
|
||||
|
||||
# Verify root (debuggable images allow `adb root`)
|
||||
adb root
|
||||
adb shell whoami # expect: root
|
||||
```
|
||||
Σημειώσεις
|
||||
- Παραλλαγές εικόνων συστήματος: google_apis (με δυνατότητα debugging, επιτρέπει `adb root`), google_apis_playstore (δεν είναι δυνατό να γίνει root), aosp/default (ελαφρύ).
|
||||
- Τύποι build: userdebug συχνά επιτρέπει `adb root` σε εικόνες με δυνατότητα debugging. Οι εικόνες Play Store είναι production builds και μπλοκάρουν το root.
|
||||
- Σε x86_64 hosts, η πλήρης εξομοίωση συστήματος ARM64 δεν υποστηρίζεται από API 28+. Για Android 11+ χρησιμοποιήστε εικόνες Google APIs/Play που περιλαμβάνουν per-app ARM-to-x86 translation για να τρέξετε πολλά ARM-only apps γρήγορα.
|
||||
|
||||
### Snapshots from CLI
|
||||
```bash
|
||||
# Save a clean snapshot from the running emulator
|
||||
adb -s emulator-5554 emu avd snapshot save my_clean_setup
|
||||
|
||||
# Boot from a named snapshot (if it exists)
|
||||
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup
|
||||
```
|
||||
## ARM→x86 μετάφραση δυαδικών (Android 11+)
|
||||
|
||||
Google APIs και Play Store εικόνες στο Android 11+ μπορούν να μεταφράσουν δυαδικά ARM εφαρμογών ανά διεργασία διατηρώντας το υπόλοιπο σύστημα γηγενές x86/x86_64. Συχνά αυτό είναι αρκετά γρήγορο για να δοκιμάσετε πολλές εφαρμογές αποκλειστικά ARM σε desktop.
|
||||
|
||||
> Συμβουλή: Προτιμήστε τις εικόνες Google APIs x86/x86_64 κατά τη διάρκεια pentests. Οι εικόνες Play είναι βολικές αλλά αποκλείουν το `adb root`; χρησιμοποιήστε τις μόνο όταν χρειάζεστε συγκεκριμένα Play services και αποδέχεστε την έλλειψη root.
|
||||
|
||||
## Rooting a Play Store device
|
||||
|
||||
Αν κατεβάσατε μια συσκευή με Play Store δεν θα μπορείτε να αποκτήσετε root απευθείας, και θα λάβετε αυτό το μήνυμα σφάλματος
|
||||
```
|
||||
$ adb root
|
||||
adbd cannot run as root in production builds
|
||||
```
|
||||
Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό**](https://www.youtube.com/watch?v=qQicUW0svB8)).
|
||||
Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το root-άρω (δείτε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό**](https://www.youtube.com/watch?v=qQicUW0svB8)).
|
||||
|
||||
## Εγκατάσταση Πιστοποιητικού Burp
|
||||
## Εγκατάσταση πιστοποιητικού Burp
|
||||
|
||||
Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να εγκαταστήσετε ένα προσαρμοσμένο πιστοποιητικό CA:
|
||||
Δείτε την παρακάτω σελίδα για να μάθετε πώς να εγκαταστήσετε ένα προσαρμοσμένο πιστοποιητικό CA:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
install-burp-certificate.md
|
||||
{{#endref}}
|
||||
|
||||
## Ωραίες Επιλογές AVD
|
||||
## Χρήσιμες επιλογές AVD
|
||||
|
||||
### Λάβετε μια Στιγμιότυπη Εικόνα
|
||||
### Λήψη Snapshot
|
||||
|
||||
Μπορείτε **να χρησιμοποιήσετε το GUI** για να λάβετε μια στιγμιότυπη εικόνα της VM οποιαδήποτε στιγμή:
|
||||
Μπορείτε να **χρησιμοποιήσετε το GUI** για να δημιουργήσετε ένα snapshot της VM οποιαδήποτε στιγμή:
|
||||
|
||||
.png>)
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
- [Android Emulator command line](https://developer.android.com/studio/run/emulator-commandline)
|
||||
- [Run ARM apps on the Android Emulator (x86 translation)](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,17 +1,17 @@
|
||||
# Frida Tutorial
|
||||
# Frida Οδηγός
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Εγκατάσταση
|
||||
|
||||
Εγκαταστήστε τα **frida tools**:
|
||||
Εγκαταστήστε **frida tools**:
|
||||
```bash
|
||||
pip install frida-tools
|
||||
pip install frida
|
||||
```
|
||||
**Κατεβάστε και εγκαταστήστε** στο android τον **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
|
||||
Μονογραμμή για να επανεκκινήσετε το adb σε λειτουργία root, να συνδεθείτε σε αυτό, να ανεβάσετε τον frida-server, να δώσετε δικαιώματα εκτέλεσης και να τον εκτελέσετε στο παρασκήνιο:
|
||||
**Κατεβάστε και εγκαταστήστε** στο Android το **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\
|
||||
Μια γραμμή εντολής για να επανεκκινήσετε το adb σε root mode, να συνδεθείτε σε αυτό, να ανεβάσετε το frida-server, να δώσετε δικαιώματα εκτέλεσης και να το τρέξετε στο παρασκήνιο:
|
||||
```bash
|
||||
adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &"
|
||||
```
|
||||
@ -20,35 +20,88 @@ adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local
|
||||
frida-ps -U #List packages and processes
|
||||
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
|
||||
```
|
||||
## Μαθήματα
|
||||
## Frida server vs. Gadget (root vs. no-root)
|
||||
|
||||
### [Μάθημα 1](frida-tutorial-1.md)
|
||||
Δύο συνήθεις τρόποι για την παρακολούθηση/παρέμβαση σε εφαρμογές Android με το Frida:
|
||||
|
||||
- Frida server (rooted devices): Αποστέλλετε και τρέχετε έναν native daemon που σας επιτρέπει να συνδεθείτε σε οποιαδήποτε διεργασία.
|
||||
- Frida Gadget (no root): Ενσωματώνετε το Frida ως shared library μέσα στο APK και το φορτώνετε αυτόματα μέσα στη στοχευόμενη διεργασία.
|
||||
|
||||
Frida server (rooted)
|
||||
```bash
|
||||
# Download the matching frida-server binary for your device's arch
|
||||
# https://github.com/frida/frida/releases
|
||||
adb root
|
||||
adb push frida-server-<ver>-android-<arch> /data/local/tmp/frida-server
|
||||
adb shell chmod 755 /data/local/tmp/frida-server
|
||||
adb shell /data/local/tmp/frida-server & # run at boot via init/magisk if desired
|
||||
|
||||
# From host, list processes and attach
|
||||
frida-ps -Uai
|
||||
frida -U -n com.example.app
|
||||
```
|
||||
Frida Gadget (no-root)
|
||||
|
||||
1) Αποσυμπιέστε το APK, προσθέστε το gadget .so και το config:
|
||||
- Τοποθετήστε libfrida-gadget.so στο lib/<abi>/ (π.χ., lib/arm64-v8a/)
|
||||
- Δημιουργήστε assets/frida-gadget.config με τις ρυθμίσεις φόρτωσης των scripts σας
|
||||
|
||||
Παράδειγμα frida-gadget.config
|
||||
```json
|
||||
{
|
||||
"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" },
|
||||
"runtime": { "logFile": "/sdcard/frida-gadget.log" }
|
||||
}
|
||||
```
|
||||
2) Αναφορά/φόρτωση του gadget ώστε να αρχικοποιηθεί νωρίς:
|
||||
- Το απλούστερο: Πρόσθεσε ένα μικρό Java stub που καλεί System.loadLibrary("frida-gadget") μέσα σε Application.onCreate(), ή χρησιμοποίησε τον υπάρχοντα μηχανισμό φόρτωσης native βιβλιοθηκών.
|
||||
|
||||
3) Επανασυσκεύασε και υπέγραψε το APK, και μετά εγκατέστησέ το:
|
||||
```bash
|
||||
apktool d app.apk -o app_m
|
||||
# ... add gadget .so and config ...
|
||||
apktool b app_m -o app_gadget.apk
|
||||
uber-apk-signer -a app_gadget.apk -o out_signed
|
||||
adb install -r out_signed/app_gadget-aligned-debugSigned.apk
|
||||
```
|
||||
4) Συνδέστε από το host στο gadget process:
|
||||
```bash
|
||||
frida-ps -Uai
|
||||
frida -U -n com.example.app
|
||||
```
|
||||
Σημειώσεις
|
||||
- Το Gadget ανιχνεύεται από κάποιες προστασίες· κράτα τα ονόματα/διαδρομές stealthy και φόρτωσέ τα αργά/υπό συνθήκη αν χρειάζεται.
|
||||
- Σε hardened apps, προτίμησε rooted testing με server + late attach, ή συνδύασέ το με Magisk/Zygisk hiding.
|
||||
|
||||
## Οδηγοί
|
||||
|
||||
### [Tutorial 1](frida-tutorial-1.md)
|
||||
|
||||
**Από**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
|
||||
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
|
||||
**Πηγαίος Κώδικας**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
|
||||
|
||||
**Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε](frida-tutorial-1.md).**
|
||||
**Ακολούθησε τον [link to read it](frida-tutorial-1.md).**
|
||||
|
||||
### [Μάθημα 2](frida-tutorial-2.md)
|
||||
### [Tutorial 2](frida-tutorial-2.md)
|
||||
|
||||
**Από**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Μέρη 2, 3 & 4)\
|
||||
**Από**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
|
||||
**APKs και Πηγαίος Κώδικας**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
||||
|
||||
**Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε.](frida-tutorial-2.md)**
|
||||
**Ακολούθησε την[ link to read it.](frida-tutorial-2.md)**
|
||||
|
||||
### [Μάθημα 3](owaspuncrackable-1.md)
|
||||
### [Tutorial 3](owaspuncrackable-1.md)
|
||||
|
||||
**Από**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
|
||||
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk)
|
||||
|
||||
**Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε](owaspuncrackable-1.md).**
|
||||
**Ακολούθησε τον [link to read it](owaspuncrackable-1.md).**
|
||||
|
||||
**Μπορείτε να βρείτε περισσότερα καταπληκτικά σενάρια Frida εδώ:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
**Μπορείς να βρεις περισσότερα Awesome Frida scripts εδώ:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
|
||||
## Γρήγορα Παραδείγματα
|
||||
|
||||
### Καλώντας το Frida από τη γραμμή εντολών
|
||||
### Κλήση του Frida από τη γραμμή εντολών
|
||||
```bash
|
||||
frida-ps -U
|
||||
|
||||
@ -61,7 +114,7 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
|
||||
#frozen so that the instrumentation can occur, and the automatically
|
||||
#continue execution with our modified code.
|
||||
```
|
||||
### Βασικό Σενάριο Python
|
||||
### Βασικό Python Script
|
||||
```python
|
||||
import frida, sys
|
||||
|
||||
@ -72,9 +125,9 @@ print('[ * ] Running Frida Demo application')
|
||||
script.load()
|
||||
sys.stdin.read()
|
||||
```
|
||||
### Hooking functions without parameters
|
||||
### Hooking functions χωρίς παραμέτρους
|
||||
|
||||
Hook the function `a()` of the class `sg.vantagepoint.a.c`
|
||||
Hook the function `a()` της κλάσης `sg.vantagepoint.a.c`
|
||||
```javascript
|
||||
Java.perform(function () {
|
||||
; rootcheck1.a.overload().implementation = function() {
|
||||
@ -91,7 +144,7 @@ sysexit.exit.overload("int").implementation = function (var_0) {
|
||||
send("java.lang.System.exit(I)V // We avoid exiting the application :)")
|
||||
}
|
||||
```
|
||||
Hook MainActivity `.onStart()` & `.onCreate()`
|
||||
Hook MainActivity `.onStart()` και `.onCreate()`
|
||||
```javascript
|
||||
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity")
|
||||
mainactivity.onStart.overload().implementation = function () {
|
||||
@ -105,7 +158,7 @@ send("MainActivity.onCreate() HIT!!!")
|
||||
var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
|
||||
}
|
||||
```
|
||||
Hook android `.onCreate()`
|
||||
Hook στο android `.onCreate()`
|
||||
```javascript
|
||||
var activity = Java.use("android.app.Activity")
|
||||
activity.onCreate.overload("android.os.Bundle").implementation = function (
|
||||
@ -117,7 +170,7 @@ var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0)
|
||||
```
|
||||
### Hooking functions with parameters and retrieving the value
|
||||
|
||||
Hooking μια συνάρτηση αποκρυπτογράφησης. Εκτυπώστε την είσοδο, καλέστε την αρχική συνάρτηση για να αποκρυπτογραφήσετε την είσοδο και τελικά, εκτυπώστε τα απλά δεδομένα:
|
||||
Hooking μιας decryption function. Τυπώστε το input, καλέστε την original function για να decrypt το input και τελικά τυπώστε τα plain data:
|
||||
```javascript
|
||||
function getString(data) {
|
||||
var ret = ""
|
||||
@ -144,7 +197,7 @@ return ret //[B
|
||||
```
|
||||
### Hooking functions and calling them with our input
|
||||
|
||||
Hook a function that receives a string and call it with other string (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
|
||||
Hook μια function που λαμβάνει ένα string και κάλεσέ την με άλλο string (from [here](https://11x256.github.io/Frida-hooking-android-part-2/))
|
||||
```javascript
|
||||
var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class
|
||||
|
||||
@ -159,9 +212,9 @@ return ret
|
||||
```
|
||||
### Λήψη ενός ήδη δημιουργημένου αντικειμένου μιας κλάσης
|
||||
|
||||
Αν θέλετε να εξάγετε κάποιο χαρακτηριστικό ενός δημιουργημένου αντικειμένου, μπορείτε να χρησιμοποιήσετε αυτό.
|
||||
Αν θέλετε να εξάγετε κάποια ιδιότητα ενός δημιουργημένου αντικειμένου, μπορείτε να χρησιμοποιήσετε αυτό.
|
||||
|
||||
Σε αυτό το παράδειγμα θα δείτε πώς να αποκτήσετε το αντικείμενο της κλάσης my_activity και πώς να καλέσετε τη συνάρτηση .secret() που θα εκτυπώσει ένα ιδιωτικό χαρακτηριστικό του αντικειμένου:
|
||||
Σε αυτό το παράδειγμα θα δείτε πώς να πάρετε το αντικείμενο της κλάσης my_activity και πώς να καλέσετε τη συνάρτηση .secret() που θα εκτυπώσει μια ιδιωτική ιδιότητα του αντικειμένου:
|
||||
```javascript
|
||||
Java.choose("com.example.a11x256.frida_test.my_activity", {
|
||||
onMatch: function (instance) {
|
||||
@ -172,10 +225,16 @@ console.log("Result of secret func: " + instance.secret())
|
||||
onComplete: function () {},
|
||||
})
|
||||
```
|
||||
## Άλλοι οδηγοί Frida
|
||||
## Άλλοι οδηγοί για Frida
|
||||
|
||||
- [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
|
||||
- [Μέρος 1 της σειράς ιστολογίων για Προχωρημένη Χρήση Frida: Βιβλιοθήκες Κρυπτογράφησης IOS](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
|
||||
- [Μέρος 1 της σειράς άρθρων Advanced Frida Usage: iOS Βιβλιοθήκες Κρυπτογράφησης](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
|
||||
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Δημιουργία επαναλήψιμου Android Bug Bounty εργαστηρίου: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
- [Τεκμηρίωση Frida Gadget](https://frida.re/docs/gadget/)
|
||||
- [Εκδόσεις Frida (server binaries)](https://github.com/frida/frida/releases)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -1,20 +1,32 @@
|
||||
# Εγκατάσταση Πιστοποιητικού Burp
|
||||
# Εγκατάσταση πιστοποιητικού Burp
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Σε μια Εικονική Μηχανή
|
||||
## Proxy σε όλο το σύστημα μέσω ADB
|
||||
|
||||
Πρώτα απ' όλα, πρέπει να κατεβάσετε το πιστοποιητικό Der από το Burp. Μπορείτε να το κάνετε αυτό στο _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_
|
||||
Διαμορφώστε έναν παγκόσμιο HTTP proxy ώστε όλες οι εφαρμογές να δρομολογούν την κίνηση μέσω του interceptor (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
|
||||
```
|
||||
Tip: Στο Burp, bind το listener σας στο 0.0.0.0 ώστε οι συσκευές στο LAN να μπορούν να συνδεθούν (Proxy -> Options -> Proxy Listeners).
|
||||
|
||||
## Σε Εικονική Μηχανή
|
||||
|
||||
Πρώτα απ' όλα πρέπει να κατεβάσετε το πιστοποιητικό Der από το Burp. Μπορείτε να το κάνετε στο _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_
|
||||
|
||||
.png>)
|
||||
|
||||
**Εξάγετε το πιστοποιητικό σε μορφή Der** και ας **μετατρέψουμε** το σε μια μορφή που **το Android** θα μπορεί να **κατανοήσει.** Σημειώστε ότι **για να ρυθμίσετε το πιστοποιητικό burp στη μηχανή Android στο AVD** πρέπει να **τρέξετε** αυτή τη μηχανή **με** την επιλογή **`-writable-system`**.\
|
||||
Για παράδειγμα, μπορείτε να το τρέξετε όπως:
|
||||
**Εξάγετε το πιστοποιητικό σε μορφή Der** και ας **μετατρέψουμε** το σε μια μορφή που το **Android** θα μπορέσει να **κατανοήσει.** Σημειώστε ότι **για να ρυθμίσετε το burp certificate στην Android μηχανή στο AVD** χρειάζεται να **τρέξετε** αυτή τη μηχανή **με** την **`-writable-system`** επιλογή.\
|
||||
Για παράδειγμα μπορείτε να το τρέξετε ως εξής:
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
||||
```
|
||||
Τότε, για να **ρυθμίσετε το πιστοποιητικό του burp κάντε**:
|
||||
Έπειτα, για να **ρυθμίσετε το πιστοποιητικό burps, κάντε**:
|
||||
```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"
|
||||
@ -25,39 +37,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc
|
||||
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
|
||||
adb reboot #Now, reboot the machine
|
||||
```
|
||||
Μόλις η **μηχανή ολοκληρώσει την επανεκκίνηση**, το πιστοποιητικό burp θα είναι σε χρήση από αυτήν!
|
||||
Μόλις **η μηχανή ολοκληρώσει την επανεκκίνηση** το burp certificate θα χρησιμοποιείται από αυτή!
|
||||
|
||||
## Χρήση του Magisc
|
||||
## Χρήση Magisc
|
||||
|
||||
Αν **έχετε ριζώσει τη συσκευή σας με το Magisc** (ίσως έναν εξομοιωτή), και **δεν μπορείτε να ακολουθήσετε** τα προηγούμενα **βήματα** για να εγκαταστήσετε το πιστοποιητικό Burp επειδή το **filesystem είναι μόνο για ανάγνωση** και δεν μπορείτε να το ξανατοποθετήσετε ως εγγράψιμο, υπάρχει ένας άλλος τρόπος.
|
||||
If you **rooted your device with Magisc** (maybe an emulator), and you **can't follow** the previous **steps** to install the Burp cert because the **filesystem is read-only** and you cannot remount it writable, there is another way.
|
||||
|
||||
Εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=qQicUW0svB8) που πρέπει να κάνετε:
|
||||
Εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=qQicUW0svB8) και χρειάζεται να:
|
||||
|
||||
1. **Εγκαταστήστε ένα πιστοποιητικό CA**: Απλά **σύρετε και αποθέστε** το DER πιστοποιητικό Burp **αλλάζοντας την επέκταση** σε `.crt` στο κινητό ώστε να αποθηκευτεί στον φάκελο Λήψεις και πηγαίνετε στο `Εγκατάσταση πιστοποιητικού` -> `Πιστοποιητικό CA`
|
||||
1. **Install a CA certificate**: Απλά **drag&drop** το DER Burp certificate **changing the extension** σε `.crt` στο κινητό ώστε να αποθηκευτεί στο φάκελο Downloads και πηγαίνετε σε `Install a certificate` -> `CA certificate`
|
||||
|
||||
<figure><img src="../../images/image (53).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
- Ελέγξτε ότι το πιστοποιητικό αποθηκεύτηκε σωστά πηγαίνοντας στο `Έμπιστες πιστοποιήσεις` -> `ΧΡΗΣΤΗΣ`
|
||||
- Ελέγξτε ότι το πιστοποιητικό αποθηκεύτηκε σωστά πηγαίνοντας σε `Trusted credentials` -> `USER`
|
||||
|
||||
<figure><img src="../../images/image (54).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Κάντε το εμπιστευμένο από το Σύστημα**: Κατεβάστε το module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (ένα αρχείο .zip), **σύρετε και αποθέστε το** στο τηλέφωνο, πηγαίνετε στην **εφαρμογή Magics** στο τηλέφωνο στην ενότητα **`Modules`**, κάντε κλικ στο **`Εγκατάσταση από αποθήκευση`**, επιλέξτε το module `.zip` και μόλις εγκατασταθεί **επανεκκινήστε** το τηλέφωνο:
|
||||
2. **Make it System trusted**: Κατεβάστε το Magisc module [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (ένα .zip αρχείο), **drag&drop it** στο τηλέφωνο, ανοίξτε την εφαρμογή **Magics** στο τηλέφωνο στην ενότητα **`Modules`**, κάντε κλικ στο **`Install from storage`**, επιλέξτε το `.zip` module και μόλις εγκατασταθεί **reboot** το τηλέφωνο:
|
||||
|
||||
<figure><img src="../../images/image (55).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
- Μετά την επανεκκίνηση, πηγαίνετε στο `Έμπιστες πιστοποιήσεις` -> `ΣΥΣΤΗΜΑ` και ελέγξτε ότι το πιστοποιητικό Postswigger είναι εκεί
|
||||
- Μετά την επανεκκίνηση, πηγαίνετε σε `Trusted credentials` -> `SYSTEM` και ελέγξτε ότι το Postswigger cert είναι εκεί
|
||||
|
||||
<figure><img src="../../images/image (56).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Μετά το Android 14
|
||||
### Learn how to create a Magisc module
|
||||
|
||||
Στην τελευταία έκδοση Android 14, έχει παρατηρηθεί μια σημαντική αλλαγή στη διαχείριση των πιστοποιητικών Αρχής Πιστοποίησης (CA) που είναι εμπιστευμένα από το σύστημα. Προηγουμένως, αυτά τα πιστοποιητικά βρίσκονταν στο **`/system/etc/security/cacerts/`**, προσβάσιμα και τροποποιήσιμα από χρήστες με δικαιώματα root, γεγονός που επέτρεπε άμεση εφαρμογή σε όλο το σύστημα. Ωστόσο, με το Android 14, η τοποθεσία αποθήκευσης έχει μεταφερθεί στο **`/apex/com.android.conscrypt/cacerts`**, έναν φάκελο εντός της διαδρομής **`/apex`**, ο οποίος είναι εκ φύσεως αμετάβλητος.
|
||||
Δείτε [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437)
|
||||
|
||||
Οι προσπάθειες να ξανατοποθετηθεί η **διαδρομή APEX cacerts** ως εγγράψιμη αποτυγχάνουν, καθώς το σύστημα δεν επιτρέπει τέτοιες λειτουργίες. Ακόμη και οι προσπάθειες να αποσυνδεθεί ή να επικαλυφθεί ο φάκελος με ένα προσωρινό σύστημα αρχείων (tmpfs) δεν παρακάμπτουν την αμεταβλησία; οι εφαρμογές συνεχίζουν να έχουν πρόσβαση στα αρχικά δεδομένα πιστοποιητικού ανεξάρτητα από τις αλλαγές στο επίπεδο του συστήματος αρχείων. Αυτή η ανθεκτικότητα οφείλεται στο ότι η τοποθέτηση **`/apex`** έχει ρυθμιστεί με ΙΔΙΩΤΙΚΗ προπαγάνδα, διασφαλίζοντας ότι οποιεσδήποτε τροποποιήσεις εντός του φακέλου **`/apex`** δεν επηρεάζουν άλλες διαδικασίες.
|
||||
## Post Android 14
|
||||
|
||||
Η αρχικοποίηση του Android περιλαμβάνει τη διαδικασία `init`, η οποία, κατά την εκκίνηση του λειτουργικού συστήματος, ξεκινά επίσης τη διαδικασία Zygote. Αυτή η διαδικασία είναι υπεύθυνη για την εκκίνηση διαδικασιών εφαρμογών με ένα νέο namespace τοποθέτησης που περιλαμβάνει μια ιδιωτική τοποθέτηση **`/apex`**, απομονώνοντας έτσι τις αλλαγές σε αυτόν τον φάκελο από άλλες διαδικασίες.
|
||||
Στην πιο πρόσφατη έκδοση Android 14, παρατηρήθηκε σημαντική αλλαγή στον τρόπο χειρισμού των system-trusted Certificate Authority (CA) certificates. Παλαιότερα, αυτά τα πιστοποιητικά βρίσκονταν στο **`/system/etc/security/cacerts/`**, προσβάσιμα και τροποποιήσιμα από χρήστες με root προνόμια, πράγμα που επέτρεπε την άμεση εφαρμογή τους σε όλο το σύστημα. Ωστόσο, με το Android 14, η τοποθεσία αποθήκευσης μεταφέρθηκε στο **`/apex/com.android.conscrypt/cacerts`**, έναν κατάλογο εντός της διαδρομής **`/apex`**, ο οποίος είναι αμετάβλητος από τη φύση του.
|
||||
|
||||
Ωστόσο, υπάρχει μια λύση για όσους χρειάζονται να τροποποιήσουν τα πιστοποιητικά CA που είναι εμπιστευμένα από το σύστημα εντός του φακέλου **`/apex`**. Αυτό περιλαμβάνει την χειροκίνητη ξανατοποθέτηση του **`/apex`** για να αφαιρεθεί η ΙΔΙΩΤΙΚΗ προπαγάνδα, καθιστώντας το έτσι εγγράψιμο. Η διαδικασία περιλαμβάνει την αντιγραφή των περιεχομένων του **`/apex/com.android.conscrypt`** σε άλλη τοποθεσία, την αποσύνδεση του φακέλου **`/apex/com.android.conscrypt`** για να εξαλειφθεί ο περιορισμός μόνο για ανάγνωση, και στη συνέχεια την αποκατάσταση των περιεχομένων στην αρχική τους τοποθεσία εντός του **`/apex`**. Αυτή η προσέγγιση απαιτεί γρήγορη δράση για να αποφευχθούν οι κραδασμοί του συστήματος. Για να διασφαλιστεί η εφαρμογή αυτών των αλλαγών σε όλο το σύστημα, συνιστάται να επανεκκινήσετε τον `system_server`, ο οποίος επανεκκινεί αποτελεσματικά όλες τις εφαρμογές και φέρνει το σύστημα σε μια συνεπή κατάσταση.
|
||||
Οι προσπάθειες να γίνει remount η APEX cacerts διαδρομή ως εγγράψιμη αποτυγχάνουν, καθώς το σύστημα δεν επιτρέπει τέτοιες ενέργειες. Ακόμη και οι προσπάθειες να απομακρυνθεί ή να επικαλυφθεί ο κατάλογος με ένα προσωρινό file system (tmpfs) δεν παρακάμπτουν την αμεταβλητότητα· οι εφαρμογές συνεχίζουν να προσπελάζουν τα αρχικά δεδομένα πιστοποιητικού ανεξάρτητα από αλλαγές στο επίπεδο του file system. Αυτή η ανθεκτικότητα οφείλεται στο ότι το mount του **`/apex`** έχει ρυθμιστεί με PRIVATE propagation, εξασφαλίζοντας ότι οποιεσδήποτε τροποποιήσεις εντός του καταλόγου **`/apex`** δεν επηρεάζουν άλλες διεργασίες.
|
||||
|
||||
Η αρχικοποίηση του Android περιλαμβάνει τη διεργασία `init`, η οποία, κατά την εκκίνηση του λειτουργικού συστήματος, ξεκινά επίσης τη διεργασία Zygote. Αυτή η διεργασία είναι υπεύθυνη για την εκκίνηση των διεργασιών εφαρμογών με ένα νέο mount namespace που περιλαμβάνει ένα private **`/apex`** mount, απομονώνοντας έτσι τις αλλαγές σε αυτόν τον κατάλογο από άλλες διεργασίες.
|
||||
|
||||
Παρόλα αυτά, υπάρχει μια λύση για όσους χρειάζονται να τροποποιήσουν τα system-trusted CA certificates εντός του καταλόγου **`/apex`**. Αυτή περιλαμβάνει το χειροκίνητο remount του **`/apex`** για την αφαίρεση της PRIVATE propagation, καθιστώντας το έτσι εγγράψιμο. Η διαδικασία περιλαμβάνει την αντιγραφή του περιεχομένου του **`/apex/com.android.conscrypt`** σε άλλη θέση, την αποπροσάρτηση (unmount) του καταλόγου **`/apex/com.android.conscrypt`** για να αφαιρεθεί ο περιορισμός μόνο για ανάγνωση, και στη συνέχεια την επαναφορά του περιεχομένου στην αρχική του θέση εντός του **`/apex`**. Αυτή η προσέγγιση απαιτεί ταχεία ενέργεια για να αποφευχθεί η αστάθεια ή το crash του συστήματος. Για να εξασφαλιστεί η εφαρμογή των αλλαγών σε ολόκληρο το σύστημα, συνιστάται η επανεκκίνηση της `system_server`, η οποία ουσιαστικά επανεκκινεί όλες τις εφαρμογές και επαναφέρει το σύστημα σε συνεπή κατάσταση.
|
||||
```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.
|
||||
@ -115,28 +131,28 @@ wait # Launched in parallel - wait for completion here
|
||||
|
||||
echo "System certificate injected"
|
||||
```
|
||||
### Bind-mounting through NSEnter
|
||||
### Bind-mounting μέσω NSEnter
|
||||
|
||||
1. **Ρύθμιση ενός Εγγράψιμου Καταλόγου**: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με την τοποθέτηση ενός `tmpfs` πάνω από τον υπάρχοντα κατάλογο πιστοποιητικών συστήματος που δεν είναι APEX. Αυτό επιτυγχάνεται με την ακόλουθη εντολή:
|
||||
1. **Δημιουργία εγγράψιμου καταλόγου**: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με την προσάρτηση ενός `tmpfs` πάνω από τον υπάρχοντα μη-APEX κατάλογο πιστοποιητικών συστήματος. Αυτό γίνεται με την ακόλουθη εντολή:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Προετοιμασία Πιστοποιητικών CA**: Αφού ρυθμιστεί ο εγγράψιμος φάκελος, τα πιστοποιητικά CA που προορίζονται για χρήση θα πρέπει να αντιγραφούν σε αυτόν τον φάκελο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από το `/apex/com.android.conscrypt/cacerts/`. Είναι απαραίτητο να προσαρμοστούν οι άδειες και οι ετικέτες SELinux αυτών των πιστοποιητικών αναλόγως.
|
||||
3. **Δέσμευση Μοντάρισμα για Zygote**: Χρησιμοποιώντας το `nsenter`, εισέρχεται κανείς στο namespace μοντάρισμα του Zygote. Το Zygote, ως η διαδικασία που είναι υπεύθυνη για την εκκίνηση εφαρμογών Android, απαιτεί αυτό το βήμα για να διασφαλιστεί ότι όλες οι εφαρμογές που θα ξεκινήσουν από εδώ και στο εξής θα χρησιμοποιούν τα νέα ρυθμισμένα πιστοποιητικά CA. Η εντολή που χρησιμοποιείται είναι:
|
||||
2. **Preparing CA Certificates**: Αφού ρυθμιστεί ο εγγράψιμος κατάλογος, τα πιστοποιητικά CA που σκοπεύει κανείς να χρησιμοποιήσει πρέπει να αντιγραφούν σε αυτόν τον κατάλογο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από `/apex/com.android.conscrypt/cacerts/`. Είναι απαραίτητο να προσαρμόσετε τα δικαιώματα και τις ετικέτες SELinux αυτών των πιστοποιητικών ανάλογα.
|
||||
3. **Bind Mounting for Zygote**: Χρησιμοποιώντας `nsenter`, εισέρχεται κανείς στο mount namespace του Zygote. Το Zygote, ως η διεργασία που είναι υπεύθυνη για την εκκίνηση των εφαρμογών Android, απαιτεί αυτό το βήμα ώστε να διασφαλιστεί ότι όλες οι εφαρμογές που θα ξεκινούν εφεξής θα χρησιμοποιούν τα πρόσφατα διαμορφωμένα πιστοποιητικά CA. Η εντολή που χρησιμοποιείται είναι:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
Αυτό διασφαλίζει ότι κάθε νέα εφαρμογή που ξεκινά θα τηρεί τη ρυθμισμένη ενημερωμένη CA πιστοποίηση.
|
||||
Αυτό διασφαλίζει ότι κάθε νέα εφαρμογή που ξεκινάει θα συμμορφώνεται με τη ρύθμιση των ενημερωμένων πιστοποιητικών CA.
|
||||
|
||||
4. **Εφαρμογή Αλλαγών σε Τρέχουσες Εφαρμογές**: Για να εφαρμοστούν οι αλλαγές σε ήδη τρέχουσες εφαρμογές, χρησιμοποιείται ξανά το `nsenter` για να εισέλθει στο namespace κάθε εφαρμογής ξεχωριστά και να εκτελέσει μια παρόμοια δέσμευση. Η απαραίτητη εντολή είναι:
|
||||
4. **Εφαρμογή Αλλαγών σε Εκτελούμενες Εφαρμογές**: Για να εφαρμόσετε τις αλλαγές σε εφαρμογές που ήδη εκτελούνται, χρησιμοποιείται ξανά το `nsenter` για να μπείτε στο namespace κάθε εφαρμογής ξεχωριστά και να πραγματοποιήσετε ένα παρόμοιο bind mount. Η απαραίτητη εντολή είναι:
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
5. **Εναλλακτική Προσέγγιση - Ήπια Επανεκκίνηση**: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση της δέσμευσης στο `init` διαδικασία (PID 1) ακολουθούμενη από μια ήπια επανεκκίνηση του λειτουργικού συστήματος με τις εντολές `stop && start`. Αυτή η προσέγγιση θα διαδώσει τις αλλαγές σε όλα τα namespaces, αποφεύγοντας την ανάγκη να απευθυνθεί κανείς ξεχωριστά σε κάθε εκτελούμενη εφαρμογή. Ωστόσο, αυτή η μέθοδος γενικά προτιμάται λιγότερο λόγω της ταλαιπωρίας της επανεκκίνησης.
|
||||
5. **Alternative Approach - Soft Reboot**: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση του bind mount στη διαδικασία `init` (PID 1) και στη συνέχεια ένα soft reboot του λειτουργικού συστήματος με τις εντολές `stop && start`. Αυτή η προσέγγιση θα διαδώσει τις αλλαγές σε όλα τα namespaces, αποφεύγοντας την ανάγκη να απευθυνθεί κανείς σε κάθε εκτελούμενη app ξεχωριστά. Ωστόσο, αυτή η μέθοδος γενικά προτιμάται λιγότερο λόγω της αναστάτωσης από την επανεκκίνηση.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
|
||||
- [Android 14: Install a system CA certificate on a rooted device](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user