Убить Еву

Вот уже неделю не утихают спекуляции на тему зловреда с СС'15, который так никто и не видел. Тут вам и слухи, и догадки, расследования, обвинения… Все это интересно и смешно, но не столь интересно, сколько интересен сам прецедент.

Конечно, технически всем было понятно, что стереть флеш или сд-карту — не вопрос, ведь есть софт, который в них что-то пишет. Но почему-то считалось, что никто не захочет этим воспользоваться. Что ж, так было и будет всегда :) Подобный трюк проделывали еще в прошлом веке. Казалось бы, история должна нас чему-то научить…

Но это всё интересно лишь первый раз, поэтому нет смысла рассказывать, что можно «убить» Еву стиранием флеша. В принципе, очевидные вещи типа запортить сд-карту, подменить файл и прочее — тоже не особо интересны. Поэтому, предлагаю обратить внимание на другие аспекты.

Программная смена прошивки


Известно, что на плате Евы установлен МК ATMEGA128, к которому подключена FPGA. В этом МК хранится сжатая прошивка для FPGA и код, обслуживающий разные девайсы типа клавиатур, модема и пр. МК с FPGA общаются по интерфейсу SPI.

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

Бутлоадер всегда стартует перед запуском основной прошивки. Он проверяет CRC основной программы, и если оно неправильное — запускается обновление с сд-карты. То же происходит если зажат soft reset.

Таким образом, у нас есть несколько теоретических векторов атаки:

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

Так как в AVR нельзя залить свой код даже через потенциальную дыру (исполнение только из flash), то для первого случая нам нужен любой код в прошивке, который меняет флеш МК. На данный момент такого нет. Fail.

Для второго случая (да и для первого бы подошел как вариант) нам нужна возможность сделать переход по произвольному адресу. Такие уязвимости в софте для AVR известны и эксплуатабельны — нам всего лишь нужно переписать адрес возврата на стеке на адрес программы обновления в бутлоадере. Нужно найти дыру с переполнением буфера. Я поискал. Не нашел. :) Fail.

Пока что перепрошивка AVR и FPGA из кода пользователя считается невозможной. Пока что. Но не стал бы я ради этого писать статью, правда? ;)

Убить… до полусмерти


До этого я не сталкивался с работой с флешами (кроме сд-карт) ни в каком виде. Но lhxrkud навела меня на интересные мысли. Там говорилось, что чтобы что-то во флеш прошить, ей нужно наслать разного по разным адресам. Т.е., там какой-то конечный автомат внутре. А что если… если мы начнем процесс и не закончим? Я скачал даташит на нашу флеш и нашел там такую таблицу:



Таким образом, например, чтобы стереть флеш, надо строго последовательно записать такие данные по адресам:

  • 0xAA -> 0x0555
  • 0x55 -> 0x02AA
  • 0x80 -> 0x0555
  • 0xAA -> 0x0555
  • 0x55 -> 0x02AA
  • 0x10 -> 0x0555

После этого запустится процесс стирания, который будет длиться некоторое время. В этот момент из любых адресов флеша будет читаться регистр статуса. Уже чувствуете, куда я клоню? Вместо ПЗУ в этот момент будет читаться что угодно, только не прошивка (хотя, мы же ее стерли). В общем, не надо так. Кроме багов и пустой флеши это ничего не даст. Но концепт нужно развивать.

Команды стирания и программирования зависают в «ином» режиме лишь на небольшое время. А вот команда Autoselect зависает в «ином» режиме до принудительного выхода из него командой Reset. Бинго!

Входим в режим Autoselect и… зависаем :) Теперь вместо данных у нас читаются разные ID чипа и прочая ерунда. И веселуха в том, что никакие ни софт- и хард-ресеты, ни переключения конфигураций не помогают :) Всё, трупик. Но если выключить и включить питание — все работает как прежде.

А зомби зомби зомби


Что нам это дает кроме игры в злодеев? Веселье! У нас в сектетолпе так принято. Но нельзя же останавливаться только на умерщвлении? Конечно нет, мы ведь профессионалы своего дела! Сделаем-ка зомбочка (для этого я даже реал завёл, что само по себе не легко).

Сразу оговорюсь. «Убиение» автоселектом сработает везде, а вот зомбачок наш будет работать на честном слове. И работать он будет только с определенными флешками и нормальным спектрумом, как то пентагон или тс-конф. Бейзконфа с атм-неспектрум в пролете, что в очередной раз подтверждает, что не спектрум это.

Итак, что же будет читаться из ПЗУ, если мы включим autoselect? Даташит говорит нам, что:

  • по адресу 00: Manufacturer ID
  • по адресу 01: Device ID
  • по адресу 02: Sector Protect Verify (00/01)

Про другие адреса ничего не говорится, но мы просто возьмем и проверим:



А вот и дизассемблер:



(но не всё так радужно! ldir скопировал вот такую красоту, а если смотреть ручками в sts, то 4й байт может быть и 00, и 20, и Е2, и это чуть-чуть огорчает.)

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

Например, если мы будем держать флаг Z=0, то при ресете мы гарантированно перейдем на 0xFFE4. Просто поставим в конец ОЗУ JP куда нам надо, а остальное заполним нопами. Вуаля! Перехватчик ресета готов!

Что дальше


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

Во-вторых, посмотрим, вдруг кто еще что-то интересное нароет и напишет продолжение :)

Наслаждайтесь и имейте совесть, господа!

23 комментария

avatar
ну теперь то всем понятно кто это сделал :)
  • Nuts_
  • -1
avatar
теперь да:) с этого момента справедливо можете подозревать и меня:) и всякого, прочитавшего эту статью:)
avatar
psb — White Hat!
avatar
все такие:

а тут psb такой — нна!
и все ооо!!!
avatar
Гифку плюсую дополнительным пстом. Зачот!
avatar
ну да на ней как минимум LVD еще есть :)
avatar
а рядом алоне
avatar
да, надо расписать кто есть кто)
avatar
Пацаны не качайте файл по ссылке! У меня от этой фигни ева умерла! Пишу со старого скорпиона!
avatar
а у меня от этой фигни скорпион умер, пишу с ленточного 48-го
avatar
Есть у кого IE с фиксом под пентагон? Запускаю на резинке — всё замечательно. А на пентагоне луч сечется — аватарки некрасиво смотрятся.
avatar
возьми релиз кодебастерсов.
и осторожно, этот код не проверялся с магнитофонами!
avatar
Я скачал этот файл на телефоне с Windows Mobile и запустил. После этого Windows Mobile обновилась до 10ки, все бы хорошо, но KDE не патчиться на него никак и постоянно шлет что-то на челябинские IPшники
avatar
не переживай, это диагностика. мы не собираем информацию о пользователях. прочитать соглашение о конфиденциальности.
avatar
Кодайте жалобную книгу!
avatar
Это в соседнюю ветку — там уж рэндом жалобами на голосовалку завален
avatar
Пацаны, залейте кому не в лом этот код на ZXPKRU и ZXAAA
avatar
А почему в датошите 01 А4, а у автора 20 Е2?
  • tsl
  • 0
avatar
потому что даташит — это теория, а у меня практика. ты уже запустил у себя? :)
avatar
кстати 01 А4 тоже должны работать, там джва перехватчика.
avatar
Я запускал 1ю версию, работает, чо б ему не работать. СТС-ом не смотрел.
avatar
NERV не одобряэ ваш псто )
avatar
Кстати, «шутка» со стиранием флеша на СС-2015 могла бы быть сделана аффтаром в таком же формате. Что косвенно доказывает, что целью была не демонстрация асиливания команд флеша, а именно — убиение машины.
  • tsl
  • +1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.