mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
85 lines
8.2 KiB
Markdown
85 lines
8.2 KiB
Markdown
# iOS Universal Links
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## Εισαγωγή
|
||
|
||
Universal links προσφέρουν μια **αδιάκοπη εμπειρία ανακατεύθυνσης** στους χρήστες, ανοίγοντας απευθείας περιεχόμενο στην εφαρμογή, παρακάμπτοντας την ανάγκη για ανακατεύθυνση μέσω Safari. Αυτοί οι σύνδεσμοι είναι **μοναδικοί** και ασφαλείς, καθώς δεν μπορούν να διεκδικηθούν από άλλες εφαρμογές. Αυτό διασφαλίζεται με τη φιλοξενία ενός αρχείου `apple-app-site-association` JSON στον ριζικό κατάλογο της ιστοσελίδας, καθορίζοντας έναν επαληθεύσιμο σύνδεσμο μεταξύ της ιστοσελίδας και της εφαρμογής. Σε περιπτώσεις όπου η εφαρμογή δεν είναι εγκατεστημένη, το Safari θα αναλάβει και θα κατευθύνει τον χρήστη στη σελίδα, διατηρώντας την παρουσία της εφαρμογής.
|
||
|
||
Για τους penetration testers, το αρχείο `apple-app-site-association` είναι ιδιαίτερα ενδιαφέρον καθώς μπορεί να αποκαλύψει **ευαίσθητους διαδρόμους**, πιθανώς περιλαμβάνοντας αυτούς που σχετίζονται με μη δημοσιευμένα χαρακτηριστικά.
|
||
|
||
### **Ανάλυση του Δικαιώματος Σχετικών Τομέων**
|
||
|
||
Οι προγραμματιστές ενεργοποιούν τους Universal Links ρυθμίζοντας τους **Σχετικούς Τομείς** στην καρτέλα Δυνατοτήτων του Xcode ή ελέγχοντας το αρχείο `.entitlements`. Κάθε τομέας προτάσσεται με `applinks:`. Για παράδειγμα, η ρύθμιση του Telegram μπορεί να εμφανίζεται ως εξής:
|
||
```xml
|
||
<key>com.apple.developer.associated-domains</key>
|
||
<array>
|
||
<string>applinks:telegram.me</string>
|
||
<string>applinks:t.me</string>
|
||
</array>
|
||
```
|
||
Για πιο ολοκληρωμένες πληροφορίες, ανατρέξτε στην [αρχειοθετημένη τεκμηρίωση προγραμματιστών της Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
||
|
||
Εάν εργάζεστε με μια μεταγλωττισμένη εφαρμογή, τα δικαιώματα μπορούν να εξαχθούν όπως περιγράφεται σε [αυτήν την οδηγία](extracting-entitlements-from-compiled-application.md).
|
||
|
||
### **Ανάκτηση του Αρχείου Συσχέτισης Ιστοσελίδας της Apple App**
|
||
|
||
Το αρχείο `apple-app-site-association` θα πρέπει να ανακτηθεί από τον διακομιστή χρησιμοποιώντας τα domains που καθορίζονται στα δικαιώματα. Βεβαιωθείτε ότι το αρχείο είναι προσβάσιμο μέσω HTTPS απευθείας στο `https://<domain>/apple-app-site-association`. Εργαλεία όπως ο [Επαληθευτής Συσχέτισης Ιστοσελίδας της Apple App (AASA)](https://branch.io/resources/aasa-validator/) μπορούν να βοηθήσουν σε αυτή τη διαδικασία.
|
||
|
||
### **Διαχείριση Καθολικών Συνδέσμων στην Εφαρμογή**
|
||
|
||
Η εφαρμογή πρέπει να υλοποιήσει συγκεκριμένες μεθόδους για να διαχειρίζεται σωστά τους καθολικούς συνδέσμους. Η κύρια μέθοδος που πρέπει να αναζητηθεί είναι [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Είναι κρίσιμο ότι το σχήμα των URLs που διαχειρίζεται είναι HTTP ή HTTPS, καθώς άλλα δεν θα υποστηρίζονται.
|
||
|
||
#### **Επικύρωση της Μεθόδου Διαχείρισης Δεδομένων**
|
||
|
||
Όταν ένας καθολικός σύνδεσμος ανοίγει μια εφαρμογή, ένα αντικείμενο `NSUserActivity` μεταφέρεται στην εφαρμογή με το URL. Πριν από την επεξεργασία αυτού του URL, είναι απαραίτητο να το επικυρώσετε και να το καθαρίσετε για να αποφευχθούν κίνδυνοι ασφαλείας. Ακολουθεί ένα παράδειγμα σε Swift που δείχνει τη διαδικασία:
|
||
```swift
|
||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||
// Check for web browsing activity and valid URL
|
||
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
|
||
application.open(url, options: [:], completionHandler: nil)
|
||
}
|
||
|
||
return true
|
||
}
|
||
```
|
||
Οι διευθύνσεις URL θα πρέπει να αναλύονται και να επικυρώνονται προσεκτικά, ειδικά αν περιλαμβάνουν παραμέτρους, για να προστατευτούν από πιθανή παραποίηση ή κακώς διαμορφωμένα δεδομένα. Η API `NSURLComponents` είναι χρήσιμη για αυτόν τον σκοπό, όπως αποδεικνύεται παρακάτω:
|
||
```swift
|
||
func application(_ application: UIApplication,
|
||
continue userActivity: NSUserActivity,
|
||
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
|
||
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
|
||
let incomingURL = userActivity.webpageURL,
|
||
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
|
||
let path = components.path,
|
||
let params = components.queryItems else {
|
||
return false
|
||
}
|
||
|
||
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
|
||
let photoIndex = params.first(where: { $0.name == "index" })?.value {
|
||
// Process the URL with album name and photo index
|
||
|
||
return true
|
||
|
||
} else {
|
||
// Handle invalid or missing parameters
|
||
|
||
return false
|
||
}
|
||
}
|
||
```
|
||
Μέσω **επιμελούς διαμόρφωσης και επικύρωσης**, οι προγραμματιστές μπορούν να διασφαλίσουν ότι οι καθολικοί σύνδεσμοι βελτιώνουν την εμπειρία του χρήστη ενώ διατηρούν τα πρότυπα ασφάλειας και ιδιωτικότητας.
|
||
|
||
## Εργαλεία
|
||
|
||
- [GetUniversal.link](https://getuniversal.link/): Βοηθά στην απλοποίηση της δοκιμής και διαχείρισης των Καθολικών Συνδέσμων και του αρχείου AASA της εφαρμογής σας. Απλά εισάγετε το domain σας για να επαληθεύσετε την ακεραιότητα του αρχείου AASA ή χρησιμοποιήστε τον προσαρμοσμένο πίνακα ελέγχου για να δοκιμάσετε εύκολα τη συμπεριφορά των συνδέσμων. Αυτό το εργαλείο σας βοηθά επίσης να προσδιορίσετε πότε η Apple θα ευρετηριάσει ξανά το αρχείο AASA σας.
|
||
|
||
## Αναφορές
|
||
|
||
- [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
|
||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|