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