Кратко
- Некоторые клиенты после неудачного рукопожатия TLS повторяли его со всё более старыми версиями. Атакующий на пути мог создавать сбои, поэтому политика повторов давала сети влияние на выбор версии за пределами аутентифицированных переговоров.
- Затем POODLE использовал правила дополнения CBC в SSL 3.0 при дополнительных условиях: активный посредник, многократные запросы с секретом и изменение записей. Исходная схема ожидала около 256 запросов SSL 3.0 на каждый восстановленный байт.
TLS_FALLBACK_SCSVничего не шифровал и не аутентифицировал. Он помечал ClientHello с пониженной версией как повтор после отката, чтобы сервер с поддержкой более высокой версии мог локально ответитьinappropriate_fallback(86).
В TLS уже были переговоры о версии. Клиент мог предложить TLS 1.2, сервер с поддержкой только TLS 1.0 — выбрать TLS 1.0, после чего результат защищался рукопожатием. Именно так должен был работать протокол.
Рядом возник танец отката. Разработчики браузеров и библиотек сталкивались со старыми серверами и промежуточными устройствами, которые ломались при виде новой версии. Ради бесшовного соединения некоторые клиенты после сбоя подключались снова с более низким максимумом и могли спускаться до SSL 3.0.
За удобством скрывалась передача полномочия. Сбой перестал быть отрицательным наблюдением об одной попытке и начал считаться свидетельством возможностей сервера, хотя аутентифицированного заявления от сервера не было. Любой, кто мог прервать попытки с новой версией, создавал такое же свидетельство. Взламывать TLS 1.2 не требовалось: клиент сам прекращал его предлагать.
Это лишь открывало дверь. Для восстановления открытого текста POODLE требовалась и обстановка за ней.
SSL 3.0 допускал произвольные байты дополнения CBC, не полностью защищённые кодом аутентификации сообщения. Исходная работа Google описывала активного посредника, который заставлял браузер повторять HTTPS-запросы с cookie, размещал целевой байт на границе блока, подменял последний блок шифротекста и узнавал результат по тому, принял ли сервер изменённую запись. Для проверяемого условия средняя вероятность принятия составляла один к 256, откуда следовали ожидаемые 256 запросов SSL 3.0 на байт.
Число часто помнят без условий. Это не была универсальная скорость дешифрования. Веб-сценарию требовались атакующий на пути, управляемые им запросы, сеанс SSL 3.0 с CBC и многократные пробы. Одна лишь поддержка SSL 3.0 сервером cookie не раскрывала. Не каждый клиент и откатывался до этой версии.
Поэтому ответ решал две разные задачи. Первая — прекратить использование SSL 3.0. Вторая — пока немедленное отключение мешало старой совместимости, не позволить атакующему выдать себя за причину её необходимости.
TLS_FALLBACK_SCSV решал вторую задачу намеренно малым сигналом. Значение {0x56,0x00} помещалось в список наборов шифров, но само набором не было и выбираться не могло. Оно говорило: этот ClientHello — повтор с откатом. Поддерживающий сервер сравнивал предложенную версию со своей наивысшей включённой версией. Если сервер мог лучше, он завершал соединение фатальным предупреждением 86, inappropriate_fallback.
Серверу не требовались центральный список репутации или вывод о факте атаки. Достаточно было собственного состояния версий и общего последствия: отказаться от неоправданно низкого повтора. Минимальное общее правило сочеталось с локальным отказом.
Правило сознательно имело узкие пределы. RFC 7507 предупреждает, что откат может вызвать обычный сетевой сбой, поэтому предупреждение не доказывает вмешательство. SCSV не заменяет нормальные переговоры о версии. Без поддержки на одной из сторон старый путь сохранялся. Если конечная точка действительно умела только SSL 3.0, сигнал не делал этот протокол безопасным.
Окончательное решение складывалось поэтапно. OpenSSL добавил SCSV в выпуски 1.0.1j, 1.0.0o и 0.9.8zc. RFC 7507 стандартизировал сигнал в апреле 2015 года, а RFC 7568 запретил SSL 3.0. В 2021 году RFC 8996 объявил устаревшими TLS 1.0 и 1.1 и заменил RFC 7507, поскольку TLS 1.3 применяет иной маркер понижения в ServerHello.Random.
Урок не в том, чтобы сохранять любой переходный контроль навсегда. Совместимость не должна превращать неоднозначный сбой в молчаливое разрешение ослабить защиту. Узкий сигнал может служить мостом, пока независимые системы переходят в безопасное состояние. Когда устаревший контур совместимости можно удалить, вместе с ним должен исчезнуть и мост.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
