6 Сентябрь 2018

Обновление ключа корневой зоны DNS

Root Zone Key Signing Key Rollover

В конце августа 2018 года ICANN выпустила напоминание о запланированном на октябрь текущего года обновлении ключа подписей Key Sigining Key (KSK) корневой зоны DNS который является ключевым звеном в цепочке доверия DNSSEC.

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

В настоящее время корневая зона подписана ключом KSK с id 19036. В этом можно удостоверится, воспользовавшись, к примеру, утилитой drill на примере домена kostikov.co

root@beta:~ # drill -TD kostikov.co
;; Number of trusted keys: 2
;; Domain: .
[T] . 172800 IN DNSKEY 257 3 8 ;{id = 20326 (ksk), size = 2048b}
. 172800 IN DNSKEY 257 3 8 ;{id = 19036 (ksk), size = 2048b}
. 172800 IN DNSKEY 256 3 8 ;{id = 41656 (zsk), size = 2048b}
Checking if signing key is trusted:
New key: .      172800  IN      DNSKEY  256 3 8 AwEAAfaifSqh+9ItxYRCwuiY0FY2NkaEwd/zmyVvakixDgTOkgG/PUzlEauAiKzlxGwezjqbKFPSwrY3qHmbbsSTY6G8hZtna8k26eCwy59Chh573cu8qtBkmUIXMYG3fSdlUReP+uhBWBfKI2aGwhRmQYR0zSmg7PGOde34c/rOItK1ebJhjTAJ6TmnON7qMfk/lKvH4qOvYtzstLhr7Pn9ZOVLx/WUKQpU/nEyFyTduRbz1nZqkp6yMuHwWVsABK8lUYXSaUrDAsuMSldhafmR/A15BxNhv9M7mzJj7UH2RVME9JbYinBEzWwW9GpnY+ZmBWgZiRVTaDuemCTJ5ZJWLRs= ;{id = 41656 (zsk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  256 3 8 AwEAAfaifSqh+9ItxYRCwuiY0FY2NkaEwd/zmyVvakixDgTOkgG/PUzlEauAiKzlxGwezjqbKFPSwrY3qHmbbsSTY6G8hZtna8k26eCwy59Chh573cu8qtBkmUIXMYG3fSdlUReP+uhBWBfKI2aGwhRmQYR0zSmg7PGOde34c/rOItK1ebJhjTAJ6TmnON7qMfk/lKvH4qOvYtzstLhr7Pn9ZOVLx/WUKQpU/nEyFyTduRbz1nZqkp6yMuHwWVsABK8lUYXSaUrDAsuMSldhafmR/A15BxNhv9M7mzJj7UH2RVME9JbYinBEzWwW9GpnY+ZmBWgZiRVTaDuemCTJ5ZJWLRs= ;{id = 41656 (zsk), size = 2048b}
Key is now trusted!
[T] co. 86400 IN DS 10384 8 1 df157833aad57f3561f3a47f178ba46e7e7183dc
co. 86400 IN DS 10384 8 2 a76358b4c22e95c2c4a56db8adc923779e0829142d7c51b04e54769c86407d70
co. 86400 IN DS 21754 8 1 8b9b8fda21b4cf6fc3e97a31fc0d77c1cb7e70ee
co. 86400 IN DS 21754 8 2 c30634014c0752da93b0633ed4ce641b63826a5ded820027f4117ca0c32050a0
;; Domain: co.
[T] co. 518400 IN DNSKEY 256 3 8 ;{id = 63993 (zsk), size = 1280b}
co. 518400 IN DNSKEY 257 3 8 ;{id = 10384 (ksk), size = 2048b}
Checking if signing key is trusted:
New key: co.    518400  IN      DNSKEY  256 3 8 AwEAAb2ppBK7kDCHSvK3eu3wzPG3RqY4GQSJjbxMA0vGyhQwa0M1exdk4rNarxcfGSRECVVovHbPKxver/VYZ/zUy9Gvx7vp1w48v6wSeFusvVMiWW8JTQEcbygmt8klKTWRoPuMg7tC5uAPQyX42imaUmRVT1HQfcx0qVIfUmF4NwJQLv3BAgR/gop9HwPef3HYVHqrd+3YdamE/BX8G8myWsc= ;{id = 63993 (zsk), size = 1280b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b}
        Trusted key: .  172800  IN      DNSKEY  256 3 8 AwEAAfaifSqh+9ItxYRCwuiY0FY2NkaEwd/zmyVvakixDgTOkgG/PUzlEauAiKzlxGwezjqbKFPSwrY3qHmbbsSTY6G8hZtna8k26eCwy59Chh573cu8qtBkmUIXMYG3fSdlUReP+uhBWBfKI2aGwhRmQYR0zSmg7PGOde34c/rOItK1ebJhjTAJ6TmnON7qMfk/lKvH4qOvYtzstLhr7Pn9ZOVLx/WUKQpU/nEyFyTduRbz1nZqkp6yMuHwWVsABK8lUYXSaUrDAsuMSldhafmR/A15BxNhv9M7mzJj7UH2RVME9JbYinBEzWwW9GpnY+ZmBWgZiRVTaDuemCTJ5ZJWLRs= ;{id = 41656 (zsk), size = 2048b}
        Trusted key: co.        518400  IN      DNSKEY  256 3 8 AwEAAb2ppBK7kDCHSvK3eu3wzPG3RqY4GQSJjbxMA0vGyhQwa0M1exdk4rNarxcfGSRECVVovHbPKxver/VYZ/zUy9Gvx7vp1w48v6wSeFusvVMiWW8JTQEcbygmt8klKTWRoPuMg7tC5uAPQyX42imaUmRVT1HQfcx0qVIfUmF4NwJQLv3BAgR/gop9HwPef3HYVHqrd+3YdamE/BX8G8myWsc= ;{id = 63993 (zsk), size = 1280b}
Key is now trusted!
        Trusted key: co.        518400  IN      DNSKEY  257 3 8 AwEAAbRMbIuINuButWsoFlw9DNU0TAsPVE50npMdT5hLjt26fGexhKI45U3Nk0fWxeaPq426PmUSbUe9AM7EYkspANizgtj8Sy39HIbcrLH1GVo4vxxoIGdtSsnSkKqZLNT8zg2fySkNCBI1923Y/D/dMYvVXxuzK8MCKR4O8QYDEZxLBraFx/1VdLBZPdetWFf94Ue2JuHHX1t83HN+MYAPgdbyFk5kftD33G/ROhOpBLLf37b7HJV0I3iofb9/q+aTthyNhuG5eF8FvPr6/PiBHqvMm1iy8Fmn+b135k1wbRrrygZwEkvHwyMDMCLXkRiah8l2YEVTt89i4+v4ur8WoQU= ;{id = 10384 (ksk), size = 2048b}
[T] kostikov.co. 7200 IN DS 47047 13 2 33d2e710eae6c4e9ac308e174d9e817696b8b87950390ca0367ac2c0f1559368
;; Domain: kostikov.co.
[T] kostikov.co. 86400 IN DNSKEY 256 3 13 ;{id = 40794 (zsk), size = 256b}
kostikov.co. 86400 IN DNSKEY 256 3 13 ;{id = 7918 (zsk), size = 256b}
kostikov.co. 86400 IN DNSKEY 257 3 13 ;{id = 47047 (ksk), size = 256b}
[T] kostikov.co.        86400   IN      A       78.40.219.163
;;[S] self sig OK; [B] bogus; [T] trusted

То же можно увидеть в графической форме через замечательный сервис DNSviz.

Описание изображения

На смену ему в 2017 году был сгенерирован новый ключ с id 20326, который и будет использоваться с октября 2018 для подписи корневой зоны.

Цепочка доверия DNSSEC строится, в отличие от Certificate Authority для обычных TLS-сертификатов, как бы, снизу вверх — от подписанного вами домена вплоть до корневой зоны ".", когда домен более низкого уровня передаёт свои публичные ключи регистратору через механизм подписи ключом вышележащего домена. При этом, очевидно, что если для доменов первого и более низкого уровня возможно выстроить цепочку доверия и, благодаря этому, получить публичные ключи из самого DNS, то для корневой зоны это невозможно. В этой связи каждый DNS-сервер, поддерживающий DNSSEC, хранит локальную копию ключа KSK корневой зоны.

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

root@beta:~ # ps auxww | grep unbound
unbound  24104   0,0  0,7   42016  28184  -  Ss   вт16            0:40,59 /usr/local/sbin/unbound -c /usr/local/etc/unbound/unbound.conf
root     77503   0,0  0,1    6696   2576  0  S+   20:40           0:00,00 grep unbound
root@beta:~ # ls /usr/local/etc/unbound/
root.key                unbound_control.pem     unbound_server.pem      unbound.conf.sample
unbound_control.key     unbound_server.key      unbound.conf            unbound.pid
root@beta:~ # cat /usr/local/etc/unbound/root.key
; autotrust trust anchor file
;;id: . 1
;;last_queried: 1536236721 ;;Thu Sep  6 14:25:21 2018
;;last_success: 1536236721 ;;Thu Sep  6 14:25:21 2018
;;next_probe_time: 1536275892 ;;Fri Sep  7 01:18:12 2018
;;query_failed: 0
;;query_interval: 43200
;;retry_time: 8640
.       172800  IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b} ;;state=2 [  VALID  ] ;;count=0 ;;lastchange=1504986280 ;;Sat Sep  9 21:44:40 2017
.       172800  IN      DNSKEY  257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU= ;{id = 20326 (ksk), size = 2048b} ;;state=2 [  VALID  ] ;;count=0 ;;lastchange=1504986280 ;;Sat Sep  9 21:44:40 2017

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

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

root@beta:~ # cd /usr/local/etc/unbound/
root@beta:/usr/local/etc/unbound # rm root.key
root@beta:/usr/local/etc/unbound # unbound-anchor
root@beta:/usr/local/etc/unbound # ll root.key
-rw-r--r--  1 root  wheel  83  6 сент. 21:08 root.key
root@beta:/usr/local/etc/unbound # service unbound restart
Stopping unbound.
Waiting for PIDS: 24104.
Obtaining a trust anchor:.
Starting unbound.

Для других DNS-серверов рекомендуется воспользоваться процедурами, опубликованными ICANN в документе "Updating of DNS Validating Resolvers with the Latest Trust Anchor".

Если вы являетесь оператором DNS-сервера то настоятельно рекомендую озаботиться вопросом актуальности информации о ключах корневой зоны DNS уже сейчас во избежание возможных проблем с DNSSEC.


dns  security  dnssec