Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
не используйте CBC без реальной необходимости, он подвержен oracle padding attack при неправильной реализации.
Не всё понял из текста… Ну во-первых, непонятно, почему исторически допускалась ситуация, когда сообщение + MAC точно укладываются в целое число блоков, но набивка всё равно зачем-то требовалась. В чём смысл, этого действия, чтобы точно знать, что это конец MAC, а не покорёженная набивка в результате искажения данных при передаче?
И по последней атаке тоже объяснено как-то криво. Во-первых, каким образом в принципе злоумышленник встанет посередине, если браузер проверяет сертификат сервера? Он будет просто транслировать всю передачу данных без изменений в обе стороны, а свои запросы просто отправлять на реальный сервер параллельно с этим?
Окей, но в чём суть «угадывания байтов в POST запросе», ведь злоумышленник сам целиком формирует этот запрос?
Чтобы точно знать, сколько байтов нужно отрезать с конца после расшифровки и перед проверкой MAC.Зачем? Набивка ведь и так имеет совершенно особый формат. Неужели не очевидна ситуация, когда у неё нулевая длина? Хотя бы исходя из общей длины данных об этом можно «догадаться».
MitM подменяет только пакеты от клиента к серверу, от сервера к клиенту — оставляет без изменения.Тогда логически ответы сервера не сойдутся с ожидаемыми ответами уже на уровне приложения, и обязательно возникнет какой-нибудь сбой, что нарушит сессию в целом и для пользователя сделает очевидным то, что его «прослушивают».
Злоумышленник формирует путь и тело запроса, но куки в запрос вставляет браузер жертвы.Вообще-то, технически, куки может ставить либо браузер напрямую через JS, либо сервер через заголовок Set-Cookie (этот заголовок может подсунуть и злоумышленник). Так кто и на каком этапе ставит куки в данном сценарии? Если я правильно понял, куки ставит сервер в момент успешной авторизации, но потом они отправляются в HTTP заголовке браузером при каждом запросе, и это просто некая постоянная строка, которую мы хотим расшифровать, а изменяя путь, мы просто её «двигаем»?
невозможно N-байтными блоками однозначно представить все строки длиной до N байт включительноВ смысле?
именно сбой HTTPS-сессии и является тем каналом, через который извлекается информация о зашифрованном содержимом запроса.Там будет сбой не HTTPS сессии, а именно логический. Ну вот представьте: клиентский код «думает», что отправил один запрос, а сервер отвечает на другой (после модификации). Где гарантия, что не получится фейл из-за несоответствия реального результата ожидаемому?
1) Для таких случаев обычно вводят поле длины полезной нагрузки, чтобы однозначно понять, где кончаются данные. В целом я понял свою ошибку, положившись на паттерн набивки, мы автоматически запретим заканчивать сообщение таким же паттерном - обычно это никому не нужно, но так делать не есть хорошо.
2) Будет сбой авторизации, только не на уровне SSL, а на уровне протокола приложения - сервер вернёт ошибку 403 при получении неверного токена из клиентской куки.
Padding Oracle Attack: криптография по-прежнему пугает