hacktricks/physical-attacks/firmware-analysis/README.md

267 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ανάλυση Firmware
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **Εισαγωγή**
Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
## **Συλλογή Πληροφοριών**
**Η συλλογή πληροφοριών** είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της σύνθεσης μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων σχετικά με:
- Την αρχιτεκτονική CPU και το λειτουργικό σύστημα που εκτελεί
- Λεπτομέρειες bootloader
- Διάταξη υλικού και φύλλα δεδομένων
- Μετρήσεις κώδικα και τοποθεσίες πηγής
- Εξωτερικές βιβλιοθήκες και τύπους αδειών
- Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις
- Αρχιτεκτονικά και ροής διαγράμματα
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
Για αυτό το σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
## **Απόκτηση του Firmware**
Η απόκτηση του firmware μπορεί να προσεγγιστεί μέσω διαφόρων μέσων, το καθένα με το δικό του επίπεδο πολυπλοκότητας:
- **Άμεσα** από την πηγή (προγραμματιστές, κατασκευαστές)
- **Κατασκευάζοντας** το από τις παρεχόμενες οδηγίες
- **Κατεβάζοντας** από επίσημες ιστοσελίδες υποστήριξης
- Χρησιμοποιώντας **Google dork** ερωτήματα για την εύρεση φιλοξενούμενων αρχείων firmware
- Πρόσβαση σε **cloud storage** απευθείας, με εργαλεία όπως το [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Παρεμβολή **ενημερώσεων** μέσω τεχνικών man-in-the-middle
- **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG**, ή **PICit**
- **Sniffing** για αιτήματα ενημερώσεων εντός της επικοινωνίας της συσκευής
- Αναγνώριση και χρήση **σκληρά κωδικοποιημένων σημείων ενημέρωσης**
- **Dumping** από το bootloader ή το δίκτυο
- **Αφαίρεση και ανάγνωση** του τσιπ αποθήκευσης, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
## Ανάλυση του firmware
Τώρα που **έχετε το firmware**, πρέπει να εξαγάγετε πληροφορίες σχετικά με αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
```bash
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](../../forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %}
Ή [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) για να επιθεωρήσετε το αρχείο.
### Λήψη του Συστήματος Αρχείων
Με τα προηγούμενα εργαλεία όπως το `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>`). Αυτές οι εντολές βοηθούν στην αναγνώριση τύπων αρχείων, στην εξαγωγή συμβολοσειρών, στην ανάλυση δυαδικών δεδομένων και στην κατανόηση των λεπτομερειών του διαμερίσματος και του συστήματος αρχείων:
```bash
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` για την εξαγωγή του συστήματος αρχείων:
```bash
$ 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**](https://github.com/carlospolop/PEASS-ng) και [**Firmwalker**](https://github.com/craigz28/firmwalker) για αναζήτηση ευαίσθητων πληροφοριών
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core) για ολοκληρωμένη ανάλυση firmware
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), και [**EMBA**](https://github.com/e-m-b-a/emba) για στατική και δυναμική ανάλυση
### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά Unix και το **PESecurity** για δυαδικά Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν.
## Προσομοίωση Firmware για Δυναμική Ανάλυση
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
### Προσομοίωση Μεμονωμένων Δυαδικών
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του endianness και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
#### Παράδειγμα με Αρχιτεκτονική MIPS
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί κανείς να χρησιμοποιήσει την εντολή:
```bash
file ./squashfs-root/bin/busybox
```
Και για να εγκαταστήσετε τα απαραίτητα εργαλεία εξομοίωσης:
```bash
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](https://github.com/firmadyne/firmadyne), το [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) και άλλα, διευκολύνουν την πλήρη εξομοίωση firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στην δυναμική ανάλυση.
## Δυναμική Ανάλυση στην Πράξη
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του λειτουργικού συστήματος και στο σύστημα αρχείων. Η εξομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις υλικού, απαιτώντας περιστασιακές επανεκκινήσεις εξομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το σύστημα αρχείων, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και τις υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για την τοποθέτηση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
* [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και pentesting συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία δοκιμών ασφάλειας firmware.
## Ευάλωτο firmware για πρακτική
Για να εξασκηθείτε στην ανακάλυψη ευπαθειών σε firmware, χρησιμοποιήστε τα παρακάτω ευάλωτα έργα firmware ως σημείο εκκίνησης.
* OWASP IoTGoat
* [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
* Το Damn Vulnerable Router Firmware Project
* [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
* Damn Vulnerable ARM Router (DVAR)
* [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
* ARM-X
* [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
* Azeria Labs VM 2.0
* [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
* Damn Vulnerable IoT Device (DVID)
* [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
## Αναφορές
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
## Εκπαίδευση και Πιστοποίηση
* [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Υποστήριξη HackTricks</summary>
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}