Безопасность в диком поле IoT. Первый опыт атаки по побочным каналам
Из энтерпрайза
К моменту начала этой истории много лет работал в разработке энтерпрайз систем, был неплохим специалистом, внимательно относился к вопросам надежности и безопасности. В частности, замечательную книгу Ховарда и Леблана знал, ценил и регулярно перечитывал.
Дивный новый мир IoT
При переходе в embedded разработку сразу же выяснилось, что безопасность здесь обеспечивается совсем по-другому и физическая поверхность атаки не ограничивается сетевым разъемом.
Тогда наш творческий коллектив занимался разработкой приложения для микропроцессорной карты по заказу одного из европейских производителей микроэлектроники. Сам производитель все ухи прожужжал о том, как они заботятся о безопасности и какие в их контроллерах реализованы беспрецедентные меры по повышению безопасности. Мне подумалось, что уж с таким-то арсеналом защитных средств пройти сертификацию не составит труда. Реальность оказалась куда как более интересной — банда «этических хакеров» через пару дней вышла на связь: «Вот первых 6 бит вашего секретного ключа, ваш контроллер сломался, несите следующий».
Выяснилось, что для сертификации предоставляется само устройство, вся документация, исходный код и данные для параметризации (включая ключи). Первым впечатлением было, что джентльменам, конечно, верят на слово, но в данном случае джентльмены брешут! Коллеги остудили мою горячую голову и убедили, что, скорее всего, не брешут, такое направление техники как атака по побочным каналам известна уже много лет и вообще это серьезный бизнес серьезных людей.
Я тоже хочу на темную сторону
Зачем нам все это? Субъективный и очевидный ответ — ну это же круто. Если подумать, то приходит на ум и более объективный — у нас ведь тоже разрабатывают и интегральные схемы, и аппаратуру, их надо уметь защищать. В открытой печати можно найти довольно много информации о способах атаки на реализации, например, AES и, следовательно, устоявшихся методах защиты таких реализаций. В нашей же стране приняты свои стандарты, как защищать их реализации — пока не понятно. Конечно, в основе, наверное, всех блочных шифров лежат одинаковые ячейки Фейстеля, но дьявол, как всегда, в деталях.
Суть метода
Атака по побочным каналам — это общее название целого класса методов, которые используют наблюдение за какой-либо физической величиной, с целью выяснения процессов, происходящих в самом устройстве. Этой величиной может быть потребление питания, шум, электромагнитное излучение, в общем случае — что угодно. Есть еще активные атаки, когда атакующий не ограничивается пассивным наблюдением, а активно взаимодействует с устройством с целью вызвать нарушение штатного режима его работы, но об этом как-нибудь в другой раз.
Еще много лет назад была хорошо проработана задача идентификации объекта управления:
Суть заключается в том, чтобы, варьируя u(t) и наблюдая z(t), определить функцию f или хотя бы x(t). В общем, в теории все понятно и очевидно, как всегда.
Первый опыт
С чего бы начать? Несмотря на богатую теоретическую базу и большой выбор статей по тематике, ответ на этот вопрос больше всего напоминает известную картинку про рисование совы по двум овалам. Раз уж заговорили о симметричных шифрах, то исследовать будем операцию «исключающего или», она же xor.
Чтобы было что взламывать, на контроллере ATMega32u4 реализовали блочный шифр ГОСТ 28147–89 (Магма) с ключом 256 бит. Контроллер очень распространен и не имеет никаких дополнительных средств защиты от запланированной нами атаки. Надо же тренироваться на чем-то простом, лично я и тогда не был уверен в успехе.
В качестве измерительной установки получилось что-то такое:
Принято исходить из предположения, что программный код известен атакующему. Предположение сильное, но не в нашем положении начинающих хакеров от него отказываться.
Главная операция, подлежащая изучению — побайтовое «сложение» байтов ключа a с байтами открытого текста b, т.е. операция вида a xor b. Имея код и осциллограф нетрудно определить момент выполнения именно этой операции.
Оказалось, что снимаемый сигнал сильно зашумлен и простой корреляции явно недостаточно для выявления шаблонов.
Мы пошли другим путем и стали исследовать трассы по N = 250 отсчетов, разбивая их на классы с H0 по H8 по величине Хэммингового расстояния между a и b. Оказалось, что в N-мерном пространстве можно подобрать такую проекцию, что классы H0 (например 0×00 xor 0×00) и H8 (например 0×00 xor 0xFF) оказались линейно разделимыми.
При добавлении в рассмотрение остальных классов с H1 по H7, картинка получилась не такой очевидной и пришлось воспользоваться классификатором. Были рассмотрены дерево решений, K-ближайших соседей, метод опорных векторов, случайный лес, многослойный перцептрон. Точнее всех себя показал метод опорных векторов с гауссовым ядром.
Нужно отметить, что модель должна хорошо классифицировать именно случаи H0 и H8, что означает, соответственно, либо полное совпадение байта текста с байтом ключа, либо полное совпадение инвертированного байта текста с байтом ключа.
Экспериментально (а потом и теоретически, но об этом в другой раз) было показано, что вместо полного перебора 2256 достаточно примерно 214 измерений для создания классификатора.
Потребовалось:
для генерации шаблонов примерно 4 часа
тренировка классификатора и оптимизация гиперпараметров примерно 10–20 часов,
грубый перебор значений для угадывания всего ключа 32 часа.
Итого — примерно 3 дня.
Даже такая примитивная атака оказалась весьма действенной.
Выводы
Таким образом, даже недоверчивый я уверовал в великую силу науки и то, что даже на коленке можно взламывать незащищенные реализации. Для преодоления средств защиты, конечно, потребовались новые знания и оборудование, но начало было положено. Впереди открылся путь полный новых открытий и приключений, ведь если не уметь атаковать, то не получится и защитить.
Все, чему мы учимся на этом пути, так или иначе используется при проектировании наших микросхем.