iOS Universal Links

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Εισαγωγή

Οι καθολικοί συνδέσμοι προσφέρουν μια απρόσκοπτη ανακατεύθυνση στους χρήστες, ανοίγοντας απευθείας περιεχόμενο στην εφαρμογή, παρακάμπτοντας την ανακατεύθυνση στο Safari. Αυτοί οι συνδέσμοι είναι μοναδικοί και ασφαλείς, καθώς δεν μπορούν να διεκδικηθούν από άλλες εφαρμογές. Αυτό εξασφαλίζεται με τη φιλοξενία ενός αρχείου JSON apple-app-site-association στον κατάλογο ρίζας του ιστότοπου, δημιουργώντας ένα επαληθέύσιμο σύνδεσμο μεταξύ του ιστότοπου και της εφαρμογής. Στις περιπτώσεις όπου η εφαρμογή δεν είναι εγκατεστημένη, το Safari θα αναλάβει και θα κατευθύνει τον χρήστη στην ιστοσελίδα, διατηρώντας την παρουσία της εφαρμογής.

Για τους ελεγκτές διείσδυσης, το αρχείο apple-app-site-association είναι ιδιαίτερα ενδιαφέρον, καθώς μπορεί να αποκαλύψει ευαίσθητα μονοπάτια, πιθανώς συμπεριλαμβανομένων εκείνων που σχετίζονται με μη απελευθερωμένα χαρακτηριστικά.

Ανάλυση της εξουσιοδότησης των συνδεδεμένων τομέων

Οι προγραμματιστές ενεργοποιούν τους καθολικούς συνδέσμους διαμορφώνοντας τους συνδεδεμένους τομείς στην καρτέλα Ικανοτήτων του Xcode ή επιθεωρώντας το αρχείο .entitlements. Κάθε τομέας προηγείται από το applinks:. Για παράδειγμα, η διαμόρφωση του Telegram μπορεί να εμφανίζεται ως εξής:

<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

Για περισσότερες λεπτομέρειες, ανατρέξτε στην αρχειοθετημένη τεκμηρίωση του Apple Developer.

Εάν εργάζεστε με μια μεταγλωττισμένη εφαρμογή, οι εξουσιοδοτήσεις μπορούν να εξαχθούν όπως περιγράφεται στο ακόλουθο εγχειρίδιο.

Ανάκτηση του αρχείου Apple App Site Association

Το αρχείο apple-app-site-association πρέπει να ανακτηθεί από τον διακομιστή χρησιμοποιώντας τους τομείς που καθορίζονται στις εξουσιοδοτήσεις. Βεβαιωθείτε ότι το αρχείο είναι προσβάσιμο μέσω HTTPS απευθείας στο https://<domain>/apple-app-site-association. Εργαλεία όπως το Apple App Site Association (AASA) Validator μπορούν να βοηθήσουν σε αυτήν τη διαδικασία.

Η εφαρμογή πρέπει να υλοποιήσει συγκεκριμένες μεθόδους για να χειριστεί σωστά τα universal links. Η κύρια μέθοδος που πρέπει να αναζητηθεί είναι η application:continueUserActivity:restorationHandler:. Είναι κρίσιμο να εξασφαλιστεί ότι το σχήμα των χειριζόμενων URL είναι HTTP ή HTTPS, καθώς άλλα δεν θα υποστηρίζονται.

Επικύρωση της μεθόδου χειρισμού των δεδομένων

Όταν ένα universal link ανοίγει μια εφαρμογή, ένα αντικείμενο NSUserActivity περνά στην εφαρμογή με το URL. Πριν επεξεργαστείτε αυτό το URL, είναι σημαντικό να το επικυρώσετε και να το απολυμαίνετε για να αποτρέψετε κινδύνους ασφαλείας. Παρακάτω παρουσιάζεται ένα παράδειγμα σε 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 πρέπει να αναλύονται και να επικυρώνονται προσεκτικά, ειδικά αν περιλαμβάνουν παραμέτρους, για να προστατευθούμε από πιθανές παραποιήσεις ή μη έγκυρα δεδομένα. Η διεπαφή NSURLComponents είναι χρήσιμη για αυτόν τον σκοπό, όπως φαίνεται παρακάτω:

NSURLComponents *components = [NSURLComponents componentsWithString:@"https://example.com/path?param1=value1&param2=value2"];
if (components) {
    // Perform validation and further processing
} else {
    // Handle malformed URL
}
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
}
}

Μέσω συνεπούς ρύθμισης και επαλήθευσης, οι προγραμματιστές μπορούν να διασφαλίσουν ότι οι καθολικοί σύνδεσμοι βελτιώνουν την εμπειρία του χρήστη διατηρώντας ταυτόχρονα τα πρότυπα ασφάλειας και απορρήτου.

Αναφορές

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated