Snapchange, το ανοιχτού κώδικα εργαλείο fuzzing της AWS

Η Amazon Web Services, κυκλοφόρησε ένα νέο εργαλείο ανοιχτού κώδικα με υποστήριξη KVM Fuzzing

Η είδηση ​​κυκλοφόρησε ότιΗ Amazon κυκλοφόρησε ένα νέο εργαλείο fuzzing που ονομάζεται Snapchange, που σας επιτρέπει να ελέγχετε τα εκτελέσιμα αρχεία χωρίς να τα τροποποιείτε και χωρίς την παρουσία του πηγαίου κώδικα της εφαρμογής. Αυτή είναι μια κίνηση που σχεδιάστηκε εν μέρει για να αντιμετωπίσει τις ανησυχίες σχετικά με την ασφάλεια της αλυσίδας εφοδιασμού λογισμικού.

Στην ανάρτηση του Amazon αναφέρεται ότι, Το Snapchange ξεκίνησε ως πείραμα από την ερευνητική ομάδα ανοιχτού κώδικα ασφάλειας AWS Find and Fix (F2) για να διερευνήσει τις δυνατότητες χρήσης KVM για την ενεργοποίηση της ασάφειας στιγμιοτύπων.

Σήμερα είμαστε στην ευχάριστη θέση να ανακοινώσουμε το Snapchange, ένα νέο έργο ανοιχτού κώδικα που κάνει πολύ πιο εύκολο το fuzzing που βασίζεται σε στιγμιότυπα. Το Snapchange επιτρέπει τη σύγχυση ενός δυαδικού αρχείου στόχου με ελάχιστες τροποποιήσεις, παρέχοντας χρήσιμη εικόνα που βοηθά στη σύγχυση.

Το Snapchange είναι ένα πλαίσιο Rust για τη δημιουργία fuzzer που αναπαράγουν στιγμιότυπα της φυσικής μνήμης για να αυξήσουν την αποτελεσματικότητα και να μειώσουν την πολυπλοκότητα στη θόλωση πολλών τύπων στόχων. Το Snapchange χρησιμοποιεί τις δυνατότητες του ενσωματωμένου διαχειριστή εικονικής μηχανής του πυρήνα Linux, γνωστού ως Kernel Virtual Machine ή KVM. 

Σχετικά με το Snapchange

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

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

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

Για παράδειγμα, εάν είναι απαραίτητο να ελέγξετε την επεξεργασία πολλών καταστάσεων ενός αιτήματος δικτύου, ο ερευνητής ξεκινά την εφαρμογή στο σύστημα επισκέπτη στο VirtualBox ή στο QEMU, στο πρόγραμμα εντοπισμού σφαλμάτων βρίσκει την έναρξη της εκτέλεσης της διαδικασίας επεξεργασίας αιτήματος (για παράδειγμα , αφού καλέσετε τη συνάρτηση recv), βάζει ένα σημείο διακοπής και καθορίζει την περιοχή μνήμης στην οποία φορτώνεται το ληφθέν πακέτο δικτύου. Μετά από αυτό, δημιουργείται ένα στιγμιότυπο του συστήματος επισκεπτών και μεταφορτώνεται στο Snapchange.

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

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

Για ενδιαφέρονται για το έργο, θα πρέπει να γνωρίζετε ότι ο κώδικας του έργου είναι γραμμένος σε Rust και διανέμεται με την άδεια Apache 2.0 μέσω GitHub.

Το Snapchange λειτουργεί εντός Linux, αλλά απαιτεί άμεση πρόσβαση στα υποκείμενα KVM primitives. Επομένως, υποστηρίζει τύπους παρουσίας γυμνού μετάλλου EC2, οι οποίοι εκτελούνται χωρίς υπερεπόπτη, αλλά όχι εικονικές παρουσίες EC2.

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