Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

DNSSEC: служба безопасности DNS.

Рубрика: Безопасность -> Защита сервисов
Метки: | |
Понедельник, 14 сентября 2009 г.
Просмотров: 7826
Подписаться на комментарии по RSS

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

     DNSSEC (DNS Security Extensions) - набор расширений протокола DNS, использующий РКС и цифровые подписи для осуществления безопасных транзакций между серверами и клиентами (или между серверами и серверами). Подробное описание DNSSEC можно найти в RFC 2535. Рассмотрим, как надо реализовать эту систему в DNS.

     Технология DNSSEC - это не абсолютно новая концепция, ей уже несколько лет, и ее уже успели опробовать.


     Записи KEY, SIG и NXT.

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

В DNSSEC публичный ключ представлен новым типом записи (запись типа KEY). Данную запись можно задать для каждой зоны, которая контролируется. Приватный ключ хранится в специальном файле на сервере. Доступ к этому ключу может получить только сервер имен (и, конечно, root).

     Для приватного ключа DNSSEC олицетворяет второй тип записи - SIG. Эта запись содержит тип обслуживаемой записи (к примеру, zone, host, user), употребляемый алгоритм, и дату истечения срока действия подписи.

     Записи типа KEY ассоциируются с зонами, но что если клиент сделал запрос, для которого нет ответа (соответственно, нет KEY-записи). Отправить неподписанный ответ опасно, так как он может быть использован в атаке повтора. Проблема отправки отрицательных ответов решается введением NXT-записи, используемой для запросов, на которые у сервера нет ответа.

     Целостность ключа.

     Есть уверенность, что ключ, применяемый для подписи сообщений, которое был получен, законный, то есть неподделанный? Что если удаленный сервер был скомпрометирован и хакер заменил оригинальный ключ своим собственным? DNSSEC использует систему сертификатов, подобную SSL, которая вовлекает независимую третью сторону, подписывающую ключи. Если ключ изменен, цифровой сертификат будет потерян.

     В отличие от SSL, где разрешается подпись сертификата какой угодно организацией, DNSSEC требует, чтобы сертификат был подписан наивысшим ведомством для домена; к примеру, для домена test.com этим ведомством будет TLD.com. Это означает, что сертификат должен быть подписан администраторами TLD.com.

     В свою очередь, сертификат для TLD.com должен быть подписан администраторами корневой зоны «.».

     DNSSEC пока не очень распространен и в полной мере может случиться, что родительское ведомство не сможет подписать нужный сертификат, потому что у него нет собственного ключа.

     Генерация ключа.

     Публичный и приватный ключи генерируются с помощью команды dnssec-keygen:

dnssec-keygen -а <алгоритм> -b <размер ключа> -n <тип ключа> <имя домена>

     На данный момент поддерживается несколько алгоритмов: RSA, DSA, HMAC-MD5 и DH. Наиболее популярным представляется RSA: похоже, что он уже стал стандартом, поэтому изначально будет употребляться именно он.

     Следующий параметр - размер ключа. При употреблении RSA ключ может быть размером от 512 до 4096 байтов. Обычно хватает 512 байтов - потребности в большем размере нет.

Тип ключа для DNSSEC всегда будет ZONE.

     Сгенерированные ключи помещаются в текущий каталог, поэтому перед вводом команды dnssec-keygen имеет смысл перейти в каталог /var/named:

# cd /var/named

# dnssec-keygen -a RSA -b 512 -n ZONE test.net

     В результате выполнения данной команды будет создано два ключа:

# cd /var/named

# dnssec-keygen -a RSA -b 512 -n ZONE test.net

     Подпись ключей.

     Если у родительской зоны есть свои собственные DNSSEC-ключи, можно связаться с ними и запросить их проверить и подписать собственный публичный ключ. BIND для этих целей содержит другую утилиту - dnssec-makekeyset. Эта утилита упаковывает ключ наряду с другой информацией в формат, который легко обрабатывается администратором родительской зоны.

# dnssec-makekeyset -t <TTL> -s <дата начала> -е <дата истечения срока> публичный_ключ

     Опция -t указывает запрашиваемый TTL для записей, опция -s - устанавливает дату начала действия SIG-записи, а опция -е - дату истечения срока. Обе даты указываются в формате ГГГГММДДЧЧММСС. Значения по умолчанию для этих дат: «сейчас» (для первой) и «30 дней спустя» (для второй), то есть по умолчанию SIG-запись «годна» 30 дней.

     Обе даты можно не указывать, например:

# dnssec-makekeyset KTest.net.+001+01314.key

     Результирующие данные должны быть отправлены администратору родительской зоны для проверки. Если все нормально, он подпишет ключ (с помощью dnssec-signkey) и отправит обратно файл test.net.signedkey.

     Подпись зоны.

     Теперь, когда ключи подписаны третьей стороной, следующим шагом будет интегрировать их в должные файлы зоны с помощью директивы SINCLUDE. Данную директиву можно поместить в самое начало файла зоны (к примеру, zone.test.net):

$INCLUDE KTest.net.+001+01314.key

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

# dnssec-sigzone -о zone.test.net test.net

     Опция -о предопределяет имя входящего файла, после нее следует имя результирующего файла (к указанному имени будет добавлена строка .signed). В данном примере будет исполнен файл test.net.signed.

     Теперь надо модифицировать файл /etc/named.conf и прописать подписанный файл зоны (вместо неподписанного):

zone "test.net" IN {

  type master;

  file "test.net.signed";

  allow-update { none; };

};

     Для того, чтобы named перезагрузил файл конфигурации, нужно отправить ему сигнал SIGHUP.

Комментариев: 1

  1. 2009-09-22 в 17:08:48 | ksn (анонимно)

    Утилита dnssec-makekeyset уже в пакет BIND9 не включается. Есть только dnssec-keygen и dnssec-signzone, больше ничего.

    Как с ними работать очень интересно узнать...

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



(обязательно)