| dc.contributor.advisor | Γλυνός, Δημήτριος | |
| dc.contributor.author | Δάσκαλος, Άγγελος - Χρήστος | |
| dc.date.accessioned | 2025-11-25T04:38:04Z | |
| dc.date.available | 2025-11-25T04:38:04Z | |
| dc.date.issued | 2025-11 | |
| dc.identifier.uri | https://dione.lib.unipi.gr/xmlui/handle/unipi/18549 | |
| dc.description.abstract | Τα ενσωματωμένα συστήματα σχεδιάζονται συχνά με χρήση σειριακών πρωτοκόλλων που ελέγχονται από
πολύπλοκες μηχανές καταστάσεων ή αλλιώς «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 για την ενίσχυση της
αξιοπιστίας σε συστήματα περιορισμένων πόρων. | el |
| dc.format.extent | 158 | el |
| dc.language.iso | el | el |
| dc.publisher | Πανεπιστήμιο Πειραιώς | el |
| dc.rights | Αναφορά Δημιουργού 3.0 Ελλάδα | * |
| dc.rights.uri | http://creativecommons.org/licenses/by/3.0/gr/ | * |
| dc.title | Επέκταση λογισμικού unit testing για τη διεξαγωγή fuzz testing δοκιμών σε ενσωματωμένο λογισμικό | el |
| dc.title.alternative | Extension of unit testing software for the fuzz testing on an embedded unit software | el |
| dc.type | Master Thesis | el |
| dc.contributor.department | Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών. Τμήμα Πληροφορικής | el |
| dc.description.abstractEN | Embedded systems are often designed using serial protocols controlled by complex state machines, but these
critical mechanisms often remain insufficiently tested. This paper proposes a systematic methodology for
enhancing and validating the functionality of such protocols using stub-based unit testing and coverage-guided
fuzzing techniques.
Conducting a fuzzing campaign on an embedded system is a particularly complex process, as it requires
modifying the fuzzer implementation (e.g., fuzzing harness) for each piece of software under test. In addition,
fuzzing campaigns often need to be run in a simulation environment or under constraints imposed by the
hardware and peripherals. In this work, we aim to automatically generate the appropriate software and data so
that embedded system projects can immediately reap the benefits of fuzz testing, with checks at the software
module/object file level that can be efficiently executed on third-party systems (even those with a different
architecture from that of the embedded system).
For the experimental testing of the methodology, firmware was developed for the STM32 microcontroller that
drives a servo motor where the peripherals are replaced with stubs, allowing the isolation and verification of
the authentication, menu navigation, checksum verification, and command cancellation. Using CMocka, test
units are developed that reveal logical malfunctions and inconsistencies in the state machine prior to firmware
integration. Subsequently, LibFuzzer, in combination with AddressSanitizer and UBSanitizer, feeds millions of
malformed byte packets and edge bytes to the UART protocol analyzer, revealing configuration memory issues
and failures in the protocol.
All verification steps are orchestrated within a version-controlled workflow on GitHub and encapsulated in
Docker containers, ensuring reproducible builds and test environments. Our combined methodology yields
significant coverage gains across both protocol parsing and servo-control state transitions, exposing subtle
vulnerabilities such as checksum bypasses, improper state resets, and cancellation race conditions. By
embedding stub-driven unit testing and fuzzing into a Docker-enabled GitHub pipeline, we present a
reproducible framework for elevating reliability in resource-constrained embedded devices. | el |
| dc.contributor.master | Κυβερνοασφάλεια και Επιστήμη Δεδομένων | el |
| dc.subject.keyword | Ενσωματωμένα συστήματα | el |
| dc.subject.keyword | Fuzzing | el |
| dc.subject.keyword | Αυτοματοποιημένη δοκιμή | el |
| dc.subject.keyword | Ασφάλεια λογισμικού | el |
| dc.subject.keyword | Sanitizers | el |
| dc.subject.keyword | Ευπάθειες | el |
| dc.subject.keyword | Firmware | el |
| dc.subject.keyword | ARM | el |
| dc.subject.keyword | x86 | el |
| dc.subject.keyword | Unit testing | el |
| dc.subject.keyword | Κυβερνοασφάλεια | el |
| dc.subject.keyword | Automated testing | el |
| dc.subject.keyword | Software security | el |
| dc.subject.keyword | Vulnerabilities | el |
| dc.subject.keyword | Cybersecurity | el |
| dc.date.defense | 2025-11-07 | |