Как Запустить Неподписанный Код На Xbox 360

Они пытаются сломать каждую игровую консоль.

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

Его пытаются взломать энтузиасты, желающие «запускать на нем резервные игры» (или, по-русски, заниматься пиратством).

Все пытаются сломать энтузиасты, желающие установить Linux и, помимо того, что это самоцель, использовать его шире, чем хотелось бы производителю консоли (поскольку деньги зарабатываются в основном на играх, сама консоль продается по цене минимальная наценка, а то и в минус производителю).

В подавляющем большинстве случаев энтузиастам это удается.

Так была проделана самая интересная часть взлома Xbox 360 — запуск кода, не подписанного MS.



Взлом на пиратство

Два года назад Xbox360 сломали на пиратство, то есть научились запускать копии лицензионных игр, записанные на диски.

Я написал немного о деталях здесь .

Короче говоря, лицензионность диска целиком определялась прошивкой DVD-ROM и сам Xbox передавал только одно число - хороший диск или нет. Если изменить прошивку так, чтобы она всегда возвращала номер, соответствующий лицензионному диску - вуаля.

В тех версиях чип с прошивкой можно было просто вытащить и прошить.

С тех пор изменилось одновременно многое и малое - появилось отличное инженерное решение от MS залить микросхему при прошивке черной эпоксидкой (надо еще узнать чье это было решение, оно очень русское), но оказалось, что сменить прошивку можно подцепив DVD-ROM от xbox к ПК.

При каждом обновлении прошивка переписывалась, но достаточно было перезалить ее заново.

И продолжает работать с Live. С другой стороны, начали банить людей за пиратские прошивки, партизанскими методами.

То есть новые обновления содержат некий код, который по косвенным признакам определяет прошивку и отправляет эту информацию на сервер.

В один момент накопившиеся консоли забанены в Xbox Live (именно консоли, а не аккаунты).

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

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

Однако уязвимость очень серьезна; Я не понимаю, как они могли так оставить.

Моя единственная версия — они торопились выводить консоль на рынок.

Однако от релиза до запуска пиратской игры проходит 4 месяца.

Все это произошло два года назад, но этот хак не позволил запустить на коробке собственный код, а только точную копию кода игры.

Но мы понимаем, что определенная часть человечества не согласна считать какое-либо оборудование достойным существования до тех пор, пока на нем не будет работать Linux и не будет готова на нем работать.

А для этого вы неизбежно должны иметь возможность запускать свой код.

Давайте кратко рассмотрим, как работает модель безопасности на Xbox360, чтобы дать вам представление о том, почему это сложно.

Во-первых, бинарник на диске адски зашифрован, публичный ключ встроен где-то в кремний консоли, а закрытый ключ хранится глубоко в недрах родного офиса.

Все бинарные файлы всех игр перед выпуском шифруются сверхсекретным ключом в сверхсекретной лаборатории.

Ключ получить невозможно.

Код, который расшифровывает и проверяет двоичный файл, находится глубоко в ПЗУ консоли и шифруется/проверяется и дважды проверяется аппаратным обеспечением.

Каждое обновление может добавлять туда новый код, ведь изначально он готовился в той же сверхсекретной лаборатории.

Заменить этот код нереально.

Сама игра всегда запускается в непривилегированном режиме, с доступом только для чтения к страницам памяти с кодом и отсутствием флага выполнения на данных и стеке, то есть невозможно ни записать код в данные, ни передать туда управление( классический случай переполнения буфера) или замените его уже загруженным кодом (поскольку он доступен только для чтения).

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

Все, что касается шифрования и дешифрования, выполняется в режиме гипервизора, в котором никогда не бывает кода игры, а только код прошивки.

Насколько я понимаю, он отвечает за расшифровку двоичных файлов и другие вопросы безопасности.

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

Код игры невозможно подделать, даже если что-то серьезно повреждено в данных, не поможет ни переполнение буфера, ни модификация кода.

Они даже спаслись от физического нападения.



Как можно было все испортить в этой ситуации?

Основным документом, описывающим уязвимость, является Здесь .

Короче говоря, в одной из версий прошивки была некорректная проверка самой важной команды системного вызова - вызова системной функции из кода игры.

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

Проблема заключалась в том, что при проверке номера функции на валидность использовалась 32-битная команда, а при вычислении смещения — 64-битная команда.

И тогда вы можете передать номер функции, у которого есть ненулевые старшие биты, это число войдет в вычисление смещения и, таким образом, будет указывать на память, которая обрабатывается как данные и не шифруется аппаратной защитой.

Адрес функции будет взят из этой памяти и вызван в режиме гипервизора, даже если этот адрес есть в данных.

Если в нужном месте памяти есть указатель на ваш собственный код, вуаля.

Это еще не уязвимость; нам нужно придумать, как поместить туда эти данные.

Это не так тривиально - нельзя модифицировать код, а изменить данные игры на диске, чтобы она своим кодом записывала нужные байты по нужным адресам и вызывала системный вызов - очень долгий и сложный анализ наугад. Знаешь, как они это сделали? Это то, что меня больше всего очаровывает во всей этой истории.

Сделал это с помощью шейдеров.

Все шейдеры, конечно, являются ресурсами на диске и, как и все ресурсы, не шифруются, но при этом остаются шейдерами, то есть микрокодом видеокарты.

Но у xbox360 умный графический процессор, он умеет как читать, так и записывать в память из шейдера.

Более того, CPU и GPU имеют общую память, а это значит, что из шейдера можно прописать и память CPU по нужному адресу.

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

На практике это было сделано с помощью King Kong Demo ( http://www.xbox-scene.com/xbox1data/sep/EEZklEuAkAzUotmeVt.php ) Замечу, что для этого необходимо знать очень глубокие детали кода игры, т.е.

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

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

В результате эксплойт срабатывает путем подмены шейдера в Кинг-Конге, который записывает исполняемый код в память и портит стек в строго определенном месте, чтобы осуществить вызов системной функции, которая из-за ошибки в прошивке , передаст управление тому же коду, что и системные полномочия.

Ебена мать.

Мы выжили, шейдерный взлом.

Мы боролись за ГПУ.



Общий

Вот и получилось сделать первый hello world своим кодом, а после этого рабочая Ubuntu была недалеко , и собрать технологическое сообщество ( http://www.free60.org ).

Собственно, это все.

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

Одна из самых важных команд для всей системы — и она содержит критическую ошибку.

Что это за ерунда, а?.

Теги: #xbox360 #microsoft #безопасность #информационная безопасность

Вместе с данным постом часто просматривают: