Checkpoint ื”ืฆื™ืขื” ืืช ื˜ื›ื ื™ืงืช ื”ื’ื ืช Safe-Linking, ืžื” ืฉื”ืงืฉื” ืขืœ ื ื™ืฆื•ืœ ื ืงื•ื“ื•ืช ื”ืชื•ืจืคื”

ื—ื‘ืจืช ื”ืžื—ืกื•ื ืžื•ืฆื’ ืžื ื’ื ื•ืŸ ื”ื’ื ืช 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(). ืื™ืŸ ืฆื•ืจืš ืœื”ืคืขื™ืœ ืืช ืฉืœื‘ื™ ื”ืืชื—ื•ืœ ื•ื™ืฆื™ืจืช ืขืจื›ื™ื ืืงืจืื™.

Checkpoint ื”ืฆื™ืขื” ืืช ื˜ื›ื ื™ืงืช ื”ื’ื ืช Safe-Linking, ืžื” ืฉื”ืงืฉื” ืขืœ ื ื™ืฆื•ืœ ื ืงื•ื“ื•ืช ื”ืชื•ืจืคื”

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-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 ื”ื•ื ืžื™ืงื•ื ื”ื–ื™ื›ืจื•ืŸ ื‘ื• ืžืื•ื—ืกืŸ ื”ืžืฆื‘ื™ืข.

Checkpoint ื”ืฆื™ืขื” ืืช ื˜ื›ื ื™ืงืช ื”ื’ื ืช Safe-Linking, ืžื” ืฉื”ืงืฉื” ืขืœ ื ื™ืฆื•ืœ ื ืงื•ื“ื•ืช ื”ืชื•ืจืคื”

ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืžืขืจื›ืช ASLR (Rendomization Space Layout Address) ื—ืœืง ืžื”ืกื™ื‘ื™ื•ืช L ืขื ื›ืชื•ื‘ืช ื‘ืกื™ืก ื”ืขืจื™ืžื” ืžื›ื™ืœ ืขืจื›ื™ื ืืงืจืื™ื™ื ื”ืžืฉืžืฉื™ื ื›ืžืคืชื— ืœืงื™ื“ื•ื“ P (ื—ื•ืœืฅ ืขืœ ื™ื“ื™ ืคืขื•ืœืช ื”ืขื‘ืจื” ืฉืœ 12 ืกื™ื‘ื™ื•ืช ืขื‘ื•ืจ ื“ืคื™ื ืฉืœ 4096 ื‘ืชื™ื). ืžื ื™ืคื•ืœืฆื™ื” ื–ื• ืžืคื—ื™ืชื” ืืช ื”ืกื™ื›ื•ืŸ ืœื—ื˜ื™ืคืช ืžืฆื‘ื™ืข ื‘ืขืช ื ื™ืฆื•ืœ, ืžื›ื™ื•ื•ืŸ ืฉื”ืžืฆื‘ื™ืข ืื™ื ื• ืžืื•ื—ืกืŸ ื‘ืฆื•ืจืชื• ื”ืžืงื•ืจื™ืช ื•ื”ื—ืœืคืชื• ื“ื•ืจืฉืช ื™ื“ืข ืขืœ ื”ืงืฆืืช ื”ืขืจื™ืžื”. ื‘ื ื•ืกืฃ, ืงื•ื“ ื”ืชื™ืงื•ืŸ ืžื›ื™ืœ ื’ื ื‘ื“ื™ืงื” ื ื•ืกืคืช ืœื™ื™ืฉื•ืจ ื‘ืœื•ืง, ืฉืœื ืžืืคืฉืจ ืœืชื•ืงืฃ ืœื”ื—ืœื™ืฃ ืžืฆื‘ื™ืข ื‘ืขืจืš ืœื ืžื™ื•ืฉืจ ื•ื“ื•ืจืฉ ื™ื“ืข ืขืœ ืžืกืคืจ ื”ื‘ื™ื˜ื™ื ืฉืžื™ื•ืฉืจื™ื, ืžื” ืฉื‘ืžืขืจื›ื•ืช 64 ืกื™ื‘ื™ื•ืช ืžืืคืฉืจ ื‘ื ื•ืกืฃ ื—ืกื™ืžื” 15 ืžืชื•ืš 16 ื ื™ืกื™ื•ื ื•ืช ืชืงื™ืคื” ืฉืื™ื ื ืœื•ืงื—ื™ื ื‘ื—ืฉื‘ื•ืŸ ื™ื™ืฉื•ืจ.

ื”ืฉื™ื˜ื” ื™ืขื™ืœื” ืœื”ื’ื ื” ืžืคื ื™ ื”ืชืงืคื•ืช ื”ืžืฉืชืžืฉื•ืช ื‘ืฉื›ืชื•ื‘ ืžืฆื‘ื™ืข ื—ืœืงื™ (ืฉื™ื ื•ื™ ื‘ืชื™ื ื ืžื•ื›ื™ื), ืฉื›ืชื•ื‘ ืžืฆื‘ื™ืข ืžืœื (ื”ืคื ื™ื” ืžื—ื“ืฉ ืœืงื•ื“ ื”ืชื•ืงืฃ) ื•ืฉื™ื ื•ื™ ืžื™ืงื•ื ื”ืจืฉื™ืžื” ื‘ื›ืชื•ื‘ืช ืœื ืžื™ื•ืฉืจืช. ื›ื“ื•ื’ืžื”, ื”ื•ื›ื— ืฉื”ืฉื™ืžื•ืฉ ื‘-Safe-Linking ื‘-malloc ื™ืืคืฉืจ ื—ืกื™ืžืช ื ื™ืฆื•ืœ ืœืื—ืจื•ื ื” ืžื–ื•ื”ื” ืขืœ ื™ื“ื™ ืื•ืชื ื—ื•ืงืจื™ ืคื’ื™ืขื•ืช CVE-2020-6007 ื‘ืื•ืจ ื”ื—ื›ื ืฉืœ Philips Hue Bridge, ื”ื ื’ืจื ืขืœ ื™ื“ื™ ื”ืฆืคืช ื—ื•ืฆืฅ ื•ืžืืคืฉืจ ืœืš ืœื”ืฉื™ื’ ืฉืœื™ื˜ื” ืขืœ ื”ืžื›ืฉื™ืจ.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”