id: Гость   вход   регистрация
текущее время 20:54 28/03/2024
создать
просмотр
редакции
ссылки

Баг в ADK


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


Он обнаружил, что PGP не возражает на появление ADK в этом блоке, хотя сама программа, в соответствии с OpenPGP, никогда их туда не помещает. Таким образом, это ошибка в конкретной реализации, но не в стандарте OpenPGP. Злоумышленнику достаточно раздобыть открытый ключ жертвы, прикрепить собственный ключ в качестве ADK, а затем распространить его так широко, насколько возможно. Люди, пользующиеся этим ключом, будут, как правило (что считается этичным, поскольку, с их точки зрения, жертва сама об этом просила), шифровать свои сообщения одновременно и для получателя, и для ADK, так что владелец последнего тоже сможет их прочитать. Уязвимость присутствует в версиях с 5.5.x по 6.5.3. Она была устранена в PGP 6.5.8.


Описать эту ошибку можно двояко: как ошибку проектирования, поскольку, по-видимому, разработчики PGP недосмотрели такую необычную атаку, или как опечатку, поскольку единственное, что нужно для исправления, — это добавить одно условие if. Соответствующий участок кода можно найти в функции ringKeyAdditionalRecipientRequestKey в файле pgpsrc\libs\pgpcdk\priv\keys\keys\pgpRngPub.c. В этом файле можно обнаружить следующую конструкцию:



Существенная переменная здесь — это hashed. Функция ringKeyFindSubpacket присвоит ей значение true, если обнаружит ADK в той части ключа, которая покрыта цифровой подписью. В версии 6.5.1 переменная игнорировалась:



Кроме приведённого исправления всё ПО PGP, включая программу сервера ключей, было изменено, чтобы автоматически удалять любые злонамеренные пакеты ADK. Это крайне затрудняет проведение ADK-атаки, поскольку добавленный пакет ADK не будет распространяться сервером ключей 1 или пользователями с новыми версиями PGP.


Ральф Сендерек разместил своё уведомление [19] вместе с ответом Циммермана на собственном веб-сайте. Оба сообщения заслуживают внимания. Сендерек имеет ряд довольно радикальных идей относительно PGP: по его мнению, версии 2.6.x были лучшими версиями PGP, а новые версии слишком сложны, чтобы быть безопасными. Также он утверждает, что невозможно выполнить анализ исходного кода программы такого объёма, и что ADK — плохая идея. Вместо аудита исходного кода он предлагает экспериментальный подход, подобный тому, что применяется в физике.


Никто не смог обнаружить в свободном распространении ни одного злонамеренного пакета ADK. Можно было бы организовать похожую атаку, но с меньшим ущербом, добавив в нехэшируемый блок сертификат аннулирования. Это бы привело к атаке на отказ в обслуживании (DoS). Проводя такую атаку противник ничего не приобретает, зато пользователь теряет очень много. Если б не выявление бага в ADK, кто-нибудь мог бы начать аннулировать ключи, что привело бы к серьёзному замешательству. Эксперименты, поставленные Мартийном Стамом, свидетельствуют, что такое более невозможно. 2


Назад | Дальше



1 Имея в виду только фирменный сервер PGP Keyserver, — прим. пер.


2 По данным частной переписки. Результаты не были опубликованы.


 
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3