á
á
áºáá±ážáá±ážááááºáá¯áá¹ááá®
Safe-Linking ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº Patches áá»á¬ážááẠGlibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ááŸáá·áº Google TCMalloc á¡ááœáẠááŒááºáááºáá¬ážááŒá®áž Chromium ááœáẠáá¬ááœááºááŸá¯ á¡ááá·áºááŒáŸáá·áºááẠá¡ááá¯ááŒá¯áá¬ážáááºá
2012 áá¯ááŸá
áºááááºážá Chromium ááẠáá°áá®áá±á¬ááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠáááºááœááºááá·áº MaskPtr áá¬ááœááºááŸá¯áááºážá
áá
áºááœáẠááá·áºááœááºážáá¬ážááŒá®ážááŒá
áºáá±á¬áºáááºáž Checkpoint ááŸááŒá±ááŸááºážáá»ááºááẠááá¯ááá¯ááŒáá·áºáá¬ážáá±á¬á
áœááºážáá±á¬ááºáááºááá¯ááŒááááº)á
á¡ááŒá¶ááŒá¯áá¬ážáá±á¬ áá¬áá±ážááŸá¯áá»á¬ážááᯠá©áá¯ááºááá¯ááºááœáẠáá±ážááá¯á·ááẠá¡áááºááŒá¯ááŒá®ážááŒá
áºáááºá
developer áá»á¬áž
Safe-Linking ááẠfree() ááá¯áá±á«áºááá¯ááá¯ááºáž 2-3 á¡ááá¯á
ááºážáá±ážááœá²ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááá¯áá¯ááºáá±á¬ááºááŒááºážááŒáá·áºááááºáá»á¬ážááŸáá·áº malloc() áá¯áá±á«áºááá·áºá¡áá»áááºááá¯ááºážááœááºááœáŸááºááŒá¬ážáá»áẠ3-4 áá¯ááŸááááºá áááŠážáááºááŸááºááŒááºážááŸáá·áº áá»áááºážáááºááá¯ážáá¯ááºáá¯ááºááŒááºážá¡ááá·áºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáááá¯á¡ááºáá«á
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);
...
áááºážáááºážáá¡ááŸá
áºáá¬áááŸá¬ Fast-Bins ááŸáá·áº TCache áá²á·ááá¯á·áá±á¬ áá
áºáá¯áááºážáá±á¬áá»áááºáááºáá¬ážáá±á¬á
á¬áááºážáá»á¬ážááá¯áá¬ááœááºááẠASLR ááááºá
á¬áá»áááºážáá¯ááºáá±á¬ááºááŒááºážááá¹ááá¬áž (mmap_base) ááŸáá»áááºážáá±áá¬ááá¯á¡áá¯á¶ážááŒá¯áááºááŒá
áºáááºá á
á¬áááºážááŸá áá±á¬ááºáááºááŒááºá
ááºáá®ááá¯á· ááœáŸááºááŒáá»ááºáá
áºáá¯ááá¯á· áááºááá¯ážááᯠá¡áá¯á¶ážáááŒá¯áá®á áááºážááẠáá»ááºááŸá¬áá¯á¶ážá¡ááœááºááŒá±á¬ááºážááŒááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž á
á¬áá»ááºááŸá¬áá»áááºááŸáááŸá¯ááᯠá
á
áºáá±ážáááºá ááœáŸááºááŒáá»ááºááᯠ"(L>> PAGE_SHIFT) XOR (P)" áá¯ááºáá±á¬ááºáá»ááºá ááááºááŒáá·áº á¡á
á¬ážááá¯ážááá¯ááºááŒá®áž P ááẠááœáŸááºááŒáá»ááºá áááºááá¯ážááŒá
áºááŒá®áž L ááẠááœáŸááºáá¶ááᯠááááºážáááºážáá¬ážááá·áº ááŸááºáá¬ááºáááºáá±áá¬ááŒá
áºáááºá
á
áá
áºáá²ááŸá¬ áá¯á¶ážáá«áááºá
áááºážáááºážááẠáá
áºá
áááºáá
áºááá¯ááºáž ááœáŸááºááŒáá»ááºááᯠááŒááºáááºáá±ážáá¬ážááŒááºáž (á¡áááá·áºááá¯ááºáá»á¬ážááᯠááŒá±á¬ááºážáá²ááŒááºáž)á ááœáŸááºááŒáá»ááºá¡ááŒáá·áºá¡á
á¯á¶ááᯠááŒááºáááºáá±ážáá¬ážááŒááºáž (ááá¯ááºááá¯ááºáá°ááá¯ááºááá¯á· ááŒááºááœáŸááºážááŒááºáž) ááŸáá·áº ááŸáááá¬ážáá±á¬ ááááºá
á¬ááœáẠá
á¬áááºážáááºáá±áá¬ááᯠááŒá±á¬ááºážáá²ááŒááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááá·áº ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ááœááºáááºá¡ááœáẠáááºážáááºážááẠáááá±á¬ááºááŸá¯ááŸááá«áááºá á¥ááá¬á¡áá±ááŒáá·áºá malloc ááœáẠSafe-Linking ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠáááŒá¬áá±ážáá®á áá±á«ááºážáá¯á¶ááŒááºááŒááºážááᯠááááºááá¯á·ááŒááºážá¡á¬áž ááœáá·áºááŒá¯áá±ážááŒá±á¬ááºáž ááŒááá¬ážáááºá
source: opennet.ru