Translated ['src/hardware-physical-access/firmware-analysis/README.md',

This commit is contained in:
Translator 2025-08-13 22:35:51 +00:00
parent 7e5961aaea
commit 53abec175f
4 changed files with 232 additions and 39 deletions

View File

@ -769,6 +769,7 @@
- [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 - 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)
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
- [Integer Overflow](binary-exploitation/integer-overflow.md)

View File

@ -1,10 +1,16 @@
# Firmware Analise
# Firmware Analysis
{{#include ../../banners/hacktricks-training.md}}
## **Inleiding**
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur die kommunikasie tussen die hardewarekomponente en die sagteware waarmee gebruikers interaksie het, te bestuur en te fasiliteer. Dit word in permanente geheue gestoor, wat verseker dat die toestel vitale instruksies kan verkry vanaf die oomblik dat dit aangeskakel word, wat lei tot die bekendstelling van die bedryfstelsel. Om firmware te ondersoek en moontlik te wysig, is 'n kritieke stap in die identifisering van sekuriteitskwesbaarhede.
### Verwante hulpbronne
{{#ref}}
synology-encrypted-archive-decryption.md
{{#endref}}
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur kommunikasie tussen die hardewarekomponente en die sagteware waarmee gebruikers interaksie het, te bestuur en te fasiliteer. Dit word in permanente geheue gestoor, wat verseker dat die toestel toegang kan verkry tot noodsaaklike instruksies vanaf die oomblik dat dit aangeskakel word, wat lei tot die bekendstelling van die bedryfstelsel. Om firmware te ondersoek en moontlik te wysig, is 'n kritieke stap in die identifisering van sekuriteitskwesbaarhede.
## **Inligting Versameling**
@ -17,27 +23,27 @@ Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk
- Eksterne biblioteke en lisensietipes
- Opdatering geskiedenisse en regulerende sertifikate
- Argitektoniese en vloediagramme
- Sekuriteitsassessering en geïdentifiseerde kwesbaarhede
- Sekuriteitsassesseringe en geïdentifiseerde kwesbaarhede
Vir hierdie doel is **open-source intelligence (OSINT)** gereedskap van onskatbare waarde, sowel as die analise van enige beskikbare open-source sagtewarekomponente deur handmatige en geoutomatiseerde hersieningsprosesse. Gereedskap soos [Coverity Scan](https://scan.coverity.com) en [Semmles LGTM](https://lgtm.com/#explore) bied gratis statiese analise wat benut kan word om potensiële probleme te vind.
Vir hierdie doel is **oopbron intelligensie (OSINT)** gereedskap van onskatbare waarde, sowel as die analise van enige beskikbare oopbron sagtewarekomponente deur handmatige en geoutomatiseerde hersieningsprosesse. Gereedskap soos [Coverity Scan](https://scan.coverity.com) en [Semmles LGTM](https://lgtm.com/#explore) bied gratis statiese analise wat benut kan word om potensiële probleme te vind.
## **Die Firmware Verkryging**
## **Verkryging van die Firmware**
Om firmware te verkry kan op verskeie maniere benader word, elk met sy eie vlak van kompleksiteit:
- **Direk** van die bron (ontwikkelaars, vervaardigers)
- **Bou** dit vanaf verskafde instruksies
- **Aflaai** van amptelike ondersteuningswebwerwe
- **Laai** dit af van amptelike ondersteuningswebwerwe
- Gebruik **Google dork** navrae om gehoste firmware-lêers te vind
- Toegang tot **cloud storage** direk, met gereedskap soos [S3Scanner](https://github.com/sa7mon/S3Scanner)
- **Intercepteer** **opdaterings** via man-in-the-middle tegnieke
- **Ekstrak** van die toestel deur verbindings soos **UART**, **JTAG**, of **PICit**
- **Sniffing** vir opdateringsversoeke binne toestelkommunikasie
- Identifisering en gebruik van **hardcoded update endpoints**
- **Dumping** van die bootloader of netwerk
- Intersepteer **opdaterings** via man-in-the-middle tegnieke
- **Ekstraheer** van die toestel deur verbindings soos **UART**, **JTAG**, of **PICit**
- **Sniff** vir opdateringsversoeke binne toestelkommunikasie
- Identifiseer en gebruik **hardcoded opdatering eindpunte**
- **Dump** van die bootloader of netwerk
- **Verwyder en lees** die stoorchip, wanneer alles anders misluk, met toepaslike hardeware gereedskap
## Analisering van die firmware
## Analysering van die firmware
Nou dat jy **die firmware het**, moet jy inligting daaroor onttrek om te weet hoe om dit te behandel. Verskillende gereedskap wat jy daarvoor kan gebruik:
```bash
@ -91,7 +97,7 @@ Alternatiewelik kan die volgende opdrag ook uitgevoer word.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- Vir squashfs (gebruik in die bogenoemde voorbeeld)
- Vir squashfs (gebruik in die voorbeeld hierbo)
`$ unsquashfs dir.squashfs`
@ -111,13 +117,13 @@ Lêers sal in die "`squashfs-root`" gids wees daarna.
`$ ubidump.py <bin>`
## Analisering van Firmware
## Analise van Firmware
Sodra die firmware verkry is, is dit noodsaaklik om dit te ontleed om die struktuur en potensiële kwesbaarhede te verstaan. Hierdie proses behels die gebruik van verskeie gereedskap om waardevolle data uit die firmware beeld te analiseer en te onttrek.
### Beginanalise Gereedskap
'n Stel opdragte word verskaf vir die aanvanklike inspeksie van die binêre lêer (verwys na `<bin>`). Hierdie opdragte help om lêertipes te identifiseer, stringe te onttrek, binêre data te analiseer, en die partisie en lêerstelsel besonderhede te verstaan:
'n Stel opdragte word verskaf vir die aanvanklike inspeksie van die binêre lêer (verwys na `<bin>`). Hierdie opdragte help om lêertipes te identifiseer, stringe te onttrek, binêre data te analiseer, en die partisie- en lêerstelselbesonderhede te verstaan:
```bash
file <bin>
strings -n8 <bin>
@ -126,13 +132,13 @@ 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
```
Om die versleutelingstatus van die beeld te evalueer, word die **entropy** nagegaan met `binwalk -E <bin>`. Lae entropy dui op 'n gebrek aan versleuteling aan, terwyl hoë entropy moontlike versleuteling of kompressie aandui.
Om die versleutelingstatus van die beeld te evalueer, word die **entropy** nagegaan met `binwalk -E <bin>`. Lae entropy dui op 'n gebrek aan versleuteling, terwyl hoë entropy moontlike versleuteling of kompressie aandui.
Vir die onttrekking van **ingebedde lêers**, word gereedskap en hulpbronne soos die **file-data-carving-recovery-tools** dokumentasie en **binvis.io** vir lêerinspeksie aanbeveel.
Vir die onttrekking van **ingebedde lêers** word gereedskap en hulpbronne soos die **file-data-carving-recovery-tools** dokumentasie en **binvis.io** vir lêerinspeksie aanbeveel.
### Onttrekking van die Lêerstelsel
Met `binwalk -ev <bin>` kan 'n mens gewoonlik die lêerstelsel onttrek, dikwels in 'n gids wat na die lêersteltype genoem is (bv. squashfs, ubifs). Wanneer **binwalk** egter nie die lêersteltype kan herken nie weens ontbrekende magic bytes, is handmatige onttrekking nodig. Dit behels die gebruik van `binwalk` om die lêerstel se offset te vind, gevolg deur die `dd` opdrag om die lêerstel uit te sny:
Met `binwalk -ev <bin>` kan 'n mens gewoonlik die lêerstelsel onttrek, dikwels in 'n gids wat na die lêerstelseltipe genoem word (bv. squashfs, ubifs). Wanneer **binwalk** egter nie die lêerstelseltipe kan herken nie weens ontbrekende magic bytes, is handmatige onttrekking nodig. Dit behels die gebruik van `binwalk` om die lêerstelseloffset te lokaliseer, gevolg deur die `dd` opdrag om die lêerstelsel uit te sny:
```bash
$ binwalk DIR850L_REVB.bin
@ -142,11 +148,11 @@ Daarna, afhangende van die lêerstelseltipe (bv. squashfs, cpio, jffs2, ubifs),
### Lêerstelselanalise
Met die lêerstelsel onttrek, begin die soektog na sekuriteitsfoute. Aandag word gegee aan onveilige netwerk daemons, hardgecodeerde akrediteer, API eindpunte, opdatering bediener funksies, nie-gecompileerde kode, opstart skripte, en gecompileerde binêre vir off-line analise.
Met die lêerstelsel onttrek, begin die soektog na sekuriteitsfoute. Aandag word gegee aan onveilige netwerk daemons, hardgecodeerde akrediteer, API eindpunte, opdateringserver funksies, nie-gecompileerde kode, opstart skripte, en gecompileerde binêre vir off-line analise.
**Belangrike plekke** en **items** om te ondersoek sluit in:
- **etc/shadow** en **etc/passwd** vir gebruikers akrediteer
- **etc/shadow** en **etc/passwd** vir gebruikersakrediteer
- SSL sertifikate en sleutels in **etc/ssl**
- Konfigurasie en skrip lêers vir potensiële kwesbaarhede
- Ingebedde binêre vir verdere analise
@ -160,15 +166,15 @@ Verskeie gereedskap help om sensitiewe inligting en kwesbaarhede binne die lêer
### Sekuriteitskontroles op Gecompileerde Binêre
Sowel bronkode as gecompileerde binêre wat in die lêerstelsel gevind word, moet ondersoek word vir kwesbaarhede. Gereedskap soos **checksec.sh** vir Unix binêre en **PESecurity** vir Windows binêre help om onbeskermde binêre te identifiseer wat uitgebuit kan word.
Sowel die bronkode as gecompileerde binêre wat in die lêerstelsel gevind word, moet ondersoek word vir kwesbaarhede. Gereedskap soos **checksec.sh** vir Unix binêre en **PESecurity** vir Windows binêre help om onbeskermde binêre te identifiseer wat uitgebuit kan word.
## Emulering van Firmware vir Dynamiese Analise
Die proses van emulering van firmware stel **dynamiese analise** in staat, hetsy van 'n toestel se werking of 'n individuele program. Hierdie benadering kan uitdagings ondervind met hardeware of argitektuur afhanklikhede, maar die oordrag van die wortel lêerstelsel of spesifieke binêre na 'n toestel met ooreenstemmende argitektuur en endianness, soos 'n Raspberry Pi, of na 'n voorafgeboude virtuele masjien, kan verdere toetsing fasiliteer.
Die proses van emulering van firmware stel **dynamiese analise** in staat, hetsy van 'n toestel se werking of 'n individuele program. Hierdie benadering kan uitdagings ondervind met hardeware of argitektuur afhanklikhede, maar die oordrag van die wortellêerstelsel of spesifieke binêre na 'n toestel met ooreenstemmende argitektuur en endianness, soos 'n Raspberry Pi, of na 'n voorafgeboude virtuele masjien, kan verdere toetsing fasiliteer.
### Emulering van Individuele Binêre
Vir die ondersoek van enkele programme, is dit noodsaaklik om die program se endianness en CPU argitektuur te identifiseer.
Vir die ondersoek van enkele programme is dit noodsaaklik om die program se endianness en CPU argitektuur te identifiseer.
#### Voorbeeld met MIPS Argitektuur
@ -180,7 +186,7 @@ En om die nodige emulasie-instrumente te installeer:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
Vir MIPS (big-endian) word `qemu-mips` gebruik, en vir little-endian binaries, sou `qemu-mipsel` die keuse wees.
Vir MIPS (big-endian) word `qemu-mips` gebruik, en vir little-endian binaries sou `qemu-mipsel` die keuse wees.
#### ARM Argitektuur Emulasie
@ -192,7 +198,7 @@ Gereedskap soos [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware A
## Dinamiese Analise in Praktyk
Op hierdie stadium word 'n werklike of geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om shell-toegang tot die OS en lêerstelsel te handhaaf. Emulasie mag nie perfek hardeware-interaksies naboots nie, wat af en toe emulasie-herlaai vereis. Analise moet die lêerstelsel herbesoek, blootgestelde webbladsye en netwerkdienste ontgin, en opstartlaaier kwesbaarhede verken. Firmware integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
Op hierdie stadium word 'n werklike of geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om shell-toegang tot die OS en lêerstelsel te handhaaf. Emulasie mag nie perfek hardeware-interaksies naboots nie, wat af en toe emulasie-herlaai vereis. Analise moet die lêerstelsel herbesoek, blootgestelde webbladsye en netwerkdienste benut, en opstartlaaier kwesbaarhede verken. Firmware integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
## Tydren Analise Tegnieke
@ -213,18 +219,18 @@ Bedryfstelsels soos [AttifyOS](https://github.com/adi0x90/attifyos) en [EmbedOS]
## Firmware Downgrade Aanvalle & Onveilige Opdatering Meganismes
Selfs wanneer 'n verskaffer kriptografiese handtekening kontroles vir firmware beelde implementeer, **word weergawe terugrol (downgrade) beskerming dikwels weggelaat**. Wanneer die opstart- of herstel-laaier slegs die handtekening met 'n ingebedde publieke sleutel verifieer, maar nie die *weergawe* (of 'n monotone teller) van die beeld wat geflits word vergelyk nie, kan 'n aanvaller wettiglik 'n **ouer, kwesbare firmware wat steeds 'n geldige handtekening het** installeer en dus gepatchte kwesbaarhede weer inbring.
Selfs wanneer 'n verskaffer kriptografiese handtekening kontroles vir firmware beelde implementeer, **word weergawe terugrol (downgrade) beskerming dikwels weggelaat**. Wanneer die opstart- of herstel-laaier slegs die handtekening met 'n ingebedde publieke sleutel verifieer, maar nie die *weergawe* (of 'n monotone teenaar) van die beeld wat geflits word, vergelyk nie, kan 'n aanvaller wettig 'n **ouer, kwesbare firmware wat steeds 'n geldige handtekening het** installeer en dus gepatchte kwesbaarhede weer inbring.
Tipiese aanval werkvloei:
1. **Verkry 'n ouer onderteken beeld**
* Kry dit van die verskaffer se publieke aflaaiportaal, CDN of ondersteuningsite.
* Trek dit uit metgesel mobiele/desktop toepassings (bv. binne 'n Android APK onder `assets/firmware/`).
* Verkry dit van derdeparty repositories soos VirusTotal, internet argiewe, forums, ens.
* Verkry dit van derdeparty repositories soos VirusTotal, Internet argiewe, forums, ens.
2. **Laai of dien die beeld aan die toestel** via enige blootgestelde opdateringskanaal:
* Web UI, mobiele-app API, USB, TFTP, MQTT, ens.
* Baie verbruikers IoT toestelle stel *onaangetekende* HTTP(S) eindpunte bloot wat Base64-gecodeerde firmware blobs aanvaar, dekodeer dit bediener-kant en aktiveer herstel/opgradering.
3. Na die downgrade, exploiteer 'n kwesbaarheid wat in die nuwer weergawe gepatch is (byvoorbeeld 'n opdrag-inspuitfilter wat later bygevoeg is).
3. Na die downgrade, benut 'n kwesbaarheid wat in die nuwer weergawe gepatch is (byvoorbeeld 'n opdrag-inspuitfilter wat later bygevoeg is).
4. Opsioneel flits die nuutste beeld terug of deaktiveer opdaterings om opsporing te vermy sodra volharding verkry is.
### Voorbeeld: Opdrag Inspuiting Na Downgrade
@ -234,11 +240,11 @@ Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
```
In die kwesbare (afgegradeerde) firmware, word die `md5` parameter direk in 'n skalkommando gekonkateneer sonder sanitisering, wat die inspuiting van arbitrêre opdragte moontlik maak (hier om SSH-sleutel-gebaseerde worteltoegang te aktiveer). Later firmware weergawes het 'n basiese karakterfilter bekendgestel, maar die afwesigheid van afgraderingsbeskerming maak die regstelling nutteloos.
In die kwesbare (afgegradeerde) firmware, word die `md5` parameter direk in 'n shell-opdrag gekonkateneer sonder sanitisering, wat die inspuiting van arbitrêre opdragte moontlik maak (hier om SSH-sleutel-gebaseerde worteltoegang te aktiveer). Later firmware weergawes het 'n basiese karakterfilter bekendgestel, maar die afwesigheid van afgraderingsbeskerming maak die oplossing nutteloos.
### Onthulling van Firmware Uit Mobiele Toepassings
### Uittreksel van Firmware Uit Mobiele Toepassings
Baie verskaffers bundel volle firmware-beelde binne hul metgesel mobiele toepassings sodat die app die toestel oor Bluetooth/Wi-Fi kan opdateer. Hierdie pakkette word algemeen ongeënkripteerd in die APK/APEX onder paaie soos `assets/fw/` of `res/raw/` gestoor. Gereedskap soos `apktool`, `ghidra`, of selfs gewone `unzip` laat jou toe om ondertekende beelde te trek sonder om die fisiese hardeware aan te raak.
Baie verskaffers bundel volle firmware-beelde binne hul metgesel mobiele toepassings sodat die app die toestel oor Bluetooth/Wi-Fi kan opdateer. Hierdie pakkette word algemeen ongeënkripteerd in die APK/APEX gestoor onder paaie soos `assets/fw/` of `res/raw/`. Gereedskap soos `apktool`, `ghidra`, of selfs gewone `unzip` stel jou in staat om ondertekende beelde te trek sonder om die fisiese hardeware aan te raak.
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
@ -246,9 +252,9 @@ firmware_v1.3.11.490_signed.bin
```
### Kontrolelys vir die Assessering van Opdateringslogika
* Is die vervoer/identifikasie van die *opdaterings-eindpunt* voldoende beskerm (TLS + identifikasie)?
* Vergelyk die toestel **weergawe nommers** of 'n **monotoniese anti-rollback teenaar** voordat dit geflashed word?
* Word die beeld binne 'n veilige opstartketting geverifieer (bv. handtekeninge nagegaan deur ROM-kode)?
* Is die vervoer/identifikasie van die *opdatering eindpunt* voldoende beskerm (TLS + identifikasie)?
* Vergelyk die toestel **weergawe nommers** of 'n **monotoniese anti-rollback teenaar** voordat dit geflits word?
* Word die beeld binne 'n veilige opstartketting geverifieer (bv. handtekeninge nagegaan deur ROM kode)?
* Voer gebruikerslandkode addisionele gesondheidskontroles uit (bv. toegelate partisiekaart, modelnommer)?
* Hergebruik *gedeeltelike* of *rugsteun* opdateringsvloei dieselfde valideringslogika?
@ -260,7 +266,7 @@ Om te oefen om kwesbaarhede in firmware te ontdek, gebruik die volgende kwesbare
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
- The Damn Vulnerable Router Firmware Project
- Die 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)

View File

@ -0,0 +1,162 @@
# Synology PAT/SPK Encrypted Archive Decryption
{{#include ../../banners/hacktricks-training.md}}
## Oorsig
Verskeie Synology toestelle (DSM/BSM NAS, BeeStation, …) versprei hul firmware en toepassingspakkette in **geënkripteerde PAT / SPK argiewe**. Daardie argiewe kan *aflyn* gedekripteer word met niks anders as die publieke aflaaifiles nie, danksy hard-gecodeerde sleutels wat in die amptelike ekstraksiebiblioteke ingebed is.
Hierdie bladsy dokumenteer, stap-vir-stap, hoe die geënkripteerde formaat werk en hoe om die duidelike teks **TAR** wat binne elke pakket sit, volledig te herstel. Die prosedure is gebaseer op Synacktiv navorsing wat tydens Pwn2Own Ierland 2024 uitgevoer is en geïmplementeer is in die oopbron hulpmiddel [`synodecrypt`](https://github.com/synacktiv/synodecrypt).
> ⚠️ Die formaat is presies dieselfde vir beide `*.pat` (stelseldatumn) en `*.spk` (toepassing) argiewe hulle verskil net in die paar hard-gecodeerde sleutels wat gekies word.
---
## 1. Grijp die argief
Die firmware/toepassing opdatering kan normaalweg van Synology se publieke portaal afgelaai word:
```bash
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
```
## 2. Dump die PAT-struktuur (opsioneel)
`*.pat` beelde is self 'n **cpio bundel** wat verskeie lêers (boot loader, kernel, rootfs, pakkette…) insluit. Die gratis nut `patology` is gerieflik om daardie omhulsel te ondersoek:
```bash
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
[…]
$ ls
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
```
Vir `*.spk` kan jy direk na stap 3 spring.
## 3. Onttrek die Synology onttrekkingsbiblioteke
Die werklike ontsleutelinglogika is in:
* `/usr/syno/sbin/synoarchive` → hoof CLI-wrapper
* `/usr/lib/libsynopkg.so.1` → roep die wrapper vanaf DSM UI aan
* `libsynocodesign.so` → **bevat die kriptografiese implementering**
Albei binêre is teenwoordig in die stelsels rootfs (`hda1.tgz`) **en** in die gecomprimeerde init-rd (`rd.bin`). As jy net die PAT het, kan jy hulle op hierdie manier kry:
```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. Herwin die hard-gecodeerde sleutels (`get_keys`)
Binne `libsynocodesign.so` keer die funksie `get_keys(int keytype)` eenvoudig twee 128-bit globale veranderlikes terug vir die versoekte argieffamilie:
```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 publieke sleutel wat gebruik word om die argiefkop te verifieer.
* **master_key** → Wortelsleutel wat gebruik word om die per-argief versleuteling sleutel af te lei.
Jy moet slegs daardie twee konstantes een keer vir elke DSM hoofweergawe dump.
## 5. Kopstruktuur & handtekeningverifikasie
`synoarchive_open()``support_format_synoarchive()``archive_read_support_format_synoarchive()` voer die volgende uit:
1. Lees magic (3 bytes) `0xBFBAAD` **of** `0xADBEEF`.
2. Lees little-endian 32-bit `header_len`.
3. Lees `header_len` bytes + die volgende **0x40-byte Ed25519 handtekening**.
4. Herhaal oor al die ingebedde publieke sleutels totdat `crypto_sign_verify_detached()` slaag.
5. Dekodeer die kop met **MessagePack**, wat oplewer:
```python
[
data: bytes,
entries: [ [size: int, sha256: bytes], … ],
archive_description: bytes,
serial_number: [bytes],
not_valid_before: int
]
```
`entries` laat later libarchive toe om die integriteit van elke lêer te kontroleer soos dit gedekript word.
## 6. Ontleed die per-archive sub-sleutel
Van die `data` blob wat in die MessagePack kop is:
* `subkey_id` = little-endian `uint64` by offset 0x10
* `ctx` = 7 bytes by offset 0x18
Die 32-byte **stream key** word verkry met libsodium:
```c
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
```
## 7. Synology se pasgemaakte **libarchive** agtergrond
Synology bundel 'n gepatchte libarchive wat 'n vals "tar" formaat registreer wanneer die magie `0xADBEEF` is:
```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)
```
Die ontsleutelde `tar_hdr` is 'n **klassieke POSIX TAR kop**.
### 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
```
Elke **0x18-byte nonce** word aan die begin van die versleutelde stuk gevoeg.
Sodra alle inskrywings verwerk is, produseer libarchive 'n volmaak geldige **`.tar`** wat met enige standaard hulpmiddel ontpak kan word.
## 8. Decrypt alles met 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` detecteer outomaties PAT/SPK, laai die korrekte sleutels en pas die volle ketting hierbo beskryf toe.
## 9. Algemene valstrikke
* Moet **nie** `signature_key` en `master_key` ruil nie hulle dien verskillende doeleindes.
* Die **nonce** kom *voor* die geslote teks vir elke blok (kop en data).
* Die maksimum versleutelde stukgrootte is **0x400000 + 0x11** (libsodium etiket).
* Argiewe wat vir een DSM-generasie geskep is, mag in die volgende weergawe na verskillende hard-gecodeerde sleutels oorgaan.
## 10. Bykomende gereedskap
* [`patology`](https://github.com/sud0woodo/patology) ontleed/dump PAT-argiewe.
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) ontsleutel PAT/SPK/ander.
* [`libsodium`](https://github.com/jedisct1/libsodium) verwysingsimplementering van XChaCha20-Poly1305 geheimstroom.
* [`msgpack`](https://msgpack.org/) kopserialisering.
## Verwysings
- [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}}

View File

@ -4,11 +4,11 @@
## Wat is opdraginjektering?
'n **opdraginjektering** laat die uitvoering van arbitrêre bedryfstelselsopdragte deur 'n aanvaller op die bediener wat 'n toepassing huisves. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry.
'n **opdraginjektering** laat die uitvoering van arbitrêre bedryfstelselsopdragte deur 'n aanvaller op die bediener wat 'n toepassing huisves. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller tipies in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry.
### Konteks
Afhangende van **waar jou invoer ingesluit word**, mag jy die **geciteerde konteks beëindig** (met `"` of `'`) voordat die opdragte uitgevoer word.
Afhangende van **waar jou invoer ingesluit word**, mag jy die **geciteerde konteks beëindig** (met `"` of `'`) voordat die opdragte.
## Opdraginjektering/Uitvoering
```bash
@ -117,15 +117,39 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
## Brute-Force Opsporing Lys
### Node.js `child_process.exec` vs `execFile`
Wanneer jy JavaScript/TypeScript agterkant toets, sal jy dikwels die Node.js `child_process` API teëkom.
```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()` genereer 'n **shell** (`/bin/sh -c`), daarom sal enige karakter wat 'n spesiale betekenis vir die shell het (back-ticks, `;`, `&&`, `|`, `$()`, …) lei tot **command injection** wanneer gebruikersinvoer in die string gekonkateer word.
**Mitigering:** gebruik `execFile()` (of `spawn()` sonder die `shell` opsie) en verskaf **elke argument as 'n aparte array-element** sodat geen shell betrokke is:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
```
Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
## Brute-Force Detection List
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## Verwysings
## References
- [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)
- [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}}