Firmware Analysis
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Το Firmware είναι το ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ευπαθειών ασφαλείας.
Η συλλογή πληροφοριών είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της δομής μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων για:
Την αρχιτεκτονική της CPU και το λειτουργικό σύστημα που εκτελεί
Συγκεκριμένες πληροφορίες για τον εκκινητή
Τη διάταξη του υλικού και τις φύλλα τεκμηρίωσης
Μετρήσεις κώδικα και τοποθεσίες πηγαίου κώδικα
Εξωτερικές βιβλιοθήκες και τύπους αδειών
Ιστορικά ενημερώσεων και πιστοποιήσεις ρυθμίσεων
Αρχιτεκτονικά και διαγράμματα ροής
Αξιολογήσεις ασφαλείας και εντοπισμένες ευπάθειες
Για αυτόν τον σκοπό, τα εργαλεία ανοικτής πηγής πληροφορίας (OSINT) είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μηχανικών ελέγχων χειροκίνητων και αυτοματοποιημένων. Εργαλεία όπως το Coverity Scan και το LGTM της Semmle προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εντοπισμό πιθανών προβλημάτων.
Η απόκτηση του firmware μπορεί να γίνει μέσω διαφόρων μέσων, καθένα με το δικό του επίπεδο πολυπλοκότητας:
Απευθείας από την πηγή (προγραμματιστές, κατασκευαστές)
Κατασκευάζοντάς το ακολουθώντας τις παρεχόμενες οδηγίες
Λήψη από επίσημους ιστότοπους υποστήριξης
Χρήση ερωτημάτων Google dork για την εύρεση φιλοξενούμενων αρχείων firmware
Πρόσβαση στην αποθήκευση στο cloud απευθείας, με εργαλεία όπως το S3Scanner
Παρεμβολή σε ενημερώσεις μέσω τεχνικών man-in-the-middle
Εξαγωγή από τη συσκευή μέσω συνδέσεων όπως UART, JTAG, ή PICit
Καταγραφή αιτημάτων ενημέρωσης εντός της επικοινωνίας της συσκευής
Αναγνώριση και χρήση σκληροκωδικοποιημένων σημείων ενημέρωσης
Ανάκτηση από τον εκκινητή ή το δίκτυο
Αφαίρεση και ανάγνωση του επιτραπέζιου τσιπ, όταν τίποτα άλλο αποτύχει, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
Εάν δε βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την εντροπία της εικόνας με την εντολή binwalk -E <bin>
. Αν η εντροπία είναι χαμηλή, τότε πιθανότατα δεν είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε αρχεία που έχουν ενσωματωθεί μέσα στο firmware:
File/Data Carving & Recovery ToolsΉ το binvis.io (κώδικας) για να επιθεωρήσετε το αρχείο.
Με τα προηγούμενα εργαλεία όπως binwalk -ev <bin>
θα πρέπει να έχετε καταφέρει να εξάγετε το σύστημα αρχείων.
Το Binwalk συνήθως το εξάγει μέσα σε ένα φάκελο με το όνομα του τύπου του συστήματος αρχείων, το οποίο συνήθως είναι ένα από τα παρακάτω: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Μερικές φορές, το binwalk δεν έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να βρείτε τη θέση του συστήματος αρχείων και να αναγνωρίσετε το συμπιεσμένο σύστημα αρχείων από το δυαδικό αρχείο και εξάγετε χειροκίνητα το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
Εκτελέστε την ακόλουθη εντολή dd για να ανακτήσετε το σύστημα αρχείων Squashfs.
Εναλλακτικά, μπορεί να εκτελεστεί και η παρακάτω εντολή.
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
Για το squashfs (που χρησιμοποιείται στο παραπάνω παράδειγμα)
$ unsquashfs dir.squashfs
Τα αρχεία θα βρίσκονται στον κατάλογο "squashfs-root
" μετά.
Αρχεία αρχείων CPIO
$ cpio -ivd --no-absolute-filenames -F <bin>
Για συστήματα αρχείων jffs2
$ jefferson rootfsfile.jffs2
Για συστήματα αρχείων ubifs με NAND flash
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
Αφού αποκτηθεί το firmware, είναι ουσιώδες να αναλυθεί για την κατανόηση της δομής του και των πιθανών ευπαθειών του. Αυτή η διαδικασία περιλαμβάνει τη χρήση διαφόρων εργαλείων για την ανάλυση και εξαγωγή αξιόλογων δεδομένων από την εικόνα του firmware.
Παρέχεται ένα σύνολο εντολών για την αρχική επιθεώρηση του δυαδικού αρχείου (αναφέρεται ως <bin>
). Αυτές οι εντολές βοηθούν στην αναγνώριση τύπων αρχείων, την εξαγωγή συμβολοσειρών, την ανάλυση δυαδικών δεδομένων και την κατανόηση των λεπτομερειών των διαμερισμάτων και του συστήματος αρχείων:
Για να αξιολογήσετε την κατάσταση της κρυπτογράφησης της εικόνας, ο έλεγχος γίνεται με την εντολή binwalk -E <bin>
. Η χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ η υψηλή εντροπία υποδηλώνει πιθανή κρυπτογράφηση ή συμπίεση.
Για την εξαγωγή ενσωματωμένων αρχείων, συνιστώνται εργαλεία και πόροι όπως το έγγραφο file-data-carving-recovery-tools και το binvis.io για τον έλεγχο αρχείων.
Χρησιμοποιώντας την εντολή binwalk -ev <bin>
, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν κατάλογο που ονομάζεται μετά τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το binwalk αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω λείπουντος μαγικού byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του binwalk
για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενο από την εντολή dd
για την ανάγλυψη του συστήματος αρχείων:
Με το σύστημα αρχείων εξαγμένο, ξεκινά η αναζήτηση ευπαθειών ασφάλειας. Προσέχετε τους ανασφαλείς δαίμονες δικτύου, σκληρούς κωδικούς πρόσβασης, σημεία API, λειτουργίες ενημέρωσης διακομιστή, μη μεταγλωττισμένο κώδικα, scripts εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
Κύριες τοποθεσίες και στοιχεία προς έλεγχο περιλαμβάνουν:
etc/shadow και etc/passwd για διαπιστευτήρια χρηστών
Πιστοποιητικά SSL και κλειδιά στο etc/ssl
Αρχεία ρυθμίσεων και scripts για πιθανές ευπάθειες
Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
Κοινοί διακομιστές ιστοσελίδων και δυαδικά συσκευών IoT
Πολλά εργαλεία βοηθούν στον εντοπισμό ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
LinPEAS και Firmwalker για αναζήτηση ευαίσθητων πληροφοριών
Το Εργαλείο Ανάλυσης και Σύγκρισης Firmware (FACT) για σφαιρική ανάλυση firmware
FwAnalyzer, ByteSweep, ByteSweep-go και EMBA για στατική και δυναμική ανάλυση
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξεταστούν προσεκτικά για ευπαθείς ευπαθείς. Εργαλεία όπως το checksec.sh για δυαδικά Unix και το PESecurity για δυαδικά Windows βοηθούν στον εντοπισμό μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούνται.
Η διαδικασία εξομοίωσης firmware επιτρέπει τη δυναμική ανάλυση είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με την ίδια αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προεγκατεστημένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η endianness και η αρχιτεκτονική CPU του προγράμματος.
Για να εξομοιώσετε ένα δυαδικό αρχιτεκτονικής MIPS, μπορείτε να χρησιμοποιήσετε την εντολή:
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία προσομοίωσης:
Για δυαδικά αρχιτεκτονικής ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή qemu-arm
να χρησιμοποιείται για την εξομοίωση.
Εργαλεία όπως το Firmadyne, το Firmware Analysis Toolkit, και άλλα, διευκολύνουν την πλήρη εξομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι ουσιώδες να διατηρείτε πρόσβαση στο κέλυφος του λειτουργικού συστήματος και το σύστημα αρχείων. Η εξομοίωση ενδέχεται να μην αντικατοπτρίζει τέλεια τις αλληλεπιδράσεις με το υλικό, επομένως ενδέχεται να απαιτούνται περιοδικές επανεκκινήσεις της εξομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται τις αποκαλυφθείσες ιστοσελίδες και υπηρεσίες δικτύου, και να εξετάζει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας του firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών πίσω πόρτας.
Η ανάλυση χρόνου εκτέλεσης περιλαμβάνει την αλληλεπίδραση με ένα διεργασία ή δυαδικό στο περιβάλλον λειτουργίας του, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida, και το Ghidra για τον καθορισμό σημείων ανακοπής και την αναγνώριση ευπαθειών μέσω της τεχνικής του fuzzing και άλλων τεχνικών.
Η ανάπτυξη μιας απόδειξης-προς-τούτο για εντοπισμένες ευπαθείες απαιτεί μια βαθιά κατανόηση της στόχευσης αρχιτεκτονικής και την προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες χρόνου εκτέλεσης δυαδικών συστημάτων ενσωματωμένων συστημάτων είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) ενδέχεται να είναι απαραίτητες.
Λειτουργικά συστήματα όπως το AttifyOS και το EmbedOS παρέχουν προ-διαμορφωμένα περιβάλλοντα για τον έλεγχο ασφάλειας του firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
AttifyOS: Το AttifyOS είναι μια διανομή που σκοπό έχει να σας βοηθήσει να πραγματοποιήσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύτιμο χρόνο παρέχοντας ένα προ-διαμορφωμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
EmbedOS: Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία ελέγχου ασφαλείας firmware.
Για να πρακτικά ανακαλύψετε ευπαθείες σε firmware, χρησιμοποιήστε τα παρακάτω ευπαθή έργα firmware ως αφετηρία.
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)