EntrySign: уязвимост, засягаща процесорите AMD Zen

Логото на уязвимостта на EntrySign

Наскоро, Инженерите на Google обявиха подробности за критична уязвимост, идентифицирана като CVE-2024-56161. Кръстен под името на EntrySign, този провал позволява да се избегне механизмът за проверка на цифровия подпис по време на актуализация на микрокод на AMD процесори, използващи първите четири поколения на микроархитектурата Zen.

EntrySign засяга широка гама от процесори, позволява на атакуващ да заобиколи контролите за сигурност, които гарантират целостта на микрокода, потенциално отваряйки вратата за злонамерени модификации на поведението на хардуера.

Относно уязвимостта

Произходът на тази уязвимост се крие в използването на алгоритъма AES-CMAC по време на проверка на цифровия подпис вместо надеждна хеш функция. AMD използва този алгоритъм, за да подпише микрокода, използвайки частен RSA ключ и добавяйки публичен ключ към корекцията.

Процесът на проверка включва процесорът да сравнява хеша на публичния ключ, вграден по време на производството, с хеша на ключа, посочен в корекцията. обаче тъй като е използван CMAC, което всъщност не е хеш функция, а код за удостоверяване предаване на съобщение, открит е пробив в сигурността.

CMAC се основава на алгоритъма AES и използва операции XOR за комбиниране на блокове от данни, но тъй като не е проектиран да бъде устойчив на сблъсък, той позволява на атакуващ, който знае ключа за криптиране, да изчисли междинни стойности, които компенсират промените във входа, оставяйки резултата от операцията непроменен.

И Intel, и AMD проектираха уникални RISC-базирани набори от инструкции за микрокод, и двата недокументирани, но концептуално подобни на други набори от RISC инструкции като ARM или RISC-V. Подобно на софтуера, правилното внедряване на сложен хардуер е предизвикателство; В исторически план това е довело до множество добре известни грешки, като грешката FDIV на Intel в Pentium през 1994 г.

AMD предоставя един ключ за криптиране за AES-CMAC във всичките му процесори от Zen 1 до Zen 4, което означава, че ако някой извлече този ключ от един процесор, той може да го приложи към всички останали. Всъщност изследователите са открили, че тези процесори използват известен ключ, взет от пример в указанията на NIST SP 800-38B.

Това е позволило, на теория, да се генерират фалшиви кръпки чрез замяна на публичния ключ на корекцията с такъв, който произвежда същия хеш, и изберете колизии за цифровия подпис. Такива сблъсъци се постигат чрез добавяне на допълнителен блок от привидно произволни данни към микрокода, така че модифицираната корекция запазва оригиналния цифров подпис на AMD.

EntrySign, уязвимостта CVE-2024-56161, която позволява на нападателите да заобиколят контролите за сигурност

За справяне с този проблемЗа да изследват нови начини за манипулиране на микрокод в AMD процесори, инженерите на Google Те разработиха Zentool, колекция от комбинирани инструменти за изследване на пачове на микрокод, включително ограничено разглобяване, създаване на пачове на микрокод с помощта на ограничено количество монтаж на обратно инженерство.

Zentool е проектиран да улесни анализа и модифицирането на микрокод, предлагайки серия от команди, които позволяват от редактиране на параметри и замяна на инструкции до зареждане на модифицирания микрокод в процесора и коригиране на цифровия подпис на корекцията.

Например командата "zentool edit" позволява редактиране на параметри във файлове с микрокод, докато "zentool print" показва подробна информация за вътрешните структури на микрокода. Освен това «zentool load» зарежда микрокода в процесора, а «zentool resign» преизчислява цифровия подпис, като взема предвид направените промени. Освен това пакетът включва помощни програми като mcas и mcop, които предоставят функционалност на асемблер и дезасемблер за работа директно с микрокод.

Възможностите на Zentool позволява на разработчиците да подготвят и прилагат свои собствени пачове на процесори AMD Zen Като илюстративен пример е подготвена корекция, която променя логиката на инструкцията RDRAND. След прилагането на тази корекция, инструкцията RDRAND спира да генерира псевдослучайни последователности и започва последователно да връща числото 4, като по този начин демонстрира силата на модифициране на микрокода и промяна на очакваното поведение на процесора.

Струва си да се спомене това Zentool идва с подробно ръководство относно микроархитектурата RISC86, използвана в микрокода на AMD, както и бележка с инструкции, обясняваща как да създадете персонализиран микрокод. Ръководството показва, наред с други неща, как да проектирате нови инструкции на процесора, да промените поведението на съществуващите инструкции и да заредите тези промени директно в процесора.

И накрая, ако се интересувате да научите повече за него, можете да се консултирате с подробностите в следваща връзка.