Взлом Xbox One

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Взлом Xbox One (также известный в узких кругах красноглазиков как The Bliss Hack) — вин, свершившийся в 2026 году на конференции REverse, когда хакер Маркус doom Гааседелен (Markus Gaasedelen) наконец-то распечатал 12-летнюю девственность консоли 8-го поколения от мелкомягких.

Суть[править]

В 2013 году корпорация зла выкатила на рынок Xbox One. Консоль стартовала с эпического фейла на презентации (TV-TV-TV, кинект, привязка к онлайну), из-за чего сонибои с их PS4 ржали над биллибоями в голос. Но в одном мелкомягкие преуспели на 100 процентов — они создали нереально параноидальную систему защиты.

Историческая справка для ньюфагов:

  • Xbox (2001) — взломан почти сразу.
  • Xbox 360 (2005) — держался дольше, но пал смертью храбрых от Reset Glitch Hack (RGH) в 2011 году.
  • Xbox One (2013) — оставался невзломанным 12 долгих лет. 12 гребаных лет, Карл!
  • Xbox Series S/X (2020) — аналогично.

Секрет крылся в аппаратном корне доверия (Hardware Root of Trust). Мелкомягкие учли все фейлы 360-го ящика, где мамкины хакеры припаивали 3 проводка к пину сброса (RESET) и замедляли частоту процессора (PLL bypass). В Xbox One они физически отрезали эти возможности. Главной занозой в заднице пиратов стал Platform Security Processor (PSP) — отдельный микроконтроллер ARM Cortex-R4, зашитый в недрах 28-нанометрового чипа от AMD. Этот засранец просыпался 1-м, читал 64 килобайта неизменяемого кода из внутреннего ROM (Bootrom или SP0), и только если всё было кристально чисто, давал добро на загрузку остальной системы.

Единственная программная ошибка, от которой мы не можем оправиться — это баг в bootrom.
— Тони Чен (Tony Chen), архитектор безопасности Xbox, 2019 год

И вот в марте 2026 года Маркус выходит на сцену во Флориде и заявляет: Если я собираюсь взломать Xbox One, я не вернусь за 30 процентами, я вернусь за всем. И он действительно забрал всё.

Анатомия[править]

Чтобы понять, как именно Маркус поимел мелкомягких, нужно копнуть в железо. Внутри Xbox One бьется кастомное кремниевое сердце — SoC (System on Chip), разработанный AMD и Microsoft. На этом кристалле размером 363 квадратных миллиметра и содержащем 5 миллиардов транзисторов уместились:

  1. 8-ядерный процессор Jaguar.
  2. Графический процессор GCN.
  3. 32 мегабайта быстрой памяти eSRAM.
  4. Тот самый Security Subsystem.

Подсистема безопасности — это целое государство в государстве. В её состав входит:

  • Сам PSP (тот самый ARM Cortex-R4, работающий на частоте 100 мегагерц).
  • Криптографический сопроцессор (CCP), который аппаратно ускоряет RSA и SHA.
  • Потоковый криптопроцессор (SCP) для расшифровки жесткого диска налету.
  • Массив одноразово программируемых предохранителей (eFuses), в которых намертво выжжены ключи и счетчики отзыва версий.

Загрузка этой махины напоминает матрешку параноика: SP0 (Bootrom, 64 килобайта, неизменяемый) -> проверяет и грузит SP1 (32 килобайта, обновляемый) -> проверяет и грузит SP2 (224 килобайта, основная прошивка PSP) -> проверяет и грузит 2BL (загрузчик x86) -> который уже запускает гипервизор и операционки.

Маркуса интересовал только SP0. Потому что если ты контролируешь 1-й шаг, ты становишься Богом для всех последующих.

Код без багов[править]

Многие хакеры годами ковыряли дампы загрузчика, надеясь найти там переполнение буфера или банальную ошибку логики. Хрен там плавал. Код SP0 — это линейная, примитивная, вылизанная до блеска 1000-кратными аудитами программа на 125 функций. Программных багов там нет. От слова совсем.

Тут важно понимать разницу между кодом без багов и кодом, устойчивым к аппаратным сбоям. Мелкомягкие писали этот код в 2012—2013 годах, когда защита от инъекции неисправностей (Fault Injection) еще не была мейнстримом в консьюмерской электронике. Они нагородили кучу программных защит, но железо всё равно оставалось физическим объектом из кремния и меди.

Подготовка к экзекуции[править]

Для начала нужен был доступ к телу. В нормальных условиях разработчики оставляют отладочные интерфейсы: UART для вывода текста, JTAG для пошаговой отладки, или хотя бы выводят POST-коды (2-значные шестнадцатеричные числа, показывающие этап загрузки).

У Xbox One на релизных платах всё это было физически отключено (выжжено в eFuses). Хакер оказался абсолютно слеп.

Без графика энергопотребления мы глитчили вслепую...
— Анонимный хакер из тусовки

Единственный способ понять, что происходит внутри закрытого черного ящика — это Side Channel Analysis (анализ побочных каналов). В данном случае — мониторинг энергопотребления (Power Trace). Когда процессор выполняет сложную операцию (например, RSA-подпись), он жрет больше тока. Если измерять потребление миллионы раз в секунду, можно буквально увидеть код.

Маркус начал с того, что попытался найти, по какой линии питания кормится наш параноидальный PSP. На плате консоли десятки линий: VDD_CPU, VDD_GPU, VDD_NB и так далее. После долгих тыканий осциллографом (сначала он вообще попытался глитчить неправильную линию 1.8 вольта, лол), он нашел правильную — питание северного моста (Northbridge Core), напряжение на которой составляло около 1.2 вольта.

Он сдул паяльником кучу SMD-конденсаторов вокруг чипа (чтобы убрать сглаживание напряжения), припаял туда шунтирующий резистор и здоровенный MOSFET-транзистор.

Метод лома и какой-то матери[править]

Суть вольтажного глитчинга проста как 5 копеек. В критический момент, когда процессор читает важную инструкцию (например, команду перехода), мы резко замыкаем его питание на землю на пару сотен наносекунд. Транзисторы внутри кристалла не успевают переключиться, логический 0 становится логической 1, и процессор вместо команды если подпись неверна, зависнуть намертво выполняет команду продолжить загрузку.

Проблема в том, что для успешного глитча нужна идеальная, ювелирная точность. Счет идет на наносекунды. А мелкомягкие подложили свинью эпических масштабов.

37 кругов ада[править]

Когда Маркус начал снимать графики энергопотребления, он увидел лютый пиздец. График каждого запуска отличался от предыдущего. Оказалось, что инженеры Microsoft встроили в bootrom 37 циклов рандомизированных задержек.

Процессор обращался к аппаратному генератору случайных чисел (RNG), брал оттуда число, и крутился в пустом цикле от 0 до 1023 итераций. Каждая такая пауза занимала до 400 микросекунд. В масштабах процессора на 100 мегагерц 400 микросекунд — это вечность. Из 300000 инструкций, выполняемых при загрузке, половина (!) была просто мусорным ожиданием, чтобы сбить с толку таких вот умников с осциллографами.

Это был аналог ASLR, только не для адресов памяти, а для времени. Ждать определенного момента было бессмысленно — он постоянно съезжал. Маркусу нужен был якорь — надежный внешний сигнал, от которого можно было бы отсчитывать время до нужного куска кода, находящийся между этими случайными задержками.

Прорыв 1-й: Поиск якоря[править]

Шерстя плату логическим анализатором, хакер обнаружил интересную активность на шине I2C. Это медленная последовательная шина, по которой PSP общается с южным мостом (SMC). Оказалось, что при каждой загрузке PSP выплевывает туда пакет диагностических данных: 52 байта, содержащие ID чипа, статус блокировки, данные о температуре и вольтаже.

Но самое вкусное — если бы консоль не была релизной, она бы выплевывала туда POST-коды. Маркус залез в дамп ROM-а (который ранее кто-то вытащил оптическим методом, растворив чип в кислоте и отсканировав транзисторы электронным микроскопом) и увидел, что примерно на 2000-й инструкции после сброса код инициализирует ножки GPIO (контакты ввода-вывода) для выдачи POST-кодов.

Даже если вывод POST-кодов запрещен (потому что нужный eFuse выжжен), сама инициализация ножек GPIO всё равно происходит! В этот момент напряжение на контактах падает с плавающего уровня до логического нуля.

Бинго! Этот перепад напряжения на забытых тестовых площадках платы стал 1-м идеальным якорем. Он происходил после того, как отработают 1-е мусорные задержки.

Но чтобы добраться до самого вкусного — чтения следующей стадии загрузки (SP1) — нужен был якорь поближе.

Слушая пульс флешки[править]

Загрузчик SP1 лежит на внешней микросхеме eMMC (по сути, припаянная SD-карта). Чтение происходит по медленной шине (около 25 мегагерц), а затем данные перебрасываются внутрь процессора по быстрой шине PCIe короткими вспышками по 64 байта. Маркус припаялся к шине данных eMMC (линия DAT0) и увидел точный момент, когда bootrom запрашивает заголовок SP1 (896 байт).

Теперь у него был точный тайминг. Он мог ударить током ровно в тот момент, когда PSP проверяет цифровую подпись загрузчика.

Прорыв 2-й: Яма для MPU[править]

Но тут всплыла очередная подлянка. В ARM Cortex-R4 есть штука под названием MPU (Memory Protection Unit). Это аппаратный надзиратель, который делит память на 12 регионов и жестко следит, чтобы код из одного региона не лез в другой.

Мелкомягкие использовали MPU, чтобы создать так называемые Пользовательские тюрьмы (User Jails). Любая рискованная операция (чтение флешки, разбор заголовков) выполнялась в непривилегированном режиме (USR). Даже если бы Маркус смог с помощью глитча заставить процессор прыгнуть на его поддельный код, MPU тут же бы заблокировал выполнение, выдав Fatal Error, так как код находился бы в регионе без прав на исполнение (NX bit).

Значит, перед тем как угонять выполнение, нужно было убить надзирателя.

Маркус внимательно изучил график энергопотребления в районе инициализации MPU. Это происходило как раз перед инициализацией GPIO. У него был якорь — аппаратное чтение ранних eFuses (которые читаются еще до старта кода). Отсчитав от них ровно 268 микросекунд, он нашел узкое окно, где инициализировался MPU.

Он запустил свой автоматизированный стенд (платка Teensy, управляющая питанием консоли и дергающая MOSFET), чтобы тот сутками напролет пытался глитчить консоль в этом временном окне, перебирая задержки с шагом в пару наносекунд. На 10000-й попытке случилось чудо. Осциллограф показал, что код загрузки пропустил инициализацию MPU и пошел дальше.

Хакер буквально пробил дыру в заборе тюрьмы. Теперь вся память стала доступна для чтения, записи и исполнения (RWX).

Прорыв 3-й: The Bliss Hack[править]

Имея отключенный MPU и зная точное время чтения заголовка SP1 с флешки, настало время финального удара.

В коде SP0 есть функция копирования памяти (`memcpy`), которая перетаскивает те самые 64-байтные куски из регистра MMIO во внутреннюю SRAM. Как это часто бывает в оптимизированном C-коде, в конце функции `memcpy` вызывается инструкция `POP {R4-R11, PC}`. Она берет из стека сохраненные значения регистров и адрес возврата (PC — Program Counter), чтобы вернуться в вызывающую функцию.

Маркус понял: если ударить глитчем ровно в момент выполнения инструкции `POP`, процессор может проглотить её неправильно. В итоге вместо правильного адреса возврата в PC загрузится мусор или, что еще лучше, данные из буфера копирования!

Memcopy часто становится мишенью для инъекций неисправностей. Представьте себе memcopy как трубу, по которой текут контролируемые атакующим данные. Если ударить по этой трубе кувалдой, из нее брызнет вода во все стороны.
— Маркус Гааседелен

Он взял дамп eMMC через обычный кардридер и заменил заголовок SP1 на повторяющийся паттерн (классическое переполнение буфера: `0x41414141`, что в ASCII означает `AAAA`). Затем он настроил свой стенд на двойной глитч:

  1. 1-й удар тока (через 268 микросекунд после старта) убивал MPU.
  2. 2-й удар тока (спустя 80 миллисекунд, привязанный к чтению DAT0) ломал функцию `memcpy`.

Вероятность успеха 1-го глитча была около 1 к 100. Вероятность 2-го — тоже 1 к 100. Перемножаем — получаем 1 успешную попытку на 10000 перезагрузок. Автоматика делала это за пару часов.

И вот, на экране логического анализатора, подключенного к шине I2C (на которую PSP выплевывает Fatal Error коды при крашах), появляется сообщение об ошибке: `Data Abort` по адресу `0x41414141`.

Это был абсолютный триумф. Процессор попытался выполнить код по адресу, который Маркус записал на флешку. Он получил полный контроль над PC (Program Counter) в режиме Supervisor.

ROP-цепочка и спасение POST-кодов[править]

Но просто прыгнуть на нужный адрес было мало. Настоящего исполняемого кода там еще не было (он бы не влез в нужные регистры). Нужно было использовать Return-Oriented Programming (ROP) — технику, когда хакер собирает полезную нагрузку из коротких кусочков легитимного кода (гаджетов), уже находящихся в памяти ROM, заканчивающихся инструкцией возврата.

Поскольку у Маркуса не было экрана для вывода текста, он решил написать ROP-цепочку, которая включала бы обратно вывод POST-кодов на те самые нераспаянные контакты GPIO!

Цепочка делала следующее:

  1. Грузила в регистр нужный адрес.
  2. Вызывала гаджет, который записывал туда значение для включения POST-кодов.
  3. Вызывала функцию вывода произвольного числа.

Когда логический анализатор замигал цветными полосками, показывая выведенный на GPIO кастомный POST-код `0x41414141`, зал на конференции REverse взорвался аплодисментами. Это означало 100-процентное, подтвержденное выполнение произвольного кода на 0-м кольце защиты.

Финал[править]

Получив возможность исполнять свой код внутри изолированного PSP на этапе загрузки, хакер получил ключи от королевства.

Он написал полноценный шеллкод, который:

  • Давал команду криптографическому движку (CCP) расшифровать следующие стадии загрузки (SP1, SP2).
  • Вытягивал из аппаратных регистров ключи шифрования прошивок, игр и жесткого диска.
  • Выводил всё это богатство наружу.

В качестве интерфейса для вывода Маркус, за неимением нормального UART (последовательного порта), программно заставил 1 из пинов GPIO работать как UART (так называемый bit-banging), выдавая расшифрованные данные со скоростью 115200 бит в секунду прямо в терминал на ноутбуке. На экране бежали бесконечные столбцы шестнадцатеричных дампов. Защита Тони Чена пала.

Потери среди личного состава[править]

Разумеется, путь к победе был усеян трупами консолей. За время экспериментов Маркус физически сжег 4 или 5 материнских плат.

Самое забавное, что убил их не сам глитчинг (кратковременное падение напряжения на 1.2 вольта обычно не вредит кремнию). Их убил SMC (System Management Controller) — южный мост. Этот старательный идиот видел, что система постоянно падает с фатальными ошибками, и при каждой перезагрузке добросовестно записывал лог об ошибке в служебную область eMMC-флешки.

После 100000 перезагрузок дешевая флеш-память просто исчерпывала свой ресурс записи (Wear Leveling) и сдыхала, унося с собой в могилу саму возможность включить консоль. Пришлось выпаивать сгоревшую микросхему и ставить на её место флешку промышленного класса, способную выдержать миллионы циклов перезаписи.

Последствия[править]

Что значит этот взлом на практике?

  1. Полный контроль над PSP означает, что можно пропатчить проверки подписей гипервизора и запускать немодифицированный GameOS с отключенной защитой. Можно запускать самописный код, линукс, эмуляторы других консолей с полным аппаратным ускорением.
  2. Для точной эмуляции Xbox One на компьютерах всегда не хватало полных расшифрованных дампов системных библиотек и ключей. Теперь они есть. Эмуляторщики смогут понять, как именно работают недокументированные вызовы к аппаратуре.
  3. В Xbox One (особенно в ранних FAT-ревизиях) DVD-привод криптографически привязан к материнской плате. Если привод сдох — консоль превращается в тыкву. Получив ключи, ремонтники могут программно отвязать или перепривязать любой другой привод. То же самое касается замены жесткого диска.
  4. Когда Microsoft однажды отключит серверы активации, миллионы физических копий игр могли бы перестать работать. Теперь энтузиасты смогут сохранить функциональность железа навсегда.

Стоит отметить, что этот метод сработает со 100-процентной гарантией на всех консолях оригинальной ревизии (FAT 2013 года). Начиная с конца 2014 года, мелкомягкие (втайне понимая, что их хваленый код без багов всё равно можно заглитчить) начали программно включать аппаратные мониторы напряжения (Side Channel Monitors), которые были встроены в чип изначально, но отключены на релизе из-за нестабильности. Эти мониторы могут детектировать резкое падение напряжения на линии и моментально вырубать процессор еще до того, как сработает глитч.

Однако, как заметил сам Маркус с иезуитской ухмылкой, логику включения этих мониторов можно проанализировать. И если они включаются программно — значит, этот процесс тоже можно заглитчить и пропустить. Гонка меча и щита продолжается.

См. также[править]

Apple-bad.png Быдло любит, просветлённые отрицают
ВообщеMade in ChinaБыдлодевайсЗащита от дуракаКонсолиМегапиксельМобилодрочерПланшетНекохреньРадиолюбительСвистелки и перделкиЭкономителиЭльдорадоТёплый ламповый звукЯблочникБилайнМегафонГаджетHonorМТСЭмуляторАйфон за смену имени и фамилииОтключение мобильных устройств в авиатранспортеПланшет ТопольGorilla GlassПроблемы с телефонами Samsung Galaxy Note 7СодопедPOCOКитайская подделкаВдохскаСмс-бомберОбратный звонок с сайтаТаргетный спам аккаунтаРадиокотСтики с датчиком ХоллаТоп производителей наушниковViomiНаказание ремнём за добавление в звонокОхлаждение сим-картApple Bandai PippinSiriСимка в дронеSiemensТёмный режимDevice IDИмпедансный адаптерГлассморфизм
Техника обычнаяASUS EEEDreamcastKirbyPSPRTXx86АйподАйпадГЛОНАСС (Навител) • ГовнозеркалкаЗомбоящикКвадрокоптерМаршрутизатор (Циска) • Терморектальный криптоанализаторGlofiishПланшетGPS-маячокВеб-камераArduinoМобильный телефонApple Vision ProПортативная колонкаPlayStation 5Steam DeckFlipper ZeroNintendo SwitchFamily BASICTWS-наушникиDendyMicrosoft KINBlackberryИгровая консольTegosЭлектронная книгаSony PlayStation 3 (2006)КонсольСоникто-тоКонсоле-холопыПК vs консолиKaiOSSony Playstation 2 (2000)Realme C53MTS Fog PlayOmlet ArcadeFamily LinkРоумингГеймпад3GNintendo Switch 2USSDИзодинамические наушникиAudezeРоуминг (поездки по России)Взлом Xbox One
СмартфоныТелефон (кошерныйкнопочныйсерый) • СмартфонTesla PhoneAndroidАйфон (китайскийвосстановленный3G7) • N-GageWindows Phone 7Windows Phone 8 • Магазины (F-DroidTinderGoogle Play и российские аналоги — RuStoreRuMarketNashStore) • HTC (HTC HD2) • HuaweiSIM-карта (Срок годностиЛевая симкаDrimsimId.abonent) • SMSMNP в УкраинеICloudIGloveApp StoreXiaomiSamsungЙотаGPS-трекерPush-уведомленияВзлом SIM-картыКлонирование sim-картыNokia N70Запрет айфонов в РоссииT2Цензура в App StoreПадение смартфона в унитазОчереди за айфоном4GIPhone 5VivoЗолотой айфонNokiaПостоянная слежка смартфоновIOS 18Воровство мобильных телефоновRedmiСажание на смартфонОхлаждение смартфонаPlayStation 3D DisplayРегистрация IMEI
ВоображаемаяQRBG121Вымышленные приборыДетекторЛяторМашина времениМашина Судного дняПриборчикСтрелка осциллографаОлег КерманSpaces.imМобильное приложениеФильм, снятый на смартфонXbox-туризмРКСМ64WarioWareAPKPureТёмный режимGameJoltКалькулятор TI-83React NativeСписок портативных консолейFostexСмартфон — злоБатарейкаСиловой банкМикрофон
Ископаемая3dfxAmigaBrick GameMSXNokia 3310VHSS-90ДискетаМагнитофонПейджерРезонатор ГельмгольцаСпектрумТамагочиТерменвоксЮность КП101NESSony PlayStation 4Отключение мобильного интернета в регионах РоссииSony Interactive EntertainmentHUMANS
ПользователиAn heroRu macЖарковСтиллавинТупые свитчерыЭлен ФайсЭльдар МуртазинАрктур 006 Стерео
ПрочееКактусКТ315МануалНЛ-10РингтонСилуминТяни-толкайФирменная тряпка Apple5GОпасность 5GРадиоточкаЗапутались провода наушниковКульт айфонаЗапланированный износНомофобияГалактика знакомствБан на XboxXbox AmbassadorsThe Wizard of Oz: Beyond the Yellow Brick RoadVideobel.by (видео-хостинг)Plvideo (видео-хостинг)Отмена международного роумингаЕсли графика не главное, зачем делают новые консоли