Firmware Analysis
Εισαγωγή
Το firmware είναι ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ασφαλείας.
Συλλογή Πληροφοριών
Η συλλογή πληροφοριών είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της δομής μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων για:
Την αρχιτεκτονική της CPU και το λειτουργικό σύστημα που εκτελεί
Τις λεπτομέρειες του bootloader
Τη διάταξη του υλικού και τις τεχνικές προδιαγραφές
Τις μετρήσεις του κώδικα και τις τοποθεσίες πηγαίου κώδικα
Τις εξωτερικές βιβλιοθήκες και τους τύπους αδειών
Τις ιστορικές ενημερώσεις και τις πιστοποιήσεις ρύθμισης
Τα αρχιτεκτονικά και τα διαγράμματα ροής
Τις αξιολογήσεις ασφαλείας και τις εντοπισμένες ευπάθειες
Για αυτόν τον σκοπό, τα εργαλεία ανοικτής πηγής πληροφορίας (OSINT) είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μη αυτόματων και αυτόματων διαδικασιών αναθεώρησης. Εργαλεία όπως το Coverity Scan και το Semmle’s LGTM προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
Απόκτηση του Firmware
Η απόκτηση του firmware μπορεί να γίνει με διάφορους τρόπους, καθένας με το δικό του επίπεδο πολυπλοκότητας:
Απευθείας από την πηγή (προγραμματιστές, κατασκευαστές)
Κατασκευή από παρεχόμενες οδηγίες
Λήψη από επίσημους ιστότοπους υποστήριξης
Χρήση ερωτημάτων Google dork για την εύρεση φιλοξενούμενων αρχείων firmware
Πρόσβαση σε αποθήκευση στο cloud απευθείας, με εργαλεία όπως το S3Scanner
Παρεμβολή ενημερώσεων μέσω τεχνικών man-in-the-middle
Εξαγωγή από τη συσκευή μέσω συνδέσεων όπως UART, JTAG ή PICit
Καταγραφή αιτημάτων ενημέρωσης εντός της επικοινωνίας της συσκευής
Εντοπισμός και χρήση σκληροκωδικοποιημένων σημείων ενημέρωσης
Ανάκτηση από τον bootloader ή το δίκτυο
Αφαίρεση και ανάγνωση του επίπεδου αποθήκευσης, όταν αποτυγχάνουν όλα τα άλλα, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
Ανάλυση του firmware
Τώρα που έχετε το firmware, πρέπει να εξάγετε πληροφορίες για αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
Εάν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την εντροπία της εικόνας με την εντολή binwalk -E <bin>
. Εάν η εντροπία είναι χαμηλή, τότε πιθανότατα δεν είναι κρυπτογραφημένη. Εάν η εντροπία είναι υψηλή, τότε πιθανότατα είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε αρχεία που είναι ενσωματωμένα στο firmware:
pageFile/Data Carving & Recovery ToolsΉ binvis.io (code) για να επιθεωρήσετε το αρχείο.
Απόκτηση του Συστήματος Αρχείων
Με τα προηγούμενα εργαλεία που αναφέρθηκαν, όπως 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>
Ανάλυση Λογισμικού
Μόλις αποκτηθεί το λογισμικό, είναι απαραίτητο να αναλυθεί για να κατανοήσουμε τη δομή του και τυχόν ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διάφορων εργαλείων για την ανάλυση και εξαγωγή πολύτιμων δεδομένων από την εικόνα του λογισμικού.
Εργαλεία Αρχικής Ανάλυσης
Παρέχεται ένα σύνολο εντολών για τον αρχικό έλεγχο του δυαδικού αρχείου (αναφέρεται ως <bin>
). Αυτές οι εντολές βοηθούν στον προσδιορισμό των τύπων αρχείων, την εξαγωγή συμβολοσειρών, την ανάλυση δυαδικών δεδομένων και την κατανόηση των λεπτομερειών των διαμερισμάτων και του συστήματος αρχείων:
Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η εντροπία με την εντολή binwalk -E <bin>
. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδηλώνει πιθανή κρυπτογράφηση ή συμπίεση.
Για την εξαγωγή ενσωματωμένων αρχείων, συνιστώνται εργαλεία και πόροι όπως η τεκμηρίωση file-data-carving-recovery-tools και το binvis.io για τον έλεγχο των αρχείων.
Εξαγωγή του Συστήματος Αρχείων
Χρησιμοποιώντας την εντολή binwalk -ev <bin>
, συνήθως μπορεί να εξαχθεί το σύστημα αρχείων, συχνά σε έναν κατάλογο με το όνομα του τύπου του συστήματος αρχείων (π.χ. squashfs, ubifs). Ωστόσο, όταν το binwalk αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω της απουσίας μαγικών bytes, απαιτείται χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του binwalk
για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή dd
για την αποκοπή του συστήματος αρχείων:
Στη συνέχεια, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ. squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διάφορες εντολές για τη χειροκίνητη εξαγωγή των περιεχομένων.
Ανάλυση Συστήματος Αρχείων
Μετά την εξαγωγή του συστήματος αρχείων, ξεκινά η αναζήτηση ευπάθειας ασφάλειας. Προσέχεται η αναζήτηση μη ασφαλών δαίμονων δικτύου, σκληροκωδικοποιημένων διαπιστευτηρίων, σημείων πρόσβασης στο API, λειτουργιών ενημέρωσης του διακομιστή, μη μεταγλωττισμένου κώδικα, εκκινητικών σεναρίων και μεταγλωττισμένων δυαδικών αρχείων για ανάλυση εκτός σύνδεσης.
Κύριες τοποθεσίες και στοιχεία που πρέπει να ελεγχθούν περιλαμβάνουν:
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 επιτρέπει τη δυναμική ανάλυση είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις από υλικό ή αρχιτεκτονική, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με την ίδια αρχιτεκτονική και τέλεια σειρά byte, όπως ένα Raspberry Pi, ή σε μια προετοιμασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων
Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η σειρά byte και η αρχιτεκτονική του προγράμματος.
Παράδειγμα με Αρχιτεκτονική MIPS
Για να προσομοιώσετε ένα δυαδικό αρχείο με αρχιτεκτονική MIPS, μπορείτε να χρησιμοποιήσετε την εντολή:
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία εξομοίωσης:
Για το MIPS (big-endian), χρησιμοποιείται το qemu-mips
, ενώ για τα little-endian δυαδικά, η επιλογή θα ήταν το qemu-mipsel
.
Προσομοίωση Αρχιτεκτονικής ARM
Για τα δυαδικά αρχεία ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή qemu-arm
να χρησιμοποιείται για την προσομοίωση.
Πλήρης Προσομοίωση Συστήματος
Εργαλεία όπως το Firmadyne, το Firmware Analysis Toolkit και άλλα, διευκολύνουν την πλήρη προσομοίωση του firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.
Τεχνικές Δυναμικής Ανάλυσης στην Πράξη
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται πρόσβαση στο κέλυφος του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση ενδέχεται να μην αντιγράφει απόλυτα τις αλληλεπιδράσεις του υλικού, επομένως ενδέχεται να χρειαστούν περιοδικές επανεκκινήσεις της προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται εκθέτομενες ιστοσελίδες και υπηρεσίες δικτύου και να εξετάζει ευπάθειες του εκκινητή. Οι δοκιμές ακεραιότητας του firmware είναι κρίσιμες για τον εντοπισμό πιθανών ευπάθειών πίσω πόρτας.
Τεχνικές Ανάλυσης Εκτέλεσης
Η ανάλυση εκτέλεσης περιλαμβάνει την αλληλεπίδραση με ένα διεργασία ή δυαδικό αρχείο στο περιβάλλον λειτουργίας του, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τον ορισμό σημείων ανακοπής και τον εντοπισμό ευπαθειών μέσω της τεχνικής του fuzzing και άλλων τεχνικών.
Εκμετάλλευση Δυαδικών Αρχείων και Απόδειξη Έκθεσης
Για την ανάπτυξη μιας απόδειξης έκθεσης για εντοπισμένες ευπάθειες, απαιτείται μια βαθιά κατανόηση της αρχιτεκτονικής στόχου και της προγραμματισμού σε γλώσσες χαμηλού επιπέδου. Οι προστασίες εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, ενδέχεται να είναι απαραίτητες τεχνικές όπως η Return Oriented Programming (ROP).
Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
Λειτουργικά συστήματα όπως το AttifyOS και το EmbedOS παρέχουν προετοιμασμένα περιβάλλοντα για τη δοκιμή ασφάλειας του firmware, εφοδιασμένα με τα απαραίτητα εργαλεία.
Προετοιμασμένα ΛΣ για την Ανάλυση Firmware
AttifyOS: Το AttifyOS είναι μια διανομή που σκοπό έχει να σας βοηθήσει να πραγματοποιήσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης σε συσκευές Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προετοιμασμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
EmbedOS: Λειτουργικό σύστημα ασφαλείας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία για την ασφάλεια του firmware.
Ευπαθή 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)
Αναφορές
Εκπαίδευση και Πιστοποίηση
[https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exp
Last updated