The cat and a doorБэкдоры (или, если говорить строже, недокументированные возможности) в программных системах не перестают обсуждать. Да, собственно, как перестать, если это одна из самых серьёзных угроз? Недокументированные возможности сейчас традиционно выводят на первый план при анализе средств обработки и защиты информации. Естественно, особенно эффективны бэкдоры в инструментах защиты информации, в частности – в криптографическом программном и аппаратном обеспечении. Добротный бэкдор специально проектируется. А какими свойствами должен обладать идеальный бэкдор?

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

Бэкдор должен обладать свойством “отрицаемости”: то есть, в случае его обнаружения, разработчики должны иметь возможность аргументированно “доказать”, что никакого бэкдора и нет, а это всё “непреднамеренная ошибка”, “особенность протокола” или ещё что-то подобное.

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

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

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

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



Комментарии (1) »

Ops Measurment(Меня попросили простыми словами объяснить, как работают методы считывания секретных ключей через побочные излучения и наводки, например через измерение электрических параметров ноутбука, как продемонстрировано в недавней работе Genkin, Pipman, Tromer. Думаю, что описание достаточно интересно и для публикации на dxdt.ru, тем более, что в нём, на мой взгляд, есть наблюдения, полезные для понимания деталей работы современных реализаций RSA и принципов разработки криптографического ПО.)

Всякая сколь-нибудь сложная техника, особенно вычислительная, излучает в окружающее пространство разнообразные сигналы (это и есть “излучения”), а также изменяет параметры работы сопряжённых с данной техникой устройств и систем (это и есть “наводки”). На практике, убрать побочные излучения и наводки полностью – нельзя. Именно поэтому мы регулярно видим новые работы, достающие секреты при помощи всё более оригинальных измерений на побочных каналах.

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

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

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

Перейдём к конкретному примеру, описанному в исходной работе: получение ключа RSA при помощи измерения электрического потенциала на корпусе (“земле”) ноутбука. (В работе речь идёт также о криптосистеме ElGamal, но принцип атаки совершенно аналогичен, поэтому мы будем рассматривать только случай RSA.) RSA использует операцию возведения в степень, и для шифрования, и для расшифровывания. Напомню, что секретной в RSA является расшифровывающая экспонента, обратная к шифрующей экспоненте. Последняя входит в состав открытого ключа, наряду с модулем (большим числом, задающим конечное множество чисел, в котором осуществляются операции для данного ключа). RSA работает с очень большими числами (2048 бит и более). Арифметические операции над ними, если их осуществлять “в лоб”, занимали бы слишком много времени, даже при работе на самых мощных компьютерах. К счастью, известно большое число оптимизаций, сводящих умножение (возведение в степень) больших целых чисел RSA к некоторому разумному количеству операций. Эти оптимизации всегда являлись проводником для возникновения побочных каналов утечек. Они же используются и в этот раз.

Итак – секретной частью ключа RSA является расшифровывающая экспонента. Это целое число. Достаточно большое. В компьютерной памяти, естественно, оно представлено в двоичном виде. Операции с ним также осуществляются, грубо говоря, побитно – это одна из оптимизаций для быстрого умножения. После того, как исследователи определили, что можно различить исполняемые центральным процессором компьютера серии одних и тех же операций, измеряя потенциал на его корпусе, осталось найти такие зацепки в программном коде, которые позволили бы, на основе этих измерений, различать единицы и нули шифрующей экспоненты. Здесь и кроется основная задумка работы. Зацепки удалось найти в части кода GpuPG, осуществляющей умножение: здесь для 1 и 0 шифрующей экспоненты выбирались разные ветки кода, исполнение которых, при определённых условиях (см. ниже про шифротекст), оставляло разные следы в измеряемом канале утечки.

В RSA шифруемое/расшифровываемое сообщение также представляет собой большое целое число (по длине записи соответствующее длине ключа). При шифровании это число (сообщение) возводится в степень, соответствующую открытой экспоненте. Для дешифрования служит обратная, секретная экспонента. То есть, для того, чтобы наблюдать операции с секретным ключом, атакуемая система должна расшифровывать сообщения – возводить полученные числа в степень, используя соответствующий фрагмент кода GnuPG. А чтобы исследователи могли увидеть биты секретной экспоненты, нужно чтобы возводимые числа (а точнее – одно число) имели специальный вид. Использование специального шифротекста называется “атакой с подобранным шифротекстом”. В рассматриваемом случае – это основная зацепка: если система работает с другими шифротекстами, извлечь ключ описанным способом невозможно.

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

Выбрать правильный шифротекст, из-за особенностей реализации RSA, не представляло особого труда: подходит значение m – 1, где m = pq – модуль ключа, который, как известно, равен произведению двух простых чисел p и q. Значение модуля является открытым. (В секрете держится только разложение на p и q. Несмотря на то что, строго говоря, для расшифровывания сообщения нужно знать только расшифровывающую экспоненту, значения p и q сохраняются, чтобы в дальнейшем использовать их для оптимизации умножения при расшифровывании сообщений.)

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

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

И рекомендую почитать исходную работу (PDF).



Комментарии (2) »

Небольшое продолжение истории с алгоритмом генерации псевдослучайных чисел Dual_EC_DRBG (можно, кстати без подчёркиваний – Dual EC DRGB, что означает Dual Elliptic Curve Deterministic Random Bit Generator). Некоторое время назад я написал про данный алгоритм, – реализация которого, как было объявлено, могла содержать бэкдор от NSA, – буквально следующее:

Схема с заданием специальных параметров – это стандартный метод “модификации” добротных криптосистем с целью добавления в них секретного мастер-ключа. То есть, топорный бэкдор был очевиден для специалиста. И его сразу нашли и подробно разобрали.

Оказывается, всё ещё проще: описание механизма создания бэкдора дано открытым текстом в заявке на патент, подготовленной в 2005 году. И там же прямо сказано, что данный механизм может использоваться при перехвате зашифрованных сообщений уполномоченными службами – это добавляет удобства алгоритму Dual_EC_DRBG и, судя по заявке, является одним из его преимуществ. Кстати, схема с “депонированием” мастер-ключа спроектирована добротно: если вдуматься, то она, фактически, представляет собой реализацию алгоритма Диффи-Хеллмана, где общий секретный ключ генерируют пользователь генератора псевдослучайных чисел и держатель мастер-ключа; последний потом, если потребуется, может восстановить всю псевдослучайную последовательность.

А шумиха в прессе по поводу Dual_EC_DRBG возникла только в 2013 году, после одного из “разоблачений Сноудена” – хотя про специально спроектированный бэкдор, указанный в качестве одного из свойств алгоритма, было известно уже минимум восемь лет.



Комментарии (1) »

Есть такой российский криптографический стандарт хэш-функции – ГОСТ Р 34.11-2012. На днях стартовал открытый конкурс научно-исследовательских работ, посвящённых анализу криптографических качеств этой хэш-функции. Популяризируют российскую (советскую) криптографию, и популяризируют, надо заметить, весьма кстати: сейчас второй полюс в мировом криптографическом инструментарии не помешает. При этом “гостовские” алгоритмы пока что сильно проигрывают более широко известным “западным” в степени исследованности академическим сообществом.

(Призы конкурса Streebog весьма приличные: первая премия – 500 тыс. руб.)



Комментарии (2) »

Очередной секрет Полишинеля: “NSA удаётся обходить криптозащиту интернет-коммуникаций“. Смысл в том, что NSA, якобы, разработали новые методы криптоанализа, позволяющие вскрывать распространённые криптосистемы. То есть, очередной раз подтвердилась давно известная мысль, я, кстати, писал об этом несколько месяцев назад.

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

(Ещё одна ссылка по теме: секретные теоремы высшей алгебры.)



Комментарии (5) »

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

Действительно, анализ конкретных криптосистем, проводимый для собственных нужд разведки, должен быть засекречен. Через некоторое время секретность теряет смысл – документы, связанные с анализом, могут быть опубликованы. В документах есть математика, есть теоремы. Достаточно немного популярно изложить предмет – и вот вам “секретные теоремы высшей алгебры”.

Ну и не станем забывать о том, что многие результаты, легшие в основу современного “несекретного” математического аппарата криптографии, были параллельно получены в рамках вполне себе секретных исследований, выполненных профильными институтами спецслужб. Наиболее часто описываемый случай “секретных теорем” (не так важно, достоверный или нет) – криптосистема RSA: алгоритм, известный сейчас как RSA, на несколько лет раньше появления описаний в открытых источниках, предложил Клиффорд Кокс (Clifford Cocks), математик британского Центра правительственной связи (GCHQ), но его публикации держали в секрете до 1997 года.



Комментарии (3) »

NSA недавно опубликовало подборку бюллетений Cryptolog, с 1974 по 1997 год. Этот бюллетень – что-то вроде “заводской многотиражки” NSA. От других изданий того же агентства отличается уровнем допуска: есть, в том числе, публикации под грифом Top Secret (ну или не просто публикации, а дезинформация, под таким же грифом; какая, в принципе, разница?) Чтение очень занимательное, рекомендую. Много про Советский Союз, про космонавтов, про передовиков науки и техники. Особенно концептуально выглядят лакуны, созданные в тексте некими цензорами.



Comments Off on Архив бюллетеней Cryptolog NSA

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

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

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

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

В качестве аппаратуры для практической постановки помех исследователи применяют детскую радиоигрушку (да, именно так, не шутка), по цене $30 за комплект из двух устройств.

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

(Ссылка на научную работу найдена тут: schneier.com.)



Комментарии (26) »

В продолжение темы про Chrome, который, якобы, переправляет в Google контент закрытых страниц из корпоративных интранетов: интересно подумать, как можно было бы устроить подобный шпионский браузер. Понятно, что едва ли Google что-то подобное делает, потому что не ясны стратегические выгоды: ну чего там интересного для массового пользователя можно найти в интранетах? Тем более, что и ссылку-то не покажешь: сервер же закрыт. В исходном вбросе, направленном на тематические СМИ, по той или иной причине не разработан технический аспект: то есть нет легенды, как именно Chrome “сливает инфу”. А ведь это был бы самый занимательный кусочек истории.

Что можно придумать? Понятно, что простое зеркалирование забранных с “секретного” сайта страниц на сервер Google – это неинтересный вариант. Хотя бы потому, что он обнаруживается совсем уж элементарно, с помощью систем мониторинга трафика. Использование зашифрованных каналов тут не поможет, потому что само наличие канала с трафиком демаскирует “шпиона”. Однако, можно “размазать” собранную информацию по многим транзакциям, передавая внутри каждой лишь небольшой фрагмент. Получается такой медленный и малозаметный канал.

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

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

Другой вопрос: что взять за основу для построения канала утечки? А тут годятся любые сервисы, принимающие некие персонализированные настройки (например, проверка посещаемых URL на “фишинговость и вредоносность”). Сжатый текст будем передавать так: небольшие блоки подмешиваются в токены, которые браузер генерирует при формировании запроса на сервер. Пусть токен содержит 64 байта. Предположим, что 16 из них – это данные утечки. Тридцать запросов с токенами (не много) – 480 байт. Хорошим кодированием можно ужать сюда примерно 2500 знаков текста (можно и заметно больше). Необязательно поддерживать канал открытым, пока не передан весь собранный текст (см. ниже). Вообще, нет никакой необходимости, создавая такой браузер, встраивать в него излишнюю надёжность. Механизмы обеспечения такой надёжности только выдадут затею. Центр посеял много браузеров в окружающее киберпространство. Какие-то из них что-то приносят, какие-то – нет, они сломались. Нестрашно, многочисленность источников компенсирует (для центра) ненадёжность каждого из них.

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

В комментариях к предыдущей заметке высказали ещё несколько идей. Jno предлагает использовать DNS для передачи части собранной информации (как известно, DNS-трафик хорошо преодолевает всякие корпоративные брандмауэры и редко мониторится на предмет утечек). А Vlad пишет, что не обязательно передавать все “внутренние” страницы подряд. Сперва можно посчитать статистику текста по ключевым словам и спросить центр, нужна ли такая страница. Правда, это подразумевает развитую обратную связь, что может демаскировать канал утечки. Кстати, браузеру хорошо бы спрашивать, есть ли уже найденная только что страница в базе, например, передавая хеш её текста.

Вообще, задача определения “секретных” страниц – тоже интересная (особенно, если нет связи с центром). И её что-то упустили из вида при обсуждении вброса на тему Chrome.

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

(Продолжение про риски и политику.)



Комментарии (7) »
Навигация по запискам: « Позже Раньше »