Московский государственный университет имени М.В.Ломоносова
Опубликован: 21.09.2006 | Доступ: свободный | Студентов: 5053 / 926 | Оценка: 4.32 / 4.09 | Длительность: 19:19:00
ISBN: 978-5-9556-0076-0
Лекция 8:

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

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

Приведем пример, иллюстрирующий использование программы подписывания зоны (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 ) бит в свои сообщения запроса.

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?