Подробности атаки на шифрование PGP и S/MIME в почтовых клиентах
Как сообщает opennet.ru исследователи раскрыли (PDF) детали уязвимости в системах шифрования электронной почты, не дожидаясь намеченного времени публикации. В целом, предположения разработчиков GnuPG оказались верными, а предупреждение о критичности слишком преувеличенными. Предложено два варианта MITM-атаки на почтовые клиенты с поддержкой HTML, которые автоматически загружают данные из внешних ресурсов (например, картинки и CSS).
Первый вариант атаки производится через модификацию транзитного сообщения, в которое подставляется обращение к внешниму ресурсу при помощи тегов "img" или "style", подставляемых в незашифрованные части HTML-писем (MIME-заголовки). Обращающийся к внешнему хосту атакующего тег открывается до начала шифрованного MIME-блока, а закрывается после него (см. пример ниже).
Почтовый клиент с проблемным MIME-парсером при открытии письма дешифрует шифротекст, а затем разбирая HTML отправляет уже расшифрованный текст в составе подставленного атакующими тега. Проблема проявляется только в почтовых клиентах, которые объединяют содержимое всех MIME-частей multipart-сообщения, смешивая шифрованные и незашифрованные части. Например, такое поведение свойственно Apple Mail, iOS Mail и Thunderbird.
Второй вариант атаки отталкивается от уязвимостей в спецификациях S/MIME (CVE-2017-17689) и OpenPGP (CVE-2017-17688). В случае S/MIME атакующий может организовать дешифровку нескольких email, отправив специально измененное email-сообщение жертве. Для PGP без поддержки MDC атаку совершить сложнее и успешной оказываются только треть попыток, так как перед шифрованием в PGP открытый текст сжимается. Как и в первом варианте в сообщение вставляется HTML-тег, обращающийся к подконтрольному атакующему хосту.
Атака базируется на подмене блоков шифротекста, манипулируя изначально известными блоками данных при использовании режимов CBC и CFB. Зная открытый текст, в режиме CBC атакующий может выборочно изменить блоки. В большинстве случаев при использовании S/MIME в составе исходного текста присутствует строка "Content-type: multipart/signed", т. е. атакующий уже знает содержимое как минимум одного полного блока. Следом атакующий может сформировать блок, содержащий только нули. Пара из изначально известного блока и нулевого блока обозначается как CBC-гаджет.
В ходе атаки CBC-гаджет используется для включения в состав зашифрованного текста данных атакующего. В отличие от первого варианта таки, CBC-гаджет позволяет встроить img-тег атакующего непосредственно в состав зашифрованного текста и создать единую зашифрованную MIME-часть, содержимое которой отправляется на внешний хост при разборе HTML после открытия письма пользователем. Для режима CFB, который применяется в OpenPGP, метод атаки аналогичен режиму CBC.
Некоторые факты:
- Уязвимость связана с типовыми недоработками в отдельных почтовых клиентах. Проведение первого варианта атаки без участия пользователя возможно только в Apple Mail и iOS Mail, уязвимости подвержены также PostBox, MailMate и Thunderbird, но в них для атаки требуется совершение пользователем определенных действий. Второй вариант атаки с PGP эффективен в Outlook 2007 с GPG4Win, Thunderbird с Enigmail, Apple Mail c GPGTools, Roundcube и еще в 6 менее известных клиентах. Второй вариант атаки с S/MIME охватывает почти все протестированные клиенты, за исключением Mutt и Claws Mail;
- Для успешной атаки требуется контроль за трафиком или архивом сообщений жертвы (MITM, взлом почтового сервера или захват учетной записи). При наличии доступа к учетной записи, атакующий может расшифровать ранее полученные пользователем зашифрованные сообщения, путем их модификации и повторной отправки пользователю с применением одной из вышеизложенных атак.
- Реализации OpenPGP с MDC (GnuPG) проблеме не подвержены, если почтовый клиент учитывает код проверки MDC. В S/MIME (RFC 5751) поддержка аутентифицированного шифрования не предоставляется, что требует внесения изменений в спецификацию S/MIME для устранения уязвимости. В OpenPGP (RFC 4880) спецификация предоставляет возможность аутентифицированного шифрования (MDC), которое позволяет выявить подмену CFB-блоков (поддержка MDC реализована в GnuPG в 2001 году, но при выводе через pipe для определения подмены требуется анализ кода возврата, что многие почтовые клиенты не делают).
- Наиболее эффективными методами защиты являются отключение поддержки HTML в почтовом клиенте и организация расшифровки не силами почтового клиента, а путем ручного копирования шифротекста в отдельное приложение.