Mayhem - sudo және OpenSSH аутентификациясын айналып өту үшін жад битінің бүліну шабуылы

Вустер политехникалық институтының (АҚШ) зерттеушілері аутентификация мен қауіпсіздік тексерулерінің бар-жоғын анықтау үшін бағдарламада жалаушалар ретінде пайдаланылатын стек айнымалыларының мәндерін өзгерту үшін Rowhammer динамикалық кездейсоқ қол жеткізу жады бит бұрмалау әдісін қолданатын Mayhem шабуылының жаңа түрін енгізді. өтті. Шабуылдың практикалық мысалдары SUDO, OpenSSH және MySQL-де аутентификацияны айналып өтуге, сондай-ақ OpenSSL кітапханасындағы қауіпсіздікке қатысты тексерулердің нәтижесін өзгертуге арналған.

Шабуыл нөлден ерекшеленетін мәндерді салыстыру үшін тексерулерді қолданатын қолданбаларға қолданылуы мүмкін. Осал кодтың мысалы: int auth = 0; ... // аутентификация сәтті болған жағдайда аутентификация мәнін өзгертетін тексеру коды if(auth != 0) AUTH_SUCCESS қайтарады; әйтпесе AUTH_FAILURE қайтарады;

Осы мысалдың контекстінде сәтті шабуыл үшін стекте 32-биттік аутентификациялық айнымалымен байланысты жадтағы кез келген битті бүлдіру жеткілікті. Айнымалыдағы кез келген бит бүлінген болса, мән енді нөлге тең болмайды және шартты оператор аутентификацияның сәтті аяқталуын анықтайды. Мұндай валидация үлгілері қолданбаларда жиі кездеседі және олар, мысалы, SUDO, OpenSSH, MySQL және OpenSSL-де кездеседі.

Майхем - sudo және OpenSSH аутентификациясын айналып өту үшін жад биттерін бұзу шабуылы

Шабуыл «if(auth == 1)» пішінін салыстыру үшін де қолданылуы мүмкін, бірақ бұл жағдайда оның орындалуы күрделене түседі, өйткені 32-нің кез келген битін емес, соңғы битін бұрмалау қажет. Бұл әдісті процессор регистрлеріндегі айнымалы мәндерге әсер ету үшін де қолдануға болады, өйткені контекстік қосқыш, функция шақыру немесе сигнал өңдегіші іске қосылған кезде регистрлердің мазмұны уақытша стекке түсірілуі мүмкін. Регистр мәндері жадта болған уақыт ішінде бұл жадқа бұрмаланулар енгізілуі мүмкін және өзгертілген мән регистрге қалпына келтіріледі.

Майхем - sudo және OpenSSH аутентификациясын айналып өту үшін жад биттерін бұзу шабуылы

Биттерді бұрмалау үшін RowHammer класының шабуылының модификацияларының бірі қолданылады. DRAM жады әрқайсысы конденсатор мен транзистордан тұратын ұяшықтардың екі өлшемді массиві болғандықтан, бір жад аймағын үздіксіз оқуды орындау кернеудің ауытқуына және көрші ұяшықтарда зарядтың аздап жоғалуына әкелетін ауытқуларға әкеледі. Егер оқу қарқындылығы жоғары болса, онда көрші ұяшық зарядтың жеткілікті үлкен мөлшерін жоғалтуы мүмкін және келесі регенерация циклінде өзінің бастапқы күйін қалпына келтіруге уақыт болмайды, бұл ұяшықта сақталған деректердің мәнінің өзгеруіне әкеледі. . RowHammer-тен қорғау үшін чип өндірушілері ерекше жағдайларда ұяшықтардың бүлінуін блоктайтын, бірақ барлық ықтимал шабуыл нұсқаларынан қорғамайтын TRR (Target Row Refresh) механизмін қосты.

Майхем шабуылынан қорғау үшін салыстыруларда нөлден айырмашылығын бағалауды немесе біреуге сәйкес келуді емес, нөлден басқа октеттері бар кездейсоқ тұқымдық мәнді пайдаланып сәйкестікті тексеруді пайдалану ұсынылады. Бұл жағдайда айнымалының қажетті мәнін орнату үшін бір биттің бұрмалануынан айырмашылығы шындыққа жанаспайтын биттердің айтарлықтай санын дәл бұрмалау қажет. Шабуылсыз кодтың мысалы: int auth = 0xbe406d1a; ... // аутентификация сәтті өткен жағдайда аутентификация мәнін 0x23ab8701 мәніне орнататын тексеру коды if(auth == 0x23ab8701) AUTH_SUCCESS қайтарады; әйтпесе AUTH_FAILURE қайтарады;

Көрсетілген қорғау әдісін sudo әзірлеушілері әлдеқашан пайдаланған және CVE-1.9.15-2023 осалдығын түзету ретінде 42465 шығарылымына енгізілген. Олар негізгі осал жобаларға түзетулер енгізілгеннен кейін шабуылды жүзеге асыруға арналған кодтың прототипін жариялауды жоспарлап отыр.

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

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