Επέκταση λογισμικού unit testing για τη διεξαγωγή fuzz testing δοκιμών σε ενσωματωμένο λογισμικό
Extension of unit testing software for the fuzz testing on an embedded unit software

Προβολή/ Άνοιγμα
Λέξεις κλειδιά
Ενσωματωμένα συστήματα ; Fuzzing ; Αυτοματοποιημένη δοκιμή ; Ασφάλεια λογισμικού ; Sanitizers ; Ευπάθειες ; Firmware ; ARM ; x86 ; Unit testing ; Κυβερνοασφάλεια ; Automated testing ; Software security ; Vulnerabilities ; CybersecurityΠερίληψη
Τα ενσωματωμένα συστήματα σχεδιάζονται συχνά με χρήση σειριακών πρωτοκόλλων που ελέγχονται από
πολύπλοκες μηχανές καταστάσεων ή αλλιώς «state-machines», ωστόσο αυτοί οι κρίσιμοι μηχανισμοί
παραμένουν συχνά ανεπαρκώς δοκιμασμένοι. Στη συγκεκριμένη εργασία προτείνεται μια συστηματική
μεθοδολογία για την ενίσχυση και την επικύρωση των λειτουργιών τέτοιων πρωτοκόλλων χρησιμοποιώντας
τεχνικές stub-based unit testing και coverage-guided fuzzing. Η διεξαγωγή ενός fuzzing campaign σε ένα
ενσωματωμένο σύστημα είναι μια ιδιαίτερα περίπλοκη διεργασία, καθώς απαιτεί την τροποποίηση της
υλοποίησης του fuzzer (π.χ. fuzzing harness) για κάθε λογισμικό υπό εξέταση. Επίσης, πολλές φορές το
campaign θα πρέπει να τρέξει σε περιβάλλον εξομοίωσης ή υπό περιορισμούς που θέτει το υλικό και τα
περιφερειακά του. Σε αυτή την εργασία στοχεύουμε στην αυτόματη δημιουργία του κατάλληλου λογισμικού
και δεδομένων ώστε να μπορέσουν έργα ενσωματωμένων συστημάτων να αποκομίσουν άμεσα τα οφέλη του
fuzz testing, με ελέγχους σε επίπεδο software module/object-file, οι οποίοι μπορούν να εκτελεστούν αποδοτικά
σε τρίτα συστήματα (ακόμη και διαφορετικής αρχιτεκτονικής από αυτή του ενσωματωμένου συστήματος).
Για την πειραματική εξέταση της μεθοδολογίας αναπτύχθηκε firmware για τον μικροελεγκτή STM32 που κινεί
ένα σερβοκινητήρα όπου, τα περιφερειακά αντικαθίστανται με stubs, επιτρέποντας την απομόνωση και
επαλήθευση των μηχανισμών ελέγχου ταυτότητας, πλοήγησης στο μενού, επαλήθευσης αθροίσματος ελέγχου
(checksum) και ακύρωσης εντολών. Με χρήση CMocka αναπτύσσονται μονάδες δοκιμών που αποκαλύπτουν
λογικές δυσλειτουργίες και ασυνέπειες στην μηχανή κατάστασης πριν από την ενσωμάτωση firmware.
Στη συνέχεια, το LibFuzzer σε συνδυασμό με AddressSanitizer,UBSanitizer διοχετεύει εκατομμύρια
παραμορφωμένα πακέτα bytes και οριακά «edge» bytes στον αναλυτή πρωτοκόλλου UART, αποκαλύπτοντας
αστοχίες και θέματα μνήμης στην παραμετροποίηση όπως καθώς και σενάρια αποτυχίας του πρωτοκόλλου.
Όλες οι φάσεις επαλήθευσης εκτελούνται σε ένα version-controlled workflow στο GitHub και περιβάλλονται
από ένα CI/CD workflow , εξασφαλίζοντας αναπαραγώγημα builds και περιβάλλοντα δοκιμών. H
συνδυασμένη προσέγγιση οδηγεί σε σημαντική αύξηση της κάλυψης τόσο στην επεξεργασία του πρωτοκόλλου
όσο και στις μεταβάσεις της αυτόματης μηχανής κατάστασης του σερβομηχανισμού, αποκαλύπτοντας
εύθραυστα σημεία όπως παράκαμψη checksum, λανθασμένα reset καταστάσεων και race-conditions
ακύρωσης. Με την εξής υλοποίηση παρουσιάζεται ένα ολοκληρωμένο pipeline για την ενίσχυση της
αξιοπιστίας σε συστήματα περιορισμένων πόρων.


