αααα»αα αα»ααααα½ααα·αα·ααα αααα αΆα ααααααΆαααΆαααΆα Safe-Linking αααααααΎα±ααααΆαα·ααΆααααα»αααΆααααααΎαααΆαααααααααααα
ααααααα
ααα·ααααα α¬ααΆαααααααα
ααα»α
α
ααα’α»ααα
ααα·ααααααα’αΆαααααααααΆαααααα»ααα»ααα
αααααααΎαααΆαααΆαα α
ααΌααααα mallocα Safe-Linking αα·αααΆααΆααααΆαααααα»αααΌαααααααΆαααααΆαααααααααααα
ααΆαααΆααααααααααααα ααα»ααααααΆαα½αααΉαααΆαα
αααΆααα·α
αα½α
αααα»α ααΆααααΎα±ααααΆαααΆααααα»αααααΆααααΆαααααΆαααααααΆααααααΎααααααααα½αα
ααα½αααααΆαααααααααααα
αααααΆαααααααααΈααΎααΆαα ααααααααααα’αΆα
ααααααααααα
ααΆα ααΆα
αΆαααΆα
ααααα»αααΆααααααααααΆαααΆααααααααααααααααααααααααΆαα±ααααα
ααααΆαααααααΆαα’αααΈ ααΆαααΆαααααααα
αααα»αααΆαα
αα
αΆαα
αααααααα’αα»αααα Safe-Linking ααααΌαααΆααααα
ααααααΆαα Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) αα·α Google TCMalloc α αΎαααααααΌαααΆαααααΎα‘αΎααααααΆααααΆαααααΎα±αααααααΎαα‘αΎαααΌαααΆαααΆαααΆααα
αααα»α Chromium (αα
αααα»α
α
αΆααααΆααααΈααααΆα 2012 Chromium ααΆαααΆαααααα½α
α αΎααα
αααα»ααα
αα
αααααααΆαααΆα MaskPtr αααα»αααααααααααααααΆααααα αΆααΌα
ααααΆ ααα»αααααααααααααΆαααΈ Checkpoint αααα αΆαααΈααααΎαααΆααααααααΆα)α
αααααααααΆαααααΆαααααΌαααΆαα’αα»ααααα½α
α αΎααααααΆααααΆαα
ααα
αΆααα
αααα»αααΆαα
ααααααΆαααααΈα αΆ Glibc α’.α£α α αΎα Safe-Linking ααΉαααααΌαααΆαααΎαααΆαααααΆαααΎαα uCibc-NG ααΆαααα Safe-Linking ααΆααααα
αΌα αα½ααααα
αΌααα
αααα»αααΆαα
ααααααΆα 1.0.33 α αΎαααααΌαααΆαααΎαααΆαααααΆαααΎαα ααΆαααααΆααααααΌααα
αααα»α gperftools (tcmalloc α
αΆαα) ααα½αααααα»ααααααΉαααααΌαααΆααααααααΌαααΆαααααΎααα½ααα
αααα»αααΆαα
ααααααΆαααΆαααααΆααα»αα
α’αααα’αα·αααααα TCMalloc (tcmalloc ααααΈ) ααα·ααααα·αααα½ααα ααΆαααααΆααααααΌααααααΎαα‘αΎαααΈααΆαααα
α»αααααΆαα’αα»ααααααααααααα αα·ααααααΌαααΆααααα»αααΆαααααααααΆαααααΎααααααααΆαααΌααααΌααΆα ααΎααααΈαααα½ααα·αα·αααααΆαααα
αΆαααΆα’αααΈαααααΎαααΆαααΌα
ααΆαααααΉααα»αα ααΆαααααΎαααααααααα·ααααα Checkpoint ααΆααααα αΆαααΆαα·ααΈααΆααααα Safe-Linking αα·αααΆαα±ααααΆαααΆαααααΎααααΆααα’αααα
αα
αΆααααααααα α αΎαααΆαα’αα»αααααα
αααα’αα»ααααααααα·ααααα·ααΆα heap ααααΌαααΆαααΆαααααααααΆαααααααααΉααα 0.02% α αΎααααα»αααααΈααα’αΆααααααααα»αααΊ 1.5% (αααααΆααααΆααααααααα ααΆαα
αααΆαααΎααα
αααα»α αα·ααΈααΆααααααααααααΎαααα»α Chromium ααααΌαααΆααααΆαααααααΆαααΆ "αα·α
ααΆα 2%")α ααΆαααΆαααααα
αΌα
Safe-Linking αααααααα
αααα»αααΆαααααΆααααααα 2-3 ααααΌαααΆαααααα·ααααα·ααΆαααααααα free() ααααΌαααΆαα α
α αΎαααΆαααααΆα 3-4 ααΆαααααααα malloc() ααααΌαααΆαα α
α ααΆαααααΎαααΆαααααΆααααΆααααααΎααααααααααΌα αα·αα
ααααααα·αααααΌαααΆαααΆαααΆαααα
Safe-Linking α’αΆα
ααααΌαααΆαααααΎαα·αααααΉαααααΎααααΈααααΎα±αααααααΎαα‘αΎαααΌααα»ααααα·ααΆαααααΆαα’αα»αααα heap ααααααααα»ααααααα ααα»αααααααααΆααααααααααΆαααααααααααα»α
αα·αααΆααα
αα
ααΆαααααααααα·ααααααααΆαα½ααααααααΎαααααΈα
ααα’α»ααααααααΆαααααα½ααααααΆαααα
ααΆααααΉαααα·ααααααα’αΆαααααααα½αα―αα αα·ααΈααΆααααααααααΊααΆααααααΆαααααα»αααΆαα’αα»αααα α αΎαααααΆαααααααααΌαα±αααααααααααΆααααΌαα½α α αΎαα’αα»ααααααΆαα
α
ααα’α»ααα
αααα»ααααααΆαααα
αααα»αααΌα (α§ααΆα ααααααααΆαα Glibc ααΆαααααΆααααααΌα ααΌαααΈαααΈαααααΆαα) α αα·ααΈβααΆβαααααβαα»αβααααααααβαα
βααΉαβααΆαβααααΆααβααααΌβαβααΌα
βααΆαβαααααβ:
+#ααααα PROTECT_PTR(pos, ptr) \\
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))
+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)
- αααααΆαα = p->fd;
+ αααααΆαα = REVEAL_PTR (p->fd);
...
ααααΉαααΆααααα·ααΈααΆαααααααΊααααΌαααααΎαα·ααααααα
αααααααΈααααααΆαα
αααααα’αΆααααααΆα ASLR (mmap_base) ααΎααααΈααΆαααΆααααααΈαααααααΆαααααα½αααΌα
ααΆ Fast-Bins αα·α TCache α αα»αααααααααααααΌαααΆαα’αα»ααααα
ααααααααα·α
αα
ααΆαα»αααααΆαααα
αααα»ααααααΈ ααΆααααΎαααΆαααΆαααααααααααΆαα αα·ααα·αα·αααααΎαααΆααααααΉααααααα ααααα·α
ααααΌαααΆααααα½ααααααααααααααααα·ααααα·ααΆα "(L>> PAGE_SHIFT) XOR (P)" ααα P ααΆαααααααααααα·α
α αΎα L ααΊααΆααΈααΆααα’αααα
αα
αΆααααααααα·α
ααααΌαααΆααααααΆαα»αα
αα
αααααααΎαααα»ααααααααα ASLR (Address Space Layout Randomization) ααΆααααααα L bits ααΆαα½α heap base address ααΆααααααα
ααααααααααααΎααΆ key ααΎααααΈ encode P (αααααααααα 12-bit shift operations for 4096-byte pages)α α§ααΆααααααααΆαααααααα αΆαα·αααααααΆααα½α
ααααα·α
αααα»αααΆαααααααααααα
αααααΆαααααα·α
αα·αααααΌαααΆααααααΆαα»ααααα»αααααααααΎαααααααΆ α αΎαααΆααααα½αααΆααΆαααΆαα
ααααααΉαα’αααΈααΆααααα
ααα ααΆα ααΎαααΈααα ααΌαααααααααΆαααΆααααα½ααα·αα·ααααααααααααααΆααααΆααααααΉααααα»α ααααα·αα’αα»ααααΆαα±ααα’αααααΆααααα αΆααααα½αααααα·α
αααααααααα·ααααααΉα αα·αααΆαααΆαα
ααααααΉαα’αααΈα
ααα½ααααΈααααααααΌαααΆααααααΉα ααααα
ααΎαααααααα 64 αααΈα α’αα»ααααΆαααααααααΆααααααααΆααα ααΆαααα»ααααααΆααααα αΆαα
ααα½α 15 αααα»αα
αααα 16 ααααα·ααα·αααΈααΆααααααΉααααα»αααααΈα
αα·ααΈααΆααααααααααΆαααααα·αααααΆααααααΆααααΆαααΆααααααΆααααΉαααΆαααΆααααα αΆααααααααΎααΆααααααααααα·α
αα½ααααααα‘αΎααα·α (ααααΆααααααΌαααααΆα) ααΆααααααααααα·α
ααααααα‘αΎααα·α (ααΆααααααΌααααααα
ααΆααααΌαααααα’αααααΆααααα αΆα) αα·αααΆαααααΆααααααΌαααΈααΆαααααααΈαα
α’αΆααααααΆααα·ααααααΉαα ααΆα§ααΆα ααα ααΆααααΌαααΆααααα αΆαααΆααΆαααααΎααααΆαα Safe-Linking αα
αααα»α malloc ααΉαα’αα»ααααΆαα±ααααΆαααΆααααααααΆααααΆαααααααααααα
ααΆαααααααΈαααα αααααα’ααααααααΆα αααα’αααααααΆαααααΆαααΆαααΆααααααααααΌα
ααααΆα CVE-2020-6007 αα
αααα»αα’αααΌαααααΎαααααΆααα Philips Hue Bridge ααααααααΆαααααΈααΆαα ααααααα αα·αα’αα»ααααΆαα±ααα’αααααα½αααΆαααΆααααααααααα§αααααα
ααααα: opennet.ru