Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
На Youtube заблокировали, а потом разблокировали популярное видео про работу биткойн-сети на широко известном канале 3Blue1Brown. Конечно, блокировали по жалобе на “нарушение авторских прав”, но, после разбирательства, оказалось, что претензий к данному видео нет – жалоба ошибочная.
То, что Youtube позволяет блокировать всё подряд – это не новость, да и относится не только к Youtube. Но тут занимательно выглядит механизм возникновения “ошибки”. Описание механизма The Register предоставила компания, подавшая жалобу. Оказывается, компания весьма продвинутая, использует ИИ и прочие технологии автоматизации, но сотрудник скопировал не тот URL, потому что в браузере был открыт сайт Youtube с включённым автопроигрыванием – “было открыто “правильное видео”, однако сотрудник отвлёкся, а сайт Youtube в это время автоматически переключил браузер на URL другого видео, этот URL и скопировали в форму жалобы”.
P.S. То есть, на конференциях и в бравурных анонсах рассказывают разное про “автоматизацию автоматизации” и внедрение ИИ-систем, но на практике, получается, даже для каналов Youtube с миллионами подписчиков и видео с миллионами просмотров – отсутствуют элементарные функции проверки и подтверждения.
Комментировать »
Немного о статусе постквантовой криптографии в TLS. Постквантовые криптосистемы обмена ключами для TLS планируется поддерживать только в TLS 1.3. По крайней мере, так сейчас выглядит тенденция: скорее всего, TLS 1.2 сперва “заморозят”, а потом, достаточно скоро, объявят нерекомендуемым, как уже сделано в RFC 8996 для версий 1.0, 1.1. Обратите внимание, что в RFC прямо сказано: “MUST NOT be used” – в терминах этих документов MUST NOT именно и означает, что строго запрещено использовать, без вариантов. Конечно, если ваше приложение соответствует данному RFC – так-то все спецификации носят рекомендательный характер.
Вообще, TLS 1.3 спроектирован существенно лучше предыдущих версий: эта версия хоть и отличается всего лишь на единицу в младшем разряде номера, но с точки зрения архитектуры и криптографической инженерии – выше на поколение. Например, в 1.3 полностью переделана логика начального установления соединения, и эта новая логика гораздо стройнее, протокол в этой части получился более чистым, а на защищённый обмен данными стороны переходят раньше.
Именно стройная логика установления соединения теперь и позволила прозрачно добавить в TLS 1.3 криптосистемы обмена ключами с постквантовой стойкостью. Версия 1.3 полностью несовместима с 1.2, даже на уровне описания процессов, но зато в 1.3 убрано очень много невнятных нагромождений из “дополнений, расширений и уточнений”, которые характерны для 1.2. Конечно, в 1.3 есть свои невнятные моменты – например, трактовка значения “исторических” номеров версий в заголовках TLS-записей, – но, пока что, объём этих недостатков не существенен.
Технически, принести постквантовые криптосистемы можно и в TLS 1.2 – там достаточно механизмов для расширения протокола. Но смысл в поддержке TLS 1.2 можно найти только такой, что сохраняется совместимость со старыми программами и средами, которые невозможно обновить. Однако, если исходить из этого, то не стоит ожидать и добавления реализаций постквантовых криптосистем в эти программы и среды. При этом, TLS 1.3 лучше со всех сторон, – в том числе, в плане программной реализации, – поэтому продолжать тянуть ещё одну версию, за вычетом требований исторической совместимости, несколько странно. Да, можно предположить, что если вдруг в 1.3 обнаружится какой-то удивительный и фатальный архитектурный дефект, то использование 1.2 позволит избежать одномоментного обвала всего и вся. Но на уровне протоколов TLS – это сильно вряд ли, а учитывая архитектурную выверенность TLS 1.3, что-то подобное скорее произойдёт с 1.2. А вот поверить в какие-то дефекты распространённых реализаций – нетрудно. Но, опять же, не факт, что поломается именно 1.3, в котором меньше мест, где можно споткнуться. Поэтому-то развитие, в виде добавления постквантовых криптосистем, и относится только к 1.3.
Комментировать »
В нестабильной версии браузера Chrome (Canary) обнаружили подозрительный новый флаг в настройках – описание флага наводит на мысль, что Google Chrome собирается проверять содержимое просматриваемых веб-страниц при помощи LLM ИИ. Конечно, предполагают, что для защиты пользователя от мошеннических страниц. Цитируемое описание флага гласит:
“Enables on device LLM output on pages to inquire for brand and intent of the page” (“Включает на устройстве вывод LLM для страниц, чтобы запросить тип и предназначение конкретной страницы”)
Смысл ускользает. Например, непонятно, что это за LLM и как она относится к устройству (заметьте, что отсутствует дефис в “on device”). Конечно, LLM ИИ может работать как в браузере, так и на серверах Google. Браузерная LLM (micro-large, да) может “советоваться” с LLM на серверах Google, передавая некоторое сжатое описание страницы. Это всё понятно. Как и то, что эксперимент могут и отменить. Но особенно интересны стратегические моменты.
Во-первых, это очередной шаг к тому, что браузер начнёт отмечать “фейкньюс” и сопровождать некоторые страницы не только предупреждением, но и сообщением от “факт-чекеров” и очередным указанием на Beleive in Science. Соответствующее сообщение, конечно же, сгенерировано при помощи ИИ, потому что “компьютер не может ошибаться”, а “нейросеть, способная рассуждать” ерунды не пришлёт – всё только в строгом соответствии с Правилами и Разрешениями. Во-вторых, браузер может же и поправить содержимое страницы, чтобы оградить пользователя.
Такие же функции можно было реализовать и десять лет назад, но тогда ещё не было тщательно подготовленного СМИ понятийного фундамента про AI/ИИ, да и на слишком многих устройствах просто не хватило бы вычислительной мощности.
Резонный вопрос: зачем вообще выводить веб-страницы с каких-то “несертифицированных узлов”, если можно генерировать при помощи ИИ различные страницы с нужным содержанием сразу в браузере по запросу пользователя? Вроде, и браузер отдельный, и контент индивидуальный. Удобно. В принципе, к этому поисковые системы уже движутся: не просто замкнутый “корпоративный веб”, но ещё и сгенерированный ИИ контент. Закукливание. Это, впрочем, идеальная схема, она не учитывает ключевых требований по наличию каких-то внешних изменений. Ну, грубо говоря, если пользователь ходит внутри сгенерированного корпоративного ИИ-веба, то исчезают и задача защиты этого пользователя, и задача сбора статистики по “неправильным страницам”.
Сложное направление.
Комментировать »
В продолжение записки про “короткие сертификаты” Let’s Encrypt. Сертификаты на шесть дней предлагается выпускать для того, чтобы уменьшить интервал времени, когда компрометация ключа представляет угрозу. Попробуем разобраться, что это вообще за событие такое – компрометация ключа, в контексте TLS для веба, и чем это грозит на практике для обычного веб-сайта.
Прежде всего – речь о компрометации серверного ключа, то есть, о раскрытии третьей стороне секретного ключа из пары, открытая часть которой указана в сертификате сервера. Сам TLS-сертификат – документ публичный, скопировать его может кто угодно. Если у этого “кого угодно” есть секретный ключ от сертификата, то он может выдать свой сервер за легитимный, предоставив сертификат, подписанный Удостоверяющим Центром (УЦ). В данном случае – УЦ Let’s Enncrypt. Однако тут есть очень много “но”.
Если ключ от сертификата скомпрометирован, то штатный метод реагирования состоит в немедленном отзыве сертификата. Технически, сертификат отзывает УЦ. Более того, правила позволяют УЦ отозвать сертификат даже по собственной инициативе, если, например, стало “достоверно известно о компрометации ключа” (не единственная возможная причина). Программы-клиенты, подключающиеся к веб-сайту, должны как-то узнать, что сертификат отозван. Существует два практических способа это сделать: OCSP и CRL.
OCSP. Online Cerificate Status Protocol (Онлайн-протокол [определения] статуса сертификата). Этот способ позволяет отправить запрос о сертификате специальному респондеру, который ответит, отозван сертификат или нет. Технически способ напоминает работу с веб-сервером. Оператором OCSP-респондера является сам УЦ или доверенная сторона, а ответ о статусе сертификата удостоверяется цифровой подписью. Адрес респондера указывается в составе сертификата. В практике Интернета OCSP работает очень плохо. Протокол может показаться простым, но поддерживать его УЦ очень сложно. Начиная с того, что, при правильном внедрении, получаем сервис, блокирующий доступ к внешним ресурсам: без ответа респондера клиент не должен бы подключаться по HTTP к узлу, который пытается аутентифицировать при помощи данного сертификата. Почему? Потому, что если OCSP-респондер недоступен, то, формально, клиент не может узнать, что сертификат был отозван. Очевидно, что никакого смысла в OCSP, если игнорировать недоступность респондера, нет: третья сторона, перехватывающая сетевой доступ и использующая скомпрометированный ключ, тогда может просто заблокировать сетевой доступ и к OCSP-респондеру, чтобы скрыть факт отзыва.
В предыдущем абзаце использованы обороты “при правильном внедрении”, “формально” и др. Это сделано не просто так: в вебе – OCSP принято игнорировать. Например, браузер Chrome давно не поддерживает этот протокол. Хитрости ситуации добавляет тот факт, что, поскольку оператор OCSP-респондера видит индивидуальный запрос о конкретном сертификате (серийный номер), знает имена, для которых сертификат выпускался, то он может сопоставить адреса и запросы, построив статистику посещения веб-ресурсов ничего не подозревающими пользователями. А это уже “угроза приватности”. Конечно, есть технология OCSP stapling, позволяющая встроить актуальный ответ OCSP-респондера о статусе сертификата непосредственно в ответ TLS-сервера, чтобы клиент не обращался к OCSP-респондеру. Но данная технология не особенно распространена.
Наличие OCSP-респондера недавно признали опциональным для УЦ, отразив это в требованиях CA/B-форума (это объединение организаций – УЦ и разработчиков браузеров, – которое определяет базовые требования для включения корневых ключей УЦ в браузерные списки доверенных). Let’s Encrypt планирует закрыть свои OCSP-респондеры в следующем году. (И это правильно, поскольку OCSP, так или иначе, не самый лучший вариант.)
Следующий способ, позволяющий узнать о факте отзыва сертификата, это CRL – Certificate Revocation List (список отзыва сертификатов). CRL – это подписанный УЦ (или доверенной организацией) перечень серийных номеров отозванных сертификатов. Простое правило гласит, что если серийный номер сертификата указан в соответствующем CRL, то сертификат был отозван. Адрес точки раздачи CRL указывается в сертификате. Клиент может скачать список отзыва (со всеми сертификатами) и проверить статус нужного сертификата по нему. В общем случае, “точка раздачи” не знает, сертификат какого ресурса пытается проверить клиент (есть экзотические оговорки, но мы их тут пропустим) – поэтому “приватность” сохраняется лучше. Проблема в том, что на практике CRL тоже проверяется далеко не всегда, поскольку точка раздачи является почти таким же блокирующим сервисом, как и OCSP. Какой смысл в наличии CRL, если недоступность CRL игнорируется? Правильно – никакого смысла.
Получается, что проверки отзыва сертификатов, фактически, нет, поэтому клиент не узнает, что сертификат был отозван и, вероятно, поверит в отозванный сертификат. Традиционная трактовка гласит, что “короткий” сертификат закончится быстро, а в закончившийся сертификат клиент верить уже не станет, что и поможет снизить угрозу. То есть, если сертификат выпущен на шесть дней, а ключи утекают “равновероятно”, то есть неплохие шансы, что сертификату для скомпрометированного ключа останется всего пара дней срока. Хватит ли этого подменяющей соединение стороне? Технически, подменить соединение и прочитать пароли/куки-файлы можно за доли секунды. Но нужно учитывать и тот факт, что ключ от сертификата может утечь с большой задержкой, но “долгий” сертификат всё ещё будет валидным.
Обратите, впрочем, внимание, что если новый сертификат был выпущен для того же ключа, то ситуация не меняется – скомпрометированный ключ подходит к новому сертификату. Естественно, это работает только в том случае, если о компрометации не было известно. Ну и если ключи не меняются каждый раз при выпуске нового сертификата.
Рассмотрим ситуацию подмены TLS-узла. Если для подмены выпускается сертификат, – тем или иным способом, – то речь уже идёт не о компрометации ключа и срок действия сертификата не особенно влияет: новый сертификат будет действовать, а подменный ключ от него – есть у подменяющей стороны по условиям задачи (см. историю с jabber.ru, например). То есть, короткий срок действия приводит к тому, что нужно быстро использовать новый сертификат, ну, или придётся выпустить ещё один подменный. Конечно, при длительном подобном перехвате заметить пачку подменных сертификатов проще, чем один, выпущенный на год. Но часто ли такое требуется? Часто ли подменные сертификаты вообще попадают в “область видимости”? Нет, не часто – это ответ на оба предыдущих вопроса.
Насколько частым является событие “компрометация ключа” в деятельности обычного веб-сайта? Это, что называется, вопрос из серии многогранных: на “обычном веб-сайте” секретный ключ хранится в обычном файле, в открытом виде, а файл лежит там, куда его записала неведомая утилита certbot. Спросите доброго инженера по сертификации СКЗИ (Средств Криптографической Защиты Информации) – и он вам скажет, что так хранимый ключ уже скомпрометирован. Спросите то же самое у строгого инженера по сертификации СКЗИ – и он вам ответит, что ключ был скомпрометирован ещё в тот самый момент, когда его сгенерировала исполняемая с правами суперпользователя неведомая утилита certbot, свойства и недокументированные возможности которой “не только не документированы, но и не установлены”.
Однако, на практике, пусть где-то и вздохнёт специалист ИБ, очередной раз выполнив проверку конвертов tamper-proof и сверив записи в журналах, а опытный админ железного сервера всё равно уверенно сложит секретные ключи от сертификатов в резервные копии, хранимые неподалёку от ежесуточных дампов памяти виртуальных машин, в которых соответствующие TLS-серверы исполняются.
Что поделать – такова практика веба. Естественно, ключ может оказаться скомпрометирован и без всякой утечки непосредственно из места хранения ключа: ошибки в ПО могут привести к тому, что будет сгенерирован нестойкий ключ или ключ утечёт в рамках штатного выполнения криптографических операций. Такое, к сожалению, случается не так редко, как хотелось бы. Наверное, в такой ситуации короткие сертификаты можно признать благом. Вот только на то вопрос и многогранный, чтобы рассмотреть и другие грани тоже.
Чтобы применить скомпрометированный ключ в вебе, применяющая сторона должна перехватить трафик в направлении веб-сайта. Для важных сервисов, типа веб-почты Gmail или систем дистанционного банковского обслуживания, эта угроза подмены довольно серьёзная, поэтому можно рассматривать целевые атаки, когда трафик перехватывается ближе (в сетевом смысле) к точке подключения конкретного пользователя. Однако в других случаях (опять вспомним про jabber.ru) – перехват проводится рядом с точкой подключения атакуемого “обычного веб-сайта”. Но такой перехват позволит без проблем выпустить подменный сертификат, если вдруг ключ “скомпрометировать не удалось”. Так что практическая ситуация не такая прямолинейная, как можно подумать.
А вот что можно сказать точно, так это то, что сертификаты, выпускаемые на несколько дней, привяжут всякий ресурс к сервису выпуска сертификатов. Внедрение требования о коротких сертификатах в основные браузеры – приведёт к тому, что многие и многие “производные браузеры” получат это же требование автоматически. Просто потому, что мало кто рискует вмешиваться в “ядро валидации” сертификатов. И требование о коротком сроке действия начнёт работать даже для “собственных корней”.
Обратите внимание, что один из законодателей моды в данной области, – Google, – сейчас выпускает сертификаты для своих доменов от собственного УЦ. И эти сертификаты уже имеют достаточно короткий срок действия – три месяца. Если добавить сюда инициативу Let’s Encrypt с шестидневными сертификатами, то остаётся слишком мало сомнений в том, что требования браузеров к сроку действия TLS-сертификата начнут теперь сокращаться всё быстрее и быстрее.
Комментировать »
Пишут, что свежие рекомендации профильного агентства правительства Австралии требуют отказаться от современных распространённых криптосистем (ECDH, ECDSA и др.) и перейти на постквантовые криптосистемы совсем скоро – к 2030 году. Занятно, что в этих рекомендациях запрещают SHA-256 в HMAC, но оставляют AES. Это тем более странно, что отказ от SHA-256 мотивируют традиционным развитием квантовых компьютеров. При этом, конечно, ничего не сказано про алгоритмы, используемые для защиты по высшим категориям (TOP SECRET).
Нетрудно посчитать, что знаменитый 2030 год планируется уже через пять лет. С одной стороны, пять лет это очень мало. С другой стороны – пяти лет может оказаться достаточно для того, чтобы появились квантовые алгоритмы для взлома, скажем, криптосистем на кодах и решётках. (Но и квантовые алгоритмы для AES – тоже нельзя исключать.) Естественно, алгоритмы будут не менее теоретическими, чем алгоритм Шора, и смогут сработать только на “гипотетических квантовых компьютерах”, но это всё равно потребует, как минимум, пересмотра рекомендаций, а как максимум – разработки новых криптосистем. Впрочем, всегда можно просто увеличить длину ключей (как долгие годы и делается с RSA).
Комментировать »
Достаточно давно сформировалась тенденция к сокращению срока действия TLS-сертификатов для веба. Let’s Encrypt в следующем году обещает шестидневные сертификаты. То есть, TLS-сертификаты, срок действия которых будет около шести суток (ну, плюс какие-то интервалы в несколько часов, видимо). Цитата:
[…] short-lived certificates. Specifically, certificates with a lifetime of six days. This is a big upgrade for the security of the TLS ecosystem because it minimizes exposure time during a key compromise event. ([…] короткоживущие сертификаты. Точнее, сертификаты со сроком действия шесть дней. Это большое обновление безопасности для TLS-экосистемы, поскольку оно минимизирует время действия уязвимости в случае компрометации ключа.)
Собственно, основная публичная мотивация, стоящая за этим движением – это то, что отзыв сертификатов в TLS для веба и браузеров, фактически, не работает: наладить его так и не удалось. (И с этим – не поспорить.) Ну, понятно, что такой расклад полностью меняет реальность для коммерческих УЦ – от разового выпуска сертификата нужно переходить к предоставлению непрерывного сервиса “обновления” (а в рамках “технологической зависимости” это означает, что нужно реализовывать ACME, который, почему-то, считают “стандартом”).
Кстати, так как браузеры давно допускают только сертификаты, которые действуют не дольше тринадцати с небольшим месяцев, то отдалённо похожая услуга уже есть – “абонемент” на продление годовых сертификатов, чтобы в сумме получилось два или три года. Впрочем, если и браузеры перейдут на шестидневные сертификаты, покупка подобных “абонементов” потеряет смысл.
Это нововведение Let’s Encrypt, не сомневайтесь, прямо означает, что браузеры, следом за Chrome/Chromium от Google, постараются оперативно перейти на короткие сертификаты, запретив срок действия дольше месяца (например).
Комментировать »
В DNS бывают “хостнеймы”, а бывают “DNS-имена” (именно так эти объекты нужно называть на русском). Хостнейм – это сетевое имя компьютера (“имя хоста”), для записи которого разрешено использовать только следующие ASCII-символы (без учета регистра при сравнении): [a-z\,\-] (от “a” до “z”, “запятая”, “минус”) и, в качестве разделителя “лейблов”, ASCII-символ “.” (“точка”). “Лейбл” – это подстрока в полном имени хоста: dxdt.ru. Все эти правила сложились, что называется, исторически.
(Есть ещё некоторые старые ограничения, требующие, например, чтобы “лейбл” всегда начинался с буквы, что позволило бы отличать запись IPv4-адресов от хостнеймов; но, к сожалению, эти ограничения сейчас применяются крайне редко, а в практике глобальной DNS – отменены, поэтому в DNS невозможно отличить хостнейм от IPv4-адреса.)
А вот в DNS-именах допускается использование и других символов. Вообще говоря, закодировать можно произвольные октеты, но это тема для другой записки, поскольку сам смысл отстройки по алфавиту от хостнеймов не настолько общий. Широко используется знак “_” (“нижнее подчёркивание”), который позволяет заведомо отличить DNS-имя от хостнейма, чтобы строго определить смысл соответствующей DNS-записи. Пример: _dmarc.dxdt.ru. – это имя (ключ) для размещения политики DMARC в TXT-записи. Такое имя не может быть хостнеймом, но может быть DNS-именем. Это важное отличие: хостнеймы вкладываются в пространство DNS-имён, но не совпадают с ним.
Комментировать »
Очень популярное заблуждение: DNS использует только UDP. Это заблуждение постоянно мешает на практике. Конечно, протокол UDP является основным протоколом обмена данными между клиентами и серверами в DNS. Это так. Однако UDP используется при наличии возможности, а DNS, как система, строго требует доступности серверов и по TCP. Причём, TCP является ничуть не менее “стандартным” протоколом для DNS. То есть, необходима поддержка и UDP, и TCP.
Хрестоматийный исторический пример использования TCP вместо UDP в DNS, это превышение максимального объёма данных, которые удаётся передать по UDP. Здесь часто упоминают 512 байтов, как предельное количество. Но, опять же, то и дело упускают контекст, к которому лимит в 512 байтов относится. Эти знаменитые 512 байтов, во-первых, происходят из принципов фрагментации пакетов в IP-сетях, – так-то в UDP можно передать гораздо больше, – да ещё и относятся, как ограничение, конкретно к классическому DNS: то есть, из-за 512 байтов в Интернете 13 логических корневых серверов DNS, например. Сетевые детали оставим для другой записки, а в этой важно отметить, что и лимит давно не 512 байтов, потому что есть расширение под общим названием EDNS, позволяющее задать другие границы данных ответа сервера, и возможность увеличения размера UDP-ответов пакета никак не отменяет требований по TCP.
Это всё весьма упрощенное описание. За DNS скрывается очень сложная технология, непосредственно использующая множество весьма и весьма нетривиальных особенностей в своих протоколах. Очень большой ошибкой будет посчитать, что DNS – это “запрос-ответ” про “IP-адрес”. Это только “понятийное ядро” DNS на самом базовом уровне возможно описать как элементарный протокол “запрос-ответ”. При изучении же деталей придётся быстро столкнуться с неожиданными артефактами. Например, с тем, что в DNS есть сжатие строк в DNS-сообщениях, куча хитрых статусов и флагов. Реально работающая система изобилует неожиданными “краевыми случаями”. Вот, кстати, один из примеров: рандомизация регистра символов в DNS. И это, заметьте, тут ещё ничего не сказано про DNSSEC.
В общем, вернёмся к TCP/UDP. Верная интерпретация такая: если DNS-ответ имеется, но не получается доставить его полностью по UDP, то система должна использовать TCP. Следовательно, должен быть TCP-доступ. И вовсе не только между авторитативными серверами для трансфера зоны.
К сожалению, сплошь и рядом продолжают фильтровать и отключать TCP-доступ даже к авторитативным серверам DNS, мотивируя это тем, что, мол, “DNS работает по UDP”, а поэтому прочий доступ нужно закрыть “для безопасности” (хотя, казалось бы, при чём здесь метод “порты закрыл – сервер в безопасности”?). Это неправильно и плохо: резолверы могут штатно подключаться к DNS-серверам по TCP, если им не удаётся работать по UDP, а в DNS описан типовой механизм (Truncated bit), позволяющий сообщить клиенту (резолверу), что нужно переключиться на TCP. Но это только возможный способ. Резолвер, вполне штатно, может самостоятельно перейти на TCP, если этого требует контекст запроса и сетевая конфигурация. Так что DNS работает и по TCP тоже.
Комментарии (1) »
Интернет не только работает по IP, но этот протокол и определяет Интернет. Часть IP – это IP-адреса: номера, используемые для синтеза самого протокола. Интересно, что практическому восприятию IP-адресов в Интернете (не в локальной сети) соответствует несколько уровней.
Уровень первый: IP-сеть. То есть, IP-адреса позволяют проиндексировать узлы “одноранговой сети”, сопоставив каждому узлу номер, служащий адресом, по которому отправляются “пакеты данных”. Это самый простой уровень, он не так близок к логике IP, как можно подумать, но именно этот уровень используется в совсем популярных статьях для объяснения понятия “IP-адрес”: здесь IP-адрес виден как номер сетевого узла.
Уровень второй: межсетевой обмен данными. Оказывается, в Интернете существуют автономные системы. Более того, Интернет (с прописной буквы), как глобальную сеть, невозможно определить без использования хотя бы двух автономных систем. На этом уровне, – то есть, с точки зрения межсетевой маршрутизации, – IP-адреса видны как некие “точки” на сетевой границе автономной системы. Собственно, IP-адреса просто возникают на границе автономной системы. Как там устроено внутри, какой именно узел адресуется данным номером во внутренней логике автономной системы – не ясно: IP-адрес лишь задаёт точку входа (и выхода, если это транзитная автономная система).
Уровень третий: произвольные идентификаторы. IP-адрес является лишь произвольным идентификатором, по которому через сетевой порт может отвечать не менее произвольное устройство, в том числе, совсем не тот узел, как можно было бы подумать. Здесь уже граница проводится по сетевому интерфейсу. И действительно, технически, пакеты, адресованные какому-нибудь IP-адресу в Интернете, могут быть перехвачены произвольным промежуточным узлом. Это, понятно, не относится к IP, как к протоколу. Однако, если ваш компьютер отправляет пакет по адресу A.B.C.D, полагая, что это адрес “сервера Google”, то из этого вовсе и не следует, что в конкретном сетевом сегменте по данному адресу отвечает действительно “сервер Google”. Конечно, у данного подхода есть и продолжение: почему бы не вспомнить, что IP-адрес можно заменять на уровне сокета, в операционной системе? Но тут уже понятие вычислительной сети совсем “виртуализируется”, поскольку физический уровень полностью замыкается внутри одного устройства.
Комментировать »
Кстати, в рамках свежего обновления, на сервис ТЦИ audit.statdom.ru, кроме прочего, добавлен вывод HTTPS-записи (при наличии, см. скриншот) и определение поддержки MLKEM+X25519 для TLS-узлов (см. второй скриншот).

На скриншоте – HTTPS-запись DNS-зоны, размещённой на сервисе Cloudflare. Можно видеть сведения об IP-адресах, указание на то, что присутствует ECH-конфигурация (сама конфигурация пока что не выводится).

Обнаружение поддержки постквантовой гибридной криптосистемы MLKEM+X25519 выполяется TLS-сканером отдельно (естественно, это, пока что, редкая криптосистема, если распространённость определять по количеству TLS-узлов).
Комментировать »
Немного занятной и техничной практики DNS. Если взять зону kommersant.ru, то нетрудно выяснить, что с этой зоной что-то сильно не так. Вот “покрасневший” скриншот из отчёта открытого сервиса audit.statdom.ru:

Почему тут указаны только “адреса”, которые отмечены как недоступные? Во-первых, это не адреса, а имена хостов (хостнеймы), которые выглядят похожими на IP-адреса, но намётанный глаз сразу обнаружит подвох: всё выдаёт крайняя справа точка, отделяющая корневой домен; это так называемый FQDN – Fully Qualified Domain Name (“полное имя домена”). Во-вторых, серверы имён, обозначенные таким образом, доступны быть не могут, поскольку в глобальной DNS нет имени первого уровня “20.” (две цифры – 2 и 0).
Между тем, если попробовать зайти на соответствующий апексу зоны веб-сайт kommersant.ru браузером, то, скорее всего, сайт откроется. Получается, что всё работает? Нет, далеко не всё. Но это лишь очередное подтверждение того, что DNS, как сервис и совокупность технологий, в сочетании с вебом, обладает очень высокой степенью устойчивости к ошибкам настройки (кроме, конечно, DNSSEC).
Посмотрим, как же настроена зона kommersant.ru на момент написания данной записки. В домене верхнего уровня RU зона делегрована на два сервера имён (NS) с именами ns.kommersant.ru. и ns5.kommersant.ru., что, скажем, подтверждается следующим фрагментом скриншота того же отчёта:

Поскольку это так называемые “субординатные” имена NS, – то есть, находящиеся в той же зоне, которая делегируется, – серверы зоны RU возвращают соответствующие glue-записи (в отчёте они не показаны). Glue-записи содержат IP-адреса для имён делегирования (ns.kommersant.ru. и ns5.kommersant.ru.). В DNS, glue-записи необходимы для того, чтобы исключить возможность бесконечной рекурсии. Представьте, что зона test.ru делегирована на ns.test.ru. Как же определить IP-адрес ns.test.ru? Ведь для его определения нужно знать адреса NS-ов зоны test.ru, а чтобы их знать, нужно опросить зону test.ru. Как найти адреса? Верный ответ – никак не найти, если бы только не было glue-записей, которые-то и приносят нужные адреса сразу.
Почему здесь вообще возникает такая проблема с аресами/именами? Потому, что в качестве значения DNS-записи NS могут быть указаны только имена хостов. Но соединение и обмен данными в глобальном Интернете происходят по IP. То есть, для отправки запросов и получения ответов нужны именно IP-адреса. Можно ли всё же указать IP-адреса в NS-записях? Нет, нельзя. Причина в том, что значения записей в DNS не могут подразумевать какой бы то ни было протокол обмена данными. Это очень важный и логичный момент: DNS превратилась бы в непонятную путаницу, если бы какие-то дополнительные сведения об установлении соединения “подразумевались” бы: в той же NS-записи – получаем то адрес, то хостнейм, то “какие-то минусы”, то “здесь админы рыбу заворачивали”. Заметьте, сюда ещё накладывается и тот занимательный факт, что вообще невозможно вне контекста отличить запись IPv4-адреса от хостнейма. В практике DNS есть много случаев, когда тот или иной протокол доступа, да ещё и с параметрами, прямо указывается, но корректно это делается только при помощи префиксов в самом имени, например: _443._tcp.name.test.ru. (обратите внимание: предыдущая DNS-строка – не хостнейм!).
Итак, NS-запись должна содержать имя хоста, соответствующее серверу имён. Для разрешения возможных циклов – предусмотрены glue-записи.
Однако доверенным источником полного списка серверов имён для зоны является не делегирующий сервер, не glue-записи, а ответ авторитативного сервера зоны на запрос NS. По этой причине сервис тестирования DNS-узлов получает список этих узлов с авторитативного сервера. Ну, или пытается получить. Серверы, указанные для kommersant.ru в списке делегирования, на запрос NS возвращают те самые “подложные” хостнеймы, сформированные из IP-адресов четвёртой версии. То есть, так указано в файле зоны. Указано неверно. Распространённая ошибка. Видимо, ничего не поделать. Отличить тут адрес от хостнейма программное обеспечение не может, поэтому DNS-сервер будет отвечать тем, что ему написано. А написаны, как уже указано выше, заведомо “неразрешимые” имена (нет, это не IP-адреса; IP-адреса нельзя указывать в NS-записях, поэтому резолвер никак и не может понять, что это, якобы, “IP-адреса”, потому что это хостнеймы).
Почему же работает веб-сайт? Вот почему. Для большинства сценариев доступа к вебу нужен IP-адрес, который передаётся в A-записи DNS. По IP-адресам из glue-записей для обсуждающейся зоны kommersant.ru отвечают серверы имён, которые возвращают A-записи, содержащие корректный и доступный IP-адрес, который указывает на веб-узел. И тут многое зависит от рекурсивного резолвера. Если этот резолвер использует непосредственно адреса из glue-записей для того, чтобы запросить A-записи, то всё сработает. Но glue-записи небезопасно кэшировать – кэшировать следовало бы хотя бы минимально проверенные значения NS, которые требуется достать с авторитативных серверов. Если резолвер попробует получить список NS корректным способом, то он обнаружит дефектные записи, после чего попробует отправить ещё несколько запросов и, скорее всего, всё же найдёт A-запись, чтобы вернуть её клиенту. То есть, резолвер, обычно, настроен так, чтобы хоть что-то достать из DNS (не всегда это правильный выбор, поскольку регулярно служит фундаментом для целевых атак). Так что, спрашивая и переспрашивая, игнорируя и как-то исправляя ошибки в зоне, но резолвер, в большинстве случаев, сможет найти IP-адрес, чтобы потом по этому адресу попробовал подключиться браузер, если только способ достать данный IP-адрес существует. Что же касается других функций DNS – ну, они в данной зоне просто недоступны (тем более, что упомянутые серверы имён не поддерживают современный EDNS-доступ вообще).
Вот. У подобной некорректной настройки DNS есть ещё много неприятных побочных эффектов, связанных с надёжностью и безопасностью. А ведь существует ещё и QNAME Minimization.
(Недавно я описывал другую занятную ошибку настройки DNS, из “дикой природы”, наблюдающуюся в куда более популярной зоне vk.com. Представьте, кстати, куда все эти интернеты прикатятся, если DNSSEC, – несравнимо более требовательная к уровню аккуратности технология, – вдруг получит максимальное распространение.)
(Update, 30.01.2026: в январе 2026 года настройки DNS для зоны kommersant.ru поменяли, и описанный выше эффект наблюдаться перестал; что, конечно, не отменяет важности описанных в этой заметке технических моментов.)
Комментарии (2) »
Новый