Pull to refresh

Comments 55

Прекрасно, снимаю шляпу.
Когда найду немного времени — напишу подробнее про TPM и firmware TPM, а то там конь не валялся и легенды про ужасный DRM ходят.
Отсюда правило: копируй диски под Linux.
«Сделано это было явно намеренно — все утилиты для управления разделами в Linux генерируют случайный Disk Signature, а не нули.»

Или я неправильно понял или не прокатит.
...Clonezilla live тоже меняет Disk Signature?
Прокатит, ядро не трогает Disk Signature, образ можно снять через dd, и игра останется работоспособной. Про Clonezilla не знаю, не пользовался.
Это да. Недавно ноут в ремонт отдавал и прикупил гибридный диск того же объёма, что в ноуте был. Чтобы система пошутрее проворачивалась. Попросил склонировать систему, в сервисе взялись. Потом говорят, мол не выходит. Тремя способами пробовали — не грузится после копирования. Дома вставил диски в usb читалку, смотрю, у них количество секторов точно совпадает. И длина сектора одинаковая. Думаю: Геометрия у современных дистов вещь давно виртуальная, почему бы и нет? Запустил тупо dd один диск на второй. Четыре часа ожидания и всё работает. До сих пор не понимаю, что у них там не работало…
То есть утилита бинарного копирования опирается на разметку ОС? Не могу сказать, что мне понравилась такая утилита.
О какой утилите вы говорите? В статье, вроде, ничего подобного нет.
UFO just landed and posted this here
А сколько места занимает весь игровой хабар на диске? 160 гигабайт даже для современных навороченных игр слишком много пока.
≈100 МБ ОС и 600-800 МБ игра в зажатом (squashfs, lzma) виде. Сейчас десктопных жестких дисков объемом менее 320 ГБ просто не производят, тогда же, вероятно, меньше 160 ГБ было проблемно найти.

Игры с большим количеством контента, тот же Pump It Up Prime, занимает с последним обновлением уже под 50 ГБ, но там музыка в PCM и видео в MPEG2.
По идее разумнее было бы поставить CF или SSD вместо механического диска, если система предполагает довольно жесткую эксплуатацию. CF даже дешевле наверное.

Хотя в этой реальности даже на системы в тепловозе жесткие диски ставят. :)
UFO just landed and posted this here
зачем копировать диски в винде?
Зачем? Затем, что Windows стоит на подавляющем большинстве компьютеров, и справлялась с этим не хуже других ОС. До этого момента.
к чему именно в железе привязывается система шифрования, ключ?
В материнскую плату установлен TPM, в TPM зашит уникальный ключ RSA-2048. Файлы игры зашифрованы случайным ключом AES-256, который берется из /dev/random при первом включении игры (на заводе), и этот ключ зашифровывается ключом из TPM с привязкой к PCR.
UFO just landed and posted this here
До последнего был уверен, что в защите используется серийник диска…

Intel'овский TPM дыряв хотя бы тем, что позволил изменить состав подключенных устройств (новая PCI-карта) и при этом продолжить загружаться...


Я правильно понимаю, что на самом деле можно было и не искать ключ AES и вообще заморачиваться с расшифровкой, после работы inception implant мы уже получаем работающий шелл на машину, после чего оттуда можно все скопировать уже из живой и расшифрованной ОС?

TPM — устройство пассивное, и потому позволил тут вовсе не «Intel'овский TPM», драйвер PCI прошивки. Чаще всего, устройства PCI в measurement log не добавляют, т.к. их можно добавить позже при помощи Hotplug, плюс это создает кучу неудобств из серии «отключил сетевуху — отвалился BitLocker».

С точки зрения кода — я имею в виду, что есть конгломерат из чипа TPM, ответной части в UEFI и GRUB-IMA, которые по идее должны были не позволять загрузить модифицированную систему и с чем торжествено не справились.


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

Я правильно понимаю, что на самом деле можно было и не искать ключ AES и вообще заморачиваться с расшифровкой, после работы inception implant мы уже получаем работающий шелл на машину, после чего оттуда можно все скопировать уже из живой и расшифрованной ОС?
На самом деле, как я узнал уже после написания этой статьи, можно сделать все гораздо проще — ОС подвержена Shellshock, можно запустить sshd через DHCP-сервер, подключиться под пользователем user:live (стандартный для Debian), sudo -i и все. Но так неинтересно :)

Вообще, на самом деле интересная и, субъективно, не очень решаемая задачка, как можно использовать TPM-подобный модуль для того, чтобы делать такую вот "защиту от копирования" или "защиту от запуска на измененном железе". До тех пор, пока есть отдельно процессор, выполняющий код, отдельно лежащие для него программы в виде чипа BIOS/UEFI + загрузчика на жестком диске, и отдельного TPM — по-моему, всегда можно вытащить этот самый код (в какой-нибудь эмулятор) и оттрассировать вызовы TPM.


Другой вопрос, что, IMHO аркадные игры последних лет 10 настолько унылы, что ради них заморачиваться даже как-то не хочется. Разве что всякие DDR/Parapara, но и то, там все уже давным давно раздраконено и вытащено.

Я точно не уверен, но, как мне кажется, не все так просто. TPM вряд ли Plug-and-Play, и там он не выносной, а запаян на материнскую плату, сбросить его регистры нельзя, так что придется, как минимум, модифицировать BIOS/UEFI таким образом, чтобы он забыл о TPM, и дополнять регистры уже из ОС. Задача усложняется с Intel Boot Guard, придется его выпаивать и вставлять в компьютер без Boot Guard. Но так-то, да, TPM не подразумевает защиту от физического присутствия.

Coderush, возможно, сможет больше рассказать.

Другой вопрос, что, IMHO аркадные игры последних лет 10 настолько унылы, что ради них заморачиваться даже как-то не хочется. Разве что всякие DDR/Parapara, но и то, там все уже давным давно раздраконено и вытащено.
А у нас в квартире памп, а у вас?

Вариант номер раз — инъектируем в BIOS runtime отладчика, в начало — jmp, перепрошиваем, запускаем — вуаля — можно трейсить. Я года 3-4 назад на каких-то конференциях видел ребят, которые показывали готовые по сути решения такого вида.

Вариант номер два — да, выпаять TPM, на макетку и дергать его чем угодно, хоть Ардуиной. Те, что я когда-то смотрел, не имели абсолютно ничего сложного, нужны питание/земля/clock, а дальше обычный SMBus по сути.

А у нас в квартире памп, а у вас?

Ну так народ ставит обычно не оригинальный же автомат, а контроллер + какую-нибудь Stepmania. И живет с этим, надо сказать, сильно лучше, чем с оригинальным автоматом.
С BootGuard вы ничего никуда не инжектируете, ибо процессор сначала проверяет, что у подписи первой половины тома PEI хеш совпал с тем, что в чипсет прошит при производстве, а затем только ресет отпускает. Т.е. попробуете влезть в фазу SEC — и система просто откажется включаться, перешиваем, запускаем — не запускается.

Выпаять TPM теперь тоже нельзя, т.к. он теперь в чипсет встроен, как у Intel начиная с BayTrail, так и у AMD начиная с Merlin Falcon.

Если говорить об атаках на более старые системы без BG и с внешним TPM — там все можно, конечно, но очень и очень непросто, ибо придется трассировать реально каждый вызов Extend, которые там начинаются с PeiAfterMem и до BDS их там получается порядка тысячи. Не заметил один — весь лог на смарку, откатывайся. Понятно, что это можно автоматизировать и обойти, но стоимость таких решений получается чуть ли не выше стоимости защищаемой ими информации, т.е. главная задача ИБ защитой таки решена.
TPM же предоставляет лог измерений, можно запустить свой Linux, снять все, что измерялось до загрузчика, а после загрузчика уже самостоятельно посчитать и дополнить. Или там не все?

Скрытый текст
sudo cat /sys/kernel/security/tpm0/ascii_bios_measurements
 0 95c27b31402f74c26900e177b8baa8e838b6bb9f 08 [S-CRTM Version]
 6 0ed34fd1bb4227e218191958f2ddf98c9c5d2eaf 05 [Wake Event 1]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 07 [S-CRTM Contents]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 da39a3ee5e6b4b0d3255bfef95601890afd80709 01 [POST CODE]
 0 8f50f5875f64a2e15d90439359385e83b7be2976 01 [POST CODE]
 2 4e7eb43cc80572c09e6acb1a197e0c4d1f30428e 80000004 []
 2 c3dfd4718660c13747c2c6a30e6a2e830314e75e 06 [Option ROM]
 4 a070bfbb64dc542d7b6b22de52d9b4d994b0d2f1 80000003 []
 2 0f6f41bcebc1da8f14c509b9d1d76acf16a54870 06 [Option ROM]
 0 b0f6f2eb690c6c3dcbe4262dd74f8b5239ac98a4 07 [S-CRTM Contents]
 0 c276613dbbb4d4f769c98610688681dbd6e94360 07 [S-CRTM Contents]
 0 aa6e353181fa02adb8dede19be120225d2100c1d 07 [S-CRTM Contents]
 0 5054f7d55020f5e5b3029cf39bea650127e70a3f 07 [S-CRTM Contents]
 0 eeddbd4889ec75fbdf514558f45f13c450e7bceb 07 [S-CRTM Contents]
 0 751353e555a1f600047fe5a312e555c8d4bdb1f9 07 [S-CRTM Contents]
 0 bfd8a4fbe0a91927cc5fc9c2e6e2906a20c13335 07 [S-CRTM Contents]
 0 b9c6ac5801cb8fe889aa1c05c1d6d03bd7bac8c3 07 [S-CRTM Contents]
 5 cd0fdb4531a6ec41be2753ba042637d6e5f7f256 80000007 []
 0 9c3f25b59808cf216bc4fc664c9c2429934ee614 80000009 []
 1 de8159c9e3583e43ec0260b4f2a67156d7959094 80000009 []
 1 3c82fd29e8b967dcabb4c47a1537b36fdf35a7a5 0a [Platform Config Flags]
 1 147ff456bbbb76277ca8f924f6d204a22b57f4cd 06 [POST BIOS b41bb26650ab75be6f8d20ea96ba49b25227e1d4]
 1 55e12bafd402f9e4868047b71f1bdcabb588be4e 06 [NVRAM]
 1 54e256fd70f15b3ea614987c1fb340ae247b2bb3 06 [CMOS]
 1 43a116f45a3009192e3e56a9aa37683fb41e9874 06 [SMBIOS]
 0 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 1 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 2 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 3 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 4 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 5 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 6 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 7 9069ca78e7450a285173431b3e52c5c25299e473 04 []
 4 8fd61378e02097961b440a059854ce7e61eaea9b 80000007 []
 5 96b6446d4eb71852986a5696212ab871dcc2571c 80000002 []
 5 c281e05b9b1acf018015a59eff6f7b4e4db1bd92 80000002 []
 5 cd2b58e3c1f085d6703ae9ace8e32ef121ada736 80000002 []
 5 a407760bdca6dbdb4772a460597ffef714d98762 80000002 []
 5 b93bb690dd70511aa09739ad525d2196ea190187 80000002 []
 5 9d759aa51a395e55f4e8967a1d3aa2707dbb3c7f 80000002 []
 5 ccc5ef69c30305bda71c499fc02a116bdf10e3a6 80000002 []
 5 294f49339e53192671ad549147b29df5e2a48574 80000002 []
 5 1a26d9f405f16a8b302f71b673f54d3f849df91c 80000002 []
 5 6f583a5b1e7d10c7ddc3043857bfe8c18ec187c7 80000002 []
 5 0fec1c70382c5f369bddc20bd3cbfc2740ffcfbf 80000002 []
 5 b5d3c77c2ed7b43b13edc3c313c6a148834b64b2 80000002 []
 5 2bc2170c4a506885f29a501595cda13ce7991a62 80000002 []
 5 68d6bc2ff72575c0ace6ce1277628df0db2e252b 80000002 []
 5 2f87ff2a7a96f6bc43c626ccdf21e98273d76467 80000002 []
 5 e1793c9a3ce760efab13936363e006bde294cc4a 80000002 []
 2 6869f5936b1ff804a8ccfde890c911cb9cb5fe82 80000004 []
Проверять этот лог можно и самой прошивкой, например, на событии EndOfDxe. Не сошлось с эталоном — дальше не грузимся. Понятно, что все это, без настоящего аппаратного корня доверия, будет рано или поздно отломано, поэтому HWVB внедрили практически все производители процессоров, которые хотят продать клиентам нормальную доверенную загрузку, а не суррогат.
Печально. Собственно, вы в целом подтвердили мои теории — все подвинулось к тому, чтобы не давать разделять «работающий процессор» и «TPM».
Странно, что жесткий диск не был дополнительно защищен с помощью ATA security, хотя я думаю это не сильно усложнило бы задачу
как вы узнали про нули в Disk Signature?
Сделал дамп диска в Linux, подключил к компьютеру с Windows, сделал дамп еще раз и сравнил.
Блин. То есть я всё правильно понял? При подключении HDD к винде, она, не обнаружив уникальный Disk Signature, без спроса его заменяет? или это, всё таки, происходит уже при снятии образа не правильным софтом?
Именно при подключении, и без вопросов.
или замораживанием и выниманием памяти с сохранением ее содержимого на другом компьютере все тем же дампером

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

Видео-фоточек со вскрытия аппарата не осталось?
Нет, без заморозки DDR2 деградирует уже через несколько секунд, а с заморозкой — минуты. Другое дело, что деградация не случайная, а с неким шаблоном, и aeskeyfind умеет искать ключи даже в немного битой памяти, но делает это гораздо дольше.

Фотографии есть только внутренностей, не думаю, что они будут интересны.
По-моему там счет идет даже на миллисекунды. Помню, расширяли память ZX Spectrum на базе 72-выводных SIMM. Сегодня это уже музейные экспонаты, конечно, но по сравнению с КР565РУ5 это был прорыв в емкости и стоимости памяти. Так вот, когда расширяли память — то выяснилось, что ее регенерация в стандартной схеме работает слишком медленно для SIMM-72 — и память начинает забывать свое содержимое.

Это я к тому, что если еще для некоторых 565РУ5 содержимое могло сохраняться секундами после отключения — то для современной памяти это нереально. Уменьшились размеры ячеек при сохранении уровня тепловых помех и утечек.
Интересно было бы в процессе старта UEFI и TPM промониторить сеть, не исключено что будет попытка общения с сервером производителя что бы дополнительно целостность TPM/UEFI/cамой игры проконтролировать, ключи сменить, телеметрию слить.
Там чипсет Q35, для которого реализаций UEFI еще не было, поэтому особенно сильно можно не бояться того, что этот конкретный автомат «звонит домой».
У Namco одна крайность другой краше: есть автоматы, которые работают только между такими же автоматами, они не обновляются и и никак не взаимодействуют с интернетом, а есть игры, которые работают только с подключенным интернетом и привязаны к серверам Namco, и по истечению нескольких лет Namco отключает серверы, как результат — игра превращается в груду неработающего железа.

О, кстати, было бы, наверное, интересно написать для них какие-нибудь эмуляторы и тем самым реанимировать.

Мы уже этим занимаемся ;)
Проблема в том, что такие игры не только на x86-based машинах, но и на System 357 (Playstation 3), и там не все так тривиально, но решаемо.
Я, видимо, пропустил, поэтому рискну спросить: вы — это какая-то компания, которая обслуживает игровые автоматы? Какой-то заработок это приносит или больше для души?
Мы — небольшая группа ребят с трекера-со-свиньями, которые заставляют аркадные игры работать на обычных компьютерах с клавиатурами, мышками, гемпадами и без донглов, попутно, как правило, вырезав coin-режим, чтобы игра работала только во free play и ей не могли воспользоваться бутлегеры.
Вернее, «мы» — громко сказано, я там принимаю довольно слабое участие, но все же принимаю.
Тогда это практически сцена :) Тогда респект :)
В Dead Heat теперь играют на Youtube, наверное, это успех.
В комментах суровый адъ :)
Это каким-то образом кто-то спер и раздает теперь с внешних ресурсов?
Скорее всего, кто-то скачал с трекера, загрузил на mega, скинул кому-то второму ссылку вместе с комментариями, а этот второй пошел на 8ch и сделал видео на youtube.
Огромное спасибо за aeskeyfind! Воскурил, подход к поиску ключей просто чудесный :)
Сначала Вы описываете атаку Cold boot. И там пишете:
Первый способ не сработает из-за соответствия материнской платой спецификации Trusted Computing Group, которая предписывает выполнять очистку памяти при загрузке, и дампер сохранит уже очищенную память, в которой, конечно же, уже не будет никаких ключей.
А затем следом описываете DMA-атаку, выполняемую с помощью FireWire-платы, установленной в компьютер. Она, как я понял, позволила сграбить ещё не очищенную память — с AES-ключами в ней.

Разрешите поинтересоваться: как Вам удалось это сделать? Вы каким-то образом остановили процесс загрузки — до момента очистки памяти и после этого дампили память или же использовали какой-то другой метод?
Вы имеете ввиду, как мне удалось через Firewire получить память? Я дампил ее прямо на запущенном автомате, в то время, пока игра работает.
А чтобы запустить дампер, нужна перезагрузка, и при перезагрузке память бы обнулилась.
Получается, чтобы сдампить память методом Cold Boot нужно загрузиться в собственную ось с флешки и с неё же запускать дампер памяти. Так как загрузчик после загрузки оси память подтёр, то ключей в дампе уже не найти. А в случае с Вашим методом загружается родная ось автомата, которая грузит и расшифровывает файлы игрушки и не убирает мусор за собой — что и позволило, сграбив память, найти в этом мусоре ключи. Я правильно понял?
Интересная тема, надо бы попробовать на диве последней. Правда nu не любит смены винчестеров и при изменении серийников превращается в тыкву — это тоже последствия TPM или кастомный биос? а то не хочется воткнуть FW-контроллер и в итоге угрохать железку начисто
Nu — от Sega, а не от Namco. Я не знаю, какая защита там применяется.
Начиная с Nu там наверчено столько всего, что попробуй отвертеться. Могу подробнее рассказать в личке, если интересно, а то один уже порассказывал наружу и дорассказывался. Писал вам в твиттере с этим вопросом, но сам нашёл статью раньше вашего ответа.
Sign up to leave a comment.

Articles