Аппаратный хакинг: взлом реальных вещей
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Аппаратный хакинг: взлом реальных вещей

 

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

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


 

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

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

 

ISBN 978-5-4461-2017-8

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

 

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

 

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

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

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

Об авторах

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

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

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

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

Предисловие

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

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

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

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

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

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

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

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

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

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


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

Некоторое время назад аппаратное обеспечение (далее — АО) мало интересовало хакеров. Многие считали взлом АО слишком трудным делом. Так и говорили — «слишком сложно»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. Подумайте о детях. Контрмеры, сертификаты и полезные байты. Обсудим многочисленные контрмеры, позволяющие снизить некоторые риски, описанные в этой книге, а также вопросы сертификации устройств и дальнейшие планы.
  • Приложение А. Куда потратить деньги. Настройка лаборатории. Рассмотрим все великолепие и многообразие инструментов и других компонентов, которые вам могут понадобиться в работе.
  • Приложение Б. Ваша база — наша база. Популярные распиновки. Разберем шпаргалку по популярным распиновкам, с которыми вы будете регулярно сталкиваться.

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

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

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

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


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

  • Глава 9. Рубрика «Эксперименты». Простой анализ потребляемой мощности. Пройдем весь путь от создания базовой аппаратной установки до всего необходимого для проведения атаки SPA2 в вашей домашней лаборатории.
  • 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. Различные слои внутри КМОП-чипа (изображение предоставлено Кристофером Тарновски, semiconductor.guru@gmail.com)

    Получив качественный образ чипа, можно восстановить список соединений из образов или двоичного дампа загрузочного ПЗУ. Список соединений — это, по сути, описание того, как взаимосвязаны логические вентили, на которых держится вся цифровая логика проекта. И список соединений, и дамп загрузочного ПЗУ позволяют атакующим находить слабые места в коде или конструкции микросхемы. В работах 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 для облегчения микрозондирования (изображение предоставлено Кристофером Тарновски, semiconductor.guru@gmail.com)

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

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

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

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

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

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

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

    Доступность активов имеет смысл защищать только в тех случаях, когда к устройству нет физического доступа, например если доступ к нему осуществляется через сеть или интернет. Атаки типа «отказ в обслуживании» (DDoS-атаки), которые выводят из строя сайты, стремятся нарушить именно доступность. Скомпрометировать доступность встраиваемых устройств очень легко: их можно просто выключить, разбить молотком или взорвать.

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

    Хотя это и не очень распространено, указывать сильные и слабые стороны устройства — верный признак зрелой системы безопасности поставщика.

    Конфиденциальность и целостность двоичного кода

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

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

    Конфиденциальность и целостность ключей

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

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

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

    Обычно за корень доверия принимают производственный процесс, используемый во время начальной генерации или внедрения ключа. Например, специ­фикация доверенного платформенного модуля (Trusted Platform Module, TPM) версии 2.0 требует первичного начального числа3 (endorsement primary seed, EPS). Это число является уникальным идентификатором для каждого TPM и используется для получения первичного ключа. В соответствии со спецификацией EPS вводится в TPM или создается прямо на нем на этапе производства.

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

    Удаленная проверка загрузки

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

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

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

    Конфиденциальность и целостность персональных данных

    Персональные данные (ПД) — это данные, с помощью которых можно идентифицировать человека. Очевидные примеры таких данных: имя, номер мобильного телефона, адреса и номера кредитных карт. Есть и менее очевидные, например данные акселерометра, записанные на портативном устройстве. Конфиденциальность ПД является проблемой, когда установленные на устройстве приложения извлекают и используют их. Например, данные акселерометра, характеризующие походку человека, можно использовать для идентификации этого человека. Более подробная информация об этом представлена в работе Gait Identification Using Accelerometer on Mobile Phone Хон Мин Тана и др. Данные об энергопотреблении мобильного телефона позволяют точно определить местоположение человека по энергопотреблению телефона в зависимости от расстояния до вышек сотовой связи. Об этом можно почитать в работе PowerSpy: Location Tracking Using Mobile Device Power Analysis Яна Михалевского и др.

    В области медицины в отношении ПД есть свои законодательные меры. В американском Законе о переносимости и подотчетности медицинского страхования (Health Insurance Portability and Accountability Act, HIPAA) 1996 г. особое внимание уделяется конфиденциальности медицинской информации. Он применяется к любой системе, в которой так или иначе обрабатываются персональные данные пациентов. HIPAA предъявляет довольно общие требования к технической безопасности.

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

    Целостность и конфиденциальность данных с датчика

    Мы уже поняли, как данные с датчиков связаны с ПД. Их целостность тоже важна, поскольку устройство должно точно воспринимать и записывать измерения среды, которые оно выполняет. Это требование особенно важно в случаях, когда система использует данные с датчиков для управления некоторыми исполнительными механизмами. Отличным примером является случай, когда американский беспилотник RQ-170 был вынужден приземлиться в Иране якобы после того, как поддельный сигнал GPS заставил его поверить, что он приземляется на базе США в Афганистане.

    Если устройство для принятия решений использует какую-либо форму искусственного интеллекта, целостность решений ставится под сомнение, и этим занимается специальная область исследований — состязательное машинное обучение. В качестве примера можно привести использование слабых сторон нейросетевых классификаторов путем искусственного изменения изображения знака остановки. Человек может вообще не заметить разницы, но стандартные алгоритмы распознавания изображений могут вообще не узнать измененный знак, хотя должны распознавать правильно. Таким образом, нейронную сеть можно запутать, но у современных беспилотных автомобилей есть база данных с расположением знаков, с которой они могут сверяться, поэтому в данном конкретном случае проблем безопасности быть не должно. В работе Practical Black-Box Attacks Against Machine Learning Николаса Пейпернота и др. приведена более подробная информация по этой теме.

    Защита конфиденциальности контента

    Защита контента выражается в проверке того, что пользователи платят за потребляемый ими медиаконтент и не нарушают рамки некоторых лицензионных ограничений, связанных, например, с датой или географическим положением. Это реализуется с помощью управления цифровыми правами/ограничениями (digital rights/restrictions management, DRM). Оно основано на шифровании потока данных в момент передачи контента в устройство и из него, а также на логике управления доступом внутри устройства, которая запрещает программному обеспечению доступ к контенту в незашифрованном виде. У мобильных устройств большинство требований к защите касаются только программных атак, а вот у телеприставок защита также должна охватывать атаки по сторонним каналам и атаки по сбоям. Таким образом, телевизионные приставки считаются более сложными для взлома и используются для передачи более ценного контента.

    Безопасность и отказоустойчивость

    Безопасность означает способность не причинять вреда (например, людям), а отказоустойчивость — это способность сохранять работоспособность в случае (не злонамеренных) сбоев. Например, микроконтроллер в космическом спутнике подвергается интенсивному излучению, вызывающему так называемые одиночные сбои (single event upsets, SEU). Они инвертируют некоторые биты чипа, что может привести к ошибкам в момент принятия им решения. Чтобы надежно защититься от этого, нужно обнаружить некорректное изменение и либо исправить его, либо откатить устройство к заведомо исправному состоянию. Поскольку эти меры отказоустойчивости надежны не на 100 %, злоумышленник может попробовать внедрить ошибку сколько угодно раз, так как система позволяет это делать.

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

    Меры противодействия

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

    Защита

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

    Обнаружение

    Эта категория мер противодействия требует либо наличия какой-либо аппаратной схемы обнаружения, либо реализованной логики обнаружения в программном обеспечении. Например, вы можете отслеживать состояние источника питания чипа на наличие пиков или провалов напряжения, которые могут быть признаком атаки по сбою напряжения. Программное обеспечение может заниматься обнаружением аномальных состояний. Например, системы, которые непрерывно анализируют сетевой трафик или журналы приложений, могут обнаруживать признаки атак. Есть и другие распространенные методы обнаружения аномалий: поиск так называемых канареек в стеке, обнаружение обращений к защищенным страницам, поиск операторов switch, в которых ни один случай не выполняется, обнаружение ошибок внутренних переменных с помощью циклического избыточного кода (cyclic redundancy check, CRC) и многие другие.

    Реагирование

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

    Пример дерева атак

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

    В нашем примере есть следующие элементы:

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

    Рис. 1.12. Дерево атак зубной щетки IoT

    Цифры на дереве обозначают этапы атаки зубной щетки. Поскольку мы атакующие, у нас есть физический доступ к зубной щетке IoT (1). Цель состоит в том, чтобы установить на зубную щетку бэкдор telnet, чтобы определить, какие ПД есть на устройстве (8), а также запустить зубную щетку на фантастической скорости (11).

    Строчные буквы обозначают атаки, а римские цифры — смягчение последствий. Первым делом мы выпаиваем флеш-память и считываем ее содержимое — все 16 Мбайт (а). Но оказывается, что в образе нет строк, которые можно было бы считать. После некоторого анализа мы делаем вывод, что содержимое либо зашифровано, либо сжато, но поскольку в данных отсутствует заголовок, идентифицирующий формат сжатия, мы предполагаем, что содержимое зашифровано, как показано в атаке (2) и смягчении ее последствий (i). Чтобы расшифровать содержимое, нам нужен ключ шифрования. Видимо, он хранится не во флеш-памяти, как показано в (ii), а где-то в ПЗУ или FUSE-битах. Без доступа к сканирующему электронному микроскопу мы не можем «считать» содержимое с кремния.

    Сменим тактику и поэкспериментируем с анализом потребляемой мощности. Подключим щуп для его измерения и осциллограф и измерим потребляемую мощность системы в процессе загрузки. На кривой осциллографа видно около миллиона маленьких пиков. Из флеш-памяти мы знаем, что размер образа составляет 16 Мбайт, и поэтому делаем вывод, что каждый пик соответствует 16 байтам зашифрованных данных. Предположим, что мы имеем дело с шифрованием AES-128 либо в режиме электронной кодовой книги (electronic code block, ECB), либо в режиме сцепления блоков шифротекста (cipher block chaining, CBC). В режиме ECB каждый блок расшифровывается независимо от других блоков, а в режиме CBC расшифровка каждого блока зависит от более ранних блоков. Поскольку зашифрованный текст образа известен, мы можем попробовать провести атаку анализа потребляемой мощности на основе измеренных нами пиков. Проведя длительную предварительную обработку результатов трассировки и выполнив атаку дифференциального анализа потребляемой мощности (differential power analysis, DPA) (b), мы можем определить возможный ключ (не волнуйтесь, вы узнаете, что такое DPA, по мере изучения этой книги). Расшифровка по методу ECB безрезультатна, а вот CBC дает нам несколько читаемых строк при атаке (c). Похоже, мы нашли правильный ключ на этапе (3) и успешно расшифровали образ на этапе (4)!

    Имея расшифрованный образ, мы можем использовать традиционные методы обратного проектирования программного обеспечения (g), чтобы определить, какие блоки кода за что отвечают, где хранятся данные, как управляются приводы, и, что важно с точки зрения безопасности, теперь мы можем искать уязвимости прямо в коде (9). Кроме того, мы модифицируем расшифрованный образ на этапе (d), добавив в него бэкдор, который позволит нам удаленно подключиться к зубной щетке через telnet (5).

    Шифруем образ обратно и запускаем его в атаку (d). И вдруг зубная щетка перестала загружаться. Скорее всего, дело в проверке подписи прошивки. Без закрытого ключа, используемого для подписи образов, мы не сможем запустить модифицированный образ, так как мешают контрмеры (iii). Часто эту контрмеру можно обойти, устроив короткое замыкание. С помощью внедрения ошибок попробуем испортить единственную инструкцию, отвечающую за принятие или отклонение образа прошивки. Обычно это реализовано через операцию сравнения, в котором используется логический результат, возвращаемый функцией rsa_signature_verify(). Поскольку этот код реализован в ПЗУ, мы не можем получить информацию о реализации с помощью реверс-инжиниринга. Тогда попробуем старый трюк: выполним трассировку побочного канала при загрузке оригинального образа и сравним ее с трассировкой по побочному каналу загрузки измененного образа при атаке (e). Момент, где трассировки различаются, — это, скорее всего, момент, когда загрузочный код решает, принимать ли образ микропрограммы на этапе (6). И в этот момент мы генерируем ошибку, чтобы попытаться изменить решение.

    Загружаем вредоносный образ и сбрасываем напряжение на несколько сотен наносекунд в случайной точке в пятимикросекундном окне атаки (f), примерно в тот момент, когда принимается решение. После нескольких часов повторения этой атаки нам повезло — зубная щетка все же запустила наш образ на стадии (7). Теперь, когда модифицированный код позволяет нам подключаться через telnet, можно переходить к этапу (8), на котором мы можем удаленно управлять процессом чистки и отслеживать использование щетки. А теперь, на заключительном и веселом этапе (11), мы устанавливаем фантастически высокую скорость вращения!

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

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

    Идентификация против эксплуатации

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

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

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

    Но предположим, что в реверс-инжиниринговой атаке (g) на этапе (9) нам удалось выявить уязвимость, для которой мы создаем возможность для атаки (h) на этапе (10). Мы обнаружили, что уязвимость доступна через открытый TCP-порт, поэтому с помощью (j) можно использовать уязвимость удаленно. Весь масштаб атаки в итоге мгновенно изменяется. Применив аппаратные атаки на этапе идентификации, мы можем в дальнейшем выполнять взлом чисто программными средствами (12). Теперь мы можем атаковать любую зубную щетку, узнать чей-то график чистки зубов или вызвать всемирное раздражение десен в глобальном масштабе. В интересное время живем.

    Анализ дерева атак

    Дерево атак помогает визуализировать пути атак, чтобы затем обсудить их со своей командой, определить точки, в которых можно добавить дополнительные контрмеры, и проанализировать эффективность существующих контрмер. Например, в примере с зубной щеткой нетрудно видеть, что смягчение последствий с помощью шифрования образа прошивки (i) вынудило атакующего использовать атаку по побочному каналу (b), а это уже сложнее, чем просто считать память. Аналогично, смягчение последствий с помощью подписи образа микропрограммы (iii) вынуждает атакующего прибегать к атаке с внедрением ошибки (f).

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

    Оценка путей аппаратных атак

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

    Общая система оценки уязвимостей (Common Vulnerability Scoring System, CVSS) используется, как правило, в контексте сетевых компьютеров в какой-то организации. Система предполагает, что уязвимость известна, и пытается оценить масштаб последствий ее эксплуатации. Общая система оценки слабых мест (Common Weakness Scoring System, CWSS) количественно определяет в системе слабые места, которые, впрочем, необязательно являются уязвимостями и не всегда рассматриваются в контексте сетевых компьютеров. Наконец, библиотека для объединенной интерпретации (Joint Interpretation Library, JIL) используется для оценки (аппаратных) путей атаки в схеме сертификации Общих критериев (Common Criteria, CC).

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

    Таблица 1.1. Обзор систем оценки атаки

    Общая система
    оценки уязвимостей

    Общая система оценки слабых мест

    Библиотека для объединенной интерпретации критериев

    Цель

    Помогает организациям с их процессами управления уязвимостями

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

    Оценка того, проходит ли атака оценку CC

    Влияние

    Различает конфиденциальность/целостность/доступность

    Техническое воздействие степени 0,0–1,0, получаемый уровень привилегий

    Н/Д

    Стоимость активов

    Н/Д

    Воздействие на бизнес по шкале 0,0–1,0

    Н/Д

    Стоимость идентификации

    Предполагается, что идентификация уже выполнена

    Вероятность обнаружения

    Оценка фазы идентификации по прошедшему времени, опыту, знаниям, доступу, оборудованию и открытым образцам

    Стоимость эксплуатации

    Различные факторы без учета аппаратных аспектов

    Различные факторы без учета аппаратных аспектов

    Рейтинг этапа эксплуатации

    Вектор атаки

    Четыре уровня,
    от физического
    до удаленного

    Уровень по шкале 0,0–1,0, от физического доступа до доступа через интернет

    Предполагается, что злоумышленник имеет физический доступ

    Внешние меры

    В категории «Модификация» описаны меры смягчения последствий

    Эффективность внешнего контроля

    Внешних смягчений нет

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

    Оцениваются лишь некоторые сопутствующие аспекты

    Оцениваются лишь некоторые сопутствующие аспекты

    Низкая стоимость эксплуа­тации может означать масштабируемость

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

    Вы также можете использовать рейтинги в оборонительном контексте, чтобы определить необходимые контрмеры. В контексте сертификации смарт-карт по системе Общих критериев оценка JIL становится важной частью целей безопасности. Чтобы чип считался устойчивым к атакам с высоким потенциалом, он должен противостоять атакам с рейтингом до 30 баллов. В документе SOG-IS под названием Application of Attack Potential to Smartcards объясняется, как выполняется эта оценка и какие аппаратные атаки в нее входят. Приведу пример: если на то, чтобы извлечь секретный ключ с помощью системы с двумя лазерными лучами для внедрения неисправности, требуется несколько недель, то эта атака оценивается на 30 баллов или ниже. Если для извлечения ключа с помощью атаки по побочному каналу требуется шесть месяцев, то применять меры противодействия не нужно, так как рейтинг этой атаки равен 31 или выше.

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

    В действительности атакующие в основном тоже выполняют некую оценку, чтобы минимизировать затраты и максимизировать пользу от атаки. Эти люди публикуют мало работ, посвященных таким аспектам, и тем не менее на SOURCE Boston 2011 выступил Дино Дай Зови с отличным докладом под названием Attacker Math 101, в котором попытался наложить некоторые ограничения на затраты атакующих.

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

    В различных схемах сертификации безопасности присутствует неявная или явная цель безопасности. Например, как упоминалось ранее, для смарт-карт актуальными считаются атаки только с 30 баллами по рейтингу JIL и ниже. Атака, показанная в презентации Deconstructing a ‘Secure’ Processor Тарновского на Black Hat DC 2010 г., оценивается более чем в 30 баллов и, следовательно, не считается частью цели безопасности. В случае FIPS 140-2 вообще никакие атаки, не входящие в заранее определенный список, не считаются актуальными. Например, атака по побочному каналу может скомпрометировать проверенный FIPS 140-2 криптографический механизм за день, но цель безопасности FIPS 140-2 по-прежнему будет считать устройство безопасным. Каждый раз при использовании устройства, имеющего сертификат безопасности, вам важно убедиться, что цели безопасности сертификата соответствуют вашим.

    Раскрытие проблем безопасности

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

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

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

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

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

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

    Резюме

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

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


    3 В криптографии это еще называется начальным заполнением. — Примеч. науч. ред.

    Обычно за корень доверия принимают производственный процесс, используемый во время начальной генерации или внедрения ключа. Например, специ­фикация доверенного платформенного модуля (Trusted Platform Module, TPM) версии 2.0 требует первичного начального числа3 (endorsement primary seed, EPS). Это число является уникальным идентификатором для каждого TPM и используется для получения первичного ключа. В соответствии со спецификацией EPS вводится в TPM или создается прямо на нем на этапе производства.

    В криптографии это еще называется начальным заполнением. — Примеч. науч. ред.

    Глава 2. На кончиках пальцев. Аппаратные периферийные интерфейсы

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

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

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

    Основы электричества

    Для работы с различными типами интерфейсов полезно знать основы электричества и некоторые термины. Если вы знакомы с напряжением, током, сопротивлением, реактивным сопротивлением, импедансом, индуктивностью и емкостью и в курсе, что AC/DC — это не только австралийская рок-группа, то этот раздел можно пропустить (если вы не знакомы с рок-группой AC/DC, то рекомендуем начать с песни

    ...