Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Дата: 19.06.2020. Автор: Игорь Б. Категории: Статьи по информационной безопасности
Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

В статье пойдет речь о реверсивном проектировании акселератора Comtech AHA363 PCIe Gzip, его особенностях и уникальных свойствах, комплектующих и разъемах. Материал был подготовлен в 2020 году.

Содержание

  • Начало путешествия
  • Разбор FPGA
  • Обзор платы AHA363
  • Исследование, тестирования различных точек платы и массива Vias
  • Package Footprints и Intel Quartus
  • Корреляция FPGA IOs с Vias FPGA на печатной плате
  • Разъем JTAG
  • Сканирование цепи JTAG
  • Сохранение содержимого параллельной вспышки
  • Перепрограммирование созданного файла
  • Зарядка
  • Проблема загрузки нового последовательного битового потока
  • Декодирование и создание нового POF-файла

Начало путешествия

Программирование RTL — это достаточно веселое дело, ер процесс обратного инжиниринга также заслуживает внимания. Он начинается с платы, о которой человек ничего не знает, и шаг за шагом приближается к тому моменту, когда деталь уже кажется чем-то полезным.

Проект FPGA board hack на ресурсе Hackaday дает представление о многих доступных печатных платах, в которых есть FPGA. Большинство из них на самом деле не были полностью реинжинирированы.

Платы на основе FPGA с поддержкой PCIe никогда не стоили дешево, поэтому особого внимания заслуживает Comtech AHA363PCIE0301G (AHA363).

В AHA363 указано, что она оснащена Arria GX FPGA. Цель данного компонента заключается в ускорении сжатия и декомпрессии gzip, распространенной операции в центрах обработки данных. С помощью этого обрабатываются сжатые gzip веб-страницы.

Различные поставщики eBay продают одну и ту же плату по разным ценам: $1265, $185 и $19. К вниманию читателя будут представлены две платы за $19.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Через несколько дней заказ был доставлен.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Разбор FPGA

Примечание для тех, кто хотел бы реплицировать/помочь с обратным проектированием этой вещи: теперь, когда известен тип FPGA, больше нет причин снимать радиатор. Это снизит вероятность случайной поломки платы.

В проекте FPGA Board Hack была некоторая информация о Arria GX FPGA, но поскольку плата покрыта теплоотводным материалом, точный ее тип все еще неизвестен.

Теплоотвод крепится прочно к чипу с помощью 2-х зажимов с 2-х сторон. Человек может удалить его, вставив плоскую отвертку в отверстия зажима и выталкивая их наружу. После небольших махинаций монтажный кронштейн оторвется. Затем нужно сжать ту же плоскую отвертку между FPGA и «раковиной» и очень осторожно повернуть ее, чтобы разделить их. В конце концов «раковина» оторвется, и тайна будет раскрыта:

Arria GX EP1AGX90E — это самое большое устройство в своем классе с  логическими элементами 90K , 4,4 Мбит блочной оперативной памяти и 176 умножителями 18×18. Даже сегодня платы с таким параметрами продаются в среднем за $100.

Обзор платы AHA363

Печатная плата AHA363 идет в комплекте с большим количеством компонентов ASIC и других составлющих. Она меньше в два раза платы PCIe 4x с кронштейном на той же высоте. Таким образом, плата прекрасно подойдет для стоечного сервера, но не поместится внутрь обычного ПК. Сначала нужно будет снять этот кронштейн.

Сделав это и установив плату на обычном компьютере с  Linux, пользователя будет приветствовать следующее сообщение:

XXX будет добавлена XXX

Ура! Она работает!

Первый шаг процесса обратного проектирования — это фотографирование с близкого расстояния всех компонентов и разъемов. В большинстве случаев для этого достаточно оптического зума x2 на iPhone 7 Plus, но иногда можно использовать адаптер iPhone на своем микроскопе. При плохом зрении фотографии значительно облегчают идентификацию маркировок различных компонентов.

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

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Печатная плата содержит:

  • FPGA Intel Arria FPGA GX EP1AGX90E
  • Ускоритель Aha3610 gzip ASICs

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

  1. Параллельная вспышка Spansion S29GL128P.

Содержит битовый поток FPGA, который загружается при старте системы.

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

  • Altera MAX II EPM570F100 CPLD.

Используется для копирования битового потока из флеш памяти в основную. Эта CPLD применяется в той же конфигурации в наборе Altera Arria GX и в эталонных конструкциях для проектов, связанных с удаленным обновлением системы.

  • 10-контактный разъем.

Почти как разъем JTAG.

  • Конвектор VPOL5A-12-SMT 12V в 5V DC/DC.

Это конвектор DC/DC, установленный для того, чтобы снизить значение PCIe (12V) до 5V. Функционирует в комплексе с другими регуляторами, выполняющими более точечную работу.

  • 4 конвектора Enperion Power:
    •     2x 6A EN5365QI для 1.2V
    •     1x 6A EN5365QI для 2.5V
    •     1x 3A EN5335QI для 3.3V
  • 2 осциллятора 100MHz Xtal.
  • 6 светодиодов.
  • Интерфейс PCIe.

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

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

Исследование, тестирования различных точек платы и массива Vias

Наиболее важным инструментом для проведения обратного проектирования печатной платы является мультиметр с низким временем реакции при использовании его в режиме «short-detect». Это позволяет очень быстро пробраться сквозь массив Vias в надежде получить соединение между 2 точками.

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

Pano Logic G2 имеет материнскую плату, у которой отсутствуют прикрытые Vias. Таким образом, человек может увидеть чистую медь вокруг каждого сквозного отверстия.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Тем не менее, у вспомогательной платы Pano Logic G2 есть ряд доступных тестовых точек, но остальные Vias покрыты медью:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

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

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

Package Footprints и Intel Quartus

Семейство продуктов Arria GX уже довольно «древнее» и больше не поддерживается новыми версиями Quartus. Последним официальным релизом с их поддержкой был Quartus 13.0sp только для стандартной, коммерческой версии. Последним «свободным» релизом стал Quartus 11.0, который можно скачать, перейдя по ссылке.

Будет использоваться Quartus по нескольким причинам:

  • Quartus Programmer очень хорошо обнаруживает все JTAG TAP (тестовые порты доступа)
  • Quartus применяется для создания новых битовых потоков
  • Редактор Quartus Pin Assignment предоставляет пользователю отличный обзор IO выводов с возможностью просмотра их сверху или снизу и при любом желаемом ракурсе. Это сильно поможет при попытке точно определить правильную площадку IO на печатной плате. Редактор также аннотирует все специальные панели IO, присваивая им нужные значения, когда на них наводится курсор мыши

На скриншоте редактор Pin Assignment показывает Arria GX FPGA с приемопередатчиками PCIe, расположенными внизу.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

А вот и MAX II CPLD:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Корреляция FPGA IOs с Vias FPGA на печатной плате

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

В случае AHA363 под FPGA отводится приличная сетка Vias, но все равно немного трудно найти корреляцию между ними и шарами.

Пришло время запустить графический редактор (используется Inkscape, потому что он работает как на ОС Linux, так и с продуктами Mac) и начать аннотировать Vias с названием pad. Это не всегда линейный процесс, но он может быть описан следующим образом: сначала нужно найти некоторые контакты JTAG, затем аннотировать их.

В конце концов, получается что-то вроде этого:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Примечания к столбцам и строкам находятся вверху и слева. Сетка разделяет каждые 5 шариков BGA.

Стоит обратить внимание, что есть дополнительный столбец шаров между столбцами V и W и дополнительный ряд шаров между строками 17 и 18. Эта проблема характерна для всех печатных плат, с которыми сталкивается пользователь: Vias не совпадают с шариками на BGA, но они находятся прямо между ними, так что всегда есть дополнительная строка или столбец прямо в центре.

Разъем JTAG

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

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

AHA363 имеет 10-контактный разъем, который должен содержать контакты Jtag, поэтому следующим шагом станет выяснение того, как они соединяются.

  • 4 из 10 контактов соединены с платой. Все они находятся на передней (компонентной) стороне.
  • При осмотре оставшийся штифт на лицевой стороне, казалось, был не соединен с ней (так как не было никакого сквозного соединения)
  • Есть еще 5 контактов: TCK, TMS, TDI, TDO и VREF. VREF отвечает за поддержание напряжения для питания IO, которое идет от печатной платы к переключателям уровней напряжения в донгле JTAG.

Процесс обнаружения довольно прост: он начинается с одного из контактов JTAG, который является общим для всех чипов в цепочке (TCK или TMS). Пользователь проверяет, есть ли соединение между этими колодками ввода-вывода на FPGA и одним из выводов разъема.

Получается быстро идентифицировать TCK и TMS, но не везет с TDI и TDO. Дело в том, что TDI и TDO являются двухточечным соединением, и они могут быть частью цепочки. Если FPGA находится в середине цепочки JTAG, то эти контакты не будут подключены к разъему.

Итак, после этого нужно проверить вывод TDI CPLD. Отлично, он идет прямо к разъему JTAG. Также было проверено, что вывод TDO CPLD соединен с выводом FPGA TDI.

Поскольку нет никакой связи между FPGA TDO и разъемом, вполне вероятно, что два ASIC также являются частью цепочки JTAG. Об их выводе ничего неизвестно. Но если один из выводов — VREF, можно попробовать проверить, есть ли связь между одним из двух выводов и VDD.

И, действительно, она есть! Оставшееся может быть подписано как TDO.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Сканирование цепи JTAG

Найдя разъем JTAG, следующий шаг для пользователя — это заставить работать цепочку сканирования.

Очевидно, что это возможно только при включенной плате, но карта PCIe может иметь сложную архитектуру источника питания: разъем PCIe обладает контактами 12V, 3.3 V и 3.3 Vaux, и пока неясно, какие из них используются.

К счастью, есть очень простой способ: нужно подключить плату к работающему компьютеру! После того, как были припаяны несколько проводов от контактов AHA363 JTAG к 10-контактному разъему с расположением в Intel USB-Blaster, был получен следующий результат:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Mac смог нормально загрузиться (и проигнорировал AHA363, как и ожидалось).

После запуска Quartus Programmer и нажатия кнопки «Auto Detect» на экране появилась следующая картинка:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Успех! Как и ожидалось, 2 AHA363 являются частями цепочки JTAG.

Сохранение содержимого параллельной вспышки

На предыдущем изображении можно увидеть, как Max-II CPLD имеет подключенную к нему параллельную вспышку (128 Мбит).

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

В Quartus Programmer следует нажать на «Examine» рядом с «CFI_128Mb» и потом кликнуть на кнопку «Start».

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Теперь нужно кликнуть на untitled1.pof и потом на «Save File»

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Перепрограммирование созданного файла

Пока это не требуется, но для того чтобы перепрограммировать полученный файл следует:

  • Стереть флэш-память
CFG_128Mb -> Erase -> Start
  • Перепрограммировать файл
CFG_128Mb -> Right click: Change File (NOT Add File!!!) -> Select .pof file -> Start

Зарядка

Действительно трудно провести обратное проектирование платы, когда она находится внутри ПК! Следующим шагом станет обнаружение цепочки JTAG, пока плата установлена.

Известно, что энергия поступает через разъем PCIe, поэтому можно припаять там какой-нибудь провод. Но также следует иметь возможность по-прежнему подключать плату к рабочему компьютеру. Разве не было бы здорово, если бы это был гнездовой разъем PCIe?

К сожалению, такого не нашлось: была использована старая, сломанная материнская плата! Через несколько минут был достигнут следующий результат:

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

И получен короткий разъем PCIe!

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

Здесь повезло с с питанием: контакты 3.3V и 3.3Vaux в разъеме PCIe никуда не ведут на печатной плате, поэтому вся она питается только от 12В. Так что все, что мне нужно было сделать, это подключить 12В-контакты к гнездовому разъему PCIe. И после включения питания цепь JTAG все еще работает нормально.

Проблема загрузки нового последовательного битового потока

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

Обычно это происходит путем сдвига в так называемом файле SOF. Но нужно помнить, что цепочка сканирования JTAG содержит 4 устройства: CPLD Max-II, Arria GX, и 2 чипа AHA363.

Так или иначе, к сожалению, не получилось загрузить файл SOF в FPGA.

Декодирование и создание нового POF-файла

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

Файлы POF содержат несколько сегментов с различными видами информации. Если пользователь знает, что это за сегменты, он может самостоятельно создать новый POF-файл и загрузить его в FPGA.

Проблема заключается в том, как получить эту информацию из файла POF?

В интернете есть документ, описывающий формат файла POF. Это всего лишь 2 страницы, и относится данная информация к оригинальным устройствам Altera MAX CPLD, так что ему, вероятно, больше 20 лет. Но это лучше, чем вовсе ничего.

Реверсивное проектирование платы Comtech AHA363 PCIe Gzip

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

Но самая важная часть информации заключается в следующем:

==============================
Tag: 26 (Flash Chunks <unofficial>)
Length: 124 (0x0000007c)
Field 0: 0x00ff0000 (16711680)
Field 1: 0x03800000 (58720256)
Field 2: 0x00010000 (65536)
Content:
mCFI_128Mb 00000000 08000000
mPage_0 00000000 00D90000
mPage_1 00800000 00D90000
oOPTION_BITS 00FF0000 00000408

Это показывает, где расположены основные составные части файла POF. Вооружившись данной информацией, можно создать файл .cof: файл Quartus Convert Programming, который используется для преобразования .sof в .pof.

Теперь есть возможность прошить новый битовый поток информации.

Автор переведенной статьи: Tom Verbeure

Об авторе Игорь Б

Представитель редакции CISOCLUB. Добавляю статьи на сайт.
Читать все записи автора Игорь Б

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *