hacktricks/hardware-physical-access/firmware-analysis/README.md
2024-04-06 18:31:47 +00:00

25 KiB
Raw Blame History

Firmware Analysis

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Εισαγωγή

Το firmware είναι ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ασφαλείας.

Συλλογή Πληροφοριών

Η συλλογή πληροφοριών είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της δομής μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων για:

  • Την αρχιτεκτονική της CPU και το λειτουργικό σύστημα που εκτελεί
  • Τις λεπτομέρειες του bootloader
  • Τη διάταξη του υλικού και τις τεχνικές προδιαγραφές
  • Τις μετρήσεις του κώδικα και τις τοποθεσίες πηγαίου κώδικα
  • Τις εξωτερικές βιβλιοθήκες και τους τύπους αδειών
  • Τις ιστορικές ενημερώσεις και τις πιστοποιήσεις ρύθμισης
  • Τα αρχιτεκτονικά και τα διαγράμματα ροής
  • Τις αξιολογήσεις ασφαλείας και τις εντοπισμένες ευπάθειες

Για αυτόν τον σκοπό, τα εργαλεία ανοικτής πηγής πληροφορίας (OSINT) είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μη αυτόματων και αυτόματων διαδικασιών αναθεώρησης. Εργαλεία όπως το Coverity Scan και το Semmles LGTM προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.

Απόκτηση του Firmware

Η απόκτηση του firmware μπορεί να γίνει με διάφορους τρόπους, καθένας με το δικό του επίπεδο πολυπλοκότητας:

  • Απευθείας από την πηγή (προγραμματιστές, κατασκευαστές)
  • Κατασκευή από παρεχόμενες οδηγίες
  • Λήψη από επίσημους ιστότοπους υποστήριξης
  • Χρήση ερωτημάτων Google dork για την εύρεση φιλοξενούμενων αρχείων firmware
  • Πρόσβαση σε αποθήκευση στο cloud απευθείας, με εργαλεία όπως το S3Scanner
  • Παρεμβολή ενημερώσεων μέσω τεχνικών man-in-the-middle
  • Εξαγωγή από τη συσκευή μέσω συνδέσεων όπως UART, JTAG ή PICit
  • Καταγραφή αιτημάτων ενημέρωσης εντός της επικοινωνίας της συσκευής
  • Εντοπισμός και χρήση σκληροκωδικοποιημένων σημείων ενημέρωσης
  • Ανάκτηση από τον 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="../../generic-methodologies-and-resources/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 για να βρείτε τη θέση του συστήματος αρχείων και να ανακόψετε το συμπιεσμένο σύστημα αρχείων από το δυαδικό αρχείο και εξάγετε χειροκίνητα το σύστημα αρχείων ανάλογα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.

$ 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>

Ανάλυση Λογισμικού

Μόλις αποκτηθεί το λογισμικό, είναι απαραίτητο να αναλυθεί για να κατανοήσουμε τη δομή του και τυχόν ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διάφορων εργαλείων για την ανάλυση και εξαγωγή πολύτιμων δεδομένων από την εικόνα του λογισμικού.

Εργαλεία Αρχικής Ανάλυσης

Παρέχεται ένα σύνολο εντολών για τον αρχικό έλεγχο του δυαδικού αρχείου (αναφέρεται ως <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 αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω της απουσίας μαγικών bytes, απαιτείται χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του binwalk για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή dd για την αποκοπή του συστήματος αρχείων:

$ binwalk DIR850L_REVB.bin

$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs

Στη συνέχεια, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ. squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διάφορες εντολές για τη χειροκίνητη εξαγωγή των περιεχομένων.

Ανάλυση Συστήματος Αρχείων

Μετά την εξαγωγή του συστήματος αρχείων, ξεκινά η αναζήτηση ευπάθειας ασφάλειας. Προσέχεται η αναζήτηση μη ασφαλών δαίμονων δικτύου, σκληροκωδικοποιημένων διαπιστευτηρίων, σημείων πρόσβασης στο API, λειτουργιών ενημέρωσης του διακομιστή, μη μεταγλωττισμένου κώδικα, εκκινητικών σεναρίων και μεταγλωττισμένων δυαδικών αρχείων για ανάλυση εκτός σύνδεσης.

Κύριες τοποθεσίες και στοιχεία που πρέπει να ελεγχθούν περιλαμβάνουν:

  • etc/shadow και etc/passwd για διαπιστευτήρια χρήστη
  • Πιστοποιητικά SSL και κλειδιά στο etc/ssl
  • Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
  • Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση
  • Κοινοί διακομιστές ιστοσελίδων και δυαδικά αρχεία συσκευών IoT

Πολλά εργαλεία βοηθούν στον εντοπισμό ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:

Έλεγχοι Ασφάλειας σε Μεταγλωττισμένα Δυαδικά Αρχεία

Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο σύστημα αρχείων πρέπει να ελεγχθούν για ευπάθειες. Εργαλεία όπως το checksec.sh για δυαδικά αρχεία Unix και το PESecurity για δυαδικά αρχεία Windows βοηθούν στον εντοπισμό μη προστατευμένων δυαδικών αρχείων που μπορούν να εκμεταλλευτούν.

Προσομοίωση Firmware για Δυναμική Ανάλυση

Η διαδικασία προσομοίωσης του firmware επιτρέπει τη δυναμική ανάλυση είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις από υλικό ή αρχιτεκτονική, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με την ίδια αρχιτεκτονική και τέλεια σειρά byte, όπως ένα Raspberry Pi, ή σε μια προετοιμασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.

Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων

Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η σειρά byte και η αρχιτεκτονική του προγράμματος.

Παράδειγμα με Αρχιτεκτονική 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, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.

Τεχνικές Δυναμικής Ανάλυσης στην Πράξη

Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται πρόσβαση στο κέλυφος του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση ενδέχεται να μην αντιγράφει απόλυτα τις αλληλεπιδράσεις του υλικού, επομένως ενδέχεται να χρειαστούν περιοδικές επανεκκινήσεις της προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται εκθέτομενες ιστοσελίδες και υπηρεσίες δικτύου και να εξετάζει ευπάθειες του εκκινητή. Οι δοκιμές ακεραιότητας του 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 ως αφετηρία.

Αναφορές

Εκπαίδευση και Πιστοποίηση