Η έννοια του κώδικα αναλύεται σε έρευνα. Χρησιμοποιήστε στατική και δυναμική ανάλυση για να βελτιώσετε την ποιότητα του προϊόντος και την αποδοτικότητα ανάπτυξης. Η διαδικασία αναζήτησης ευπάθειας σε δράση

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

Αυτό το άρθρο εξετάζει πρώτα τη μέθοδο στατικής ανάλυσης. Μπορεί να βοηθήσει στην αποφυγή προβλημάτων προτού γίνουν μέρος του υποκείμενου κώδικα και να διασφαλίσει ότι ο νέος κώδικας συμμορφώνεται με το πρότυπο. Χρησιμοποιώντας διάφορες τεχνικές ανάλυσης, όπως ο έλεγχος αφηρημένου δέντρου σύνταξης (AST) και η ανάλυση διαδρομής κώδικα, τα εργαλεία στατικής ανάλυσης μπορούν να αποκαλύψουν κρυμμένα τρωτά σημεία, λογικά σφάλματα, ελαττώματα υλοποίησης και άλλα προβλήματα. Αυτό μπορεί να συμβεί τόσο στο στάδιο ανάπτυξης σε κάθε σταθμό εργασίας, όσο και κατά τη σύνθεση του συστήματος. Στη συνέχεια, το άρθρο διερευνά μια μέθοδο δυναμικής ανάλυσης που μπορεί να χρησιμοποιηθεί κατά την ανάπτυξη της ενότητας και την ολοκλήρωση του συστήματος για τον εντοπισμό προβλημάτων που χάνονται από τη στατική ανάλυση. Η δυναμική ανάλυση όχι μόνο ανιχνεύει σφάλματα δείκτη και άλλες ανωμαλίες, αλλά μπορεί επίσης να βελτιστοποιήσει τη χρήση των κύκλων CPU, της μνήμης RAM, της μνήμης flash και άλλων πόρων.

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

Συνδυάζοντας τα καλύτερα και των δύο κόσμων

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

Στο στάδιο της στατικής ανάλυσης, ανακαλύπτονται και περιγράφονται περιοχές του πηγαίου κώδικα με αδύναμα σημεία, συμπεριλαμβανομένων κρυφών τρωτών σημείων, λογικών σφαλμάτων, ελαττωμάτων υλοποίησης, εσφαλμένης εκτέλεσης παράλληλων λειτουργιών, συνοριακών συνθηκών που εμφανίζονται σπάνια και πολλών άλλων προβλημάτων. Για παράδειγμα, τα εργαλεία στατικής ανάλυσης του Klocwork Insight εκτελούν βαθιά ανάλυση του πηγαίου κώδικα σε συντακτικό και σημασιολογικό επίπεδο. Αυτά τα εργαλεία εκτελούν επίσης πολύπλοκη διαδιαδικαστική ανάλυση του ελέγχου και των ροών δεδομένων και χρησιμοποιούν προηγμένες τεχνικές για την κοπή ψευδών διαδρομών, την εκτίμηση των τιμών που θα λάβουν οι μεταβλητές και τη μοντελοποίηση της πιθανής συμπεριφοράς του προγράμματος κατά το χρόνο εκτέλεσης.

Οι προγραμματιστές μπορούν να χρησιμοποιήσουν εργαλεία στατικής ανάλυσης ανά πάσα στιγμή κατά τη φάση ανάπτυξης, ακόμη και όταν έχουν γραφτεί μόνο τμήματα του έργου. Ωστόσο, όσο πιο ολοκληρωμένος είναι ο κώδικας, τόσο το καλύτερο. Με τη στατική ανάλυση, μπορούν να προβληθούν όλες οι πιθανές διαδρομές εκτέλεσης κώδικα - αυτό συμβαίνει σπάνια με τακτικές δοκιμές, εκτός εάν το έργο απαιτεί κάλυψη κώδικα 100%. Για παράδειγμα, η στατική ανάλυση μπορεί να ανιχνεύσει σφάλματα λογισμικού που οφείλονται σε οριακές συνθήκες ή σφάλματα διαδρομής που δεν δοκιμάστηκαν κατά την ανάπτυξη.

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

Στατική ανάλυση: τα υπέρ Στατική ανάλυση: επιχειρήματα κατά
Χρησιμοποιείται ήδη στα αρχικά στάδια του κύκλου ζωής του λογισμικού, πριν ο κώδικας είναι έτοιμος για εκτέλεση και πριν ξεκινήσει η δοκιμή.

Οι υπάρχουσες βάσεις κώδικα που έχουν ήδη δοκιμαστεί μπορούν να αναλυθούν.

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

Χαμηλό κόστος: δεν χρειάζεται να δημιουργήσετε δοκιμαστικά προγράμματα ή εικονικές ενότητες (stubs). οι προγραμματιστές μπορούν να εκτελέσουν τις δικές τους αναλύσεις.

Ενδέχεται να ανακαλυφθούν σφάλματα λογισμικού και ευπάθειες που δεν προκαλούν απαραίτητα τη διακοπή λειτουργίας του προγράμματος ή δεν επηρεάζουν τη συμπεριφορά του προγράμματος κατά την πραγματική εκτέλεσή του.

Μη μηδενική πιθανότητα «ψευδώς θετικού».

Τραπέζι 1- Επιχειρήματα υπέρ και κατά της στατικής ανάλυσης.

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

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

Δυναμική ανάλυση: τα πλεονεκτήματα Δυναμική ανάλυση: επιχειρήματα κατά
Σπάνια εμφανίζονται "ψευδώς θετικά" - υψηλή παραγωγικότητα στην εύρεση σφαλμάτων

Μπορεί να πραγματοποιηθεί μια πλήρης στοίβα και ίχνος χρόνου εκτέλεσης για να εντοπιστεί η αιτία του σφάλματος.

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

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

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

πίνακας 2- Επιχειρήματα υπέρ και κατά της δυναμικής ανάλυσης.

Έγκαιρη ανίχνευση σφαλμάτων για μείωση του κόστους ανάπτυξης

Όσο νωρίτερα εντοπιστεί ένα σφάλμα λογισμικού, τόσο πιο γρήγορα και φθηνότερα μπορεί να διορθωθεί. Επομένως, τα εργαλεία στατικής και δυναμικής ανάλυσης έχουν πραγματική αξία παρέχοντας ανίχνευση σφαλμάτων νωρίς στον κύκλο ζωής του λογισμικού. Διάφορες μελέτες βιομηχανικών προϊόντων δείχνουν ότι η διόρθωση ενός προβλήματος κατά τη δοκιμή του συστήματος (για επιβεβαίωση της ποιότητας της λειτουργίας του, QA) ή μετά την παράδοση του συστήματος αποδεικνύεται ότι είναι αρκετές τάξεις μεγέθους πιο ακριβή από τη διόρθωση των ίδιων προβλημάτων κατά το στάδιο ανάπτυξης λογισμικού . Πολλοί οργανισμοί έχουν τις δικές τους εκτιμήσεις σχετικά με το κόστος της εξάλειψης ελαττωμάτων. Στο Σχ. Το Σχήμα 1 δείχνει δεδομένα για το υπό συζήτηση πρόβλημα, από το συχνά αναφερόμενο βιβλίο του Capers Jones. "Μέτρηση Εφαρμοσμένου Λογισμικού".

Ρύζι. 1- Καθώς το έργο εξελίσσεται, το κόστος επιδιόρθωσης ελαττωμάτων λογισμικού μπορεί να αυξηθεί εκθετικά. Τα εργαλεία στατικής και δυναμικής ανάλυσης συμβάλλουν στην αποτροπή αυτού του κόστους εντοπίζοντας σφάλματα λογισμικού νωρίς στον κύκλο ζωής του λογισμικού.

Στατική ανάλυση

Η στατική ανάλυση χρησιμοποιείται στην πρακτική ανάπτυξης λογισμικού για όσο διάστημα υπάρχει η ίδια η ανάπτυξη λογισμικού. Στην αρχική της μορφή, η ανάλυση περιορίστηκε στην παρακολούθηση της συμμόρφωσης με τα πρότυπα στυλ προγραμματισμού (lint). Οι προγραμματιστές το χρησιμοποιούσαν απευθείας στο χώρο εργασίας τους. Όσον αφορά τον εντοπισμό σφαλμάτων λογισμικού, τα πρώιμα εργαλεία στατικής ανάλυσης επικεντρώθηκαν σε αυτό που υπήρχε στην επιφάνεια: στυλ προγραμματισμού και κοινά συντακτικά λάθη. Για παράδειγμα, ακόμη και τα πιο απλά εργαλεία στατικής ανάλυσης θα είναι σε θέση να ανιχνεύσουν ένα σφάλμα αυτού του είδους:

Int foo(int x, int* ptr) ( if(x & 1); ( *ptr = x; return; ) ... )

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

Τα εργαλεία πρώιμης ανάλυσης επικεντρώθηκαν κυρίως στα συντακτικά λάθη. Επομένως, αν και ήταν δυνατό να βρεθούν σοβαρά σφάλματα, τα περισσότερα από τα προβλήματα που εντοπίστηκαν ήταν σχετικά ασήμαντα. Επιπλέον, παρασχέθηκε αρκετά περιορισμένο πλαίσιο κωδικοποίησης ώστε τα εργαλεία να επιτρέπουν να αναμένονται ακριβή αποτελέσματα. Αυτό συνέβη επειδή η εργασία έγινε κατά τη διάρκεια ενός τυπικού κύκλου μεταγλώττισης/σύνδεσης ανάπτυξης και αυτό που έκανε ο προγραμματιστής ήταν μόνο ένα μικρό κομμάτι κώδικα σε ένα μεγαλύτερο σύστημα λογισμικού. Αυτή η αδυναμία οδήγησε στο γεγονός ότι τα εργαλεία ανάλυσης περιλάμβαναν εκτιμήσεις και υποθέσεις σχετικά με το τι θα μπορούσε να συμβεί έξω από το sandbox του προγραμματιστή. Και αυτό, με τη σειρά του, οδήγησε στη δημιουργία αυξημένου όγκου αναφορών με «ψευδώς θετικά».

Οι επόμενες γενιές εργαλείων στατικής ανάλυσης αντιμετώπισαν αυτές τις ελλείψεις και διεύρυναν το πεδίο εφαρμογής τους πέρα ​​από την ανάλυση και τη σημασιολογική ανάλυση. Τα νέα εργαλεία δημιούργησαν μια εκτεταμένη αναπαράσταση ή μοντέλο του κώδικα που δημιουργείται (κάτι παρόμοιο με τη φάση της μεταγλώττισης) και στη συνέχεια μοντελοποίησαν όλες τις πιθανές διαδρομές εκτέλεσης κώδικα σύμφωνα με το μοντέλο. Στη συνέχεια, οι λογικές ροές χαρτογραφήθηκαν σε αυτές τις διαδρομές ενώ ταυτόχρονα ελέγχονταν πώς και πού δημιουργήθηκαν, χρησιμοποιήθηκαν και καταστράφηκαν τα αντικείμενα δεδομένων. Κατά τη διαδικασία ανάλυσης μονάδων λογισμικού, μπορούν να συνδεθούν διαδικασίες για την ανάλυση του διαδικαστικού ελέγχου και της ροής δεδομένων. Ταυτόχρονα, τα «ψευδώς θετικά» ελαχιστοποιούνται επίσης με τη χρήση νέων προσεγγίσεων για την αποκοπή εσφαλμένων μονοπατιών, την εκτίμηση των τιμών που μπορούν να λάβουν οι μεταβλητές και τη μοντελοποίηση της πιθανής συμπεριφοράς κατά την εργασία σε πραγματικό χρόνο. Για τη δημιουργία δεδομένων αυτού του επιπέδου σε εργαλεία στατικής ανάλυσης, είναι απαραίτητο να αναλυθεί ολόκληρη η βάση κώδικα του έργου, να πραγματοποιηθεί μια ολοκληρωμένη διάταξη συστήματος και όχι μόνο να εργαστείτε με τα αποτελέσματα που λαμβάνονται στο sandbox στην επιφάνεια εργασίας του προγραμματιστή.

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

  • Έλεγχος του δέντρου αφηρημένης σύνταξης- για να ελέγξετε τη βασική σύνταξη και τη δομή του κώδικα.
  • Ανάλυση διαδρομής κώδικα- να εκτελέσει μια πιο ολοκληρωμένη ανάλυση, η οποία εξαρτάται από την κατανόηση της κατάστασης των αντικειμένων δεδομένων λογισμικού σε ένα συγκεκριμένο σημείο κατά μήκος της διαδρομής εκτέλεσης του κώδικα.

Αφηρημένα δέντρα σύνταξης

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

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

Πολλά εργαλεία προσφέρουν ελέγχους βάσει AST για μια ποικιλία γλωσσών, συμπεριλαμβανομένων εργαλείων ανοιχτού κώδικα όπως το PMD για Java. Ορισμένα εργαλεία χρησιμοποιούν μια γραμματική διαδρομής X ή μια γραμματική που προέρχεται από τη διαδρομή X για να ορίσουν συνθήκες που ενδιαφέρουν τα προγράμματα παρακολούθησης. Άλλα εργαλεία παρέχουν προηγμένους μηχανισμούς που επιτρέπουν στους χρήστες να δημιουργούν τα δικά τους πούλια με βάση το AST. Αυτός ο τύπος ελέγχου είναι σχετικά εύκολος στη διενέργεια και πολλοί οργανισμοί δημιουργούν νέα προγράμματα ελέγχου αυτού του τύπου για να επαληθεύσουν τη συμμόρφωση με τα εταιρικά πρότυπα κωδικοποίησης ή τις βέλτιστες πρακτικές που συνιστώνται από τον κλάδο.

Ανάλυση διαδρομής κώδικα

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

Αν(x & 1) ptr = NULL; *ptr = 1;

Μια πρόχειρη εξέταση του τμήματος οδηγεί στο προφανές συμπέρασμα ότι η μεταβλητή ptr μπορεί να πάρει την τιμή NULL εάν η μεταβλητή x είναι περιττή, και αυτή η συνθήκη αναπόφευκτα θα οδηγήσει σε μια αναφορά μηδενικής σελίδας κατά τη διάρκεια της αποαναφοράς. Ωστόσο, κατά τη δημιουργία ενός ελεγκτή που βασίζεται σε AST, η εύρεση ενός τέτοιου σφάλματος λογισμικού είναι πολύ προβληματική. Εξετάστε το δέντρο AST (απλοποιημένο για λόγους σαφήνειας) που θα δημιουργηθεί για το παραπάνω απόσπασμα κώδικα:

Μπλοκ δήλωσης Εάν-δήλωση Έλεγχος-έκφραση Δυαδικός-τελεστής & x 1 Πρόταση True-Branch Έκφραση-τελεστής = ptr 0 Έκφραση-δήλωση Εκχώρηση-τελεστής = Δείκτης αναφοράς - ptr 1 Σε τέτοιες περιπτώσεις, δεν υπάρχει αναζήτηση δέντρου ή απλή απαρίθμηση Οι κόμβοι δεν θα είναι σε θέση να ανιχνεύσουν με μια αρκετά γενική μορφή μια απόπειρα (τουλάχιστον μερικές φορές άκυρη) απόπειρα αποαναφοράς του δείκτη ptr. Συνεπώς, το εργαλείο ανάλυσης δεν μπορεί απλώς να αναζητήσει το συντακτικό μοντέλο. Είναι επίσης απαραίτητο να αναλυθεί ο κύκλος ζωής των αντικειμένων δεδομένων όπως εμφανίζονται και χρησιμοποιούνται εντός της λογικής ελέγχου κατά την εκτέλεση.

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

  • Το αντικείμενο που δημιουργήθηκε πρόσφατα κατανεμήθηκε πριν αφαιρεθούν όλες οι αναφορές σε αυτό από το πεδίο εφαρμογής;
  • Για κάποιο αντικείμενο δεδομένων, έχει ελεγχθεί το επιτρεπόμενο εύρος τιμών πριν το αντικείμενο μεταβιβαστεί σε μια συνάρτηση λειτουργικού συστήματος;
  • Ελέγχθηκε η συμβολοσειρά χαρακτήρων για ειδικούς χαρακτήρες πριν περάσει η συμβολοσειρά ως ερώτημα SQL;
  • Η λειτουργία αντιγραφής θα προκαλέσει υπερχείλιση buffer;
  • Είναι ασφαλές να καλέσετε αυτήν τη λειτουργία αυτήν τη στιγμή;

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

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

Ακολουθία ενεργειών κατά την εκτέλεση στατικής ανάλυσης

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

Ένα μοναδικό προϊόν στο είδος του, το Klocwork Insight σάς επιτρέπει να αναλύετε τον κώδικα που δημιουργήθηκε στο χώρο εργασίας ενός συγκεκριμένου προγραμματιστή, αποφεύγοντας παράλληλα προβλήματα που σχετίζονται με ανακριβή διαγνωστικά, τα οποία είναι συνήθως τυπικά για εργαλεία αυτού του είδους. Το Klocwork παρέχει Ανάλυση συνδεδεμένης επιφάνειας εργασίας, όπου ο κώδικας προγραμματιστή αναλύεται ενώ κατανοεί όλες τις εξαρτήσεις του συστήματος. Αυτό οδηγεί σε τοπική ανάλυση που είναι εξίσου ακριβής και ισχυρή με την κεντρική ανάλυση συστήματος, αλλά όλα αυτά πριν από την πλήρη συναρμολόγηση του κώδικα.

Από την άποψη της ροής εργασιών ανάλυσης, αυτή η δυνατότητα επιτρέπει στον προγραμματιστή να διεξάγει ακριβή, υψηλής ποιότητας στατική ανάλυση πολύ νωρίς στον κύκλο ζωής της ανάπτυξης. Το Klockwork Insight αναφέρει προβλήματα στο ενσωματωμένο περιβάλλον προγραμματιστή (IDE) ή στη γραμμή εντολών καθώς ο προγραμματιστής γράφει κώδικα και περιοδικά μεταγλωττίζει/συνδέει. Αυτά τα μηνύματα και οι αναφορές εκδίδονται πριν από την εκτέλεση της δυναμικής ανάλυσης και πριν όλοι οι προγραμματιστές συγκεντρώσουν τον κώδικά τους.

Ρύζι. 2- Ακολουθία εκτέλεσης στατικής ανάλυσης.

Τεχνολογία Δυναμικής Ανάλυσης

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

Η τεχνολογία δυναμικής ανάλυσης περιλαμβάνει:

  • Τοποθέτηση ένθετων στον πηγαίο κώδικα στο στάδιο της προεπεξεργασίας– ένα ειδικό κομμάτι κώδικα εισάγεται στο αρχικό κείμενο της εφαρμογής πριν ξεκινήσει η μεταγλώττιση για τον εντοπισμό σφαλμάτων. Αυτή η προσέγγιση δεν απαιτεί λεπτομερή γνώση του περιβάλλοντος εκτέλεσης, καθιστώντας αυτή τη μέθοδο δημοφιλή μεταξύ των εργαλείων δοκιμής και ανάλυσης ενσωματωμένων συστημάτων. Ένα παράδειγμα τέτοιου εργαλείου είναι το προϊόν IBM Rational Test RealTime.
  • Τοποθέτηση εισαγωγών στον κώδικα αντικειμένου– ένα τέτοιο εργαλείο δυναμικής ανάλυσης απαιτεί επαρκή γνώση του περιβάλλοντος χρόνου εκτέλεσης για να είναι δυνατή η εισαγωγή κώδικα απευθείας σε εκτελέσιμα αρχεία και βιβλιοθήκες. Με αυτήν την προσέγγιση, δεν χρειάζεται να έχετε πρόσβαση στον πηγαίο κώδικα του προγράμματος ή να επανασυνδέσετε την εφαρμογή. Ένα παράδειγμα τέτοιου εργαλείου είναι το προϊόν IBM Rational Purify.
  • Εισαγωγή κώδικα κατά το χρόνο μεταγλώττισης– ο προγραμματιστής χρησιμοποιεί ειδικούς διακόπτες μεταγλωττιστή (επιλογές) για να τους εφαρμόσει στον πηγαίο κώδικα. Χρησιμοποιείται η ικανότητα του μεταγλωττιστή να ανιχνεύει σφάλματα. Για παράδειγμα, ο μεταγλωττιστής GNU C/C++ 4.x χρησιμοποιεί τεχνολογία Mudflap για τον εντοπισμό προβλημάτων που σχετίζονται με λειτουργίες δείκτη.
  • Εξειδικευμένες Βιβλιοθήκες Runtime– για τον εντοπισμό σφαλμάτων στις παραμέτρους που έχουν περάσει, ο προγραμματιστής χρησιμοποιεί εκδόσεις εντοπισμού σφαλμάτων των βιβλιοθηκών συστήματος. Λειτουργίες όπως η strcpy() είναι διαβόητες για τη δυνατότητά τους για μηδενικούς ή λανθασμένους δείκτες κατά την εκτέλεση. Όταν χρησιμοποιείτε εκδόσεις εντοπισμού σφαλμάτων βιβλιοθηκών, εντοπίζονται τέτοιες "κακές" παράμετροι. Αυτή η τεχνολογία δεν απαιτεί επανασύνδεση της εφαρμογής και έχει μικρότερο αντίκτυπο στην απόδοση από την πλήρη χρήση των εισαγωγών κώδικα πηγής/αντικειμένου. Αυτή η τεχνολογία χρησιμοποιείται στο εργαλείο ανάλυσης RAM στο QNX® Momentics® IDE.

Σε αυτό το άρθρο, θα εξετάσουμε τις τεχνολογίες που χρησιμοποιούνται στα εργαλεία προγραμματιστών QNX Momentics, με ιδιαίτερη έμφαση στο GCC Mudflap και σε εξειδικευμένες βιβλιοθήκες χρόνου εκτέλεσης.

GNU C/C++ Mudflap: υλοποίηση στον πηγαίο κώδικα στο στάδιο της μεταγλώττισης

Το εργαλείο Mudflap, που υπάρχει στην έκδοση 4.x του GNU C/C++ Compiler (GCC), χρησιμοποιεί έγχυση πηγαίου κώδικα σε χρόνο μεταγλώττισης. Ταυτόχρονα, κατά την εκτέλεση ελέγχονται δομές που πιθανώς ενέχουν την πιθανότητα σφαλμάτων. Το Mudflap εστιάζει σε λειτουργίες δείκτη επειδή είναι η πηγή πολλών σφαλμάτων χρόνου εκτέλεσης για προγράμματα γραμμένα σε C και C++.

Με ενεργοποιημένο το Mudflap, ο μεταγλωττιστής GCC έχει τώρα ένα ακόμη πέρασμα όταν εισάγει τον κωδικό ελέγχου για λειτουργίες δείκτη. Ο εισαγόμενος κωδικός συνήθως ελέγχει την εγκυρότητα των τιμών του δείκτη που έχουν περάσει. Οι εσφαλμένες τιμές δείκτη θα αναγκάσουν τον μεταγλωττιστή GCC να εκδώσει μηνύματα στην τυπική συσκευή σφάλματος της κονσόλας (stderr). Ο ελεγκτής δείκτη του Mudflap κάνει περισσότερα από τον έλεγχο των δεικτών για μηδενικά: η βάση δεδομένων του αποθηκεύει διευθύνσεις μνήμης για πραγματικά αντικείμενα και ιδιότητες αντικειμένων, όπως τοποθεσία στον πηγαίο κώδικα, σφραγίδα ημερομηνίας/ώρας, αναδρομή στοίβας όταν εκχωρείται και εκχωρείται μνήμη. Μια τέτοια βάση δεδομένων σάς επιτρέπει να λαμβάνετε γρήγορα τα απαραίτητα δεδομένα κατά την ανάλυση λειτουργιών πρόσβασης στη μνήμη στον πηγαίο κώδικα του προγράμματος.

Οι συναρτήσεις της βιβλιοθήκης όπως η strcpy() δεν ελέγχουν τις παραμέτρους που έχουν περάσει. Τέτοιες λειτουργίες δεν επαληθεύονται από το Mudflap. Ωστόσο, στο Mudflap μπορείτε να δημιουργήσετε ένα περιτύλιγμα συμβόλων για στατικά συνδεδεμένες βιβλιοθήκες ή ένα ένθετο για δυναμικές βιβλιοθήκες. Με αυτήν την τεχνολογία, δημιουργείται ένα πρόσθετο επίπεδο μεταξύ της εφαρμογής και της βιβλιοθήκης, το οποίο καθιστά δυνατό τον έλεγχο της αξιοπιστίας των παραμέτρων και την έκδοση ενός μηνύματος σχετικά με την εμφάνιση αποκλίσεων. Το Mudflap χρησιμοποιεί έναν ευρετικό αλγόριθμο που βασίζεται στη γνώση των ορίων μνήμης που χρησιμοποιεί η εφαρμογή (μνήμη σωρού, στοίβα, τμήματα κώδικα και δεδομένων, κ.λπ.) για να προσδιορίσει εάν οι τιμές του δείκτη που επιστρέφονται είναι σωστές.

Χρησιμοποιώντας τους διακόπτες γραμμής εντολών του μεταγλωττιστή GCC, ένας προγραμματιστής μπορεί να ενεργοποιήσει τις δυνατότητες του Mudflap για την εισαγωγή αποσπασμάτων κώδικα και τη συμπεριφορά ελέγχου, όπως η διαχείριση παραβιάσεων (όρια, τιμές), η εκτέλεση πρόσθετων ελέγχων και ρυθμίσεων, η ενεργοποίηση ευρετικών και αυτοδιάγνωσης. Για παράδειγμα, ο συνδυασμός διακόπτη -fmudflap ορίζει την προεπιλεγμένη διαμόρφωση Mudflap. Τα μηνύματα του μεταγλωττιστή σχετικά με παραβιάσεις που εντοπίζονται από το Mudflap εξάγονται στην κονσόλα εξόδου (stderr) ή στη γραμμή εντολών. Η λεπτομερής έξοδος παρέχει πληροφορίες σχετικά με την παραβίαση και τις μεταβλητές, τις συναρτήσεις που εμπλέκονται και τη θέση του κώδικα. Αυτές οι πληροφορίες μπορούν να εισαχθούν αυτόματα στο IDE, όπου οπτικοποιούνται και ανιχνεύονται στοίβα. Χρησιμοποιώντας αυτά τα δεδομένα, ο προγραμματιστής μπορεί να πλοηγηθεί γρήγορα στην κατάλληλη θέση στον πηγαίο κώδικα του προγράμματος.

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

Όταν χρησιμοποιείτε το εργαλείο Mudflap, ο χρόνος σύνδεσης μπορεί να αυξηθεί και η απόδοση χρόνου εκτέλεσης μπορεί να μειωθεί. Τα δεδομένα που παρουσιάζονται στο άρθρο «Mudflap: Έλεγχος χρήσης δείκτη για C/C++» υποδηλώνουν ότι με τη συμπερίληψη του Mudflap, ο χρόνος σύνδεσης αυξάνεται κατά 3...5 φορές και το πρόγραμμα αρχίζει να εκτελείται 1,25 έως 5 φορές πιο αργά. Οι προγραμματιστές κρίσιμων για τον χρόνο εφαρμογών θα πρέπει να χρησιμοποιούν αυτό το εργαλείο με προσοχή, ωστόσο, το Mudflap είναι ένα ισχυρό εργαλείο για τον εντοπισμό δομών κώδικα που είναι επιρρεπείς σε σφάλματα και δυνητικά θανατηφόρα σχέδια για χρήση του Mudflap σε μελλοντικές εκδόσεις των εργαλείων δυναμικής ανάλυσης.

Ρύζι. 3- Χρησιμοποιήστε τις πληροφορίες backtrace που εμφανίζονται στο QNX Momentics IDE για να βρείτε τον πηγαίο κώδικα που προκάλεσε το σφάλμα.

Εντοπισμός σφαλμάτων σε εκδόσεις των βιβλιοθηκών χρόνου εκτέλεσης

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

strcpy(a,b);

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

  • εάν τιμή δείκτη έναείναι μηδέν ή μη έγκυρο, τότε η αντιγραφή σε αυτήν τη διεύθυνση προορισμού θα έχει ως αποτέλεσμα ένα σφάλμα άρνησης πρόσβασης στη μνήμη.
  • εάν τιμή δείκτη σιείναι μηδέν ή μη έγκυρο, τότε η ανάγνωση πληροφοριών από αυτήν τη διεύθυνση θα οδηγήσει σε σφάλμα απαγόρευσης πρόσβασης στη μνήμη.
  • αν στο τέλος της γραμμής σιΕάν ο χαρακτήρας τερματισμού γραμμής "0" λείπει, περισσότεροι χαρακτήρες θα αντιγραφούν στη συμβολοσειρά προορισμού από τον αναμενόμενο.
  • εάν το μέγεθος της γραμμής σιμεγαλύτερη από τη μνήμη που εκχωρείται για τη συμβολοσειρά ένα, τότε περισσότερα byte θα γραφτούν στην καθορισμένη διεύθυνση από τα αναμενόμενα (ένα τυπικό σενάριο υπερχείλισης buffer).

Στην έκδοση εντοπισμού σφαλμάτων της βιβλιοθήκης, οι τιμές των παραμέτρων ελέγχονται « ένα' Και ' σι’. Τα μήκη των χορδών ελέγχονται επίσης για να διασφαλιστεί ότι είναι συμβατά. Εάν εντοπιστεί μη έγκυρη παράμετρος, εκδίδεται αντίστοιχο μήνυμα συναγερμού. Στο περιβάλλον QNX Momentics, αυτά τα μηνύματα σφάλματος εισάγονται από το σύστημα προορισμού και εμφανίζονται στην οθόνη. Το QNX Momentics χρησιμοποιεί επίσης τεχνολογία για την παρακολούθηση της κατανομής μνήμης και των συμβάντων κατανομής, γεγονός που καθιστά δυνατή την εκτέλεση εις βάθος ανάλυσης της χρήσης RAM.

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

Οι εκδόσεις εντοπισμού σφαλμάτων των βιβλιοθηκών παρέχουν μια αποδεδειγμένη "μη επεμβατική" μέθοδο για τον εντοπισμό σφαλμάτων κατά την κλήση συναρτήσεων βιβλιοθήκης. Αυτή η τεχνική είναι ιδανική για ανάλυση RAM και άλλες τεχνικές ανάλυσης που βασίζονται σε ταιριαστά ζεύγη κλήσεων, όπως malloc() και free(). Με άλλα λόγια, αυτή η τεχνολογία μπορεί να ανιχνεύσει σφάλματα κατά το χρόνο εκτέλεσης μόνο για κώδικα με κλήσεις βιβλιοθήκης. Αυτό δεν ανιχνεύει πολλά κοινά σφάλματα, όπως ενσωματωμένες αποαναφορές δείκτη ή λανθασμένους αριθμούς δείκτη. Συνήθως, κατά τον εντοπισμό σφαλμάτων, παρακολουθείται μόνο ένα υποσύνολο κλήσεων συστήματος. Μπορείτε να μάθετε περισσότερα σχετικά με αυτό στο άρθρο.

Ρύζι. 4- Η ανάλυση RAM πραγματοποιείται με την τοποθέτηση παγίδων στην περιοχή των κλήσεων API που σχετίζονται με την πρόσβαση στη μνήμη.

Ακολουθία ενεργειών κατά τη δυναμική ανάλυση

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

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

  1. Παρατήρηση– Πρώτα απ 'όλα, καταγράφει σφάλματα χρόνου εκτέλεσης, εντοπίζει διαρροές μνήμης και εμφανίζει όλα τα αποτελέσματα στο IDE.
  2. Προσαρμογή– ο προγραμματιστής έχει στη συνέχεια την ευκαιρία να εντοπίσει κάθε σφάλμα πίσω στην παραβατική γραμμή του πηγαίου κώδικα. Με καλή ενσωμάτωση στο IDE, κάθε σφάλμα θα εμφανίζεται στην οθόνη. Ο προγραμματιστής πρέπει απλώς να κάνει κλικ στη γραμμή σφάλματος και θα ανοίξει ένα τμήμα πηγαίου κώδικα με την προσβλητική γραμμή. Σε πολλές περιπτώσεις, ο προγραμματιστής μπορεί να αντιμετωπίσει γρήγορα το πρόβλημα χρησιμοποιώντας τα διαθέσιμα εργαλεία ανίχνευσης στοίβας και πρόσθετου πηγαίου κώδικα στο IDE (προβολείς κλήσεων λειτουργιών, ανιχνευτές κλήσεων κ.λπ.).
  3. Προφίλ– Εξαλείφοντας τα εντοπισμένα σφάλματα και τις διαρροές μνήμης, ο προγραμματιστής μπορεί να αναλύσει τη χρήση πόρων με την πάροδο του χρόνου, συμπεριλαμβανομένων των καταστάσεων αιχμής, του μέσου φορτίου και της υπερβολικής κατανάλωσης πόρων. Στην ιδανική περίπτωση, το εργαλείο ανάλυσης θα παρέχει μια οπτική αναπαράσταση της μακροπρόθεσμης χρήσης πόρων, επιτρέποντάς σας να εντοπίσετε αμέσως αιχμές στην κατανομή μνήμης και άλλες ανωμαλίες.
  4. Βελτιστοποίηση– χρησιμοποιώντας τις πληροφορίες από το στάδιο δημιουργίας προφίλ, ο προγραμματιστής μπορεί τώρα να πραγματοποιήσει μια «καλή» ανάλυση της χρήσης των πόρων του προγράμματος. Μεταξύ άλλων, τέτοιες βελτιστοποιήσεις μπορούν να ελαχιστοποιήσουν τις αιχμές πόρων και τη σπατάλη, συμπεριλαμβανομένης της χρήσης RAM και του χρόνου χρήσης της CPU.

Ρύζι. 5- Τυπική ακολουθία ενεργειών για δυναμική ανάλυση

Συνδυασμός της αλληλουχίας ενεργειών διαφόρων τύπων ανάλυσης στο περιβάλλον ανάπτυξης

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

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

Ακολουθεί ένα παράδειγμα κοινής χρήσης δύο τύπων εργαλείων:

  1. Στην αρχή της εργάσιμης ημέρας, ο προγραμματιστής εξετάζει τη νυχτερινή αναφορά αποτελεσμάτων κατασκευής. Αυτή η αναφορά περιλαμβάνει τόσο τα πραγματικά σφάλματα σύνδεσης όσο και τα αποτελέσματα της στατικής ανάλυσης που πραγματοποιήθηκε κατά τη σύνδεση.
  2. Η αναφορά στατικής ανάλυσης παραθέτει τα ελαττώματα που εντοπίστηκαν μαζί με πληροφορίες που βοηθούν στην επίλυσή τους, συμπεριλαμβανομένων συνδέσμων προς τον πηγαίο κώδικα. Χρησιμοποιώντας το IDE, ο προγραμματιστής μπορεί να επισημάνει κάθε κατάσταση είτε ως πραγματικό σφάλμα είτε ως "ψευδώς θετικό". Μετά από αυτό, τα πραγματικά σφάλματα διορθώνονται.
  3. Ο προγραμματιστής αποθηκεύει τις αλλαγές που έγιναν τοπικά, εντός του IDE, μαζί με τυχόν νέα αποσπάσματα κώδικα. Ο προγραμματιστής δεν δεσμεύει αυτές τις αλλαγές στον έλεγχο πηγής μέχρι να ελεγχθούν και να δοκιμαστούν οι αλλαγές.
  4. Ο προγραμματιστής αναλύει και διορθώνει τον νέο κώδικα χρησιμοποιώντας ένα εργαλείο στατικής ανάλυσης στον τοπικό πάγκο εργασίας. Προκειμένου να είμαστε σίγουροι για τον εντοπισμό σφαλμάτων υψηλής ποιότητας και την απουσία «ψευδών θετικών στοιχείων», η ανάλυση χρησιμοποιεί εκτενείς πληροφορίες σε επίπεδο συστήματος. Αυτές οι πληροφορίες λαμβάνονται από δεδομένα από τη διαδικασία δημιουργίας/ανάλυσης ολονύκτιας.
  5. Μετά την ανάλυση και τον «καθαρισμό» οποιουδήποτε νέου κώδικα, ο προγραμματιστής ενσωματώνει τον κώδικα σε μια τοπική δοκιμαστική εικόνα ή ένα εκτελέσιμο αρχείο.
  6. Χρησιμοποιώντας εργαλεία δυναμικής ανάλυσης, ο προγραμματιστής εκτελεί δοκιμές για να επαληθεύσει τις αλλαγές που έγιναν.
  7. Χρησιμοποιώντας το IDE, ένας προγραμματιστής μπορεί γρήγορα να εντοπίσει και να διορθώσει σφάλματα που αναφέρονται μέσω εργαλείων δυναμικής ανάλυσης. Ο κώδικας θεωρείται τελικός και έτοιμος για χρήση όταν έχει περάσει από στατική ανάλυση, δοκιμή μονάδας και δυναμική ανάλυση.
  8. Ο προγραμματιστής υποβάλλει αλλαγές στο σύστημα ελέγχου πηγής. ο τροποποιημένος κώδικας συμμετέχει στη συνέχεια στην επόμενη νυχτερινή διαδικασία κατασκευής.

Αυτή η ακολουθία ενεργειών είναι παρόμοια με εκείνη που χρησιμοποιείται σε έργα μεσαίου έως μεγάλου μεγέθους που χρησιμοποιούν ήδη νυχτερινές εκδόσεις, έλεγχο πηγαίου κώδικα και ιδιοκτησία προσωπικού κώδικα. Επειδή τα εργαλεία είναι ενσωματωμένα στο IDE, οι προγραμματιστές εκτελούν γρήγορα στατική και δυναμική ανάλυση χωρίς να αποκλίνουν από μια τυπική ροή εργασίας. Ως αποτέλεσμα, η ποιότητα του κώδικα αυξάνεται σημαντικά ήδη στο στάδιο της δημιουργίας πηγαίου κώδικα.

Ο ρόλος της αρχιτεκτονικής RTOS

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

Για παράδειγμα, σε ένα RTOS μικροπυρήνα όπως το QNX Neutrino, όλες οι εφαρμογές, τα προγράμματα οδήγησης συσκευών, τα συστήματα αρχείων και οι στοίβες δικτύωσης βρίσκονται εκτός του πυρήνα σε ξεχωριστούς χώρους διευθύνσεων. Ως αποτέλεσμα, όλοι βρίσκονται απομονωμένοι από τον πυρήνα και ο ένας από τον άλλον. Αυτή η προσέγγιση παρέχει τον υψηλότερο βαθμό εντοπισμού των αστοχιών: η αστοχία ενός από τα στοιχεία δεν οδηγεί σε κατάρρευση του συστήματος στο σύνολό του. Επιπλέον, αποδεικνύεται ότι μπορείτε εύκολα να εντοπίσετε ένα σφάλμα RAM ή άλλο σφάλμα λογικής στο στοιχείο που προκάλεσε το σφάλμα.

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

Ρύζι. 6- Σε ένα λειτουργικό σύστημα μικροπυρήνα, αστοχίες στη μνήμη RAM για προγράμματα οδήγησης, στοίβες πρωτοκόλλων και άλλες υπηρεσίες δεν θα οδηγήσουν σε διακοπή άλλων διεργασιών ή του πυρήνα. Επιπλέον, το λειτουργικό σύστημα μπορεί να ανιχνεύσει αμέσως μια μη εξουσιοδοτημένη απόπειρα πρόσβασης στη μνήμη και να υποδείξει ποιος κωδικός έκανε την προσπάθεια.

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

Τελικές παρατηρήσεις

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

Εν τω μεταξύ, τα εργαλεία δυναμικής ανάλυσης υποστηρίζουν τις φάσεις ολοκλήρωσης και δοκιμής αναφέροντας σφάλματα (ή πιθανά προβλήματα) που εμφανίζονται κατά την εκτέλεση του προγράμματος στο περιβάλλον ανάπτυξης. Αυτά τα εργαλεία παρέχουν επίσης πλήρεις πληροφορίες ανίχνευσης στο σημείο που παρουσιάστηκε το σφάλμα. Χρησιμοποιώντας αυτές τις πληροφορίες, οι προγραμματιστές μπορούν να διορθώσουν μεταθανάτια μια μυστηριώδη αποτυχία προγράμματος ή ένα σφάλμα συστήματος σε πολύ μικρότερο χρονικό διάστημα. Η δυναμική ανάλυση μέσω ιχνών στοίβας και μεταβλητών μπορεί να αποκαλύψει τις υποκείμενες αιτίες του προβλήματος - αυτό είναι καλύτερο από τη χρήση δηλώσεων "if (ptr != NULL)" παντού για την πρόληψη και την αντιμετώπιση ατυχημάτων.

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

Βιβλιογραφία

  • Eigler, Frank Ch., “Mudflap: Pointer Use Checking for C/C++”, Proceedings of the GCC Developers Summit 2003, σελ. 57-70. http://www.linux.org.uk/~ajh/gcc/gccsummit-2003-proceedings.pdf
  • "Ανάλυση σωρού: Κάνοντας τα σφάλματα της μνήμης στο παρελθόν", Οδηγός προγραμματιστή QNX Neutrino RTOS. http://pegasus.ott.qnx.com/download/download/16853/neutrino_prog.pdf

Σχετικά με τα συστήματα λογισμικού QNX

Η QNX Software Systems είναι θυγατρική της Harman International και κορυφαίος παγκόσμιος πάροχος καινοτόμων τεχνολογιών ενσωματωμένων συστημάτων, συμπεριλαμβανομένων μεσαίου λογισμικού, εργαλείων ανάπτυξης και λειτουργικών συστημάτων. Το QNX® Neutrino® RTOS, το κιτ ανάπτυξης QNX Momentics® και το ενδιάμεσο λογισμικό QNX Aviage® είναι χτισμένα σε μια αρθρωτή αρχιτεκτονική για να σχηματίσουν το πιο ισχυρό και επεκτάσιμο πακέτο λογισμικού για την κατασκευή ενσωματωμένων συστημάτων υψηλής απόδοσης. Οι παγκόσμιοι ηγέτες όπως η Cisco, η Daimler, η General Electric, η Lockheed Martin και η Siemens χρησιμοποιούν ευρέως τις τεχνολογίες QNX σε δρομολογητές δικτύου, ιατρικές συσκευές, μονάδες τηλεματικής αυτοκινήτου, συστήματα ασφάλειας και ασφάλειας, βιομηχανικά ρομπότ και άλλες κρίσιμες για την αποστολή εφαρμογές. Τα κεντρικά γραφεία της εταιρείας βρίσκονται στην Οττάβα (Καναδάς) και οι διανομείς προϊόντων βρίσκονται σε περισσότερες από 100 χώρες σε όλο τον κόσμο.

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

Τα προϊόντα της Klocwork έχουν σχεδιαστεί για αυτοματοποιημένη ανάλυση στατικού κώδικα, εντοπισμό και πρόληψη ελαττωμάτων λογισμικού και ζητημάτων ασφάλειας. Τα προϊόντα μας παρέχουν στις ομάδες ανάπτυξης τα εργαλεία για τον εντοπισμό των βασικών αιτιών των ελαττωμάτων ποιότητας λογισμικού και ασφάλειας, καθώς και για την παρακολούθηση και την πρόληψη αυτών των ελαττωμάτων σε όλη τη διαδικασία ανάπτυξης. Η πατενταρισμένη τεχνολογία της Klocwork δημιουργήθηκε το 1996 και έχει προσφέρει υψηλή απόδοση επένδυσης (ROI) σε περισσότερους από 80 πελάτες, πολλοί από τους οποίους είναι εταιρείες του Fortune 500 και παρέχουν τα περιβάλλοντα ανάπτυξης λογισμικού με τη μεγαλύτερη ζήτηση στον κόσμο. Η Klocwork είναι ιδιωτική και έχει γραφεία στο Μπέρλινγκτον, στο Σαν Χοσέ, στο Σικάγο, στο Ντάλας (ΗΠΑ) και στην Οτάβα (Καναδάς).

Εισαγωγή

Οι τυπικές δυνατότητες των προϊόντων λογισμικού και των διαφόρων συστημάτων ελέγχου είναι ανεπαρκείς για τους περισσότερους πελάτες. Τα συστήματα διαχείρισης ιστοτόπων (για παράδειγμα, WordPress, Joomla ή Bitrix), λογιστικά προγράμματα, συστήματα διαχείρισης πελατών (CRM), επιχειρήσεις και παραγωγή (για παράδειγμα, 1C και SAP) παρέχουν άφθονες ευκαιρίες επέκτασης της λειτουργικότητας και προσαρμογής στις ανάγκες συγκεκριμένων πελατών. Τέτοιες δυνατότητες υλοποιούνται χρησιμοποιώντας προσαρμοσμένες μονάδες τρίτων κατασκευαστών ή προσαρμογή υπαρχόντων. Αυτές οι ενότητες είναι κώδικας προγράμματος γραμμένος σε μία από τις ενσωματωμένες γλώσσες προγραμματισμού που αλληλεπιδρά με το σύστημα και υλοποιεί τη λειτουργικότητα που απαιτείται από τους πελάτες.

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

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

Υπάρχει μια ασφαλής μεθοδολογία ανάπτυξης που προβλέπει την ενσωμάτωση διαδικασιών ελέγχου και ελέγχου κώδικα στο στάδιο δημιουργίας ενός προϊόντος λογισμικού - SDL (Security Development Lifecycle, safe development life cycle). Ωστόσο, μόνο ένας προγραμματιστής λογισμικού μπορεί να εφαρμόσει αυτήν τη μεθοδολογία, εάν μιλάμε για πελάτες, τότε η SDL δεν είναι εφαρμόσιμη γι 'αυτούς, καθώς η διαδικασία περιλαμβάνει την αναδιάρθρωση των αλγορίθμων δημιουργίας κώδικα και είναι πολύ αργά για να χρησιμοποιηθεί κατά την αποδοχή. Επιπλέον, πολλές εξελίξεις περιλαμβάνουν ένα μικρό μέρος του υπάρχοντος κώδικα, οπότε η SDL δεν είναι επίσης εφαρμόσιμη.

Για την επίλυση του προβλήματος του ελέγχου του πηγαίου κώδικα και την παροχή προστασίας έναντι της εκμετάλλευσης τρωτών σημείων σε ενσωματωμένους κώδικες και διαδικτυακές εφαρμογές, υπάρχουν αναλυτές πηγαίου κώδικα.

Ταξινόμηση αναλυτών πηγαίου κώδικα

Οι αναλυτές πηγαίου κώδικα είναι μια κατηγορία προϊόντων λογισμικού που δημιουργούνται για τον εντοπισμό και την πρόληψη της εκμετάλλευσης σφαλμάτων λογισμικού στους πηγαίους κώδικες. Όλα τα προϊόντα που στοχεύουν στην ανάλυση πηγαίου κώδικα μπορούν να χωριστούν σε τρεις τύπους:

  • Η πρώτη ομάδα περιλαμβάνει αναλυτές κώδικα εφαρμογών ιστού και εργαλεία για την πρόληψη της εκμετάλλευσης τρωτών σημείων του ιστότοπου.
  • Η δεύτερη ομάδα είναι ενσωματωμένοι αναλυτές κώδικα που σας επιτρέπουν να εντοπίζετε προβληματικές περιοχές στον πηγαίο κώδικα των μονάδων που έχουν σχεδιαστεί για να επεκτείνουν τη λειτουργικότητα των εταιρικών και παραγωγικών συστημάτων. Τέτοιες ενότητες περιλαμβάνουν προγράμματα για τη σειρά προϊόντων 1C, επεκτάσεις συστημάτων CRM, συστήματα διαχείρισης επιχειρήσεων και συστήματα SAP.
  • Η τελευταία ομάδα έχει σχεδιαστεί για να αναλύει τον πηγαίο κώδικα σε διάφορες γλώσσες προγραμματισμού που δεν σχετίζονται με επιχειρηματικές εφαρμογές και διαδικτυακές εφαρμογές. Τέτοιοι αναλυτές προορίζονται για πελάτες και προγραμματιστές λογισμικού. Αυτή η ομάδα αναλυτών χρησιμοποιείται επίσης για τη χρήση της μεθοδολογίας για ασφαλή ανάπτυξη λογισμικού. Οι αναλυτές στατικού κώδικα εντοπίζουν προβλήματα και πιθανές ευπάθειες στους πηγαίους κώδικες και παρέχουν συστάσεις για την εξάλειψή τους.

Αξίζει να σημειωθεί ότι οι περισσότεροι από τους αναλυτές είναι μικτού τύπου και εκτελούν λειτουργίες για την ανάλυση ενός ευρέος φάσματος προϊόντων λογισμικού - εφαρμογές web, ενσωματωμένος κώδικας και κανονικό λογισμικό. Ωστόσο, αυτή η ανασκόπηση εστιάζει στη χρήση αναλυτών από πελάτες ανάπτυξης, επομένως δίνεται μεγαλύτερη προσοχή στους αναλυτές για εφαρμογές web και στον ενσωματωμένο κώδικα.

Οι αναλυτές μπορεί να περιέχουν διάφορους μηχανισμούς ανάλυσης, αλλά ο πιο συνηθισμένος και καθολικός είναι η στατική ανάλυση του πηγαίου κώδικα - SAST (Static Application Security Testing), υπάρχουν επίσης μέθοδοι δυναμικής ανάλυσης - DAST (Dynamic Application Security Testing), που πραγματοποιούν ελέγχους κώδικα κατά την εκτέλεσή του , και διάφορες υβριδικές επιλογές που συνδυάζουν διαφορετικούς τύπους αναλύσεων. Η δυναμική ανάλυση είναι μια ανεξάρτητη μέθοδος επαλήθευσης που μπορεί να επεκτείνει τις δυνατότητες στατικής ανάλυσης ή να χρησιμοποιηθεί ανεξάρτητα σε περιπτώσεις όπου η πρόσβαση σε πηγαίους κώδικες δεν είναι διαθέσιμη. Αυτή η ανασκόπηση καλύπτει μόνο στατικούς αναλυτές.

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

Αρχές λειτουργίας αναλυτών πηγαίου κώδικα

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

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

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

Εικόνα 1. Αλγόριθμος του αναλυτή πηγαίου κώδικα

Κατά την αξιολόγηση των πηγαίων κωδίκων, οι αναλυτές χρησιμοποιούν διάφορες βάσεις δεδομένων που περιέχουν περιγραφές τρωτών σημείων και σφαλμάτων προγραμματισμού:

  • Δική βάση δεδομένων τρωτών σημείων και σφαλμάτων προγραμματισμού - κάθε προγραμματιστής αναλυτών πηγαίου κώδικα έχει τα δικά του τμήματα ανάλυσης και έρευνας που προετοιμάζουν εξειδικευμένες βάσεις δεδομένων για την ανάλυση των πηγαίων κωδίκων προγραμμάτων. Η ποιότητα της δικής σας βάσης δεδομένων είναι ένα από τα βασικά κριτήρια που επηρεάζουν τη συνολική ποιότητα του προϊόντος. Επιπλέον, η δική σας βάση δεδομένων πρέπει να είναι δυναμική και να ενημερώνεται συνεχώς - νέοι φορείς επιθέσεων και εκμετάλλευση τρωτών σημείων, καθώς και αλλαγές στις γλώσσες προγραμματισμού και στις μεθόδους ανάπτυξης απαιτούν από τους προγραμματιστές αναλυτών να ενημερώνουν συνεχώς τη βάση δεδομένων για να διατηρήσουν τη σάρωση υψηλής ποιότητας. Τα προϊόντα με στατική, μη ενημερωμένη βάση δεδομένων τις περισσότερες φορές χάνουν σε συγκριτικές δοκιμές.
  • Κρατικές βάσεις δεδομένων σφαλμάτων προγραμματισμού - υπάρχει μια σειρά από κρατικές βάσεις δεδομένων τρωτών σημείων, η συλλογή και η υποστήριξη των οποίων πραγματοποιείται από ρυθμιστικές αρχές σε διάφορες χώρες. Για παράδειγμα, στις ΗΠΑ χρησιμοποιείται η βάση δεδομένων CWE - Common Weakness Enumeration, η οποία διατηρείται από τον οργανισμό MITER, ο οποίος υποστηρίζεται, μεταξύ άλλων, από το Υπουργείο Άμυνας των ΗΠΑ. Η Ρωσία δεν διαθέτει ακόμη παρόμοια βάση δεδομένων, αλλά στο μέλλον η FSTEC της Ρωσίας σχεδιάζει να συμπληρώσει τις βάσεις δεδομένων ευπάθειας και απειλών με μια βάση δεδομένων για σφάλματα προγραμματισμού. Οι αναλυτές ευπάθειας υλοποιούν υποστήριξη για τη βάση δεδομένων CWE ενσωματώνοντάς την στη δική τους βάση δεδομένων ευπάθειας ή χρησιμοποιώντας την ως ξεχωριστό μηχανισμό επαλήθευσης.
  • Απαιτήσεις προτύπων και συστάσεις για ασφαλή προγραμματισμό - υπάρχει μια σειρά κυβερνητικών και βιομηχανικών προτύπων που περιγράφουν τις απαιτήσεις για ασφαλή ανάπτυξη εφαρμογών, καθώς και μια σειρά από συστάσεις και «βέλτιστες πρακτικές» από παγκόσμιους ειδικούς στον τομέα της ανάπτυξης λογισμικού και της ασφάλειας. Αυτά τα έγγραφα δεν περιγράφουν άμεσα σφάλματα προγραμματισμού, σε αντίθεση με το CWE, αλλά περιέχουν μια λίστα μεθόδων που μπορούν να μετατραπούν για χρήση σε έναν αναλυτή στατικού πηγαίου κώδικα.

Η ποιότητα της ανάλυσης, ο αριθμός των ψευδώς θετικών και των χαμένων σφαλμάτων εξαρτάται άμεσα από το ποιες βάσεις δεδομένων χρησιμοποιούνται στον αναλυτή. Επιπλέον, η ανάλυση της συμμόρφωσης με τις κανονιστικές απαιτήσεις καθιστά δυνατή τη διευκόλυνση και την απλούστευση της διαδικασίας εξωτερικού ελέγχου υποδομών και συστημάτων πληροφοριών, εάν οι απαιτήσεις είναι υποχρεωτικές. Για παράδειγμα, οι απαιτήσεις PCI DSS είναι υποχρεωτικές για εφαρμογές Ιστού και ενσωματωμένο κώδικα που λειτουργεί με πληροφορίες πληρωμής για τραπεζικές κάρτες, ενώ πραγματοποιείται εξωτερικός έλεγχος συμμόρφωσης PCI DSS, συμπεριλαμβανομένης ανάλυσης των προϊόντων λογισμικού που χρησιμοποιούνται.

Παγκόσμια αγορά

Υπάρχουν πολλοί διαφορετικοί αναλυτές στην παγκόσμια αγορά - τόσο από γνωστούς προμηθευτές ασφαλείας όσο και από εξειδικευμένους παίκτες που ασχολούνται μόνο με αυτήν την κατηγορία προϊόντων. Το Αναλυτικό Κέντρο Gartner ταξινομεί και αξιολογεί τους αναλυτές πηγαίου κώδικα για περισσότερα από πέντε χρόνια, ενώ μέχρι το 2011, η Gartner προσδιόριζε ξεχωριστά τους στατικούς αναλυτές που συζητήθηκαν σε αυτό το άρθρο, συνδυάζοντάς τους αργότερα σε μια υψηλότερη κατηγορία - Δοκιμές ασφαλείας εφαρμογών ).

Στο Gartner Magic Quadrant 2015, οι ηγέτες στην αγορά δοκιμών ασφαλείας είναι η HP, η Veracode και η IBM. Ταυτόχρονα, η Veracode είναι η μόνη κορυφαία εταιρεία που δεν διαθέτει αναλυτή ως προϊόν λογισμικού και η λειτουργικότητα παρέχεται μόνο ως υπηρεσία στο σύννεφο Veracode. Οι υπόλοιπες κορυφαίες εταιρείες προσφέρουν είτε αποκλειστικά προϊόντα που πραγματοποιούν ελέγχους σε υπολογιστές χρηστών είτε τη δυνατότητα επιλογής μεταξύ ενός προϊόντος και μιας υπηρεσίας cloud. Η HP και η IBM παρέμειναν οι ηγέτες της παγκόσμιας αγοράς τα τελευταία πέντε χρόνια, μια επισκόπηση των προϊόντων τους δίνεται παρακάτω. Το πιο κοντινό προϊόν στην ηγετική θέση είναι το προϊόν της Checkmarx, η οποία ειδικεύεται μόνο σε αυτήν την κατηγορία προϊόντων, επομένως περιλαμβάνεται και στην κριτική.

Εικόνα 2. Μαγικό τεταρτημόριο για αναλυτέςΗ Gartner για τους παίκτες της αγοράς ανάλυσης ασφάλειας εφαρμογών τον Αύγουστο του 2015

Σύμφωνα με έκθεση των αναλυτών ReportsnReports, στις Ηνωμένες Πολιτείες, το μέγεθος της αγοράς αναλυτών πηγαίου κώδικα το 2014 ανήλθε σε 2,5 δισεκατομμύρια δολάρια έως το 2019, προβλέπεται διπλάσια αύξηση στα 5 δισεκατομμύρια δολάρια με ετήσια αύξηση 14,9%. Περισσότερο από το 50% των οργανισμών που ερωτήθηκαν κατά τη διάρκεια της έκθεσης σχεδιάζουν να διαθέσουν και να αυξήσουν τους προϋπολογισμούς για ανάλυση πηγαίου κώδικα για προσαρμοσμένη ανάπτυξη και μόνο το 3% μίλησε αρνητικά για τη χρήση αυτών των προϊόντων.

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

ρωσική αγορά

Η ρωσική αγορά για αναλυτές πηγαίου κώδικα είναι αρκετά νέα - τα πρώτα δημόσια προϊόντα άρχισαν να εμφανίζονται στην αγορά λιγότερο από πέντε χρόνια πριν. Ταυτόχρονα, η αγορά διαμορφώθηκε από δύο κατευθύνσεις - από τη μία πλευρά, εταιρείες που αναπτύσσουν προϊόντα για δοκιμές για τον εντοπισμό αδήλωτων δυνατοτήτων στα εργαστήρια της FSTEC, της FSB και του Υπουργείου Άμυνας της Ρωσικής Ομοσπονδίας. από την άλλη πλευρά είναι εταιρείες που ασχολούνται με διάφορους τομείς ασφάλειας και που αποφάσισαν να προσθέσουν μια νέα κατηγορία προϊόντων στο χαρτοφυλάκιό τους.

Οι πιο αξιόλογοι παίκτες στη νέα αγορά είναι οι Positive Technologies, InfoWatch και Solar Security. Οι Positive Technologies ειδικεύονται εδώ και πολύ καιρό στην εύρεση και ανάλυση τρωτών σημείων. Το χαρτοφυλάκιό τους περιλαμβάνει το προϊόν MaxPatrol, έναν από τους ηγέτες στην εγχώρια αγορά στην εξωτερική παρακολούθηση ασφάλειας, επομένως δεν αποτελεί έκπληξη το γεγονός ότι η εταιρεία αποφάσισε να ασχοληθεί με την εσωτερική ανάλυση και να αναπτύξει τον δικό της αναλυτή πηγαίου κώδικα. Το InfoWatch αναπτύχθηκε ως προγραμματιστής συστημάτων DLP, και τελικά έγινε ένας όμιλος εταιρειών που αναζητούν νέες θέσεις στην αγορά. Το 2012, το Appercut έγινε μέρος του InfoWatch, προσθέτοντας ένα εργαλείο ανάλυσης πηγαίου κώδικα στο χαρτοφυλάκιο του InfoWatch. Οι επενδύσεις και η εμπειρία του InfoWatch μας επέτρεψαν να αναπτύξουμε γρήγορα το προϊόν σε υψηλό επίπεδο. Η Solar Security παρουσίασε επίσημα το προϊόν της Solar inCode μόλις στα τέλη Οκτωβρίου 2015, αλλά ήδη από τη στιγμή της κυκλοφορίας είχαν τέσσερις επίσημες εγκαταστάσεις στη Ρωσία.

Οι εταιρείες που αναπτύσσουν αναλυτές πηγαίου κώδικα για δοκιμές πιστοποίησης για δεκαετίες γενικά δεν βιάζονται να προσφέρουν αναλυτές για επιχειρήσεις, επομένως η αναθεώρησή μας περιλαμβάνει μόνο ένα τέτοιο προϊόν - από την εταιρεία Echelon. Ίσως στο μέλλον να μπορέσει να εκτοπίσει άλλους παίκτες της αγοράς, κυρίως λόγω της εκτεταμένης θεωρητικής και πρακτικής εμπειρίας των προγραμματιστών αυτού του προϊόντος στον τομέα της αναζήτησης τρωτών σημείων και αδήλωτων δυνατοτήτων.

Ένας άλλος εξειδικευμένος παίκτης στη ρωσική αγορά είναι η Digital Security, μια εταιρεία συμβούλων στον τομέα της ασφάλειας πληροφοριών. Έχοντας εκτεταμένη εμπειρία στον έλεγχο και την εφαρμογή συστημάτων ERP, βρήκε μια άχρηστη θέση και άρχισε να αναπτύσσει ένα προϊόν για την ανάλυση της ασφάλειας των συστημάτων ERP, το οποίο, μεταξύ άλλων λειτουργιών, περιείχε μηχανισμούς για την ανάλυση πηγαίου κώδικα για ενσωματωμένα προγράμματα.

Σύντομη επισκόπηση των αναλυτών

Το πρώτο εργαλείο ανάλυσης πηγαίου κώδικα στην κριτική μας είναι ένα προϊόν της Fortify, που ανήκει στη Hewlett-Packard από το 2010. Η σειρά HP Fortify περιέχει διάφορα προϊόντα για την ανάλυση κωδικών προγραμμάτων: υπάρχει μια υπηρεσία SaaS Fortify On-Demand, η οποία περιλαμβάνει τη μεταφόρτωση πηγαίου κώδικα στο HP cloud, και μια πλήρης εφαρμογή HP Fortify Static Code Analyzer, εγκατεστημένη στην υποδομή του πελάτη.

Το HP Fortify Static Code Analyzer υποστηρίζει ένα ευρύ φάσμα γλωσσών προγραμματισμού και πλατφορμών, συμπεριλαμβανομένων εφαρμογών web γραμμένες σε PHP, Python, Java/JSP, ASP.Net και JavaScript, και ενσωματωμένο κώδικα σε ABAP (SAP), Action Script και VBScript.

Εικόνα 3. Διασύνδεση HP Fortify Static Code Analyzer

Μεταξύ των χαρακτηριστικών του προϊόντος, αξίζει να τονιστεί η παρουσία στο HP Fortify Static Code Analyzer υποστήριξης για ενοποίηση με διάφορα συστήματα διαχείρισης ανάπτυξης και παρακολούθησης σφαλμάτων. Εάν ο προγραμματιστής κώδικα παρέχει στον πελάτη πρόσβαση σε απευθείας αναφορά σφαλμάτων στο Bugzilla, το HP Quality Center ή το Microsoft TFS, ο αναλυτής μπορεί να δημιουργήσει αυτόματα αναφορές σφαλμάτων σε αυτά τα συστήματα χωρίς να χρειάζεται χειροκίνητη παρέμβαση.

Η λειτουργία του προϊόντος βασίζεται στις βάσεις γνώσεων της ίδιας της HP Fortify, που διαμορφώνονται με την προσαρμογή της βάσης δεδομένων CWE. Το προϊόν εφαρμόζει ανάλυση για να καλύψει τις απαιτήσεις των συστάσεων DISA STIG, FISMA, PCI DSS και OWASP.

Μεταξύ των μειονεκτημάτων του HP Fortify Static Code Analyzer, πρέπει να σημειωθεί η έλλειψη εντοπισμού του προϊόντος για τη ρωσική αγορά - η διεπαφή και οι αναφορές είναι στα αγγλικά, η έλλειψη υλικών και τεκμηρίωσης για το προϊόν στα ρωσικά, η ανάλυση του ενσωματωμένου ο κωδικός για 1C και άλλα εγχώρια προϊόντα εταιρικού επιπέδου δεν υποστηρίζεται.

Πλεονεκτήματα του HP Fortify Static Code Analyzer:

  • διάσημη μάρκα, λύση υψηλής ποιότητας.
  • μια μεγάλη λίστα αναλυμένων γλωσσών προγραμματισμού και υποστηριζόμενων περιβαλλόντων ανάπτυξης·
  • διαθεσιμότητα ενοποίησης με συστήματα διαχείρισης ανάπτυξης και άλλα προϊόντα HP Fortify.
  • υποστήριξη για διεθνή πρότυπα, συστάσεις και «βέλτιστες πρακτικές».

Το Checkmarx CxSAST είναι ένα εργαλείο της αμερικανο-ισραηλινής εταιρείας Checkmarx, που ειδικεύεται στην ανάπτυξη αναλυτών πηγαίου κώδικα. Αυτό το προϊόν προορίζεται κυρίως για την ανάλυση συμβατικού λογισμικού, αλλά λόγω της υποστήριξής του για τις γλώσσες προγραμματισμού PHP, Python, JavaScript, Perl και Ruby, είναι εξαιρετικό για την ανάλυση εφαρμογών web. Το Checkmarx CxSAST είναι ένας γενικός αναλυτής που δεν έχει ξεχωριστές ιδιαιτερότητες και επομένως είναι κατάλληλος για χρήση σε οποιοδήποτε στάδιο του κύκλου ζωής του προϊόντος λογισμικού - από την ανάπτυξη έως την εφαρμογή.

Εικόνα 4. Διασύνδεση Checkmarx CxSAST

Το Checkmarx CxSAST υλοποιεί υποστήριξη για τη βάση δεδομένων σφαλμάτων κώδικα CWE, υποστηρίζει ελέγχους συμμόρφωσης με τις συστάσεις OWASP και SANS 25, τα πρότυπα PCI DSS, HIPAA, MISRA, FISMA και BSIMM. Όλα τα προβλήματα που εντοπίζονται από το Checkmarx CxSAST χωρίζονται ανά επίπεδο κινδύνου - από μικρό έως κρίσιμο. Μεταξύ των χαρακτηριστικών του προϊόντος είναι η παρουσία συναρτήσεων για την οπτικοποίηση κώδικα με την κατασκευή μπλοκ διαγραμμάτων διαδρομών εκτέλεσης και συστάσεις για τη διόρθωση προβλημάτων σύνδεσης σε ένα γραφικό διάγραμμα.

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

Πλεονεκτήματα του Checkmarx CxSAST:

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

Ένα άλλο προϊόν από έναν γνωστό προμηθευτή είναι ο αναλυτής πηγαίου κώδικα IBM Security AppScan. Η σειρά AppScan περιλαμβάνει πολλά προϊόντα που σχετίζονται με την ασφαλή ανάπτυξη λογισμικού, αλλά άλλα προϊόντα δεν είναι κατάλληλα για χρήση κώδικα λογισμικού με πελάτες, καθώς έχουν πολλές περιττές λειτουργίες. Το IBM Security AppScan Source, όπως το Checkmarx CxSAST, προορίζεται κυρίως για οργανισμούς ανάπτυξης, ενώ υποστηρίζει ακόμη λιγότερες γλώσσες ανάπτυξης ιστού - μόνο PHP, Perl και JavaScript. Οι γλώσσες προγραμματισμού για κώδικα που είναι ενσωματωμένος σε επιχειρηματικές εφαρμογές δεν υποστηρίζονται.

Εικόνα 5. Διεπαφή IBM Security AppScan Source

Το IBM Security AppScan Source ενσωματώνεται στενά με την πλατφόρμα ανάπτυξης IBM Rational, επομένως το προϊόν χρησιμοποιείται συχνότερα κατά τη φάση ανάπτυξης και δοκιμής προϊόντων λογισμικού και δεν είναι κατάλληλο για την εκτέλεση αποδοχής ή επαλήθευσης μιας προσαρμοσμένης εφαρμογής.

Ένα ιδιαίτερο χαρακτηριστικό του IBM Security AppScan Source είναι ότι υποστηρίζει ανάλυση προγράμματος για το IBM Worklight, μια πλατφόρμα για επιχειρηματικές εφαρμογές για κινητές συσκευές. Η λίστα των υποστηριζόμενων προτύπων και απαιτήσεων είναι πενιχρή - PCI DSS και συστάσεις των DISA και OWASP, η βάση δεδομένων ευπάθειας συγκρίνει τα προβλήματα που εντοπίστηκαν με το CWE.

Δεν έχουν εντοπιστεί ιδιαίτερα πλεονεκτήματα αυτής της λύσης για πελάτες ανάπτυξης.

Το AppChecker από την εγχώρια εταιρεία NPO Eshelon CJSC είναι μια λύση που εμφανίστηκε στην αγορά αρκετά πρόσφατα. Η πρώτη έκδοση του προϊόντος κυκλοφόρησε μόλις πριν από ένα χρόνο, αλλά θα πρέπει να ληφθεί υπόψη η εμπειρία της εταιρείας Echelon στην ανάλυση του κώδικα προγράμματος. Το "NPO Eshelon" είναι ένα εργαστήριο δοκιμών της FSTEC, της FSB και του Υπουργείου Άμυνας της Ρωσικής Ομοσπονδίας και έχει μεγάλη εμπειρία στον τομέα της στατικής και δυναμικής ανάλυσης των πηγαίων κωδίκων προγραμμάτων.

Εικόνα 6. Διασύνδεση «Echelon» του AppChecker

Το AppChecker έχει σχεδιαστεί για να αναλύει μια ποικιλία λογισμικού και διαδικτυακών εφαρμογών γραμμένων σε PHP, Java και C/C++. Υποστηρίζει πλήρως την ταξινόμηση ευπάθειας CWE και λαμβάνει υπόψη τις συστάσεις OWASP, CERT και NISP. Το προϊόν μπορεί να χρησιμοποιηθεί για τη διενέργεια ελέγχων συμμόρφωσης με τις απαιτήσεις PCI DSS και το πρότυπο IBBS-2.6-2014 της Τράπεζας της Ρωσίας.

Οι ελλείψεις του προϊόντος οφείλονται στο πρώιμο στάδιο ανάπτυξης της λύσης - δεν υπάρχει αρκετή υποστήριξη για δημοφιλείς γλώσσες ανάπτυξης ιστού και η δυνατότητα ανάλυσης ενσωματωμένου κώδικα.

Πλεονεκτήματα:

  • την ικανότητα διεξαγωγής ελέγχου σύμφωνα με τις εγχώριες απαιτήσεις και το PCI DSS·
  • λαμβάνοντας υπόψη την επιρροή των χαρακτηριστικών της γλώσσας προγραμματισμού λόγω της ευέλικτης διαμόρφωσης των αναλυόμενων έργων.
  • χαμηλό κόστος.

Το PT Application Inspector είναι προϊόν της ρωσικής εταιρείας ανάπτυξης Positive Technologies, που διακρίνεται για την προσέγγισή της στην επίλυση του προβλήματος της ανάλυσης πηγαίου κώδικα. Το PT Application Inspector στοχεύει κυρίως στην εύρεση ευπαθειών στον κώδικα, αντί στον εντοπισμό κοινών σφαλμάτων λογισμικού.

Σε αντίθεση με όλα τα άλλα προϊόντα σε αυτήν την αναθεώρηση, το PT Application Inspector δεν έχει μόνο τη δυνατότητα δημιουργίας αναφοράς και επίδειξης τρωτών σημείων, αλλά και τη δυνατότητα αυτόματης δημιουργίας εκμεταλλεύσεων για ορισμένες κατηγορίες και τύπους τρωτών σημείων - μικρές εκτελέσιμες μονάδες που εκμεταλλεύονται τις ευπάθειες που βρέθηκαν. Χρησιμοποιώντας τα δημιουργημένα exploit, μπορείτε πρακτικά να ελέγξετε τον κίνδυνο των ευπαθειών που βρέθηκαν, καθώς και να ελέγξετε τον προγραμματιστή ελέγχοντας τη λειτουργία του exploit μετά το δηλωμένο κλείσιμο της ευπάθειας.

Εικόνα 7. Διεπαφή PT Application Inspector

Το PT Application Inspector υποστηρίζει τόσο γλώσσες ανάπτυξης εφαρμογών Ιστού (PHP, JavaScript) όσο και ενσωματωμένο κώδικα για επιχειρηματικές εφαρμογές - SAP ABAP, SAP Java, Oracle EBS Java, Oracle EBS PL/SQL. Το PT Application Inspector υποστηρίζει επίσης την οπτικοποίηση των διαδρομών εκτέλεσης του προγράμματος.

Το PT Application Inspector είναι μια ενιαία λύση τόσο για προγραμματιστές όσο και για πελάτες που εκτελούν προσαρμοσμένες εφαρμογές web και πρόσθετα επιχειρηματικών εφαρμογών. Η βάση δεδομένων τρωτών σημείων και σφαλμάτων στον κώδικα του προγράμματος περιέχει τις ίδιες τις εξελίξεις της Positive Technologies, τη βάση δεδομένων CWE και το WASC (βάση δεδομένων ευπάθειας κοινοπραξίας ιστού, ανάλογο του CWE για εφαρμογές Ιστού).

Η χρήση του PT Application Inspector σάς επιτρέπει να πληροίτε τις απαιτήσεις των προτύπων PCI DSS, του STO BR IBBS, καθώς και της 17ης εντολής FSTEC και των απαιτήσεων για την απουσία αδήλωτων δυνατοτήτων (σχετικά με την πιστοποίηση κωδικών).

Πλεονεκτήματα:

  • υποστήριξη για ανάλυση εφαρμογών web και ένα ευρύ φάσμα συστημάτων ανάπτυξης για επιχειρηματικές εφαρμογές.
  • εγχώριο, τοπικό προϊόν?
  • ένα ευρύ φάσμα υποστηριζόμενων κρατικών προτύπων·
  • χρησιμοποιώντας τη βάση δεδομένων ευπάθειας της εφαρμογής ιστού WASC και τον ταξινομητή CWE.
  • τη δυνατότητα οπτικοποίησης του κώδικα προγράμματος και αναζήτησης σελιδοδεικτών προγράμματος.

Το InfoWatch Appercut αναπτύχθηκε από τη ρωσική εταιρεία InfoWatch. Η κύρια διαφορά μεταξύ αυτού του προϊόντος και όλων των άλλων αυτής της συλλογής είναι η εξειδίκευσή του στην παροχή υπηρεσιών για πελάτες επιχειρηματικών εφαρμογών.

Το InfoWatch Appercut υποστηρίζει σχεδόν όλες τις γλώσσες προγραμματισμού στις οποίες δημιουργούνται εφαρμογές Ιστού (JavaScript, Python, PHP, Ruby) και ενσωματωμένες ενότητες για επιχειρηματικές προτάσεις - 1C, ABAP, X++ (ERP Microsoft Axapta), Java, Lotus Script. Το InfoWatch Appercut έχει τη δυνατότητα να προσαρμόζεται στις ιδιαιτερότητες μιας συγκεκριμένης εφαρμογής και στη μοναδικότητα των επιχειρηματικών διαδικασιών κάθε εταιρείας.

Εικόνα 8. Διεπαφή InfoWatch Appercut

Το InfoWatch Appercut υποστηρίζει πολλές απαιτήσεις για αποτελεσματικό και ασφαλή προγραμματισμό, συμπεριλαμβανομένων των γενικών απαιτήσεων του PCI DSS και του HIPPA, των συστάσεων και των «βέλτιστων πρακτικών» των CERT και OWAST, καθώς και συστάσεις από κατασκευαστές πλατφορμών επιχειρηματικών διαδικασιών - 1C, SAP, Oracle, Microsoft.

Πλεονεκτήματα:

  • εγχώριο, τοπικό προϊόν, πιστοποιημένο από την FSTEC της Ρωσίας.
  • το μόνο προϊόν που υποστηρίζει όλες τις δημοφιλείς επιχειρηματικές πλατφόρμες στη Ρωσία, συμπεριλαμβανομένων των 1C, SAP, Oracle EBS, IBM Collaboration Solutions (Lotus) και Microsoft Axapta.
  • Ένας γρήγορος σαρωτής που εκτελεί ελέγχους σε δευτερόλεπτα και μπορεί να ελέγξει μόνο αλλαγμένο κώδικα και τμήματα κώδικα.

Το Digital Security ERPScan είναι ένα εξειδικευμένο προϊόν για την ανάλυση και την παρακολούθηση της ασφάλειας των επιχειρηματικών συστημάτων που βασίζονται σε προϊόντα SAP, η πρώτη έκδοση κυκλοφόρησε το 2010. Εκτός από τη μονάδα για την ανάλυση διαμορφώσεων, τρωτών σημείων και ελέγχου πρόσβασης (SOD), το ERPScan περιλαμβάνει μια ενότητα για την αξιολόγηση της ασφάλειας του πηγαίου κώδικα, η οποία υλοποιεί τις λειτουργίες αναζήτησης σελιδοδεικτών, κρίσιμων κλήσεων, τρωτών σημείων και σφαλμάτων προγραμματισμού στον κώδικα στο ABAP και γλώσσες προγραμματισμού Java. Ταυτόχρονα, το προϊόν λαμβάνει υπόψη τις ιδιαιτερότητες της πλατφόρμας SAP, συσχετίζει τα εντοπισμένα τρωτά σημεία στον κώδικα με τις ρυθμίσεις παραμέτρων και τα δικαιώματα πρόσβασης και εκτελεί καλύτερα την ανάλυση από μη εξειδικευμένα προϊόντα που λειτουργούν με τις ίδιες γλώσσες προγραμματισμού.

Εικόνα 9. Διεπαφή ERPScan Digital Security

Οι πρόσθετες δυνατότητες του ERPScan περιλαμβάνουν τη δυνατότητα αυτόματης δημιουργίας ενημερώσεων κώδικα για εντοπισμένα τρωτά σημεία, καθώς και δημιουργία υπογραφών για πιθανές επιθέσεις και αποστολή αυτών των υπογραφών σε συστήματα ανίχνευσης και πρόληψης εισβολών (σε συνεργασία με την CISCO). Επιπλέον, το σύστημα περιέχει μηχανισμούς για την αξιολόγηση της απόδοσης του ενσωματωμένου κώδικα, ο οποίος είναι κρίσιμος για τις επιχειρηματικές εφαρμογές, καθώς η αργή λειτουργία πρόσθετων μονάδων μπορεί να επηρεάσει σοβαρά τις επιχειρηματικές διαδικασίες στον οργανισμό. Το σύστημα υποστηρίζει επίσης ανάλυση σύμφωνα με συγκεκριμένες συστάσεις για την ανάλυση κώδικα επιχειρηματικής εφαρμογής, όπως EAS-SEC και BIZEC, καθώς και γενικές συστάσεις PCI DSS και OWASP.

Πλεονεκτήματα:

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

Το Solar inCode είναι ένα εργαλείο ανάλυσης στατικού κώδικα που έχει σχεδιαστεί για τον εντοπισμό τρωτών σημείων ασφάλειας πληροφοριών και μη δηλωμένων δυνατοτήτων στους πηγαίους κώδικες λογισμικού. Το κύριο χαρακτηριστικό του προϊόντος είναι η δυνατότητα επαναφοράς του πηγαίου κώδικα εφαρμογής από ένα αρχείο εργασίας χρησιμοποιώντας τεχνολογία αποσυμπίλησης (αντίστροφη μηχανική).

Το Solar inCode σάς επιτρέπει να αναλύετε τον πηγαίο κώδικα γραμμένο στις γλώσσες προγραμματισμού Java, Scala, Java για Android, PHP και Objective C. Σε αντίθεση με τους περισσότερους ανταγωνιστές, η λίστα των υποστηριζόμενων γλωσσών προγραμματισμού περιλαμβάνει εργαλεία ανάπτυξης για τις κινητές πλατφόρμες Android και iOS .

Εικόνα 10. Διεπαφή

Σε περιπτώσεις που ο πηγαίος κώδικας δεν είναι διαθέσιμος, το Solar inCode επιτρέπει την ανάλυση έτοιμων εφαρμογών, αυτή η λειτουργία υποστηρίζει εφαρμογές web και εφαρμογές για κινητά. Ειδικότερα, για εφαρμογές για κινητές συσκευές, χρειάζεται απλώς να αντιγράψετε τον σύνδεσμο της εφαρμογής από το Google Play ή το Apple Store στο σαρωτή, η εφαρμογή θα κατεβάσει αυτόματα, θα απομεταγλωττιστεί και θα ελεγχθεί.

Η χρήση του Solar inCode σάς επιτρέπει να συμμορφώνεστε με τις απαιτήσεις των προτύπων PCI DSS, STO BR IBBS, καθώς και με την 17η παραγγελία FSTEC και τις απαιτήσεις για την απουσία αδήλωτων δυνατοτήτων (σχετικά με την πιστοποίηση κωδικών).

Πλεονεκτήματα:

  • Υποστήριξη για ανάλυση εφαρμογών για κινητές συσκευές με Android και iOS.
  • υποστηρίζει την ανάλυση διαδικτυακών εφαρμογών και εφαρμογών για φορητές συσκευές χωρίς τη χρήση του πηγαίο κώδικα των προγραμμάτων.
  • παρέχει αποτελέσματα ανάλυσης με τη μορφή συγκεκριμένων συστάσεων για την εξάλειψη των τρωτών σημείων·
  • δημιουργεί λεπτομερείς συστάσεις για τη ρύθμιση εργαλείων ασφαλείας: SIEM, WAF, FW, NGFW.
  • ενσωματώνεται εύκολα στη διαδικασία ασφαλούς ανάπτυξης λογισμικού υποστηρίζοντας την εργασία με αποθετήρια πηγαίου κώδικα.

συμπεράσματα

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

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

Σε αυτήν την ανασκόπηση, ο ξεκάθαρος ηγέτης μεταξύ των ξένων προϊόντων όσον αφορά την υποστήριξη γλώσσας προγραμματισμού και την ποιότητα σάρωσης είναι η λύση HP Fortify Static Code Analyzer. Το Checkmarx CxSAST είναι επίσης ένα καλό προϊόν, αλλά μπορεί να αναλύσει μόνο κανονικές εφαρμογές και διαδικτυακές εφαρμογές. Η λύση IBM Security AppScan Source φαίνεται ακατάλληλη σε σύγκριση με τους ανταγωνιστές της και δεν διαφέρει ούτε στη λειτουργικότητα ούτε στην ποιότητα των ελέγχων. Ωστόσο, αυτό το προϊόν δεν προορίζεται για επαγγελματίες χρήστες και προορίζεται για χρήση σε εταιρείες ανάπτυξης, όπου μπορεί να είναι πιο αποτελεσματικό από τους ανταγωνιστές του.

Μεταξύ των ρωσικών προϊόντων, είναι δύσκολο να ξεχωρίσουμε έναν ξεκάθαρο ηγέτη, η αγορά αντιπροσωπεύεται από τρία κύρια προϊόντα - InfoWatch Appercut, PT Application Inspector και Solar inCode. Ταυτόχρονα, αυτά τα προϊόντα διαφέρουν σημαντικά τεχνολογικά και προορίζονται για διαφορετικά κοινά-στόχους - το πρώτο υποστηρίζει περισσότερες πλατφόρμες επιχειρηματικών εφαρμογών και είναι ταχύτερο λόγω της αναζήτησης τρωτών σημείων αποκλειστικά με μεθόδους στατικής ανάλυσης. Το δεύτερο συνδυάζει στατική και δυναμική ανάλυση, καθώς και συνδυασμό αυτών, που μαζί με τη βελτίωση της ποιότητας της σάρωσης, οδηγεί σε αύξηση του χρόνου ελέγχου του πηγαίου κώδικα. Το τρίτο στοχεύει στην επίλυση των προβλημάτων των επιχειρηματικών χρηστών και των ειδικών σε θέματα ασφάλειας πληροφοριών και σας επιτρέπει επίσης να δοκιμάζετε εφαρμογές χωρίς πρόσβαση στον πηγαίο κώδικα.

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

Το Digital Security ERPScan είναι ένα εξαιρετικό προϊόν για την επίλυση της εξαιρετικά εξειδικευμένης εργασίας της ανάλυσης επιχειρηματικών εφαρμογών για την πλατφόρμα SAP. Επικεντρώνοντας μόνο σε αυτήν την αγορά, η Digital Security έχει αναπτύξει ένα προϊόν που είναι μοναδικό στη λειτουργικότητά του, το οποίο όχι μόνο αναλύει τον πηγαίο κώδικα, αλλά λαμβάνει επίσης υπόψη όλες τις ιδιαιτερότητες της πλατφόρμας SAP, συγκεκριμένες ρυθμίσεις παραμέτρων και δικαιώματα πρόσβασης επιχειρηματικών εφαρμογών. και έχει επίσης τη δυνατότητα αυτόματης δημιουργίας ενημερώσεων κώδικα για εντοπισμένα τρωτά σημεία.

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

Αλεξάντερ Μινοζένκο
Ανώτερος Ερευνητής, Τμήμα Ανάλυσης Κώδικα
στην ERPScan (θυγατρική της Digital Security)

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

Ιστορικά, τα πρώτα εργαλεία στατικής ανάλυσης (που συχνά χρησιμοποιούν τη λέξη lint στο όνομά τους) χρησιμοποιήθηκαν για την εύρεση των απλούστερων ελαττωμάτων του προγράμματος. Χρησιμοποίησαν μια απλή αναζήτηση υπογραφών, δηλαδή βρήκαν αντιστοιχίες με υπάρχουσες υπογραφές στη βάση δεδομένων επιταγών. Εξακολουθούν να χρησιμοποιούνται σήμερα και σας επιτρέπουν να εντοπίσετε «ύποπτες» δομές στον κώδικα που μπορεί να προκαλέσουν τη διακοπή λειτουργίας του προγράμματος κατά την εκτέλεση.

Αυτή η μέθοδος έχει πολλά μειονεκτήματα. Το κύριο πράγμα είναι ότι πολλές «ύποπτες» δομές στον κώδικα δεν είναι πάντα ελαττώματα. Στις περισσότερες περιπτώσεις, ένας τέτοιος κώδικας μπορεί να είναι συντακτικά σωστός και να λειτουργεί σωστά. Η αναλογία «θορύβου» προς τα πραγματικά ελαττώματα μπορεί να φτάσει το 100:1 σε μεγάλα έργα. Έτσι, ο προγραμματιστής πρέπει να αφιερώσει πολύ χρόνο για να το ξεφύγει από πραγματικά ελαττώματα, γεγονός που ακυρώνει τα πλεονεκτήματα της αυτοματοποιημένης αναζήτησης.

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

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

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

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

Η διαδικασία αναζήτησης ευπάθειας σε δράση

Για να το δείξουμε, παρουσιάζουμε τη διαδικασία αναζήτησης τρωτών σημείων εισαγωγής κώδικα και εισαγωγής SQL (Εικ. 1).

Για να τα εντοπίσουμε, βρίσκουμε μέρη στο πρόγραμμα από όπου προέρχονται μη αξιόπιστα δεδομένα (Εικ. 2), για παράδειγμα, ένα αίτημα HTTP.


Στην καταχώριση (Εικ. 1) 1 στη γραμμή 5, τα δεδομένα λαμβάνονται από ένα αίτημα HTTP που προέρχεται από χρήστες όταν ζητούν μια ιστοσελίδα. Για παράδειγμα, όταν ζητάτε τη σελίδα "http://example.com/main?name =‘ ή 1=‘1". Η συμβολοσειρά ή 1=‘1 μπαίνει στη μεταβλητή δεδομένων από το αντικείμενο αιτήματος, το οποίο περιέχει το αίτημα HTTP.

Στη συνέχεια στη γραμμή 10 υπάρχει μια κλήση στη συνάρτηση Process με το όρισμα δεδομένων, το οποίο επεξεργάζεται τη συμβολοσειρά που ελήφθη. Στη γραμμή 12 υπάρχει μια συνένωση της λαμβανόμενης συμβολοσειράς δεδομένων και ενός ερωτήματος βάσης δεδομένων, ήδη στη γραμμή 15 η συνάρτηση ερωτήματος βάσης δεδομένων καλείται με το ερώτημα που προκύπτει. Ως αποτέλεσμα των δεδομένων χειρισμού, λαμβάνεται ένα ερώτημα στη βάση δεδομένων όπως: επιλέξτε * από χρήστες όπου όνομα=‘’ ή ‘1’=‘1’.

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

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

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

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

Αυτοματοποιημένη αναζήτηση για τρωτά σημεία

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


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

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

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

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

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

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

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

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

Στήλη εμπειρογνωμόνων

Cyber ​​Wars:όπλα στον κυβερνοχώρο

Πέτρος
Λιαπίν

Επικεφαλής της Υπηρεσίας Ασφάλειας Πληροφοριών, LLC "NII TNN" ("Transneft")

Εξετάζοντας την τρέχουσα κούρσα εξοπλισμών στον κυβερνοχώρο, είναι πρώτα απ' όλα απαραίτητο να κατανοήσουμε ορισμένες θεμελιώδεις διατάξεις σε αυτόν τον τομέα.

Πρώτον, ο πόλεμος είναι ένα διεθνές φαινόμενο στο οποίο συμμετέχουν δύο ή περισσότερα κράτη. Ο πόλεμος υπακούει στους δικούς του νόμους. Ένα από αυτά λέει: «Οι μαχητές δεν έχουν απεριόριστο δικαίωμα να επιλέγουν τα μέσα για να βλάψουν τον εχθρό» 1 .

Δεύτερον, οι εποχές που τα αντιμαχόμενα μέρη μπορούσαν να επιλύσουν ανεξάρτητα ζητήματα πολέμου και ειρήνης έχουν προ πολλού βυθιστεί στη λήθη. Στο πλαίσιο της παγκοσμιοποίησης, ο πόλεμος γίνεται υπόθεση ολόκληρης της διεθνούς κοινότητας. Επιπλέον, υπάρχει ένας εντελώς αποτελεσματικός μηχανισμός σταθεροποίησης - το Συμβούλιο Ασφαλείας του ΟΗΕ. Ωστόσο, αυτή τη στιγμή είναι εξαιρετικά δύσκολο να εφαρμοστεί σε συγκρούσεις στον κυβερνοχώρο.

Τρίτον, η έννοια του κυβερνοπολέμου και των κυβερνοόπλων δεν υπάρχει σε καμία υπάρχουσα διεθνή πράξη. Ωστόσο, είναι απαραίτητο να γίνει διάκριση μεταξύ των μέσων στον κυβερνοχώρο που προορίζονται να προκαλέσουν βλάβη (τα ίδια τα όπλα στον κυβερνοχώρο) και των μέσων διαφόρων τύπων κατασκοπείας. Ταυτόχρονα, ο όρος «κυβερνοόπλο» χρησιμοποιείται ευρέως, μεταξύ άλλων από εξέχοντες εκπροσώπους της επιστημονικής κοινότητας.

Ο ορισμός των όπλων στον κυβερνοχώρο που δόθηκε από τον καθηγητή της Κρατικής Νομικής Ακαδημίας της Μόσχας V.A. Batyr: τεχνικά και λογισμικά μέσα καταστροφής (συσκευές, κώδικες προγραμμάτων) που δημιουργούνται από κυβερνητικές υπηρεσίες, τα οποία έχουν σχεδιαστεί δομικά για να επηρεάζουν προγραμματιζόμενα συστήματα, να εκμεταλλεύονται τρωτά σημεία σε συστήματα μετάδοσης και επεξεργασίας πληροφοριών ή συστήματα λογισμικού και υλικού με στόχο την καταστροφή ανθρώπων, την εξουδετέρωση τεχνικών μέσα ή καταστροφή εχθρικών εγκαταστάσεων υποδομής 2. Αυτός ο ορισμός αντιστοιχεί σε μεγάλο βαθμό στην αντικειμενική πραγματικότητα - δεν είναι κάθε «επιτυχημένος ιός» ένα όπλο στον κυβερνοχώρο.

Έτσι, τα όπλα στον κυβερνοχώρο περιλαμβάνουν: Stuxnet και Flame, botnets που χρησιμοποιούνται για κατανεμημένες επιθέσεις, backlogs υλικού και λογισμικού που εισάγονται μαζικά στο στάδιο παραγωγής της βάσης στοιχείων. Το τελευταίο, παρεμπιπτόντως, είναι ένα πολύ σοβαρό πρόβλημα, η κλίμακα του οποίου δεν μπορεί να υπερεκτιμηθεί. Απλώς κοιτάξτε τη λίστα με τους σελιδοδείκτες της NSA των ΗΠΑ (από διακόπτες σε καλώδια USB), που δημοσιεύτηκε από το γερμανικό μέσο Spiegel τον Δεκέμβριο του 2013. Τα smartphone, οι τηλεοράσεις, τα ψυγεία και άλλες οικιακές συσκευές που είναι συνδεδεμένες στο Διαδίκτυο γενικά διαγράφουν οποιαδήποτε όρια προβλέψεων.

___________________________________________
1 Πρόσθετο Πρωτόκολλο Ι του 1977 στις Συμβάσεις της Γενεύης για την Προστασία των Θυμάτων Πολέμου του 1949.
2 Άρθρο του V.A. Batyr στο Eurasian Legal Journal (2014, Αρ. 2) «Νέες προκλήσεις του 21ου αιώνα. στον τομέα της ανάπτυξης μέσων ένοπλου αγώνα».

Στατική ανάλυση κώδικαΑυτή είναι η διαδικασία εντοπισμού σφαλμάτων και ελλείψεων στον πηγαίο κώδικα των προγραμμάτων. Η στατική ανάλυση μπορεί να θεωρηθεί ως μια αυτοματοποιημένη διαδικασία αναθεώρησης κώδικα. Ας ρίξουμε μια πιο προσεκτική ματιά στην ανασκόπηση του κώδικα.

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

Συνήθως, οι αναθεωρήσεις κώδικα λειτουργούν καλά επειδή οι προγραμματιστές είναι πολύ πιο πιθανό να εντοπίσουν σφάλματα στον κώδικα άλλων ατόμων. Μπορείτε να μάθετε περισσότερα για τις τεχνικές αναθεώρησης κώδικα στο εξαιρετικό βιβλίο του Steve McConnell, Code Complete.

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

Αποδεικνύεται ότι από τη μία πλευρά θέλετε να ελέγχετε τακτικά τον κώδικα. Από την άλλη, είναι πολύ ακριβό. Μια συμβιβαστική λύση είναι τα εργαλεία ανάλυσης στατικού κώδικα. Επεξεργάζονται ακούραστα τον πηγαίο κώδικα των προγραμμάτων και εκδίδουν συστάσεις στον προγραμματιστή να δώσει ιδιαίτερη προσοχή σε ορισμένα τμήματα του κώδικα. Φυσικά, το πρόγραμμα δεν θα αντικαταστήσει μια πλήρη αναθεώρηση κώδικα που εκτελείται από μια ομάδα προγραμματιστών. Ωστόσο, η αναλογία οφέλους/κόστους καθιστά τη χρήση στατικής ανάλυσης μια πολύ χρήσιμη πρακτική που χρησιμοποιείται από πολλές εταιρείες.

Τα προβλήματα που επιλύονται με προγράμματα ανάλυσης στατικού κώδικα μπορούν να χωριστούν σε 3 κατηγορίες:

  1. Εντοπισμός σφαλμάτων σε προγράμματα. Αυτό θα συζητηθεί λεπτομερέστερα παρακάτω.
  2. Συστάσεις για μορφοποίηση κώδικα. Ορισμένοι στατικοί αναλυτές σάς επιτρέπουν να ελέγξετε εάν ο πηγαίος κώδικας συμμορφώνεται με το πρότυπο μορφοποίησης κώδικα της εταιρείας. Αυτό αναφέρεται στον έλεγχο της ποσότητας της εσοχής σε διάφορα σχέδια, χρησιμοποιώντας κενά διαστήματα/ χαρακτήρες καρτελών και ούτω καθεξής.
  3. Μετρική καταμέτρηση. Η μέτρηση λογισμικού είναι ένα μέτρο που παρέχει μια αριθμητική τιμή για κάποια ιδιότητα του λογισμικού ή τις προδιαγραφές του. Υπάρχει ένας μεγάλος αριθμός διαφορετικών μετρήσεων που μπορούν να υπολογιστούν χρησιμοποιώντας διάφορα εργαλεία.

Άλλα πλεονεκτήματα της ανάλυσης στατικού κώδικα:

  1. Πλήρης κάλυψη κωδικού. Οι στατικοί αναλυτές ελέγχουν ακόμη και εκείνα τα τμήματα κώδικα που λαμβάνουν έλεγχο εξαιρετικά σπάνια. Τέτοιες ενότητες κώδικα, κατά κανόνα, δεν μπορούν να ελεγχθούν με άλλες μεθόδους. Αυτό σας επιτρέπει να βρείτε ελαττώματα στους χειριστές σπάνιων συμβάντων, στους χειριστές σφαλμάτων ή στο σύστημα καταγραφής.
  2. Η στατική ανάλυση είναι ανεξάρτητη από τον μεταγλωττιστή που χρησιμοποιείται και το περιβάλλον στο οποίο θα εκτελεστεί το μεταγλωττισμένο πρόγραμμα. Αυτό σας επιτρέπει να βρείτε κρυφά σφάλματα που μπορεί να εμφανιστούν μόνο μετά από λίγα χρόνια. Για παράδειγμα, αυτά είναι σφάλματα με απροσδιόριστη συμπεριφορά. Τέτοια σφάλματα μπορεί να εμφανιστούν κατά την αλλαγή της έκδοσης μεταγλωττιστή ή όταν χρησιμοποιείτε άλλους διακόπτες για τη βελτιστοποίηση του κώδικα. Ένα άλλο ενδιαφέρον παράδειγμα κρυφών σφαλμάτων δίνεται στο άρθρο "Αντικατάσταση μνήμης - γιατί;".
  3. Μπορείτε εύκολα και γρήγορα να εντοπίσετε τυπογραφικά λάθη και τις συνέπειες της χρήσης της Αντιγραφής-Επικόλλησης. Κατά κανόνα, η εύρεση αυτών των σφαλμάτων με άλλους τρόπους είναι αναποτελεσματική σπατάλη χρόνου και προσπάθειας. Είναι κρίμα μετά από μια ώρα εντοπισμού σφαλμάτων να ανακαλύψετε ότι το σφάλμα βρίσκεται σε μια έκφραση όπως "strcmp(A, A)". Όταν συζητάμε τυπικά λάθη, τέτοιες γκάφες συνήθως δεν αναφέρονται. Αλλά στην πράξη, αφιερώνεται σημαντικός χρόνος για την αναγνώρισή τους.

Μειονεκτήματα της ανάλυσης στατικού κώδικα

  1. Η στατική ανάλυση είναι γενικά αδύναμη στη διάγνωση διαρροών μνήμης και σφαλμάτων συγχρονισμού. Για να εντοπίσετε τέτοια σφάλματα, πρέπει πραγματικά να εκτελέσετε εικονικά μέρος του προγράμματος. Αυτό είναι εξαιρετικά δύσκολο να εφαρμοστεί. Επίσης, τέτοιοι αλγόριθμοι απαιτούν πολλή μνήμη και χρόνο CPU. Κατά κανόνα, οι στατικοί αναλυτές περιορίζονται στη διάγνωση απλών περιπτώσεων. Ένας πιο αποτελεσματικός τρόπος για τον εντοπισμό διαρροών μνήμης και ταυτόχρονων σφαλμάτων είναι η χρήση εργαλείων δυναμικής ανάλυσης.
  2. Το πρόγραμμα στατικής ανάλυσης προειδοποιεί για ύποπτα μέρη. Αυτό σημαίνει ότι στην πραγματικότητα ο κωδικός μπορεί να είναι απολύτως σωστός. Αυτά ονομάζονται ψευδώς θετικά. Μόνο ένας προγραμματιστής μπορεί να καταλάβει εάν ο αναλυτής υποδεικνύει σφάλμα ή έχει δημιουργήσει ένα ψευδώς θετικό. Η ανάγκη εξέτασης ψευδών θετικών στοιχείων καταλαμβάνει χρόνο εργασίας και μειώνει την προσοχή σε εκείνα τα μέρη του κώδικα που περιέχουν πραγματικά σφάλματα.

Τα σφάλματα που εντοπίζονται από τους στατικούς αναλυτές είναι πολύ διαφορετικά. Εδώ, για παράδειγμα, είναι μια λίστα με διαγνωστικά που υλοποιούνται στο εργαλείο PVS-Studio. Ορισμένοι αναλυτές ειδικεύονται σε μια συγκεκριμένη περιοχή ή τύπο ελαττώματος. Άλλα υποστηρίζουν ορισμένα πρότυπα κωδικοποίησης, για παράδειγμα MISRA-C:1998, MISRA-C:2004, Κανόνες Sutter-Alexandrescu, Κανόνες Meyers-Klaus και ούτω καθεξής.

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

Κάθε μία από την ομάδα ][ έχει τις δικές της προτιμήσεις σχετικά με το λογισμικό και τα βοηθητικά προγράμματα για
πεντάμενη. Μετά από διαβούλευση, ανακαλύψαμε: η επιλογή ποικίλλει τόσο πολύ που μπορούμε να κάνουμε
ένα πραγματικό σύνολο τζέντλεμαν από αποδεδειγμένα προγράμματα. Αυτό αποφασίσαμε. Προς την
Μην κάνετε φασαρία, ολόκληρη η λίστα χωρίζεται σε θέματα. Σήμερα θα κοιτάξουμε
αναλυτές στατικού κώδικα
για να αναζητήσετε τρωτά σημεία σε εφαρμογές όταν
χέρια - οι πηγές τους.

Η διαθεσιμότητα των πηγαίων κωδίκων προγραμμάτων απλοποιεί σημαντικά την αναζήτηση ευπαθειών.
Αντί να χειρίζονται τυφλά διάφορες παραμέτρους που
μεταφέρονται στην εφαρμογή, γεγονός που καθιστά πολύ πιο εύκολο να δείτε στις πηγές πώς
διαδικασίες. Για παράδειγμα, εάν τα δεδομένα από τον χρήστη μεταδίδονται χωρίς ελέγχους και
οι μετασχηματισμοί φτάνουν σε ένα ερώτημα SQL - έχουμε μια ευπάθεια τύπου ένεσης SQL.
Αν φτάσουν στην έξοδο σε κώδικα HTML, παίρνουμε κλασικό XSS. Από
ένας στατικός σαρωτής πρέπει να ανιχνεύει με σαφήνεια τέτοιες καταστάσεις, αλλά, να
Δυστυχώς, αυτό δεν είναι πάντα τόσο εύκολο όσο φαίνεται.

Σύγχρονοι μεταγλωττιστές

Μπορεί να φαίνεται αστείο, αλλά ένα από τα πιο αποτελεσματικά αναλυτές
κώδικας
είναι οι ίδιοι οι μεταγλωττιστές. Φυσικά, προορίζονται εξ ολοκλήρου
άλλο, αλλά ως μπόνους, καθένα από αυτά προσφέρει έναν καλό επαληθευτή
πηγαίους κώδικες, ικανοί να ανιχνεύσουν μεγάλο αριθμό σφαλμάτων. Γιατί δεν το κάνει
σώζει; Αρχικά, οι ρυθμίσεις για μια τέτοια επαλήθευση κωδικού ορίζονται επαρκώς
πιστός: ως αποτέλεσμα, για να μην μπερδευτεί ο προγραμματιστής, ξεκινά ο μεταγλωττιστής
ορκιστείτε μόνο στην περίπτωση των πιο σοβαρών λαθών. Αλλά μάταια - αν βάλεις
το επίπεδο των προειδοποιήσεων είναι υψηλότερο, είναι πολύ πιθανό να σκάψετε πολλά αμφίβολα μέρη
στον κώδικα. Κάπως έτσι μοιάζει. Ας πούμε ότι υπάρχει έλλειψη στον κώδικα
ελέγχοντας για το μήκος μιας συμβολοσειράς πριν την αντιγράψετε στο buffer. Ο σαρωτής βρίσκει τη λειτουργία,
αντιγραφή μιας συμβολοσειράς (ή ενός τμήματός της) σε μια προσωρινή μνήμη σταθερού μεγέθους χωρίς
προκαταρκτικός έλεγχος του μήκους του. Ανιχνεύει την τροχιά μετάδοσης
ορίσματα: από τα δεδομένα εισόδου στην ευάλωτη συνάρτηση και φαίνεται: είναι δυνατόν
επιλέξτε ένα μήκος συμβολοσειράς που θα προκαλούσε υπερχείλιση στα ευάλωτα άτομα
λειτουργούν και δεν θα αποκόπτονται από τους ελέγχους που προηγούνται. Σε περίπτωση τέτοια
Δεν υπάρχει έλεγχος, βρίσκουμε σχεδόν 100% υπερχείλιση buffer. Η κύρια δυσκολία είναι
χρησιμοποιείται για τη δοκιμή του μεταγλωττιστή - κάντε τον να «καταπιεί» τον κώδικα κάποιου άλλου.
Εάν έχετε προσπαθήσει ποτέ να μεταγλωττίσετε μια εφαρμογή από την πηγή, τότε ξέρετε
πόσο δύσκολο είναι να ικανοποιηθούν όλες οι εξαρτήσεις, ειδικά σε μεγάλα έργα. Αλλά
το αποτέλεσμα αξίζει τον κόπο! Επιπλέον, εκτός από τον μεταγλωττιστή, έχουν επίσης ενσωματωμένα ισχυρά IDE
κάποιο άλλο μέσο για ανάλυση κώδικα. Για παράδειγμα, στο επόμενο
ενότητα του κώδικα στο Visual Studio θα εκδώσει μια προειδοποίηση σχετικά με τη χρήση σε
βρόχος της συνάρτησης _alloca, η οποία μπορεί γρήγορα να υπερχειλίσει τη στοίβα:

char *b;
κάνω (
b = (char*)_alloca(9)
) ενώ (1)

Αυτό οφείλεται στον στατικό αναλυτή PREfast. Όπως το FxCop,
σχεδιασμένο για ανάλυση διαχειριζόμενου κώδικα, το PREfast είναι εγγενώς
διανεμήθηκε ως ξεχωριστό βοηθητικό πρόγραμμα και μόνο αργότερα έγινε μέρος του Visual Studio.

RATS - Rough Auditing Tool for Security

Ιστοσελίδα: www.securesoftware.com
Άδεια χρήσης: GNU GPL
Πλατφόρμα: Unix, Windows
Γλώσσες: C++, PHP, Python, Ruby

Σφάλμα σε λάθος - διχόνοια. Μερικά από τα λάθη που κάνουν οι προγραμματιστές είναι
είναι άκριτη και απειλεί μόνο την αστάθεια του προγράμματος. Άλλοι, αντίθετα,
σας επιτρέπει να εισάγετε shellcode και να εκτελείτε αυθαίρετες εντολές εξ αποστάσεως
υπηρέτης. Ιδιαίτερα επικίνδυνες στον κώδικα είναι οι εντολές που σας επιτρέπουν να εκτελέσετε buffer
υπερχείλιση και άλλα παρόμοια είδη επιθέσεων. Υπάρχουν πολλές τέτοιες εντολές, στην περίπτωση του C/C++
αυτές είναι συναρτήσεις για εργασία με συμβολοσειρές (xstrcpy(), strcat(), gets(), sprintf(),
printf(), snprintf(), syslog()), εντολές συστήματος (access(), chown(), chgrp(),
chmod(), tmpfile(), tmpnam(), tempnam(), mktemp()), καθώς και εντολές συστήματος
κλήσεις (exec(), system(), popen()). Εξετάστε χειροκίνητα όλο τον κώδικα (ειδικά
αν αποτελείται από πολλές χιλιάδες γραμμές) είναι αρκετά κουραστικό. Που σημαίνει ότι είναι δυνατό
Είναι εύκολο να αγνοήσετε τη μετάδοση μη ελεγμένων παραμέτρων σε κάποια συνάρτηση.
Τα ειδικά εργαλεία ελέγχου μπορούν να διευκολύνουν σημαντικά την εργασία, συμπεριλαμβανομένων
διάσημο βοηθητικό πρόγραμμα ΑΡΟΥΡΑΙΕΣ (Πρόχειρο εργαλείο ελέγχου για την ασφάλεια) από
διάσημη εταιρεία Fortify. Όχι μόνο θα χειριστεί με επιτυχία την επεξεργασία κώδικα,
γραμμένο σε C/C++, αλλά μπορεί επίσης να επεξεργαστεί σενάρια σε Perl, PHP και Python.
Η βάση δεδομένων του βοηθητικού προγράμματος περιέχει μια εντυπωσιακή επιλογή με λεπτομερή περιγραφή των προβληματικών
θέσεις στον κώδικα. Με τη βοήθεια ενός αναλυτή, θα επεξεργαστεί την οξαλίδα που της ταΐζουν και
θα προσπαθήσει να εντοπίσει σφάλματα, μετά από τα οποία θα παρέχει πληροφορίες σχετικά με τα ελαττώματα που βρέθηκαν.
ΑΡΟΥΡΑΙΕΣ
λειτουργεί μέσω της γραμμής εντολών, τόσο σε συστήματα Windows όσο και σε συστήματα *nix.

Yasca

Ιστοσελίδα: www.yasca.org
Άδεια χρήσης: Ανοιχτού κώδικα
Πλατφόρμα: Unix, Windows
Γλώσσες: C++, Java, .NET, ASP, Perl, PHP, Python και άλλες.

Yascaόπως και το RATS δεν χρειάζεται εγκατάσταση, και δεν έχει
μόνο μια διεπαφή κονσόλας, αλλά και ένα απλό GUI. Οι προγραμματιστές προτείνουν
εκτελέστε το βοηθητικό πρόγραμμα μέσω της κονσόλας - λένε, με αυτόν τον τρόπο υπάρχουν περισσότερες δυνατότητες. Είναι αστείο τι
Ο κινητήρας Yasca είναι γραμμένος σε PHP 5.2.5 και ο διερμηνέας (στην πιο απογυμνωμένη του
επιλογή) βρίσκεται σε έναν από τους υποφακέλους του αρχείου με το πρόγραμμα. Το όλο πρόγραμμα είναι λογικά
αποτελείται από ένα front-end, ένα σύνολο πρόσθετων σάρωσης, μια δημιουργία αναφορών και
τον ίδιο τον κινητήρα, που κάνει όλες τις ταχύτητες να περιστρέφονται μαζί. Πρόσθετα
απορρίπτονται στον κατάλογο των προσθηκών - επιπλέον πρέπει να εγκατασταθούν και εκεί
πρόσθετα. Σημαντικό σημείο! Περιλαμβάνονται τρία από τα τυπικά πρόσθετα
Yasca
, έχουν δυσάρεστες εξαρτήσεις. JLint, το οποίο σαρώνει Java
.class, απαιτεί jlint.exe στον κατάλογο πόρων/ βοηθητικών προγραμμάτων. Δεύτερος
plugin - antiC, που χρησιμοποιείται για την ανάλυση πηγών Java και C/C++, απαιτεί antic.exe
στον ίδιο κατάλογο. Και για να λειτουργήσει το PMD, το οποίο επεξεργάζεται κώδικα Java, χρειάζεστε
εγκατεστημένο σε σύστημα Java JRE 1.4 ή νεότερη έκδοση. Ελέγξτε ότι η εγκατάσταση είναι σωστή
μπορείτε πληκτρολογώντας την εντολή "yasca ./resources/test/". Πώς μοιάζει μια σάρωση;
Έχοντας επεξεργαστεί τις ποικιλίες που τροφοδοτήθηκαν στο πρόγραμμα, Yascaδίνει το αποτέλεσμα ως
ειδική αναφορά. Για παράδειγμα, ένα από τα τυπικά πρόσθετα GREP σας το επιτρέπει
χρησιμοποιώντας μοτίβα που περιγράφονται στα αρχεία .grep, υποδεικνύουν ευάλωτες δομές και
Εντοπίστε εύκολα μια σειρά από τρωτά σημεία. Ένα σύνολο τέτοιων μοτίβων περιλαμβάνεται ήδη
πρόγραμμα: για αναζήτηση αδύναμης κρυπτογράφησης, εξουσιοδότηση χρησιμοποιώντας "κωδικός πρόσβασης ισούται με σύνδεση",
πιθανές ενέσεις SQL και πολλά άλλα. Πότε θα θέλετε να δείτε στην αναφορά
Για πιο λεπτομερείς πληροφορίες, μην τεμπελιάζετε να εγκαταστήσετε πρόσθετα πρόσθετα. Τι
Ένα πράγμα που αξίζει να αναφέρουμε είναι ότι με τη βοήθειά τους μπορείτε επιπλέον να σαρώσετε τον κώδικα
.NET (VB.NET, C#, ASP.NET), PHP, ColdFusion, COBOL, HTML, JavaScript, CSS,
Visual Basic, ASP, Python, Perl.

Cppcheck

Δικτυακός τόπος:
Άδεια χρήσης: Ανοιχτού κώδικα
Πλατφόρμα: Unix, Windows
Γλώσσες: C++

προγραμματιστές Cppcheckαποφάσισε να μην σπαταλήσει χρόνο σε μικροπράγματα, και ως εκ τούτου
Πιάνουν μόνο αυστηρά καθορισμένες κατηγορίες σφαλμάτων και μόνο σε κώδικα C++.
Μην περιμένετε το πρόγραμμα να αντιγράψει τις προειδοποιήσεις του μεταγλωττιστή - θα κάνει και χωρίς
υποβολεύς. Επομένως, μην τεμπελιάζετε να ρυθμίσετε τον μεταγλωττιστή στο μέγιστο επίπεδο
προειδοποιήσεις και χρησιμοποιήστε το Cppcheck για να ελέγξετε για διαρροές μνήμης και παραβιάσεις
λειτουργίες κατανομής-εκχώρησης, διάφορες υπερχειλίσεις buffer, χρήση
ξεπερασμένα χαρακτηριστικά και πολλά άλλα. Σημαντική λεπτομέρεια: Προγραμματιστές Cppcheck
Προσπαθήσαμε να μειώσουμε τον αριθμό των ψευδώς θετικών στο ελάχιστο. Επομένως, εάν
Το πρόγραμμα καταγράφει ένα σφάλμα, πιθανότατα μπορείτε να πείτε: «Πραγματικά
ναι!" Μπορείτε να εκτελέσετε την ανάλυση είτε από την κονσόλα είτε χρησιμοποιώντας ένα ωραίο
Διεπαφή GUI γραμμένη σε Qt και τρέχει σε οποιαδήποτε πλατφόρμα.

βαθμίδα

Δικτυακός τόπος:
www.justanotherhacker.com/projects/graudit.html
Άδεια χρήσης: Ανοιχτού κώδικα
Πλατφόρμα: Unix, Windows
Γλώσσες: C++, PHP, Python, Perl

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

gradit /διαδρομή/προς/σάρωση

Η ανταμοιβή για τις προσπάθειές σας θα είναι μια πολύχρωμη αναφορά για πιθανή εκμετάλλευση
θέσεις στον κώδικα. Πρέπει να πω ότι, εκτός από το ίδιο το σενάριο (και αυτό είναι μόνο 100 γραμμές
κώδικας στο Bash), η τιμή προέρχεται από τις βάσεις δεδομένων υπογραφής στις οποίες
regexps και ονόματα δυνητικά ευάλωτων συναρτήσεων σε διαφορετικές γλώσσες. Προκαθορισμένο
περιλαμβάνονται βάσεις δεδομένων για Python, Perl, PHP, C++ - μπορείτε να λάβετε αρχεία από το φάκελο υπογραφών
και χρησιμοποιήστε το στις δικές σας εξελίξεις.

SWAAT

Ιστοσελίδα: www.owasp.org
Άδεια χρήσης: Ανοιχτού κώδικα
Πλατφόρμα: Unix, Windows
Γλώσσες: Java, JSP, ASP .Net, PHP

Εάν το graudit χρησιμοποιεί αρχεία κειμένου για να ορίσει την υπογραφή ευπάθειας,
μετά μέσα SWAAT– μια πιο προοδευτική προσέγγιση χρησιμοποιώντας αρχεία XML. Σαν αυτό
Μια τυπική υπογραφή μοιάζει με:

vuln match - κανονική έκφραση για αναζήτηση.
type - υποδεικνύει τον τύπο ευπάθειας:
σοβαρότητα - υποδεικνύει το επίπεδο κινδύνου (υψηλό, μεσαίο ή χαμηλό)
alt - εναλλακτικός κώδικας για την επίλυση του προβλήματος

SWAATδιαβάζει τη βάση δεδομένων υπογραφών και τη χρησιμοποιεί για να προσπαθήσει να βρει προβληματικές
ενότητες κώδικα σε πηγαίους κώδικες σε Java, JSP, ASP .Net και PHP. Η βάση είναι συνεχώς
αυξάνεται και εκτός από τη λίστα των «επικίνδυνων» λειτουργιών, περιλαμβάνει τυπικά σφάλματα
χρησιμοποιώντας τη μορφοποίηση συμβολοσειρών και τη σύνταξη ερωτημάτων SQL. Είναι αξιοσημείωτο ότι
ότι το πρόγραμμα είναι γραμμένο σε C#, αλλά δουλεύει μια χαρά στο niks, ευχαριστώ
στο έργο Mono - μια ανοιχτή υλοποίηση της πλατφόρμας .Net.

Σαρωτής σφαλμάτων PHP

Δικτυακός τόπος:
raz0r.name/releases/php-bug-scanner
Άδεια χρήσης: Δωρεάν λογισμικό
Πλατφόρμα: Windows
Γλώσσες: PHP

Εάν χρειάζεται να κάνετε στατική ανάλυση μιας εφαρμογής PHP, σας προτείνω
δοκιμάστε Σαρωτής σφαλμάτων PHP, το οποίο γράφτηκε από τον συγγραφέα μας - raz0r. Δουλειά
Το πρόγραμμα βασίζεται στη σάρωση διαφόρων συναρτήσεων και μεταβλητών σε σενάρια PHP,
που μπορούν να χρησιμοποιηθούν σε επιθέσεις Ιστού. Περιγραφή τέτοιων
Οι καταστάσεις επισημοποιούνται με τη μορφή των λεγόμενων προεπιλογών και το πρόγραμμα είναι ήδη
Περιλαμβάνονται 7 ειδικές προεπιλογές, ομαδοποιημένες ανά κατηγορία:

  • εκτέλεση κώδικα?
  • εκτέλεση εντολής?
  • διέλευση καταλόγου?
  • παγκόσμια αντικαθιστούν?
  • περιλαμβάνω;
  • SQL injection;
  • διάφορα.

Είναι αστείο που είναι γραμμένο το πρόγραμμα
PHP/WinBinder και μεταγλωττίστηκε
bamcompile , οπότε μοιάζει ακριβώς με μια κανονική εφαρμογή των Windows. Διά μέσου
βολική διεπαφή, το pentester μπορεί να ενεργοποιήσει ή να απενεργοποιήσει την ανάλυση κώδικα για την παρουσία του
ορισμένα τρωτά σημεία.

Νεράιδα

Δικτυακός τόπος:
pixybox.seclab.tuwien.ac.at
Άδεια χρήσης: Δωρεάν λογισμικό
Πλατφόρμα: Unix, Windows
Γλώσσες: PHP

Το εργαλείο βασίζεται στη σάρωση του πηγαίου κώδικα και στην κατασκευή γραφημάτων
ροές δεδομένων. Αυτό το γράφημα ανιχνεύει τη διαδρομή των δεδομένων που φτάνουν
από έξω από το πρόγραμμα - από τον χρήστη, από τη βάση δεδομένων, από κάποιο εξωτερικό
πρόσθετο, κ.λπ. Με αυτόν τον τρόπο, μια λίστα με ευάλωτα σημεία (ή εισόδους) σε
εφαρμογές. Χρησιμοποιώντας μοτίβα που περιγράφουν τρωτά σημεία, το Pixy ελέγχει για:
σημεία και σας επιτρέπει να προσδιορίσετε ευπάθειες XSS και SQL. Επιπλέον, τα ίδια τα γραφήματα, τα οποία
που χτίστηκε κατά την ανάλυση, μπορεί να προβληθεί στο φάκελο γραφήματα (για παράδειγμα,
xss_file.php_1_dep.dot) - αυτό είναι πολύ χρήσιμο για να καταλάβετε γιατί
αυτό ή εκείνο το τμήμα κώδικα θεωρείται ευάλωτο στο Pixy. Γενικά η ίδια η ανάπτυξη
εξαιρετικά εκπαιδευτικό και δείχνει πώς λειτουργούν τα προηγμένα βοηθητικά προγράμματα
ανάλυση στατικού κώδικα. Στη σελίδα

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

Ουγγιά 6

Ιστοσελίδα: www.ouncelabs.com/products
Άδεια χρήσης: Shareware
Πλατφόρμα: Windows

Δυστυχώς, οι υπάρχουσες δωρεάν λύσεις εξακολουθούν να είναι κάτω από τις εμπορικές
ανάλογα. Αρκεί να μελετήσουμε την ποιότητα και τη λεπτομέρεια της έκθεσης, που είναι
Ουγγιά 6
– και καταλάβετε γιατί. Το πρόγραμμα βασίζεται σε ένα ειδικό
Μηχανή ανάλυσης Ounce Core, που ελέγχει τον κώδικα για συμμόρφωση με τους κανόνες
και πολιτικές που καταρτίζονται από μια ομάδα επαγγελματιών διεισδυτών,
που έχουν συσσωρεύσει την εμπειρία γνωστών εταιρειών ασφαλείας, της κοινότητας των χάκερ, καθώς και
πρότυπα ασφαλείας. Το πρόγραμμα εντοπίζει μια ποικιλία ευπαθειών στον κώδικα: από
Υπερχείλιση buffer πριν από τις ενέσεις SQL. Εάν θέλετε, το Ounce μπορεί εύκολα να ενσωματωθεί με
δημοφιλή IDE για την εφαρμογή αυτόματου ελέγχου κώδικα κατά τη διάρκεια της κατασκευής
κάθε νέα έκδοση της εφαρμογής που αναπτύσσεται. Παρεμπιπτόντως,
Η εταιρεία ανάπτυξης, Ounce Labs, εξαγοράστηκε από την ίδια την IBM αυτό το καλοκαίρι. Έτσι
ότι το προϊόν πιθανότατα θα συνεχίσει να αναπτύσσεται ως μέρος ενός από
Εμπορικές εφαρμογές της IBM.

Klocwork Insight

Ιστοσελίδα: www.klocwork.com
Άδεια χρήσης: Shareware
Πλατφόρμα: Windows
Γλώσσες: C++, Java, C#

Για πολύ καιρό, αυτό το, πάλι, εμπορικό προϊόν εφάρμοζε μια στατική
Σάρωση κώδικα μόνο για C, C+ και Java. Μόλις όμως βγήκε το Visual Studio
2008 και .NET Framework 3.5, οι προγραμματιστές ανακοίνωσαν υποστήριξη για C#. έφυγα
πρόγραμμα σε δύο βοηθητικά του έργα, τα οποία έγραψε βιαστικά
στο Sharpe και το πρόγραμμα εντόπισε 7 κρίσιμα τρωτά σημεία. Είναι καλό που αυτοί
γραμμένο μόνο για εσωτερική χρήση :). Klocwork Insight
αρχικά διαμορφώθηκε κυρίως για να λειτουργεί σε συνδυασμό με ενσωματωμένα περιβάλλοντα
ανάπτυξη. Η ενσωμάτωση με το ίδιο Visual Studio ή Eclipse είναι εξαιρετικά καλή
επιτυχημένη - αρχίζετε να σκέφτεστε σοβαρά ότι πρέπει να υπάρχει τέτοια λειτουργικότητα
εφαρμόζεται σε αυτά από προεπιλογή :). Αν δεν λάβεις υπόψη σου τα προβλήματα με τη λογική
προβλήματα απόδοσης εφαρμογής και απόδοσης, λοιπόν Klocwork Insight
κάνει εξαιρετική δουλειά στην εύρεση υπερχείλισης buffer και φιλτραρίσματος που λείπει
προσαρμοσμένος κώδικας, δυνατότητες SQL/Path/Cross-site injection, ασθενής
κρυπτογράφηση κ.λπ. Μια άλλη ενδιαφέρουσα επιλογή είναι η κατασκευή ενός δέντρου εκτέλεσης
εφαρμογή που σας επιτρέπει να κατανοήσετε γρήγορα τη γενική αρχή της εφαρμογής και
παρακολουθεί χωριστά, για παράδειγμα, την επεξεργασία οποιουδήποτε χρήστη
εισαγωγή. Και για γρήγορη κατασκευή κανόνων ελέγχου κώδικα, προτείνεται ακόμη
ειδικό εργαλείο - Klocwork Checker Studio.

Στατική ανάλυση αποτροπής κάλυψης

Ιστοσελίδα: www.coverity.com/products
Άδεια χρήσης: Shareware
Πλατφόρμα: Windows
Γλώσσες: C++, Java, C#

Ένας από τους πιο διάσημους αναλυτές στατικού κώδικα σε C/C++, Java και C#.
Σύμφωνα με τους δημιουργούς του, η λύση χρησιμοποιείται από περισσότερους από 100.000
προγραμματιστές σε όλο τον κόσμο. Οι καλά μελετημένοι μηχανισμοί σάς επιτρέπουν να αυτοματοποιείτε
αναζήτηση για διαρροές μνήμης, μη εντοπισμένες εξαιρέσεις, ζητήματα απόδοσης και
ευπάθειες ασφαλείας, φυσικά. Το προϊόν υποστηρίζει διαφορετικές πλατφόρμες,
μεταγλωττιστές (gcc, Microsoft Visual C++ και πολλοί άλλοι) και επίσης ενσωματώνεται με
διάφορα περιβάλλοντα ανάπτυξης, κυρίως το Eclipse και το Visual Studio. Στον πυρήνα
Η διέλευση κώδικα δεν χρησιμοποιεί ανόητους αλγόριθμους διέλευσης από την αρχή μέχρι το τέλος, αλλά κάτι
σαν ένα πρόγραμμα εντοπισμού σφαλμάτων που αναλύει πώς ένα πρόγραμμα θα συμπεριφέρεται σε διαφορετικά
καταστάσεις μετά από μια συνεδρίαση τμήματος. Με αυτόν τον τρόπο επιτυγχάνεται 100% κάλυψη κωδικού.
Μια τόσο σύνθετη προσέγγιση χρειαζόταν, μεταξύ άλλων, για την πλήρη ανάλυση
εφαρμογές πολλαπλών νημάτων που έχουν βελτιστοποιηθεί ειδικά για εκτέλεση σε πολλαπλούς πυρήνες
επεξεργαστές. Coverity Integrity Centerσας επιτρέπει να βρείτε τέτοια σφάλματα
ως συνθήκη αγώνα (ένα λάθος σχεδιασμού σε ένα σύστημα πολλαπλών εργασιών στο οποίο
η λειτουργία του συστήματος εξαρτάται από τη σειρά με την οποία εκτελούνται τμήματα του κώδικα), αδιέξοδα
και πολλα ΑΚΟΜΑ. Γιατί οι αναστροφείς το χρειάζονται αυτό; Ρωτήστε τους προγραμματιστές 0day σχετικά
εκμεταλλεύσεις για Firefox και IE :).

Ανιχνευτής κώδικα OWASP

Ιστοσελίδα: www.owasp.org
Άδεια χρήσης: GNU GPL
Πλατφόρμα: Windows
Γλώσσες: Java, C#, VB

Ο δημιουργός αυτού του εργαλείου, ο Alessio Marziali, είναι ο συγγραφέας δύο βιβλίων στο ASP.NET,
ένας αξιόπιστος κωδικοποιητής εφαρμογών υψηλού φορτίου για τον χρηματοοικονομικό τομέα, καθώς και
πεντέστερ. Το 2007, δημοσίευσε πληροφορίες σχετικά με κρίσιμα τρωτά σημεία στο 27
Ιστοσελίδες της ιταλικής κυβέρνησης. Το πνευματικό του τέκνο - Ανιχνευτής κώδικα OWASP
Σχεδιασμένο για στατική ανάλυση κώδικα .NET και J2EE/JAVA, ανοιχτά διαθέσιμο
στο Διαδίκτυο και στο τέλος του έτους ο συγγραφέας υπόσχεται να κυκλοφορήσει μια νέα έκδοση του προγράμματος με
πολύ περισσότερη λειτουργικότητα. Αλλά το πιο σημαντικό πράγμα έχει ήδη εφαρμοστεί -
ανάλυση πηγαίου κώδικα σε C#, Visual Basic και Java. Επιλέγονται τα αρχεία που θα σαρωθούν
μέσω της διεπαφής GUI και η σάρωση ξεκινά αυτόματα. Για κάθε
προβληματική ενότητα κώδικα, μια περιγραφή της ευπάθειας εμφανίζεται στην ενότητα Απειλή
Περιγραφή. Αλήθεια, χωράφι Οδηγίες OWASPπιθανώς υποδεικνύοντας το μονοπάτι
Δυστυχώς, δεν υπάρχει ακόμη λύση στο πρόβλημα. Αλλά μπορείτε να χρησιμοποιήσετε
πειραματικό χαρακτηριστικό της σάρωσης κώδικα σε απομακρυσμένο μηχάνημα, προσβάσιμο
στην καρτέλα Απομακρυσμένη σάρωση. Ο συγγραφέας υπόσχεται να αναβαθμίσει σοβαρά αυτό το χαρακτηριστικό και, σε
συμπεριλαμβανομένης της συγκέντρωσης πηγών εφαρμογής για ανάλυση απευθείας από το σύστημα
έλεγχος έκδοσης.

ΠΡΟΕΙΔΟΠΟΙΗΣΗ

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