Защита и взлом Xbox 360

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (8) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
VampirBFW
19.05.2020 - 12:17
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
267
В 2011 году, через 6 лет после выпуска игровой приставки Xbox 360, исследователями был обнаружен занимательный факт — если на вывод RESET центрального процессора на очень короткое время подать сигнал «0», процессор не сбросит своё состояние (как должно быть), но вместо этого изменит своё поведение! На основе этой «особенности» был разработан Reset Glitch Hack (RGH), с помощью которого удалось полностью скомпрометировать защиту Xbox 360, запустить неподписанный код, тем самым открыв путь к взлому самой системы и победе над «невзламываемыми» приводами DG-16D5S.

Давайте же рассмотрим в деталях, как работал RGH, как разработчики пытались залатать дыру и как эти заплатки смогли обойти!

45 фото и 1 видео via

Защита и взлом Xbox 360
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
VampirBFW
19.05.2020 - 12:17
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Что вообще за глич атака?
Процессор — штука довольно глупая, что бы ни говорили маркетологи. Весь высокоуровневый код, написанный программистами, сводится к исполнению простых команд — арифметика с числами, перемещение данных, условные и безусловные прыжки. Предполагается, что процессор всегда исполняет эти команды без ошибок, а результат соответствует документации.


Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:18
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Действительно, компилируя код
i = i + 2;
вы полагаетесь на то, что значение переменной i увеличится ровно на 2, даже не представляя себе, как может быть иначе.

Глич-атаки нарушают эту уверенность — их цель направлена на то, чтобы процессор «сглючил» и повёл себя не так, как надо. Способов «глюкнуть» процессор несколько, например:

Просадить напряжение питания ЦПУ
Дать лишний импульс в опорную частоту ЦПУ
«Посветить» на проц радиацией

Есть специальные устройства для проведения подобных атак — например, ChipWhisperer предлагает широкий ассортимент атак по частоте и питанию:

В случае же с Xbox 360, «глюк» происходит в результате воздействия на линию RESET. Процессор начинает процедуру сброса, но из-за очень краткой длительности сигнала, не успевает её завершить и продолжает работать как ни в чём ни бывало. Но именно на этот краткий миг, пока сигнал RESET активен, его поведение изменяется!

Это сообщение отредактировал VampirBFW - 19.05.2020 - 12:18

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:18
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Глючим процессор
Защита Xbox 360 держится на том, что загрузчики проверяют друг друга по цепочке. В конечном итоге, проверка на каждом этапе сводится к вызову функции сравнения хеш-суммы с «образцом». Тут-то и применили глич-атаку, заставив процессор проигнорировать несовпадение. Импульс на линию RESET сразу после вызова процедуры memcmp заставляет процессор «пойти» по другой ветке и продолжить загрузку, даже если хеш-сумма неверна:

Наилучшее место для атаки нашлось в загрузчике второго этапа, «CB». Более поздние этапы атаковать сложнее (да и легко пофиксят), а на первом этапе загрузки («1BL», ROM) из-за несколько иного построения программного кода атака не удалась.

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:19
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Звучит просто, но на деле при попытке осуществить атаку, обнаружилось множество нюансов.

Для начала, чтобы успешно провести глич-атаку, необходимо очень точно определить момент времени, когда следует подавать RESET импульс. Если ошибиться хотя бы на микросекунду, послать слишком короткий или длинный импульс, атака не срабатывает.

К счастью, в Xbox 360 каждый этап загрузки сопровождается изменением значения на отладочной шине POST_OUT. Более того, отладочный вывод настолько часто расставлен, что новое значение POST задаётся сразу перед сравнением хеш-суммы:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:19
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Настолько близкое расположение отладочного вывода от места атаки оказалось крайне удобным триггером. POST_OUT является параллельной шиной и выводится на 8 тестовых площадок на печатной плате, каждая из которых отвечает за один из битов значения. Удалось даже упростить схему подключения, используя только один бит и считая количество изменений его состояния с момента загрузки системы:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:19
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Также выяснилось, что из-за высокой частоты работы процессора, почти невозможно попасть в нужный момент по точности и длительности. Время воздействия должно быть очень мало, порядка времени исполнения одной инструкции процессором. Но чем медленнее работает процессор, тем больший временной промежуток нас устраивает. Поэтому берём и замедляем процессор!

На обычном ПК частота CPU определяется как произведение внешней, «опорной» частоты и множителя:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:20
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Так и в Xbox 360, к процессору подходят внешние линии опорной частоты, а внутри эта частота умножается с помощью PLL. И на старых, «толстых» ревизиях приставки механизм PLL можно было отключить, замедлив процессор аж в 128 раз:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:20
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
На «Slim» версиях трюк с PLL провернуть нельзя (линия не разведена на плате), и раз на множитель в «Slim» мы повлиять не можем, то уменьшим «опорную» частоту!

Она генерируется чипом HANA, и его можно конфигурировать по шине I2C:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:20
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
К сожалению, сильно снизить не получилось, «на малых оборотах» итоговая частота процессора начинала сильно «плавать», что снижало шансы на успех. Самым стабильным вариантом оказалось замедление в 3.17 раз. Не 128 раз, но хоть что-то.

Всё? Нет, не всё. Далеко не факт, что атака сработает с первого раза (особенно на Slim). А при неудачном запуске, приставка перезагружается и пробует запуститься снова. На запуск даётся всего 5 попыток, после чего приставка останавливается и начинает моргать «красным кольцом смерти». Поэтому патчим ещё и прошивку южного моста (SMC), чтобы не страдала фигнёй и перезагружала приставку до посинения:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:21
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Итак, получаем алгоритм:

патчим SMC
замедляем проц (через PLL или I2C)
ждём триггера POST
ждём N микросекунд
шлём импульс на RESET
ускоряем проц обратно

Для большей точности подсчётов, частоту берём с того же HANA (48 МГц):

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:21
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
И получаем вот такую конструкцию на базе недорогого CPLD Xilinx XC2C64A:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:21
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Не забудем пошаманить с длиной и расположением проводка на RESET (обратите внимание на «катушку» снизу фото) и вперёд, надеяться, что запуск получится в течение минуты.

Но это только с аппаратной стороны. Как же нам пропатчить загрузчик и запихнуть свой код?

Патчим загрузчики

Как я уже упоминал, атакуется загрузчик второго уровня, «CB». Этот загрузчик шифруется фиксированным ключом, одинаковым для всех приставок, но как раз «CB» модифицировать нельзя, его мы только атакуем. А вот следующий за ним уже зашифрован ключом CPU, уникальным для каждой приставки. И чтобы его модифицировать, нужно знать этот ключ…
Или нет?

В старых «толстых» ревизиях Xbox 360 в загрузчике «CB» поддерживался так называемый «Zero-Pairing» режим, использующийся на этапе производства приставки. В заголовке каждого загрузчика по смещению 0x10 находится случайный набор данных «Pairing Data», используемый как часть ключа при расшифровывании. И если этот набор данных состоял целиком из нулей («Zero-Pairing»), то ключ процессора игнорировался и вместо него использовался фиксированный, нулевой ключ!

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:22
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
С помощью этого трюка можно было собрать образ с оригинальным «CB», зашифровать нулевым ключом следующий загрузчик, «CD» (уже со своим кодом) и запустить его с помощью RGH!

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:22
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
В приставках «Slim» и этот трюк завернули, убрав «Zero-Pairing» режим и поделив «CB» на две части. Здесь «CB» делился на очень простой и небольшой «CB_A» и шифрованный ключом процессора «CB_B»:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:22
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Но шифрование алгоритмом RC4 (а именно этим алгоритмом зашифрован «CB_B»), имеет одну особенность. В процессе шифрования на основе ключа генерируется псевдослучайный поток данных, который бинарно «складывается» (операция 'исключающее или', 'xor') с исходными данными. При расшифровывании, соответственно, происходит то же самое, сложение с этим же псевдослучайным потоком возвращает данные в исходное значение:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:23
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Но операция бинарного сложения коммутативна и ассоциативна, что означает, что мы можем модифицировать зашифрованные данные, не зная ключа, просто заxor'ив зашифрованный код с нужным нам патчем!

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:23
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
В итоге, мы можем зашифровать «CB_A», пропатчить зашифрованный «CB_B» (чтобы он не выполнял расшифровку вообще) и положить в открытом виде «CD» со своим кодом!

Это сообщение отредактировал VampirBFW - 19.05.2020 - 12:23

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:24
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Короче, если собрать воедино, то запуск выглядит как-то так:
(XeLL — загрузчик хоумбрю, линукса, а ещё он ключи CPU показывает)



 
[^]
VampirBFW
19.05.2020 - 12:24
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Microsoft наносит ответный удар

Конечно, Microsoft постарались всё залатать.

В новом системном обновлении все старые приставки перевели на «раздельную» загрузку с «CB_A» и «CB_B», тем самым окончательно закрыв «Zero-Paired» режим. На «Slim» загрузчики тоже подверглись обновлению. Новые загрузчики серьёзно доработали для защиты от RGH, наибольший упор при этом был сделан на защиту «CB_A»:

Полностью убрали отладочный вывод в POST
Проверку хеш-суммы переделали и продублировали для надёжности
По всему коду расставили sleep() на случайное время (зависящее от ключа CPU!!)
Добавили проверку фьюза CBLDV для возможности отзыва «CB_A»

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:25
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Список нововведений не оставляет ни одного шанса для RGH. Но обратим внимание на последний пункт списка — до этого в «CB_A» не было проверки фьюзов! Фатальный недостаток. Более того, как мы помним, в расшифровке «CB_A» ключ процессора не участвует. А это значит, что уязвимый к RGH загрузчик «CB_A» можно запустить на любой приставке, и запретить это нельзя.

А вот чтобы что-то запустить с помощью этого уязвимого «CB_A», нужно несколько извернуться. Если мы не знаем ключа CPU, всё, что нам остаётся — патчить существующий «CB_B». Но что, если вместо модификации единичных участков, мы заXOR’им весь загрузчик целиком? И за счёт этого «запишем» старый загрузчик, который мы уже умеем патчить, на место нового? Так и поступили:

Шифруем уязвимый «CB_A» точно так же, как в исходном образе
XOR’им наш «CB_B» с новым, получая «разницу»
Накладываем её на шифрованный «CB_B»!

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:25
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Всё, мы снова, не зная ключа, успешно подменили шифрованное содержимое, ещё и уязвимый загрузчик засунули. Приставки взламываются, Microsoft удивляются.

Разработчики напряглись, и в очередном системном обновлении … чуть изменили метод шифрования «CB_B», теперь ключ шифрования стал зависеть ещё и от версии «CB_A»:

Теперь при попытке заxor’ить и подсунуть данные уязвимому «CB_A» старой версии, загрузчик расшифровывал мусор из-за различий в ключах. А новый загрузчик взломать нельзя, он хорошо защищён от глич атак. Пока что победа за Microsoft!

Это сообщение отредактировал VampirBFW - 19.05.2020 - 12:25

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:25
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Проблем подкинула Corona
Тем временем, на рынок вышла новая ревизия Xbox 360 — Corona, и принесла она моддерам проблем:

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:26
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Маловато чипов на плате, не находите? Всё верно, чип HANA «спрятали» в южный мост. Больше неоткуда брать частоту 48 MHz для мод-чипа, прежние команды замедления по I2C не срабатывают. Да что уж там, NAND-флеш на 16 MB, все эти годы служившую в качестве системного хранилища Xbox 360, вероломно заменили на 4 GB чип с интерфейсом eMMC! (правда, только в более дешёвой версии приставки, но всё же):

Защита и взлом Xbox 360
 
[^]
VampirBFW
19.05.2020 - 12:26
Статус: Online


Главный Сапиосексуал Япа.

Регистрация: 20.02.10
Сообщений: 18225
Но ничего, со всем справились. Придумали как читать/писать флеш-память через картридер:

Защита и взлом Xbox 360
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 29416
0 Пользователей:
Страницы: (8) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх