Бэкдор
Бэкдор, тайный вход (от англ. back door — «чёрный ход», буквально «задняя дверь») — дефект или особенность программного кода, которая намеренно встраивается в него разработчиком и позволяет получить несанкционированный доступ к данным или удалённому управлению операционной системой и даже компьютером в целом[1].
Основной целью бэкдора является скрытное и быстрое получение доступа к данным, в большинстве случаев — к зашифрованным и защищённым. Например, бэкдор может быть встроен в алгоритм шифрования для последующей прослушки защищённого канала злоумышленником[1][2].
Основные свойства бэкдора
Идеальный бэкдор
- сложно обнаружить;
- можно использовать многократно;
- легко отрицать — выглядит как ошибка, и в случае обнаружения разработчик может сослаться, что допустил эту ошибку случайно и злого умысла не имел;
- эксплуатируем только при знании секрета — только тот, кто знает, как активируется бэкдор, может им воспользоваться;
- защищён от компрометации предыдущими использованиями — даже если бэкдор был обнаружен, то невозможно установить, кем он до этого эксплуатировался и какой информацией завладел злоумышленник;
- сложно повторить — даже если бэкдор был кем-то найден, то его невозможно будет использовать в другом коде или в другом устройстве.
Распространённые принципы создания бэкдоров в алгоритмах
- слабая устойчивость алгоритма к криптоанализу;
- специально подобранные константы — алгоритм может стать неустойчивым к криптоанализу при выборе определённых значений констант, используемых в его работе;
- сложность в безопасной реализации — это означает, что безопасная реализация алгоритма работает слишком медленно, и все будут использовать небезопасный вариант, что и выгодно злоумышленнику.
Гипотетические примеры бэкдоров в современных алгоритмах
Уязвимость генератора псевдослучайной последовательности DUAL_EC_DRBG
Данный генератор был разработан в АНБ и стандартизован в качестве криптографически стойкого генератора псевдослучайных чисел национальным институтом стандартов и технологий США NIST в 2006 году. Однако уже в 2007 году независимыми исследователями было высказано предположение, что в этот алгоритм мог быть встроен бэкдор.[3][4][5]
- Иллюстрация работы алгоритма согласно спецификации АНБ[6]:
Данный алгоритм использует эллиптические кривые. [math]\displaystyle{ P }[/math] — генератор группы точек на эллиптической кривой, [math]\displaystyle{ Q }[/math] — точка на эллиптической кривой — константа, определённая стандартом, как она была выбрана неизвестно. Параметры самой кривой также заданы стандартом.
- Принцип работы:
Уравнение кривой
- [math]\displaystyle{ y^2 = (x^3+ax+b) \bmod p }[/math]
можно переписать в виде [math]\displaystyle{ x = \varphi(x, y) \bmod p }[/math] и записать следующие выражения для работы алгоритма:
- [math]\displaystyle{ r_i = \varphi(s_i*P) }[/math] , [math]\displaystyle{ t_i = \varphi(r_i*Q) }[/math] , [math]\displaystyle{ s_{i+1} = \varphi(r_i*P) }[/math]
- [math]\displaystyle{ s_i }[/math] — внутреннее состояние генератора на текущем шаге
- [math]\displaystyle{ s_{i+1} }[/math] — внутреннее состояние генератора на следующем шаге
- [math]\displaystyle{ t_i }[/math] — выход генератора на текущем шаге
- Предполагаемый бэкдор:
Так как [math]\displaystyle{ p }[/math] — простое число, то существуют такое число [math]\displaystyle{ e }[/math], что [math]\displaystyle{ e*Q=P }[/math]. Нахождение [math]\displaystyle{ e }[/math] — вычислительно сложная задача дискретного логарифмирования на эллиптической кривой, для решения которой на сегодняшний день не существует эффективных алгоритмов. Но если предположить, что злоумышленник знает [math]\displaystyle{ e }[/math] , то получается следующая атака: Если [math]\displaystyle{ x=t_i }[/math] — очередной выход генератора, и если существует такое [math]\displaystyle{ y }[/math], что [math]\displaystyle{ y^2 \equiv (x^3+ax+b) \bmod p }[/math], то точка [math]\displaystyle{ A =(x,y) }[/math], лежит на кривой и для неё выполняется следующее равенство: [math]\displaystyle{ A=r_i*Q }[/math]. Зная число [math]\displaystyle{ e }[/math] можно вычислить: [math]\displaystyle{ s_{i+1}=\varphi(e*A)=\varphi(e*r_i*Q)=\varphi(r_i*P) }[/math]. Таким образом, злоумышленник, знающий число [math]\displaystyle{ e }[/math], может не только вычислить следующий выход генератора, но и быстро перебрать все возможные внутренние состояния генератора и восстановить его начальное внутреннее состояние. Согласно независимым исследованиям[2][7], при знании [math]\displaystyle{ e }[/math] достаточно всего 30 байт выходной последовательности генератора, чтобы простым перебором [math]\displaystyle{ 2^{15} }[/math] значений восстановить его начальное внутреннее состояние. По мнению исследователей, такая уязвимость может быть расценена как бэкдор.
Ошибка в реализации протокола проверки сертификатов TLS от компании Apple
Исследователями компании Яндекс была обнаружена уязвимость в реализации протокола TLS в одном из программных продуктов Apple[2]. По их мнению, данная ошибка вполне может оказаться бэкдором, намеренно встроенным в алгоритм кем-то из разработчиков.
- Участок кода с ошибкой:
static DSStatus SSLVerifySignedServerKeyExchnge(....)
{
DSStatus err;
....
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
if ((SSHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
....
fail:
....
return err;
}
Как можно видеть, после первого оператора if стоят две строчки goto fail, и вторая строчка выполняется всегда, независимо от результата if. Таким образом процедура проверки сертификата проходит не полностью. Злоумышленник, знающий об этой уязвимости, может подделать сертификат и пройти проверку подлинности. Это позволит ему организовать атаку типа «Человек посередине», тем самым вмешаться в защищённое соединение между клиентом и сервером. Исследователи, обнаружившие данную ошибку в реализации, не могут точно сказать, намеренно она была сделана или случайно. Вполне возможно, что это бэкдор, встроенный в алгоритм кем-то из разработчиков.
Примеры методов создания бэкдоров
Специально подобранные константы
Очень многие современные криптографические алгоритмы используют при своей работе определённый набор внутренних констант. Как правило, эти константы задаются стандартом и выбираются из соображений криптографической стойкости к известным на данный момент видам криптоанализа. Но выбор констант при стандартизации алгоритма теоретически может быть использован разработчиками и со злым умыслом: например, для создания определённых уязвимостей и бэкдоров в алгоритме.
В качестве такого примера использования констант можно привести недавние исследовательские работы на тему так называемого «вредоносного хеширования»[8][9], где авторам удалось построить коллизии для криптографической хеш-функции SHA1 путём модификации её раундовых констант. Отметим, что предложенная авторами исследования атака не является атакой на саму хеш-функцию SHA1, она позволяет лишь находить коллизии при условии возможности изменения раундовых констант и только для определённых типов файлов.
- Краткое описание SHA1:
SHA1 — современная раундовая хеш-функция. Алгоритм хеширования следующий:
- Инициализируются 32-битные значения [math]\displaystyle{ a = h_0 , b = h_1 , c = h_2 , d = h_3 , e = h_4 }[/math]
- Входное сообщение разбивается на блоки длиной 512 бит
- Каждый блок сообщения обрабатывается и дополняется специальным образом, по алгоритму, определённому в стандарте
- Полученный блок сообщения хэшируется в 4 этапа по 20 раундов в каждом, причём для каждого этапа используется своя константа [math]\displaystyle{ K_1, K_2, K_3 }[/math] или [math]\displaystyle{ K_4 }[/math]
- Выходом функции для каждого блока будут новые значения [math]\displaystyle{ a, b, c, d, e }[/math], которые добавляются к результату: [math]\displaystyle{ h_0 = h_0 + a, h_1 = h_1 + b, h_2 = h_2 + c, h_3 = h_3 + d, h_4 = h_4 + e }[/math]
- Итоговым результатом хеширования будет 160-битное значение полученное конкатенацией пяти 32-битных значений [math]\displaystyle{ h_0, h_1, h_2, h_3, h_4 }[/math] после обработки последнего блока сообщения.
- Построение коллизий:
Целью рассматриваемой атаки является нахождение таких констант [math]\displaystyle{ K_1, K_2, K_3, K_4 }[/math] и таких сообщений [math]\displaystyle{ M_1 }[/math] и [math]\displaystyle{ M_2 }[/math] , что [math]\displaystyle{ Hash(M_1) = Hash(M_2) }[/math]. Данная атака модифицирует только первые 512 бит (1-й блок) сообщений, для которых требуется построить коллизию. Алгоритм базируется на уже известной разностной атаке на SHA1, предложенной в 2005 году[10][11] и имеющей сложность порядка [math]\displaystyle{ 2^{69} }[/math] операций, что делает её трудноосуществимой на практике. Поэтому до настоящего времени ни одной реальной коллизии для SHA1 найдено не было.
Но в случае создания вредоносного варианта SHA1 злоумышленник может варьировать не только блоки сообщений [math]\displaystyle{ M_1 }[/math] и [math]\displaystyle{ M_2 }[/math], но и раундовые константы [math]\displaystyle{ K_1, K_2, K_3, K_4 }[/math]. Согласно исследованиям[9], это сильно снижает сложность атаки до порядка [math]\displaystyle{ 2^{48} }[/math] операций и делает построение таких коллизий реальной задачей которую можно выполнить на нескольких компьютерах. Таким образом, авторам исследования удалось построить одноблоковые коллизии для многих известных типов файлов.
- Одноблоковая коллизия:
- [math]\displaystyle{ M_1 }[/math] и [math]\displaystyle{ M_2 }[/math] — первые блоки сообщений (512 бит), которые отличаются между собой, но дают одинаковую хеш-сумму
- [math]\displaystyle{ Content }[/math] — остальное содержимое, которое одинаково для обоих файлов
Пример использования вредоносного хеширования для создания бэкдоров
С помощью описанной атаки были созданы два sh-скрипта, которые при выборе [math]\displaystyle{ K_1=5a827999~,~K_2=88e8ea68~,~K_3=578059de~,~K_4=54324a39 }[/math] дают одинаковую хеш-сумму SHA1, но работают по-разному.
Как можно видеть, различие между этими двумя скриптами заключается только в первых блоках по 512 бит, которые представляют собой закоментированный мусор. Но содержимое этих блоков затем используется в условии if , следовательно скрипты при запуске работают по-разному. Подобные файлы могут быть использованы создателем со злым умыслом.
Аппаратные бэкдоры
Бэкдоры могут встраиваться не только в программное обеспечение, но и в аппаратуру. Подобные бэкдоры могут использоваться производителями аппаратной начинки для встраивания в неё вредоносных функций на этапе производства.
Аппаратные бэкдоры имеют ряд преимуществ над программными:
- Не могут быть обнаружены антивирусами, сканерами кода и другим защитным ПО.
- Не могут быть устранены обновлением или заменой программного обеспечения.
Примером аппаратного бэкдора может быть вредоносная прошивка BIOS. Согласно исследованиям[12], такая прошивка может быть построена на основе свободных прошивок Coreboot[13] и SeaBIOS. Coreboot не является полноценным BIOS: он отвечает только за обнаружение имеющегося на машине оборудования и передачу управления самой «начинке BIOS», в качестве которой может быть использован модифицированный злоумышленником под свои нужды SeaBIOS.
Принцип действия вредоносной прошивки кратко можно описать так: сразу после включения заражённого компьютера, ещё до загрузки операционной системы, она производит попытку установить соединение с сервером злоумышленника через интернет. Если такая попытка удалась, то производится удалённая загрузка какого-нибудь буткита, который уже в свою очередь предоставляет злоумышленнику возможность производить с заражённым компьютером вредоносные действия: кражу данных или удалённое управление. Если же попытка соединения с интернетом не удалась, то происходит нормальная загрузка операционной системы. Несомненным плюсом для злоумышленника является то, что сама по себе модифицированная прошивка не содержит в себе никакого вредоносного кода, а буткиты трудно обнаруживаются.
См. также
- Эксплойт
- Атака «Человек-по-середине»
- DoublePulsar
- EternalBlue
- WannaCry
- Petya (червь-вымогатель)
- EternalRocks
- Агентство Национальной Безопасности США
Примечания
- ↑ 1,0 1,1 J.P. Aumasson Cryptographic bacdooring Архивная копия от 21 декабря 2019 на Wayback Machine
- ↑ 2,0 2,1 2,2 Евгений Сидоров, Криптографические баги и бэкдоры Архивная копия от 8 декабря 2015 на Wayback Machine, Yandex security meet up, 24.07.2015
- ↑ Dan Shumow, Niels Ferguson, On the Possibility of a Back Door in the NIST SP800-90 Dual Ec Prng Архивная копия от 15 июня 2022 на Wayback Machine, CRYPTO 2007, august 2007
- ↑ Брюс Шнайер. Did NSA Put a Secret Backdoor in New Encryption Standard?, Wired News (15 ноября 2007). Архивировано 19 сентября 2012 года.
- ↑ Киви Берд, Неслучайные случайности Архивная копия от 13 марта 2016 на Wayback Machine // Компьютерра, 07 декабря 2007
- ↑ John Bryson, Patrick Gallagher, Recommendation for Random Number Generation Using Deterministic Random Bit Generators Архивная копия от 20 февраля 2016 на Wayback Machine, p. 60, 2012
- ↑ Dan Shumow, Niels Ferguson, On the Possibility of a Back Door in the NIST SP800-90 Dual Ec Prng Архивная копия от 15 июня 2022 на Wayback Machine, pages 6-7, CRYPTO 2007, august 2007
- ↑ Ange Albertini, Jean-Philippe Aumasson, Maria Eichlseder, Florian Mendel, Martin Schlaeffer, Malicious SHA-1 Архивная копия от 10 января 2016 на Wayback Machine, 14.08.2014
- ↑ 9,0 9,1 Ange Albertini, Jean-Philippe Aumasson, Maria Eichlseder, Florian Mendel, Martin Schlaffer, Malicious Hashing: Eve’s Variant of SHA-1 Архивная копия от 22 октября 2015 на Wayback Machine, 2014 year
- ↑ Wang, X., Yao, A.C., Yao, Cryptanalysis on SHA-1. NIST — First Cryptographic Hash Work-shop Архивная копия от 7 ноября 2016 на Wayback Machine, 31 October 2005
- ↑ Wang, X., Yin, Y.L., Yu, H. , Finding collisions in the full SHA1 Архивная копия от 30 апреля 2015 на Wayback Machine, CRYPTO 2005
- ↑ Jonathan Brossard, Аппаратные бэкдоры — это практично Архивная копия от 8 декабря 2015 на Wayback Machine, 12 марта 2012
- ↑ Обзор проекта свободного BIOS — Coreboot Архивная копия от 8 декабря 2015 на Wayback Machine, 9 октября 2014
Ссылки
- Dan Shumow, Niels Ferguson. On the Possibility of a Back Door in the NIST SP800-90 Dual Ec Prng. — 2007.
- Евгений Сидоров. Криптографические баги и бэкдоры. — 2015.
- John Bryson, Patrick Gallagher. Recommendation for Random Number Generation Using Deterministic Random Bit Generators. — U.S. Department of Commerce, 2012.