Межсетевое экранирование

Безопасность DNS Query/Response

Разбить на страницы
Показывать лекцию целиком

Рассмотрим способ, которым DNSSEC обеспечивает защиту транзакций DNS Query / Response с помощью аутентификации источника, проверки целостности данных и аутентифицированного отказа при отсутствии запрошенных данных. Опишем механизмы, используемые DNSSEC операции, с помощью которых эти механизмы реализуются, и способы обеспечения безопасности этих операций. Другими словами, опишем принципы безопасного развертывания DNSSEC.

Для гарантирования end-to-end защиты транзакций запросов и ответов DNS необходимы дополнительные меры защиты (отличные от тех, которые определены в спецификации DNSSEC – такие как обеспечение безопасности коммуникационного пути между локальными поддерживающими DNSSEC кэширующим name-сервером и stub resolver’ами. Эти меры также будут обсуждаться далее.

Механизмы и операции DNSSEC

Механизмы DNSSEC определяют две основных операции: подписывание (и связанные с этим действия) и проверка подписи. Рассмотрим эти операции.

Типы записей, используемых DNSSEC

Первой задачей является создание цифровых подписей для ресурсных записей в зонном файле. DNSSEC предполагает создание подписи для всего RRSet (множества ресурсных записей c одним и тем же именем владельца, классом и типом), а не для каждой ресурсной записи. Цифровая подпись и связанная с ней информация (ID использованного ключа, признаки начала и конца подписываемого блока и т.п.) содержатся в специальной ресурсной записи RRSIG. Строка, содержащая открытый ключ, который используется для проверки подписи (в RRSIG ), содержится в ресурсной записи с типом DNSKEY. Другой тип ресурсной записи, NSEC (Next Secure) используется для перечисления типов ресурсных записей (в каноническом порядке), существующих в данном домене. Подписи (т.е. ресурсные записи RRSIG ) для данного типа ресурсных записей создаются, кроме того, для обеспечения аутентифицированного доказательства невозможности создания ответов на запросы для несуществующего типа ресурсных записей. Дополнительно существует необязательный тип ресурсной записи DS (Delegation Signer) для случая, когда зона хочет разрешать выполнить проверку подлинности открытых ключей своих дочерних зон. Детальный синтаксис каждого из этих дополнительных типов ресурсных записей, введенных спецификацией DNSSEC указан в RFC 4034. Самой важной из них является ресурсная запись RRSIG, потому что именно она содержит строку подписи.

Ресурсная запись RRSIG, подобно другим ресурсным записям, содержит поля имени собственника, TTL, класс, RRType и RDATA. Цифровая подпись и вся связанная с ней информация находится в поле RDATA. Расположение поля RDATA в ресурсной записи RRSIG со всеми подполями показано ниже. Также приведено краткое описание каждого подполя.

Содержимое поля RDATA в ресурсной записи RRSIG
RRRtype Covered Algorihm Code Labels
Original TTL
Signature Expiration
Signature Inception
Key Tag Signer's NAme
Encoded Signature
Поле RRType Covered имеет тип ресурсной записи, для которого RRSIG содержит подпись.

Поле Algorithm Code есть целое число, равное коду соответствующего криптографического алгоритма, использованного для создания подписи.

Поля Labels и Original TTL содержат количество ресурсных записей, для которых создана подпись, и значение TTL для множества ресурсных записей, для которых создана данная подпись.

Значения Signature Expiration и Signature Inception являются абсолютными значениями времени, которые определяют период действительности подписи, – период времени, в течение которого данная RRSIG считается действительной для зоны.

Поля Key Tag и Signer’s Name являются хэшем и доменным именем (FQDN) для ресурсной записи DNSKEY, которая будет использоваться клиентом для проверки действительности подписи.

Наконец, последнее поле содержит саму подпись.

Зона, которая содержит эти дополнительные ресурсные записи наряду с обычными ресурсными записями, называется подписанной зоной. Name-сервер, который создает такие подписанные зоны и включает в свой ответ соответствующие подписи (т.е. соответствующие RRSIG ) вместе в запрошенными ресурсными записями, называется поддерживающим DNSSEC name-сервером.

Список операций DNSSEC

Ответ, пришедший из подписанной зоны, называется подписанным ответом. Resolver, который имеет возможность проверять подписи в подписанном ответе, называется поддерживающий DNSSEC validating resolver. Прежде чем resolver сможет проверить подпись, созданную для множества ресурсных записей и полученную им в ответе, используя открытый ключ зоны, посланный в ответе, он должен установить доверие к этому открытому ключу. В DNSSEC данное требование означает, что resolver должен выполнить так называемое построение доверенной цепочки. Для этого resolver рассматривает список известных доверенных ключей (называемых trust anchors ) и создает цепочку открытых ключей, с помощью которой он устанавливает доверие к открытому ключу зоны, полученному им в ответе. Для построения цепочки используется иерархия пространства имен DNS. В идеале trust anchors в resolver’е содержат открытые ключи root’а (если root-сервер поддерживает DNSSEC или открытые ключи зон, расположенных ниже в иерархии. Список trust anchors в resolver’е не строится с помощью транзакций DNS; для этого используется некоторый внешний механизм.

Процессы DNSSEC описанные выше, включают несколько операций name-сервера и несколько операций resolver’а. Операциями name-сервера являются следующие:

  • DNSSEC-ОР1: создание пары открытый – закрытый ключ.
  • DNSSEC-ОР2: безопасное хранение закрытых ключей.
  • DNSSEC-ОР3: распространение открытого ключа.
  • DNSSEC-ОР4: подписывание зоны.
  • DNSSEC-ОР5: обновление ключа (изменение ключа).
  • DNSSEC-ОР6: переподписывание зоны.
  • Операциями resolver’а являются:

  • DNSSEC-ОР7: конфигурирование доверенных anchors.
  • DNSSEC-ОР8: создание цепочки доверия и проверка подписи.
  • Операции name-сервера с DNSSEC-ОР1 по DNSSEC-ОР4 и операции resolver’а DNSSEC-ОР7 и DNSSEC-ОР8 выполняются либо перед развертыванием DNSSEC, либо перед операциями обеспечения безопасности запросов и ответов (таких как обработка подписанных ответов и проверка подписей). Рассмотрим эти операции в первую очередь. Оставшиеся операции name-сервера (обновление ключа и переподписывание зоны – DNSSEC-ОР5 и DNSSEC-ОР6 соответственно) выполняются периодически после полного развертывания DNSSEC и будут приведены в конце лекции.

    Создание пары открытый / закрытый ключи (DNSSEC-ОР1)

    DNSSEC определяет создание и проверку цифровых подписей с использованием асимметричных ключей. Это требует создания пары открытый / закрытый ключи. Для облегчения операций администрирования, которые должны выполняться периодически, таких как обновление ключа и переподписывание зоны, необходимо иметь два различных типа ключей. Один тип ключа называется Key Signing Key ( KSK Ключ данного типа (а именно, закрытый ключ, называемый KSK-private) будет использоваться только для подписывания ключа, содержащегося в зонном файле в ресурсной записи с типом DNSKEY . Другой тип ключа называется Zone Signing Key ( ZSK ) (соответствующий закрытый ключ называется ZSK-private). Этот ключ используется для подписывания всех множеств ресурсных записей в зоне (включая множество ресурсных записей DNSKEY ). Административное разграничение между KSK- и ZSK-ключами осуществляется с помощью флага Secure Entry Point ( SEP ) в ресурсной записи DNSKEY, который присутствует в открытых ключах, называемых KSK-public и ZSK-public, соответственно.

    Причина, лежащая в основе создания двух типов пар ключей, состоит в определении отдельного набора функций для каждого типа ключа для того, чтобы уменьшить сложность задач, связанных с обновлением ключей и переподписыванием зоны. KSK (KSK-private) используется для подписывания множества ключей (т.е. множества ресурсных записей DNSKEY ) и является тем ключом, который передается родительской зоне для использования его при аутентифицированном делегировании. Аутентифицированное делегирование выполняется посредством создания ресурсной записи DS, содержащей хэш дочернего KSK-public ключа, и затем создания соответствующей подписи (ресурсной записи RRSIG ), используя свой собственный ZSK-private. Ключ KSK (KSK-public) также может использоваться в качестве доверенного anchor для установления доверенных цепочек при проверке подписей.

    Ключ ZSK (ZSK-private) применяется для подписывания зонного файла (всех множеств ресурсных записей). Открытый ключ (ZSK-public) не посылается родителю, он всегда хранится в зоне.

    При создании пар ключей KSK и ZSK необходимо выбрать следующие параметры:

  • алгоритм цифровой подписи;
  • длину ключа;
  • период, в течение которого ключ будет использоваться.
  • Выбор алгоритма цифровой подписи основывается на принятых стандартах. Обычно рассматриваются следующие алгоритмы:

  • DSA;
  • RSA;
  • Elliptic Curve DSA (ECDSA).
  • Из этих трех алгоритмов наиболее широко распространены RSA и DSA. С точки зрения производительности RSA и DSA имеют сопоставимую скорость создания подписи, но DSA является более медленным при проверке, а RSA — более быстрым. Единственным обязательным для реализации в DNSSEC алгоритмом является RSA с MD5. Считается, что как минимум name-серверы и клиенты должны иметь возможность использовать RSA. Предполагается, что по крайней мере один ZSK для зоны использует алгоритм RSA.

    Выбор длины ключа определяется соотношением между риском компрометации ключа и производительностью. Производительность определяется временем создания подписи и временем проверки подписи. Длина пакета DNS-ответа также должна учитываться, потому что ресурсные записи DNSKEY посылаются в дополнительном разделе DNS-ответа. Так как ключ KSK используется только для подписывания множества ключей (множества ресурсных записей DNSKEY ), в этом случае производительность не является решающим фактором. Однако компрометация ключа KSK может иметь большее негативное воздействие, так как этот ключ является фактически мастер-ключом для зоны. Компрометация ключа KSK в зоне, расположенной высоко в DNS-иерархии, может подвергнуть большую часть DNS-поддерева (следовательно, большое число зон) spoofing атакам. Кроме того, обновление ключа KSK в случае компрометации означает изменение доверенных anchor’ов во многих name-серверах и resolver’ах. Тем самым для KSK рекомендуется большая длина ключа: он имеет небольшое воздействие на производительность, но чувствителен к компрометации.

    При выборе длины ключа для ZSK производительность является основным фактором, потому что этот ключ используется для подписывания всех множеств ресурсных записей в зоне. С точки зрения компрометации воздействие ограничено одной зоной, потому что применение ключа ZSK ограничено подписыванием множества ресурсных записей только данной зоны, он не используется для предоставления аутентифицированного делегирования родительской зоне. Следовательно, ключ ZSK может иметь меньшую длину, чем ключ KSK.

    Выбор периода использования (периода обновления) определяется риском раскрытия ключа. В случае KSK объем подписываемой информации не очень большой (потому что ключ KSK подписывает только множество ресурсных записей DNSKEY, и частота изменения данного множества ресурсных записей также маленькая). Минимальная вероятность раскрытия ключа (небольшой объем данных, доступный для угадывания KSK-private) в комбинации с большой длиной ключа приводит к тому, что период использования KSK может быть большим (обычно год или два).

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

    Рекомедация:

    Длина ключа для KSK должна быть достаточно большой, потому что компрометация KSK-ключа сильно влияет на безопасность DNS. Период действительности (период обновления) для ZSK должен быть сравнительно коротким, потому что существует больший риск угадывания ключа в результате большей незащищенности ZSK-ключа.

    С точки зрения количества создаваемых ключей каждого типа ( KSK и ZSK ), хорошей практикой считается создание дополнительного ключа ZSK к тому, который используется в текущий момент. Следовательно, администратор зоны должен использовать программу создания ключа для создания одного KSK и двух ZSKs при начальном развертывании DNSSEC. Один ZSK рассматривается как активный ключ, и его закрытая часть (ZSK-private) используется для создания подписей. Другой ZSK (ZSK-public) помещается в множество ресурсных записей DNSKEY, но соответствующая закрытая часть (ZSK-private) не будет использоваться для подписывания множества ресурсных записей. Данный дополнительный ключ ZSK дает возможность немедленно обновить ZSK в случае аварийных ситуаций, таких как компрометация ключа. Этот подход предоставляет способ предварительного уведомления resolver’ов, которые будут проверять подписи зон, что это тот ключ, который станет новым ключом после истечения периода действительности текущего ключа. Указание периода действительности ключа в множестве ресурсных записей DNSKEY дает возможность resolver’ам кэшировать и устанавливать доверие к новому ключу так, что они могут немедленно после обновления использовать новый ключ для проверки подписи.

    Пример создания пары ключей

    Любое ПО name-сервера поддерживающего DNSSEC должно предоставлять программную утилиту для создания пары асимметричных ключей. Проиллюстрируем использование одной из таких программ, dnssec-keygen (имеющейся в BIND 9.3.x):

    dnssec-keygen –a algorithm –b bits –n type [options] name

    где algorithm может быть один из следующих:

  • RSAMD5
  • DSA
  • bits (длина ключа) имеет следующие диапазоны:

  • 512 $$\dots$$ 4096 для RSA-MD5
  • 512 $$\dots$$ 1024 для DSA
  • type может быть одним из ZONE или HOST. В принципе, могут быть добавлены и любые другие типы ключей.

    name есть имя собственника ключа (обычно имя домена).

    Данная команда создает два файла: один содержит открытый ключ, а другой файл — соответствующий ему закрытый ключ. Имена этих файлов следующие:

    K<domain_name>+algorithm_id+Key_id.key
    K<domain_name>+algorithm_id+Key_id.private

    domain_name является значением параметра name, указанного в командной строке. Algorithm_id может быть следующим:

    3 – DSA

    5 – RSAMD5

    key_id есть уникальный идентификатор созданного ключа, созданного программой.

    Например, для создания ZSK-ключа длиной 1024 бит, который использует набор алгоритмов RSAMD5 для подписывания зоны example.ru, должна быть выполнена следующая команда:

    dnssec-keygen –a RSAMD5 –b 1024 –n ZONE example.ru

    Будут созданы следующие файлы, содержащие закрытый и открытый ключи:

    Kexample.ru.+005+28345.private
    Kexample.ru.+005+28345.key

    В этих именах файлов 005 определяет algorithm_id и 28345 есть уникальный идентификатор ключа.

    В *.key файле информация открытого ключа имеет тот же самый синтаксис, что и ресурсной записи в зонном файле. Содержимое файла Kexample.ru.+005+28345.key следующее:

    example.ru IN DNSSEC 256 3 5 BQFG...... (строка ключа в Base64)

    Следовательно, содержимое файла с открытым ключом может быть добавлено к содержимому зонного файла с помощью следующей команды:

    cat *.key >> /var/named/zonedb.example.ru

    После того как ресурсная запись DNSKEY, содержащая открытый ключ, добавлена в зонный файл, Serial Number зоны должен быть увеличен до того, как будет выполнено подписывание зоны.

    Безопасное хранение закрытых ключей (DNSSEC-OP2)

    Закрытые ключи из KSK и ZSK пар ключей должны быть защищены от неавторизованного доступа. В идеале, закрытые ключи должны храниться off-line на физически безопасной, не доступной из сети машине вместе с мастер-копией зонного файла. Подписи, создаваемые с использованием закрытых ключей, должны пересылаться на первичные авторитетные name-сервера посредством процесса загрузки, используя динамически устанавливаемое сетевое соединение (а не постоянный сетевой канал).

    Данная стратегия неосуществима в ситуациях, когда поддерживающий DNSSEC name-сервер должен выполнять динамические обновления. Для поддержки транзакций динамических обновлений name-сервер (который обычно является первичным авторитетным name-сервером) должен иметь как мастер-копию зонного файла, так и соответствующий закрытый ключ для подписывания зоны (ZSK-private) в режиме on-line для немедленного обновления подписей для измененных ресурсных записей. Закрытый ключ из KSK (KSK-private) может, тем не менее, храниться off-line. В этом случае должны быть предприняты следующие меры для защиты ZSK-private:

  • shell, из которого вызывается утилита создания ключа, должен быть недоступен для всех, за исключением администратора зоны.
  • Директория, в которой хранятся файлы закрытых ключей (обычно это поддиректория с тем же именем, что и зона, с именами файлов, имеющими структуру имени K<zonename>.AlgorithmID+<keytag>.private в BIND), должна быть недоступна и невидима для всех, за исключением администратора зоны.
  • Возможность быстрого восстановления должна быть обеспечена тем, что имеется зеркальный диск или выполняется периодический backup на съемный носитель.
  • Другая стратегия состоит в хранении закрытых ключей в зашифрованной файловой системе.
  • Рекомендация:

    Закрытые ключи, соответствующие как ZSK, так и KSK, не должны храниться в поддерживающем DNSSEC первичном авторитетном name-сервере, если name-сервер не должен выполнять динамических обновлений. Если динамические обновления поддерживаются, то только закрытый ключ, соответствующий ZSK, должен храниться на name-сервере в директории и файле с соответствующем управлением доступа или криптографически защищенным.

    Опубликование открытого ключа (DNSSEC-OP3) и конфигурирование доверенных anchor’ов (DNSSEC-OP7)

    Проверка данных зоны resolver’ом начинается с того, что resolver знает открытый ключ данной зоны (той, чьи данные он проверяет) или любой из открытых ключей зон, расположенных выше в дереве DNS. Если проверяемая зона (например, example.ru ) поддерживает безопасность (т.е. поддерживает DNSSEC ), а ее родитель ( .ru ) — нет, то точка доверия начинается с самой зоны. Если зона родителя (зона .ru ) поддерживает безопасность, а зона выше по дереву (зона root) — нет, начальной точкой доверия является родитель (т.е. зона .ru ). Если зона root поддерживает безопасность, то она становится исходной точкой доверия.

    В любом случае открытый ключ данной начальной точки должен быть известен resolver’ам. Такие открытые ключи, известные resolver’ам, называются доверенными anchor’ами. Поскольку не существует возможности средствами DNS выполнить проверку этих открытых ключей, открытый ключ доверенного anchor’а должен распространяться внешним по отношению к DNS способом. Данное распространение может быть осуществлено с использованием таких каналов, как web-сайты или e-mail.

    Список доверенных anchor’ов в поддерживающем DNSSEC resolver’е определяет, какой подписанный ответ от зоны будет рассматриваться как безопасный, а какой — нет. Как уже отмечалось, resolver должен установить доверие к открытому ключу зоны, из которой он получил ответ, перед тем как выполнить проверку подписи. Если такое доверие не может быть установлено с помощью построения доверенной цепочки, используя записи в списке доверенных anchor’ов, ответ должен помечаться как небезопасный. Причина, по которой отсутствует возможность построения доверенной цепочки, может состоять в том, что пространство имен DNS содержит только отдельные участки подписанных зон вместо непрерываемой иерархической последовательности подписанных зон. Предположим, что дерево DNS имеет следующую структуру.

    Тогда статус ответа (безопасный или небезопасный) зависит от списка хранящихся в resolver’е доверенных anchor’ов и от того, из какой зоны получен ответ.

    (рис 8.2) "Острова" подписанных зон

    Результат приведен в таблице.

    Возможные статусы ответа
    Доверенный anchor, инсталированный в поддерживающий DNSSEC resolver Статус DNSSEC ответа для запрошенных адресов
    www.example.ru www.example.org www.example.com
    None Insecure Insecure Insecure
    Root Secure Insecure Insecure
    .org Insecure Secure Insecure
    example.com Insecure Insecure Secure

    Подписывание зоны (DNSSEC-OP4)

    При подписывании зонного файла выполняется следующая последовательность действий:

  • Зонный файл сортируется в каноническом порядке доменных имен.
  • Создается ресурсная запись NSEC для каждого имени собственника в зоне.
  • Используется ключ KSK (KSK-private) для подписывания множества ресурсных записей DNSSEC. Ключ KSK определяется по наличию установленного флага SEP в RDATA в ресурсной записи DNSSEC.
  • Ключ ZSK (ZSK-private) используется для подписывания всех ресурсных записей в зоне (включая ресурсные записи DNSKEY и NSEC ).
  • Рекомендации:

  • Создание подписи с использованием ключа KSK должно выполняться off-line, используя KSK-private, также хранимый off-line; затем ресурсные записи DNSKEY вместе в ресурсной записью RRSIG должны быть размещены в первичном авторитетном name-сервере.
  • Хранение ключа ZSK-private и создание подписи с использованием этого ключа должно выполняться off-line; ресурсные записи вместе с RRSIG ресурсными записями затем могут быть записаны в первичный авторитетный name-сервер. Исключением является случай, когда name-сервер поддерживает динамические обновления. В этом случае ZSK-private должен располагаться в name-сервере.
  • Пример подписывания зоны

    Приведем пример, иллюстрирующий использование программы подписывания зоны (dnssec-signzone в BIND 9.3.x):

    dnssec-signzone –o <name of zone> -k <name of file containing KSK> 
       <location of zone file> <name of file containing ZSK>

    Для подписывания данных из зоны example.ru с KSK, расположенным в файле Kexample.ru.+005+76425.key, и ZSK, созданным заранее, следует выполнить следующую команду:

    dnssec-signzone –o example.ru -k Kexample.ru.+005+76425.key
       /var/named/zonedb.example.ru Kexample.ru.+005+28345.key

    Процесс подписывания зонного файла состоит из следующих шагов:

  • создание хэша для каждого множества ресурсных записей (ресурсных записей с одним и тем же именем собственника, TTL, классом и RRType );
  • создание подписи для каждого множества ресурсных записей (используя закрытый ключ ZSK-private);
  • размещение этой информации в новой ресурсной записи с типом RRSIG.
  • Ключ KSK подписывает только множество ресурсных записей DNSKEY, а ключ ZSK — все ресурсные записи в зонном файле. Участник, чей закрытый ключ используется для подписывания данных зоны, называется подписывающей стороной (signer или signing authority). В большинстве случаев подписывающая сторона является доменом, связанным с зоной. В ответ на DNS-запрос поддерживающий DNSSEC авторитетный name-сервер выдает соответствующие данные зоны вместе с цифровой подписью этих данных. Получатель проверяет цифровую подпись для полученных данных зоны, используя открытый ключ подписавшего (после установления доверия к открытому ключу).

    Создание доверенной цепочки и проверка подписи (DNSSEC-OP8)

    До тех пор, пока все зоны не станут подписанными, возможна ситуация, при которой зона является подписанной, но ее родитель не является подписанной зоной. Единственной точкой доверия для поддерживающего DNSSEC resolver’а в этом случае может считаться заранее сконфигурированный открытый ключ подписывающей стороны. При отсутствии другого источника, подтверждающего достоверность открытого ключа подписывающей стороны, требуется, чтобы открытый ключ был получен безопасным способом. В противном случае, если существует домен X, который может подтвердить достоверность открытого ключа домена Y, resolver может установить доверие к подписывающей стороне Y, используя X. Последовательность зон в дереве DNS, с помощью которых resolver устанавливает доверие к открытому ключу подписывающей стороны, называется цепочкой доверия.

    Будем считать, что цепочка доверия начинается с домена X и заканчивается доменом Y. Обычно домен X является непосредственным родителем Y и называется родительской зоной. Родительская зона обеспечивает доказательство достоверности открытого ключа дочерней зоны, подписывая ее ключ. Данная подпись хранится в ресурсной записи, называемой Delegation Signer ( DS ). Родительская зона также должна быть подписанной зоной, потому что неподписанная зона не умеет создавать подписи. Таким образом, подписанная зона может быть одного из следующих типов.

  • Изолированная безопасная зона – зона, которая является самоподписанной. Причина существования изолированных зон состоит в том, что родительская зона не является безопасной или нет возможности установить безопасное делегирование открытого ключа дочерней зоны и, следовательно, невозможно установить достоверность открытого ключа дочерней зоны, используя открытый ключ родительской зоны. В этом случае цепочки доверия не существует.
  • Глобально безопасная зона – ее родительская зона и, возможно, один или более предков вверх по DNS-дереву являются подписанными. При существовании такой иерархии подписанных зон и соответствующей иерархии сконфигурированных ключей resolver обычно имеет в качестве начала цепочки доверия открытый ключ зоны, которая является вершиной иерархии подписанных зон. Этот открытый ключ называется доверенный anchor. В resolver’е может существовать более одного ключа, которые являются доверенными anchor’ами и могут использоваться для построения цепочки доверия к открытому ключу зоны, чьи подписи resolver хочет проверять.
  • При защите данных зоны с помощью цифровой подписи в изолированной безопасной зоне следует выполнить следующие действия:

  • создать пару открытый / закрытый ключ;
  • обеспечить безопасное хранение (если необходимо, отдельно от name-сервера) закрытого ключа;
  • опубликовать открытый ключ с помощью включения ресурсной записи DNSKEY в зонный файл;
  • создать цифровые подписи для данных зоны (подписывание зоны).
  • Для глобально безопасной зоны существуют дополнительные задачи. Чтобы обеспечить возможность создания цепочки доверия, зона должна безопасным образом (внешним по отношению к сервисам DNS) передать родительской зоне свой открытый ключ (KSK-public). Затем родитель создает хэш этого открытого ключа дочерней зоны и хранит его в своей зоне в виде новой ресурсной записи, называемой DS. Он подписывает эту ресурсную запись DS, создавая ресурсную запись RRSIG. Родителю передается ключ KSK, а не ключ ZSK, потому что в противном случае происходило бы следующее. Всякий раз, когда зона изменяет свой ZSK, ее родитель должен был бы быть уведомлен о новом ключе. При этом родителю приходилось бы создавать новую ресурсную запись DS и снова подписывать ее. Для уменьшения подобной административной нагрузки родительской зоне передается ключ KSK. KSK используется для подписывания только ресурсных записей DNSKEY ; все остальные ресурсные записи в зонном файле подписываются ZSK. KSK является тем ключом, который опубликовывается у родителя. Родитель создает ресурсную запись DS, содержащую ключ KSK дочерней зоны, создает подпись для данного KSK и размещает ее в ресурсной записи RRSIG. Ключ KSK создается достаточно большим (например, 2048 бит) по сравнению с ключом ZSK, который может быть, например, длиной 1024 бит и, следовательно, должен изменяться менее часто.

    Просуммируем дополнительные задачи, которые имеют место при глобально безопасной зоне.

  • Безопасная пересылка открытого ключа KSK зоны своему родителю. Данная пересылка выполняется внешним способом и может не включаться ни в какие DNS-транзакции.
  • Родитель создает хэш открытого ключа KSK дочерней зоны и хранит хэш в ресурсной записи DS. Родитель также создает цифровую подпись (ресурсную запись RRSIG ) для данной ресурсной записи DS. Эта запись включается в информацию делегирования.
  • Зона, подписывающая ответ, является конечной точкой в цепочке доверия. Предварительно необходимо установить доверие к ZSK для зоны. Доверие к ZSK зоны устанавливается посредством следующих операций:

  • получение аутентифицированной ссылки от родителя;
  • аутентификация KSK дочерней зоны.
  • Для понимания обработки аутентифицированной ссылки, которая находится у родителя, необходимо посмотреть, как обрабатывается обычная ссылка DNS. В обычном DNS-запросе зона, которая не имеет авторитетной информации, относящейся к запросу для доменного имени в дочерней зоне, предоставляет ссылку, указывая множество ресурсных записей NS и соответствующие относящиеся к ним ресурсные записи (ресурсные записи, которые содержат IP-адреса серверов, указанных в ресурсных записях NS). При обычной обработке DNS-запроса следование по этим ссылкам будет следующим шагом обработки. Однако данный процесс является недостаточным с точки зрения установления цепочки доверия; информация о множестве ресурсных записей NS и связанных с ними ресурсными записями не может считаться аутентичной, потому что они не подписаны закрытым ключом аутентичного источника. Аутентификацию данной информации о ссылке родитель предоставляет криптографическим способом с помощью ресурсной записи DS.

    Рассмотрим пример того, как поддерживающий DNSSEC resolver проверяет правильность DNS-ответа от подписанной зоны example.ru. Resolver, следуя по своей цепочке доверия, начинающейся от доверенного anchor’а, аутентифицирует открытый ключ для зоны .ru и тем самым доверяет ему. Следовательно, он доверяет ресурсным записям NS и DS в зоне .ru. Из ресурсной записи NS и связанных с ней ресурсных записей resolver определяет, что авторитетный name-сервер для example.ru есть ns.example.ru, и он также знает его IP-адрес. Используя данную информацию, он идет на ns.example.ru и получает ключ KSK для example.ru из его множества ресурсных записей DNSKEY. Он вычисляет хэш данного ключа и сравнивает его с хэшем в ресурсной записи DS его родительской зоны .ru. Равенство этих двух хэшей означает, что ссылка из .ru зоны на example.ru зону аутентифицирована; аутентифицирован также и ключ KSK example.ru зоны. Так как ключ ZSK подписан ключом KSK example.ru, resolver может получить ключ ZSK example.ru аутентифицированным способом. Так как ключ ZSK подписывает все ресурсные записи в example.ru, действительность любого подписанного ответа из данной зоны может быть определена с использованием ключа ZSK, который уже аутентифицирован.

    Информация делегирования в родительской зоне в случае глобально безопасной зоны содержит следующее:

  • Ресурсные записи NS для дочерней зоны, которые включают в себя ссылки на name-сервера дочерних зон.
  • Относящиеся к ним ресурсные записи. Они определяют расположение серверов, перечисленных в ресурсных записях NS.
  • Ресурсную запись DS, которая включает в себя хэш KSK дочерней зоны.
  • Ресурсную запись RRSIG, которая является подписью для ресурсной записи DS.
  • Безопасность ответов кэширующего name-сервера

    Некоторые name-серверы могут быть авторитетными для одних зон и не являться авторитетными для других. Для зон, для которых они не являются авторитетными, они выполняют кэширование ресурсных записей из предыдущих запросов, полученных для этих зон. Поддерживающий DNSSEC кэширующий name-сервер имеет дополнительные задачи, связанные с его функциями кэширования. Эти задачи относятся к определению состояния безопасности ответа, содержащего ресурсные записи, и последующего его кэширования. Существуют три возможных состояния множества ресурсных записей.

  • Безопасное. Поддерживающий DNSSEC кэширующий name-сервер определяет состояние множества ресурсных записей как безопасное, если проверка соответствующей RRSIG прошла успешно. Проверка считается успешной, если может быть сформирована действительная цепочка от множества ресурсных записей до некоторого доверенного anchor’а. В этом случае множество ресурсных записей будет помещено в кэш и удалено, когда данные не будут считаться своевременными (в соответствии со значением TTL ) или более не проверяемыми (в соответствии с периодом действительности RRSIG ).
  • Небезопасное. Поддерживающий DNSSEC кэширующий name-сервер определяет состояние множества ресурсных записей как небезопасное, если ресурсные записи не являются безопасными в ответе. Это происходит, когда получено делегирование в неподписанную зону (делегирование, которое не имеет ресурсной записи DS ). Небезопасные множества ресурсных записей обрабатываются тем же способом, что и безопасные, но локальная политика на конечной системе может определить, что не следует доверять небезопасным делегированиям или данным в ответе.
  • Фальшивое. Поддерживающий DNSSEC кэширующий name-сервер определяет ответ как фальшивый, когда проверка подписей (ресурсных записей RRSIG ) не проходит или содержит некорректные поля (например, RRSIG истекла). Политика кэширования определяет, что делать с такими множествами ресурсных записей. Они могут быть либо отброшены, либо помещены в специальный BAD кэш, содержащий только те множества ресурсных записей, которые определены как фальшивые.
  • Когда поддерживающий DNSSEC кэширующий name-сервер получает запрос от не поддерживающего безопасность resolver’а, resolver получает как безопасные, так и небезопасные данные из кэша сервера. Так как данный запрос передан небезопасным способом, ресурсная запись DNSSEC не включается в ответ, тем самым применяется только обычная обработка DNS.

    Поддерживающие DNSSEC resolver’ы получают либо безопасные, либо и безопасные, и небезопасные данные от поддерживающего DNSSEC кэширующего сервера с установленным в заголовке ответа битом. Этот Authenticated Data ( AD ) бит в заголовке указывает, что множества ресурсных записей в ответе прошли или не прошли все проверки безопасности, выполненные кэширующим name-сервером. Клиент может решить, полагаться ли ему на данную проверку или выполнить свое собственное множество проверок безопасности.

    В некоторых случаях клиент может захотеть получить фальшивые данные от кэширующего name-сервера. В этом случае клиент посылает запрос с установленным Checking Disabled ( CD ) битом в заголовке DNS-сообщения. Это дает поддерживающему DNSSEC кэширующему name-серверу команду отвечать фальшивыми данными из BAD кэша. Клиент должен затем выполнить свою собственную проверку множества ресурсных записей в ответе. В таких типах ответов сервер не устанавливает AD бит, указывая, что ответ не прошел все проверки безопасности, выполняемые сервером.

    Дополнительные меры защиты для DNS Query / Response

    Спецификации DNSSEC для защиты транзакций DNS Query / Response определяет следующие типы ответов:

  • DNS-ответы от удаленных авторитетных name-серверов к локальным рекурсивным name-серверам;
  • DNS-ответы от удаленных кэширующих name-серверов к локальным рекурсивным name-серверам.
  • Так как большинство запросов первоначально исходят от stub resolver’а (от имени ПО клиента, требующего доступ к ресурсу в Интернете), защита сообщения DNS ответа должна также обеспечиваться для stub resolver’а от рекурсивного name-сервера. Способ обеспечения защиты на этом участке, который часто называется DNS "last hop", определяется природой stub resolver’а и топологией сети.

    Stub resolver может:

  • не поддерживать DNSSEC ;
  • – поддерживать DNSSEC и не проверять правильность ответа;
  • поддерживать DNSSEC и проверять правильность ответа.
  • Большинство stub resolver’ов, существующих сегодня, не поддерживают DNSSEC. Другими словами, они не имеют возможности проверить цифровые подписи, связанные с полученными множествами ресурсных записей, и также не могут отличить аутентифицированный ответ (проверяя его подпись) от неаутентифицированного ответа, передаваемого им их локальными рекурсивными name-серверами. Чтобы создать полную end-to-end защиту для DNS Query / Response, эти типы stub resolver’ов как минимум должны иметь возможность выполнять аутентификацию источника и проверку целостности данных в ответах, пришедших от рекурсивного name-сервера, который предоставляет им сервис разрешения имен. Такая возможность может быть обеспечена использованием подхода НМАС, заданного в TSIG (где описано использование НМАС для защиты транзакций зонных пересылок и динамических обновлений). В качестве альтернативы защиту можно обеспечить с помощью других механизмов сетевой безопасности, таких как IPsec. Независимо от механизма, используемого для обеспечения безопасности канала "last hop" (от рекурсивного name-сервера к stub resolver), данная возможность также должна присутствовать в поддерживающих DNSSEC и не проверяющих правильность ответа stub resolver’ах в дополнение к не поддерживающим DNSSEC stub resolver’ам. Поддерживающий DNSSEC, но не проверяющий правильность ответа stub resolver может увеличить доверие к этому ответу, проверяя значение AD бита в заголовке сообщения в полученном ответе. Данные типы stub resolver’ов могут затем использовать этот бит в качестве признака того, что рекурсивный name-сервер имеет возможность проверять действительность подписей для данных в ответе.

    В некоторых ситуациях установление доверенного пути между stub resolver’ами и рекурсивными name-серверами не предоставляется возможным. Примером является ситуация, когда рекурсивный name-сервер не расположен в административном домене предприятия, а выполняется у провайдера. В такой ситуации end-to-end защита может быть обеспечена только при наличии поддерживающего DNSSEC stub resolver’а. Поддерживающий DNSSEC stub resolver может уведомить локальный рекурсивный name-сервер, что он хочет сам выполнить проверку действительности подписи, установив Checking Disabled ( CD ) бит в свои сообщения запроса.

    Динамические обновления в поддерживающей DNSSEC-зоне

    Напомним возможные операции над зонным файлом при выполнении динамических обновлений. Можно считать, что имеются две основные операции: добавление ресурсных записей и их удаление. Обновление можно рассматривать как комбинацию из операций добавления и удаления. В небезопасной зоне добавление и удаление ресурсных записей не вызывают никакой другой операции в оставшихся ресурсных записях в зонном файле. Однако в безопасной зоне существует NSEC -ресурсная запись (и соответствующая RRSIG -ресурсная запись) на каждую область в пространстве имен.

    Имеется одна NSEC -ресурсная запись для каждого уникального имени владельца в зоне. Данная NSEC -ресурсная запись указывает на следующее имя владельца в каноническом порядке (упорядоченность, полученная лексикографической сортировкой доменных имен внутри зоны). NSEC -ресурсная запись для последнего имени владельца в каноническом порядке указывает на имя корня зоны (другими словами, имя зоны). Следовательно, концептуально эти записи образуют циклический список, в котором перечислены уникальные доменные имена в зоне

    Рассмотрим содержимое ресурсных записей NSEC для зоны example.ru. Предположим следующую каноническую упорядоченность доменных имен в зоне:

    example.ru
    	IN	SOA	 ns.example.ru admin.example.ru (12985 3600 2700 800 3600)
    	IN	RRSIG ( SOA )
    	IN	NS	 ns.example.ru.
    	IN	RRSIG ( NS )
    	IN	MX	 mail.example.ru.
    	IN	RRSIG ( MX )
    marketing.example.ru
    	IN	A	192.253.101.9
    	IN	RRSIG ( A )
    	IN	MX	 mail.example.ru
    	IN	RRSIG ( MX )
    sales.example.ru
    	IN	NS	 ns.example.ru.
    	IN	RRSIG ( NS )
    www.exapmle.ru
    	IN	A	 192.253.101.10
    	IN	RRSIG ( A )

    Псевдоформат (содержащий только информационные поля) NSEC -ресурсных записей, который охватывает интервалы пространства имен, относящиеся к доменным именам и типам ресурсных записей, что находятся в каждом имени в зонном файле, является следующим (ниже приведены четыре ресурсных записи NSEC ):

    example.ru	IN	NSEC	marketing.example.ru	(SOA NS MX RRSIG NSEC)
    marketing.example.ru	IN	NSEC	sales.example.ru	(A MX RRSIG NSEC)
    sales.example.ru	IN	NSEC	www.example.ru	(NS RRSIG NSEC)
    www.example.ru	IN	NSEC	example.ru	(A RRSIG NSEC)

    Заметим, что существует столько NSEC -ресурсных записей, сколько уникальных доменных имен в зоне. NSEC -ресурсная запись, чье имя есть example.ru, ссылается на следующий домен в каноническом порядке (например, marketing.example.ru ). То же самое выполняется для NS-ресурсных записей, относящихся к доменам marketing.example.ru и sales.example.ru. NSEC -ресурсная запись, относящаяся к последнему доменному имени (т.е, www.example.ru ), ссылается на первое доменное имя в зоне (т.е. example.ru ).

    Когда получен запрос для " package.example.ru IN A " (т.е. запрос для зоны, которой не существует), авторитетный сервер отвечает NSEC множеством ресурсных записей, доказывая, что имя не существует в зоне. В данном случае ответ от сервера будет состоять из обычного DNS-ответа, указывающего, что имя не существует, и следующей информации:

  • marketing.example.ru. NSEC ресурсная запись, указывающая, что не существует авторитетных имен между marketing.example.ru. и sales.example.ru.
  • www.example.ru. NSEC -ресурсная запись (последний домен в зоне), доказывающая, что не существует расширений имен в формате wildcard в зоне, которые могут быть расширены таким образом, чтобы соответствовать запросу;
  • Сопутствующие RRSIG -ресурсные записи для каждой из вышеупомянутых NSEC -записей, используемые для аутентификации.
  • Модификации NSEC -ресурсных записей, выполняется при следующих операциях:

  • добавление нового типа ресурсной записи в существующий домен;
  • удаление некоторого типа ресурсной записи из существующего домена;
  • добавление нового имени домена в зону;
  • удаление имени домена из зоны.
  • Добавление нового типа ресурсной записи в существующий домен

    Предположим, что новый почтовый хост добавлен в домен www.example.ru. Такое изменение требует добавления MX-ресурсной записи к данному имени домена. Следовательно, NSEC -ресурсная запись для www.example.ru должна быть модифицирована следующим образом:

    www.example.ru	IN	NSEC	example.ru	( A MX RRSIG NSEC )

    Удаление некоторого типа ресурсной записи из существующего домена

    Предположим, что предприятие example.ru решило, что больше не требуется отдельного почтового сервера для сотрудников отдела маркетинга. Такое изменение требует удаления почтового сервера ( RRType = MX ) из домена marketing.example.ru. Модифицированная NSEC -ресурсная запись теперь выглядит следующим образом:

    marketing.example.ru	IN	NSEC	sales.example.ru	(A RRSIG NSEC)

    Добавление нового имени домена в зону

    Чтобы заказчики могли работать в режиме on-line, предприятие решило добавить отдельный домен websales.example.ru. Также был добавлен отдельный name-сервер и множество новых хостов. Этот новый домен требует следующих изменений в зонном файле:

  • Добавление NSEC -ресурсной записи для нового домена. В этом случае должна быть добавлена NSEC -ресурсная запись для доменного имени websales.example.ru и должно быть определено ее расположение в каноническом порядке. Данная NSEC -ресурсная запись должна быть вставлена таким образом, чтобы указывать на следующее доменное имя в новом каноническом порядке. Добавляемый name-сервер и существовавшие ранее хосты должны отображаться в этой новой ресурсной записи посредством того, что NS и А указываются в поле списка типов ресурсных записей, как показано ниже. Соответствующая RRSIG -ресурсная запись должна быть создана.

    websales.example.ru	IN	NSEC	www.example.ru (A NS RRSIG NSEC)
  • NSEC -ресурсная запись, относящаяся к домену, непосредственно предшествующая добавленному домену (в каноническом порядке) должна быть модифицирована таким образом, чтобы указывать на только что добавленный домен. NSEC -ресурсная запись должна теперь указывать на домен websales.example.ru.

    sales.example.ru	IN	NSEC	websales.example.ru (A RRSIG NSEC)
  • Создается новая ресурсная запись для подписи (RRSIG-ресурсная запись), соответствующая данному модифицированному NSEC -множеству ресурсных записей.
  • Удаление домена из зоны

    Предположим, предприятие решило, что все продажи теперь будут осуществляться только через Интернет. Так как хосты были созданы для выполнения данной функции в новом домене websales.example.ru, хосты в домене sales.example.ru больше не нужны. Поэтому все ресурсные записи, принадлежащие домену, должны быть удалены из зоны. Данное изменение включает следующие операции:

  • NSEC -ресурсная запись, соответствующая удаляемому домену, должна быть удалена, т.е. NSEC -ресурсная запись, относящаяся к домену sales.example.ru, удаляется;
  • NSEC -ресурсная запись, относящаяся к домену, непосредственно предшествующему удаленному домену, модифицируется таким образом, чтобы указывать на домен, непосредственно следующий за удаленным доменом (т.е. запись должна указывать на ту, на которую указывала удаленная NSEC -ресурсная запись). В данном случае NSEC -ресурсная запись для marketing.example.ru должна указывать на домен websales.example.ru следующим образом:

    marketing.example.ru	IN	NSEC	websales.example.ru (A MX RRSIG NSEC)
  • Краткое резюме

    Перечислим основные принципы, которым необходимо следовать при развертывании DNSSEC.

  • Размер ключа KSK должен быть достаточно большим, потому что это имеет большее влияние на безопасность DNS при компрометации ключа KSK. Период действительности (период обновления) для ключа ZSK должен быть достаточно коротким, потому что существует больший риск для угадывания ключа.
  • Закрытые ключи, соответствующие и ZSK, и KSK, не должны храниться в поддерживающем DNSSEC первичном авторитетном сервере, если name-сервер не должен выполнять динамических обновлений. Если динамические обновления поддерживаются, закрытый ключ ZSK, должен храниться на name-сервере с соответствующим управлением доступом на уровне файла и директории или в криптографически защищенном виде.
  • Создание подписи с использованием ключа KSK должно выполняться в режиме off-line с использованием ключа KSK-private, хранящегося off-line; затем множество ресурсных записей DNSKEY вместе с его RRSIG -ресурсной записью должны быть записаны в зонный файл первичного авторитетного name-сервера.
  • Хранение ключа ZSK-private и создание подписи с использованием данного ключа должно выполняться в режиме off-line; множество ресурсных записей вместе с RRSIG -ресурсными записями может затем быть записано в зонный файл первичного авторитетного name-сервера. Исключением является случай, когда name-сервер поддерживает динамические обновления. При этом ключ ZSK-private должен располагаться на name-сервере.
  • Минимизация раскрываемой DNS-информации

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

    Существует вероятность, что атакующий попытается получить информацию о локальной сети с использованием сервисов DNS и использует данную информацию для выполнения атаки. Некоторые типы информации, например, IP-адреса публичных серверов, предназначены для того, чтобы быть доступными всем. Что касается другой информации, администратору DNS рекомендуется выполнить определенные действия при создании зонного файла, которые бы сводили раскрытие локальной сети к минимуму. Данный процесс должен быть выполнен до подписывания зоны. Информация о сети, которая должна быть абсолютно закрытой, не должна публиковаться в DNS совсем.

    Выбор значений параметров в SOA RR

    Первое действие, которое должен предпринять администратор DNS, – это гарантировать, что значения данных ресурсной записи SOA являются корректными. Значения в данной ресурсной записи определяют взаимодействие между первичным и вторичными серверами в зоне, а именно, с какой периодичностью вторичные серверы должны выполнять зонные пересылки с первичного сервера. Эти данные также содержат минимальное значение TTL, которое говорит клиентским resolver’ам, как долго находятся данные в кэше. Смысл этих полей следующий:

  • Serial Number. Serial number в SOA RDATA используется для указания вторичным серверам, что произошли изменения в зоне и зонная пересылка должна быть выполнена. Данное значение должно возрастать при изменении данных в зоне.
  • Refresh Value. Refresh value говорит вторичным серверам, сколько секунд проходит между зонными пересылками. Для зон, которые часто обновляются, данное значение должно быть маленьким (от 20 минут до 2 часов). Для зон, которые обновляются не часто, может быть указано большее число (от 2 до 12 часов). Для подписанных зон данное значение не должно быть больше, чем длина периода действительности RRSIG, чтобы гарантировать, что вторичные зоны не содержат зон с истекшими RRSIG. Данное значение также может зависеть от ограничений, связанных с шириной пропускания на стороне первичного сервера. Заметим, что если первичный сервер создает сообщение NOTIFY при своем обновлении, вторичный сервер будет немедленно выполнять зонную пересылку и не ждать, пока нужно будет обновлять с соответствии со значением refresh.
  • Retry Value. Retry value является периодом времени, через который вторичный сервер должен попытаться выполнить зонную пересылку, если предыдущая попытка окончилась неудачно. Данное значение должно быть делителем значения refresh. Возможный диапазон значений для данного поля может быть от 5 минут до 1 часа.
  • Expire Value. Expire value является временем, в течение которого вторичный сервер должен считать зонную информацию действительной, если он не может установить соединение с первичным сервером для получения обновления. Данное поле позволяет вторичным серверам продолжать функционировать при различных сетевых сбоях. Значение зависит от частоты изменений в зоне и надежности соединения между name-серверами, оно может быть от 2 до 4 недель.
  • Minimum TTL. Значение minimum TTL является значением по умолчанию для всех множеств ресурсных записей в зоне, если они сами не имеют собственного значения TTL, указанного в зонном файле. Данное значение зависит от того, как часто информация изменяется в зоне. Если зона статическая, значение может быть большим; если динамическая, значение должно быть маленьким. Однако для зон, которые используют DNSSEC значение должно быть достаточно большим, чтобы информация оставалась в кэше до тех пор, пока она является действительной. Считается, что минимальным значением должно быть 30 секунд, рекомендуемый диапазон – от 30 минут до 5 дней.
  • Рекомендации:

  • Значение refresh в SOA ресурсной записи зоны должно быть выбрано в зависимости от частоты обновлений. Если зона подписана, значение refresh должно быть меньшим, чем период действительности RRSIG.
  • Значение retry в SOA ресурсной записи зоны должно равняться 1/10 от значения refresh.
  • Значение expire в SOA ресурсной записи зоны должно быть от 2 до 4 недель.
  • Минимальное значение TTL должно быть между 30 секундами и 24 часами, чтобы гарантировать, что устаревшие множества ресурсных записей будут очищены из кэшей клиентов.
  • Утечка информации и Informational RRTypes

    Существует несколько типов ресурсных записей, которые сообщают информацию о сети, хостах или сервисах. К этим ресурсным записям относятся Responsible Person ( RP ) запись, Host Information ( HINFO ) запись, Location ( LOC ) запись и различные Text рекурсивные записи ( TXT ). Хотя данные типы записей предназначены для информирования пользователей, не имеющих плохих намерений, они также позволяют атакующему получить информацию о хостах в локальной сети для того, чтобы попытаться использовать их уязвимости. Например, атакующий может запросить HINFO -записи, просмотреть перечисленные хосты и определить ОС и платформы, которые имеют известные уязвимости. Следовательно, следует быть очень осторожным, включая данные типы записей в зонный файл.

    Рекомендации:

  • Администратор DNS не должен включать в зонный файл или во внешний view зоны (если используется split DNS) HINFO, RP, LOC или другие типы ресурсных записей, которые могут разглашать информацию, полезную атакующему.
  • Администратор DNS должен просмотреть все данные, которые содержатся в ресурсной записи TXT, для проверки возможной утечки информации, перед тем как добавлять их в зонный файл.
  • Использование периода действительности RRSIG для минимизации последствий компрометации ключа

    Самым лучшим способом минимизировать последствия компрометации ключа является ограничение периода действительности RRSIG как в самой зоне, так и в родительской зоне. Это позволяет ограничить время, в течение которого атакующий может использовать скомпрометированный ключ для подделки ответов. Атакующий, который имеет скомпрометированный ключ ZSK, может использовать данный ключ только в течение интервала действительности подписи, созданной ключом KSK. Атакующий, который скомпрометировал ключ KSK, может использовать его только в интервале, указаном в DS -ресурсной записи, которая является точкой делегирования у родителя. Но если определить данный период действительности коротким, то потребуется частое переподписывание в зонном файле родителя.

    Для минимизации влияния скомпрометированного ключа ZSK следует установить период действительности подписи RRSIG, охватывающей DS -ресурсные записи, в диапазоне от нескольких дней до одной недели. Данное переподписывание не требует частого обновления родительского ключа ZSK, а плановое обновление ключа ZSK должно выполняться через фиксированные интервалы.

    Рекомендации:

  • Период действительности для RRSIG, охватывающих множество ресурсных записей DNSKEY зоны, должен быть в диапазоне от двух дней до одной недели. Такое значение помогает уменьшить период существования уязвимости, который может возникнуть в результате компрометации ключа.
  • Зона, имеющая делегированную дочернюю зону, должна иметь период действительности от нескольких дней до одной недели для RRSIG, охватывающей DS-ресурсную запись для делегированной дочерней зоны. Такое значение помогает снизить период уязвимости в дочерней зоне, возникший в результате компрометации ее ключа KSK.
  • Администрирование операций для обеспечения безопасности сервисов DNS

    Мы рассмотрели операции развертывания и использования возможностей DNSSEC для защиты транзакций запросов и ответов DNS. Рассмотрим операции администрирования, которые должны выполняться периодически, в поддерживающей DNSSEC зоне.

    Плановое обновление ключа (время жизни ключа)

    Ключи, используемые для подписывания зоны ( ZSK ), и ключи подписывания ключа ( KSK ) должны периодически меняться, потому что они становятся уязвимыми после определенного периода использования. Компрометация закрытого ключа означает, что любой хост может подделать данные зоны, подписывая ложное множество ресурсных записей закрытым ключом, тем самым полностью аннулируя цели, которые преследовались при подписывании зонного файла. Обновление ключа может быть плановым (плановое обновление) или может иметь место в результате каких-либо чрезвычайных обстоятельств (чрезвычайное обновление). Чрезвычайное обновление происходит по одной из следующих причин:

  • закрытый ключ зоны скомпрометирован;
  • закрытый ключ зоны потерян, и зона обновлена до истечения периода действительности RRSIG, но нет возможности подписать новые данные зоны.
  • При плановом обновлении ключа период времени, после которого ключи должны быть изменены, определяется несколькими факторами:

  • большой размер зонного файла, большое количество данных, для которых создаются подписи, делает процесс взлома закрытого ключа более легким;
  • чем меньше размер закрытого ключа, тем легче его взломать.
  • Основываясь на этих факторах, в каждой зоне определяется частота обновления ключей для ZSK и KSK. Напомним, что ключ KSK (KSK-private) используется для подписывания только множества ресурсных записей DNSKEY, в то время как ключ ZSK (ZSK-private) используется для подписывания всего зонного файла. Независимо от объема данных, ключ ZSK используется намного чаще, а именно, в следующих случаях:

  • добавляется новая ресурсная запись (например, добавлен новый почтовый сервер, и, следовательно, добавлена новая ресурсная запись MX в зонный файл);
  • существующие RDATA в ресурсной записи изменяются (например, IP-адрес сервера изменился, и, следовательно, существующая ресурсная запись A должна быть заменена);
  • истекает период действительности подписи для ресурсной записи RRSIG.
  • Рекомендация:

    Ключ KSK должен обновляться менее часто, чем ключ ZSK. Рекомендуемая частота обновления для ключа KSK равна одному году (при использовании RSA/MD5 с длиной ключа 2048 бит), а ключ ZSK должен обновляться каждый месяц (при использовании RSA/MD5 с длиной ключа 1024 бит).

    Воздействие обновления ключа на оставшуюся часть DNS зависит от того, является ли безопасная зона локально безопасной или глобально безопасной (как часть цепочки доверия).

    Обновление ключа в локально безопасной зоне

    Зона, которая является локально безопасной имеет ключ ZSK и, возможно, ключ KSK, который сконфигурирован в resolver’ах клиента как доверенный ключ. Определенные сложности возникают, когда любой из ключей обновляется, хотя наличие ключа KSK для локально подписанной зоны делает обновление ключа ZSK более легким. Когда зона изменяет свой ключ ZSK и имеется ключ KSK, который не изменяется, проблема состоит в том, что следует ввести новый ключ, в то время как старый ключ может находиться в некоторых удаленных resolver’ах или кэшах name-серверов.

    Решение состоит в предварительном опубликовании нового открытого ключа перед тем, как выполнить обновление. Администратор DNS должен опубликовать новый ключ как ресурсную запись DNSKEY в зонном файле перед тем, как он будет использоваться для создания подписей. Процесс состоит в следующем:

  • создать новую пару ключей;
  • добавить открытый ключ из новой пары в зонный файл ( DNSKEY -ресурсная запись);
  • подписать зону с использованием закрытого ключа из текущей активной пары и подписать ключом KSK новый открытый ключ ( DNSKEY -ресурсная запись);
  • подождать время, равное минимальному TTL для записи зоны;
  • удалить старую DNSKEY -ресурсную запись из множества ключей зоны и сделать истекшими RRSIG -ресурсные записи;
  • переподписать DNSKEY множество ресурсных записей новым ключом ZSK.
  • Следует помнить, что обновлять ключ ZSK необходимо постоянно. Администратор может выполнить первые три шага и подождать определенное время перед тем, как удалить старый DNSKEY из множества ключей, при этом продолжая подписывать зону старым DNSKEY, до тех пор, пока RRSIG в зоне не истекут. Данная процедура позволяет администратору выполнять обновление ключа оптимально.

    Зоны, которые заранее опубликовывают новый открытый ключ, должны соблюдать следующие принципы:

  • безопасная зона, которая предварительно опубликовывает свой открытый ключ, должна сделать так, чтобы по крайней мере один период TTL завершался до времени обновления ключа;
  • после удаления старого открытого ключа зона должна создать новую подпись ( RRSIG -ресурсную запись) для оставшихся ключей ( DNSKEY -ресурсные записи) в зонном файле.
  • При обновлении KSK безопасная зона может не знать, какие resolver’ы хранят открытый ключ в качестве доверенного anchor’а. Если сетевой администратор имеет внешний способ (хотя бы по e-mail) контактирования с администраторами resolver’ов, которые хранят открытые ключи в качестве доверенных anchor’ов, сетевой администратор должен послать соответствующее уведомление и установить безопасные способы распространения нового доверенного anchor’а. Если такого внешнего способа не существует, администратор ничего не сможет сделать, за исключением предварительного опубликования нового ключа KSK, давая администраторам resolver’ов достаточно времени для получения нового ключа KSK.

    Обновление ключа в глобально безопасной зоне

    Глобально безопасная зона использует два множества ключей: ZSK и KSK.

    Обновление ключа ZSK в глобально безопасной зоне

    Операции, выполняемые при обновлении ключа ZSK в глобально безопасной зоне не отличаются от тех, которые выполняются при обновлении ключа ZSK в локально безопасной зоне.

    Обновление ключа KSK в глобально безопасной зоне

    Ключ KSK (KSK-public) является ключом, для которого родитель данной безопасной зоны обеспечивает доверие. Для этого он использует ресурсную запись DS, которая содержит хэш дочернего ключа KSK. Делегирующий родитель подписывает данную ресурсную запись DS своим собственным ключом ZSK для того, чтобы отношения доверия осталось в силе. Для обновления ключа KSK дочерней зоны следует выполнить следующее:

  • создать новый ключ KSK и добавить его в множество зонных ключей;
  • подписать множество ключей зоны новым ключом KSK, а также старым ключом KSK (ключом, который истекает);
  • передать новый ключ KSK своему родителю таким способом, при котором родитель мог бы аутентифицировать этот ключ;
  • в родительской зоне создать новую DS -ресурсную запись (которая заменит старую DS -ресурсную запись), содержащую хэш нового ключа KSK, затем подписать заново созданную DS -ресурсную запись.
  • Для того чтобы родитель мог аутентифицировать новый ключ KSK (будем называть его KSK2), основываясь на существующей цепочке доверия, дочерняя зона при выполнении обновления ключа создает DNSKEY -множество ресурсных записей, используя DNSKEY -ресурсные записи существующего ключа вместе с новой DNSKEY -ресурсной записью для KSK2. Затем создаются две подписи (две RRSIG -ресурсные записи) – одна с использованием существующего ключа KSK, другая с использованием нового ключа KSK2. Затем родителю посылается заново созданное DNSKEY множество ресурсных записей вместе с RRSIG -ресурсными записями (во множественном числе, потому что существуют две подписи, соответствующие ключам KSK и KSK2). Множество ресурсных записей, посылаемое родителю, приведено ниже в некотором псевдоформате:

    example.ru	DNSKEY	<key-id: 43543>	/* новый KSK*/
    example.ru	DNSKEY	<key-id: 78546>	/* существующий KSK*/
    example.ru	DNSKEY	<key-id: 98342>	/* ZSK*/
    example.ru	RRSIG (DNSKEY)	<signer:example.ru signing-key:78546> 
                                        /* весь DNSKEY RRset подписан существующим KSK */
    example.ru	RRSIG (DNSKEY)	<signer:example.ru signing-key:43543> 
                                       /* весь DNSKEY RRset подписан новым KSK */

    При получении данной информации родитель выполняет следующие действия:

  • проверяет правильность подписи, сделанной ключом KSK 78456 для заново созданного множества ресурсных записей DNSKEY, которое включает новый ключ KSK2. Это выполняется с использованием первой из RRSIG -ресурсных записей заново созданного DNSKEY -множества ресурсных записей, (записи, в которой указан 78456 в качестве ключа подписывания) и своей собственной DS -ресурсной записи;
  • проверяет аутентичность ключа KSK2 по открытому ключу KSK2 дочерней зоны. Для этого он проверяет вторую RRSIG -ресурсную запись (запись, в которой указан 43543 в качестве ключа подписывания) из DNSKEY -множества ресурсных записей;
  • создает новую DS -ресурсную запись, содержащую хэш нового ключа KSK2;
  • создает RRSIG для новой DS -ресурсной записи ключа KSK2.
  • Когда данные задачи выполнены родителем, процесс обновления ключа KSK с точки зрения дочерней зоны полностью выполнен. Родительская зона должна затем обновить свой зонный файл с новой DS -ресурсной записью. Это аналогично обновлению любого другого множества ресурсных записей, которое включает создание, если требуется, любых новых RRSIG. Данное обновление может выполняться автоматически. Это означает, что старая DS -ресурсная запись может быть сброшена и одновременно новая DS -ресурсная запись добавлена. При этом будет выполнено только одно переподписывание в зоне.

    Делегированная дочерняя зона должна сохранять истекший ключ KSK в своем множестве ключей до тех пор, пока она не получит подтверждение, что родительская зона выполнила соответствующее обновление DS для гарантии целостности цепочки аутентификации при обновлении ключа KSK. После того как дочерняя зона получает подтверждение, что делегирующий родитель обновил информацию делегирования для дочерней зоны, администратор дочерней зоны должен удалить старый ключ KSK из набора ключей и переподписать с использованием ключа ZSK новый ключ KSK.

    Аварийное обновление ключа

    Аварийное обновление ключа происходит тогда, когда один или более ключей в зоне ( ZSK или KSK компрометируются или закрытая компонента потеряна и необходимо выполнить переподписывание. Данный тип обновления не является плановым, поэтому велика вероятность разорвать цепочку аутентификации, если администратору зоны необходимо выполнить процесс обновления.

    Аварийное обновление ZSK

    Администратор DNS может обновить компрометированный ключ ZSK более быстро, чем компрометированный ключ KSK, потому что компрометация влияет только на зону. Возможность более быстрого обновления является другой причиной, по которой администратор зоны выполняет обновление ключа ZSK более часто. Если администратор зоны имеет новую DNSKEY -ресурсную запись, уже опубликованную в зоне в качестве части набора ключей зоны (первые три шага в процессе, который рассматривался ранее), следующий шаг зависит от того, является ли ключ компрометированным.

    Если используемый в текущий момент ключ ZSK компрометирован, администратор зоны может немедленно заменить его на новый ключ. Нет необходимости ждать, чтобы истек период TTL, потому что новый ключ уже опубликован к данному моменту. Администратор может просто удалить старые RRSIG из зоны и переподписать новым ключом ZSK раньше, чем предполагалось сделать плановое обновление. Функционирование DNS должно продолжиться нормально после такого переподписывания, без разрыва цепочки аутентификации.

    Если новый ключ ZSK (следующий ключ ZSK, который будет использоваться) компрометирован, его следует заменить немедленно в множестве ключей зоны. Такая замена также может выполниться автоматически, потому что новый ключ не использовался для создания каких-либо RRSIG ; должно быть переподписано только множество ключей зоны. Также возможно просто удалить компрометированный ключ и заменить его новым ключом ZSK за одно обновление.

    Однако существует опасность, что атакующий использовал скомпрометированный ключ ZSK для подделки ответов, исходящих из зоны. Такая опасность реальна в течение того времени, какое текущий ключ KSK остается активным, в соответствии с периодом обновления ключа KSK. После того как ключ ZSK был компрометирован, администратор зоны должен инициировать обновление ключа KSK как можно скорее.

    Аварийное обновление KSK

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

    Рекомендация:

    Администратор DNS должен иметь способ аварийного контактирования с администратором родительской зоны, чтобы иметь возможность выполнять аварийное обновление ключа KSK.

    Переподписывание зоны

    Зонный файл переподписывается (т.е. заново создаются RRSIG -ресурсные записи), в следующих ситуациях:

  • подписи истекли или истекут в скором времени;
  • содержимое зонного файла изменилось в результате динамического обновления;
  • один из ключей подписывания скомпрометирован или заменяется в плановом порядке.
  • Существуют две стратегии для переподписывания данных зоны.

  • Полное переподписывание. Все существующие записи подписи ( RRSIG -ресурсные записи) удаляются, зонный файл сортируется заново, все NSEC -ресурсные записи создаются, и, наконец, создаются новые записи подписи. Полное переподписывание выполняется в следующих ситуациях:

  • зонный файл создается из некоторой back-end базы данных;
  • администратор зоны установил выполнение данного переподписывания в пакетном режиме для выполнения на конкретный день и время, основываясь на времени истечения действительности подписи.
  • Инкрементальное переподписывание. NSEC ресурсные записи модифицированы, потому что существующее множество ресурсных записей удалено, NSEC -ресурсные записи добавлены, потому что новое множество ресурсных записей добавлено в зонный файл. В этом случае подписи создаются только для тех ресурсных записей, которые были изменены. Инкрементальное переподписывание выполняется, когда изменения в содержимом зонного файла минимальны, что обычно бывает после динамического обновления.
  • Рекомендации:

  • Периодическое переподписывание должно быть запланировано до истечения действительности RRSIG -ресурсных записей, существующих в зоне. Это уменьшит риск того, что подписанная зона будет фиктивной в результате истекших подписей.
  • Серийный номер в SOA ресурсной записи должен быть увеличен перед переподписыванием зонного файла. Если данная операция не сделана, вторичные name-серверы могут не получить новые подписи, потому что они выполняют обновление исключительно на основе соответствия серийного номера SOA. В результате этого некоторые поддерживающие безопасность resolver’ы не будут иметь возможность проверять подписи (и таким образом иметь безопасный ответ), а другие — будут.
  • Страницы:

    Рассмотрим способ, которым DNSSEC обеспечивает защиту транзакций DNS Query / Response с помощью аутентификации источника, проверки целостности данных и аутентифицированного отказа при отсутствии запрошенных данных. Опишем механизмы, используемые DNSSEC операции, с помощью которых эти механизмы реализуются, и способы обеспечения безопасности этих операций. Другими словами, опишем принципы безопасного развертывания DNSSEC.

    Для гарантирования end-to-end защиты транзакций запросов и ответов DNS необходимы дополнительные меры защиты (отличные от тех, которые определены в спецификации DNSSEC – такие как обеспечение безопасности коммуникационного пути между локальными поддерживающими DNSSEC кэширующим name-сервером и stub resolver’ами. Эти меры также будут обсуждаться далее.

    Механизмы и операции DNSSEC

    Механизмы DNSSEC определяют две основных операции: подписывание (и связанные с этим действия) и проверка подписи. Рассмотрим эти операции.

    Типы записей, используемых DNSSEC

    Первой задачей является создание цифровых подписей для ресурсных записей в зонном файле. DNSSEC предполагает создание подписи для всего RRSet (множества ресурсных записей c одним и тем же именем владельца, классом и типом), а не для каждой ресурсной записи. Цифровая подпись и связанная с ней информация (ID использованного ключа, признаки начала и конца подписываемого блока и т.п.) содержатся в специальной ресурсной записи RRSIG. Строка, содержащая открытый ключ, который используется для проверки подписи (в RRSIG ), содержится в ресурсной записи с типом DNSKEY. Другой тип ресурсной записи, NSEC (Next Secure) используется для перечисления типов ресурсных записей (в каноническом порядке), существующих в данном домене. Подписи (т.е. ресурсные записи RRSIG ) для данного типа ресурсных записей создаются, кроме того, для обеспечения аутентифицированного доказательства невозможности создания ответов на запросы для несуществующего типа ресурсных записей. Дополнительно существует необязательный тип ресурсной записи DS (Delegation Signer) для случая, когда зона хочет разрешать выполнить проверку подлинности открытых ключей своих дочерних зон. Детальный синтаксис каждого из этих дополнительных типов ресурсных записей, введенных спецификацией DNSSEC указан в RFC 4034. Самой важной из них является ресурсная запись RRSIG, потому что именно она содержит строку подписи.

    Ресурсная запись RRSIG, подобно другим ресурсным записям, содержит поля имени собственника, TTL, класс, RRType и RDATA. Цифровая подпись и вся связанная с ней информация находится в поле RDATA. Расположение поля RDATA в ресурсной записи RRSIG со всеми подполями показано ниже. Также приведено краткое описание каждого подполя.

    Содержимое поля RDATA в ресурсной записи RRSIG
    RRRtype Covered Algorihm Code Labels
    Original TTL
    Signature Expiration
    Signature Inception
    Key Tag Signer's NAme
    Encoded Signature
    Поле RRType Covered имеет тип ресурсной записи, для которого RRSIG содержит подпись.

    Поле Algorithm Code есть целое число, равное коду соответствующего криптографического алгоритма, использованного для создания подписи.

    Поля Labels и Original TTL содержат количество ресурсных записей, для которых создана подпись, и значение TTL для множества ресурсных записей, для которых создана данная подпись.

    Значения Signature Expiration и Signature Inception являются абсолютными значениями времени, которые определяют период действительности подписи, – период времени, в течение которого данная RRSIG считается действительной для зоны.

    Поля Key Tag и Signer’s Name являются хэшем и доменным именем (FQDN) для ресурсной записи DNSKEY, которая будет использоваться клиентом для проверки действительности подписи.

    Наконец, последнее поле содержит саму подпись.

    Зона, которая содержит эти дополнительные ресурсные записи наряду с обычными ресурсными записями, называется подписанной зоной. Name-сервер, который создает такие подписанные зоны и включает в свой ответ соответствующие подписи (т.е. соответствующие RRSIG ) вместе в запрошенными ресурсными записями, называется поддерживающим DNSSEC name-сервером.

    Список операций DNSSEC

    Ответ, пришедший из подписанной зоны, называется подписанным ответом. Resolver, который имеет возможность проверять подписи в подписанном ответе, называется поддерживающий DNSSEC validating resolver. Прежде чем resolver сможет проверить подпись, созданную для множества ресурсных записей и полученную им в ответе, используя открытый ключ зоны, посланный в ответе, он должен установить доверие к этому открытому ключу. В DNSSEC данное требование означает, что resolver должен выполнить так называемое построение доверенной цепочки. Для этого resolver рассматривает список известных доверенных ключей (называемых trust anchors ) и создает цепочку открытых ключей, с помощью которой он устанавливает доверие к открытому ключу зоны, полученному им в ответе. Для построения цепочки используется иерархия пространства имен DNS. В идеале trust anchors в resolver’е содержат открытые ключи root’а (если root-сервер поддерживает DNSSEC или открытые ключи зон, расположенных ниже в иерархии. Список trust anchors в resolver’е не строится с помощью транзакций DNS; для этого используется некоторый внешний механизм.

    Процессы DNSSEC описанные выше, включают несколько операций name-сервера и несколько операций resolver’а. Операциями name-сервера являются следующие:

  • DNSSEC-ОР1: создание пары открытый – закрытый ключ.
  • DNSSEC-ОР2: безопасное хранение закрытых ключей.
  • DNSSEC-ОР3: распространение открытого ключа.
  • DNSSEC-ОР4: подписывание зоны.
  • DNSSEC-ОР5: обновление ключа (изменение ключа).
  • DNSSEC-ОР6: переподписывание зоны.
  • Операциями resolver’а являются:

  • DNSSEC-ОР7: конфигурирование доверенных anchors.
  • DNSSEC-ОР8: создание цепочки доверия и проверка подписи.
  • Операции name-сервера с DNSSEC-ОР1 по DNSSEC-ОР4 и операции resolver’а DNSSEC-ОР7 и DNSSEC-ОР8 выполняются либо перед развертыванием DNSSEC, либо перед операциями обеспечения безопасности запросов и ответов (таких как обработка подписанных ответов и проверка подписей). Рассмотрим эти операции в первую очередь. Оставшиеся операции name-сервера (обновление ключа и переподписывание зоны – DNSSEC-ОР5 и DNSSEC-ОР6 соответственно) выполняются периодически после полного развертывания DNSSEC и будут приведены в конце лекции.

    Создание пары открытый / закрытый ключи (DNSSEC-ОР1)

    DNSSEC определяет создание и проверку цифровых подписей с использованием асимметричных ключей. Это требует создания пары открытый / закрытый ключи. Для облегчения операций администрирования, которые должны выполняться периодически, таких как обновление ключа и переподписывание зоны, необходимо иметь два различных типа ключей. Один тип ключа называется Key Signing Key ( KSK Ключ данного типа (а именно, закрытый ключ, называемый KSK-private) будет использоваться только для подписывания ключа, содержащегося в зонном файле в ресурсной записи с типом DNSKEY . Другой тип ключа называется Zone Signing Key ( ZSK ) (соответствующий закрытый ключ называется ZSK-private). Этот ключ используется для подписывания всех множеств ресурсных записей в зоне (включая множество ресурсных записей DNSKEY ). Административное разграничение между KSK- и ZSK-ключами осуществляется с помощью флага Secure Entry Point ( SEP ) в ресурсной записи DNSKEY, который присутствует в открытых ключах, называемых KSK-public и ZSK-public, соответственно.

    Причина, лежащая в основе создания двух типов пар ключей, состоит в определении отдельного набора функций для каждого типа ключа для того, чтобы уменьшить сложность задач, связанных с обновлением ключей и переподписыванием зоны. KSK (KSK-private) используется для подписывания множества ключей (т.е. множества ресурсных записей DNSKEY ) и является тем ключом, который передается родительской зоне для использования его при аутентифицированном делегировании. Аутентифицированное делегирование выполняется посредством создания ресурсной записи DS, содержащей хэш дочернего KSK-public ключа, и затем создания соответствующей подписи (ресурсной записи RRSIG ), используя свой собственный ZSK-private. Ключ KSK (KSK-public) также может использоваться в качестве доверенного anchor для установления доверенных цепочек при проверке подписей.

    Ключ ZSK (ZSK-private) применяется для подписывания зонного файла (всех множеств ресурсных записей). Открытый ключ (ZSK-public) не посылается родителю, он всегда хранится в зоне.

    При создании пар ключей KSK и ZSK необходимо выбрать следующие параметры:

  • алгоритм цифровой подписи;
  • длину ключа;
  • период, в течение которого ключ будет использоваться.
  • Выбор алгоритма цифровой подписи основывается на принятых стандартах. Обычно рассматриваются следующие алгоритмы:

  • DSA;
  • RSA;
  • Elliptic Curve DSA (ECDSA).
  • Из этих трех алгоритмов наиболее широко распространены RSA и DSA. С точки зрения производительности RSA и DSA имеют сопоставимую скорость создания подписи, но DSA является более медленным при проверке, а RSA — более быстрым. Единственным обязательным для реализации в DNSSEC алгоритмом является RSA с MD5. Считается, что как минимум name-серверы и клиенты должны иметь возможность использовать RSA. Предполагается, что по крайней мере один ZSK для зоны использует алгоритм RSA.

    Выбор длины ключа определяется соотношением между риском компрометации ключа и производительностью. Производительность определяется временем создания подписи и временем проверки подписи. Длина пакета DNS-ответа также должна учитываться, потому что ресурсные записи DNSKEY посылаются в дополнительном разделе DNS-ответа. Так как ключ KSK используется только для подписывания множества ключей (множества ресурсных записей DNSKEY ), в этом случае производительность не является решающим фактором. Однако компрометация ключа KSK может иметь большее негативное воздействие, так как этот ключ является фактически мастер-ключом для зоны. Компрометация ключа KSK в зоне, расположенной высоко в DNS-иерархии, может подвергнуть большую часть DNS-поддерева (следовательно, большое число зон) spoofing атакам. Кроме того, обновление ключа KSK в случае компрометации означает изменение доверенных anchor’ов во многих name-серверах и resolver’ах. Тем самым для KSK рекомендуется большая длина ключа: он имеет небольшое воздействие на производительность, но чувствителен к компрометации.

    При выборе длины ключа для ZSK производительность является основным фактором, потому что этот ключ используется для подписывания всех множеств ресурсных записей в зоне. С точки зрения компрометации воздействие ограничено одной зоной, потому что применение ключа ZSK ограничено подписыванием множества ресурсных записей только данной зоны, он не используется для предоставления аутентифицированного делегирования родительской зоне. Следовательно, ключ ZSK может иметь меньшую длину, чем ключ KSK.

    Выбор периода использования (периода обновления) определяется риском раскрытия ключа. В случае KSK объем подписываемой информации не очень большой (потому что ключ KSK подписывает только множество ресурсных записей DNSKEY, и частота изменения данного множества ресурсных записей также маленькая). Минимальная вероятность раскрытия ключа (небольшой объем данных, доступный для угадывания KSK-private) в комбинации с большой длиной ключа приводит к тому, что период использования KSK может быть большим (обычно год или два).

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

    Рекомедация:

    Длина ключа для KSK должна быть достаточно большой, потому что компрометация KSK-ключа сильно влияет на безопасность DNS. Период действительности (период обновления) для ZSK должен быть сравнительно коротким, потому что существует больший риск угадывания ключа в результате большей незащищенности ZSK-ключа.

    С точки зрения количества создаваемых ключей каждого типа ( KSK и ZSK ), хорошей практикой считается создание дополнительного ключа ZSK к тому, который используется в текущий момент. Следовательно, администратор зоны должен использовать программу создания ключа для создания одного KSK и двух ZSKs при начальном развертывании DNSSEC. Один ZSK рассматривается как активный ключ, и его закрытая часть (ZSK-private) используется для создания подписей. Другой ZSK (ZSK-public) помещается в множество ресурсных записей DNSKEY, но соответствующая закрытая часть (ZSK-private) не будет использоваться для подписывания множества ресурсных записей. Данный дополнительный ключ ZSK дает возможность немедленно обновить ZSK в случае аварийных ситуаций, таких как компрометация ключа. Этот подход предоставляет способ предварительного уведомления resolver’ов, которые будут проверять подписи зон, что это тот ключ, который станет новым ключом после истечения периода действительности текущего ключа. Указание периода действительности ключа в множестве ресурсных записей DNSKEY дает возможность resolver’ам кэшировать и устанавливать доверие к новому ключу так, что они могут немедленно после обновления использовать новый ключ для проверки подписи.

    Пример создания пары ключей

    Любое ПО name-сервера поддерживающего DNSSEC должно предоставлять программную утилиту для создания пары асимметричных ключей. Проиллюстрируем использование одной из таких программ, dnssec-keygen (имеющейся в BIND 9.3.x):

    dnssec-keygen –a algorithm –b bits –n type [options] name

    где algorithm может быть один из следующих:

  • RSAMD5
  • DSA
  • bits (длина ключа) имеет следующие диапазоны:

  • 512 $$\dots$$ 4096 для RSA-MD5
  • 512 $$\dots$$ 1024 для DSA
  • type может быть одним из ZONE или HOST. В принципе, могут быть добавлены и любые другие типы ключей.

    name есть имя собственника ключа (обычно имя домена).

    Данная команда создает два файла: один содержит открытый ключ, а другой файл — соответствующий ему закрытый ключ. Имена этих файлов следующие:

    K<domain_name>+algorithm_id+Key_id.key
    K<domain_name>+algorithm_id+Key_id.private

    domain_name является значением параметра name, указанного в командной строке. Algorithm_id может быть следующим:

    3 – DSA

    5 – RSAMD5

    key_id есть уникальный идентификатор созданного ключа, созданного программой.

    Например, для создания ZSK-ключа длиной 1024 бит, который использует набор алгоритмов RSAMD5 для подписывания зоны example.ru, должна быть выполнена следующая команда:

    dnssec-keygen –a RSAMD5 –b 1024 –n ZONE example.ru

    Будут созданы следующие файлы, содержащие закрытый и открытый ключи:

    Kexample.ru.+005+28345.private
    Kexample.ru.+005+28345.key

    В этих именах файлов 005 определяет algorithm_id и 28345 есть уникальный идентификатор ключа.

    В *.key файле информация открытого ключа имеет тот же самый синтаксис, что и ресурсной записи в зонном файле. Содержимое файла Kexample.ru.+005+28345.key следующее:

    example.ru IN DNSSEC 256 3 5 BQFG...... (строка ключа в Base64)

    Следовательно, содержимое файла с открытым ключом может быть добавлено к содержимому зонного файла с помощью следующей команды:

    cat *.key >> /var/named/zonedb.example.ru

    После того как ресурсная запись DNSKEY, содержащая открытый ключ, добавлена в зонный файл, Serial Number зоны должен быть увеличен до того, как будет выполнено подписывание зоны.

    Безопасное хранение закрытых ключей (DNSSEC-OP2)

    Закрытые ключи из KSK и ZSK пар ключей должны быть защищены от неавторизованного доступа. В идеале, закрытые ключи должны храниться off-line на физически безопасной, не доступной из сети машине вместе с мастер-копией зонного файла. Подписи, создаваемые с использованием закрытых ключей, должны пересылаться на первичные авторитетные name-сервера посредством процесса загрузки, используя динамически устанавливаемое сетевое соединение (а не постоянный сетевой канал).

    Данная стратегия неосуществима в ситуациях, когда поддерживающий DNSSEC name-сервер должен выполнять динамические обновления. Для поддержки транзакций динамических обновлений name-сервер (который обычно является первичным авторитетным name-сервером) должен иметь как мастер-копию зонного файла, так и соответствующий закрытый ключ для подписывания зоны (ZSK-private) в режиме on-line для немедленного обновления подписей для измененных ресурсных записей. Закрытый ключ из KSK (KSK-private) может, тем не менее, храниться off-line. В этом случае должны быть предприняты следующие меры для защиты ZSK-private:

  • shell, из которого вызывается утилита создания ключа, должен быть недоступен для всех, за исключением администратора зоны.
  • Директория, в которой хранятся файлы закрытых ключей (обычно это поддиректория с тем же именем, что и зона, с именами файлов, имеющими структуру имени K<zonename>.AlgorithmID+<keytag>.private в BIND), должна быть недоступна и невидима для всех, за исключением администратора зоны.
  • Возможность быстрого восстановления должна быть обеспечена тем, что имеется зеркальный диск или выполняется периодический backup на съемный носитель.
  • Другая стратегия состоит в хранении закрытых ключей в зашифрованной файловой системе.
  • Рекомендация:

    Закрытые ключи, соответствующие как ZSK, так и KSK, не должны храниться в поддерживающем DNSSEC первичном авторитетном name-сервере, если name-сервер не должен выполнять динамических обновлений. Если динамические обновления поддерживаются, то только закрытый ключ, соответствующий ZSK, должен храниться на name-сервере в директории и файле с соответствующем управлением доступа или криптографически защищенным.

    Опубликование открытого ключа (DNSSEC-OP3) и конфигурирование доверенных anchor’ов (DNSSEC-OP7)

    Проверка данных зоны resolver’ом начинается с того, что resolver знает открытый ключ данной зоны (той, чьи данные он проверяет) или любой из открытых ключей зон, расположенных выше в дереве DNS. Если проверяемая зона (например, example.ru ) поддерживает безопасность (т.е. поддерживает DNSSEC ), а ее родитель ( .ru ) — нет, то точка доверия начинается с самой зоны. Если зона родителя (зона .ru ) поддерживает безопасность, а зона выше по дереву (зона root) — нет, начальной точкой доверия является родитель (т.е. зона .ru ). Если зона root поддерживает безопасность, то она становится исходной точкой доверия.

    В любом случае открытый ключ данной начальной точки должен быть известен resolver’ам. Такие открытые ключи, известные resolver’ам, называются доверенными anchor’ами. Поскольку не существует возможности средствами DNS выполнить проверку этих открытых ключей, открытый ключ доверенного anchor’а должен распространяться внешним по отношению к DNS способом. Данное распространение может быть осуществлено с использованием таких каналов, как web-сайты или e-mail.

    Список доверенных anchor’ов в поддерживающем DNSSEC resolver’е определяет, какой подписанный ответ от зоны будет рассматриваться как безопасный, а какой — нет. Как уже отмечалось, resolver должен установить доверие к открытому ключу зоны, из которой он получил ответ, перед тем как выполнить проверку подписи. Если такое доверие не может быть установлено с помощью построения доверенной цепочки, используя записи в списке доверенных anchor’ов, ответ должен помечаться как небезопасный. Причина, по которой отсутствует возможность построения доверенной цепочки, может состоять в том, что пространство имен DNS содержит только отдельные участки подписанных зон вместо непрерываемой иерархической последовательности подписанных зон. Предположим, что дерево DNS имеет следующую структуру.

    Тогда статус ответа (безопасный или небезопасный) зависит от списка хранящихся в resolver’е доверенных anchor’ов и от того, из какой зоны получен ответ.

    (рис 8.2) "Острова" подписанных зон

    Результат приведен в таблице.

    Возможные статусы ответа
    Доверенный anchor, инсталированный в поддерживающий DNSSEC resolver Статус DNSSEC ответа для запрошенных адресов
    www.example.ru www.example.org www.example.com
    None Insecure Insecure Insecure
    Root Secure Insecure Insecure
    .org Insecure Secure Insecure
    example.com Insecure Insecure Secure

    Подписывание зоны (DNSSEC-OP4)

    При подписывании зонного файла выполняется следующая последовательность действий:

  • Зонный файл сортируется в каноническом порядке доменных имен.
  • Создается ресурсная запись NSEC для каждого имени собственника в зоне.
  • Используется ключ KSK (KSK-private) для подписывания множества ресурсных записей DNSSEC. Ключ KSK определяется по наличию установленного флага SEP в RDATA в ресурсной записи DNSSEC.
  • Ключ ZSK (ZSK-private) используется для подписывания всех ресурсных записей в зоне (включая ресурсные записи DNSKEY и NSEC ).
  • Рекомендации:

  • Создание подписи с использованием ключа KSK должно выполняться off-line, используя KSK-private, также хранимый off-line; затем ресурсные записи DNSKEY вместе в ресурсной записью RRSIG должны быть размещены в первичном авторитетном name-сервере.
  • Хранение ключа ZSK-private и создание подписи с использованием этого ключа должно выполняться off-line; ресурсные записи вместе с RRSIG ресурсными записями затем могут быть записаны в первичный авторитетный name-сервер. Исключением является случай, когда name-сервер поддерживает динамические обновления. В этом случае ZSK-private должен располагаться в name-сервере.
  • Пример подписывания зоны

    Приведем пример, иллюстрирующий использование программы подписывания зоны (dnssec-signzone в BIND 9.3.x):

    dnssec-signzone –o <name of zone> -k <name of file containing KSK> 
       <location of zone file> <name of file containing ZSK>

    Для подписывания данных из зоны example.ru с KSK, расположенным в файле Kexample.ru.+005+76425.key, и ZSK, созданным заранее, следует выполнить следующую команду:

    dnssec-signzone –o example.ru -k Kexample.ru.+005+76425.key
       /var/named/zonedb.example.ru Kexample.ru.+005+28345.key

    Процесс подписывания зонного файла состоит из следующих шагов:

  • создание хэша для каждого множества ресурсных записей (ресурсных записей с одним и тем же именем собственника, TTL, классом и RRType );
  • создание подписи для каждого множества ресурсных записей (используя закрытый ключ ZSK-private);
  • размещение этой информации в новой ресурсной записи с типом RRSIG.
  • Ключ KSK подписывает только множество ресурсных записей DNSKEY, а ключ ZSK — все ресурсные записи в зонном файле. Участник, чей закрытый ключ используется для подписывания данных зоны, называется подписывающей стороной (signer или signing authority). В большинстве случаев подписывающая сторона является доменом, связанным с зоной. В ответ на DNS-запрос поддерживающий DNSSEC авторитетный name-сервер выдает соответствующие данные зоны вместе с цифровой подписью этих данных. Получатель проверяет цифровую подпись для полученных данных зоны, используя открытый ключ подписавшего (после установления доверия к открытому ключу).

    Создание доверенной цепочки и проверка подписи (DNSSEC-OP8)

    До тех пор, пока все зоны не станут подписанными, возможна ситуация, при которой зона является подписанной, но ее родитель не является подписанной зоной. Единственной точкой доверия для поддерживающего DNSSEC resolver’а в этом случае может считаться заранее сконфигурированный открытый ключ подписывающей стороны. При отсутствии другого источника, подтверждающего достоверность открытого ключа подписывающей стороны, требуется, чтобы открытый ключ был получен безопасным способом. В противном случае, если существует домен X, который может подтвердить достоверность открытого ключа домена Y, resolver может установить доверие к подписывающей стороне Y, используя X. Последовательность зон в дереве DNS, с помощью которых resolver устанавливает доверие к открытому ключу подписывающей стороны, называется цепочкой доверия.

    Будем считать, что цепочка доверия начинается с домена X и заканчивается доменом Y. Обычно домен X является непосредственным родителем Y и называется родительской зоной. Родительская зона обеспечивает доказательство достоверности открытого ключа дочерней зоны, подписывая ее ключ. Данная подпись хранится в ресурсной записи, называемой Delegation Signer ( DS ). Родительская зона также должна быть подписанной зоной, потому что неподписанная зона не умеет создавать подписи. Таким образом, подписанная зона может быть одного из следующих типов.

  • Изолированная безопасная зона – зона, которая является самоподписанной. Причина существования изолированных зон состоит в том, что родительская зона не является безопасной или нет возможности установить безопасное делегирование открытого ключа дочерней зоны и, следовательно, невозможно установить достоверность открытого ключа дочерней зоны, используя открытый ключ родительской зоны. В этом случае цепочки доверия не существует.
  • Глобально безопасная зона – ее родительская зона и, возможно, один или более предков вверх по DNS-дереву являются подписанными. При существовании такой иерархии подписанных зон и соответствующей иерархии сконфигурированных ключей resolver обычно имеет в качестве начала цепочки доверия открытый ключ зоны, которая является вершиной иерархии подписанных зон. Этот открытый ключ называется доверенный anchor. В resolver’е может существовать более одного ключа, которые являются доверенными anchor’ами и могут использоваться для построения цепочки доверия к открытому ключу зоны, чьи подписи resolver хочет проверять.
  • При защите данных зоны с помощью цифровой подписи в изолированной безопасной зоне следует выполнить следующие действия:

  • создать пару открытый / закрытый ключ;
  • обеспечить безопасное хранение (если необходимо, отдельно от name-сервера) закрытого ключа;
  • опубликовать открытый ключ с помощью включения ресурсной записи DNSKEY в зонный файл;
  • создать цифровые подписи для данных зоны (подписывание зоны).
  • Для глобально безопасной зоны существуют дополнительные задачи. Чтобы обеспечить возможность создания цепочки доверия, зона должна безопасным образом (внешним по отношению к сервисам DNS) передать родительской зоне свой открытый ключ (KSK-public). Затем родитель создает хэш этого открытого ключа дочерней зоны и хранит его в своей зоне в виде новой ресурсной записи, называемой DS. Он подписывает эту ресурсную запись DS, создавая ресурсную запись RRSIG. Родителю передается ключ KSK, а не ключ ZSK, потому что в противном случае происходило бы следующее. Всякий раз, когда зона изменяет свой ZSK, ее родитель должен был бы быть уведомлен о новом ключе. При этом родителю приходилось бы создавать новую ресурсную запись DS и снова подписывать ее. Для уменьшения подобной административной нагрузки родительской зоне передается ключ KSK. KSK используется для подписывания только ресурсных записей DNSKEY ; все остальные ресурсные записи в зонном файле подписываются ZSK. KSK является тем ключом, который опубликовывается у родителя. Родитель создает ресурсную запись DS, содержащую ключ KSK дочерней зоны, создает подпись для данного KSK и размещает ее в ресурсной записи RRSIG. Ключ KSK создается достаточно большим (например, 2048 бит) по сравнению с ключом ZSK, который может быть, например, длиной 1024 бит и, следовательно, должен изменяться менее часто.

    Просуммируем дополнительные задачи, которые имеют место при глобально безопасной зоне.

  • Безопасная пересылка открытого ключа KSK зоны своему родителю. Данная пересылка выполняется внешним способом и может не включаться ни в какие DNS-транзакции.
  • Родитель создает хэш открытого ключа KSK дочерней зоны и хранит хэш в ресурсной записи DS. Родитель также создает цифровую подпись (ресурсную запись RRSIG ) для данной ресурсной записи DS. Эта запись включается в информацию делегирования.
  • Зона, подписывающая ответ, является конечной точкой в цепочке доверия. Предварительно необходимо установить доверие к ZSK для зоны. Доверие к ZSK зоны устанавливается посредством следующих операций:

  • получение аутентифицированной ссылки от родителя;
  • аутентификация KSK дочерней зоны.
  • Для понимания обработки аутентифицированной ссылки, которая находится у родителя, необходимо посмотреть, как обрабатывается обычная ссылка DNS. В обычном DNS-запросе зона, которая не имеет авторитетной информации, относящейся к запросу для доменного имени в дочерней зоне, предоставляет ссылку, указывая множество ресурсных записей NS и соответствующие относящиеся к ним ресурсные записи (ресурсные записи, которые содержат IP-адреса серверов, указанных в ресурсных записях NS). При обычной обработке DNS-запроса следование по этим ссылкам будет следующим шагом обработки. Однако данный процесс является недостаточным с точки зрения установления цепочки доверия; информация о множестве ресурсных записей NS и связанных с ними ресурсными записями не может считаться аутентичной, потому что они не подписаны закрытым ключом аутентичного источника. Аутентификацию данной информации о ссылке родитель предоставляет криптографическим способом с помощью ресурсной записи DS.

    Рассмотрим пример того, как поддерживающий DNSSEC resolver проверяет правильность DNS-ответа от подписанной зоны example.ru. Resolver, следуя по своей цепочке доверия, начинающейся от доверенного anchor’а, аутентифицирует открытый ключ для зоны .ru и тем самым доверяет ему. Следовательно, он доверяет ресурсным записям NS и DS в зоне .ru. Из ресурсной записи NS и связанных с ней ресурсных записей resolver определяет, что авторитетный name-сервер для example.ru есть ns.example.ru, и он также знает его IP-адрес. Используя данную информацию, он идет на ns.example.ru и получает ключ KSK для example.ru из его множества ресурсных записей DNSKEY. Он вычисляет хэш данного ключа и сравнивает его с хэшем в ресурсной записи DS его родительской зоны .ru. Равенство этих двух хэшей означает, что ссылка из .ru зоны на example.ru зону аутентифицирована; аутентифицирован также и ключ KSK example.ru зоны. Так как ключ ZSK подписан ключом KSK example.ru, resolver может получить ключ ZSK example.ru аутентифицированным способом. Так как ключ ZSK подписывает все ресурсные записи в example.ru, действительность любого подписанного ответа из данной зоны может быть определена с использованием ключа ZSK, который уже аутентифицирован.

    Информация делегирования в родительской зоне в случае глобально безопасной зоны содержит следующее:

  • Ресурсные записи NS для дочерней зоны, которые включают в себя ссылки на name-сервера дочерних зон.
  • Относящиеся к ним ресурсные записи. Они определяют расположение серверов, перечисленных в ресурсных записях NS.
  • Ресурсную запись DS, которая включает в себя хэш KSK дочерней зоны.
  • Ресурсную запись RRSIG, которая является подписью для ресурсной записи DS.
  • Безопасность ответов кэширующего name-сервера

    Некоторые name-серверы могут быть авторитетными для одних зон и не являться авторитетными для других. Для зон, для которых они не являются авторитетными, они выполняют кэширование ресурсных записей из предыдущих запросов, полученных для этих зон. Поддерживающий DNSSEC кэширующий name-сервер имеет дополнительные задачи, связанные с его функциями кэширования. Эти задачи относятся к определению состояния безопасности ответа, содержащего ресурсные записи, и последующего его кэширования. Существуют три возможных состояния множества ресурсных записей.

  • Безопасное. Поддерживающий DNSSEC кэширующий name-сервер определяет состояние множества ресурсных записей как безопасное, если проверка соответствующей RRSIG прошла успешно. Проверка считается успешной, если может быть сформирована действительная цепочка от множества ресурсных записей до некоторого доверенного anchor’а. В этом случае множество ресурсных записей будет помещено в кэш и удалено, когда данные не будут считаться своевременными (в соответствии со значением TTL ) или более не проверяемыми (в соответствии с периодом действительности RRSIG ).
  • Небезопасное. Поддерживающий DNSSEC кэширующий name-сервер определяет состояние множества ресурсных записей как небезопасное, если ресурсные записи не являются безопасными в ответе. Это происходит, когда получено делегирование в неподписанную зону (делегирование, которое не имеет ресурсной записи DS ). Небезопасные множества ресурсных записей обрабатываются тем же способом, что и безопасные, но локальная политика на конечной системе может определить, что не следует доверять небезопасным делегированиям или данным в ответе.
  • Фальшивое. Поддерживающий DNSSEC кэширующий name-сервер определяет ответ как фальшивый, когда проверка подписей (ресурсных записей RRSIG ) не проходит или содержит некорректные поля (например, RRSIG истекла). Политика кэширования определяет, что делать с такими множествами ресурсных записей. Они могут быть либо отброшены, либо помещены в специальный BAD кэш, содержащий только те множества ресурсных записей, которые определены как фальшивые.
  • Когда поддерживающий DNSSEC кэширующий name-сервер получает запрос от не поддерживающего безопасность resolver’а, resolver получает как безопасные, так и небезопасные данные из кэша сервера. Так как данный запрос передан небезопасным способом, ресурсная запись DNSSEC не включается в ответ, тем самым применяется только обычная обработка DNS.

    Поддерживающие DNSSEC resolver’ы получают либо безопасные, либо и безопасные, и небезопасные данные от поддерживающего DNSSEC кэширующего сервера с установленным в заголовке ответа битом. Этот Authenticated Data ( AD ) бит в заголовке указывает, что множества ресурсных записей в ответе прошли или не прошли все проверки безопасности, выполненные кэширующим name-сервером. Клиент может решить, полагаться ли ему на данную проверку или выполнить свое собственное множество проверок безопасности.

    В некоторых случаях клиент может захотеть получить фальшивые данные от кэширующего name-сервера. В этом случае клиент посылает запрос с установленным Checking Disabled ( CD ) битом в заголовке DNS-сообщения. Это дает поддерживающему DNSSEC кэширующему name-серверу команду отвечать фальшивыми данными из BAD кэша. Клиент должен затем выполнить свою собственную проверку множества ресурсных записей в ответе. В таких типах ответов сервер не устанавливает AD бит, указывая, что ответ не прошел все проверки безопасности, выполняемые сервером.

    Дополнительные меры защиты для DNS Query / Response

    Спецификации DNSSEC для защиты транзакций DNS Query / Response определяет следующие типы ответов:

  • DNS-ответы от удаленных авторитетных name-серверов к локальным рекурсивным name-серверам;
  • DNS-ответы от удаленных кэширующих name-серверов к локальным рекурсивным name-серверам.
  • Так как большинство запросов первоначально исходят от stub resolver’а (от имени ПО клиента, требующего доступ к ресурсу в Интернете), защита сообщения DNS ответа должна также обеспечиваться для stub resolver’а от рекурсивного name-сервера. Способ обеспечения защиты на этом участке, который часто называется DNS "last hop", определяется природой stub resolver’а и топологией сети.

    Stub resolver может:

  • не поддерживать DNSSEC ;
  • – поддерживать DNSSEC и не проверять правильность ответа;
  • поддерживать DNSSEC и проверять правильность ответа.
  • Большинство stub resolver’ов, существующих сегодня, не поддерживают DNSSEC. Другими словами, они не имеют возможности проверить цифровые подписи, связанные с полученными множествами ресурсных записей, и также не могут отличить аутентифицированный ответ (проверяя его подпись) от неаутентифицированного ответа, передаваемого им их локальными рекурсивными name-серверами. Чтобы создать полную end-to-end защиту для DNS Query / Response, эти типы stub resolver’ов как минимум должны иметь возможность выполнять аутентификацию источника и проверку целостности данных в ответах, пришедших от рекурсивного name-сервера, который предоставляет им сервис разрешения имен. Такая возможность может быть обеспечена использованием подхода НМАС, заданного в TSIG (где описано использование НМАС для защиты транзакций зонных пересылок и динамических обновлений). В качестве альтернативы защиту можно обеспечить с помощью других механизмов сетевой безопасности, таких как IPsec. Независимо от механизма, используемого для обеспечения безопасности канала "last hop" (от рекурсивного name-сервера к stub resolver), данная возможность также должна присутствовать в поддерживающих DNSSEC и не проверяющих правильность ответа stub resolver’ах в дополнение к не поддерживающим DNSSEC stub resolver’ам. Поддерживающий DNSSEC, но не проверяющий правильность ответа stub resolver может увеличить доверие к этому ответу, проверяя значение AD бита в заголовке сообщения в полученном ответе. Данные типы stub resolver’ов могут затем использовать этот бит в качестве признака того, что рекурсивный name-сервер имеет возможность проверять действительность подписей для данных в ответе.

    В некоторых ситуациях установление доверенного пути между stub resolver’ами и рекурсивными name-серверами не предоставляется возможным. Примером является ситуация, когда рекурсивный name-сервер не расположен в административном домене предприятия, а выполняется у провайдера. В такой ситуации end-to-end защита может быть обеспечена только при наличии поддерживающего DNSSEC stub resolver’а. Поддерживающий DNSSEC stub resolver может уведомить локальный рекурсивный name-сервер, что он хочет сам выполнить проверку действительности подписи, установив Checking Disabled ( CD ) бит в свои сообщения запроса.

    Динамические обновления в поддерживающей DNSSEC-зоне

    Напомним возможные операции над зонным файлом при выполнении динамических обновлений. Можно считать, что имеются две основные операции: добавление ресурсных записей и их удаление. Обновление можно рассматривать как комбинацию из операций добавления и удаления. В небезопасной зоне добавление и удаление ресурсных записей не вызывают никакой другой операции в оставшихся ресурсных записях в зонном файле. Однако в безопасной зоне существует NSEC -ресурсная запись (и соответствующая RRSIG -ресурсная запись) на каждую область в пространстве имен.

    Имеется одна NSEC -ресурсная запись для каждого уникального имени владельца в зоне. Данная NSEC -ресурсная запись указывает на следующее имя владельца в каноническом порядке (упорядоченность, полученная лексикографической сортировкой доменных имен внутри зоны). NSEC -ресурсная запись для последнего имени владельца в каноническом порядке указывает на имя корня зоны (другими словами, имя зоны). Следовательно, концептуально эти записи образуют циклический список, в котором перечислены уникальные доменные имена в зоне

    Рассмотрим содержимое ресурсных записей NSEC для зоны example.ru. Предположим следующую каноническую упорядоченность доменных имен в зоне:

    example.ru
    	IN	SOA	 ns.example.ru admin.example.ru (12985 3600 2700 800 3600)
    	IN	RRSIG ( SOA )
    	IN	NS	 ns.example.ru.
    	IN	RRSIG ( NS )
    	IN	MX	 mail.example.ru.
    	IN	RRSIG ( MX )
    marketing.example.ru
    	IN	A	192.253.101.9
    	IN	RRSIG ( A )
    	IN	MX	 mail.example.ru
    	IN	RRSIG ( MX )
    sales.example.ru
    	IN	NS	 ns.example.ru.
    	IN	RRSIG ( NS )
    www.exapmle.ru
    	IN	A	 192.253.101.10
    	IN	RRSIG ( A )

    Псевдоформат (содержащий только информационные поля) NSEC -ресурсных записей, который охватывает интервалы пространства имен, относящиеся к доменным именам и типам ресурсных записей, что находятся в каждом имени в зонном файле, является следующим (ниже приведены четыре ресурсных записи NSEC ):

    example.ru	IN	NSEC	marketing.example.ru	(SOA NS MX RRSIG NSEC)
    marketing.example.ru	IN	NSEC	sales.example.ru	(A MX RRSIG NSEC)
    sales.example.ru	IN	NSEC	www.example.ru	(NS RRSIG NSEC)
    www.example.ru	IN	NSEC	example.ru	(A RRSIG NSEC)

    Заметим, что существует столько NSEC -ресурсных записей, сколько уникальных доменных имен в зоне. NSEC -ресурсная запись, чье имя есть example.ru, ссылается на следующий домен в каноническом порядке (например, marketing.example.ru ). То же самое выполняется для NS-ресурсных записей, относящихся к доменам marketing.example.ru и sales.example.ru. NSEC -ресурсная запись, относящаяся к последнему доменному имени (т.е, www.example.ru ), ссылается на первое доменное имя в зоне (т.е. example.ru ).

    Когда получен запрос для " package.example.ru IN A " (т.е. запрос для зоны, которой не существует), авторитетный сервер отвечает NSEC множеством ресурсных записей, доказывая, что имя не существует в зоне. В данном случае ответ от сервера будет состоять из обычного DNS-ответа, указывающего, что имя не существует, и следующей информации:

  • marketing.example.ru. NSEC ресурсная запись, указывающая, что не существует авторитетных имен между marketing.example.ru. и sales.example.ru.
  • www.example.ru. NSEC -ресурсная запись (последний домен в зоне), доказывающая, что не существует расширений имен в формате wildcard в зоне, которые могут быть расширены таким образом, чтобы соответствовать запросу;
  • Сопутствующие RRSIG -ресурсные записи для каждой из вышеупомянутых NSEC -записей, используемые для аутентификации.
  • Модификации NSEC -ресурсных записей, выполняется при следующих операциях:

  • добавление нового типа ресурсной записи в существующий домен;
  • удаление некоторого типа ресурсной записи из существующего домена;
  • добавление нового имени домена в зону;
  • удаление имени домена из зоны.
  • Добавление нового типа ресурсной записи в существующий домен

    Предположим, что новый почтовый хост добавлен в домен www.example.ru. Такое изменение требует добавления MX-ресурсной записи к данному имени домена. Следовательно, NSEC -ресурсная запись для www.example.ru должна быть модифицирована следующим образом:

    www.example.ru	IN	NSEC	example.ru	( A MX RRSIG NSEC )

    Удаление некоторого типа ресурсной записи из существующего домена

    Предположим, что предприятие example.ru решило, что больше не требуется отдельного почтового сервера для сотрудников отдела маркетинга. Такое изменение требует удаления почтового сервера ( RRType = MX ) из домена marketing.example.ru. Модифицированная NSEC -ресурсная запись теперь выглядит следующим образом:

    marketing.example.ru	IN	NSEC	sales.example.ru	(A RRSIG NSEC)

    Добавление нового имени домена в зону

    Чтобы заказчики могли работать в режиме on-line, предприятие решило добавить отдельный домен websales.example.ru. Также был добавлен отдельный name-сервер и множество новых хостов. Этот новый домен требует следующих изменений в зонном файле:

  • Добавление NSEC -ресурсной записи для нового домена. В этом случае должна быть добавлена NSEC -ресурсная запись для доменного имени websales.example.ru и должно быть определено ее расположение в каноническом порядке. Данная NSEC -ресурсная запись должна быть вставлена таким образом, чтобы указывать на следующее доменное имя в новом каноническом порядке. Добавляемый name-сервер и существовавшие ранее хосты должны отображаться в этой новой ресурсной записи посредством того, что NS и А указываются в поле списка типов ресурсных записей, как показано ниже. Соответствующая RRSIG -ресурсная запись должна быть создана.

    websales.example.ru	IN	NSEC	www.example.ru (A NS RRSIG NSEC)
  • NSEC -ресурсная запись, относящаяся к домену, непосредственно предшествующая добавленному домену (в каноническом порядке) должна быть модифицирована таким образом, чтобы указывать на только что добавленный домен. NSEC -ресурсная запись должна теперь указывать на домен websales.example.ru.

    sales.example.ru	IN	NSEC	websales.example.ru (A RRSIG NSEC)
  • Создается новая ресурсная запись для подписи (RRSIG-ресурсная запись), соответствующая данному модифицированному NSEC -множеству ресурсных записей.
  • Удаление домена из зоны

    Предположим, предприятие решило, что все продажи теперь будут осуществляться только через Интернет. Так как хосты были созданы для выполнения данной функции в новом домене websales.example.ru, хосты в домене sales.example.ru больше не нужны. Поэтому все ресурсные записи, принадлежащие домену, должны быть удалены из зоны. Данное изменение включает следующие операции:

  • NSEC -ресурсная запись, соответствующая удаляемому домену, должна быть удалена, т.е. NSEC -ресурсная запись, относящаяся к домену sales.example.ru, удаляется;
  • NSEC -ресурсная запись, относящаяся к домену, непосредственно предшествующему удаленному домену, модифицируется таким образом, чтобы указывать на домен, непосредственно следующий за удаленным доменом (т.е. запись должна указывать на ту, на которую указывала удаленная NSEC -ресурсная запись). В данном случае NSEC -ресурсная запись для marketing.example.ru должна указывать на домен websales.example.ru следующим образом:

    marketing.example.ru	IN	NSEC	websales.example.ru (A MX RRSIG NSEC)
  • Краткое резюме

    Перечислим основные принципы, которым необходимо следовать при развертывании DNSSEC.

  • Размер ключа KSK должен быть достаточно большим, потому что это имеет большее влияние на безопасность DNS при компрометации ключа KSK. Период действительности (период обновления) для ключа ZSK должен быть достаточно коротким, потому что существует больший риск для угадывания ключа.
  • Закрытые ключи, соответствующие и ZSK, и KSK, не должны храниться в поддерживающем DNSSEC первичном авторитетном сервере, если name-сервер не должен выполнять динамических обновлений. Если динамические обновления поддерживаются, закрытый ключ ZSK, должен храниться на name-сервере с соответствующим управлением доступом на уровне файла и директории или в криптографически защищенном виде.
  • Создание подписи с использованием ключа KSK должно выполняться в режиме off-line с использованием ключа KSK-private, хранящегося off-line; затем множество ресурсных записей DNSKEY вместе с его RRSIG -ресурсной записью должны быть записаны в зонный файл первичного авторитетного name-сервера.
  • Хранение ключа ZSK-private и создание подписи с использованием данного ключа должно выполняться в режиме off-line; множество ресурсных записей вместе с RRSIG -ресурсными записями может затем быть записано в зонный файл первичного авторитетного name-сервера. Исключением является случай, когда name-сервер поддерживает динамические обновления. При этом ключ ZSK-private должен располагаться на name-сервере.
  • Минимизация раскрываемой DNS-информации

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

    Существует вероятность, что атакующий попытается получить информацию о локальной сети с использованием сервисов DNS и использует данную информацию для выполнения атаки. Некоторые типы информации, например, IP-адреса публичных серверов, предназначены для того, чтобы быть доступными всем. Что касается другой информации, администратору DNS рекомендуется выполнить определенные действия при создании зонного файла, которые бы сводили раскрытие локальной сети к минимуму. Данный процесс должен быть выполнен до подписывания зоны. Информация о сети, которая должна быть абсолютно закрытой, не должна публиковаться в DNS совсем.

    Выбор значений параметров в SOA RR

    Первое действие, которое должен предпринять администратор DNS, – это гарантировать, что значения данных ресурсной записи SOA являются корректными. Значения в данной ресурсной записи определяют взаимодействие между первичным и вторичными серверами в зоне, а именно, с какой периодичностью вторичные серверы должны выполнять зонные пересылки с первичного сервера. Эти данные также содержат минимальное значение TTL, которое говорит клиентским resolver’ам, как долго находятся данные в кэше. Смысл этих полей следующий:

  • Serial Number. Serial number в SOA RDATA используется для указания вторичным серверам, что произошли изменения в зоне и зонная пересылка должна быть выполнена. Данное значение должно возрастать при изменении данных в зоне.
  • Refresh Value. Refresh value говорит вторичным серверам, сколько секунд проходит между зонными пересылками. Для зон, которые часто обновляются, данное значение должно быть маленьким (от 20 минут до 2 часов). Для зон, которые обновляются не часто, может быть указано большее число (от 2 до 12 часов). Для подписанных зон данное значение не должно быть больше, чем длина периода действительности RRSIG, чтобы гарантировать, что вторичные зоны не содержат зон с истекшими RRSIG. Данное значение также может зависеть от ограничений, связанных с шириной пропускания на стороне первичного сервера. Заметим, что если первичный сервер создает сообщение NOTIFY при своем обновлении, вторичный сервер будет немедленно выполнять зонную пересылку и не ждать, пока нужно будет обновлять с соответствии со значением refresh.
  • Retry Value. Retry value является периодом времени, через который вторичный сервер должен попытаться выполнить зонную пересылку, если предыдущая попытка окончилась неудачно. Данное значение должно быть делителем значения refresh. Возможный диапазон значений для данного поля может быть от 5 минут до 1 часа.
  • Expire Value. Expire value является временем, в течение которого вторичный сервер должен считать зонную информацию действительной, если он не может установить соединение с первичным сервером для получения обновления. Данное поле позволяет вторичным серверам продолжать функционировать при различных сетевых сбоях. Значение зависит от частоты изменений в зоне и надежности соединения между name-серверами, оно может быть от 2 до 4 недель.
  • Minimum TTL. Значение minimum TTL является значением по умолчанию для всех множеств ресурсных записей в зоне, если они сами не имеют собственного значения TTL, указанного в зонном файле. Данное значение зависит от того, как часто информация изменяется в зоне. Если зона статическая, значение может быть большим; если динамическая, значение должно быть маленьким. Однако для зон, которые используют DNSSEC значение должно быть достаточно большим, чтобы информация оставалась в кэше до тех пор, пока она является действительной. Считается, что минимальным значением должно быть 30 секунд, рекомендуемый диапазон – от 30 минут до 5 дней.
  • Рекомендации:

  • Значение refresh в SOA ресурсной записи зоны должно быть выбрано в зависимости от частоты обновлений. Если зона подписана, значение refresh должно быть меньшим, чем период действительности RRSIG.
  • Значение retry в SOA ресурсной записи зоны должно равняться 1/10 от значения refresh.
  • Значение expire в SOA ресурсной записи зоны должно быть от 2 до 4 недель.
  • Минимальное значение TTL должно быть между 30 секундами и 24 часами, чтобы гарантировать, что устаревшие множества ресурсных записей будут очищены из кэшей клиентов.
  • Утечка информации и Informational RRTypes

    Существует несколько типов ресурсных записей, которые сообщают информацию о сети, хостах или сервисах. К этим ресурсным записям относятся Responsible Person ( RP ) запись, Host Information ( HINFO ) запись, Location ( LOC ) запись и различные Text рекурсивные записи ( TXT ). Хотя данные типы записей предназначены для информирования пользователей, не имеющих плохих намерений, они также позволяют атакующему получить информацию о хостах в локальной сети для того, чтобы попытаться использовать их уязвимости. Например, атакующий может запросить HINFO -записи, просмотреть перечисленные хосты и определить ОС и платформы, которые имеют известные уязвимости. Следовательно, следует быть очень осторожным, включая данные типы записей в зонный файл.

    Рекомендации:

  • Администратор DNS не должен включать в зонный файл или во внешний view зоны (если используется split DNS) HINFO, RP, LOC или другие типы ресурсных записей, которые могут разглашать информацию, полезную атакующему.
  • Администратор DNS должен просмотреть все данные, которые содержатся в ресурсной записи TXT, для проверки возможной утечки информации, перед тем как добавлять их в зонный файл.
  • Использование периода действительности RRSIG для минимизации последствий компрометации ключа

    Самым лучшим способом минимизировать последствия компрометации ключа является ограничение периода действительности RRSIG как в самой зоне, так и в родительской зоне. Это позволяет ограничить время, в течение которого атакующий может использовать скомпрометированный ключ для подделки ответов. Атакующий, который имеет скомпрометированный ключ ZSK, может использовать данный ключ только в течение интервала действительности подписи, созданной ключом KSK. Атакующий, который скомпрометировал ключ KSK, может использовать его только в интервале, указаном в DS -ресурсной записи, которая является точкой делегирования у родителя. Но если определить данный период действительности коротким, то потребуется частое переподписывание в зонном файле родителя.

    Для минимизации влияния скомпрометированного ключа ZSK следует установить период действительности подписи RRSIG, охватывающей DS -ресурсные записи, в диапазоне от нескольких дней до одной недели. Данное переподписывание не требует частого обновления родительского ключа ZSK, а плановое обновление ключа ZSK должно выполняться через фиксированные интервалы.

    Рекомендации:

  • Период действительности для RRSIG, охватывающих множество ресурсных записей DNSKEY зоны, должен быть в диапазоне от двух дней до одной недели. Такое значение помогает уменьшить период существования уязвимости, который может возникнуть в результате компрометации ключа.
  • Зона, имеющая делегированную дочернюю зону, должна иметь период действительности от нескольких дней до одной недели для RRSIG, охватывающей DS-ресурсную запись для делегированной дочерней зоны. Такое значение помогает снизить период уязвимости в дочерней зоне, возникший в результате компрометации ее ключа KSK.
  • Администрирование операций для обеспечения безопасности сервисов DNS

    Мы рассмотрели операции развертывания и использования возможностей DNSSEC для защиты транзакций запросов и ответов DNS. Рассмотрим операции администрирования, которые должны выполняться периодически, в поддерживающей DNSSEC зоне.

    Плановое обновление ключа (время жизни ключа)

    Ключи, используемые для подписывания зоны ( ZSK ), и ключи подписывания ключа ( KSK ) должны периодически меняться, потому что они становятся уязвимыми после определенного периода использования. Компрометация закрытого ключа означает, что любой хост может подделать данные зоны, подписывая ложное множество ресурсных записей закрытым ключом, тем самым полностью аннулируя цели, которые преследовались при подписывании зонного файла. Обновление ключа может быть плановым (плановое обновление) или может иметь место в результате каких-либо чрезвычайных обстоятельств (чрезвычайное обновление). Чрезвычайное обновление происходит по одной из следующих причин:

  • закрытый ключ зоны скомпрометирован;
  • закрытый ключ зоны потерян, и зона обновлена до истечения периода действительности RRSIG, но нет возможности подписать новые данные зоны.
  • При плановом обновлении ключа период времени, после которого ключи должны быть изменены, определяется несколькими факторами:

  • большой размер зонного файла, большое количество данных, для которых создаются подписи, делает процесс взлома закрытого ключа более легким;
  • чем меньше размер закрытого ключа, тем легче его взломать.
  • Основываясь на этих факторах, в каждой зоне определяется частота обновления ключей для ZSK и KSK. Напомним, что ключ KSK (KSK-private) используется для подписывания только множества ресурсных записей DNSKEY, в то время как ключ ZSK (ZSK-private) используется для подписывания всего зонного файла. Независимо от объема данных, ключ ZSK используется намного чаще, а именно, в следующих случаях:

  • добавляется новая ресурсная запись (например, добавлен новый почтовый сервер, и, следовательно, добавлена новая ресурсная запись MX в зонный файл);
  • существующие RDATA в ресурсной записи изменяются (например, IP-адрес сервера изменился, и, следовательно, существующая ресурсная запись A должна быть заменена);
  • истекает период действительности подписи для ресурсной записи RRSIG.
  • Рекомендация:

    Ключ KSK должен обновляться менее часто, чем ключ ZSK. Рекомендуемая частота обновления для ключа KSK равна одному году (при использовании RSA/MD5 с длиной ключа 2048 бит), а ключ ZSK должен обновляться каждый месяц (при использовании RSA/MD5 с длиной ключа 1024 бит).

    Воздействие обновления ключа на оставшуюся часть DNS зависит от того, является ли безопасная зона локально безопасной или глобально безопасной (как часть цепочки доверия).

    Обновление ключа в локально безопасной зоне

    Зона, которая является локально безопасной имеет ключ ZSK и, возможно, ключ KSK, который сконфигурирован в resolver’ах клиента как доверенный ключ. Определенные сложности возникают, когда любой из ключей обновляется, хотя наличие ключа KSK для локально подписанной зоны делает обновление ключа ZSK более легким. Когда зона изменяет свой ключ ZSK и имеется ключ KSK, который не изменяется, проблема состоит в том, что следует ввести новый ключ, в то время как старый ключ может находиться в некоторых удаленных resolver’ах или кэшах name-серверов.

    Решение состоит в предварительном опубликовании нового открытого ключа перед тем, как выполнить обновление. Администратор DNS должен опубликовать новый ключ как ресурсную запись DNSKEY в зонном файле перед тем, как он будет использоваться для создания подписей. Процесс состоит в следующем:

  • создать новую пару ключей;
  • добавить открытый ключ из новой пары в зонный файл ( DNSKEY -ресурсная запись);
  • подписать зону с использованием закрытого ключа из текущей активной пары и подписать ключом KSK новый открытый ключ ( DNSKEY -ресурсная запись);
  • подождать время, равное минимальному TTL для записи зоны;
  • удалить старую DNSKEY -ресурсную запись из множества ключей зоны и сделать истекшими RRSIG -ресурсные записи;
  • переподписать DNSKEY множество ресурсных записей новым ключом ZSK.
  • Следует помнить, что обновлять ключ ZSK необходимо постоянно. Администратор может выполнить первые три шага и подождать определенное время перед тем, как удалить старый DNSKEY из множества ключей, при этом продолжая подписывать зону старым DNSKEY, до тех пор, пока RRSIG в зоне не истекут. Данная процедура позволяет администратору выполнять обновление ключа оптимально.

    Зоны, которые заранее опубликовывают новый открытый ключ, должны соблюдать следующие принципы:

  • безопасная зона, которая предварительно опубликовывает свой открытый ключ, должна сделать так, чтобы по крайней мере один период TTL завершался до времени обновления ключа;
  • после удаления старого открытого ключа зона должна создать новую подпись ( RRSIG -ресурсную запись) для оставшихся ключей ( DNSKEY -ресурсные записи) в зонном файле.
  • При обновлении KSK безопасная зона может не знать, какие resolver’ы хранят открытый ключ в качестве доверенного anchor’а. Если сетевой администратор имеет внешний способ (хотя бы по e-mail) контактирования с администраторами resolver’ов, которые хранят открытые ключи в качестве доверенных anchor’ов, сетевой администратор должен послать соответствующее уведомление и установить безопасные способы распространения нового доверенного anchor’а. Если такого внешнего способа не существует, администратор ничего не сможет сделать, за исключением предварительного опубликования нового ключа KSK, давая администраторам resolver’ов достаточно времени для получения нового ключа KSK.

    Обновление ключа в глобально безопасной зоне

    Глобально безопасная зона использует два множества ключей: ZSK и KSK.

    Обновление ключа ZSK в глобально безопасной зоне

    Операции, выполняемые при обновлении ключа ZSK в глобально безопасной зоне не отличаются от тех, которые выполняются при обновлении ключа ZSK в локально безопасной зоне.

    Обновление ключа KSK в глобально безопасной зоне

    Ключ KSK (KSK-public) является ключом, для которого родитель данной безопасной зоны обеспечивает доверие. Для этого он использует ресурсную запись DS, которая содержит хэш дочернего ключа KSK. Делегирующий родитель подписывает данную ресурсную запись DS своим собственным ключом ZSK для того, чтобы отношения доверия осталось в силе. Для обновления ключа KSK дочерней зоны следует выполнить следующее:

  • создать новый ключ KSK и добавить его в множество зонных ключей;
  • подписать множество ключей зоны новым ключом KSK, а также старым ключом KSK (ключом, который истекает);
  • передать новый ключ KSK своему родителю таким способом, при котором родитель мог бы аутентифицировать этот ключ;
  • в родительской зоне создать новую DS -ресурсную запись (которая заменит старую DS -ресурсную запись), содержащую хэш нового ключа KSK, затем подписать заново созданную DS -ресурсную запись.
  • Для того чтобы родитель мог аутентифицировать новый ключ KSK (будем называть его KSK2), основываясь на существующей цепочке доверия, дочерняя зона при выполнении обновления ключа создает DNSKEY -множество ресурсных записей, используя DNSKEY -ресурсные записи существующего ключа вместе с новой DNSKEY -ресурсной записью для KSK2. Затем создаются две подписи (две RRSIG -ресурсные записи) – одна с использованием существующего ключа KSK, другая с использованием нового ключа KSK2. Затем родителю посылается заново созданное DNSKEY множество ресурсных записей вместе с RRSIG -ресурсными записями (во множественном числе, потому что существуют две подписи, соответствующие ключам KSK и KSK2). Множество ресурсных записей, посылаемое родителю, приведено ниже в некотором псевдоформате:

    example.ru	DNSKEY	<key-id: 43543>	/* новый KSK*/
    example.ru	DNSKEY	<key-id: 78546>	/* существующий KSK*/
    example.ru	DNSKEY	<key-id: 98342>	/* ZSK*/
    example.ru	RRSIG (DNSKEY)	<signer:example.ru signing-key:78546> 
                                        /* весь DNSKEY RRset подписан существующим KSK */
    example.ru	RRSIG (DNSKEY)	<signer:example.ru signing-key:43543> 
                                       /* весь DNSKEY RRset подписан новым KSK */

    При получении данной информации родитель выполняет следующие действия:

  • проверяет правильность подписи, сделанной ключом KSK 78456 для заново созданного множества ресурсных записей DNSKEY, которое включает новый ключ KSK2. Это выполняется с использованием первой из RRSIG -ресурсных записей заново созданного DNSKEY -множества ресурсных записей, (записи, в которой указан 78456 в качестве ключа подписывания) и своей собственной DS -ресурсной записи;
  • проверяет аутентичность ключа KSK2 по открытому ключу KSK2 дочерней зоны. Для этого он проверяет вторую RRSIG -ресурсную запись (запись, в которой указан 43543 в качестве ключа подписывания) из DNSKEY -множества ресурсных записей;
  • создает новую DS -ресурсную запись, содержащую хэш нового ключа KSK2;
  • создает RRSIG для новой DS -ресурсной записи ключа KSK2.
  • Когда данные задачи выполнены родителем, процесс обновления ключа KSK с точки зрения дочерней зоны полностью выполнен. Родительская зона должна затем обновить свой зонный файл с новой DS -ресурсной записью. Это аналогично обновлению любого другого множества ресурсных записей, которое включает создание, если требуется, любых новых RRSIG. Данное обновление может выполняться автоматически. Это означает, что старая DS -ресурсная запись может быть сброшена и одновременно новая DS -ресурсная запись добавлена. При этом будет выполнено только одно переподписывание в зоне.

    Делегированная дочерняя зона должна сохранять истекший ключ KSK в своем множестве ключей до тех пор, пока она не получит подтверждение, что родительская зона выполнила соответствующее обновление DS для гарантии целостности цепочки аутентификации при обновлении ключа KSK. После того как дочерняя зона получает подтверждение, что делегирующий родитель обновил информацию делегирования для дочерней зоны, администратор дочерней зоны должен удалить старый ключ KSK из набора ключей и переподписать с использованием ключа ZSK новый ключ KSK.

    Аварийное обновление ключа

    Аварийное обновление ключа происходит тогда, когда один или более ключей в зоне ( ZSK или KSK компрометируются или закрытая компонента потеряна и необходимо выполнить переподписывание. Данный тип обновления не является плановым, поэтому велика вероятность разорвать цепочку аутентификации, если администратору зоны необходимо выполнить процесс обновления.

    Аварийное обновление ZSK

    Администратор DNS может обновить компрометированный ключ ZSK более быстро, чем компрометированный ключ KSK, потому что компрометация влияет только на зону. Возможность более быстрого обновления является другой причиной, по которой администратор зоны выполняет обновление ключа ZSK более часто. Если администратор зоны имеет новую DNSKEY -ресурсную запись, уже опубликованную в зоне в качестве части набора ключей зоны (первые три шага в процессе, который рассматривался ранее), следующий шаг зависит от того, является ли ключ компрометированным.

    Если используемый в текущий момент ключ ZSK компрометирован, администратор зоны может немедленно заменить его на новый ключ. Нет необходимости ждать, чтобы истек период TTL, потому что новый ключ уже опубликован к данному моменту. Администратор может просто удалить старые RRSIG из зоны и переподписать новым ключом ZSK раньше, чем предполагалось сделать плановое обновление. Функционирование DNS должно продолжиться нормально после такого переподписывания, без разрыва цепочки аутентификации.

    Если новый ключ ZSK (следующий ключ ZSK, который будет использоваться) компрометирован, его следует заменить немедленно в множестве ключей зоны. Такая замена также может выполниться автоматически, потому что новый ключ не использовался для создания каких-либо RRSIG ; должно быть переподписано только множество ключей зоны. Также возможно просто удалить компрометированный ключ и заменить его новым ключом ZSK за одно обновление.

    Однако существует опасность, что атакующий использовал скомпрометированный ключ ZSK для подделки ответов, исходящих из зоны. Такая опасность реальна в течение того времени, какое текущий ключ KSK остается активным, в соответствии с периодом обновления ключа KSK. После того как ключ ZSK был компрометирован, администратор зоны должен инициировать обновление ключа KSK как можно скорее.

    Аварийное обновление KSK

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

    Рекомендация:

    Администратор DNS должен иметь способ аварийного контактирования с администратором родительской зоны, чтобы иметь возможность выполнять аварийное обновление ключа KSK.

    Переподписывание зоны

    Зонный файл переподписывается (т.е. заново создаются RRSIG -ресурсные записи), в следующих ситуациях:

  • подписи истекли или истекут в скором времени;
  • содержимое зонного файла изменилось в результате динамического обновления;
  • один из ключей подписывания скомпрометирован или заменяется в плановом порядке.
  • Существуют две стратегии для переподписывания данных зоны.

  • Полное переподписывание. Все существующие записи подписи ( RRSIG -ресурсные записи) удаляются, зонный файл сортируется заново, все NSEC -ресурсные записи создаются, и, наконец, создаются новые записи подписи. Полное переподписывание выполняется в следующих ситуациях:

  • зонный файл создается из некоторой back-end базы данных;
  • администратор зоны установил выполнение данного переподписывания в пакетном режиме для выполнения на конкретный день и время, основываясь на времени истечения действительности подписи.
  • Инкрементальное переподписывание. NSEC ресурсные записи модифицированы, потому что существующее множество ресурсных записей удалено, NSEC -ресурсные записи добавлены, потому что новое множество ресурсных записей добавлено в зонный файл. В этом случае подписи создаются только для тех ресурсных записей, которые были изменены. Инкрементальное переподписывание выполняется, когда изменения в содержимом зонного файла минимальны, что обычно бывает после динамического обновления.
  • Рекомендации:

  • Периодическое переподписывание должно быть запланировано до истечения действительности RRSIG -ресурсных записей, существующих в зоне. Это уменьшит риск того, что подписанная зона будет фиктивной в результате истекших подписей.
  • Серийный номер в SOA ресурсной записи должен быть увеличен перед переподписыванием зонного файла. Если данная операция не сделана, вторичные name-серверы могут не получить новые подписи, потому что они выполняют обновление исключительно на основе соответствия серийного номера SOA. В результате этого некоторые поддерживающие безопасность resolver’ы не будут иметь возможность проверять подписи (и таким образом иметь безопасный ответ), а другие — будут.
  • Вернуться к учебному плану