Linux ядросының қоқыс жинағышындағы жарыс жағдайы, бұл артықшылықтардың артуына әкелуі мүмкін

Бір кездері Spectre және Meltdown осалдықтарын анықтаған Google Project Zero командасынан Янн Хорн Linux ядросының қоқыс жинағышында осалдықты (CVE-2021-4083) пайдалану әдістемесін жариялады. Осалдық unix ұяшықтарындағы файл дескрипторларын тазалау кезіндегі жарыс жағдайына байланысты және жергілікті артықшылығы жоқ пайдаланушыға ядро ​​деңгейінде өз кодын орындауға мүмкіндік береді.

Мәселе қызықты, себебі жарыс шарты орын алатын уақыт терезесі нақты эксплуаттарды жасау үшін тым аз деп бағаланды, бірақ зерттеу авторы егер эксплойт жасаушы болса, мұндай бастапқыда күмәнданатын осалдықтар нақты шабуылдардың көзіне айналуы мүмкін екенін көрсетті. қажетті дағдылар мен уақыт. Янн Хорн филиграндық манипуляциялардың көмегімен close() және fget() функцияларын бір уақытта шақыру кезінде пайда болатын жарыс жағдайын толығымен пайдаланатын осалдыққа дейін азайтуға және әлдеқашан босатылған деректерге қол жеткізуге болатындығын көрсетті. ядроның ішіндегі құрылым.

Бір уақытта close() және fget() шақыру кезінде жарыс шарты файл дескрипторын жабу процесі кезінде орын алады. Close() шақыру fget() орындалмай тұрып орын алуы мүмкін, бұл қоқыс жинаушыны шатастырады, себебі қайта есептеуге сәйкес файл құрылымында сыртқы сілтемелер болмайды, бірақ файл дескрипторына тіркелген күйінде қалады, яғни. Қоқыс жинаушы оның құрылымға эксклюзивті кіру мүмкіндігі бар деп ойлайды, бірақ іс жүзінде қысқа уақыт ішінде файл дескрипторы кестесіндегі қалған жазба әлі де босатылатын құрылымды көрсетеді.

Жарыс жағдайына түсу ықтималдығын арттыру үшін жүйеге тән оңтайландыруларды енгізу кезінде пайдаланудың сәтті болу ықтималдығын 30%-ға дейін арттыруға мүмкіндік беретін бірнеше трюктар қолданылды. Мысалы, файл дескрипторлары бар құрылымға қол жеткізу уақытын бірнеше жүз наносекундқа ұлғайту үшін кэшті басқа процессор өзегіндегі белсенділікпен толтыру арқылы деректер процессор кэшінен шығарылды, бұл құрылымды құрылғыдан емес, жадтан шығаруға мүмкіндік берді. жылдам процессорлық кэш.

Екінші маңызды мүмкіндік жарыс жағдайының уақытын ұлғайту үшін аппараттық таймер арқылы жасалған үзілістерді пайдалану болды. Сәт үзіліс өңдеушісі жарыс шарты орын алған кезде іске қосылатын және кодтың орындалуын біраз уақытқа үзетін етіп таңдалды. Басқаруды қайтаруды одан әрі кешіктіру үшін epoll көмегімен күту кезегіндегі 50 мыңға жуық жазба жасалды, бұл үзу өңдеушісі арқылы іздеуді қажет етті.

Осалдықты пайдалану әдістемесі 90 күндік ашылмаған кезеңнен кейін ашылды. Мәселе 2.6.32 ядросынан бастап пайда болды және желтоқсанның басында түзетілді. Түзету 5.16 ядросына қосылды және сонымен бірге ядроның LTS тармақтарына және дистрибутивтерде жеткізілетін ядро ​​пакеттеріне жіберілді. Бір қызығы, осалдық CVE-2021-0920 ұқсас проблемасын талдау кезінде анықталған, ол MSG_PEEK жалауын өңдеу кезінде қоқыс жинағышта көрінеді.

Ақпарат көзі: opennet.ru

пікір қалдыру