Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
Атака Opossum – атака не на TLS
Почему-то очередную “кросс-протокольную” атаку под названием Opossum стали в новостных сообщениях называть “атакой на TLS”. Но к TLS эта атака имеет примерно такое же отношение, как автомобиль – к дороге. Причём, сами авторы не утверждают, что это атака на TLS – на сайте она классифицирована как “кросс-протокольная атака десинхронизации на прикладном уровне”, а применима к прикладным протоколам, использующим TLS и напрямую, и “приспособительно” (opportunistic) на одном и том же логическом узле.
О чём тут идёт речь? Существуют протоколы обмена командами и данным, в которых использование TLS встроено в схему протокола. То есть, на верхнем логическом уровне, не сам обмен протокола полностью и прозрачно завернут в TLS (как HTTP в HTTPS, скажем), а TLS можно включить, при наличии возможности, уже в контексте самого протокола – пример: SMTP + STARTTLS. То есть, сеанс в рамках атакуемого протокола обязательно начинается в открытом и незащищённом варианте. Это позволяет атакующему подменить начальные сообщения той или иной стороны, а потом переключить трафик на использование TLS: либо штатными средствами протокола, либо – перенаправив трафик на другой номер порта. Атакующий при этом должен активно перехватывать сетевое соединение, подменять пакеты и прозрачно перенаправлять трафик на разные номера портов. (В исходной публикации, для одного из сценариев, ещё и требуют выполнения атакующей стороной произвольного кода в контексте веб-страницы внутри браузера.)
Так, механизм STARTTLS для SMTP – тут сервер может предложить поддержку TLS в самом начале SMTP-сессии, а клиент, если он поддерживает TLS, может тут же начать переход на защищённое соединение, просигнализировав об этом серверу. Если переход на TLS произошёл, то SMTP-сессия начинается, фактически, заново – пусть и в том же сокете, но уже внутри TLS. Но для SMTP есть и вариант с прямым TLS-подключением, то есть, сразу по TLS на другом выделенном номере порта (например, 587, а не 25). Для осуществления атаки требуется, чтобы на сервере были доступны оба способа подключения – смысл и состоит в “перекидывании” сессии между открытым соединением и подставным TLS-соединением.
Атака Opossum для SMTP предлагает атакующему возможность обмануть клиентскую программу, которая пытается подключиться с использованием STARTTLS: атакующий перехватывает соединение этой программы и отвечает вместо сервера, отправляя собственное серверное SMTP-приветствие и опцию, указывающую на STARTTLS; далее, как только клиентская программа начнёт инициировать TLS-соединение, атакующий перенаправляет начальное TLS-сообщение клиента на выделенный для TLS номер порта легитимного сервера; сервер считает, что это просто прямое подключение TLS и обрабатывает его обычным образом. Получается, что клиент прочитал подставное SMTP-приветствие и подставной список SMTP-опций, а потом начал SMTP-сессию через TLS, что для сервера выглядит обычной новой сессией. Таким образом, контекст на сервере как бы отличается от контекста на клиенте. Насколько это критично с практической точки зрения, особенно, на фоне того, что атакующий мог вообще скрыть поддержку TLS сервером, – отдельный вопрос. Но никакой атаки на TLS тут нет, TLS сработал так, как и планировалось, однако шаги штатного протокола на стороне клиента и на стороне сервера теперь не синхронизированы, из-за вмешательства атакующего – запросы и ответы переставлены на полуход. В публикации Opossum это, что логично, так и называется: “десинхронизация прикладного уровня”.

(Иллюстрация из исходной работы.)
Как ни странно, но TLS в “приспособительном” режиме возможен, – в теории, – и для HTTP. Этот вариант, впрочем, практически не встречается на веб-серверах: смысл для HTTP – тёмен, а настраивать нужно отдельно. Для случая HTTP последовательность данной атаки другая: атакующий модифицирует запросы, ответы и задерживает TLS-трафик так, что внутри TLS-сеанса оказывается ответ сервера не на легитимный запрос клиента, а на предыдущий запрос, поступивший к серверу от атакующего в открытом виде. TLS-опять же, атака не касается. Но, как и отмечено в исходной работе, все перечисленные атаки возможны потому, что TLS не предоставляет способа аутентифицировать состояние внешнего протокола на стороне сервера и клиента, а аутентифицирует только имена и адреса. Это так. Однако подобная расширенная аутентификация и не входит в модель TLS: несмотря на наличие расширений типа ALPN, TLS работает только на своём уровне. (Кстати, на ALPN описание атаки Opossum как раз ссылается: с ALPN связана вспомогательная часть и предыдущая атака по теме.)
Адрес записки: https://dxdt.ru/2025/07/12/15887/
Похожие записки:
- Математика бэкдора в Dual EC DRBG
- Техническое: занимательный пример из практики DNS в Интернете
- Кубиты от IBM
- Реплика: интерпретация результатов интернет-измерений
- Цифровые рации и утечки ключей по побочным каналам
- Боты и dxdt.ru
- ИИ и математические задачи, "автоматизированные" дважды
- Описание TLS в поисковых машинах
- X25519Kyber768 в браузере Chrome 124
- Another World на FPGA
- Техническое: poison-расширение и SCT-метки в Certificate Transparency
Кратко этот сайт характеризуется так: здесь можно узнать про технологический прогресс, Интернет, математику, криптографию, авиацию, компьютеры, авиационные компьютеры, вооружения, роботов, вооружение роботов, армии мира, астрономию, космические исследования. И иногда о чём-то ещё (
Комментарии читателей блога: 2
1 <t> // 13th July 2025, 09:15 // Читатель void написал:
В HTTP “приспособительный” режим штатно используется при соединении через прокси: клиент шлет открытым текстом запрос CONNECT, затем начинает TLS-сессию. Забавно, что в этом сценарии прокси обязан выступать в роли опоссума.
2 <t> // 13th July 2025, 10:31 // Александр Венедюхин:
HTTP CONNECT – несколько другая история: там два разных сервера, один – проксирующий, второй – оконечный; соответственно, у них будут заведомо разные контексты соединения. А для Opossum-атаки требуется, чтобы контекст соединения на атакуемом уровне был один, и чтобы внутри этого контекста происходило переключение на TLS.
Например, для HTTP там используется возможный “апгрейд” до уровня TLS после получения HTTP-запроса сервером, но внутри того же HTTP-контекста, как он виден на сервере. То есть, сервер предлагает “апгрейд”, чтобы ответ на предыдущий запрос доставить уже внутри TLS. Если такая конфигурация возможна, и есть поддержка прямого TLS сервером, то тогда перехватывающий узел сначала сам генерирует открытый запрос, приводящий к “апгрейду”, а потом подставляет начало настоящего прямого TLS-сеанса клиента на стороне сервера так, как если бы это и был “апгрейд” контекста клиентом, а дальше – задерживает клиентский первый запрос уже в TLS, подставляя ответ сервера на предыдущий запрос атакующего вместо ответа на реальный первый запрос клиента. Так как в TLS два отдельных потока, со своими наборами сеансовых ключей, – от клиента к серверу и обратно, – то это можно проделать.
Написать комментарий