Actualmente existen diversas soluciones que permiten automatizar la firma DNSSEC de los dominios, integrados a los mismos servicios que normalmente proveen DNS. En el ámbito de código abierto, los más utilizados permiten activar DNSSEC con algunas instrucciones en la configuración, sin preocuparse de llaves ni firmas.
Sin embargo, siempre es bueno tener herramientas que permitan hacer verificaciones o incluso firmas de una forma más de bajo nivel. Suelen ocurrir casos de uso donde alguien prefiere tener más control, o integrarse con sistemas internos no estándar.
Les presentamos dns-tools, una herramienta de línea de comandos (CLI), escrita en lenguaje Go, que permite firmar con DNSSEC una zona, crear registros de integridad de zona llamados ZONEMD, y a su vez validar estas firmas y registros. Esta herramienta fue creada por NICLabs, el laboratorio de NIC Chile. Es mantenida con código abierto en github, con licencia MIT.
Una de las cosas más destacadas, y que lo hace una herramienta única, es su integración con otro proyecto de NICLabs llamado dtc: firma distribuida de umbral, que permite utilizar un grupo de "sub"-firmadores que entregan mayor seguridad frente al caso de tener las llaves "en disco", como es el caso normal de los firmadores integrados en software DNS. Actualmente existen básicamente dos escalas de seguridad respecto a las llaves DNSSEC: o se mantienen en disco en 1 sola máquina, o bien se mantienen en un HSM externo. La solución de dns-tools está en el medio de estas dos, ya que por un lado no existe el riesgo de tener una llave completa en un disco; y por otro lado es mucho más barato que comprar un HSM dedicado.
Integridad de zona (ZONEMD)
La herramienta dns-tools tiene compatibilidad con el nuevo registro ZONEMD, creado a comienzos de este año. Este registro permite tener un checksum del archivo de zona completa, que permite al que recibe una zona verificar que está correcta. Es similar a los archivos SHA*SUM que acompañan ciertos software, que permite asegurarse que una descarga no fue modificada maliciosamente, o que tuvo fallas de transmisión.
Su utilidad es principalmente para ciertos sistemas que transfieren zonas usando el protocolo AXFR interno al DNS, que permite que cada uno de los receptores de una zona puedan verificar que está correcta. También se piensa que puede ser útil para la distribución de ciertas zonas por fuera del DNS, como es el caso por ejemplo de la raíz del DNS, que es publicada en sitios web o FTP, y que gracias al registro ZONEMD puede ser verificado luego de descargar.
Entonces, la herramienta dns-tools permite generar registros ZONEMD, y verificar los existentes. Fue una de las primeras implementaciones de este nuevo estándar, y cumplió con las pruebas de compatibilidad que realizaron los autores del documento.
Una cosa importante es que para generar registros ZONEMD es requisito que también sea firmada la zona con DNSSEC, por la misma herramienta. Y por ende es necesario tener acceso a las llaves.
Al contrario y al igual que en el caso de validación de DNSSEC, para verificar un registro ZONEMD solo basta con tener el archivo de zona.
$ dns-tools verify -f ejemplo.cl.zone.signed
[dns-tools] 2021/04/07 11:53:08 Zone parsed is ejemplo.cl.
Validating Scheme 1, HashAlg 1... ok
[dns-tools] 2021/04/07 11:53:08 Zone Digest: Verified Successfully.
Firma DNSSEC distribuida
dns-tools permite firmar una zona pasándole directamente las llaves en disco, al estilo de la mayor parte de los firmadores automáticos, pero también permite el uso de la interfaz PKCS11 para tener un depósito de llaves externo, sea este también en disco pero administrado por un proceso distinto (como SoftHSM), o un dispositivo de hardware externo especializado en criptografía, las HSM.
Es acá donde es posible integrar dns-tools con otro sistema desarrollado por NICLabs llamado "dtc" (Distributed Threshold Cryptography Library Signer / firma distribuida de umbral), que a través de esta misma interfaz PKCS11 permite utilizar "nodos firmadores" que comparten trozos de una llave y deben cumplir con ciertas reglas de consenso para generar una firma definitiva. Los detalles de esto dan para otro artículo.
Lo importante es tener claro que el comando:
$ dns-tools sign file -f ejemplo.cl.zone -K ksk.pem -Z zsk.pem
toma un archivo de zona normal, unas llaves DNSSEC en archivo en disco, y genera una zona correctamente firmada con DNSSEC. En caso que no existan las llaves, dns-tools también puede crearlas. Igualmente es posible usar la sintaxis:
$ dns-tools sign pkcs11 -f ejemplo.cl.zone -p /usr/lib/dtc.so
que permite utilizar la interfaz PKCS11 de comunicación con un depósito de llaves externo. Debe ser indicada la librería correspondiente con la opción -p.
$ dns-tools verify -f ejemplo.cl.zone.signed
[dns-tools] 2021/04/21 12:35:43 Zone parsed is ejemplo.cl.
Validating Scheme 1, HashAlg 1... ok[dns-tools] 2021/04/21 12:35:43 Zone Digest: Verified Successfully.
Los invitamos a probar la herramienta y utilizarla. Como todo proyecto de código abierto estamos atentos a necesidades de la comunidad, así que si siente que le falta algo o quiere colaborar con alguna corrección, por favor ingresa sus "issues" al github y la mejoramos entre todos!
Comentarios