Текшерүү пункту Safe-Linking коргоо ыкмасын сунуштады, бул аялуу жерлерди пайдаланууну кыйындатат

Checkpoint Company берилген Safe-Linking коргоо механизми, бул malloc чалууларын аткарууда бөлүнгөн буферлерге көрсөткүчтөрдүн аныктамасын же модификациясын манипуляциялоочу эксплуаттарды түзүүнү кыйындатат. Safe-Linking алсыздыктарды пайдалануу мүмкүнчүлүгүн толугу менен бөгөттөбөйт, бирок минималдуу чыгым менен бул эксплуатациялардын айрым категорияларын түзүүнү олуттуу кыйындатат, анткени эксплуатациялануучу буфердин толуп кетишинен тышкары, бул тууралуу маалыматтын агып кетишине алып келген дагы бир кемчиликти табуу керек. үймөктү эс тутумга жайгаштыруу.

Safe-Linkingди ишке ашыруучу патчтар Glibc (ptmalloc), uClibc-NG (dmalloc), gperftools (tcmalloc) жана Google TCMalloc үчүн даярдалган жана ошондой эле Chromium'да коргоону жогорулатуу үчүн сунушталган (жылы
2012-жылдан бери Chromium ошол эле маселени чечүүгө багытталган MaskPtr коргоо техникасында курулган, бирок Checkpoint чечими жогорку натыйжалуулукту көрсөтөт).
Сунушталган патчтар август релизинде жеткирүү үчүн буга чейин бекитилген Glibc 3.32 жана Коопсуз шилтеме демейки боюнча иштетилет. uClibc-NG Коопсуз шилтемени колдойт кирди чыгаруу 1.0.33 камтылган жана демейки боюнча иштетилген. gperftools өзгөртүүлөр (эски tcmalloc) кабыл алынган, бирок келечектеги чыгарылышта вариант катары сунушталат.

Developers TCMalloc (жаңы tcmalloc) кабыл алуудан баш тартты өзгөртүү, иштин катуу начарлашын жана бардыгы күтүлгөндөй иштеп жатканын такай текшерүү үчүн кеңири тесттерди кошуу зарылдыгын айтып. Текшерүү пунктунун инженерлери тарабынан тестирлөө Safe-Linking ыкмасы эстутумдун кошумча сарпталышына алып келбей турганын көрсөттү, ал эми үймөк операцияларын аткарууда өндүрүмдүүлүк орточо эсеп менен болгону 0.02%, ал эми эң начар сценарийде 1.5% (салыштыруу үчүн, Chromium'да колдонулган ыкма "2% дан аз" деп бааланат). Inclusion
Safe-Linking, free() ар бир чакырылган сайын 2-3 кошумча монтаждоо инструкциясы жана malloc() ар бир чакырылган сайын 3-4 нускама аткарылат. Инициализация жана кокустан маанилерди түзүү этаптарын иштетүү талап кылынбайт.

Текшерүү пункту Safe-Linking коргоо ыкмасын сунуштады, бул аялуу жерлерди пайдаланууну кыйындатат

Safe-Linking ар кандай үймөк ишке ашыруулардын коопсуздугун жакшыртуу үчүн гана эмес, ошондой эле буферлердин жанында жайгашкан көрсөткүчтөрдүн жалгыз байланышкан тизмелерин колдонгон ар кандай маалымат структураларына бүтүндүктү башкаруу элементтерин кошуу үчүн колдонулушу мүмкүн. Методду ишке ашыруу өтө жөнөкөй жана бир гана макросту кошуп, аны коддогу кийинки блоктун көрсөткүчтөрүнө колдонууну талап кылат (мисалы, Glibc үчүн өзгөрүүлөр коддун бир нече саптары). Метод төмөнкүдөй өзгөрүүлөрдү камтыйт:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((өлчөмү_t) pos) >> 12) ^ ((өлчөм_t) ptr)))

+#аныктоо 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 көрсөткүч сакталган эстутумдун орду.

Текшерүү пункту Safe-Linking коргоо ыкмасын сунуштады, бул аялуу жерлерди пайдаланууну кыйындатат

Системада колдонулганда ASLR (Address Space Layout Randomization) үймөк дареги менен L биттеринин бөлүгү P коддоо үчүн ачкыч катары колдонулган кокустук маанилерди камтыйт (12 байт барактар ​​үчүн 4096 биттик нөөмөт операциясы менен алынган). Бул манипуляция эксплуатацияда көрсөткүчтү уурдап кетүү коркунучун азайтат, анткени көрсөткүч баштапкы түрүндө сакталбайт жана аны алмаштыруу үймөктү бөлүштүрүү боюнча билимди талап кылат. Мындан тышкары, патч коду ошондой эле блоктордун тегиздөөсүн кошумча текшерүүнү камтыйт, ал чабуулчуга көрсөткүчтү теңдештирилбеген мааниге алмаштырууга мүмкүндүк бербейт жана 64 биттик системаларда кошумча бөгөт коюуга мүмкүндүк берген тегизделген биттердин санын билүүнү талап кылат. 15 чабуул аракетинин 16и тегиздөөнү эске албаган.

Метод көрсөткүчтү жарым-жартылай кайра жазууну (төмөн байттарды өзгөртүү), көрсөткүчтү толук кайра жазууну (чабуулчунун кодуна багыттоо) жана түзүлбөгөн даректе тизменин ордун өзгөртүүнү колдонгон чабуулдардан коргоо үчүн натыйжалуу. Мисал катары, malloc ичинде Safe-Linking колдонуу жакында эксплуатацияны бөгөт коюуга мүмкүндүк берери көрсөтүлгөн. аныкталган ошол эле аялуу изилдөөчүлөр тарабынан CVE-2020-6007 Philips Hue Bridge акылдуу жарыгында, буфердин толуп кетишинен улам келип чыккан жана аппаратты башкарууга мүмкүнчүлүк берет.

Source: opennet.ru

Комментарий кошуу