Аппаратный хакинг: взлом реальных вещей - Джаспер ван Вуденберг - E-Book

Аппаратный хакинг: взлом реальных вещей E-Book

Джаспер ван Вуденберг

0,0

Beschreibung

Встроенные системы трудно атаковать. Различных конструкций плат, процессоров и операционных систем слишком много, и это затрудняет их реверс-инжиниринг. Но теперь все станет проще — вас обучат два ведущих мировых эксперта по взлому аппаратного обеспечения. Пройдите ускоренный курс по архитектуре и безопасности встроенных устройств, узнайте об электрических сигналах, анализе образов прошивок и многом другом. Авторы объединяют теорию с практическими инструкциями, которые вы можете применить на реальном железе. Книга завершается описанием атак на такие устройства, как Sony PlayStation 3, Xbox 360 и лампы Philips Hue. В приложении приведен список всего оборудования, которое понадобится вам для домашней лаборатории, независимо от того, планируете ли вы модифицировать печатную плату или собирать и анализировать графики потребляемой мощности.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 725

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Джаспер ван Вуденберг, Колин О’Флинн
Аппаратный хакинг: взлом реальных вещей

Переводчик С. Черников

Джаспер ван Вуденберг, Колин О’Флинн

Аппаратный хакинг: взлом реальных вещей. — СПб.: Питер, 2023.

ISBN 978-5-4461-2017-8

© ООО Издательство "Питер", 2023

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

Оглавление

Об авторах
О научном редакторе
Предисловие
Благодарности
Введение
Как выглядят встроенные устройства
Способы взлома встроенных устройств
Что такое аппаратная атака
Для кого эта книга
Структура книги
От издательства
Глава 1. Следим за здоровьем. Введение в безопасность встроенных систем
Аппаратные компоненты
Компоненты ПО
Моделирование аппаратных угроз
Профилирование атакующих
Типы атак
Активы и цели безопасности
Меры противодействия
Пример дерева атак
Раскрытие проблем безопасности
Резюме
Глава 2. На кончиках пальцев. Аппаратные периферийные интерфейсы
Основы электричества
Связь с помощью электричества
Низкоскоростные последовательные интерфейсы
Параллельные интерфейсы
Высокоскоростные последовательные интерфейсы
Измерение
Резюме
Глава 3. Что внутри. Идентификация компонентов и сбор информации
Сбор информации
Вскрытие покажет
Примеры корпусов ИС на печатных платах
Сопоставление печатной платы
Извлечение информации из прошивки
Резюме
Глава 4. Слон в посудной лавке. Внедрение ошибок
Внедрение ошибок в механизмы безопасности
Упражнение по внедрению ошибок в OpenSSH
Тот самый слон
Методы поиска неисправностей
Резюме
Глава 5. Руками не трогать. Как внедрять ошибки
Внедрение ошибок в тактовый сигнал
Внедрение ошибок по напряжению
Внедрение электромагнитных ошибок
Внедрение оптических ошибок
Внедрение ошибок в корпус
Активация аппаратных сбоев
Резюме
Глава 6. Рубрика «Эксперименты». Лаборатория внедрения ошибок
Этап 1. Простой цикл
Этап 2. Внедрение полезных сбоев
Этап 3. Дифференциальный анализ ошибок
Резюме
Глава 7. Цель отмечена крестом. Дамп памяти кошелька Trezor One
Введение в атаку
Внутреннее устройство кошелька Trezor One
Ошибка запроса USB на чтение
Дизассемблирование кода
Сборка прошивки и проверка сбоя
Запуск и синхронизация по USB
Атака через корпус
Резюме
Глава 8. Мощный подход. Введение в анализ потребляемой мощности
Атаки по времени
Простой анализ потребляемой мощности
Резюме
Глава 9. Рубрика «Эксперименты». Простой анализ потребляемой мощности
Домашняя лаборатория
Собираем все воедино: SPA-атака
Пример ChipWhisperer-Nano
Резюме
Глава 10. Разделяй и властвуй. Дифференциальный анализ потребляемой мощности
Внутри микроконтроллера
Пример с XOR
Атака дифференциального анализа потребляемой мощности
Знай своего врага. Ускоренный курс по стандартам шифрования
Атака корреляционного анализа потребляемой мощности
Резюме
Глава 11. Без формул никуда. Продвинутый анализ потребляемой мощности
Основные препятствия
Оценка успеха
Измерения на реальных устройствах
Анализ и обработка трассировок
Резюме
Глава 12. Рубрика «Эксперименты». Дифференциальный анализ потребляемой мощности
О загрузчиках
Получение и сборка кода загрузчика
Запуск целевого устройства и захват кривых
Анализ
Восстановление IV
Атака на подпись
Что в коде загрузчика
Резюме
Глава 13. Шутки в сторону. Примеры из жизни
Атаки внедрения ошибок
Атаки с анализом потребляемой мощности
Резюме
Глава 14. Подумайте о детях. Контрмеры, сертификаты и полезные байты
Контрмеры
Отраслевые сертификаты
Как улучшить результаты
Резюме
Приложение А. Куда потратить деньги. Настройка лаборатории
Проверка подключения и напряжения: от 50 до 500 долларов
Пайка с мелким шагом: от 50 до 1500 долларов
Демонтаж сквозного отверстия: от 30 до 500 долларов
Пайка и демонтаж компонентов для поверхностного монтажа: от 100 до 500 долларов
Модификация печатных плат: от 5 до 700 долларов
Оптические микроскопы: от 200 до 2000 долларов
Фотографирование плат: от 50 до 2000 долларов
Питание: от 10 до 1000 долларов
Отображение аналоговых сигналов (осциллографы): от 300 до 25 000 долларов
Отображение логических сигналов: от 300 до 8000 долларов
Триггеры на последовательных шинах: от 300 до 8000 долларов
Декодирование последовательных протоколов: от 50 до 8000 долларов
Анализ и триггер CAN-шины: от 50 до 5000 долларов
Анализ Ethernet: 50 долларов
Взаимодействие через JTAG: от 20 до 10 000 долларов
Связь по PCIe: от 100 до 1000 долларов
Анализ USB: от 100 до 6000 долларов
USB-триггеры: от 250 до 6000 долларов
Эмуляция USB: 100 долларов
Подключение к флеш-памяти SPI: от 25 до 1000 долларов
Анализ потребляемой мощности: от 300 до 50 000 долларов
Триггер по аналоговым сигналам: от 3800 долларов
Измерение магнитных полей: от 25 до 10 000 долларов
Внедрение ошибок в тактовый сигнал: от 100 до 30 000 долларов
Внедрение ошибок по напряжению: от 25 до 30 000 долларов
Внедрение электромагнитных ошибок: от 100 до 50 000 долларов
Внедрение оптических ошибок: от 1000 до 250 000 долларов
Позиционирование щупов: от 100 до 50 000 долларов
Целевые устройства: от 10 до 10 000 долларов
Приложение Б. Ваша база — наша база. Популярные распиновки
Распиновка флеш-памяти SPI
Разъемы с шагом в 0,1 дюйма
Разъемы с шагом в 0,05 дюйма
Рекомендуем прочитать

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

Посвящается Хилари и Кристи, бесконечного терпения которых хватило, чтобы поддерживать нас долгие годы, пока писалась эта книга. А также Жюлю и Тайсу, которые (иногда) терпеливо ждали.

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

Об авторах

Колин О’Флинн является руководителем стартапа NewAE Technology, Inc. — компании, которая разрабатывает инструменты и оборудование для обучения инженеров, занимающихся вопросами безопасности встроенных систем. При написании своей докторской диссертации Колин запустил проект ChipWhisperer с открытым исходным кодом. Кроме того, ранее он был доцентом в Университете Далхаузи, где преподавал курс о встраиваемых системах и безопасности. Живет в Канаде, в городе Галифакс. Вместе с NewAE участвовал в разработке множества продуктов.

Джаспер ван Вуденберг занимался безопасностью встроенных устройств в широком диапазоне тем: поиск и помощь в исправлении ошибок в коде, работающем на сотнях миллионов устройств, извлечение ключей из неисправных криптосистем с помощью символьного исполнения, использование алгоритмов распознавания речи при обработке побочных каналов. Джаспер — отец двоих детей и заботливый муж. Занимает должность технического директора в компании Riscure North America. Живет в Калифорнии, любит кататься на велосипеде по горам и на сноуборде. У Джаспера есть кот, который его терпит, но он слишком крут для Twitter.

О научном редакторе

Патрик Шомон — профессор вычислительной техники Вустерского политехнического института. Ранее был штатным исследователем в IMEC в Бельгии, а также преподавателем в Технологическом институте Вирджинии. Интересуется вопросами проектирования и методами проектирования безопасных эффективных встроенных вычислительных систем, работающих в режиме реального времени.

Предисловие

Некоторое время назад аппаратное обеспечение (далее — АО) мало интересовало хакеров. Многие считали взлом АО слишком трудным делом. Так и говорили — «слишком сложно»1. Но так можно сказать о любой вещи, пока вы ее не изучили.

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

Со временем вопросы аппаратного взлома вышли из подполья и стали мейнстримом. Ресурсы и оборудование стали доступнее и дешевле. Хакерские группы и конференции позволили нам встречаться, учиться и объединять усилия. Со временем даже представители науки и промышленности осознали нашу ценность. Мы вступили в новую эру, когда аппаратное обеспечение наконец признано важной частью ландшафта безопасности.

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

Будучи взломщиками аппаратного обеспечения, мы пользуемся ограничениями, наложенными на инженеров и разрабатываемые ими устройства. Инженеры должны заставить продукт работать, не выходя за рамки графика и бюджета. Они работают по определенным спецификациям и должны соблюдать технические стандарты. Они делают так, чтобы их продукт был технологичным и пригодным для программирования, тестирования, отладки, ремонта или обслуживания. Они доверяют производителям микросхем и внедряемых подсистем и ожидают, что используемые готовые системы будут отвечать заявленным характеристикам. Когда речь заходит о реализации мер безопасности, их чрезвычайно сложно реализовать правильно. Хакеры могут позволить себе роскошь игнорировать все требования, намеренно заставлять систему вести себя неправильно и искать наиболее эффективный способ проведения успешной атаки. Мы можем попытаться использовать слабые места в системе с помощью периферийных интерфейсов и шин (глава 2), физического доступа к компонентам (глава 3) или ошибок реализации, которые могут привести к внедрению ошибок или утечке по побочным каналам (глава 4 и далее).

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

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

С уважением, Джо Гранд aka Kingpin,

нарушитель технологического спокойствия с 1982 г.,

Портланд, штат Орегон

1Играслов: hardware is hard. — Примеч. пер.

Благодарности

Идея создания этой книги родилась давно и принадлежит Стивену Ридли, который пригласил нескольких известных хакеров для ее написания, а в какой-то момент согласился также включить в нее нас (Колина и Джаспера), чтобы раскрыли тему атак по сторонним (побочным) каналам и внедрения неисправностей. С тех пор эту книгу писал Билл Поллок, который продолжал верить в нее и в последующие годы работал со всеми нами над тем, чтобы она приобрела свой окончательный вид. В оригинальной версии книги Джо Фитцпатрик (securinghardware.com) пожертвовал нам большую часть главы 2, за что мы ему благодарны. Если в ней есть ошибки, то это уже наша вина. Марк Виттеман и Riscure поддерживали этот проект с самого начала, что позволило Джасперу избежать безработицы.

Что такое Riscure? Это игровая площадка Джаспера и университет хакеров, существующий уже более десяти лет. Марк, Харко, Джоб, Сис, Кэролайн, Радж, Панчи, Эдгар, Александр, Маартен и многие другие сыграли неоценимую роль в создании среды, в которой Джаспер не раз падал и поднимался, получая знания, необходимые для написания этой книги.

Коллеги Колина из NewAE Technology Inc. предоставили множество примеров и инструментов, использованных в этой книге; в частности, Алекс Дьюар и Жан-Пьер Тибо принимали активное участие в описании современных инструментов и программного обеспечения. Клэр Фриас принимала участие в физическом производстве большей части аппаратного обеспечения, и почти каждый инструмент или цель NewAE появились на свет благодаря ей.

Мы также хотели бы поблагодарить всех авторов контента и инструментов (с открытым исходным кодом), использованных в книге. В одиночку ничего стоящего не сделать, и эта книга не исключение. Литературные редакторы и корректоры (Билл Поллок, Барбара Йиен, Невилл Янг, Энни Чой, Дапиндер Досандж, Джилл Франклин, Рэйчел Монаган и Барт Рид) помогли улучшить текст, а Патрик Шомон, наш научный редактор, много раз указывал на хорошие, плохие, странные и совершенно неправильные вещи в более ранних версиях этой книги. Многие примеры атак нам предоставило исследовательское сообщество, и мы благодарны тем, кто публикует свою работу в общем доступе, будь то научная статья или сообщение в блоге. Наконец, благодарим Джо Гранда за написание предисловия, за то, что он вдохновлял нас на протяжении многих лет, и за то, что он был великим хакером, а еще дружелюбным и добрым человеком, сумевшим сформировать своего рода сообщество, в котором мы все процветаем.

Введение

Давным-давно в не слишком далекой галактике компьютеры были огромными машинами, которые занимали большие комнаты, а для их обслуживания требовалась целая бригада. Технологии становились все более компактными, и компьютеры стало возможно размещать в небольших помещениях. Примерно в 1965 г. появился компьютер Apollo Guidance, который был достаточно мал, чтобы его можно было отправить в космос. Там он помогал астронавтам в вычислениях, а также управлял модулями «Аполлона». Этот компьютер можно считать одной из первых встроенных систем. В настоящее время подавляющее большинство производимых процессорных чипов встраивается куда-либо: в телефоны, автомобили, медицинское оборудование, объекты критической инфраструктуры и «умные» устройства. Даже в вашем ноутбуке они есть, причем во множестве. Очевидно, эти маленькие чипы стали частью нашей жизни, а это означает, что понимать связанные с ними проблемы безопасности невероятно важно.

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

Что же делают встроенные устройства? Они используются во множестве приложений. Они могут приводить в действие полнофункциональную операционную систему (ОС) Android на смарт-телевизоре или применяться в электронном блоке управления (ЭБУ) автомобиля, работающем под управлением ОС реального времени. Они могут принимать форму ПК с Windows 98 внутри аппарата МРТ. Они используются в программируемых логических контроллерах (ПЛК) в промышленных условиях, а также осуществляют управление и связь в зубных щетках, подключенных к интернету.

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

Многие встроенные системы обеспечивают безопасное использование оборудования и могут иметь особые механизмы, которые повреждают систему, если ее предполагаемые условия работы будут нарушены. Вы можете поэкспериментировать с подержанным ЭБУ в лаборатории, а вот ставить опыты на ЭБУ во время вождения автомобиля мы не рекомендуем! Получайте удовольствие от процесса, будьте осторожны и не навредите себе или другим.

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

Как выглядят встроенные устройства

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

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

Повсеместное распространение дешевого готового оборудования, на основе которого можно разрабатывать встроенные системы, ведет к тому, что нестандартные детали начинают использоваться все реже. Специализированные интегральные схемы (application-specific integrated circuits, ASIC) заменяются обычными микроконтроллерами. Пользовательские реализации ОС уступают место FreeRTOS, голым ядрам Linux или даже полноценным Android. Мощность современного оборудования позволяет наделить встроенные устройства возможностями планшета, телефона или даже полноценного ПК.

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

Способы взлома встроенных устройств

Допустим, у вас есть устройство, в котором, согласно требованиям безопасности, запрещается использование стороннего кода. Но вы все равно хотите запустить на нем код. При рассмотрении любых возможностей взлома следует учитывать назначение устройства и его техническое исполнение. Например, если устройство содержит полную ОС Linux с открытым сетевым интерфейсом, то можно получить полный доступ, просто войдя в систему с известным паролем учетной записи root по умолчанию. Затем вы можете запустить на устройстве любой код. Однако если у вас есть другой микроконтроллер, выполняющий проверку подпи­си прошивки, а все порты отладки отключены, то данный подход не сработает.

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

Что такое аппаратная атака

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

Устройство представляет собой совокупность программного и аппаратного обеспечения. Для наших целей мы будем считать, что программное обеспечение (ПО) состоит из битов, а аппаратное обеспечение (АО) — из атомов. Прошивка (код, встроенный во встроенное устройство), также является ПО.

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

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

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

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

Для кого эта книга

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

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

Структура книги

Ниже приведен краткий обзор издания.

Глава 1. Следим за здоровьем. Введение в безопасность встроенных систем. Здесь мы рассмотрим различные архитектуры реализации встроенных систем, смоделируем некоторые угрозы, а также обсудим несколько различных атак.Глава 2. На кончиках пальцев. Аппаратные периферийные интерфейсы. Поговорим о различных портах и протоколах связи, а также рассмотрим основы электротехники, необходимые для понимания сигналов и измерений.Глава 3. Что внутри. Идентификация компонентов и сбор информации. Рассмотрим, как собирать информацию о вашей цели, интерпретировать спецификации и схемы, идентифицировать компоненты на печатной плате, а также извлекать и анализировать образы встроенного ПО.Глава 4. Слон в посудной лавке. Внедрение ошибок. Рассмотрим идеи, лежащие в основе атак по сбоям, в том числе методы определения точек внедрения сбоев, подготовки цели, настройки внедрения сбоев и уточнения эффективных параметров.Глава 5. Руками не трогать. Как внедрять ошибки. Поговорим о тактовой частоте, напряжении, электромагнитных полях, лазерах, смещениях подложки и других точках внедрения ошибок. Рассмотрим, какие инструменты вам нужно будет создать, чтобы осуществить внедрение.Глава 6. Рубрика «Эксперименты». Лаборатория внедрения ошибок. В главе мы выполним три лабораторные работы по внедрению неисправностей в домашних условиях.Глава 7. Цель отмечена крестом. Дамп памяти кошелька Trezor One. На примере Trezor One Wallet рассмотрим, как извлечь ключ, используя внедрение ошибок в уязвимой версии прошивки.Глава 8. Мощный подход. Введение в анализ потребляемой мощности. Познакомимся с временными атаками и простыми методиками анализа потребляемой мощности, а также увидим, как с их помощью извлекать пароли и криптографические ключи.Глава 9. Рубрика «Эксперименты». Простой анализ потребляемой мощности. Пройдем весь путь от создания базовой аппаратной установки до всего необходимого для проведения атаки SPA2 в вашей домашней лаборатории.Глава 10. Разделяй и властвуй. Дифференциальный анализ потребляемой мощности. Введем концепцию дифференциального анализа потребляемой мощности и покажем, как крошечные колебания в энергопотреблении могут привести к извлечению криптографического ключа.Глава 11. Без формул никуда. Продвинутый анализ потребляемой мощности. Рассмотрим набор методов, позволяющих выполнить более сложный анализ потребляемой мощности: от практических советов по измерению до фильтрации наборов дорожек, анализа сигналов, обработки и визуализации.Глава 12. Рубрика «Эксперименты». Дифференциальный анализ потреб­ляемой мощности. Будем атаковать выбранную цель с помощью специального загрузчика и находить секреты, используя различные методы анализа потребляемой мощности.Глава 13. Шутки в сторону. Примеры из жизни. Рассмотрим информацию из нескольких публикаций об атаках по неисправностям и атаках по побочным каналам, выполненным на реальных целях.Глава 14. Подумайте о детях. Контрмеры, сертификаты и полезные байты. Обсудим многочисленные контрмеры, позволяющие снизить некоторые риски, описанные в этой книге, а также вопросы сертификации устройств и дальнейшие планы.Приложение А. Куда потратить деньги. Настройка лаборатории. Рассмотрим все великолепие и многообразие инструментов и других компонентов, которые вам могут понадобиться в работе.Приложение Б. Ваша база — наша база. Популярные распиновки. Разберем шпаргалку по популярным распиновкам, с которыми вы будете регулярно сталкиваться.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

2 Simple Power Analysis — простой анализ потребляемой мощности. — Примеч. науч. ред.

Глава 1. Следим за здоровьем. Введение в безопасность встроенных систем

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

Аппаратные компоненты

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

Внутри встроенного устройства находится печатная плата (printed circuit board, PCB), на которой обычно есть следующие аппаратные компоненты: процессор, энергозависимая память, энергонезависимая память, аналоговые компоненты и внешние интерфейсы (рис. 1.1).

Рис. 1.1. Типичная печатная плата встроенного устройства

Все вычисления выполняются в центральном процессоре (ЦП). На рис. 1.1 процессор встроен в систему на чипе (System-on-Chip, SoC) и помечен цифрой ❶. Как правило, процессор приводит в действие основное программное обеспечение и операционную систему (ОС), а SoC содержит дополнительные аппаратные периферийные устройства.

Энергозависимая память ❷, обычно выполняемая в виде микросхем динамической ОЗУ (dynamic RAM, DRAM) в дискретных корпусах, — это память, которую процессор использует во время работы. Содержимое ее при выключении устройства теряется. Память DRAM работает на частотах, близких к частоте процессора, но для поддержания высокой скорости работы ей нужны широкие шины.

В энергонезависимой памяти ❸ встроенное устройство хранит данные. Они должны сохраняться после отключения питания устройства. Такая память может быть реализована в виде EEPROM, флеш-памяти или даже SD-карт и жестких дисков. Энергонезависимая память обычно содержит загружаемый код, а также сохраненные приложения и данные.

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

Внешние интерфейсы представляют собой встроенные средства связи с внешним миром. Интерфейсы могут подключаться к другим готовым микросхемам (commercial off-the-shelf, COTS) внутри одной печатной платы. В качестве примера можно привести интерфейс высокоскоростной шины к DRAM или флеш-чипам, а также низкоскоростные интерфейсы, такие как I2C и SPI у датчиков. Внешние интерфейсы могут быть представлены на печатной плате в виде разъемов и штекеров. Например, интерфейсы USB и PCI Express (PCIe) являются примерами высокоскоростных интерфейсов, используемых для подключения внешних устройств. Именно здесь происходит вся коммуникация, например с интернетом, локальными интерфейсами отладки или датчиками и исполнительными механизмами. (В главе 2 мы более подробно поговорим о взаимодействии с устройствами.)

Миниатюризация позволяет добавлять в состав SoC блоки, являющиеся интеллектуальной собственностью (intellectual property, IP). На рис. 1.2 показан пример SoC Intel Skylake.

Кристалл процессора содержит несколько ядер, в том числе ядра основного центрального процессора, программу Intel Converged Security and Management Engine (CSME), графический процессор (graphics processing unit, GPU) и многое другое. Доступ к внутренним шинам в SoC осуществляется сложнее, чем к внешним шинам, что делает SoC неудобной точкой для начала взлома. Ниже представлены блоки IP, которые могут содержаться в SoC.

Несколько (микро)процессоров и периферийных устройств. Например, процессор приложений, криптографический движок, видеоускоритель и драйвер интерфейса I2C.Энергонезависимая память. Реализованная в виде микросхем DRAM, установленных поверх SoC, SRAM или банков регистров.Энергонезависимая память. В виде встроенной постоянной памяти (ПЗУ), одноразовых программируемых (one-time-programmable, OTP) FUSE-битов, EEPROM и флеш-памяти. FUSE-биты OTP обычно кодируют важные данные конфигурации микросхемы, например идентификационные данные, этап жизненного цикла и информацию о версии с защитой от отката.

Рис. 1.2. Intel Skylake SoC (фото из общего доступа)

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

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

Компоненты ПО

Программное обеспечение представляет собой структурированный набор данных ЦП и инструкций, которые он выполняет. Для наших целей не имеет значения, где хранится программное обеспечение: в ПЗУ, на флешке или на SD-карте (хотя читатели постарше явно огорчатся тому, что мы не будем рассматривать перфокарты). Встроенные устройства могут содержать (или не содержать) некоторые типы программного обеспечения, описанные ниже.

Примечание

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

Загрузочный код

Стартовый загрузочный код — это набор инструкций, которые процессор выполняет при включении устройства. Загрузочный код создается производителем процессора и сохраняется в ПЗУ. Основная функция данного кода состоит в том, чтобы подготовить главный процессор к запуску всего последующего кода. Обычно это позволяет загрузчику работать в «полевых условиях» и запускать процедуры для аутентификации встроенного загрузчика или для загрузки из других источников (например, через USB). Кроме того, данный код используется во время производства для персонализации, анализа отказов, отладки и самотестирования. Функции, доступные в загрузочном ПЗУ, чаще всего настраиваются с помощью FUSE-битов, которые представляют собой одноразовые программируемые биты, встроенные в кремний. Они позволяют навсегда отключить те или иные функции загрузочного ПЗУ еще на этапе производства.

Загрузочный код отличается от обычного: он неизменяем, выполняется в системе первым и должен иметь доступ ко всему процессору/системе-на-кристалле, чтобы иметь возможность поддерживать производство, выполнять отладку и анализировать отказы чипа. Разрабатывать код ПЗУ следует максимально внимательно. Поскольку он неизменяем, исправить уязвимость в ПЗУ, которая обнаруживается после изготовления, обычно бывает невозможно (хотя некоторые микросхемы поддерживают исправление ПЗУ с помощью FUSE-битов). Загрузочный код выполняется до того, как система получает доступ к сети, поэтому для использования любых уязвимостей на этом уровне требуется физический доступ. Уязвимость, найденная на данном этапе загрузки, скорее всего, даст прямой доступ ко всей системе.

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

Загрузчик

Загрузчик инициализирует систему после выполнения кода загрузочного ПЗУ. Обычно он хранится в энергонезависимой, но изменяемой памяти, поэтому его можно обновлять в любой момент. Производитель оборудования печатной платы (original equipment manufacturer, OEM) создает загрузчик, позволяющий инициализировать компоненты уровня печатной платы. Вдобавок производитель, помимо загрузки и аутентификации операционной системы или доверенной среды выполнения (trusted execution environment, TEE), может заблокировать некоторые функции безопасности. Кроме того, загрузчик может предоставлять функциональные возможности для программирования или отладки устройства. Поскольку этот код изменяем и запускается на устройстве практически первым, загрузчик представляет собой привлекательную для атаки цель. У устройств с более простой системой безопасности код загрузочного ПЗУ не аутентифицирует загрузчик, что позволяет атакующим легко подменять код загрузчика.

Загрузчики аутентифицируются с помощью цифровых подписей, которые обычно проверяются с помощью открытого ключа (или хеша открытого ключа), внедренного в загрузочное ПЗУ или FUSE-биты. Поскольку этот открытый ключ трудно изменить, он считается корнем доверия. Производитель подписывает загрузчик с помощью закрытого ключа, связанного с открытым ключом, давая понять коду загрузочного ПЗУ, что загрузчику можно доверять. Загрузчик, прошедший проверку, может внедрить открытый ключ для выполнения кода следующего этапа и убедить устройство в том, что следующий этап выполняется вполне легально. Эта цепочка доверия может протянуться вплоть до приложений, работающих в ОС (рис. 1.3).

Рис. 1.3. Цепочка доверия — этапы проверок и загрузки

Теоретически такая цепочка доверия кажется довольно безопасной, но схема уязвима для множества атак, начиная от использования слабых мест в процессе проверки и заканчивая внедрением ошибок, атаками по времени и т.д. См. выступление Джаспера на конференции Hardwear.io USA 2019 под названием Top 10 Secure Boot Mistakes на YouTube (https://www.youtube.com/watch?v=B9J8qjuxysQ/), где описаны десять основных ошибок.

Доверенная среда выполнения ОС и доверенные приложения

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

Идея состоит в том, чтобы создать «виртуальную» безопасную SoC, разделив всю SoC на «безопасную» и «небезопасную» части. В результате каждый компонент SoC либо работает только в безопасной или в небезопасной части, либо может динамически переключаться между ними. Например, разработчик SoC может поместить криптографический механизм в безопасную часть, сетевое оборудование — в небезопасную, а основному процессору позволить переключаться между ними. Такой подход дает системе возможность шифровать сетевые пакеты в безопасной части, а затем передавать их через небезопасную, гарантируя, что ключ шифрования никогда не попадет в основную ОС или пользовательское приложение на процессоре.

На мобильных телефонах и планшетах в TEE есть своя операционная система с доступом ко всем компонентам безопасной части. Расширенная среда выполнения (rich execution environment, REE) включает операционную систему «обычной части», например ядро Linux или iOS, а также пользовательские приложения.

Конечная цель состоит в том, чтобы все незащищенные и сложные операции, такие как пользовательские приложения, выполнялись в незащищенной части, а все безопасные операции, такие как банковские приложения, — в безопасной. Эти безопасные приложения называются доверенными (trusted applications, TA). Ядро TEE — цель атаки, и оно, будучи взломанным, обычно обеспечивает полный доступ как к безопасной, так и к небезопасной частям.

Образы прошивки

Прошивка — низкоуровневое программное обеспечение, работающее на процессорах или периферийных устройствах. Простые периферийные устройства часто бывают чисто аппаратными, но в более сложных системах устанавливаются микроконтроллеры, на которых работает прошивка. Например, большинство чипов Wi-Fi после включения питания загружают свою прошивку. Если вы пользуетесь Linux, то команда /lib/firmware покажет вам, сколько микропрограмм требуется для работы тех или иных периферийных устройств на ПК. Как и любое программное обеспечение, прошивка бывает сложной и, следовательно, уязвимой для атак.

Основное ядро ОС и приложений

Основная ОС во встроенной системе — это, как правило, ОС общего назначения, например Linux, или ОС реального времени, например VxWorks или FreeRTOS. В смарт-картах могут быть установлены проприетарные ОС, которые запускают приложения, написанные на Java Card. В этих ОС могут содержаться функции безопасности (например, криптографические сервисы), а также реализуется изоляция процессов, поэтому при компрометации одного процесса другой остается безопасным.

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

Моделирование аппаратных угроз

Моделирование угроз — одна из наиболее важных задач в защите любой системы. Ресурсы, которые система может выделить для своей защиты, не безграничны, поэтому очень важно проанализировать, как лучше всего их потратить, чтобы свести возможные атаки к минимуму. Это путь к достижению «достаточно хорошей» безопасности.

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

Классическая работа в области моделирования угроз — книга Адама Шостака Threat Modeling: Designing for Security (Wiley, 2014). Наука о моделировании угроз весьма увлекательна, поскольку охватывает безопасность на этапе среды разработки, производства, цепочки поставок, отгрузки и эксплуатации устройства. В этом разделе мы рассмотрим основные аспекты моделирования угроз и применим их к безопасности встроенных устройств, не обойдя вниманием и особенности самого устройства.

Что такое безопасность

Оксфордский словарь английского языка определяет безопасность как «состояние свободы от опасностей или угроз». Это определение подразумевает, что безопасной можно назвать либо такую систему, которую никто не планирует атаковать, либо ту, которая способна пережить любую атаку. Первый вид систем мы называем кирпичами, поскольку они попросту не работают, а второй — единорогами, так как их не существует. Идеальной защиты не бывает, и из-за этого кажется, что проще тогда вообще ничего не защищать. Такой подход называют нигилизмом безопасности. Он плох тем, что не учитывает, что каждая атака являет собой компромисс между затратами и выгодой.

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

Стоит упомянуть, что затраты и выгоды от проведения атак не всегда выражаются в деньгах. К неденежным затратам можно, очевидно, отнести время. Менее очевидно — разочарование атакующего в случае неудачи. Например, атакующий, который занимается взломом, чтобы себя развлечь, может просто переключиться на другую цель, если взлом первой не будет успешным. С точки зрения защиты в этой идее заключен полезный урок. Подробнее читайте в выступлении Криса Домаса на DEF CON 23: Repsych: Psychological Warfare in Reverse Engineering. Неденежные выгоды — это, например, сбор персональных данных, а также известность, которая зарабатывается благодаря публикациям на конференциях или успешным случаям взлома (хотя эти выгоды тоже можно монетизировать).

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

Эволюция атак

В Агентстве национальной безопасности США (АНБ) бытует поговорка: «Атаки всегда становятся лучше, а хуже — никогда». Другими словами, атаки со временем становятся дешевле и сильнее. Этот принцип становится еще более актуальным с течением времени из-за увеличения общедоступности информации о цели, снижения стоимости вычислительной мощности и увеличения доступности хакерского оборудования. С момента первоначального проектирования чипа до окончательного выхода его в производство может пройти несколько лет, после чего требуется не меньше года для внедрения его в устройство. Получается, что до того, как чип начинает работать в коммерческой среде, проходит три-пять лет. После этого он будет работоспособен еще в течение нескольких лет (если мы говорим об изделиях «интернета вещей [IoT]»), 10 лет (электронный паспорт) или даже 20 лет (автомобили и медицинское оборудование). Таким образом, разработчики должны учитывать будущие атаки, которые могут произойти через 5–25 лет. Это явно невозможно, поэтому вместо прогнозирования на пару десятков лет часто приходится выпускать обновления программ, позволяющие смягчить неисправимые аппаратные проблемы. Для сравнения: 25 лет назад смарт-карту было очень трудно сломать, но после прочтения этой книги вы без особого сопротивления сможете извлечь все ключи из 25-летней смарт-карты.

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

Что касается выгоды, то у атак обычно бывает некоторое ограниченное окно, в котором они представляют ценность. Если вы сегодня взломаете защиту от копирования Commodore 64, то сумеете извлечь небольшую финансовую выгоду. Трансляция вашей любимой спортивной игры ценна только в прямом эфире и лишь до момента, когда результат станет известен. На следующий день ее ценность значительно снижается.

Масштабируемость атак

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

С другой стороны, рассмотрим модчипы Xbox 360. На рис. 1.4 показан модчип Xenium ICE — белая печатная плата слева.

Этот модчип Xenium ICE припаивается к основной печатной плате Xbox и позволяет проводить атаки. Плата автоматизирует атаку внедрения ошибок для загрузки произвольной прошивки. Эта аппаратная атака осуществляется настолько легко, что продажа модчипов может превратиться в бизнес. Эту атаку назовем «хорошо масштабируемой» (в главе 13 будет приведено ее более по­дробное описание).

Аппаратные взломщики любят масштабируемые атаки, но только в том случае, если стоимость взлома достаточно мала. Пример: аппаратные атаки для извлечения секретов, которые затем можно масштабировать, такие как восстановление основного ключа обновления встроенного ПО, скрытого в оборудовании, что в дальнейшем облегчает доступ к множеству встроенных программ. Еще один пример: однократная операция извлечения кода загрузочного ПЗУ или встроенного ПО, позволяющая выявить уязвимости системы, которые можно использовать многократно.

Рис. 1.4. Модчип Xenium ICE в Xbox, используемый для обхода проверки кода (фото Helohe, лицензия CC BY 2.5)

Наконец, для некоторых аппаратных атак масштаб не важен. Например, чтобы получить незашифрованную копию видео из системы управления цифровыми правами (digital rights management, DRM), будет достаточно одного взлома. После этого информация станет распространяться пиратами. То же самое можно сказать о запуске ядерной ракеты или расшифровке налоговых деклараций президента.

Дерево атак

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

Рис. 1.5. Связь между элементами моделирования угроз

Профилирование атакующих

Профилирование атакующих — это важная задача, так как у каждого из них есть свои мотивы, ресурсы и ограничения. Конечно, можно сказать, что ботнеты или «черви» — не люди и мотивов у них нет, но ведь изначально «червя» запускает человек, который нажимает клавишу Enter, будучи преисполненным восторга, гнева или ожиданий.

примечание

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

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

Ниже приведены некоторые распространенные сценарии атак и связанные с ними мотивы, персонажи и возможности атакующих.

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

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

Государства. В этом случае мотивацией может быть саботаж, шпионаж и борьба с терроризмом. Государства, как правило, располагают и инструментами, и знаниями, и временем. Джеймс Миккенс однажды сказал (и эта фраза стала известной), что если Моссад (национальное разведывательное управление Израиля) нацелится на вас, то, что бы вы ни делали, Моссад все равно нападет.Этичные хакеры. Этичные хакеры тоже представляют собой угрозу, но другого сорта. Они могут владеть навыками работы с оборудованием и иметь доступ к простым домашним инструментам или дорогому оборудованию в местном университете, что по уровню оснащенности приближает их к реальным атакующим. Этичные хакеры вступают в игру, когда видят проблемы, решению которых могут поспособствовать. Среди этих людей могут быть любители, которые хотят понять, как все устроено, или те, кто хочет стать лучшим в своей сфере и прославиться своими способностями. Это могут быть исследователи, которые продают свои услуги в целях получения дохода, а могут быть патриоты или протестующие, выступающие за все хорошее против всего плохого. Этичные хакеры не всегда вредят кому-то. Один производитель смарт-замков однажды пожаловался нам, что компания очень боится оказаться в центре скандала с этичным взломом, так как это подрывает доверие к бренду. На самом деле хакеры часто взламывают простые замки с помощью тяжелых кирпичей, так что у покупателей замков проблем быть не должно, но лозунг «Не беспокойтесь, у них нет денег на компьютер» не слишком способствует укреплению доверия к бренду.Атакующие-любители. Этот последний тип атакующих, как правило, представляет собой одиночку или небольшую группу людей, стремящихся навредить другому человеку, компании или инфраструктуре. Но у таких атакующих не всегда хватает технических навыков. Они пытаются заработать денег путем шантажа, продажи коммерческой тайны или просто причинения вреда другой стороне. Успешные аппаратные атаки со стороны таких атакующих обычно маловероятны, так как у них недостаточно знаний и бюджета (если вы тоже из любителей, то, пожалуйста, не надо спрашивать у нас, как взломать учетную запись вашей бывшей девушки в соцсети).

Идентификация потенциальных атакующих не всегда однозначна и может зависеть от устройства. Как правило, составить профиль атакующего легче, если рассматривать конкретный продукт, а не его составные компоненты. Например, угроза взлома некой марки IoT-кофеварок через интернет, направленного на то, чтобы кофе получался невкусным, может исходить от всех перечисленных типов атакующих. Чем выше мы движемся по цепочке поставок устройства, тем сложнее становится профилирование. В устройствах IoT может быть установлен ускоритель расширенного стандарта шифрования (advanced encryption standard, AES), предоставляемого поставщиком IP. Этот ускоритель интегрируется в SoC, которая интегрируется в печатную плату, из которой изготавливается конечное устройство. Как IP-поставщику ускорителя AES определить угрозы для конечного устройства, на котором установлен этот ускоритель? Ему придется думать о типах атаки, а не об атакующих (например, путем реализации определенной степени защиты от атак по побочным каналам).

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

Типы атак

Аппаратные атаки, очевидно, нацелены на аппаратное обеспечение, например на доступ к порту отладки Joint Test Action Group (JTAG). Но они также могут быть нацелены на ПО, например чтобы обойти проверку пароля. В этой книге мы не будем рассматривать программные атаки на ПО, но уделим внимание использованию ПО для атаки на аппаратное обеспечение.

Как упоминалось ранее, поверхность атаки — отправная точка для атакующего, состоящая из доступных компонентов оборудования и программного обес­печения. Рассматривая поверхность атаки, мы обычно предполагаем полный физический доступ к устройству. Но иногда достаточно находиться в радиусе действия Wi-Fi (ближний радиус действия) или иметь подключение к любой сети (удаленное подключение).

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

Программные атаки на аппаратные средства

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

Внедрение ошибок

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

Забивание DRAM — хорошо известный метод внедрения ошибок. В нем микросхема памяти DRAM бомбардируется неестественным шаблоном доступа в трех соседних строках. При многократной активации двух внешних строк в центральной строке-жертве происходит переключение битов. Эта атака вызывает инвертирование битов DRAM, превращая строки-жертвы в таблицы страниц. Таблицы страниц — это поддерживаемые операционной системой структуры, которые ограничивают доступ приложений к памяти. Изменяя биты управления доступом или адреса физической памяти в этих таблицах, приложение может получить доступ к памяти, к которой в обычных обстоятельствах доступа нет, а это уже позволяет расширить привилегии приложения. Хитрость заключается в том, чтобы изменить структуру памяти таким образом, чтобы строка-жертва с таблицами страниц находилась между строками, контролируемыми злоумышленником, а эти строки активируются из программного обеспечения высокого уровня. Было доказано, что этот метод работает на процессорах x86 и ARM, причем реализуется как низкоуровневым программным обеспечением, так и JavaScript. Больше информации можно найти в статье Drammer: Deterministic Rowhammer Attacks on Mobile Platforms Виктора ван дер Вина и др.

Разгон ЦП — еще один метод внедрения ошибок. Разгон вызывает временные ошибки, называемые ошибками синхронизации. Результатом такой ошибки могут быть неверные значения битов в регистре ЦП. CLKSCREW — пример атаки на разгон ЦП. Поскольку программное обеспечение на мобильных телефонах может управлять частотой ЦП и напряжением ядра, злоумышленник может заставить ЦП сбоить, снижая напряжение и кратковременно повышая частоту процессора. Правильно рассчитав время, злоумышленник может сгенерировать ошибку проверки подписи RSA и загрузить неправильно подписанный произвольный код. Подробнее об этом — в статье CLKSCREW: Exposed the Perils of Security-Boblivious Energy Management Эдриана Танга и др.

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

Атаки по побочным каналам

Синхронизацией ПО называют число тактов, необходимое процессору для выполнения программной задачи. Как правило, более сложные задачи занимают больше времени. Например, сортировка списка из 1000 чисел занимает больше времени, чем сортировка списка из 100 чисел. Неудивительно, что атакующий может использовать для атаки именно время выполнения. В современных встроенных системах измерить время выполнения несложно, причем с точностью до такта! Это ведет к возникновению атак по времени, в ходе которых атакующий пытается связать время выполнения программного обеспечения с неким значением, которое пытается извлечь из системы.

Например, функция strcmp языка C сравнивает две строки. Она сравнивает символы строки один за другим, начиная с первого, и, как только встречается различие, останавливается. При использовании функции strcmp для сравнения введенного пароля с сохраненным ее время выполнения позволяет получить информацию о пароле, поскольку функция завершает работу при обнаружении первого несовпадающего символа между паролем злоумышленника и паролем, установленным в устройстве. Таким образом, время выполнения функции strcmp позволяет понять, сколько начальных символов в паролях совпало (мы подробнее опишем эту атаку в главе 8, а в главе 14 покажем, как реализовать это сравнение).

RAMBleed — еще одна атака по побочным каналам, которую можно запустить из программного обеспечения, как показали Квон и др. в работе RAMBleed: Reading Bits in Memory Without Accessing Them. В работе используется забивание DRAM для чтения битов из памяти. В атаке RAMBleed инверсия битов происходит в строке атакующего в зависимости от данных в строках жертвы. Таким образом, атакующий может узнать, что хранится в памяти другого процесса.

Микроархитектурные атаки

Теперь, когда вы понимаете принцип атак по времени, рассмотрим пример. Современные процессоры работают быстро, поскольку за долгие годы в них было выявлено и внедрено огромное количество оптимизаций. Например, работа кэш-памяти предполагает, что если мы обращались к каким-то ячейкам памяти, то они могут скоро понадобиться снова. Следовательно, данные в этих ячейках памяти хранятся физически ближе к центральному процессору и доступ к ним осуществляется быстрее. Еще один пример оптимизации возник из идеи о том, что результат умножения числа N на 0 или 1 тривиален, поэтому выполнение полноценного умножения не требуется, поскольку ответ равен 0 или N. Из этих оптимизаций состоит микроархитектура и аппаратная реализация набора инструкций.

Но именно здесь оптимизации скорости и безопасности противоречат друг другу. Если оптимизация связана с каким-то секретным значением, то фактически прямо указывает на него. Например, если умножение N на K для неизвестного K иногда выполняется быстрее, то в этих «быстрых» случаях значение K равно 0 или 1. Или если область памяти кэширована, то получить доступ к ней можно быстрее, поэтому внезапный быстрый доступ к некой произвольной области означает, что к ней уже недавно обращались.

В печально известной атаке Spectre 2018 г. используется оптимизация спекулятивного выполнения. Вычисление ветви кода, по которой должен пойти алгоритм, требует времени. Вместо того чтобы ожидать вычисления условия, спекулятивное выполнение угадывает результат и выполняет ветвь кода, как если бы предположение было правильным. Если догадка верна, то выполнение просто продолжается, а если нет, выполняется откат. Важно здесь то, что спекулятивное выполнение влияет на состояние кэшей ЦП. Spectre заставляет ЦП выполнять спекулятивную операцию, влияя на кэш определенным образом в зависимости от некоего секретного значения, а затем использует атаку по времени кэша, чтобы восстановить это значение. Как показано в работе Spectre Attacks: Exploiting Speculative Execution Пола Кочера и др., мы можем использовать этот трюк в некоторых уже созданных или будущих программах, чтобы сбросить всю память процесса-жертвы. Проблема заключается в том, что процессоры оптимизировались по скорости на протяжении десятилетий, и существует еще множество оптимизаций, которые тоже можно использовать подобным образом.

Атаки на уровне печатной платы

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

Чтобы выполнить атаку на уровне печатной платы, на большинстве устройств достаточно отвертки. В некоторых устройствах реализована физическая защита от несанкционированного доступа и система реагирования на несанкционированный доступ, например в платежных терминалах, сертифицированных по стандарту FIPS (Federal Information Processing Standard, Федеральный стандарт обработки информации) 140 уровня 3 или 4. Обход защиты от несанкционированного доступа к электронным компонентам — интересное занятие, но в этой книге не рассматривается.

Один из примеров атаки на уровне печатной платы — переключение настроек SoC путем вытягивания определенных контактов с помощью перемычек. Последние на печатной плате обозначены как резисторы 0 Ом (резисторы с нулевым сопротивлением) (рис. 1.6). Эти настройки SoC могут позволить включить отладку, загрузку без проверки подписи или другие параметры, связанные с безопасностью.

Рис. 1.6. Резисторы с нулевым сопротивлением (R29 и R31)

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

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

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

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

Логические атаки

Логические атаки работают на уровне логических интерфейсов (например, взаимодействуя через существующие порты ввода/вывода). В отличие от атак на уровне платы, логические атаки выполняются не на физическом уровне. Логическая атака нацелена на программное или микропрограммное обеспечение встроенного устройства и пытается пробиться через его защиту, не прибегая к физическому воздействию. Это как если бы вы взламывали чей-то дом (устройство), зная, что его хозяин (ПО) имеет привычку оставлять заднюю дверь (интерфейс) незапертой и, следовательно, взлом вовсе не требуется.

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

Отладка и трассировка

Существуют два очень мощных механизма управления, которые встраиваются в ЦП еще при проектировании и производстве, — функции аппаратной отладки и трассировки. Они часто реализуются поверх интерфейса Joint Test Action Group (JTAG) или Serial Wire Debug (SWD). На рис. 1.7 показан открытый порт JTAG.

Рис. 1.7. Плата с открытым разъемом JTAG. Обычно он выглядит более невзрачно

Имейте в виду, что на защищенных устройствах отладка и трассировка могут отключаться с помощью FUSE-битов, перемычки или какого-нибудь особого секретного кода или механизма запроса/ответа. На менее защищенных устройствах просто удаляется только JTAG (подробнее о JTAG — в следующих главах).

Фаззинг

Фаззинг — метод, заимствованный из области программной безопасности и направленный на выявление проблем безопасности в коде. Обычно фаззинг применяется, для того чтобы найти сбои, с помощью которых можно внедрить код. Простой фаззинг сводится к отправке цели разных случайных данных и наблюдению за ее поведением. Надежные и безопасные цели никак не реагируют на такие атаки, а вот менее надежные или менее безопасные устройства могут начать вести себя ненормально или аварийно завершать работу. Анализ аварийных дампов или проверка отладчиком позволяют точно определить источник сбоя и возможность его использования себе на благо. Интеллектуальный фаззинг сосредоточен на работе с протоколами, структурами данных, типичными значениями, вызывающими сбои, или структурой кода. Этот метод более эффективен для моделирования граничных случаев (ситуаций, которые обычно не ожидаются), которые приведут к сбою цели. Фаззинг на основе генерации создает входные данные с нуля, а фаззинг на основе мутаций берет существующие входные данные и изменяет их. В фаззинге на основе покрытия используются дополнительные данные (например, информация о том, какие именно части программы выполняются с определенными входными данными), что позволяет найти более глубокие ошибки.

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

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

Анализ образов флеш-памяти

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

Наконец, определить возможные уязвимости хорошо помогают дизассемб­лирование и декомпиляция образов программного обеспечения. Кроме того, была проведена некоторая интересная работа по статическому анализу (например, последовательному выполнению) встроенного ПО устройства. См. статью BootStomp: On the Security of Bootloaders in Mobile Devices Нило Редини и др.

Неинвазивные атаки

Неинвазивные атаки не влияют на чип физически. В атаках по побочным каналам для раскрытия секретов устройства используется анализ некоего измеримого поведения системы (например, измерение энергопотребления устройства для извлечения ключа AES). В атаках по сбоям используется внедрение в аппаратное обеспечение сбоев, позволяющих обойти механизм безопасности. Например, сильный электромагнитный (ЭМ) импульс может отключить проверку пароля, и тогда система примет любой пароль. (Главы 4 и 5 посвящены этим темам.)

Чип-инвазивные атаки

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

Декапсуляция, распаковка и переподключение

Декапсуляция — процесс удаления части корпуса схемы с помощью химии, обычно с использованием нескольких капель дымящейся азотной или серной кислоты, помещенных на корпус чипа, чтобы он растворился. В результате получается дырка в корпусе, через которую можно осмотреть саму микросхему, и если сделать это правильно, то микросхема останется работоспособной.

Примечание

Декапсуляцию можно выполнять даже дома, если есть подходящая вытяжка и другие средства безопасности. Если вы смелый, ловкий и умелый, то Евангелие от PoC||GTFO от No Starch Press подробно расскажет вам о том, как выполнять декапсуляцию в домашних условиях.

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

Рис. 1.8. Микросхема со снятым корпусом, на которой видны оголенные соединительные провода (Трэвис Гудспид, лицензия CC BY 2.0)

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

Микрообразы и реверс-инжиниринг

После вскрытия чипа первым делом нужно определить его крупные функцио­нальные блоки и найти среди них интересующие вас. На рис. 1.2 показаны примеры структур. Самые большие блоки на кристалле — это память, например статическая оперативная память (static RAM, SRAM), в которой хранятся кэши процессора (или тесно связанная память), и ПЗУ для загрузочного кода. Любые длинные, преимущественно прямые пучки линий — это шины, соединяющие ЦП и периферию. Знание относительных размеров и того, как выглядят те или иные компоненты, уже позволяет вам заняться реверс-инжинирингом чипа.

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

На рис. 1.9 показано поперечное сечение чипа на комплементарном металл-оксид-полупроводнике (КМОП). На таких чипах построено большинство современных устройств. Как видно на рисунке, у чипа есть несколько слоев и переходных отверстий из меди, которые соединяют транзисторы (поликремний/подложка). Самый нижний слой металла используется для создания стандартных ячеек, на которых из ряда транзисторов формируются логические элементы (И, исключающее ИЛИ и т.д.). Верхние слои обычно используются для разводки питания и синхронизации.

Рис. 1.9. Сечение КМОП-чипа

На рис. 1.10 показаны фотографии слоев внутри типичного чипа.

Рис. 1.10. Различные слои внутри КМОП-чипа (изображение предоставлено Кристофером Тарновски, [email protected])

Получив качественный образ чипа, можно восстановить список соединений из образов или двоичного дампа загрузочного ПЗУ. Список соединений — это, по сути, описание того, как взаимосвязаны логические вентили, на которых держится вся цифровая логика проекта. И список соединений, и дамп загрузочного ПЗУ позволяют атакующим находить слабые места в коде или конструкции микросхемы. В работах Bits from the Matrix: OpticalROM Extraction Криса Герлински и Integrated Circuit Offensive Security Оливье Томаса, представленных на конференции Hardwear.io 2019, дано хорошее введение в тему.

Сканирующий электронный микроскоп

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

Внедрение оптических ошибок и анализ оптического излучения

Когда поверхность чипа открыта и видна, можно «побаловаться с фотонами». Из-за эффекта люминесценции горячих носителей переключающие транзисторы иногда светятся. С помощью ИК-чувствительного датчика на устройстве с зарядовой связью (ПЗС), подобного тем, которые используются в любительской астрономии, или лавинного фотодиода (ЛФД) вы можете определить активные области чипа по испускаемым из них фотонам, что тоже помогает в реверс-инжиниринге (а если точнее, в анализе побочных каналов). Например, с помощью измерений фотонов вы можете определять секретные ключи. См. работу Simple Photonic Emission Analysis of AES: Photonic Side Channel Analysis for the Rest of Us Александра Шлёссера и др.

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

Редактирование сфокусированным ионным пучком и микрозондирование

Сфокусированный ионный пучок (focused ion beam, FIB) — это техника, в которой либо для удаления частей чипа, либо для нанесения материала на чип в нанометровом масштабе используется ионный пучок, что позволяет злоумышленникам обрезать соединения чипа, прокладывать новые соединения или подготавливать контактные площадки для микрозондирования. Редактирование FIB требует времени и навыков (и дорогого прибора FIB), но, как вы уже поняли, этот метод позволяет обойти сложные аппаратные механизмы безопасности, если злоумышленник сможет перед этим их обнаружить. Цифрами на рис. 1.11 обозначены отверстия, созданные FIB для доступа к нижним слоям металла. «Шляпки» вокруг отверстий созданы для обхода активной защиты.

Рис. 1.11. Ряд правок FIB для облегчения микрозондирования (изображение предоставлено Кристофером Тарновски, [email protected])

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

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

Активы и цели безопасности