.. | ||
bootloader-testing.md | ||
firmware-integrity.md | ||
README.md |
Ανάλυση Firmware
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Εισαγωγή
Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
Συλλογή Πληροφοριών
Η συλλογή πληροφοριών είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της σύνθεσης μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων σχετικά με:
- Την αρχιτεκτονική CPU και το λειτουργικό σύστημα που εκτελεί
- Λεπτομέρειες bootloader
- Διάταξη υλικού και φύλλα δεδομένων
- Μετρήσεις κώδικα και τοποθεσίες πηγής
- Εξωτερικές βιβλιοθήκες και τύπους αδειών
- Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις
- Αρχιτεκτονικά και ροής διαγράμματα
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
Για αυτό το σκοπό, τα εργαλεία ανοιχτής πηγής (OSINT) είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το Coverity Scan και το Semmle’s LGTM προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
Απόκτηση του Firmware
Η απόκτηση του firmware μπορεί να προσεγγιστεί μέσω διαφόρων μέσων, το καθένα με το δικό του επίπεδο πολυπλοκότητας:
- Άμεσα από την πηγή (προγραμματιστές, κατασκευαστές)
- Κατασκευάζοντας το από τις παρεχόμενες οδηγίες
- Κατεβάζοντας από επίσημες ιστοσελίδες υποστήριξης
- Χρησιμοποιώντας Google dork ερωτήματα για την εύρεση φιλοξενούμενων αρχείων firmware
- Πρόσβαση σε cloud storage απευθείας, με εργαλεία όπως το S3Scanner
- Παρεμβολή ενημερώσεων μέσω τεχνικών man-in-the-middle
- Εξαγωγή από τη συσκευή μέσω συνδέσεων όπως UART, JTAG, ή PICit
- Sniffing για αιτήματα ενημερώσεων εντός της επικοινωνίας της συσκευής
- Αναγνώριση και χρήση σκληρά κωδικοποιημένων σημείων ενημέρωσης
- Dumping από το bootloader ή το δίκτυο
- Αφαίρεση και ανάγνωση του τσιπ αποθήκευσης, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
Ανάλυση του firmware
Τώρα που έχετε το firmware, πρέπει να εξαγάγετε πληροφορίες σχετικά με αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
file <bin>
strings -n8 <bin>
strings -tx <bin> #print offsets in hex
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την εντροπία της εικόνας με το binwalk -E <bin>
, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε αρχεία που είναι ενσωματωμένα μέσα στο firmware:
{% content-ref url="../../forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
Ή binvis.io (code) για να επιθεωρήσετε το αρχείο.
Λήψη του Συστήματος Αρχείων
Με τα προηγούμενα εργαλεία όπως το binwalk -ev <bin>
θα έπρεπε να έχετε μπορέσει να εξάγετε το σύστημα αρχείων.
Το Binwalk συνήθως το εξάγει μέσα σε ένα φάκελο που ονομάζεται όπως ο τύπος του συστήματος αρχείων, ο οποίος συνήθως είναι ένας από τους εξής: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Χειροκίνητη Εξαγωγή Συστήματος Αρχείων
Μερικές φορές, το binwalk δεν θα έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να βρείτε την απόσταση του συστήματος αρχείων και να carve το συμπιεσμένο σύστημα αρχείων από το δυαδικό και χειροκίνητα να εξάγετε το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
Εκτελέστε την παρακάτω dd εντολή για την εξαγωγή του συστήματος αρχείων Squashfs.
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
Εναλλακτικά, η ακόλουθη εντολή θα μπορούσε επίσης να εκτελεστεί.
$ 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, είναι απαραίτητο να το αναλύσουμε για να κατανοήσουμε τη δομή του και τις πιθανές ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διαφόρων εργαλείων για την ανάλυση και την εξαγωγή πολύτιμων δεδομένων από την εικόνα του firmware.
Εργαλεία Αρχικής Ανάλυσης
Ένα σύνολο εντολών παρέχεται για την αρχική επιθεώρηση του δυαδικού αρχείου (αναφέρεται ως <bin>
). Αυτές οι εντολές βοηθούν στην αναγνώριση τύπων αρχείων, στην εξαγωγή συμβολοσειρών, στην ανάλυση δυαδικών δεδομένων και στην κατανόηση των λεπτομερειών του διαμερίσματος και του συστήματος αρχείων:
file <bin>
strings -n8 <bin>
strings -tx <bin> #prints offsets in hexadecimal
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η εντροπία με το binwalk -E <bin>
. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση.
Για την εξαγωγή ενσωματωμένων αρχείων, προτείνονται εργαλεία και πόροι όπως η τεκμηρίωση file-data-carving-recovery-tools και το binvis.io για επιθεώρηση αρχείων.
Εξαγωγή του Συστήματος Αρχείων
Χρησιμοποιώντας το binwalk -ev <bin>
, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το binwalk αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω έλλειψης μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του binwalk
για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή dd
για την εξαγωγή του συστήματος αρχείων:
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
Μετά, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ., 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 για Δυναμική Ανάλυση
Η διαδικασία προσομοίωσης firmware επιτρέπει τη δυναμική ανάλυση είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Προσομοίωση Μεμονωμένων Δυαδικών
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του endianness και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
Παράδειγμα με Αρχιτεκτονική MIPS
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί κανείς να χρησιμοποιήσει την εντολή:
file ./squashfs-root/bin/busybox
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία εξομοίωσης:
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
Για MIPS (big-endian), χρησιμοποιείται το qemu-mips
, και για little-endian δυαδικά, η επιλογή είναι το qemu-mipsel
.
Εξομοίωση Αρχιτεκτονικής ARM
Για δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή qemu-arm
να χρησιμοποιείται για την εξομοίωση.
Πλήρης Εξομοίωση Συστήματος
Εργαλεία όπως το Firmadyne, το Firmware Analysis Toolkit και άλλα, διευκολύνουν την πλήρη εξομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στην δυναμική ανάλυση.
Δυναμική Ανάλυση στην Πράξη
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του λειτουργικού συστήματος και στο σύστημα αρχείων. Η εξομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις υλικού, απαιτώντας περιστασιακές επανεκκινήσεις εξομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το σύστημα αρχείων, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και τις υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για την τοποθέτηση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
Λειτουργικά συστήματα όπως το AttifyOS και το EmbedOS παρέχουν προρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
- AttifyOS: Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και pentesting συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
- EmbedOS: Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία δοκιμών ασφάλειας firmware.
Ευάλωτο firmware για πρακτική
Για να εξασκηθείτε στην ανακάλυψη ευπαθειών σε firmware, χρησιμοποιήστε τα παρακάτω ευάλωτα έργα firmware ως σημείο εκκίνησης.
- OWASP IoTGoat
- https://github.com/OWASP/IoTGoat
- Το Damn Vulnerable Router Firmware Project
- https://github.com/praetorian-code/DVRF
- Damn Vulnerable ARM Router (DVAR)
- https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html
- ARM-X
- https://github.com/therealsaumil/armx#downloads
- Azeria Labs VM 2.0
- https://azeria-labs.com/lab-vm-2-0/
- Damn Vulnerable IoT Device (DVID)
- https://github.com/Vulcainreo/DVID
Αναφορές
- https://scriptingxss.gitbook.io/firmware-security-testing-methodology/
- Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things
Εκπαίδευση και Πιστοποίηση
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.