Synology PAT/SPK Encrypted Archive Decryption
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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
.
⚠️ 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:
$ 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
je zgodan za pregledavanje tog omota:
$ 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 UIlibsynocodesign.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:
# 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:
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:
- Pročitajte magiju (3 bajta)
0xBFBAAD
ili0xADBEEF
. - Pročitajte little-endian 32-bitni
header_len
. - Pročitajte
header_len
bajtova + sledeći 0x40-bajtni Ed25519 potpis. - Iterirajte kroz sve ugrađene javne ključeve dok
crypto_sign_verify_detached()
ne uspe. - Dekodirajte zaglavlje sa MessagePack, što daje:
[
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-endianuint64
na offsetu 0x10ctx
= 7 bajtova na offsetu 0x18
32-bajtni stream key se dobija pomoću libsodium:
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
:
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
$ 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
imaster_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
– parsiranje/dump PAT arhiva.synodecrypt
– dešifrovanje PAT/SPK/drugo.libsodium
– referentna implementacija XChaCha20-Poly1305 secretstream.msgpack
– serijalizacija zaglavlja.
Reference
- Ekstrakcija šifrovanih arhiva Synology – Synacktiv (Pwn2Own IE 2024)
- synodecrypt na GitHub-u
- patology na GitHub-u
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.