With the current technological advances there is arisingneed for testing the reliability and the security of software. Security testing usually requires manual work from a highly specialized security researcher.However,lately a number of program analysis techniques have been employed in order to automate parts of the process. In this thesis an automatic system is developed that uses dynamic analysis and symbolic execution in order to produce testcases for programs. Dynamic analysis is used in order to collect run time information like the current program state,the usage of input data by the program and the paths that have been executed by the program. This information is used in order to accelerate symbolic execution and produce a test case file that is able to pass various program checks and execute more program code, thusincreasingcodecoverage.These test case can be used in further analys is of the program. The system that was developed gives encouraging results producing partial input files with the structure that is expected by the programs analyzed, automatically and without any prior knowledge.However,the limitations of symbolic execution quickly become apparent since the analysis complexity has exponential complexity .As a result additional methods must be used in order to surpass these limitations in larger programs.
Ο ΧΡΙΣΤΟΦΟΡΟΣ ΚΟΛΟΜΒΟΣ ΚΑΙ Η ΑΝΑΚΑΛΥΨΗ ΤΗΣ ΑΜΕΡΙΚΗΣ,ΕΙΡΗΝΗ ΝΤΟΥΣΚΑ-ΠΕΝΥ ΖΑΓΓΟ...
Dimitrios Tatsis
1. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Αυτόματη παραγωγή σεναρίου ελέγχου μέσω δυναμικής
ανάλυσης και συμβολικής εκτέλεσης
Δημήτριος Τάτσης
Α.Ε.Μ: 7262
2019-07-05
Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης
Πολυτεχνική Σχολή
Τμήμα Ηλεκτρολόγων Μηχανικών
και Μηχανικών Υπολογιστών
Επιβλέπων: Ανδρέας Συμεωνίδης, Αναπληρωτής Καθηγητής
Συνεπιβλέπων: Γεώργιος Μαμαλάκης
2. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Κίνητρο
● Τα συστήματα λογισμικού χρησιμοποιούνται όλο και περισσότερο στην
καθημερινή ζωή
● Η ανάλυση ασφάλειας λογισμικού έχει σημαντικές προεκτάσεις για την
ιδιωτικότητα και την ασφάλεια των χρηστών
2
3. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Σκοπός
Η ανάπτυξη ενός συστήματος ανάλυσης ασφάλειας λογισμικού το οποίο θα πρέπει
● Να χρησιμοποιεί προηγμένες τεχνικές ανάλυσης ώστε να παράγει σενάρια
δοκιμών και ελέγχου προγραμμάτων
● Να παράγει αυτά τα σενάρια δοκιμών και ελέγχου χωρίς γνώση για τη
λειτουργικότητα του προγράμματος προς ανάλυση
● Να είναι αυτόματο
3
4. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Γνώσεις που αποκτήθηκαν
● Ο συνδυασμός δυναμικής ανάλυσης και συμβολικής εκτέλεσης για την
ανάλυση προγραμμάτων
● Η εφαρμογή αυτών των τεχνικών σε πολύπλοκα εμπορικά προγράμματα και
οι περιορισμοί που εμφανίζονται
● Η διαδικασία δημιουργίας ενός εργαλείου που συνδυάζει διαφορετικά
υποσυστήματα που επικοινωνούν μεταξύ τους
4
5. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Έννοιες
● Basic Block
○ Ένα σύνολο από εντολές assembly που καταλήγουν σε εντολή branch
● Μονοπάτι Κώδικα
○ Ένα σύνολο από basic blocks που περιγράφει ποιά basic blocks έχουν εκτελεστεί και με ποια
σειρά
● Code Coverage
○ Μετρική η οποία δείχνει το ποσοστό του προγράμματος που έχει εκτελεστεί για μια
συγκεκριμένη είσοδο
○ Ποσοστό εκτελεσμένων συναρτήσεων, basic blocks, μονοπατιών, κλπ.
5
6. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Δυναμική Ανάλυση
● Εισαγωγή νέου κώδικα κατά την εκτέλεση ενός προγράμματος ο οποίος θα
εκτελείται όταν εμείς το επιθυμούμε
● Συλλογή στατιστικών κατά την εκτέλεση, αντικατάσταση εντολών
προγράμματος με άλλες κλπ.
● Υπάρχει ένα “μικρό” κόστος εκτέλεσης των επιπλέων εντολών
● Η δυναμική ανάλυση δρα μόνο για μία είσοδο
6
7. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Δυναμική Ανάλυση - Παράδειγμα
Παράδειγμα εισαγωγής επιπλέον κώδικα
Αναγνώριση της εξάρτησης της
μεταβλητής sum από τον πίνακα buf
Για αληθή συνθήκη, καταγράφεται η
διεύθυνση του κώδικα που εκτελέστηκε
για μια συγκεκριμένη εκτέλεση
7
8. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Συμβολική εκτέλεση
● Μια εξομοίωση του προγράμματος ώστε να γίνει η συλλογή των συνθηκών
που πρέπει να ισχύουν ώστε να εκτελεστεί ένα κομμάτι κώδικα
● Το πρόγραμμα εκτελείται με συμβολικές μεταβλητές και τελικά η ροή του
προγράμματος εξαρτάται από λογικές εξισώσεις/συνθήκες
● Επίλυση αυτών των συνθηκών
● Εκθετική πολυπλοκότητα
○ Path explosion
○ SMT solving
● Συχνά θεωρούνται συμβολικές μόνο ορισμένες μεταβλητές (concolic
execution)
8
9. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Συμβολική εκτέλεση - Παράδειγμα
Συμβολικές μεταβλητές x1, x2, … από
την είσοδο του προγράμματος
sum = x1 + x2 + …
=> x1 + x2 + … = 0x1337
Πιθανή λύση: x1 = 0x1337, x2 = 0, ...
9
10. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Παραδοχές
● Εκτελέσιμο πρόγραμμα προς ανάλυση (χωρίς πηγαίο κώδικα)
● Αρχιτεκτονική x86
● Λειτουργικό Σύστημα Linux
● Η είσοδος του προγράμματος γίνεται από ένα αρχείο που δίνεται ως όρισμα
από το χρήστη
10
11. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Μεθοδολογία
● Δυναμική ανάλυση
○ Με μια αρχική τυχαία είσοδο, καταγράφουμε τα μονοπάτια κώδικα που δεν εκτελέστηκαν.
○ Taint Analysis - Καταγραφή των συγκεκριμένων bytes της εισόδου που χρησιμοποιήθηκαν από
το πρόγραμμα σε κάθε basic block
○ Ανάκτηση ενός στιγμιότυπου του προγράμματος
● Συμβολική εκτέλεση
○ Αρχικοποίηση κατάστασης με τη χρήση του στιγμιότυπου
○ Θεώρηση των συγκεκριμένων μόνο bytes της εισόδου που χρησιμοποιήθηκαν ως συμβολικές
μεταβλητές
○ Εκκίνηση συμβολικής ανάλυσης για την επίλυση των συμβολικών μεταβλητών ώστε να
συνεχίσει η εκτέλεση στο μονοπάτι που δεν εκτελέστηκε.
● Ανατροφοδότηση
11
12. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Υλοποίηση - Αρχιτεκτονική
12
13. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Υλοποίηση - Δυναμική Ανάλυση
● DynamoRIO - Dynamic Binary Instrumentation Framework
● Θέτουμε callbacks τα οποία θα εκτελεστούν σε συγκεκριμένα events
○ Όταν κληθούν συγκεκριμένες συναρτήσεις όπως η read()
○ Όταν πρόκειται να εκτελεστεί ένα νέο basic block για την καταγραφή του μονοπατιού
● Ανάκτηση στιγμιότυπου
○ Καταγραφή όλων των καταχωρητών και της μνήμης του προγράμματος κατά την εκτέλεση της
read()
○ /proc/self/maps
● Taint Analysis
○ Θεωρώντας την είσοδο “tainted”, κάθε τιμή που επηρεάζεται από τιμή της εισόδου είναι και
αυτή “tainted”
○ Προσέγγιση μέσω ανάλυσης Source / Destination Operands, ανεξάρτητη αρχιτεκτονικής
13
14. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Υλοποίηση - Συμβολική Εκτέλεση
● angr - Symbolic execution framework
● Επικοινωνία με το DynamoRIO μέσω Unix Sockets
● Αρχικοποίηση κατάστασης με το στιγμιότυπο
● Σύμφωνα με το taint analysis, θέτουμε συμβολικές μεταβλητές μόνο εκείνα τα
bytes της εισόδου που επηρέασαν άλλες τιμές
● Συμβολική εκτέλεση
○ Συλλογή συνθηκών
○ Επίλυση συμβολικών μεταβλητών ώστε να φτάσει η εκτέλεση στο μονοπάτι που δεν
εκτελέστηκε κατά τη δυναμική εκτέλεση, παράγοντας ένα αρχείο με αυξημένο code coverage.
● Ανατροφοδότηση
○ Με τη δημιουργία του νέου αρχείου, ξεκινάει όλη η διαδικασία αναδρομικά.
14
15. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Πειράματα
● libJPEG
○ Βιβλιοθήκη (απο)κωδικοποίησης αρχείων εικόνας JPEG
○ Τα αρχεία JPEG έχουν συγκεκριμένη δομή για την αποθήκευση των καρέ, της χρωματικής
παλέτας, κωδικοποίηση Huffman κλπ.
○ Ένα αρχείο JPEG είναι δύσκολο να δημιουργηθεί “τυχαία”
● JSMN
○ Βιβλιοθήκη για parsing αρχείων JSON
15
16. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Αποτελέσματα libJPEG
Χρόνος ανάκτησης SOI marker JPEG
Στιγμιότυπο Taint Analysis Χρόνος Ανάκτησης Παραγόμενα Αρχεία
Απενεργοποιημένο Απενεργοποιημένο - -
Ενεργοποιημένο Απενεργοποιημένο 121s 25
Ενεργοποιημένο Ενεργοποιημένο 26s 25
● Μετά το αρχείο #25, η ανάλυση εξαντλούσε και τα 16GB της μνήμης του συστήματος
16
17. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Αποτελέσματα JSMN
# Αρχείο Code
Coverage
Missed Functions
1 29.28% 1
2 22.65% 1
3 9.94% 3
4 4.87% 4
● Με χρήση του εργαλείου LLVM-cov
● Και εδώ μετά από μερικά λεπτά η μνήμη του συστήματος
εξαντλήθηκε
17
18. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Συμπεράσματα
● Η συμβολική εκτέλεση είναι μια πανίσχυρη τεχνική για την ανάλυση
προγραμμάτων και την παραγωγή σεναρίων ελέγχου με ενθαρρυντικά
αποτελέσματα
● Λόγω των περιορισμών της συμβολικής εκτέλεσης είναι απαραίτητη χρήση
επιπλέον τεχνικών για την ανάλυση μεγάλων/εμπορικών προγραμμάτων
18
19. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Μελλοντική Εργασία
● Βελτιστοποίηση της δυναμικής ανάλυσης με εισαγωγή εντολών assembly
● Γενίκευση του κώδικα αποθήκευσης της κατάστασης του προγράμματος
● Χρήση shared memory μηχανισμού για την ελαχιστοποίηση του κόστους
μεταφοράς των δεδομένων
● Υποστήριξη Python 3
19
20. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Δημοσιεύσεις
● Μέρος αυτής της διπλωματικής παρουσιάστηκε στο συνέδριο FOSSCOM
2018 στο Ηράκλειο Κρήτης
20
21. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Ευχαριστίες
● Τον κύριο Ανδρέα Συμεωνίδη για την αμέριστη υπομονή του
● Τον κύριο Γεώργιο Μαμαλάκη για τις πολλές συζητήσεις μας γύρω από τη
διπλωματική για τις οποίες δεν είχε καμία υποχρέωση να κάνει
21
22. Ιούλιος 2019 Αυτόματη Παραγωγη Σεναρίου Ελέγχου μέσω Δυναμικής Ανάλυσης και Συμβολικής Εκτέλεσης
Two roads diverged in a wood, and I—
I took the one less traveled by,
And that has made all the difference.
22