- Τα dumps μνήμης πυρήνα καταγράφουν την κατάσταση του συστήματος σε κρίσιμες αποτυχίες και είναι απαραίτητα για τον εντοπισμό σφαλμάτων και τον έλεγχο ασφαλείας.
- Στα Windows, αναλύονται με WinDbg ή KD, χρησιμοποιώντας σύμβολα και εντολές όπως !analyze -vy .bugcheck για τον εντοπισμό προγραμμάτων οδήγησης και αιτιών του σφάλματος.
- Στο Linux, εργαλεία όπως το crash, το LiME και το gcore σάς επιτρέπουν να εξάγετε και να μελετάτε αρχεία πυρήνα και να επεξεργάζεστε αρχεία dumps, με ιδιαίτερη προσοχή στην προστασία ευαίσθητων δεδομένων.
- Το FreeBSD και άλλα συστήματα Unix απαιτούν πυρήνες που έχουν μεταγλωττιστεί με σύμβολα και τη χρήση του kgdb, βασιζόμενοι πάντα σε τεκμηρίωση και πηγαίο κώδικα για την ερμηνεία των αποτελεσμάτων.
Όταν ένα λειτουργικό σύστημα πανικοβάλλεται ή παρουσιάζει σφάλμα, ο μόνος τρόπος για να κατανοήσουμε τι συνέβη είναι να λάβουμε ένα αρχείο dump από τη μνήμη του πυρήνα και να το αναλύσουμε . Αυτά τα dumps καταγράφουν την εσωτερική κατάσταση του συστήματος τη στιγμή της βλάβης και είναι απαραίτητα για την αποσφαλμάτωση πολύπλοκων σφαλμάτων, τη διερεύνηση περιστατικών ασφαλείας ή τη διεξαγωγή εγκληματολογικών εξετάσεων.
Παρόλο που μπορεί να ακούγεται πολύ «χαμηλού επιπέδου», η ανάλυση dump μνήμης δεν είναι αποκλειστικότητα των προγραμματιστών πυρήνα. Οι διαχειριστές συστημάτων, οι μηχανικοί υποστήριξης, ακόμη και οι ελεγκτές ασφαλείας μπορούν να επωφεληθούν από αυτήν, εάν γνωρίζουν τα σωστά εργαλεία, τους διαφορετικούς τύπους dumps και τις βασικές τεχνικές ερμηνείας . Θα σας καθοδηγήσουμε σε όλα αυτά σε Windows, Unix/Linux και BSD, χρησιμοποιώντας εργαλεία όπως WinDbg, crash, kgdb και LiME.
Τι είναι ένα dump μνήμης πυρήνα και γιατί αξίζει να αναλυθεί;
Ένα αρχείο dump μνήμης πυρήνα (συχνά ονομάζεται Kernel Crash Dump ή απλά crash dump ) είναι ένα αρχείο που περιέχει ένα αντίγραφο, είτε πλήρες είτε μερικό, της μνήμης τη στιγμή που το σύστημα υφίσταται μια κρίσιμη αποτυχία, όπως ένα σφάλμα πανικού πυρήνα σε Unix/Linux ή μια μπλε οθόνη θανάτου (BSOD) στα Windows.
Στην πράξη, ένα dump αυτού του τύπου αποθηκεύει εσωτερικές δομές πυρήνα, στοίβες κλήσεων, περιβάλλον διεργασιών και φορτωμένα προγράμματα οδήγησης . Χάρη σε αυτό, μετά την καταστροφή, μπορεί να πραγματοποιηθεί μια ανάλυση μετά τη σύλληψη που είναι πολύ παρόμοια με την αποσφαλμάτωση ενός ενεργού συστήματος, αλλά χωρίς την πίεση να χρειαστεί να αγγίξετε μια μηχανή παραγωγής ενώ αυτή παρουσιάζει σφάλμα.
Οι λόγοι για να εμβαθύνουμε σε βάθος στα αρχεία dumps του πυρήνα ποικίλλουν: από την ανίχνευση φαινομενικά τυχαίων σφαλμάτων και διαλείποντων σφαλμάτων , έως τη διερεύνηση του κατά πόσον ένα σύστημα έχει χειραγωγηθεί κακόβουλα ή αν ένα σφάλμα μπορεί να έχει αφήσει ίχνη ευαίσθητων πληροφοριών στον δίσκο.
Εκτός από τα πλήρη core dumps, υπάρχει η δυνατότητα λήψης dumps μεμονωμένων διεργασιών (τα κλασικά core dumps ), τα οποία είναι πολύ χρήσιμα όταν θέλουμε να περιορίσουμε ένα πρόβλημα σε μια συγκεκριμένη εφαρμογή ή να ελέγξουμε τον αντίκτυπο στην εμπιστευτικότητα μιας υπηρεσίας, όπως ένα πρόγραμμα-πελάτη email ή messaging.

Τύποι μνήμης dumps στα Windows και η χρησιμότητά τους
Στα συστήματα Windows, το ίδιο το λειτουργικό σύστημα μπορεί να δημιουργήσει διαφορετικούς τύπους dumps όταν παρουσιαστεί σφάλμα STOP. Κάθε τύπος περιλαμβάνει διαφορετικό επίπεδο λεπτομέρειας, επομένως είναι σημαντικό να γνωρίζετε ποιον τύπο dump χρειάζεστε ανάλογα με το πρόβλημα και τους περιορισμούς χώρου στο δίσκο.
Μία από τις πιο συνηθισμένες μορφές σε περιβάλλοντα χρηστών και σε πολλούς διακομιστές είναι η μικρή απόρριψη μνήμης (minidump)Είναι αυτό που καταλαμβάνει τον λιγότερο χώρο και συνήθως βρίσκεται σε %SystemRoot%\Minidump, με αρχεία του στυλ MiniMMDDYY-01.dmp.
Αυτό το μίνι αρχείο dump περιέχει πολύ συγκεκριμένες αλλά σημαντικές πληροφορίες: τον κωδικό σφάλματος STOP και τις παραμέτρους του , τη λίστα των προγραμμάτων οδήγησης που φορτώθηκαν τη στιγμή της αποτυχίας, το περιβάλλον του επεξεργαστή που σταμάτησε (PRCB), τα περιβάλλοντα της διεργασίας και του νήματος που εμπλέκεται (δομές EPROCESS και ETHREAD) και τη στοίβα κλήσεων σε λειτουργία πυρήνα αυτού του νήματος.
Χάρη σε αυτές τις βασικές δομές, ακόμη και με ένα minidump είναι συχνά δυνατό να προσδιοριστεί ποιο πρόγραμμα οδήγησης ή ενότητα προκαλεί τα σφάλματα, αν και δεν θα είναι πάντα δυνατό να παρακολουθηθεί ολόκληρη η διαδρομή εάν το πρόβλημα προέρχεται μακριά από το νήμα που εκτελούνταν τη στιγμή του σφάλματος και οι διαθέσιμες πληροφορίες περιβάλλοντος είναι περιορισμένες.
Τα Windows μπορούν επίσης να δημιουργήσουν dumps μνήμης πυρήνα και πολύ μεγαλύτερα πλήρη dumps που περιέχουν τμήματα ή ολόκληρη τη φυσική μνήμη. Αυτά είναι ιδιαίτερα χρήσιμα για ανάλυση χαμηλού επιπέδου, εγκληματολογικές έρευνες και προηγμένο εντοπισμό σφαλμάτων σε προγράμματα οδήγησης ή στο ίδιο το σύστημα.
Ρύθμιση παραμέτρων και άνοιγμα dumps μνήμης στα Windows με WinDbg και KD
Για να αξιοποιήσετε τα dumps συστήματος στα Windows, το πρώτο βήμα είναι να ρυθμίσετε σωστά τις επιλογές εκκίνησης και αποκατάστασης . Από τον Πίνακα Ελέγχου, στις ιδιότητες συστήματος για προχωρημένους, μπορείτε να επιλέξετε τον τύπο dump που θέλετε να δημιουργήσετε σε περίπτωση σφάλματος: για παράδειγμα, ένα "Μικρό dump μνήμης (256 KB)" και τη διαδρομή όπου θα αποθηκευτεί.
Το σύστημα απαιτεί επίσης ένα αρχείο σελιδοποίησης στον τόμο εκκίνησης μεγέθους τουλάχιστον μερικών megabyte για την εγγραφή της ένδειξης. Στις σύγχρονες εκδόσεις των Windows, κάθε σφάλμα δημιουργεί ένα νέο αρχείο και διατηρείται ένα ιστορικό στον διαμορφωμένο φάκελο, επιτρέποντας την εύκολη ανασκόπηση προηγούμενων συμβάντων.
Μόλις δημιουργηθούν, υπάρχουν διάφοροι τρόποι για να επαληθεύσετε ότι τα dumps είναι σωστά. Ένα κλασικό βοηθητικό πρόγραμμα είναι το Dumpchk.exe , το οποίο σας επιτρέπει να ελέγξετε τη βασική ακεραιότητα του αρχείου και να εκτυπώσετε συνοπτικές πληροφορίες. Για πιο προηγμένη ανάλυση, χρησιμοποιούνται τα Εργαλεία εντοπισμού σφαλμάτων των Windows , συμπεριλαμβανομένων των WinDbg (γραφική διεπαφή) και KD (έκδοση γραμμής εντολών).
Μετά την εγκατάσταση του πακέτου εντοπισμού σφαλμάτων από τον ιστότοπο της Microsoft, τα εργαλεία συνήθως βρίσκονται σε έναν φάκελο όπως C:\Program Files\Debugging Tools for Windows . Από εκεί, μπορείτε να ανοίξετε μια γραμμή εντολών και να φορτώσετε ένα αρχείο dump χρησιμοποιώντας WinDbg ή KD, καθορίζοντας το αρχείο με την παράμετρο -z .
windbg -y <RutaSimbolos> -i <RutaBinarios> -z <RutaDump>
Η διαδρομή συμβόλου μπορεί να υποδεικνύει έναν διακομιστή συμβόλων με τοπική προσωρινή αποθήκευση , για παράδειγμα:
srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
Ενώ η δυαδική διαδρομή είναι συνήθως κάτι σαν C:\Windows\I386 ή τον φάκελο όπου έχουμε αντιγράψει τα εκτελέσιμα αρχεία συστήματος που αντιστοιχούν στην έκδοση που δημιούργησε το dump. Αυτό είναι σημαντικό επειδή Τα minidumps δεν περιλαμβάνουν όλα τα δυαδικά αρχεία, μόνο αναφορές σε αυτά, επομένως το πρόγραμμα εντοπισμού σφαλμάτων πρέπει να μπορεί να τα βρει.
Βασική ανάλυση μιας ένδειξης σφαλμάτων πυρήνα στα Windows
Μόλις φορτωθεί το dump χρησιμοποιώντας WinDbg ή KD, η ανάλυση ενός kernel crash dump είναι αρκετά παρόμοια με μια συνεδρία εντοπισμού σφαλμάτων μετά τη νεκροψία. Η πρώτη εντολή που εκτελούν σχεδόν όλοι είναι η `!analyze` , η οποία εκκινεί μια αυτοματοποιημένη ανάλυση και δημιουργεί μια αρχική αναφορά.
Η εντολή !analyze -show δείχνει το κώδικας ελέγχου σφαλμάτων και οι παράμετροί τουΕνώ !analyze -v Παράγει ένα πολύ πιο λεπτομερές αποτέλεσμα: ύποπτη ενότητα, στοίβα κλήσεων, πληροφορίες περιβάλλοντος και, σε πολλές περιπτώσεις, προτάσεις σχετικά με πιθανές αιτίες ή διαγνωστικά βήματα.
Για να συμπληρώσει αυτήν την ανάλυση, η εντολή .bugcheck εκτυπώνει ξανά τον κωδικό σφάλματος και τις σχετικές παραμέτρους, οι οποίες μπορούν να συγκριθούν με την αναφορά κώδικα ελέγχου σφαλμάτων της Microsoft για να διαπιστωθεί η ακριβής σημασία κάθε τιμής και οι τυπικές αιτίες.
Η εντολή lm N T (ενότητες λίστας) σας επιτρέπει να δείτε το Λίστα φορτωμένων ενοτήτων με τη διαδρομή, τις διευθύνσεις και την κατάστασή τουςΑυτό βοηθά στην επιβεβαίωση του εάν το πρόγραμμα οδήγησης που αναγνωρίζεται από την αυτοματοποιημένη ανάλυση βρίσκεται όντως στη μνήμη και ποια είναι η έκδοσή του. Αυτή η λίστα είναι ιδιαίτερα χρήσιμη όταν υποψιαζόμαστε προγράμματα οδήγησης τρίτων ή στοιχεία ασφαλείας που αλληλεπιδρούν με τον πυρήνα.
Αν θέλουμε, μπορούμε να απλοποιήσουμε τη φόρτωση των dumps δημιουργώντας ένα αρχείο δέσμης που λαμβάνει τη διαδρομή προς το dump και εκκινεί το KD ή το WinDbg με τις κατάλληλες παραμέτρους. Με αυτόν τον τρόπο, χρειάζεται μόνο να γράψουμε μια σύντομη εντολή που περιλαμβάνει μόνο τη θέση του αρχείου και το σενάριο αναλαμβάνει όλα τα υπόλοιπα.
Χρήση του WinDbg για βαθιά dumps πυρήνα
Για τα dump μνήμης σε λειτουργία πυρήνα, το WinDbg προσφέρει επίσης τη δυνατότητα εργασίας με πολλά αρχεία και συνεδρίες. Τα dump μπορούν να ανοιχτούν από τη γραμμή εντολών με -z ή από τη γραφική διεπαφή χρησιμοποιώντας το μενού Αρχείο > Άνοιγμα dump μνήμης ή τη συντόμευση πληκτρολογίου Ctrl+D.
Εάν το WinDbg είναι ήδη ανοιχτό σε παθητική λειτουργία, απλώς επιλέξτε το αρχείο στο παράθυρο διαλόγου "Άνοιγμα crash dump", καθορίζοντας τη διαδρομή ή περιηγούμενοι στον δίσκο. Μόλις φορτωθεί, μπορείτε να ξεκινήσετε την περίοδο λειτουργίας με μια εντολή "g" (Go) σε ορισμένα σενάρια ή να εκκινήσετε απευθείας τις αρχικές εντολές ανάλυσης.
Εκτός από το κλασικό !analyzeΣυνιστάται να εξοικειωθείτε με την ενότητα αναφοράς εντολών εντοπισμού σφαλμάτωνΑυτό περιγράφει όλες τις διαθέσιμες εντολές για την ανάγνωση εσωτερικών δομών, την εξέταση μνήμης, την ερμηνεία στοίβων και πολλά άλλα. Πολλές από αυτές τις τεχνικές εφαρμόζονται τόσο σε ζωντανές συνεδρίες όσο και σε αρχεία dump εκτός σύνδεσης.
Το WinDbg σας επιτρέπει επίσης να εργαστείτε με πολλαπλές παράλληλες λήψειςΜπορούμε να προσθέσουμε πολλαπλές παραμέτρους -z στη γραμμή εντολών, καθεμία ακολουθούμενη από διαφορετικό όνομα αρχείου, ή να προσθέσουμε νέους στόχους χρησιμοποιώντας την εντολή .opendumpΗ διόρθωση σφαλμάτων σε πολλαπλούς προορισμούς είναι χρήσιμη για τη σύγκριση επαναλαμβανόμενων αποτυχιών ή αλυσιδωτών συμβάντων.
Σε ορισμένα περιβάλλοντα, τα αρχεία dumps μνήμης συσκευάζονται σε αρχεία CAB για εξοικονόμηση χώρου ή διευκόλυνση της μετάδοσης. Το WinDbg μπορεί να ανοίξει απευθείας ένα .cab με ένα dump μέσα, τόσο χρησιμοποιώντας -z όσο και με .opendumpαν και θα διαβάσει Θα εξαγάγει μόνο ένα από τα αρχεία που έχουν εξαχθεί και δεν θα εξαγάγει άλλα αρχεία. που θα μπορούσαν να μπουν στο ίδιο πακέτο.
Crash dumps σε Unix και Linux: βοηθητικό πρόγραμμα, εργαλεία και απαιτήσεις
Στα συστήματα Unix και GNU/Linux, η φιλοσοφία είναι παρόμοια, αλλά το οικοσύστημα των εργαλείων διαφέρει σημαντικά. Οι περισσότεροι πυρήνες τύπου Unix προσφέρουν τη δυνατότητα αποθήκευσης ενός αντιγράφου μνήμης όταν συμβεί ένα καταστροφικό συμβάν , το οποίο είναι γνωστό ως core dump ή kernel crash dump.
Παρόλο που η κύρια χρήση τους παραμένει η ανάπτυξη πυρήνα και προγραμμάτων οδήγησης, αυτά τα dumps έχουν μια σαφή πτυχή ασφάλειας. Μια συντριβή μπορεί να προκληθεί από σφάλματα προγραμματισμού, αλλά και από αποτυχημένες κακόβουλες ενέργειες, προσπάθειες χειραγώγησης στοιχείων του συστήματος ή αδέξια εκμετάλλευση συνθηκών ανταγωνισμού.
Σε ένα καλά διαμορφωμένο σύστημα Unix, τα καθημερινά σφάλματα είναι ασυνήθιστα, αλλά όταν συμβαίνουν, συνιστάται να έχετε μια υποδομή dump, όπως το Kdump, το LKCD ή άλλες λύσεις που σας επιτρέπουν να καταγράφετε τη μνήμη του συστήματος. Ωστόσο, είναι σημαντικό να σταθμίσετε τόσο τη διαγνωστική αξία του dump όσο και τον κίνδυνο να περιέχει εξαιρετικά ευαίσθητα δεδομένα.
Ένα από τα πιο ολοκληρωμένα και ευρέως χρησιμοποιούμενα εργαλεία για αυτό το είδος ανάλυσης στο Linux είναι το crash , το οποίο αναπτύχθηκε αρχικά από την Red Hat. Αυτό το βοηθητικό πρόγραμμα έχει γίνει πρακτικά ένα de facto πρότυπο για την εξέταση dumps πυρήνα και επίσης για την ανάλυση συστημάτων που εκτελούνται.
Το Crash μπορεί να λειτουργήσει ενάντια στη ζωντανή μνήμη του συστήματος μέσω /dev/mem ή, σε διανομές Red Hat και παράγωγων, χρησιμοποιώντας τη συγκεκριμένη συσκευή /dev/crashΑκόμα κι έτσι, είναι συνήθης πρακτική να τροφοδοτείτε το εργαλείο με ένα αρχείο ένδειξης σφαλμάτων που δημιουργείται από μηχανισμούς όπως Kdump, αρχείο δημιουργίας δεδομένων, Αποθήκευση δίσκου ή αρχιτεκτονικά ειδικά αρχεία καταγραφής όπως s390/s390x ή xendump σε εικονικά περιβάλλοντα.
Ο ρόλος του crash και η σημασία του vmlinux στο Linux
Το βοηθητικό πρόγραμμα crash δημιουργήθηκε, εν μέρει, για να ξεπεράσει τους περιορισμούς της χρήσης gdb απευθείας στο /proc/kcoreΜεταξύ άλλων, η πρόσβαση σε αυτήν την ψευδοεικόνα μνήμης μπορεί να είναι περιορισμένη και, επιπλέον, ορισμένες επιλογές μεταγλώττισης πυρήνα δυσκολεύουν την σωστή ερμηνεία των εσωτερικών δομών εάν έχουμε μόνο το συμπιεσμένο εκτελέσιμο δυαδικό αρχείο.
Για να λειτουργήσει σωστά η διαδικασία crash, απαιτούνται δύο βασικά στοιχεία: ένα μεταγλωττισμένο αρχείο vmlinux με σύμβολα εντοπισμού σφαλμάτων (συνήθως με σημαίες όπως -g) και το ίδιο το αρχείο dump του πυρήνα. Αυτός ο συνδυασμός επιτρέπει στο εργαλείο να αντιστοιχίζει διευθύνσεις μνήμης σε συναρτήσεις, δομές και γραμμές κώδικα.
Είναι σημαντικό να γίνει διάκριση μεταξύ vmlinux και vmlinuzΣτα περισσότερα συστήματα, είναι ορατό μόνο το vmlinux, το οποίο είναι μια συμπιεσμένη, εκκινήσιμη έκδοση του πυρήνα. Το Crash απαιτεί το συμβολικά αποσυμπιεσμένο vmlinux. Χωρίς αυτό, κατά την προσπάθεια φόρτωσης ενός dump ή /dev/mem Θα συναντήσουμε σφάλματα του τύπου δεν είναι δυνατή η εύρεση του εκκινημένου πυρήνα — παρακαλώ εισάγετε το όρισμα namelist.
Παρόλο που είναι δυνατή η χειροκίνητη εξαγωγή του vmlinuz, η διαδικασία δεν είναι πάντα απλή και, στην πράξη, είναι συχνά πολύ πιο βολικό να επαναμεταγλωττίσετε τον πυρήνα για να αποκτήσετε ταυτόχρονα και το vmlinux και το vmlinuz. Σε σοβαρά περιβάλλοντα διαχείρισης, είναι καλή πρακτική να διατηρείτε ένα ξεχωριστό πακέτο vmlinuz για κάθε ανεπτυγμένη έκδοση πυρήνα, ειδικά για αυτές τις περιπτώσεις.
Μόλις πληρούνται οι απαιτήσεις, η εκτέλεση crash σε ένα dump είναι σχετικά απλή: καθορίζετε το κατάλληλο vmlinux και το αρχείο dump και το εργαλείο ανοίγει μια διαδραστική συνεδρία από την οποία μπορείτε να εξερευνήσετε δομές πυρήνα, να παραθέσετε διεργασίες, να δείτε στοίβες κλήσεων και να εξαγάγετε πληροφορίες εγκληματολογίας . Όσοι θέλουν να εμβαθύνουν περισσότερο μπορούν να συμβουλευτούν εξειδικευμένη τεκμηρίωση, όπως το γνωστό τεχνικό whitepaper crash.
Περιορισμοί του /dev/mem και των πρώτων προσεγγίσεων στο Linux
Πριν καταφύγουν σε συγκεκριμένα εργαλεία, πολλοί διαχειριστές έχουν ιστορικά προσπαθήσει να αποκτήσουν μια ένδειξη μνήμης. ανάγνωση απευθείας από τη συσκευή /dev/memΑυτή η προσέγγιση φαινόταν απλή: χρησιμοποιήστε ένα εργαλείο όπως memdump (το οποίο μεταφέρει αυτήν τη συσκευή στο STDOUT) ή τραβάει από dd if=/dev/mem of=volcado.mem.
Ωστόσο, οι σύγχρονοι πυρήνες προσφέρουν επιλογές μεταγλώττισης όπως CONFIG_STRICT_DEVMEMπου περιορίζουν σοβαρά την πρόσβαση από τον χώρο χρήστη σε /dev/memΤο τυπικό αποτέλεσμα είναι ότι η ανάγνωση διακόπτεται μετά από ένα μικρό μπλοκ (π.χ., 1 MB) ή, στη χειρότερη περίπτωση, ένα σφάλμα σε αυτήν την αλληλεπίδραση μπορεί να καταλήξει σε ένα πυρήνα πανικού άμεση και επανεκκίνηση του μηχανήματος.
Αυτή η προστασία έχει απόλυτη λογική από άποψη ασφάλειας, αλλά μας αναγκάζει να αναζητήσουμε άλλους τρόπους για να αποκτήσουμε ένα αξιόπιστο και πλήρες αρχείο dump χωρίς να βασιζόμαστε αποκλειστικά σε γενικές συσκευές που δεν είναι πλέον τόσο προσβάσιμες όσο πριν.
Ως εκ τούτου, η τρέχουσα τάση είναι να βασιζόμαστε σε συγκεκριμένες ενότητες ή ενσωματωμένες υποδομές crash dump, αντί να προσπαθούμε απλώς να "αποσπάσουμε μνήμη" με εργαλεία χώρου χρήστη που δεν έχουν σχεδιαστεί για να συνυπάρχουν με τις σύγχρονες πολιτικές προστασίας πυρήνα.
LiME Forensics: Εξαγωγή Μνήμης σε Linux και Android
Μια πολύ ισχυρή εναλλακτική λύση στον κόσμο της εγκληματολογίας είναι το LiME (Linux Memory Extractor) , μια ενότητα πυρήνα που έχει σχεδιαστεί ακριβώς για να καταγράφει την πτητική μνήμη με ελεγχόμενο τρόπο και χωρίς τους περιορισμούς που επηρεάζουν το /dev/mem. Το LiME εκτελείται στον χώρο του πυρήνα, επομένως μπορεί να έχει πρόσβαση στη μνήμη RAM πολύ πιο άμεσα.
Το LiME διανέμεται με τον πηγαίο κώδικά του και μεταγλωττίζεται σε σχέση με το κεφαλίδες πυρήνα σε χρήσηΗ διαδικασία μεταγλώττισης δημιουργεί μια ενότητα .ko συγκεκριμένα για την έκδοση πυρήνα στην οποία θα φορτωθεί. Μόλις μεταγλωττιστεί, μπορούμε να το επαληθεύσουμε με εργαλεία όπως file για να διασφαλίσουμε ότι η ενότητα ELF που αντιστοιχεί στην αρχιτεκτονική μας έχει δημιουργηθεί σωστά.
Για να χρησιμοποιήσετε το LiME, απλώς φορτώστε την ενότητα με insmod από τη ρίζα και να του περάσετε τις κατάλληλες επιλογές, για παράδειγμα καθορίζοντας ένα προορισμός dump δικτύου χρησιμοποιώντας TCP και ακατέργαστη μορφή:
insmod lime-3.x.y.ko "path=tcp:4444 format=raw"
Παράλληλα, στον υπολογιστή που θα λάβει το dump, ακούμε στην ρυθμισμένη θύρα χρησιμοποιώντας ένα εργαλείο όπως ncανακατεύθυνση της εξόδου σε ένα αρχείο:
nc <IP_origen> 4444 > volcado.mem
Μετά από λίγα λεπτά, ανάλογα με την ποσότητα μνήμης RAM και την απόδοση του δικτύου, θα έχουμε ένα αρχείο του οποίου το μέγεθος ταιριάζει με τη φυσική μνήμη του συστήματος προέλευσης. Πρόκειται για μια πλήρη συλλογή δεδομένων RAM που μπορούμε να αναλύσουμε με εργαλεία εγκληματολογίας ή ακόμα και με συμβολοσειρές ή άλλα βοηθητικά προγράμματα ως πρώτο βήμα για τον εντοπισμό ενδιαφερόντων συμβολοσειρών.
Αποτυχίες διεργασιών και κίνδυνοι έκθεσης δεδομένων
Ένα πλήρες dump πυρήνα είναι εξαιρετικά κατατοπιστικό, αλλά μπορεί επίσης να είναι υπερβολικό όταν μας ενδιαφέρει μόνο μια συγκεκριμένη διεργασία. Σε αυτήν την περίπτωση, είναι πολύ λογικό να καταφύγουμε σε... μεμονωμένες εντολές διεργασίας χρησιμοποιώντας εργαλεία όπως gcore σε Unix/Linux.
Αυτά τα dumps ανά διεργασία είναι πολύ μικρότερα και πιο διαχειρίσιμα και σας επιτρέπουν να εστιάσετε την ανάλυσή σας σε συγκεκριμένες εφαρμογές, όπως ένα πρόγραμμα-πελάτη ανταλλαγής μηνυμάτων (π.χ., Skype) ή ένα πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου (π.χ., Thunderbird), όπου είναι σχετικά εύκολο να βρείτε κωδικούς πρόσβασης απλού κειμένου, διακριτικά περιόδου σύνδεσης ή δεδομένα επαφών εξερευνώντας συμβολοσειρές μνήμης.
Από την άποψη της ανάπτυξης, αυτά τα αρχεία πυρήνα βοηθούν στον εντοπισμό σφαλμάτων προγραμματισμού, διαρροών μνήμης ή ασυνεπών καταστάσεων σε μια υπηρεσία. Ωστόσο, από την άποψη της ασφάλειας, το πρόβλημα προκύπτει όταν αυτά τα αρχεία δημιουργούνται τακτικά και αποθηκεύονται σε τοποθεσίες προσβάσιμες σε άλλους χρήστες , είτε στο ίδιο το σύστημα είτε σε κοινόχρηστους πόρους δικτύου.
Εάν ένας χρήστης προγραμματίσει, για παράδειγμα, μια εργασία cron Καταγράφοντας περιοδικά αρχεία ευαίσθητων διεργασιών και αφήνοντάς τα σε έναν παγκοσμίως αναγνώσιμο κατάλογο, ένας εισβολέας ανοίγει μια τεράστια πόρτα στην έκθεση κρίσιμων πληροφοριών. Σε πολλά σενάρια ελέγχου, η ανάλυση αυτών των αρχείων επιτρέπει σε έναν εισβολέα να ανακτήσει τα δεδομένα του. διαπιστευτήρια, λίστες επαφών, ιστορικό επικοινωνίας και άλλα προσωπικά δεδομένα με σχετικά χαμηλή προσπάθεια.
Επομένως, σε κάθε σοβαρό έλεγχο ενός συστήματος Unix, συνιστάται να αφιερώνετε λίγα λεπτά για να ελέγχετε εάν δημιουργούνται dumps (πλήρη ή μερικά), πού αποθηκεύονται, ποια δικαιώματα έχουν και εάν υπάρχει κάποια αυτοματοποιημένη διαδικασία που αφήνει αντίγραφα μνήμης σε κοντινή απόσταση από μη εξουσιοδοτημένους χρήστες.
Μεταγενέστερη ανάλυση των dumps στο FreeBSD με kgdb
Στον κόσμο του BSD, και συγκεκριμένα στο FreeBSD, η προσέγγιση της μεταθανάτιας ανάλυσης περιλαμβάνει Ενεργοποίηση crash dumps στο σύστημα και μεταγλώττιση πυρήνα με σύμβολα εντοπισμού σφαλμάτωνΑυτό ελέγχεται από τον κατάλογο διαμόρφωσης πυρήνα, συνήθως στο /usr/src/sys/<arq>/conf.
Στο αντίστοιχο αρχείο διαμόρφωσης, η δημιουργία συμβόλων μπορεί να ενεργοποιηθεί με μια γραμμή όπως αυτή:
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
Μετά την τροποποίηση της διαμόρφωσης, ο πυρήνας πρέπει να μεταγλωττιστεί ξανά. Ορισμένα αντικείμενα θα αναγεννηθούν (όπως π.χ. trap.o) λόγω της αλλαγής στα αρχεία δημιουργίας. Ο στόχος είναι να αποκτήσετε έναν πυρήνα με το τον ίδιο κώδικα με αυτόν που έχει προβλήματα, αλλά προσθέτοντας τις απαραίτητες πληροφορίες εντοπισμού σφαλμάτωνΣυνιστάται να συγκρίνετε τα παλιά και τα νέα μεγέθη χρησιμοποιώντας την εντολή size για να διασφαλιστεί ότι δεν έχουν υπάρξει απροσδόκητες αλλαγές στο δυαδικό αρχείο.
Μόλις εγκατασταθεί ο πυρήνας με τα σύμβολα, μπορούμε να εξετάσουμε τα dumps με το kgdb όπως περιγράφεται στην επίσημη τεκμηρίωση. Δεν είναι όλα τα σύμβολα πλήρη και ορισμένες συναρτήσεις μπορεί να εμφανίζονται χωρίς αριθμούς γραμμών ή πληροφορίες ορισμάτων, αλλά στις περισσότερες περιπτώσεις το επίπεδο λεπτομέρειας είναι επαρκές για την ανίχνευση του προβλήματος.
Δεν υπάρχει απόλυτη εγγύηση ότι η ανάλυση θα επιλύσει όλα τα περιστατικά, αλλά στην πράξη, αυτή η στρατηγική λειτουργεί αρκετά καλά σε ένα υψηλό ποσοστό σεναρίων , ειδικά όταν τα crash dumps συνδυάζονται με μια καλή ανασκόπηση των πρόσφατων αλλαγών στο σύστημα.
Βέλτιστες πρακτικές για την ανάλυση και την τεκμηρίωση σφαλμάτων πυρήνα
Ανεξάρτητα από το λειτουργικό σύστημα, η ανάλυση dump του πυρήνα συνήθως καταλήγει να αναφέρεται σε τεχνική τεκμηρίωση, βάσεις γνώσεων, εξειδικευμένα φόρουμ ή ακόμα και στον ίδιο τον πηγαίο κώδικα του πυρήνα για την ερμηνεία μηνυμάτων, κωδικών σφαλμάτων και άγνωστων συμβόλων.
Στο Linux, είναι πολύ χρήσιμο να βασίζεστε στο επίσημο δέντρο πηγαίου κώδικα, στην ενσωματωμένη τεκμηρίωση και στους πόρους της κοινότητας. Πολλά μηνύματα σφάλματος πυρήνα μπορούν να εντοπιστούν στο ακριβές αρχείο από όπου προέρχονται, κάτι που βοηθά στην κατανόηση του πλαισίου στο οποίο ενεργοποιείται ένα συγκεκριμένο BUG() ή WARN().
Στα Windows, η τεκμηρίωση της Microsoft, η βάση γνώσεων (KB) και τα τεχνικά φόρουμ παρέχουν λεπτομερείς εξηγήσεις για τους κωδικούς ελέγχου σφαλμάτων, προτάσεις αντιμετώπισης προβλημάτων και γνωστά μοτίβα σφαλμάτων . Ο συνδυασμός αυτών των πληροφοριών με τις αναφορές από το !analyze -v καθιστά δυνατή την ανάπτυξη ενός εύλογου σχεδίου μετριασμού.
Η πραγματική αξία ενός crash dump αναδεικνύεται όταν όλες αυτές οι πληροφορίες διασταυρώνονται με μια στέρεη κατανόηση του λειτουργικού συστήματος και του συγκεκριμένου περιβάλλοντος όπου σημειώθηκε η βλάβη . Μόνο τότε μπορούν να αναπτυχθούν βιώσιμες λύσεις και, πάνω απ 'όλα, να αποτραπεί η επανάληψη του ίδιου προβλήματος στο μέλλον με πιο σοβαρές συνέπειες.
Η ανάλυση dump του πυρήνα είναι, τελικά, ένας συνδυασμός επιστήμης και δεξιοτεχνίας: απαιτεί κατάλληλα εργαλεία, προηγούμενη διαμόρφωση (σύμβολα, επιλογές dump, ασφαλή αποθήκευση) και αρκετή εμπειρία στην ανάγνωση στοίβων, δομών και κωδικών σφαλμάτων. Η εξειδίκευση σε αυτές τις τεχνικές μας επιτρέπει όχι μόνο να εντοπίζουμε σφάλματα σε πολύπλοκα περιστατικά, αλλά και να αυξάνουμε δραματικά την ασφάλεια και την ανθεκτικότητα των συστημάτων που διαχειριζόμαστε.
Δείκτης
- 1 Τι είναι ένα dump μνήμης πυρήνα και γιατί αξίζει να αναλυθεί;
- 2 Τύποι μνήμης dumps στα Windows και η χρησιμότητά τους
- 3 Ρύθμιση παραμέτρων και άνοιγμα dumps μνήμης στα Windows με WinDbg και KD
- 4 Βασική ανάλυση μιας ένδειξης σφαλμάτων πυρήνα στα Windows
- 5 Χρήση του WinDbg για βαθιά dumps πυρήνα
- 6 Crash dumps σε Unix και Linux: βοηθητικό πρόγραμμα, εργαλεία και απαιτήσεις
- 7 Ο ρόλος του crash και η σημασία του vmlinux στο Linux
- 8 Περιορισμοί του /dev/mem και των πρώτων προσεγγίσεων στο Linux
- 9 LiME Forensics: Εξαγωγή Μνήμης σε Linux και Android
- 10 Αποτυχίες διεργασιών και κίνδυνοι έκθεσης δεδομένων
- 11 Μεταγενέστερη ανάλυση των dumps στο FreeBSD με kgdb
- 12 Βέλτιστες πρακτικές για την ανάλυση και την τεκμηρίωση σφαλμάτων πυρήνα