недоліки DNS
Системи розпізнавання імен DNS, що є однією з основ сучасної системи мережевих взаємодій, розроблялася більше 20 років тому, коли про питання захисту інформації майже не замислювалися. Одним з основних недоліків системи DNS є можливість підробки відповіді на DNS запит.
Проблема в тому, достовірність відповіді DNS-сервера ніяк не перевіряється, це означає, що в разі злому DNS сервера (і перенаправлення його на помилкові DNS сервера), підробки DNS записи, отруєнні кеша DNS (DNS cache poisoning), можна відправити користувача на довільний IP адреса, причому користувач буде знаходиться в повній впевненості, що він працює з легітимним сайтом або сервісом. Цими методиками широко використовують зловмисники, перенаправляючи користувачів на сайти, що містять шкідливі коди або збираючи їх особисті дані (паролі, номери кредиток і т.п.) за допомогою т.зв. pharming атак.
Навіщо потрібна технологія DNSSEC
DNS Security Extensions (DNSSEC) - технологія, призначена для підвищення безпеки служби DNS за рахунок використання криптографічних підписів, що дозволяють однозначно упевниться в автентичності інформації, отриманої від DNS сервера. Тобто всі запити і відповіді DNS сервера з підтримкою DNSSEC повинні володіти цифровим підписом, вірність якої може перевірити клієнт за допомогою відкритого ключа. Ці цифрові підписи створюються при підписуванні зони (застосування до неї DNSSEC).
Спрощено механізм перевірки DNSSEC працює так: клієнт відправляє запит на DNS сервер, сервер повертає DNS відповідь з цифровим підписом. Оскільки клієнт має відкритим ключем центру сертифікації, який підписав записи DNS, він може розшифрувати підпис (хеш-значення) і перевірити відповідь DNS. Для цього і клієнт і сервер DNS повинні бути налаштовані на використання одного якоря довіри (trust anchor). Trust anchor - попередньо налаштований відкритий ключ, пов'язаний з конкретною зоною DNS. Якщо DNS сервер підтримує кілька зон, то може використовуватися кілька якорів довіри.
Важливо відзначити, що основне призначення DNSSEC - захист від підробки та модифікації DNS-запитів і відповідей. Але самі передаються по мережі дані не шифруються (хоча конфіденційність DNS даних і може бути забезпечено за допомогою шифрування, але це опціонально і не є основною метою DNSSEC).
Основні компоненти DNSSEC визначені в наступних стандартах RFC:
- RFC 4033
- RFC 4034
- RFC 4035
DNSSEC в системах Windows
Підтримка технологія DNSSEC з'явилася ще в Windows Server 2008 R2 і Windows 7. Однак через складність і неочевидності налаштувань, широкого поширення вона не отримала. Свій подальший розвиток DNSSEC отримала в Windows Server 2012, в якому функціонал DNSSEC був істотно розширено, і передбачає можливість налаштування через графічний інтерфейс.
У цій статті ми опишемо базову установку і настройку DNSSEC на базі DNS сервера з ОС Windows Server 2012, створимо підписану зону і точки довіри.
Установка і настройка DNSSEC в Windows Server 2012
Створимо нову DNS зону dnssec.contoso.com і додамо в неї одну A запис сервера SRV12 з адресою 192.168.1.14.
Примітка. У Windows 8/2012 замість утиліти nslookup для отримання інформації з DNS сервера краще скористатися Powershell Командлети Resolve-DnsName.Resolve-DnsName srv12.dnssec.contoso.com -Server SRV12-SUB-CA -DnssecOk
Оскільки зона не підписана, запит не поверне записи RRSIG.
Підпишемо цифровим сертифікатом внутрішню DNS зону dnssec.contoso.com. Для цього в консолі DNS клацніть правою кнопкою по зоні і виберіть пункт DNSSEC-> Sign the Zone.
У який з'явився майстра Zone Signing Wizard залиште всі параметри за замовчуванням (Use default settings to sign the zone) -> Next -> Next -> Finish.
Після закінчення роботи майстра в підписаній зоні автоматично створяться такі нові ресурсні записи:
- RRSIG (Resource Read Signature) - підпис ресурсної записи
- DNSKEY (A Public Key) - зберігає публічну частину ключа і його ідентифікатори
- DS (Delegation Signer) - містить хеш доменного імені спадкоємця і його ключа KSK
- NSEC (Next Secure) і NSEC3 (Next Secure 3) - використовується для надійного захисту від spoofing атак
Після того, як зона підписана, відкритий ключ буде збережений у файлі% windir% \ system32 \ dns \ keyset-dnssec.
Імпортуємо в DNS відкритий ключ зони (той самий якір довіри), перейшовши в консолі DNS в розділ Trust Point, вибравши import -> DNSKEY, і вказавши шлях до файлу keyset-dnssec.
Примітка. Даний ключ необхідно поширити на всі DNS сервера, яким будуть брати участь в процесі безпечного кешування даних підписаної зони.В результаті імпорту ключа в розділі Trust Points -> dnssec з'явиться два ключа типу DNSKEY (один ключ активний, інший - standby).
У Windows Server 2012 можливо автоматично реплицировать ключі якорів довіри (Trust Anchors) за всіма контролерам домену в лісі, що обслуговує дану зону DNS. Для цього у властивостях потрібної зони (dnssec) на вкладці Trust Anchor включите опцію Enable the Distribution of Trust Anchors for this zone і збережіть зміни.
Спробуємо ще раз опитати цю зону з клієнта.
Як ми бачимо, у відповіді DNS сервера є інформації про RRSIG записи і цифрового підпису.
Налаштування клієнтів WIndows на використання DNSSEC
Щоб змусити клієнтів на ОС Windows примусово використовувати тільки "безпечні" (DNSSEC) запити, тобто приймати DNS дані тільки в тому випадку, якщо їх цифровий підпис вірна, необхідно за допомогою GPO задіє політику NRPT (Name Resolution Policy Table).
Для цього в розділі GPO Computer Configuration -> Polices -> Windows Settings -> Name Resolution Policy на вкладці DNSSEC включите опції:
- Enable DNSSEC in this rule
- Require DNS clients to check that name and address data has been validated by the DNS server
Залишилося призначити політику на потрібну OU. Після застосування політики переконаємося, що клієнт налаштований на використання "безпечного" DNS:
Get-DnsClientNrptPolicy
значення DNSSecValidationRequired = True, тобто на клієнті потрібна обов'язкова валідація відповідей DNS.
У тому випадку, якщо отриманий від DNS сервера відповідь не буде підписаний, або буде підписаний невірним сертифікатів, команда поверне помилку Unsecured DNS packet.
DNSSEC для зовнішніх зон
Щоб DNS сервер вимагав обов'язкової перевірки DNSSEC для зовнішніх зон, потрібно в його властивостях на вкладці Advanced включити опцію Enable DNSSEC validation for remote responses.
Імпортувати якоря довіри кореневих зон можна вручну (описано вище), або за допомогою команди:
dnscmd / RetrieveRootTrustAnchorsПорада. Для коректної роботи DNSSEC необхідно внести ряд змін в міжмережеві екрани:
- Відкрити в обидві сторони порт 53 порт протоколів TCP і UDP
- Оскільки розмір даних в пакеті DNSSec перевищують 512 байт, необхідно дозволити проходження DNS пакетів більше 512 байт по UDP і TCP