Рейтинг:0

Почему авторитетный сервер имен не проверяет DNSSEC свои собственные результаты?

флаг pl

Если я запрашиваю у сервера имен запись, которая является авторитетной, кажется, что ответ не проходит проверку DNSSEC:

$ копать cloudflare.com @ns3.cloudflare.com

; <<>> DiG 9.16.22-Debian <<>> cloudflare.com @ns3.cloudflare.com
;; глобальные параметры: +cmd
;; Получил ответ:
;; ->>HEADER<<- код операции: QUERY, статус: NOERROR, id: 28361
;; флаги: qr aa rd; ЗАПРОС: 1, ОТВЕТ: 2, АВТОРИЗАЦИЯ: 0, ДОПОЛНИТЕЛЬНО: 1
;; ВНИМАНИЕ: рекурсия запрошена, но недоступна

;; ДОПОЛНИТЕЛЬНЫЙ ПСЕВДОРАЗДЕЛ:
; ЭДНС: версия: 0, флаги:; УДП: 1232
;; РАЗДЕЛ ВОПРОСОВ:
;cloudflare.com. В

;; РАЗДЕЛ ОТВЕТОВ:
Cloudflare.com. 300 В А 104.16.133.229
Cloudflare.com. 300 В А 104.16.132.229

;; Время запроса: 3 мс
;; СЕРВЕР: 162.159.0.33#53(162.159.0.33)
;; КОГДА: Сб, 20 ноября, 15:29:00 CET 2021
;; РАЗМЕР MSG rcvd: 75

Флаг «реклама» не возвращается, поэтому ответ не проверен DNSSEC. Если я задам тот же запрос неавторизованному серверу, будет возвращен флаг «реклама»:

$ копать cloudflare.com @1.1.1.1

; <<>> DiG 9.16.22-Debian <<>> cloudflare.com @1.1.1.1
;; глобальные параметры: +cmd
;; Получил ответ:
;; ->>HEADER<<- код операции: QUERY, статус: NOERROR, id: 23361
;; флаги: qr rd ra ad; ЗАПРОС: 1, ОТВЕТ: 2, АВТОРИЗАЦИЯ: 0, ДОПОЛНИТЕЛЬНО: 1

;; ДОПОЛНИТЕЛЬНЫЙ ПСЕВДОРАЗДЕЛ:
; ЭДНС: версия: 0, флаги:; УДП: 1232
;; РАЗДЕЛ ВОПРОСОВ:
;cloudflare.com. В

;; РАЗДЕЛ ОТВЕТОВ:
Cloudflare.com. 145 В А 104.16.132.229
Cloudflare.com. 145 В А 104.16.133.229

;; Время запроса: 3 мс
;; СЕРВЕР: 1.1.1.1#53(1.1.1.1)
;; КОГДА: Сб, 20 ноября, 15:35:35 CET 2021
;; РАЗМЕР MSG rcvd: 75

Не могли бы вы сказать мне:

  1. Это правильное и четко определенное поведение?
  2. По какой причине проверка не проводится?
  3. Могу ли я изменить это поведение с помощью ISC привязка9 в конфигурации? Как?

(Если такое поведение является преднамеренным, никогда не следует настраивать сервер имен для использования собственного программного обеспечения сервера имен для разрешения, потому что для некоторых клиентских программ имеет значение, будет ли подтвержден ответ или нет: мне было интересно, почему ССХФП записи не получилось делать ssh -o VerifyHostKeyDNS <хост> с самого сервера имен).

Рейтинг:0
флаг cn

Почему авторитетный сервер имен не проверяет DNSSEC свои собственные результаты?

Потому что он не может, не будучи рекурсивным сервером имен, что было бы плохо.

Чтобы полностью проверить DNSSEC, вам нужно начать с корня и пройти всю ссылку ДС/DNSKEY записи, и авторитетный распознаватель, с которым вы консультируетесь, не является авторитетным для всего этого, а только для его части по ссылке.

См., например, раздел 6 RFC 4033, «Рассмотрение распознавателя»:

Безопасный распознаватель должен уметь выполнять криптографические операции. функции, необходимые для проверки цифровых подписей с использованием как минимум обязательный для реализации алгоритм(ы). Безопасные распознаватели должны также иметь возможность формировать цепочку аутентификации из нового обученную зону обратно к ключу аутентификации, как описано выше. Этот могут потребоваться дополнительные запросы к промежуточным зонам DNS для получения необходимых записей DNSKEY, DS и RRSIG. Безопасность резолвер должен быть настроен по крайней мере с одним якорем доверия в качестве отправная точка, с которой он попытается установить аутентификацию цепи.

И RFC 4035, раздел §3.2.3 «Бит AD» в разделе «Рекурсивные серверы имен»:

Сторона сервера имен защищенного рекурсивного сервера имен ДОЛЖНА НЕ устанавливайте бит AD в ответе, если только сервер имен не рассмотрит все RRsets в разделах ответа и полномочий ответа, чтобы быть аутентичный. Сторона сервера имен ДОЛЖНА устанавливать бит AD тогда и только тогда, когда сторона распознавателя рассматривает все наборы RRset в разделе ответа и любые соответствующие отрицательные ответы RR в разделе полномочий должны быть аутентичный. Сторона распознавателя ДОЛЖНА следовать процедуре, описанной в Раздел 5, чтобы определить, являются ли рассматриваемые RR подлинными. Однако для обратной совместимости рекурсивный сервер имен МОЖЕТ установить бит AD, когда ответ включает неподписанные записи CNAME RR, если эти CNAME Очевидно, что RR могли быть синтезированы из аутентичного DNAME. RR, который также входит в ответ согласно синтезу правила, описанные в [RFC2672].

Что касается:

имеет значение, будет ли ответ подтвержден или нет

Конечно да, в этом вся цель DNSSEC. Но конечные клиенты не обращаются напрямую к авторитетным серверам имен в ходе обычных операций. Они используют рекурсивный сервер имен, который, в свою очередь, перебирает различные авторитетные серверы имен, чтобы получить окончательный ответ, и который может проверять DNSSEC, если он настроен для этого.

Мне было интересно, почему записи SSHFP не работали, выполняя ssh -o VerifyHostKeyDNS с самого сервера имен.

Какая бы проблема у вас ни возникла здесь, она не связана ни с чем вышеперечисленным. ssh следует использовать любой преобразователь уровня ОС, настроенный для получения данных.

Видеть https://github.com/openssh/libopenssh/blob/05dfdd5f54d9a1bae5544141a7ee65baa3313ecd/ssh/dns.c#L191 который находится внутри verify_host_key_dns функция:

    результат = getrrsetbyname(имя хоста, DNS_RDATACLASS_IN,
        DNS_RDATATYPE_SSHFP, 0, &отпечатки пальцев);
    если (результат) {
        verbose("Ошибка поиска DNS: %s", dns_result_totext(результат));
        возврат -1;
    }


    если (отпечатки пальцев->rri_flags & RRSET_VALIDATED) {
        *флаги |= DNS_VERIFY_SECURE;
        debug("Найдено %d защищенных отпечатков пальцев в DNS",
            отпечатки пальцев->rri_nrdatas);
    } еще {
        debug("Найдено %d небезопасных отпечатков пальцев в DNS",
            отпечатки пальцев->rri_nrdatas);
    }

и getrrsetbyname определяется в https://github.com/openssh/openssh-portable/blob/2dc328023f60212cd29504fc05d849133ae47355/openbsd-compat/getrrsetbyname.c и в основном является оберткой вокруг res_query это низкоуровневая привязка libc для выполнения DNS-запросов.

я нашел в https://weberblog.net/sshfp-authenticate-ssh-fingerprints-via-dnssec/ некоторые подробности о ssh поведение между проверенным (DNSSEC) ССХФП записывать или нет.

флаг pl
У меня нет проблем с ssh/SSHFP, я просто увидел, что он не работает на одном из моих серверов имен: этот конкретный сервер установил себя в качестве распознавателя в /etc/resolv.conf, что было причиной, почему он не сработало: отсюда и мой вопрос здесь. Спасибо за ваш ответ.
флаг pl
В цитируемых документах RFC не упоминается о необходимости проверки авторитетных зон. По крайней мере, bind и, возможно, многие другие программы серверов имен могут рекурсивно проверять, поэтому они действительно могут проверять свои собственные зоны.
Patrick Mevzek avatar
флаг cn
«Так что они действительно могли подтвердить свои собственные зоны». Не без того, чтобы быть рекурсивным сервером имен, чтобы получить все данные, которых у них нет. `bind` может иметь обе роли (авторитетную и рекурсивную), но не рекомендуется. Если вы используете другое программное обеспечение, такое как `nsd` или `yadifa`, они являются только авторитетными, без какой-либо рекурсивной логики...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.