Τι είναι το Fuzzing;

Τι είναι θολό

Εισαγωγή: Τι είναι το Fuzzing;

Το 2014, Κινέζοι χάκερ παραβιάστηκε στα κοινοτικά συστήματα υγείας, μια κερδοσκοπική αλυσίδα νοσοκομείων των ΗΠΑ, και έκλεψε δεδομένα 4.5 εκατομμυρίων ασθενών. Οι χάκερ εκμεταλλεύτηκαν ένα σφάλμα που ονομάζεται Heartbleed που ανακαλύφθηκε στη βιβλιοθήκη κρυπτογραφίας OpenSSL μερικούς μήνες πριν από την εισβολή.

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

Εδώ μπαίνει το «fuzzing».

Τι είναι μια Fuzzing Attack;

Το Fuzzing, fuzz testing ή fuzzing attack, είναι μια αυτοματοποιημένη τεχνική δοκιμής λογισμικού που χρησιμοποιείται για την τροφοδοσία τυχαίων, απροσδόκητων ή μη έγκυρων δεδομένων (που ονομάζεται fuzz) σε ένα πρόγραμμα. Το πρόγραμμα παρακολουθείται για ασυνήθιστες ή απροσδόκητες συμπεριφορές όπως υπερχείλιση buffer, σφάλματα, διαρροές μνήμης, κολλήματα νήματος και παραβιάσεις πρόσβασης ανάγνωσης/εγγραφής. Το εργαλείο fuzzing ή fuzzer χρησιμοποιείται στη συνέχεια για να αποκαλύψει την αιτία της ασυνήθιστης συμπεριφοράς.

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

Τα Fuzzers χρησιμοποιούνται σε προγράμματα που λαμβάνουν δομημένη είσοδο ή έχουν κάποιο είδος ορίου εμπιστοσύνης. Για παράδειγμα, ένα πρόγραμμα που δέχεται αρχεία PDF θα έχει κάποια επικύρωση για να διασφαλίσει ότι το αρχείο έχει επέκταση .pdf και αναλυτή για την επεξεργασία του αρχείου PDF.

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

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

 

Τύποι Fuzzers

Τα Fuzzers μπορούν να ταξινομηθούν με βάση ορισμένα χαρακτηριστικά:

  1. Στόχοι επίθεσης
  2. Μέθοδος δημιουργίας Fuzz
  3. Επίγνωση της δομής εισόδου
  4. Επίγνωση της δομής του προγράμματος

1. Στόχοι επίθεσης

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

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

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

2. Μέθοδος δημιουργίας Fuzz

Τα Fuzzers μπορούν επίσης να ταξινομηθούν με βάση τον τρόπο με τον οποίο δημιουργούν δεδομένα για ασάφεια. Ιστορικά, οι fuzzer δημιούργησαν fuzz δημιουργώντας τυχαία δεδομένα από την αρχή. Έτσι το έκανε αρχικά ο καθηγητής Barton Miller, ο εμπνευστής αυτής της τεχνικής. Αυτός ο τύπος fuzzer ονομάζεται α fuzzer με βάση τη γενιά.

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

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

Αυτή η προσέγγιση είναι πιο έξυπνη από την προηγούμενη και περιορίζει σημαντικά τις πιθανές μεταθέσεις. Οι Fuzzers που χρησιμοποιούν αυτή τη μέθοδο ονομάζονται fuzzer που βασίζονται σε μεταλλάξεις

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

Τα σύνολα δεδομένων με τη χειρότερη απόδοση αφαιρούνται από τη δεξαμενή δεδομένων, ενώ τα καλύτερα μεταλλάσσονται ή/και συνδυάζονται. Στη συνέχεια, η νέα γενιά δεδομένων χρησιμοποιείται για τη δοκιμή fuzz ξανά. Αυτά τα fuzzers αναφέρονται ως fuzzer που βασίζονται σε εξελικτικές μεταλλάξεις.

3. Επίγνωση της Δομής Εισόδου

Αυτή η ταξινόμηση βασίζεται στο αν ένας fuzzer γνωρίζει και χρησιμοποιεί ενεργά τη δομή εισόδου ενός προγράμματος για τη δημιουργία δεδομένων fuzz. ΕΝΑ βουβός fuzzer (ένας fuzzer που δεν γνωρίζει τη δομή εισόδου ενός προγράμματος) δημιουργεί fuzz με έναν κυρίως τυχαίο τρόπο. Αυτό θα μπορούσε να περιλαμβάνει τόσο fuzzers δημιουργίας όσο και βασισμένων σε μετάλλαξη. 


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

4. Επίγνωση της Δομής του Προγράμματος

Τα Fuzzers μπορούν επίσης να ταξινομηθούν με βάση το αν γνωρίζουν την εσωτερική λειτουργία του προγράμματος που θολώνουν και χρησιμοποιούν αυτή την επίγνωση για να βοηθήσουν στη δημιουργία fuzz δεδομένων. Όταν χρησιμοποιούνται fuzzers για τη δοκιμή ενός προγράμματος χωρίς να κατανοήσουμε την εσωτερική του δομή, ονομάζεται δοκιμή μαύρου κουτιού. 

Τα δεδομένα Fuzz που παράγονται κατά τη δοκιμή μαύρου κουτιού είναι συνήθως τυχαία, εκτός εάν το fuzzer είναι ένα εξελικτικό fuzzer που βασίζεται σε μετάλλαξη, όπου «μαθαίνει» παρακολουθώντας την επίδραση του fuzzing του και χρησιμοποιώντας αυτό πληροφορίες να βελτιώσει το fuzz σύνολο δεδομένων του.

Η δοκιμή λευκού κουτιού από την άλλη πλευρά χρησιμοποιεί ένα μοντέλο της εσωτερικής δομής του προγράμματος για τη δημιουργία δεδομένων fuzz. Αυτή η προσέγγιση επιτρέπει σε ένα fuzzer να φτάσει σε κρίσιμες τοποθεσίες σε ένα πρόγραμμα και να το δοκιμάσει. 

Δημοφιλή Fuzzing Tools

Υπάρχουν πολλά μπερδέματα εργαλεία εκεί έξω χρησιμοποιείται από δοκιμαστές στυλό. Μερικά από τα πιο δημοφιλή είναι:

Limitations Of Fuzzing

Ενώ το Fuzzing είναι μια πραγματικά χρήσιμη τεχνική δοκιμής στυλό, δεν είναι χωρίς ελαττώματα. Μερικά από αυτά είναι:

  • Χρειάζεται πολύς χρόνος για να τρέξει.
  • Τα σφάλματα και άλλες απροσδόκητες συμπεριφορές που εντοπίζονται κατά τη δοκιμή μαύρου κουτιού ενός προγράμματος μπορεί να είναι δύσκολο, αν όχι αδύνατο να αναλυθούν ή να εντοπιστούν σφάλματα.
  • Η δημιουργία προτύπων μετάλλαξης για έξυπνους fuzzer που βασίζονται σε μεταλλάξεις μπορεί να είναι χρονοβόρα. Μερικές φορές, μπορεί να μην είναι καν εφικτό λόγω του ότι το μοντέλο εισόδου είναι αποκλειστικό ή άγνωστο.

 

Ωστόσο, είναι ένα αρκετά χρήσιμο και απαραίτητο εργαλείο για όποιον θέλει να ανακαλύψει σφάλματα πριν από τους κακούς.

Συμπέρασμα

Το Fuzzing είναι μια ισχυρή τεχνική δοκιμής στυλό που μπορεί να χρησιμοποιηθεί για την αποκάλυψη τρωτών σημείων στο λογισμικό. Υπάρχουν πολλοί διαφορετικοί τύποι fuzzer και νέοι fuzzer αναπτύσσονται συνεχώς. Ενώ το fuzzing είναι ένα απίστευτα χρήσιμο εργαλείο, έχει τους περιορισμούς του. Για παράδειγμα, οι fuzzers μπορούν να βρουν μόνο τόσες πολλές ευπάθειες και μπορεί να απαιτούν αρκετά πόρους. Ωστόσο, αν θέλετε να δοκιμάσετε αυτήν την εκπληκτική τεχνική για τον εαυτό σας, έχουμε ένα δωρεάν DNS Fuzzer API που μπορείτε να χρησιμοποιήσετε στην πλατφόρμα μας. 

Λοιπόν, τι περιμένεις; 

Ξεκινήστε το fuzzling σήμερα!

Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML

Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML

Kobold Letters: Επιθέσεις ηλεκτρονικού ψαρέματος που βασίζονται σε HTML Στις 31 Μαρτίου 2024, η Luta Security δημοσίευσε ένα άρθρο που ρίχνει φως σε ένα νέο εξελιγμένο φορέα ηλεκτρονικού ψαρέματος, το Kobold Letters.

Διαβάστε περισσότερα »
Η Google και ο μύθος για την ανώνυμη περιήγηση

Η Google και ο μύθος για την ανώνυμη περιήγηση

Η Google και ο μύθος της ανώνυμης περιήγησης Την 1η Απριλίου 2024, η Google συμφώνησε να διευθετήσει μια αγωγή καταστρέφοντας δισεκατομμύρια αρχεία δεδομένων που συλλέγονται από την κατάσταση ανώνυμης περιήγησης.

Διαβάστε περισσότερα »
Πώς να πλαστογραφήσετε τη διεύθυνση MAC

Διευθύνσεις MAC και πλαστογράφηση MAC: Ένας ολοκληρωμένος οδηγός

MAC Address and MAC Spoofing: A Comprehensive Guide Εισαγωγή Από τη διευκόλυνση της επικοινωνίας έως την ενεργοποίηση ασφαλών συνδέσεων, οι διευθύνσεις MAC διαδραματίζουν θεμελιώδη ρόλο στον εντοπισμό συσκευών

Διαβάστε περισσότερα »