Вернуться обратно в Блог
Система DNS была разработа более 20 лет назад, когда о защите информации не сильно задумывались, а по факту, на сегодняшний день имеет несколько фундаментальных уязвимостей: Достоверность ответа DNS-сервера никак не проверяется. Это позволяет отправить пользователя, обратившегося к доменному имени, на произвольный IP-адрес, подменив ответ сервера: MITM-атака. Также уязвимы кеширующие DNS-серверы провайдеров, выступающие как резолверы для клиентов: Атака Каминского.
Сегодня существуют технологии, предусматривающие хранение открытых ключей в DNS-записях, например, DKIM-подписи в электронной почте, SSH-ключей в записях SSHFP и т.д. Все эти технологии требуют защиты от подделки DNS.
DNSSEC — технология, позволяющая однозначно удостовериться в подлинности DNS информации при помощи криптографической подписи.
Принцип работы DNSSec тот же, что и у цифровой подписи. То есть закрытым ключом подписываем, открытым сверяем. Особенность состоит в том, что DNSSec использует два типа ключей — одним подписывается зона (ZSK, zone signing key), другим подписывается набор ключей (KSK, key signing key). Сделано это из таких соображений: зона может быть достаточно большой чтобы удалось подобрать закрытый ключ, поэтому его надо менять почаще, да и сделать его можно покороче, чтобы зоны подписывались быстрее; KSK же используется для небольших объемов данных, поэтому его можно и подлиннее сделать и менять пореже. Тем более, что хэш от открытой части KSK требуется отправить в родительскую зону, что хотелось бы делать не слишком часто.
Что на парктике
На текущий момент подписаны только некоторые доменные зоны верхнего уровня, в частности: .net, .com, .org. Зона .ru до сих пор не подписана, зона .ua подписана в режиме тестирования, зона .su официально подписана, но до сих пор ни один регистратор не поддерживает добавление DS-записей. Полный список можно посмотреть на сайте ICANN Для подписания своей зоны эта возможность должна поддерживаться регистратором домена. Из поддерживающих можно выделить наиболее крупных:
- Godaddy.com
- Dyn.com
- 101domain.com
- GKG.net
- NIC.RU (первый отечественный)
Далее предполагается, что у нас уже есть домен, делегированный на собственные, полностью настроенные DNS, и готовый файл зоны. Для включения поддержки DNSSEC в named.conf в секцию options нужно добавить:
options {
...
dnssec-enable yes;
...
};
Все приведенные ниже операции необходимо проводить в отдельно созданной папке.
Генерация ключа ZSK:
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE my-domain.com
Генерация ключа KSK:
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE my-domain.com
где my-domain.com — домен для которого генерируются ключи.
В результате выполнения этих команд будут созданы две пары ключей. Далее необходимо скопировать файл зоны в текущую папку и выполнить подписание:
dnssec-signzone -S -N INCREMENT my-domain.com
где my-domain.com — текстовый файл зоны. Важно выполнять команду, находясь в одной папке с ключами и файлом зоны; имя файла указывать без пути.
В результате будут созданы два файла:
my-domain.com.signed — подписанный файл зоны
dsset-my-domain.com — файл содержащий две DS-записи
Исходный файл зоны останется без изменений. Далее в конфиге BIND необходимо заменить файл на подписанный:
zone "my-domain.com" {
type master;
file "my-domain.com.signed";
allow-query { any; };
allow-transfer { ....; };
};
Далее необходимо добавить DS-записи в панели регистратора домена. Они были сгенерированы при выполнении dnssec-signzone и находятся в файле dsset-my-domain в таком виде:
my-domain.com. IN DS 40513 5 1 6198D29A9FB9797719CDFD2316986BDFF5C29323
my-domain.com. IN DS 40513 5 2 1AAB29EC7B67013F45865AEB06D93899B45C598D65A4E4D5522BC39E B5B9212F
Posted in Инфраструктура on окт 02, 2014.