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/android-task-h
This commit is contained in:
parent
676fc00e09
commit
d397f12f87
@ -8,10 +8,10 @@
|
||||
|
||||
Ακολουθεί μια γρήγορη ανάλυση των μεταβάσεων δραστηριοτήτων:
|
||||
|
||||
- **Activity 1** ξεκινά ως η μοναδική δραστηριότητα στο foreground.
|
||||
- Η εκκίνηση της **Activity 2** σπρώχνει την **Activity 1** στο back stack, φέρνοντας την **Activity 2** στο foreground.
|
||||
- **Activity 1** ξεκινά ως η μοναδική δραστηριότητα στο προσκήνιο.
|
||||
- Η εκκίνηση της **Activity 2** σπρώχνει την **Activity 1** στο back stack, φέρνοντας την **Activity 2** στο προσκήνιο.
|
||||
- Η εκκίνηση της **Activity 3** μετακινεί την **Activity 1** και την **Activity 2** πιο πίσω στο stack, με την **Activity 3** τώρα μπροστά.
|
||||
- Το κλείσιμο της **Activity 3** φέρνει την **Activity 2** πίσω στο foreground, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android.
|
||||
- Το κλείσιμο της **Activity 3** φέρνει την **Activity 2** πίσω στο προσκήνιο, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -30,14 +30,20 @@
|
||||
1. **Malicious App Installation**: Το θύμα εγκαθιστά την εφαρμογή του επιτιθέμενου στη συσκευή του.
|
||||
2. **Initial Activation**: Το θύμα ανοίγει πρώτα την κακόβουλη εφαρμογή, προετοιμάζοντας τη συσκευή για την επίθεση.
|
||||
3. **Target App Launch Attempt**: Το θύμα προσπαθεί να ανοίξει την στοχευμένη εφαρμογή.
|
||||
4. **Hijack Execution**: Λόγω της αντιστοιχίας task affinity, η κακόβουλη εφαρμογή εκκινείται στη θέση της στοχευμένης εφαρμογής.
|
||||
4. **Hijack Execution**: Σε κάποιο σημείο, η εφαρμογή προσπαθεί να ανοίξει την **singleTask** προβολή. Λόγω της αντιστοιχίας task affinity, η κακόβουλη εφαρμογή εκκινείται στη θέση της στοχευμένης εφαρμογής.
|
||||
5. **Deception**: Η κακόβουλη εφαρμογή παρουσιάζει μια ψεύτικη οθόνη σύνδεσης που μοιάζει με την στοχευμένη εφαρμογή, παραπλανώντας τον χρήστη να εισάγει ευαίσθητες πληροφορίες.
|
||||
|
||||
> [!TIP]
|
||||
> Σημειώστε ότι για να λειτουργήσει αυτή η επίθεση, η ευάλωτη προβολή **δεν χρειάζεται να έχει εξαγωγή σε true** ούτε χρειάζεται να είναι η κύρια δραστηριότητα.
|
||||
|
||||
Για μια πρακτική εφαρμογή αυτής της επίθεσης, ανατρέξτε στο αποθετήριο Task Hijacking Strandhogg στο GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
|
||||
|
||||
### Prevention Measures
|
||||
|
||||
Για να αποτραπούν τέτοιες επιθέσεις, οι προγραμματιστές μπορούν να ορίσουν το `taskAffinity` σε κενή συμβολοσειρά και να επιλέξουν τη λειτουργία εκκίνησης `singleInstance`, διασφαλίζοντας την απομόνωση της εφαρμογής τους από άλλες. Η προσαρμογή της λειτουργίας `onBackPressed()` προσφέρει επιπλέον προστασία κατά της κατάληψης εργασιών.
|
||||
Για να αποτρέψουν τέτοιες επιθέσεις, οι προγραμματιστές μπορούν να:
|
||||
- Ορίσουν το **`taskAffinity`** της **singleTask** προβολής σε κενή συμβολοσειρά (`android:taskAffinity=""`)
|
||||
- Επιλέξουν τη λειτουργία εκκίνησης **`singleInstance`**, διασφαλίζοντας την απομόνωση της εφαρμογής τους από άλλες.
|
||||
- Προσαρμόσουν τη λειτουργία **`onBackPressed()`** για επιπλέον προστασία κατά της κατάληψης εργασιών.
|
||||
|
||||
## **References**
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Ανάλυση Εφαρμογής React Native
|
||||
|
||||
Για να επιβεβαιώσετε αν η εφαρμογή έχει κατασκευαστεί με το πλαίσιο React Native, ακολουθήστε τα παρακάτω βήματα:
|
||||
Για να επιβεβαιώσετε αν η εφαρμογή έχει κατασκευαστεί στο πλαίσιο React Native, ακολουθήστε αυτά τα βήματα:
|
||||
|
||||
1. Μετονομάστε το αρχείο APK με επέκταση zip και εξαγάγετέ το σε έναν νέο φάκελο χρησιμοποιώντας την εντολή `cp com.example.apk example-apk.zip` και `unzip -qq example-apk.zip -d ReactNative`.
|
||||
|
||||
@ -10,30 +10,72 @@
|
||||
|
||||
3. Χρησιμοποιήστε την εντολή `find . -print | grep -i ".bundle$"` για να αναζητήσετε το αρχείο JavaScript.
|
||||
|
||||
Για να αναλύσετε περαιτέρω τον κώδικα JavaScript, δημιουργήστε ένα αρχείο με το όνομα `index.html` στον ίδιο φάκελο με τον παρακάτω κώδικα:
|
||||
## Κώδικας Javascript
|
||||
|
||||
Εάν ελέγχοντας τα περιεχόμενα του `index.android.bundle` βρείτε τον κώδικα JavaScript της εφαρμογής (ακόμα και αν είναι minified), μπορείτε να **τον αναλύσετε για να βρείτε ευαίσθητες πληροφορίες και ευπάθειες**.
|
||||
|
||||
Καθώς το bundle περιέχει στην πραγματικότητα όλο τον κώδικα JS της εφαρμογής, είναι δυνατόν να **τον χωρίσετε σε διάφορα αρχεία** (πιθανώς διευκολύνοντας την αντίστροφη μηχανική του) χρησιμοποιώντας το **εργαλείο [react-native-decompiler](https://github.com/numandev1/react-native-decompiler)**.
|
||||
|
||||
### Webpack
|
||||
|
||||
Για να αναλύσετε περαιτέρω τον κώδικα JavaScript, μπορείτε να ανεβάσετε το αρχείο στο [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) ή να ακολουθήσετε αυτά τα βήματα:
|
||||
|
||||
1. Δημιουργήστε ένα αρχείο με το όνομα `index.html` στον ίδιο φάκελο με τον παρακάτω κώδικα:
|
||||
```html
|
||||
<script src="./index.android.bundle"></script>
|
||||
```
|
||||
Μπορείτε να ανεβάσετε το αρχείο στο [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) ή να ακολουθήσετε αυτά τα βήματα:
|
||||
2. Ανοίξτε το `index.html` αρχείο στο Google Chrome.
|
||||
|
||||
1. Ανοίξτε το αρχείο `index.html` στο Google Chrome.
|
||||
3. Ανοίξτε την Developer Toolbar πατώντας **Command+Option+J για OS X** ή **Control+Shift+J για Windows**.
|
||||
|
||||
2. Ανοίξτε την Εργαλειοθήκη Ανάπτυξης πατώντας **Command+Option+J για OS X** ή **Control+Shift+J για Windows**.
|
||||
4. Κάντε κλικ στο "Sources" στην Developer Toolbar. Θα πρέπει να δείτε ένα αρχείο JavaScript που είναι χωρισμένο σε φακέλους και αρχεία, αποτελώντας το κύριο bundle.
|
||||
|
||||
3. Κάντε κλικ στο "Sources" στην Εργαλειοθήκη Ανάπτυξης. Θα πρέπει να δείτε ένα αρχείο JavaScript που είναι χωρισμένο σε φακέλους και αρχεία, αποτελώντας το κύριο πακέτο.
|
||||
Αν βρείτε ένα αρχείο που ονομάζεται `index.android.bundle.map`, θα μπορείτε να αναλύσετε τον πηγαίο κώδικα σε μη ελαχιστοποιημένη μορφή. Τα αρχεία map περιέχουν πηγή χαρτογράφησης, η οποία σας επιτρέπει να χαρτογραφήσετε ελαχιστοποιημένα αναγνωριστικά.
|
||||
|
||||
Αν βρείτε ένα αρχείο που ονομάζεται `index.android.bundle.map`, θα μπορείτε να αναλύσετε τον πηγαίο κώδικα σε μη ελαχιστοποιημένη μορφή. Τα αρχεία χάρτη περιέχουν χαρτογράφηση πηγής, η οποία σας επιτρέπει να χαρτογραφήσετε ελαχιστοποιημένα αναγνωριστικά.
|
||||
Για να αναζητήσετε ευαίσθητα διαπιστευτήρια και endpoints, ακολουθήστε αυτά τα βήματα:
|
||||
|
||||
Για να αναζητήσετε ευαίσθητα διαπιστευτήρια και σημεία πρόσβασης, ακολουθήστε αυτά τα βήματα:
|
||||
|
||||
1. Προσδιορίστε ευαίσθητες λέξεις-κλειδιά για να αναλύσετε τον κώδικα JavaScript. Οι εφαρμογές React Native συχνά χρησιμοποιούν υπηρεσίες τρίτων, όπως Firebase, σημεία πρόσβασης υπηρεσίας AWS S3, ιδιωτικά κλειδιά κ.λπ.
|
||||
1. Προσδιορίστε ευαίσθητες λέξεις-κλειδιά για να αναλύσετε τον κώδικα JavaScript. Οι εφαρμογές React Native συχνά χρησιμοποιούν τρίτες υπηρεσίες όπως Firebase, endpoints υπηρεσιών AWS S3, ιδιωτικά κλειδιά κ.λπ.
|
||||
|
||||
2. Σε αυτή την συγκεκριμένη περίπτωση, παρατηρήθηκε ότι η εφαρμογή χρησιμοποιούσε την υπηρεσία Dialogflow. Αναζητήστε ένα μοτίβο σχετικό με τη διαμόρφωσή της.
|
||||
|
||||
3. Ήταν τυχερό ότι ευαίσθητα σκληρά κωδικοποιημένα διαπιστευτήρια βρέθηκαν στον κώδικα JavaScript κατά τη διάρκεια της διαδικασίας αναγνώρισης.
|
||||
3. Ήταν τυχερό ότι ευαίσθητα σκληρά διαπιστευτήρια βρέθηκαν στον κώδικα JavaScript κατά τη διάρκεια της διαδικασίας αναγνώρισης.
|
||||
|
||||
### Αλλαγή κώδικα JS και ανακατασκευή
|
||||
|
||||
Σε αυτή την περίπτωση, η αλλαγή του κώδικα είναι εύκολη. Απλώς χρειάζεται να μετονομάσετε την εφαρμογή για να χρησιμοποιήσει την επέκταση `.zip` και να την εξαγάγετε. Στη συνέχεια, μπορείτε να **τροποποιήσετε τον κώδικα JS μέσα σε αυτό το bundle και να ανακατασκευάσετε την εφαρμογή**. Αυτό θα πρέπει να είναι αρκετό για να σας επιτρέψει να **εισάγετε κώδικα** στην εφαρμογή για σκοπούς δοκιμών.
|
||||
|
||||
## Hermes bytecode
|
||||
|
||||
Αν το bundle περιέχει **Hermes bytecode**, **δεν θα μπορείτε να έχετε πρόσβαση στον κώδικα Javascript** της εφαρμογής (ούτε καν στην ελαχιστοποιημένη έκδοση).
|
||||
|
||||
Μπορείτε να ελέγξετε αν το bundle περιέχει Hermes bytecode εκτελώντας την παρακάτω εντολή:
|
||||
```bash
|
||||
file index.android.bundle
|
||||
index.android.bundle: Hermes JavaScript bytecode, version 96
|
||||
```
|
||||
Ωστόσο, μπορείτε να χρησιμοποιήσετε τα εργαλεία **[hbctool](https://github.com/bongtrop/hbctool)**, **[hermes-dec](https://github.com/P1sec/hermes-dec)** ή **[hermes_rs](https://github.com/Pilfer/hermes_rs)** για να **αποσυναρμολογήσετε τον bytecode** και επίσης να **αποκωδικοποιήσετε σε κάποιο ψευδο JS κώδικα**. Για να το κάνετε αυτό, για παράδειγμα αυτές οι εντολές:
|
||||
```bash
|
||||
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
|
||||
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js
|
||||
```
|
||||
### Αλλαγή κώδικα και ανακατασκευή
|
||||
|
||||
Ιδανικά, θα πρέπει να είστε σε θέση να τροποποιήσετε τον αποσυναρμολογημένο κώδικα (αλλάζοντας μια σύγκριση, ή μια τιμή ή οτιδήποτε χρειάζεται να τροποποιήσετε) και στη συνέχεια να **ανακατασκευάσετε τον bytecode** και μετά να ανακατασκευάσετε την εφαρμογή.
|
||||
|
||||
Το εργαλείο **[hbctool](https://github.com/bongtrop/hbctool)** υποστηρίζει την αποσυναρμολόγηση του πακέτου και την επανακατασκευή του μετά την εκτέλεση των αλλαγών, ωστόσο **υποστηρίζει μόνο παλιές εκδόσεις** του bytecode Hermes.
|
||||
|
||||
Το εργαλείο **[hermes-dec](https://github.com/P1sec/hermes-dec)** δεν υποστηρίζει την ανακατασκευή του bytecode.
|
||||
|
||||
Το εργαλείο **[hermes_rs](https://github.com/Pilfer/hermes_rs)** υποστηρίζει την ανακατασκευή του bytecode, αλλά στην πραγματικότητα είναι μια βιβλιοθήκη και όχι ένα εργαλείο CLI.
|
||||
|
||||
## Δυναμική Ανάλυση
|
||||
|
||||
Μπορείτε να προσπαθήσετε να αναλύσετε δυναμικά την εφαρμογή χρησιμοποιώντας το Frida για να ενεργοποιήσετε τη λειτουργία προγραμματιστή της εφαρμογής React και να χρησιμοποιήσετε το **`react-native-debugger`** για να συνδεθείτε σε αυτήν. Ωστόσο, για αυτό χρειάζεστε τον πηγαίο κώδικα της εφαρμογής προφανώς. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με αυτό στο [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/).
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7)
|
||||
- [https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications](https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications)
|
||||
- [https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf](https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,13 +4,15 @@
|
||||
|
||||
## **Βασικές Πληροφορίες**
|
||||
|
||||
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή θύμα.\
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί πραγματικά ενέργειες στην εφαρμογή θύμα**.
|
||||
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**.
|
||||
|
||||
### Ανίχνευση
|
||||
|
||||
Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν κάποια άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί και αυτή την άδεια**.
|
||||
|
||||
Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο **`AndroidManifest.xml`** αρχείο. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking.
|
||||
|
||||
### Προστασία
|
||||
|
||||
#### Android 12 (API 31,32) και ανώτερα
|
||||
@ -19,7 +21,7 @@
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει αγγίγματα όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο.
|
||||
Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -37,7 +39,7 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
Η πιο **πρόσφατη εφαρμογή Android** που εκτελεί μια επίθεση Tapjacking (+ καλώντας πριν από μια εξαγόμενη δραστηριότητα της επιτιθέμενης εφαρμογής) μπορεί να βρεθεί στο: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
Η πιο **πρόσφατη εφαρμογή Android** που εκτελεί επίθεση Tapjacking (+ καλώντας πριν από μια εξαγόμενη δραστηριότητα της επιτιθέμενης εφαρμογής) μπορεί να βρεθεί στο: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
|
||||
Ακολουθήστε τις **οδηγίες README για να τη χρησιμοποιήσετε**.
|
||||
|
||||
|
@ -471,12 +471,13 @@ window.search = window.search || {};
|
||||
showResults(true);
|
||||
}
|
||||
|
||||
fetch(path_to_root + 'searchindex.json')
|
||||
var branch = lang === "en" ? "master" : lang
|
||||
fetch(`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.json`)
|
||||
.then(response => response.json())
|
||||
.then(json => init(json))
|
||||
.catch(error => { // Try to load searchindex.js if fetch failed
|
||||
var script = document.createElement('script');
|
||||
script.src = path_to_root + 'searchindex.js';
|
||||
script.src = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`;
|
||||
script.onload = () => init(window.search);
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
|
@ -55,6 +55,7 @@
|
||||
<!-- Provide site root to javascript -->
|
||||
<script>
|
||||
var path_to_root = "{{ path_to_root }}";
|
||||
var lang = "{{ language }}";
|
||||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
|
||||
</script>
|
||||
<!-- Start loading toc.js asap -->
|
||||
|
Loading…
x
Reference in New Issue
Block a user