mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
78 lines
7.8 KiB
Markdown
78 lines
7.8 KiB
Markdown
# iOS Custom URI Handlers / Deeplinks / Custom Schemes
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## Basic Information
|
||
|
||
Οι προσαρμοσμένες διευθύνσεις URL επιτρέπουν στις εφαρμογές να επικοινωνούν χρησιμοποιώντας ένα προσαρμοσμένο πρωτόκολλο, όπως αναφέρεται στην [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Αυτές οι διευθύνσεις πρέπει να δηλώνονται από την εφαρμογή, η οποία στη συνέχεια χειρίζεται τις εισερχόμενες διευθύνσεις URL σύμφωνα με αυτές τις διευθύνσεις. Είναι κρίσιμο να **επικυρώνετε όλους τους παραμέτρους URL** και να **απορρίπτετε οποιεσδήποτε κακώς σχηματισμένες διευθύνσεις URL** για να αποτρέψετε επιθέσεις μέσω αυτού του διαύλου.
|
||
|
||
Δίνεται ένα παράδειγμα όπου η URI `myapp://hostname?data=123876123` καλεί μια συγκεκριμένη ενέργεια εφαρμογής. Μια αναφερόμενη ευπάθεια ήταν στην εφαρμογή Skype Mobile, η οποία επέτρεπε μη επιτρεπόμενες ενέργειες κλήσεων μέσω του πρωτοκόλλου `skype://`. Οι καταχωρημένες διευθύνσεις μπορούν να βρεθούν στο `Info.plist` της εφαρμογής κάτω από `CFBundleURLTypes`. Οι κακόβουλες εφαρμογές μπορούν να εκμεταλλευτούν αυτό επανακαταχωρώντας URIs για να παγιδεύσουν ευαίσθητες πληροφορίες.
|
||
|
||
### Application Query Schemes Registration
|
||
|
||
Από το iOS 9.0, για να ελέγξετε αν μια εφαρμογή είναι διαθέσιμη, το `canOpenURL:` απαιτεί τη δήλωση διευθύνσεων URL στο `Info.plist` κάτω από `LSApplicationQueriesSchemes`. Αυτό περιορίζει τις διευθύνσεις που μπορεί να ερωτήσει μια εφαρμογή σε 50, ενισχύοντας την ιδιωτικότητα αποτρέποντας την καταμέτρηση εφαρμογών.
|
||
```xml
|
||
<key>LSApplicationQueriesSchemes</key>
|
||
<array>
|
||
<string>url_scheme1</string>
|
||
<string>url_scheme2</string>
|
||
</array>
|
||
```
|
||
### Δοκιμή Χειρισμού και Επικύρωσης URL
|
||
|
||
Οι προγραμματιστές θα πρέπει να εξετάσουν συγκεκριμένες μεθόδους στον πηγαίο κώδικα για να κατανοήσουν την κατασκευή και την επικύρωση διαδρομών URL, όπως `application:didFinishLaunchingWithOptions:` και `application:openURL:options:`. Για παράδειγμα, το Telegram χρησιμοποιεί διάφορες μεθόδους για το άνοιγμα URL:
|
||
```swift
|
||
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
|
||
self.openUrl(url: url)
|
||
return true
|
||
}
|
||
|
||
func application(_ application: UIApplication, open url: URL, sourceApplication: String?,
|
||
annotation: Any) -> Bool {
|
||
self.openUrl(url: url)
|
||
return true
|
||
}
|
||
|
||
func application(_ app: UIApplication, open url: URL,
|
||
options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
|
||
self.openUrl(url: url)
|
||
return true
|
||
}
|
||
|
||
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
|
||
self.openUrl(url: url)
|
||
return true
|
||
}
|
||
```
|
||
### Δοκιμή Αιτημάτων URL σε Άλλες Εφαρμογές
|
||
|
||
Μέθοδοι όπως το `openURL:options:completionHandler:` είναι κρίσιμες για το άνοιγμα URLs για αλληλεπίδραση με άλλες εφαρμογές. Η αναγνώριση της χρήσης τέτοιων μεθόδων στον πηγαίο κώδικα της εφαρμογής είναι κλειδί για την κατανόηση των εξωτερικών επικοινωνιών.
|
||
|
||
### Δοκιμή για Καταργημένες Μεθόδους
|
||
|
||
Οι καταργημένες μέθοδοι που χειρίζονται το άνοιγμα URLs, όπως το `application:handleOpenURL:` και το `openURL:`, θα πρέπει να αναγνωρίζονται και να εξετάζονται για τις επιπτώσεις στην ασφάλεια.
|
||
|
||
### Fuzzing URL Schemes
|
||
|
||
Το fuzzing URL schemes μπορεί να εντοπίσει σφάλματα διαφθοράς μνήμης. Εργαλεία όπως το [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία ανοίγοντας URLs με ποικιλία payloads για να παρακολουθούν για κρασαρίσματα, όπως φαίνεται από τη χειραγώγηση URLs στην εφαρμογή iGoat-Swift:
|
||
```bash
|
||
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
|
||
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
|
||
Watching for crashes from iGoat...
|
||
No logs were moved.
|
||
Opened URL: iGoat://?contactNumber=0&message=0
|
||
```
|
||
## Hijacking προσαρμοσμένων URL scheme
|
||
|
||
Σύμφωνα με [**αυτή την ανάρτηση**](https://evanconnelly.github.io/post/ios-oauth/), κακόβουλες εφαρμογές θα μπορούσαν **να καταχωρήσουν άλλες προσαρμοσμένες ρυθμίσεις εφαρμογών,** στη συνέχεια η κακόβουλη εφαρμογή μπορεί να ανοίξει έναν περιηγητή που έχει όλα τα cookies της εφαρμογής Safari με [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters).
|
||
|
||
Με τον περιηγητή, η κακόβουλη εφαρμογή μπορεί να φορτώσει μια ιστοσελίδα που ελέγχεται από τον επιτιθέμενο και το TCC θα ζητήσει από τον κινητό χρήστη άδειες για να ανοίξει αυτή την εφαρμογή. Στη συνέχεια, η κακόβουλη ιστοσελίδα θα μπορούσε να ανακατευθύνει σε μια σελίδα θύματος, για παράδειγμα, μια ροή OAuth με την παράμετρο `prompt=none`. Αν ο χρήστης ήταν ήδη συνδεδεμένος στη ροή OAuth, η ροή OAuth θα στείλει το μυστικό πίσω στην εφαρμογή θύματος χρησιμοποιώντας το προσαρμοσμένο scheme της εφαρμογής θύματος.\
|
||
Ωστόσο, επειδή η κακόβουλη εφαρμογή το έχει επίσης καταχωρήσει και επειδή ο χρησιμοποιούμενος περιηγητής είναι μέσα στην κακόβουλη εφαρμογή, το προσαρμοσμένο scheme θα διαχειριστεί σε αυτή την περίπτωση από την κακόβουλη εφαρμογή, η οποία θα είναι σε θέση να κλέψει το OAuth token.
|
||
|
||
## Αναφορές
|
||
|
||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
|
||
- [https://evanconnelly.github.io/post/ios-oauth/](https://evanconnelly.github.io/post/ios-oauth/)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|