Firmware Analysis
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
Η συλλογή πληροφοριών είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της σύνθεσης μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων σχετικά με:
Την αρχιτεκτονική CPU και το λειτουργικό σύστημα που εκτελεί
Λεπτομέρειες bootloader
Διάταξη υλικού και φύλλα δεδομένων
Μετρήσεις κώδικα και τοποθεσίες πηγής
Εξωτερικές βιβλιοθήκες και τύπους άδειας
Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις
Αρχιτεκτονικά και ροογράμματα
Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
Για αυτόν τον σκοπό, τα εργαλεία ανοιχτής πηγής (OSINT) είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το Coverity Scan και το Semmle’s LGTM προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
Η απόκτηση του firmware μπορεί να προσεγγιστεί μέσω διαφόρων μέσων, καθένα με το δικό του επίπεδο πολυπλοκότητας:
Άμεσα από την πηγή (προγραμματιστές, κατασκευαστές)
Κατασκευάζοντας το από τις παρεχόμενες οδηγίες
Κατεβάζοντας από επίσημες ιστοσελίδες υποστήριξης
Χρησιμοποιώντας Google dork ερωτήματα για την εύρεση φιλοξενούμενων αρχείων firmware
Πρόσβαση σε cloud storage απευθείας, με εργαλεία όπως το S3Scanner
Παρεμβολή ενημερώσεων μέσω τεχνικών man-in-the-middle
Εξαγωγή από τη συσκευή μέσω συνδέσεων όπως UART, JTAG, ή PICit
Sniffing για αιτήματα ενημερώσεων εντός της επικοινωνίας της συσκευής
Αναγνώριση και χρήση σκληρά κωδικοποιημένων σημείων ενημέρωσης
Dumping από τον bootloader ή το δίκτυο
Αφαίρεση και ανάγνωση του τσιπ αποθήκευσης, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
Τώρα που έχετε το firmware, πρέπει να εξαγάγετε πληροφορίες σχετικά με αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την εντροπία της εικόνας με binwalk -E <bin>
, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε αρχεία που είναι ενσωματωμένα μέσα στο firmware:
File/Data Carving & Recovery ToolsΉ binvis.io (code) για να επιθεωρήσετε το αρχείο.
Με τα προηγούμενα εργαλεία όπως το binwalk -ev <bin>
θα έπρεπε να έχετε μπορέσει να εξάγετε το σύστημα αρχείων.
Το Binwalk συνήθως το εξάγει μέσα σε ένα φάκελο που ονομάζεται όπως ο τύπος του συστήματος αρχείων, ο οποίος συνήθως είναι ένας από τους εξής: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Μερικές φορές, το binwalk δεν θα έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να βρείτε την απόσταση του συστήματος αρχείων και να carve το συμπιεσμένο σύστημα αρχείων από το δυαδικό και χειροκίνητα να εξάγετε το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
Εκτελέστε την παρακάτω 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
για την εξαγωγή του συστήματος αρχείων:
Μετά, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διαφορετικές εντολές για την χειροκίνητη εξαγωγή των περιεχομένων.
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δαίμονες δικτύου, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες διακομιστή ενημερώσεων, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
Κύριες τοποθεσίες και αντικείμενα προς επιθεώρηση περιλαμβάνουν:
etc/shadow και etc/passwd για διαπιστευτήρια χρηστών
Πιστοποιητικά SSL και κλειδιά στο etc/ssl
Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
Κοινές ιστοσελίδες και δυαδικά IoT συσκευών
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
LinPEAS και Firmwalker για αναζήτηση ευαίσθητων πληροφοριών
The Firmware Analysis and Comparison Tool (FACT) για ολοκληρωμένη ανάλυση firmware
FwAnalyzer, ByteSweep, ByteSweep-go, και EMBA για στατική και δυναμική ανάλυση
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξεταστούν για ευπάθειες. Εργαλεία όπως το checksec.sh για δυαδικά Unix και το PESecurity για δυαδικά Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν.
Η διαδικασία προσομοίωσης firmware επιτρέπει τη δυναμική ανάλυση είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του endianness και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί κανείς να χρησιμοποιήσει την εντολή:
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία εξομοίωσης:
Για MIPS (big-endian), χρησιμοποιείται το qemu-mips
, και για little-endian δυαδικά, η επιλογή είναι το qemu-mipsel
.
Για δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον προσομοιωτή qemu-arm
να χρησιμοποιείται για την προσομοίωση.
Εργαλεία όπως το Firmadyne, το Firmware Analysis Toolkit και άλλα, διευκολύνουν την πλήρη προσομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στην δυναμική ανάλυση.
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το σύστημα αρχείων, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και τις υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τη ρύθμιση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
Λειτουργικά συστήματα όπως το AttifyOS και το EmbedOS παρέχουν προ-ρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
AttifyOS: Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και pentesting συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προ-ρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
EmbedOS: Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 με προφορτωμένα εργαλεία δοκιμών ασφάλειας firmware.
Για να εξασκηθείτε στην ανακάλυψη ευπαθειών σε firmware, χρησιμοποιήστε τα παρακάτω ευάλωτα έργα firmware ως σημείο εκκίνησης.
OWASP IoTGoat
Το Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)