В първата част на този материал разгледахме някои от по-известните хардуерни уязвимости в процесорите, водещи до грешка в изчисленията или до изтичане на чувствителна информация. Тук ще продължим с изброяването на хардуерните бъгове и уязвимости.
TLB бъгът в процесорите на AMD
През 2007 година AMD представи на пазара своите първи потребителски 4-ядрени процесори с архитектура K10, при които всичките ядра са разположени на един и същи кристал. Другият важен момент при тези чипове е наличието на общ за всички ядра L3 кеш. Тези процесори станаха нелоши конкуренти на Intel Core 2 Quad, но грешка в L3 кеша в първата версия (B2) на тези процесори, малко помрачи радостта на феновете на AMD.
TLB означава translation look-aside buffer или буфер за бързо преобразуване на виртуалните адреси във физически и при сериозно натоварване на чипа, при което активно се използва L3 кеша, системата понякога греши. Този бъг е особено критичен в сървърния сегмент и в крайна сметка AMD се принуди да спре доставките на процесорите Opteron.
Този бъг се отстранява по софтуерен път чрез корекция в BIOS-а, но се губят 10% от производителността, което се усеща. Бъгът бе отстранен на хардуерно ниво след половин година, когато излязоха новите процесори B3.
Бавно умиращите Intel Atom C2000
Едва ли някой все още не знае, че силициевите чипове деградират с времето, при това, колкото е по-малък технологичния процес и по-високо нагряването, деградирането се осъществява по-бързо. Но ако не се използва екстремален овърклок със сериозно повишаване на захранващото напрежение, процесорите живеят десетилетия и морално остаряват по-бързо, отколкото престават да работят поради деградация на кристала.
Но не и при процесорите Atom C2000. Тези чипове излязоха през 2013 година и са предназначени преди всичко за микросървъри, комуникационни устройства и за облачните хранилища – с други думи там, където е необходима висока производителност и едновременно с това хладен процесор. Като се има предвид невисоката цена, 8-те ядра и температурен коефициент под 20 W, тези процесори станаха много популярни сред големите сървърни компании. Но през 2017 година се разкри сериозен проблем – вътре в тези процесори сякаш тиктака бомба.
Проблемът се дължи на синтезатора LPC за честотите на шините. Само след година и половина този синтезатор деградира толкова много, че синхронизиращите импулси започват да се губят, което води до тотален срив в работата на цялото устройство. Проблемът сериозно се задълбочи и от това, че синтезаторът е интегриран в процесора, а процесорът е директно запоен към дънната платка и замяната е твърде трудна.
Уви, в този случай е очевидно, че няма как проблемът да бъде решен по програмен път и Intel оправи нещата чрез хардуерна промяна в тези процесори чрез прехода към новия степинг C0.
Овърклокът на Skylake
Създава се впечатлението, че бъговете в процесорите само тровят живота на потребителите. Това не е точно така и не бива да забравяме, че е възможен овърклокът на всички SkyLake процесори на дънни платки със Z чипсета.
Стандартно, Intel дава възможност за овърклок само на процесорите с индекс K на дъната със Z чипсети. Другите съчетания на дънни платки и процесори не дават възможност за увеличаване честотата на процесора. Но в този случай Intel е допуснала грешка в микрокода на своите чипове и по този начин и обикновените процесори без индекс К могат да се клокват, но само при наличието на Z чипсет и само по шина. Какво означава това?
Честотата на процесора се образува от два параметъра: това е FSB честотата на на шината и числото на множителя. В 99% от случаите шината по подразбиране има фиксирана честота с честота 100 MHz, а множителят може да се променя то единици до няколко десетици. Така например, процесорът Core i7-8700K има максимален множител 43, което дава честота 43 х 10 MHz = 4300 MHz. Чрез увеличаване на множителя до например 50, можем да получим 50 х 100 MHz = 5000 MHz.
Очевидно е, че може да се овърклоква и чрез увеличение честотата на шината: ако тя стане 120 MHz, при същия множител от 43, ще получим работна честота 43 х 120 MHz – 5160 MHz. Именно заради бъг в микрокода е възможно клокването на SkyLake процесорите, които официално не подлежат на овърклок. Така например, същият Core i5-6400 с максимална честота 31 х 100 MHz = 3100 MHz, след увеличаване честотата на шината с помощта на Z чипсет, може да работи с тактова честота 31 х 130 MHz = 4030 MHz.
Разбира се, Intel твърде бързо обнови микрокода и той бе веднага интегриран от различните производители на дънни платки. Само че далеч не всички потребители инсталираха и си оставиха този микрокод, което е съвсем логично, понеже при неговото инсталиране изчезва потенциалният прираст на производителността с почти 30%.
Но и тук далеч не всичко е наред. При подобен овърклок се изключват векторните AVX инструкции, така че при някои алгоритми, след овърклока, производителността на клокнатите по шина процесори става дори и по-ниска. Но в игрите тези инструкции се използват твърде рядко, което дава възможност на някои потребители и до днес да използват този бъг.
Отключване на допълните ядра в процесорите на AMD
Вратичката, даваща възможност за овърклок на централния процесор е наистина приятно нещо. Но 10 години преди това AMD прояви изключителна щедрост: какво ще кажете за двойното увеличение броя на ядрата чрез промяна на две опции в BIOS?
Причината за тази щедрост е доста банална: много често слабите процесори са мощни чипове, получени чрез орязване броя на ядрата, кеша и т.н. Това е съвсем логично: защо да се изхвърля кристал, в който не работят едно или две процесорни ядра? Те просто могат съвсем лесно да бъдат изключени и същият процесор да бъде продаден при по-ниска цена. Така например, съвременният 8-ядрен Core i9-9900K има същия кристал като 6-ядрения Core i5-9600K. Точно по същия начин чрез изключването на 4 ядра и части от кеша, от Ryzen 7 се получава Ryzen 3.
Но понякога годните кристали са толкова много, че се налага да се блокират и съвсем читавите. Всъщност, това се практикува от всички компании и този подход им е изгоден. Така например, всеки кристал условно струва на компанията 50 долара, а топ-процесорът с него – приблизително $200. Очевидно е, че далеч не всички ще купят топ-модела. По-изгодно е половината ядра да бъдат програмно изключени и чипът да се продаде примерно за $100. По този начин и потребителите са доволни, а и компанията няма да остане без приход.
Пределно ясно е, че щом блокирането на половината ядра е програмно, то защо да не се включи изключеното? Разбира се, може да се случи така, че кристалът да си е бил бракуван и допълнителните ядра да се сриват, но практиката показа, че е много голям шансът вместо едноядрен Sempron, съвсем безплатно да получите двуядрен Athlon или Phenom. Това си е двукратно увеличение на производителността просто ей така.
При това списъкът с тези процесори е доста внушителен. Това са Sempron 1xx, Athlon и Phenom II X2, X3 и X4 – всичките са няколко десетки модела!
Разбира се, в наши дни от всичко това няма смисъл, понеже дори и топ-моделите Phenom от това време днес трудно ще се справят дори и със сърфирането в Глобалната мрежа.
Алчността на Intel
Милениумът при процесорите бе отбелязан чрез надпреварата за достигане на 1 GHz. Така например, Pentium III с тази тактова честота бе анонсиран на 8 март 2000 година. А през месец юли същата година Intel се устреми към още по-високи честоти – до 1,13 GHz.
Само че не се получи. При доста високото напрежение от 1,75 V този процесор работи нестабилно и през месец август Intel иззе тези чипове. Чак след две подобрения, през 2001 година, процесорите на Intel вече можеха да работят стабилно с честота 1,1 и 1,13 GHz.
Уязвимостта BranchScope
Уязвимостите Meltdown и Spectre отвориха кутията на Пандора и сега едва ли не всеки месец се появява информация за подобни хардуерни уязвимости, които Intel често пъти не успява да оправи.
Най-важните от тях си имат свои имена, а не само номера. Подобна е уязвимостта BranchScope, проявяваща се в процесорите Intel Core i5 и i7 от фамилиите Sandy Bridge, Haswell и Skylake. При това, уязвимостите могат да се използват дори и ако приложението е стартирано в анклава (защитения масив от код) Intel SGX.
Както и Spectre, при тази атака се използва модулът за предсказване на условните преходи, който е предназначен да ускорява работата на процесора чрез прогнозиране и отгатване на бъдещи преходи или инструкции. Но проблемът е в това, че когато два процеса използват идно и също процесорно ядро, те съвместно използват модула за прогнозиране, което дава възможност на единия процес да получи данните на другия. Добре е, че пачът за Spectre решава и проблема с BranchScope.
Бъгът в процесорите Tegra, дал възможност за хакването на Nintendo Switch
Грешките в ARM процесорите са много по-малко от тези в x86, но също са сериозни. Така например, преди около една година хакерите откриха хардуерна уязвимост в микрокода на на процесора Tegra X1, който се използва в конзолата Nintendo Switch.
Тази уязвимост също е чисто хардуерна и няма как да се оправи чрез софтуерни решения. Необходима е нова версия на процесора. Но докато нов чип няма, с конзолата може да се прави всичко: така например, наскоро на нея бе стартиран стандартен пълноценен Linux.
Използването на тази грешка е доста забавно: трябва да се съединят изводите Joy-Con и този за регулиране силата на звука. Но трябва да се внимава много: ако се объркат, изгаря LCD матрицата и възникват и други повреди.
VME бъгът в процесорите Ryzen
В процесорите Ryzen също има грешки, които за щастие не са особено големи и се оправят чрез обновяване на AGESA библиотеките.
Една от по-интересните подобни грешки е VME. Тя е отпреди две години и се състои в неправилната реализация на инструкцията INT, генерираща програмно прекъсване. В крайна сметка в режима на виртуален 8086 процесор (именно това е VME и този режим се поддържа 40 години след излизането на 8086), който се използва за стартирането на старите 8086 програми в съвременните ОС, процесорите Ryzen не работят коректно и това понякога води до срив и BSOD.
Проблемът е актуален за 32-битовите Windows XP и Windows Server 2003, които изпълняват 16-битов код в реално време. Изглежда че не е кой знае какво, особено като се има предвид, че при 64-битовите операционни системи бъгът не се проявява. Но има виртуални машини, които се използват за стартиране на стар софтуер, който не работи в средата на Windows 10. Но тези бъгове са лесни за оправяне, което AMD и направи в AGESA 1.0.0.6.
Уязвимостта на SkyLake-U процесорите при използване на USB 3.0
Архитектурата SkyLake се оказа пълна с грешки, а този проблем засегна нисковолтовите процесори с тази архитектура и устройствата с USB 3.0 порт – тоест на практика всички лаптопи и таблети. За хакването са необходими само две неща: обикновен USB кабел и пакета за разработчици Intel System Studio заедно с Intel System Debugger и Intel DAL.
Те дават възможност по хардуерен път да се получи достъп до ядрото на операционната система, хипервайзорите и драйверите, с помощта на интерфейса JTAG (Joint Test Action Group) и технологията Direct Connect Interface (DCI) – именно тя може да работи чрез USB 3.0 порта, което всъщност е уязвимост. Защитата не е сложна: трябва да се изключи DCI чрез USB портовете. Именно така правят повечето производители, чрез обновяване BIOS-ите на своите системи.
Дотук изброихме почти 20 хардуерни уязвимости и бъгове в процесорите, което не е малко. Ако знаете за други подобни грешки – споделете, за да умножим познанието.