Webview Attacks
Οδηγός για τις Διαμορφώσεις και την Ασφάλεια του WebView
Επισκόπηση των Ευπαθειών του WebView
Ένα κρίσιμο κομμάτι της ανάπτυξης Android αφορά τη σωστή χειρισμό των WebViews. Αυτός ο οδηγός αναδεικνύει βασικές διαμορφώσεις και πρακτικές ασφαλείας για τη μείωση των κινδύνων που σχετίζονται με τη χρήση του WebView.
Πρόσβαση σε Αρχεία στα WebViews
Από προεπιλογή, τα WebViews επιτρέπουν την πρόσβαση σε αρχεία. Αυτή η λειτουργικότητα ελέγχεται από τη μέθοδο setAllowFileAccess()
, διαθέσιμη από το Android API επίπεδο 3 (Cupcake 1.5). Οι εφαρμογές με την άδεια android.permission.READ_EXTERNAL_STORAGE μπορούν να διαβάσουν αρχεία από εξωτερική αποθήκευση χρησιμοποιώντας ένα σχήμα URL αρχείου (file://path/to/file
).
Αποσυρμένες Λειτουργίες: Παγκόσμια και Πρόσβαση σε Αρχεία από URLs
Παγκόσμια Πρόσβαση από Αρχεία URLs: Αυτή η αποσυρμένη λειτουργία επέτρεπε αιτήσεις διασυνοριακής πρόσβασης από αρχεία URLs, δημιουργώντας σημαντικό κίνδυνο ασφάλειας λόγω πιθανών επιθέσεων XSS. Η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη (
false
) για εφαρμογές που στοχεύουν σε Android Jelly Bean και νεότερες εκδόσεις.Για να ελέγξετε αυτή τη ρύθμιση, χρησιμοποιήστε το
getAllowUniversalAccessFromFileURLs()
.Για να τροποποιήσετε αυτή τη ρύθμιση, χρησιμοποιήστε το
setAllowUniversalAccessFromFileURLs(boolean)
.Πρόσβαση σε Αρχεία από Αρχεία URLs: Αυτή η λειτουργία, επίσης αποσυρμένη, ελέγχει την πρόσβαση σε περιεχόμενο από άλλα URLs με σχήμα αρχείου. Όπως και η παγκόσμια πρόσβαση, η προεπιλεγμένη ρύθμιση είναι απενεργοποιημένη για ενισχυμένη ασφάλεια.
Χρησιμοποιήστε το
getAllowFileAccessFromFileURLs()
για έλεγχο και τοsetAllowFileAccessFromFileURLs(boolean)
για ρύθμιση.
Ασφαλής Φόρτωση Αρχείων
Για την απενεργοποίηση της πρόσβασης στο σύστημα αρχείων ενώ εξακολουθείτε να έχετε πρόσβαση σε περιουσιακά στοιχεία και πόρους, χρησιμοποιείται η μέθοδος setAllowFileAccess()
. Με Android R και νεότερες εκδόσεις, η προεπιλεγμένη ρύθμιση είναι false
.
Ελέγξτε με το
getAllowFileAccess()
.Ενεργοποιήστε ή απενεργοποιήστε με το
setAllowFileAccess(boolean)
.
WebViewAssetLoader
Η κλάση WebViewAssetLoader είναι η μοντέρνα προσέγγιση για τη φόρτωση τοπικών αρχείων. Χρησιμοποιεί http(s) URLs για την πρόσβαση σε τοπικά περιουσιακά στοιχεία και πόρους, συμμορφούμενη με την πολιτική ίδιας προέλευσης, διευκολύνοντας έτσι τη διαχείριση του CORS.
loadUrl
Αυτή είναι μια κοινή λειτουργία που χρησιμοποιείται για τη φόρτωση αυθαίρετων URLs σε ένα webview:
JavaScript και Χειρισμός Σχήματος Intent
JavaScript: Απενεργοποιημένο από προεπιλογή στα WebViews, μπορεί να ενεργοποιηθεί μέσω της
setJavaScriptEnabled()
. Συνιστάται προσοχή καθώς η ενεργοποίηση του JavaScript χωρίς κατάλληλα μέτρα προστασίας μπορεί να εισάγει ευπάθειες ασφάλειας.Σχήμα Intent: Οι WebViews μπορούν να χειριστούν το σχήμα
intent
, που μπορεί να οδηγήσει σε εκμετάλλευση εάν δεν διαχειρίζεται προσεκτικά. Ένα παράδειγμα ευπαθείας περιλάμβανε ένα εκτεθειμένο παράμετρο WebView "support_url" που θα μπορούσε να εκμεταλλευτεί για την εκτέλεση επιθέσεων cross-site scripting (XSS).
Παράδειγμα εκμετάλλευσης χρησιμοποιώντας το adb:
Επικοινωνία JavaScript
Μια λειτουργία που παρέχεται από το Android επιτρέπει στο JavaScript σε ένα WebView να καλεί λειτουργίες εφαρμογής Android. Αυτό επιτυγχάνεται χρησιμοποιώντας τη μέθοδο addJavascriptInterface
, η οποία ενσωματώνει το JavaScript με τις φυσικές λειτουργίες του Android, ονομάζοντας το ως γέφυρα JavaScript WebView. Συνιστάται προσοχή, καθώς αυτή η μέθοδος επιτρέπει σε όλες τις σελίδες εντός του WebView να έχουν πρόσβαση στο εγγεγραμμένο αντικείμενο διεπαφής JavaScript, δημιουργώντας έναν κίνδυνο ασφάλειας εάν ευαίσθητες πληροφορίες εκτίθενται μέσω αυτών των διεπαφών.
Απαιτείται ακραία προσοχή για εφαρμογές που στοχεύουν σε εκδόσεις Android κάτω από 4.2 λόγω μιας ευπάθειας που επιτρέπει την απομακρυσμένη εκτέλεση κώδικα μέσω κακόβουλου JavaScript, εκμεταλλευόμενο την αντανάκλαση.
Υλοποίηση μιας Γέφυρας JavaScript
Οι διεπαφές JavaScript μπορούν να αλληλεπιδρούν με τον φυσικό κώδικα, όπως φαίνεται στα παραδείγματα όπου μια μέθοδος κλάσης εκτίθεται στο JavaScript:
Το JavaScript Bridge ενεργοποιείται προσθέτοντας μια διεπαφή στο WebView:
Δυνητική εκμετάλλευση μέσω JavaScript, για παράδειγμα, μέσω μιας επίθεσης XSS, επιτρέπει την κλήση αποκαλυμμένων μεθόδων Java:
Για τη μείωση των κινδύνων, περιορίστε τη χρήση της γέφυρας JavaScript στον κώδικα που αποστέλλεται με το APK και αποτρέψτε τη φόρτωση JavaScript από απομακρυσμένες πηγές. Για παλαιότερες συσκευές, ορίστε το ελάχιστο επίπεδο API σε 17.
Εκτέλεση Κώδικα Απομακρυσμένης Κ
Για να ενεργοποιήσετε συνθηκικά την εντοπισμό σφαλμάτων βασισμένο στην κατάσταση debuggable της εφαρμογής:
Εξαγωγή αυθαίρετων αρχείων
Δείχνει την εξαγωγή αυθαίρετων αρχείων χρησιμοποιώντας ένα XMLHttpRequest:
Αναφορές
Last updated