Οι hackers μερικές φορές περιγράφουν την εργασία τους ως μια ακριβή διαδικασία μάθησης κάθε λεπτομέρειας ενός συστήματος -καλύτερα ακόμα κι από ότι μπορεί να το γνωρίζει κι ο ίδιος ο σχεδιαστής του- και έτσι φθάνουν βαθιά μέσα σε αυτό για να βρουν και να εκμεταλλευτούν τα κρυμμένα ελαττώματα του. Αλλά εξίσου συχνά, γίνεται σχεδόν το αντίθετο, μια βασικά τυχαία διαδικασία γίνεται πάνω στην μηχανή και βλέπουν το τι θα συμβεί. Ανάγοντας αυτή την τυχαία διαδικασία δοκιμών σε μια προσεκτικά εφαρμόσιμη τέχνη τύπου δοκιμής-και-λάθους, γίνεται αυτό που οι χάκερ αποκαλούν “fuzzing” -ένα ισχυρό εργαλείο για την εκμετάλλευση των τρωτών σημείων τόσο των υπολογιστών όσο και της άμυνας.
TL;DR: fuzzing είναι συνήθως η αυτοματοποιημένη διαδικασία εισαγωγής τυχαίων δεδομένων σε ένα πρόγραμμα και η ανάλυση των αποτελεσμάτων που προκύπτουν για να βρεθούν δυνητικά αξιοποιήσιμα σφάλματα.
Στον κόσμο της ασφάλειας του κυβερνοχώρου, το fuzzing είναι συνήθως η αυτοματοποιημένη διαδικασία για την εξεύρεση δυνητικά εκμεταλλεύσιμων (hackable) σφαλμάτων λογισμικού, τροφοδοτώντας τυχαία με διαφορετικές παραλλαγές από δεδομένα σε ένα πρόγραμμα στόχο, έως ότου μία από αυτές τις παραλλαγές να αποκαλύψει μια ευπάθεια. Είναι μια παλιά, αλλά όλο και πιο κοινά χρησιμοποιούμενη διαδικασία, τόσο για τους χάκερ που αναζητούν τρωτά σημεία για την αξιοποίηση τους όσο και από τους υπερασπιστές που προσπαθούν να τα βρουν πρώτοι για να τα διορθώσουν. Και σε μια εποχή που ο καθένας μπορεί να χρησιμοποιήσει ισχυρούς υπολογιστικούς πόρους για να βομβαρδίσει μια εφαρμογή-θύμα με δεδομένα-σκουπίδια σε αναζήτηση ενός bug (σφάλματος), έχει γίνει ένα ουσιαστικό μέτωπο πολέμου στην κούρσα των εξοπλισμών για τις zero-day.
Σε σύγκριση με την παραδοσιακή χρήση της αντίστροφης μηχανικής (reverse engineering), “είναι ένα είδος χαζής επιστήμης”, λέει ο Pedram Amini, προϊστάμενος τεχνολογίας της εταιρείας ασφάλειας στον κυβερνοχώρο InQuest και συν-συγγραφέας του βιβλίου “Fuzzing: Brute Force Vulnerability Discovery”. “Ρίχνεις ένα σωρό δεδομένα σε ένα πρόγραμμα, τα μεταλλάσσεις γρήγορα και στηρίζεσαι στην παρακολούθηση του λογισμικού για να βρεις όταν κάτι κακό συμβεί, αντί να κάνεις σχολαστική χαρτογράφηση της ροής δεδομένων για να βρεις ένα σφάλμα… Είναι ένας τρόπος για να πετύχεις πολλά σφάλματα μαζί πολύ γρήγορα”.
Ένας χάκερ που κάνει fuzzing στον Internet Explorer, για παράδειγμα, θα μπορούσε να τρέξει το πρόγραμμα περιήγησης της Microsoft σε ένα εργαλείο εντοπισμού σφαλμάτων, έτσι ώστε να μπορεί να παρακολουθεί κάθε εντολή που εκτελείται από το πρόγραμμα στη μνήμη του υπολογιστή. Στη συνέχεια, θα κατευθύνει το πρόγραμμα περιήγησης στον δικό του web server, έναν που είναι σχεδιασμένος για να τρέξει το πρόγραμμα fuzzing. Αυτός ο fuzzer θα δημιουργήσει χιλιάδες ή ακόμα και εκατομμύρια διαφορετικές ιστοσελίδες και θα τις φορτώσει στο στόχο, που είναι το πρόγραμμα περιήγησης, προσπαθώντας με την εφαρμογή της μιας μεταβολής μετά την άλλη στον κώδικα HTML και στα JavaScript, για να δει πώς ανταποκρίνεται το πρόγραμμα περιήγησης. Μετά από μέρες ή ακόμα και εβδομάδες ή μήνες από αυτές τις αυτοματοποιημένες δοκιμές, ο χάκερ θα έχει καταγραφές από τις χιλιάδες φορές που το πρόγραμμα περιήγησης κατέρρευσε, καθώς προσπαθούσε να απαντήσει σε κάθε μια από αυτές τις εισαγωγές.
Αυτές οι καταρρεύσεις από μόνες τους δεν είναι τόσο χρήσιμες για επιθέσεις όσο ως απλές ενοχλήσεις, ο πραγματικός στόχος του fuzzing δεν είναι απλώς να καταρρεύσει ένα πρόγραμμα, αλλά για να το παραβιάσεις. Έτσι, ένας χάκερ θα ξεχωρίσει τις διάφορες εισαγωγές fuzz, που οδήγησαν σε καταρρεύσεις για να δει το τι είδους σφάλματα προκαλούνται. Για κάποιο μικρό σύνολο από περιπτώσεις, αυτές οι καταρρεύσεις μπορεί να συμβαίνουν για κάποιον ενδιαφέροντα λόγο -για παράδειγμα, επειδή η είσοδος προκάλεσε στο πρόγραμμα την εκτέλεση εντολών που αποθηκεύονται σε λάθος μέρος στη μνήμη. Και σε αυτές τις περιπτώσεις ο χάκερ θα μπορούσε κατά καιρούς να είναι σε θέση να γράψει τις δικές του εντολές σε αυτήν τη θέση μνήμης, ξεγελώντας το πρόγραμμα να κάνει αυτό που θέλει αυτός- κάτι που είναι το ιερό δισκοπότηρο της πειρατείας, γνωστό ως εκτέλεση κώδικα (code execution ). “Τραντάζεις ένα δέντρο πραγματικά δυνατά και χρησιμοποιείς μια σειρά από φίλτρα που μαζεύουν ότι πέφτει”, λέει ο Amini. “Τελικά θα ξεχωρίσουν τα φρούτα, που θα πέσουν ανάμεσα στα άλλα”.
Η μέθοδος fuzzing είναι η χρήση τυχαίων πακέτων από δεδομένα για να ξεθάψεις τα σφάλματα που συμβαίνουν ως ατυχήματα. Το 1987, ο professor Barton Miller στο University of Wisconsin στο Madison προσπαθούσε να χρησιμοποιήσει την επιφάνεια εργασίας του υπολογιστή VAX που ήταν στο γραφείο του μέσω ενός τερματικού από το σπίτι του. Αλλά συνδέονταν με το μηχάνημα UNIX πάνω από μια τηλεφωνική γραμμή χρησιμοποιώντας ένα παλιομοδίτικο μόντεμ χωρίς διόρθωση σφαλμάτων και μια καταιγίδα έβαζε θόρυβο πάνω στις εντολές που πληκτρολογούσε. Τα προγράμματα πάνω στον VAX κατέρρεαν. “Χμμμμ, αυτό φαίνεται παράξενο και μάλλον θα πρέπει να το μελετήσουμε”, σκέφτηκε.
Με μια ομάδα φοιτητών, ο Miller δημιούργησε το πρώτο εργαλείο fuzzing κατασκευασμένο με εδικό σκοπό για να προσπαθήσει να εκμεταλλευτεί την μέθοδο του του να πέφτεις τυχαία πάνω σε κενά ασφαλείας και υπέβαλε μια εργασία σχετικά με αυτό σε συνέδρια . “Η κοινότητα λογισμικού έπεσε πάνω μου να με φάει. ‘Πού είναι το τυπικό σου μοντέλο;” Μου είπαν. Ήθελα να τους πω ότι ‘Απλά προσπαθώ να βρω σφάλματα’. Ήταν σαν να περπατούσα πάνω σε αναμμένα κάρβουνα”, θυμάται. “Σήμερα, αν είσαι ένας χάκερ που προσπαθεί να σπάσει ένα σύστημα, το πρώτο πράγμα που θα κάνεις είναι μια δοκιμή fuzz πάνω του”. (βλ. “Fuzz Testing of Application Reliability ”, UW-MADISON, Computer Sciences)
Στην πραγματικότητα, το fuzzing έχει εξελιχθεί από μια τεχνική χαμηλού προϋπολογισμού που χρησιμοποιούνταν από μεμονωμένους χάκερ σε ένα είδος βασικού τμήματος ελέγχου ασφάλειας που εκτελείται από μεγάλες εταιρείες για τον δικό τους κώδικα. Οι μεμονωμένοι hackers μπορούν να χρησιμοποιήσουν υπηρεσίες όπως αυτή της Amazon, για να θέσουν στρατιές εκατοντάδων υπολογιστών που θα κάνουν fuzz δοκιμή σε ένα πρόγραμμα παράλληλα. Και τώρα εταιρείες όπως η Google αφιερώνουν επίσης τους δικούς τους σημαντικούς πόρους από τους server τους για να ρίχνουν τυχαίο κώδικα σε προγράμματα για να βρουν τις αδυναμίες τους και πιο πρόσφατα χρησιμοποιούν μαζί με το fuzzing και την μηχανική μάθηση (machine learning) για να βελτιώσουν τη διαδικασία . Εταιρείες όπως η Peach Fuzzer (link is external) και η Codenomicon , έχουν χτίσει ακόμη και ολόκληρες επιχειρήσεις γύρω από αυτή τη διαδικασία.
Όλα αυτά, υποστηρίζει ο Amini, έκαναν το fuzzing πιο επίκαιρο παρά ποτέ. “Οι εταιρίες λογισμικού το κάνουν αυτό ως ένα τυπικό μέρος του κύκλου ανάπτυξής τους”, λέει. “Είναι μια μεγάλη επένδυση, και συμβάλλει στη βελτίωση της ασφάλειας του κόσμου στο λογισμικό που είναι για όλους”.
Πηγή άρθρου: https://www.wired.com/