Создан эксплойт, позволяющий подделать сертификат и захватить легитимный сайт
Создан эксплойт, позволяющий подделать сертификат и захватить легитимный сайт
Alexander Antipov
Akamai PoC PoC-код PoC-эксплоит MITM MD5 сертификат Windows CryptoAPI
Жертва не заметит подмены, а злоумышленник соберёт все конфиденциальные данные.
Исследователи Akamai разработали экспериментальный эксплойт (PoC) для общедоступной уязвимости подделки сертификата x.509 в Windows CryptoAPI, которая была раскрыта в прошлом году.
Microsoft незаметно исправила ошибку CVE-2022-34689 в августе 2022 года, но публично раскрыла ее только в октябре. Исследователи из Akamai на этой неделе опубликовали PoC-эксплойт , который позволяет злоумышленнику подделать целевой сертификат и замаскироваться под любой сайт.
CryptoAPI — это интерфейс программирования приложений Windows, который разработчики используют для обеспечения криптографии в своих приложениях. Одна из ролей CryptoAPI — проверка подлинности цифровых сертификатов. И именно в этой функции существует уязвимость, как сказали исследователи.
Чтобы проверить подлинность сертификата, CryptoAPI сначала проверяет, существует ли он уже в кэше сертификатов принимающего приложения. Если это так, CryptoAPI рассматривает полученный сертификат как проверенный. До исправления уязвимости CryptoAPI проверял наличие сертификата в кэше, просто сравнивая отпечатки хэшей MD5. Если отпечаток MD5 полученного сертификата совпадал с отпечатком MD5 сертификата в кэше, CryptoAPI считал полученный сертификат проверенным, даже если фактическое содержимое двух сертификатов точно не совпадало.
Это открывает двери для кибератак, чтобы ввести сертификат злоумышленника.Эксперты Akamai сначала создали 2 сертификата — один с легитимной подписью, а другой вредоносный — и подстроили их так, чтобы они оба имели одинаковые отпечатки MD5. Затем они подложили настоящий сертификат CryptoAPI (в данном случае это старая версия Chrome — v48). После того как приложение проверило сертификат и сохранило его в кэше конечного сертификата, Akamai показала, как киберпреступник может использовать MiTM-атаку, чтобы передать второй вредоносный сертификат тому же приложению и проверить его подлинность.
По словам специалистов, как только отпечаток MD5 будет рассчитан, атака может быть легко проведена. То, как злоумышленник выполняет следующие две фазы атаки (обслуживание двух сертификатов), зависит от типа целевого приложения – в браузерах простой сброс соединения после первой фазы завершается, браузер немедленно пытается переподключиться. В этот момент атака переходит на вторую фазу.
Мир сходит с ума и грянет киберапокалипсис. Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
Поделиться новостью:
Генерация хэша MD5 в PHP
В этом руководстве мы покажем вам, как можно сгенерировать хэш MD5 строки в PHP.
Прежде чем мы начнем, не используйте MD5 при создании хэшей для чего-либо, связанного с безопасностью, включая пароли. Это связано с тем, что хеши MD5 могут генерироваться невероятно быстро в современных системах и больше не считаются криптографически безопасными.
Хотя MD5 больше не полезен для безопасности, он по-прежнему используется в PHP. Хотя быстрый хэш обычно ужасен по соображениям безопасности, он все же может быть полезен во многих других случаях.
Одним из таких применений является проверка подлинности файла. Например, изменение хэша указывает на то, что содержимое файла не идентично.
Некоторые общедоступные службы даже используют хэш MD5 как способ передачи строки, которая должна быть в некоторой степени приватной, но не обязательно безопасной. Прекрасным примером одного из таких сервисов является популярная глобальная система аватаров Gravatar.
Служба аватаров Gravatar использует MD5 адреса электронной почты пользователя, чтобы предоставить аватар для этого конкретного пользователя. Это обеспечивает определенный уровень запутывания и означает, что адрес электронной почты пользователя не нужно указывать в URL-адресе.
Другой пример, где MD5 по-прежнему используется по умолчанию, — это прокси-кеш NGINX. Он использует MD5 для создания уникального ключа кэша для этого запроса.
В следующем разделе мы покажем вам, как можно сгенерировать хэш MD5 в PHP.
Функция md5() в PHP
Функция md5() в PHP невероятно проста в использовании. У него есть только два параметра, о которых вам нужно беспокоиться, и если вам не нужны двоичные данные, второй совершенно необязателен.
Если вы хотите сгенерировать хэш файла MD5, существует другая функция, которая называется « md5_file()
», о котором мы поговорим позже.
Ниже вы можете увидеть синтаксис функции md5()
в PHP.
В первом параметре ( $string
) вы указываете данные, для которых вы хотите, чтобы PHP генерировал хэш MD5. Эти данные должны быть переданы в виде строки PHP.
Второй параметр ( $binary
) позволяет вам контролировать, будет ли возвращаться хэш в виде 32-символьной шестнадцатеричной строки ( false
) или будет ли возвращаться необработанный 16-битный двоичный файл ( верно
). Этот параметр является необязательным и в большинстве случаев не требуется.
Пример возврата шестнадцатеричной строки MD5 в PHP
В этом примере мы будем использовать PHP для генерации хэша MD5 строки « Hello PiMyLIfeUp Viewer
». Поскольку нам нужен шестнадцатеричный формат, все, что нам нужно сделать, это передать эту строку в первом параметре.
Чтобы показать вам сгенерированный хэш, мы используем встроенную в PHP функцию эха для вывода результата.
Используя этот небольшой фрагмент кода, вы должны получить следующий хеш. Пока вы используете одну и ту же строку, они всегда должны оставаться одинаковыми.
Пример получения двоичного формата MD5
Как и в предыдущем примере, мы снова будем использовать MD5 для генерации хэша.
Мы будем использовать ту же строку « Hello PiMyLifeUpViewer
», но на этот раз мы также включим формат « двоичный », передав « true
» второму параметру.
Если установить для второго параметра значение true, функция PHP md5()
вернет хэш в виде необработанного 16-битного двоичного кода.
После выполнения приведенного выше примера хэш MD5 теперь должен отображаться в двоичном формате. Как показано ниже, это будет выглядеть как странная мешанина символов при отображении непосредственно на экране.
Обычно большинство людей предпочитают использовать шестнадцатеричный формат, а не двоичный.
Генерация MD5-хэша файла в PHP
PHP имеет встроенную функцию, позволяющую легко генерировать MD5-хэш файла. Эта функция называется « md5_file
».
Использование этой функции относительно похоже на базовую функцию md5()
. Однако первый параметр изменился.
Вместо указания строки, которую вы хотите хешировать, вы укажете путь к файлу, для которого PHP должен сгенерировать хэш MD5.
Определение функции PHP md5_file показано ниже.
В параметре « $filename
» вы должны указать путь к файлу, для которого вы хотите сгенерировать хэш MD5. Помните, что этот путь должен быть либо относительным к текущему расположению файлов PHP, либо быть абсолютным путем.
Параметр $binary
позволяет вам контролировать, возвращает ли PHP хеш в виде 32-символьной шестнадцатеричной строки ( false
) или 16-битного двоичного файла ( true
). По умолчанию установлено значение false
, и оно подходит для большинства случаев использования.
В случае успеха функция md5_file вернет строку, содержащую либо 32-символьную шестнадцатеричную строку, либо 16-битную двоичную. Это зависит от того, что вы установили для параметра « $binary
».
В случае ошибки PHP вернет логическое значение false
. Сбой обычно происходит, когда PHP не может получить доступ к указанному файлу.
Пример создания хэша MD5 файла с использованием шестнадцатеричного формата
В этом примере мы будем использовать PHP для создания хэша MD5 нашего файла « index.html
», который находится рядом с нашим скриптом PHP. Мы сохраним это имя файла в переменной с именем « $file
».
Затем мы используем функцию md5_file, передавая путь к нашему файлу, хранящемуся в « $file
” в первый параметр.
Хэш файла MD5 будет напечатан PHP на выходе благодаря ключевому слову echo.
После запуска этого кода PHP сгенерирует хэш для файла, расположенного в том же каталоге, что и « index. html
».
Будет выведен хэш MD5, сгенерированный PHP. Для нашего примера файла мы получили следующий 32-символьный шестнадцатеричный хеш.
Пример получения хэша MD5 файла с использованием двоичного формата
В этом примере мы сгенерируем хэш MD5 для нашего файла и выведем его в двоичном формате.
Начните этот пример с создания переменной с именем « $file
» и присвоения ей пути к вашему файлу. В нашем случае мы будем использовать « index.html
», который находится рядом с нашим тестовым скриптом PHP.
Наконец, мы вызываем функцию md5_file()
. В первый параметр мы передаем переменную, содержащую путь к нашему файлу.
Второму параметру мы установили значение true
. Установив для второго параметра значение true, мы указываем md5_file() выводить хэш в двоичном формате вместо шестнадцатеричного.
Будет выведен результат этого хеша. Поскольку это двоичный формат, полученный хеш может выглядеть как странная смесь символов при отображении на экране.
Ниже приведен пример двоичного вывода для нашего примера файла. Вы, вероятно, захотите придерживаться шестнадцатеричной строки для большинства случаев использования.
Заключение
В этом руководстве мы показали вам, как сгенерировать хэш MD5 в PHP. Хотя MD5 в основном бесполезен для безопасности, он все же имеет различные варианты использования.
В PHP встроены две функции, которые позволяют быстро генерировать хэш MD5 для строки или файла.
Пожалуйста, прокомментируйте ниже, если у вас возникли проблемы с использованием любой из этих функций.
Обязательно ознакомьтесь со многими другими нашими руководствами по PHP и другими нашими руководствами по программированию.
Производительность PHP MD5 = требуется ли процессор?
спросил
Изменено 6 лет, 7 месяцев назад
Просмотрено 6к раз
md5() обычно используется для паролей, коротких строк
, но на этот раз я хотел зашифровать (без необходимости расшифровки) большую строку, как целую статью.
.. (не говоря уже о том, что мне нужно делать это каждые несколько секунд)Будет ли это проблемой? или потребуется процессору больше работы/больше времени для md5 большой строки по сравнению с коротким паролем?
Я читал, что md5 действительно очень быстрый. 1
О боже.
Ну, MD5 — это шифрование , а не .
(Шифрование по определению должно быть обратимым.)Использовать ли , а не MD5 или SHA для хэшей паролей — они слишком быстры!
(А MD5 просто сломан для такой задачи.)
Алгоритмы хеширования (включая MD5) требуют времени, пропорционального размеру входных данных, или O(n). Это означает, что для хэширования 100 МБ потребуется примерно «в два раза больше времени», чем для хеширования 50 МБ. Для строк PHP в памяти это будет «в мгновение ока» (поскольку ввод-вывод, скорее всего, будет узким местом) — вам потребуется