DNSSECDNSSEC (англ. Domain Name System Security Extensions) — набор расширений протокола DNS, позволяющих минимизировать атаки, связанные с подменой IP-адреса при разрешении доменных имён. Он направлен на предоставление DNS-клиентам (англ. термин resolver) гарантии достоверности и целостности данных. ОписаниеDNSSEC была разработана для обеспечения безопасности клиентов от фальшивых DNS-данных, например, создаваемых DNS cache poisoning. DNSSEC не шифрует данные и не изменяет управление ими. DNSSEC может подтвердить и такую информацию, как криптографические сертификаты общего назначения, хранящиеся в CERT record DNS. RFC 4398 описывает, как распределить эти сертификаты, в том числе по электронной почте, что позволяет использовать DNSSEC в качестве глобального распределённого хранилища сертификатов ключей подписи. DNSSEC не обеспечивает конфиденциальность данных; в частности, все DNSSEC ответы аутентифицированы, но не шифруются. DNSSEC не защищает от DoS-атак непосредственно, хотя в некотором роде делает это косвенно. Для обеспечения защиты необходимо использовать сторонние методы. DNSSEC спецификации (DNSSEC-bis) подробно описывают текущий протокол DNSSEC. См. RFC 4033, RFC 4034 и RFC 4035. ИсторияИзначально система доменных имён не имела механизмов защиты от подмены информации в ответе сервера, так как во времена разработки (в начале 1980-х годов) угрозы безопасности современного Интернета не являлись актуальными. При этом клиенты судили о верности полученной информации исключительно по двухбайтовому идентификатору запроса. Таким образом, злоумышленнику требовалось перебрать 65536 значений, чтобы «отравить кэш». Это означало, что данные в системе DNS повреждены. Сервер кэширует ложные данные в целях оптимизации и начинает предоставлять эти их своим клиентам. Ещё в 1990 году Стив Белловин (англ. Steve Bellovin) выявил серьёзные недостатки в безопасности. Исследования в этой области начались и проводились полным ходом со времён публикации доклада в 1995 году[1]. Первая редакция DNSSEC RFC 2065 была опубликована IETF в 1997 году. Попытки реализации этой спецификации привели к появлению нового стандарта RFC 2535 в 1999 году. Реализацию DNSSEC планировали, основываясь на IETF RFC 2535. К сожалению, у IETF RFC 2535 были серьёзные проблемы с масштабированием. К 2001 году стало ясно, что эта спецификация была непригодна для крупных сетей. При нормальной работе DNS серверы часто десинхронизировались со своими родителями. Обычно это не являлось проблемой, но при включенном DNSSEC, десинхронизованные данные могли нести непроизвольный DoS эффект. Защищённый DNS гораздо более ресурсоёмок в вычислительном плане, и с большей, относительно «классического» DNS, лёгкостью может занять все вычислительные ресурсы. Первая версия DNSSEC требовала коммуникации из шести сообщений и большое количество переданных данных для осуществления изменений наследника: все DNS зоны наследника должны быть полностью переданы родителю, родитель вносит изменения и отправляет их обратно наследнику. Кроме того, изменения в публичном ключе могли нести катастрофические последствия. Например, если бы зона «.com» изменила свой ключ, то пришлось бы отправить 22 миллиона записей, так как всем наследникам необходимо было бы обновить все записи. Эти сложности, в свою очередь, вызвали появление новых спецификаций: RFC 4033, RFC 4034, RFC 4035 с принципиальными изменениями. Стандарты устранили основную проблему предыдущей реализации и, хотя клиентам пришлось совершать дополнительные действия для проверки ключей, спецификация оказалась вполне пригодной для практического применения. В 2005 появилась текущая и последняя спецификация DNSSEC. Знаковое событие случилось в 2008 году, когда Дэн Камински показал миру, что отравить кэш можно за 10 секунд. Производители программного обеспечения DNS ответили тем, что кроме идентификатора запроса стали случайно выбирать исходящий порт для запроса. Попутно начались споры по поводу внедрения DNSSEC. Изменение DNSSEC, которое называется DNSSEC-bis. Название было дано чтобы отличать DNSSEC-bis от первоначального подхода DNSSEC в RFC 2535. DNSSEC-bis использует принцип DS (англ. delegation signer) для обеспечения дополнительного уровня косвенной делегации при передаче зон от родителя к наследнику. В новом подходе при смене открытого ключа администратору вышестоящего домена отсылается только одно-два сообщения вместо шести: наследник посылает дайджест (fingerprint, хеш) нового открытого ключа родителю. Подпись и проверка данных создают дополнительные оверхеды. К примеру, в среднем совокупность доменных имён определённого уровня входящих в конкретный домен в 7-10 раз превышает по размеру саму DNS. Генерация и проверка подписей отнимает значительное процессорное время. Подписи и ключи занимают на порядок больше места на диске и в оперативной памяти, чем сами данные. Принцип работыПринцип работы DNSSEC основан на использовании цифровых подписей. У администратора имеются записи о соответствии имени домена и IP-адреса. DNSSEC ставит каждой из них в строгое соответствие специальную цифровую подпись. Все ответы от DNSSEC имеют обратную совместимость и подразумевают наличие цифровой подписи. Допустим, пользователь обращается к сайту wikipedia.org. Происходит следующее:
При невозможности валидации резолвер вернет ошибку servfail. Таким образом получившаяся цепочка доверия сводится к корневому домену и ключу корневой зоны. Delegation of Signing (DS) — запись содержит хеш доменного имени наследника и его ключа KSK. Запись DNSKEY содержит публичную часть ключа и его идентификаторы (ID, тип и используемая хеш-функция). KSK (Key Signing key) — ключ подписи ключа (ключ долговременного пользования), а ZSK (Zone Signing Key) — ключ подписи зоны (ключ кратковременного пользования). С помощью KSK подтверждается ZSK, которым подписывается корневая зона. ZSK корневой зоны создаёт компания PTI (функциональное подразделение IANA корпорации ICANN), которая технически отвечает за распространение корневой зоны DNS. По принятой ICANN процедуре, ZSK корневой зоны обновляется четыре раза в год. Подпись корневой зоныДля полноценного подтверждения всех данных, передавамых с помощью DNSSEC, нужна цепочка доверия, идущая от корневой зоны (.) DNS. Внедрение подписанной корректным образом корневой зоны на все корневые серверы DNS могло вызвать крах современного Интернета, поэтому IETF вместе с ICANN была разработана постепенная процедура внедрения. Процедура затянулась более, чем на 8 месяцев и включала в себя пошаговое внедрение на серверы DNS сначала корневой зоны, подписанной недействительным ключом. Этот шаг был необходим для того, чтобы обеспечить тестирование серверов под нагрузкой, сохранить обратную совместимость со старым программным обеспечением и оставить возможность отката к предыдущей конфигурации. К июню 2010 года все корневые серверы корректно работали с зоной, подписанной невалидным ключом. В июле ICANN провёл международную конференцию, посвящённую процедуре генерации ключей электронной подписи, которой впоследствии была подписана корневая зона. 15 июля 2010 года состоялось подписание корневой зоны и началось внедрение подписанной зоны на серверы. 28 июля ICANN сообщил[2] о завершении этого процесса. Корневая зона была подписана электронной подписью и распространилась в системе DNS. 31 марта 2011 года была подписана самая большая зона в Интернете (90 млн доменов) — .com[3]. Инфраструктура ключейICANN выбрал такую модель, когда управление подписанием зоны происходит под контролем представителей интернет-сообщества (Trusted community representative, TCR). Представители выбирались из числа людей, не связанных с управлением корневой зоной DNS. Выбранные представители занимали должности крипто-офицеров (Crypto Officer, CO) и держателей частей ключа восстановления (Recovery key shareholder, RKSH). CO были вручены физические ключи, позволяющие активировать генерацию ключа ЭЦП ZSK, а RKSH владеют смарт-картами, содержащими части ключа (KSK), используемого внутри криптографического оборудования. Некоторые СМИ сделали вывод, что процедуры, требующие присутствия CO или RKSH, будут проводиться в случае чрезвычайных ситуаций в сети[4]. Однако в соответствии с процедурами ICANN, CO будут привлекаться каждый раз при генерации ключа подписания зоны (ZSK), до 4 раз в год, а RKSH — вероятно, никогда или в случае утраты ключей CO, либо при компрометации корневой зоны[5]. Текущее состояниеНа октябрь 2013 года в корневой зоне присутствуют 81 национальный домен и 13 общих доменов, подписанных DNSSEC (без IDN-доменов), и обеспечивающих таким образом цепочку доверия доменам второго уровня. В 2011 году при помощи DNSSEC (NSEC3 opt-out) была подписана зона .su, имеющая отношение к России, а в конце октября 2012 года в ней началась публикация DS-записей, созданных пользователями.[6] В конце 2012 года был подписан российский домен .ru, а его DS-записи опубликованы в корневой зоне. Смена KSK корневой зоны11 октября 2018 года произошла первая ротация ключей KSK корневой зоны после подписи корневой зоны в 2010. Ротация ключей, первоначально запланированная на октябрь 2017 года, была отложена по решению ICANN, когда выяснилось, что значительное количество (около 2 %) резолверов используют один ключ для подтверждения цепочки подписей DNSSEC. За год были реализованы некоторые технические решения в пакетах DNS-серверов Bind, PowerDNS, Knot и др., проведена масштабная кампания по информированию широкого круга общественности о ротации ключей, и в итоге в сентябре 2018 года совет директоров ICANN принял решение осуществить ротацию. Значительных проблем, связанных с ротацией ключей, не выявили. Следующая ротация KSK корневой зоны планируется на период 2024-2025 годов. Проблемы внедрения и недостаткиВнедрение DNSSEC сильно задержалось по таким причинам, как:
Большая часть этих проблем разрешена техническим интернет-сообществом. Программное обеспечение DNSSECСерверная частьДве наиболее распространённые реализации DNS-серверов — BIND и NSD — поддерживают DNSSEC (10 из 13 корневых серверов используют BIND, оставшиеся 3 — NSD). Также есть поддержка у PowerDNS, Unbound и некоторых других DNS-серверов. Клиентская частьПо причине того, что серверов, на которых было развёрнуто расширение DNSSEC, было крайне мало, то программного обеспечения для конечных пользователей с поддержкой DNSSEC создавалось также совсем немного. Однако в операционных системах от Microsoft DNSSEC уже интегрирован. В Windows Server 2008 — RFC 2535, в Windows 7 и Windows Server 2008 R2 — актуальная версия DNSSEC-bis. В Windows ХP и Windows Server 2003 поддерживается RFC 2535, но они лишь могут успешно распознавать пакеты от серверов с DNSSEC, на этом их возможности заканчиваются. Отдельного упоминания стоит проект DNSSEC-Tools, представляющий набор приложений, дополнений и плагинов, который позволяет добавить поддержку DNSSEC в браузер Firefox, почтовый клиент Thunderbird, FTP-серверы proftpd, ncftp и в некоторые другие приложения[7]. Использование DNSSEC требует программного обеспечения как на серверной, так и на клиентской стороне.
Примечания
Ссылки
Документы RFC
|