Хакеры использовали особенность протокола OpenPGP, о которой известно более десяти лет.
Рассказываем, в чем суть и почему её не могут закрыть.
/ Unsplash / Chunlea Ju
Проблемы в сети
В середине июня неизвестные провели атаку на сеть серверов криптографических ключей SKS Keyserver, построенную на базе протокола OpenPGP. Это — стандарт IETF (RFC 4880), который используется для шифрования электронной почты и других сообщений. Сеть SKS создали тридцать лет назад для распространения публичных сертификатов. К ней подключаются такие инструменты, как GnuPG для шифрования данных и создания электронных цифровых подписей.
Хакеры скомпрометировали сертификаты двух мейнтейнеров проекта GnuPG — Роберта Хансена (Robert Hansen) и Дэниела Гиллмора (Daniel Gillmor). Загрузка испорченного сертификата с сервера приводит к сбою в работе GnuPG — система просто зависает. Есть основания полагать, что на этом злоумышленники не остановятся, и число скомпрометированных сертификатов будет лишь увеличиваться. На текущий момент масштабы проблемы остаются неизвестными.
Суть атаки
Хакеры воспользовались уязвимостью в протоколе OpenPGP. Она известна сообществу уже не один десяток лет. Даже на GitHub можно найти соответствующие эксплойты. Но пока никто не взял на себя ответственность по закрытию «дырки» (далее поговорим о причинах подробнее).
Пара подборок из нашего блога на Хабре:
Согласно спецификации OpenPGP кто угодно может добавлять цифровые подписи к сертификатам для подтверждения их владельца. Причем максимальное число подписей никак не регламентировано. И здесь возникает проблема — сеть SKS позволяет разместить до 150 тыс. подписей на один сертификат, но GnuPG такое их количество не поддерживает. Таким образом, при загрузке сертификата GnuPG (как, впрочем, и другие реализации OpenPGP) зависает.
Один из пользователей провел эксперимент — импорт сертификата занял у него примерно 10 минут. Сертификат имел более 54 тыс. подписей, а его вес составил 17 Мбайт:
$ gpg --homedir=$PWD --recv C4BC2DDB38CCE96485EBE9C2F20691179038E5C6
gpg: key F20691179038E5C6: 4 duplicate signatures removed
gpg: key F20691179038E5C6: 54614 signatures not checked due to missing keys
gpg: key F20691179038E5C6: 4 signatures reordered
gpg: key F20691179038E5C6: public key "Daniel Kahn Gillmor <dkg@fifthhorseman.net>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1
$ ls -lh pubring.gpg
-rw-r--r-- 1 filippo staff 17M 2 Jul 16:30 pubring.gpg
Ситуацию усугубляет тот факт, что серверы ключей с OpenPGP не удаляют информацию о сертификатах. Так сделано, чтобы можно было проследить цепочку всех действий с сертификатами и исключить их подмену. Поэтому ликвидировать скомпрометированные элементы нельзя.
По сути, сеть SKS представляет собой большой «файловый сервер», на который любой желающий может записать данные. Чтобы проиллюстрировать проблему, в прошлом году резидент GitHub создал файловую систему, которая хранит документы в сети серверов криптографических ключей.
Почему уязвимость не закрыли
Для закрытия уязвимости не было повода. Ранее её не использовали для проведения хакерских атак. Хотя ИТ-сообщество давно просило разработчиков SKS и OpenPGP обратить внимание на проблему.
Справедливости ради стоит отметить, что в июне они все же запустили экспериментальный сервер ключей keys.openpgp.org. В нем реализована защита от подобных типов атак. Однако его база данных заполняется с нуля, а сам сервер не является частью SKS. Поэтому пройдет время, прежде чем им можно будет пользоваться.
/ Unsplash / Rubén Bagüés
Что касается бага в оригинальной системе, то исправить его мешает сложный механизм синхронизации. Сеть серверов ключей изначально писалась как proof of concept для защиты докторской диссертации Яроном Мински (Yaron Minsky). Причем для работы был выбран довольно специфический язык OCaml. По словам мейнтейнера Роберта Хансена, разобраться в коде сложно, поэтому в него вносятся лишь небольшие исправления. Чтобы модифицировать архитектуру SKS, её придется переписать с нуля.
В любом случае в GnuPG не верят, что сеть когда-нибудь удастся исправить. В посте на GitHub разработчики даже написали, что не рекомендуют работать с SKS Keyserver. Собственно, это одна из главных причин, почему они инициировали переход на новый сервис keys.openpgp.org. Нам остается лишь наблюдать за дальнейшим развитием событий.
Пара материалов из нашего корпоративного блога:
Автор: VAS Experts