Fuzz Testing (Fuzzing) Tutorial
Τι είναι το Fuzz Testing;
Fuzz Testing ή Fuzzing είναι μια τεχνική δοκιμής λογισμικού για την τοποθέτηση μη έγκυρων ή τυχαίων δεδομένων που ονομάζονται FUZZ στο σύστημα λογισμικού για την ανακάλυψη σφαλμάτων κωδικοποίησης και κενά ασφαλείας. Ο σκοπός του fuzz testing είναι η εισαγωγή δεδομένων με τη χρήση αυτοματοποιημένων ή ημι-αυτοματοποιημένων τεχνικών και η δοκιμή του συστήματος για διάφορες εξαιρέσεις όπως η κατάρρευση του συστήματος ή η αστοχία του ενσωματωμένου κώδικα κ.λπ.
Το Fuzz testing αναπτύχθηκε αρχικά από τον Barton Miller στο Πανεπιστήμιο του Wisconsin το 1989. Το Fuzz testing ή fuzzing είναι μια τεχνική δοκιμής λογισμικού και είναι ένας τύπος Δοκιμή ασφαλείας.
Γιατί να κάνετε Fuzz Testing;
- Συνήθως, η δοκιμή Fuzzy εντοπίζει το πιο σοβαρό σφάλμα ή ελάττωμα ασφαλείας.
- Η δοκιμή Fuzz δίνει πιο αποτελεσματικό αποτέλεσμα όταν χρησιμοποιείται με Μαύρη Box Δοκιμές, Beta Testing και άλλες μέθοδοι εντοπισμού σφαλμάτων.
- Το Fuzz testing χρησιμοποιείται για τον έλεγχο της ευπάθειας του λογισμικού. Είναι πολύ αποδοτικές τεχνικές δοκιμών.
- Το Fuzz Testing είναι μια από τις τεχνικές δοκιμής μαύρου κουτιού. Το Fuzzing είναι μια από τις πιο κοινές μεθόδους που χρησιμοποιούν οι χάκερ για να βρουν ευπάθεια του συστήματος.
Πώς να κάνετε Fuzz Testing
Τα βήματα για τη ασαφή δοκιμή περιλαμβάνουν τα βασικά βήματα δοκιμής-
Βήμα 1) Προσδιορίστε το σύστημα-στόχο
Βήμα 2) Προσδιορίστε εισροές
Βήμα 3) Δημιουργήστε ασαφή δεδομένα
Βήμα 4) Εκτελέστε τη δοκιμή χρησιμοποιώντας ασαφή δεδομένα
Βήμα 5) Παρακολούθηση της συμπεριφοράς του συστήματος
Βήμα 6) Ελαττώματα ημερολογίου
Παραδείγματα Fuzzers
- Fuzzers με βάση τη μετάλλαξη αλλάξτε τα υπάρχοντα δείγματα δεδομένων για να δημιουργήσετε νέα δεδομένα δοκιμής. Αυτή είναι η πολύ απλή και απλή προσέγγιση, ξεκινά με έγκυρα δείγματα πρωτοκόλλου και συνεχίζει να παραποιεί κάθε byte ή αρχείο.
- Fuzzers με βάση τη γενιά ορίστε νέα δεδομένα με βάση την εισαγωγή του μοντέλου. Αρχίζει να παράγει δεδομένα από την αρχή με βάση τις προδιαγραφές.
- fuzzer με βάση το πρωτόκολλο, το πιο επιτυχημένο fuzzer είναι να έχεις λεπτομερή γνώση της μορφής πρωτοκόλλου που δοκιμάζεται. Η κατανόηση εξαρτάται από τις προδιαγραφές. Περιλαμβάνει την εγγραφή μιας σειράς προδιαγραφών στο εργαλείο και, στη συνέχεια, με τη χρήση τεχνικής παραγωγής δοκιμής βάσει μοντέλου, περάστε τις προδιαγραφές και προσθέστε ανωμαλίες στα περιεχόμενα των δεδομένων, τη σειρά κ.λπ. Αυτό είναι επίσης γνωστό ως δοκιμή σύνταξης, δοκιμή γραμματικής, δοκιμή ευρωστίας. κ.λπ. Το Fuzzer μπορεί να δημιουργήσει περιπτώσεις δοκιμών από μια υπάρχουσα, ή μπορεί να χρησιμοποιήσει έγκυρες ή μη έγκυρες εισόδους.
Υπάρχουν δύο περιορισμοί του fuzzing που βασίζεται σε πρωτόκολλο:
- Η δοκιμή δεν μπορεί να συνεχιστεί έως ότου ωριμάσει η προδιαγραφή.
- Πολλά χρήσιμα πρωτόκολλα αποτελούν επέκταση δημοσιευμένων πρωτοκόλλων. Εάν η δοκιμή fuzz βασίζεται σε δημοσιευμένες προδιαγραφές, Δοκιμή κάλυψης για νέα πρωτόκολλα θα είναι περιορισμένα.
Η απλούστερη μορφή τεχνικής fuzzing είναι η αποστολή τυχαίας εισόδου στο λογισμικό είτε ως πακέτα πρωτοκόλλου είτε ως συμβάν. Αυτή η τεχνική μετάδοσης τυχαίας εισαγωγής είναι πολύ ισχυρή για την εύρεση σφαλμάτων σε πολλές εφαρμογές και υπηρεσίες. Άλλες τεχνικές είναι επίσης διαθέσιμες, και είναι πολύ εύκολο να εφαρμοστούν. Για να εφαρμόσουμε αυτές τις τεχνικές, χρειάζεται απλώς να αλλάξουμε τις υπάρχουσες εισόδους. Μπορούμε να αλλάξουμε την είσοδο απλώς εναλλάσσοντας τα bits εισόδου.
Τύποι σφαλμάτων που εντοπίζονται από το Fuzz Testing
- Αποτυχίες διεκδίκησης και διαρροές μνήμης Αυτή η μεθοδολογία χρησιμοποιείται ευρέως για μεγάλες εφαρμογές όπου τα σφάλματα επηρεάζουν την ασφάλεια της μνήμης, η οποία είναι μια σοβαρή ευπάθεια.
- Μη έγκυρη εισαγωγή Στη δοκιμή fuzz, οι fuzzers χρησιμοποιούνται για τη δημιουργία μιας μη έγκυρης εισόδου που χρησιμοποιείται για τη δοκιμή ρουτίνες χειρισμού σφαλμάτων, και αυτό είναι σημαντικό για το λογισμικό που δεν ελέγχει την είσοδό του. Το απλό fuzzing μπορεί να είναι γνωστό ως ένας τρόπος αυτοματοποίησης των αρνητικών δοκιμών.
- Σφάλματα ορθότητας Το Fuzzing μπορεί επίσης να χρησιμοποιηθεί για τον εντοπισμό ορισμένων τύπων σφαλμάτων «ορθότητας». Όπως μια κατεστραμμένη βάση δεδομένων, κακά αποτελέσματα αναζήτησης κ.λπ.
Fuzz Testing Tools
Τα εργαλεία που χρησιμοποιούνται στην ασφάλεια Ιστού μπορούν να χρησιμοποιηθούν ευρέως σε δοκιμές fuzz όπως π.χ Burp Suite, Peach Fuzzer, κ.λπ.
- Peach Fuzzer: Το Peach Fuzzer παρέχει πιο στιβαρή και ασφαλή κάλυψη από έναν σαρωτή. Άλλα εργαλεία δοκιμών μπορούν να αναζητήσουν μόνο γνωστά νήματα, ενώ το Peach Fuzzer επιτρέπει στους χρήστες να βρίσκουν γνωστά και άγνωστα νήματα.
- Spike Proxy: Είναι ένα εργαλείο επαγγελματικής ποιότητας που αναζητά τρωτά σημεία σε επίπεδο εφαρμογής σε εφαρμογές web. Το SPIKE Proxy καλύπτει τα βασικά, όπως π.χ SQL Injection και cross-site-scripting, αλλά είναι εντελώς ανοιχτό Python υποδομή. Το SPIKE Proxy είναι διαθέσιμο για Linux και Windows.
- Webscarab: Το Webscarab είναι γραμμένο Java άρα φορητό σε πολλές πλατφόρμες. Για την ανάλυση της εφαρμογής χρησιμοποιείται το πλαίσιο Webscarab που επικοινωνεί χρησιμοποιώντας πρωτόκολλα HTTP και HTTPS.ex: Το Webscarab λειτουργεί ως υποκλοπής μεσολάβησης, επιτρέπει στον χειριστή να ελέγξει και να τροποποιήσει το αίτημα που δημιουργήθηκε από το πρόγραμμα περιήγησης προτού ληφθούν από τον διακομιστή. Και επιτρέψτε την ανασκόπηση και ενημέρωση της απάντησης που δημιουργήθηκε από τον διακομιστή πριν ληφθεί από το πρόγραμμα περιήγησης. Με αυτόν τον τρόπο, εάν ο web scarab βρει κάποιο κενό, θα δημιουργήσει τη λίστα με τα αναφερόμενα ζητήματα.
- OWASP WSFuzzer: Το WSFuzzer είναι ένα πρόγραμμα GPL'd που είναι γραμμένο Python. Η GPL's ένα πρόγραμμα στοχεύει επί του παρόντος Υπηρεσίες Ιστού. Στην τρέχουσα έκδοση του OWASPWSFuzzer που βασίζεται σε HTTP Υπηρεσίες SOAP αποτελούν τον κύριο στόχο.
Πλεονεκτήματα του Fuzz Testing
- Η δοκιμή Fuzz βελτιώνει το λογισμικό Δοκιμή ασφαλείας.
- Τα σφάλματα που εντοπίζονται στο fuzzing είναι μερικές φορές σοβαρά και τις περισσότερες φορές χρησιμοποιούνται από χάκερ, συμπεριλαμβανομένων των σφαλμάτων, της διαρροής μνήμης, της μη χειριζόμενης εξαίρεσης κ.λπ.
- Εάν κάποιο από τα σφάλματα δεν γίνει αντιληπτό από τους δοκιμαστές λόγω του περιορισμού του χρόνου και των πόρων, αυτά τα σφάλματα βρίσκονται επίσης στη δοκιμή Fuzz.
Μειονεκτήματα του Fuzz Testing
- Η δοκιμή Fuzz από μόνη της δεν μπορεί να παρέχει μια πλήρη εικόνα μιας συνολικής απειλής ή σφαλμάτων ασφαλείας.
- Το Fuzz testing είναι λιγότερο αποτελεσματικό για την αντιμετώπιση απειλών ασφαλείας που δεν προκαλούν σφάλματα προγράμματος, όπως ορισμένοι ιοί, worms, Trojan κ.λπ.
- Η δοκιμή Fuzz μπορεί να εντοπίσει μόνο απλά σφάλματα ή απειλές.
- Για να λειτουργήσει αποτελεσματικά, θα χρειαστεί σημαντικός χρόνος.
- Ο ορισμός μιας συνθήκης οριακής τιμής με τυχαίες εισόδους είναι πολύ προβληματικός, αλλά τώρα με τη χρήση ντετερμινιστικών αλγορίθμων που βασίζονται στις εισαγωγές χρηστών, οι περισσότεροι ελεγκτές επιλύουν αυτό το πρόβλημα.
Σύνοψη
Στη Μηχανική Λογισμικού, η δοκιμή Fuzz δείχνει την παρουσία σφαλμάτων σε μια εφαρμογή. Το Fuzzing δεν μπορεί να εγγυηθεί την πλήρη ανίχνευση σφαλμάτων σε μια εφαρμογή. Αλλά χρησιμοποιώντας την τεχνική Fuzz, διασφαλίζει ότι η εφαρμογή είναι στιβαρή και ασφαλής, καθώς αυτή η τεχνική βοηθά στην αποκάλυψη των περισσότερων κοινών τρωτών σημείων.