ืืืจืช ืืืืกืื ืืืฆื ืื ืื ืื ืืื ืช Safe-Linking, ืืืงืฉื ืขื ืืฆืืจืช ื ืืฆืืืื ืืืืฆืขืื ืื ืืคืืืฆืื ืืืืืจื ืื ืฉืื ืื ืฉื ืืฆืืืขืื ืืืืืจืื ืฉืืืงืฆื ืืขืช ืืืฆืืข ืงืจืืืช malloc. ืงืืฉืืจ ืืืื ืืื ื ืืืกื ืืืืืืื ืืช ืืืคืฉืจืืช ืฉื ื ืืฆืื ืคืืืขืืืืช, ืื ืขื ืชืงืืจื ืืื ืืืืืช ืืื ืืกืื ืืืืคื ืืฉืืขืืชื ืืช ืืฆืืจืช ืงืืืืจืืืช ืืกืืืืืช ืฉื ื ืืฆืื, ืฉืื ืื ืืกืฃ ืืืืืฉื ืื ืืชื ืช ืื ืืฆืื, ืืฉ ืฆืืจื ืืืฆืื ืคืืืขืืช ื ืืกืคืช ืืืืจืืช ืืืืืคืช ืืืืข ืืืืืช ืืืงืื ืืขืจืืื ืืืืืจืื.
ืชืืงืื ืื ืืืืืืขืื ืงืืฉืืจ ืืืื ืืืื ื ืขืืืจ Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ื-Google TCMalloc, ืืืืฆืขืื ืื ืืฉืืจืื ืืืื ื ื-Chromium (ื
ืืื 2012, Chromium ืืืจ ืื ืชื ืืช ืืื ืืงืช ืืืื ื ืฉื MaskPtr ืฉืืืจืชื ืืคืชืืจ ืืช ืืืชื ืืขืื, ืื ืืคืชืจืื ืฉื Checkpoint ืืคืืื ืืืฆืืขืื ืืืืืื ืืืชืจ).
ืชืืงืื ืื ืืืฆืขืื ืืืจ ืืืฉืจื ืืืกืืจื ืืืืืืจื ืฉื ืืืืืกื ืืืืืง 3.32 ื-Safe-Linking ืืืื ืืืื ืืืจืืจืช ืืืื. uClibc-NG ืชืืื ื-Safe-Linking ื ืื ืก ืืืื ืืืืืืจื 1.0.33 ืืืืคืขื ืืืจืืจืช ืืืื. ืฉืื ืืืื ื-gperftools (tcmalloc ืืืฉื) ืึฐืงืึผืึผึธื, ืื ืืืฆืข ืืืืคืฆืื ืืืืืืจื ืขืชืืืืช.
ืืคืชืืื TCMalloc (ืืืฉ tcmalloc) ืกืืจื ืืงืื ืืฉื ืืช, ืชืื ืฆืืื ืืจืืื ืืืืจื ืืืืฆืืขืื ืืืฆืืจื ืืืืกืืฃ ืืืืงืืช ืืงืืคืืช ืืื ืืืืืง ืืืืคื ืงืืืข ืฉืืื ืขืืื ืืืฆืืคื. ืืืืงืืช ืฉื ืืื ืืกื Checkpoint ืืจืื ืฉืฉืืืช Safe-Linking ืืื ื ืืืืื ืืฆืจืืืช ืืืืจืื ื ืืกืคืช, ืืืืืฆืืขืื ืืขืช ืืืฆืืข ืคืขืืืืช ืขืจืืื ืืืคืืชืื ืืืืืฆืข ื-0.02% ืืืื, ืืืืงืจื ืืืจืืข ืืืืชืจ ื-1.5% (ืืฉื ืืฉืืืื, ืืชืงืืจื ื- ืืฉืืื ืืืฉืืฉืช ื-Chromium ืืืขืจืืช ื"ืคืืืช ื-2%"). ืึทืืึธืึธื
ืงืืฉืืจ ืืืื ืืืื ืืืืฆืืข 2-3 ืืืจืืืช ืืจืืื ื ืืกืคืืช ืืื ืคืขื ืฉ-free() ื ืงืจื, ื-3-4 ืืืจืืืช ืืื ืคืขื ืฉื ืงืจื malloc(). ืืื ืฆืืจื ืืืคืขืื ืืช ืฉืืื ืืืชืืื ืืืฆืืจืช ืขืจืืื ืืงืจืื.
ื ืืชื ืืืฉืชืืฉ ื-Safe-Linking ืื ืจืง ืืื ืืฉืคืจ ืืช ืืืืืื ืฉื ืืืฉืืื ืขืจืืื ืฉืื ืื, ืืื ืื ืืื ืืืืกืืฃ ืืงืจืืช ืฉืืืืช ืืื ืืื ื ื ืชืื ืื ืืืฉืชืืฉืื ืืจืฉืืืืช ืืงืืฉืจืืช ืืืืืืช ืฉื ืืฆืืืขืื ืืืืืงืืื ืืื ืืืืืจืื ืขืฆืื. ืืฉืืื ืคืฉืืื ืืืื ืืืืฉืื ืืืืจืฉืช ืจืง ืืืกืคืช ืืืงืจื ืืื ืืืืืชื ืขื ืืฆืืืขืื ืืืืืง ืืื ืืงืื (ืืืืืื, ืขืืืจ Glibc ืืฉืชื ื ืจืง ืืื ืฉืืจืืช ืงืื). ืืฉืืื ืืกืชืืืช ืืฉืื ืืืื ืืืืื:
+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) (((((size_t) pos) >> 12) ^ ((size_t) ptr)))
+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)
- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...
ืืืืืช ืฉื ืืฉืืื ืืื ืืืฉืชืืฉ ืื ืชืื ืื ืืงืจืืืื ืืื ืื ืื ืืืงืจืืืืช ืฉื ืืชืืืืช ASLR (mmap_base) ืืื ืืืื ืขื ืจืฉืืืืช ืืงืืฉืจืืช ืืืืืืช ืืืื Fast-Bins ื-TCache. ืืคื ื ืืืืช ืืขืจื ืขื ืืฆืืืข ืืจืืื ืืื ืืจืฉืืื, ืืื ืืืฆืข ืืืจืช ืืกืืื ืืืืืง ืืืฉืืจ ืขืืื. ืืืฆืืืข ืืืืืฃ ืืชืืฆืื ืฉื ืืคืขืืื "(L >> PAGE_SHIFT) XOR (P)", ืืืฉืจ P ืืื ืืขืจื ืฉื ืืืฆืืืข ื-L ืืื ืืืงืื ืืืืืจืื ืื ืืืืืกื ืืืฆืืืข.
ืืขืช ืฉืืืืฉ ืืืขืจืืช ASLR (Rendomization Space Layout Address) ืืืง ืืืกืืืืืช L ืขื ืืชืืืช ืืกืืก ืืขืจืืื ืืืื ืขืจืืื ืืงืจืืืื ืืืฉืืฉืื ืืืคืชื ืืงืืืื P (ืืืืฅ ืขื ืืื ืคืขืืืช ืืขืืจื ืฉื 12 ืกืืืืืช ืขืืืจ ืืคืื ืฉื 4096 ืืชืื). ืื ืืคืืืฆืื ืื ืืคืืืชื ืืช ืืกืืืื ืืืืืคืช ืืฆืืืข ืืขืช ื ืืฆืื, ืืืืืื ืฉืืืฆืืืข ืืื ื ืืืืืกื ืืฆืืจืชื ืืืงืืจืืช ืืืืืคืชื ืืืจืฉืช ืืืข ืขื ืืงืฆืืช ืืขืจืืื. ืื ืืกืฃ, ืงืื ืืชืืงืื ืืืื ืื ืืืืงื ื ืืกืคืช ืืืืฉืืจ ืืืืง, ืฉืื ืืืคืฉืจ ืืชืืงืฃ ืืืืืืฃ ืืฆืืืข ืืขืจื ืื ืืืืฉืจ ืืืืจืฉ ืืืข ืขื ืืกืคืจ ืืืืืื ืฉืืืืฉืจืื, ืื ืฉืืืขืจืืืช 64 ืกืืืืืช ืืืคืฉืจ ืื ืืกืฃ ืืกืืื 15 ืืชืื 16 ื ืืกืืื ืืช ืชืงืืคื ืฉืืื ื ืืืงืืื ืืืฉืืื ืืืฉืืจ.
ืืฉืืื ืืขืืื ืืืื ื ืืคื ื ืืชืงืคืืช ืืืฉืชืืฉืืช ืืฉืืชืื ืืฆืืืข ืืืงื (ืฉืื ืื ืืชืื ื ืืืืื), ืฉืืชืื ืืฆืืืข ืืื (ืืคื ืื ืืืืฉ ืืงืื ืืชืืงืฃ) ืืฉืื ืื ืืืงืื ืืจืฉืืื ืืืชืืืช ืื ืืืืฉืจืช. ืืืืืื, ืืืื ืฉืืฉืืืืฉ ื-Safe-Linking ื-malloc ืืืคืฉืจ ืืกืืืช ื ืืฆืื ืืืืจืื ื ืืืืื ืขื ืืื ืืืชื ืืืงืจื ืคืืืขืืช CVE-2020-6007 ืืืืจ ืืืื ืฉื Philips Hue Bridge, ืื ืืจื ืขื ืืื ืืฆืคืช ืืืฆืฅ ืืืืคืฉืจ ืื ืืืฉืื ืฉืืืื ืขื ืืืืฉืืจ.
ืืงืืจ: OpenNet.ru