Chaining CNAMEs en GRC

Mijnheer Gibson heeft weer wat leuks en ook iets ook heel onverstandigs online staan. Een changing CNAME met veel schakels, heel veel schakels, heel heel heel veel schakels. En er blijken voldoende thuisrouters niet tegen te kunnen zoals ook bij Security.nl naar voren kwam. Ook komt hier gelijk wat anders naars naar voren.

Maar eerst over het probleem zelf en ja het is een probleem. Het is misschien ook wel iets waar Bert Hubert van PowerDNS naar hinten tijdens Hacking at Random. Er zitten nog veel fouten in de resolvers die moeten worden opgelost en dit bleek ook tijdens een test in Zweden met DNSSEC waarbij veel thuisrouters omvielen terwijl ze hoorden te blijven werken. Het onderstaande dus met zorg gebruiken.

$ dig vu4juskpieril.dns.grc.com.

< <>> DiG 9.6.1-P2 < <>> vu4juskpieril.dns.grc.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: SERVFAIL, id: 14245
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;vu4juskpieril.dns.grc.com. IN A

;; ANSWER SECTION:
vu4juskpieril.dns.grc.com. 59 IN CNAME 1gmwga5hrrwca.dns.grc.com.
1gmwga5hrrwca.dns.grc.com. 59 IN CNAME wyxhcj5oe4pnj.dns.grc.com.
wyxhcj5oe4pnj.dns.grc.com. 59 IN CNAME 4t3bqsavrixij.dns.grc.com.
4t3bqsavrixij.dns.grc.com. 59 IN CNAME dhykkk0tjnzwd.dns.grc.com.
dhykkk0tjnzwd.dns.grc.com. 59 IN CNAME w2zci5lhiezqe.dns.grc.com.
w2zci5lhiezqe.dns.grc.com. 59 IN CNAME aupbutbnfy1jn.dns.grc.com.
aupbutbnfy1jn.dns.grc.com. 59 IN CNAME tfriugiykoa5f.dns.grc.com.
tfriugiykoa5f.dns.grc.com. 59 IN CNAME bjdvr3qbhor5e.dns.grc.com.
bjdvr3qbhor5e.dns.grc.com. 59 IN CNAME m0iyvioma2ywe.dns.grc.com.

;; Query time: 2597 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Sun Dec 20 11:27:02 2009
;; MSG SIZE rcvd: 295

Er wordt een vraag uitgezet bij resolver en deze moet bijna oneindig bezig blijven om met een antwoord te komen. Of de resolver blijft “eeuwig” bezig, of stopt met werken door een gebrek aan geheugen bv, of omdat het niet op te lossen en geeft een timeout, of geeft alleen het eerst antwoord. Voorlopig lijken BIND en PowerDNS goed te werken en ook de firmware voor routers van AVM aka Fritz!Box.

Als je mensen wilt pesten dan is de bekende 1×1 pixel image in je e-mail, webpagina, etc wel een aardige optie. Zeker omdat dan ineens veel software alles moet gaan werken zoals virusscanner, spamfilters, contentfilters, etc, etc. Hier ligt ook een groot probleem en waarom ik geen voorstander ben van dit soort toepassingen. Het maakt het probleem eigenlijk veel groter dan het eigenlijk is, want vaak zijn die applicaties even slecht geschreven of maken gebruik van dezelfde bibliotheken als normale applicaties.

DNSSEC en DLV

Debian 5.0 heeft de beschikking over BIND 9.5.1 en Debian Unstable heeft de beschikking over BIND 9.6.0 welke beide de mogelijkheid bieden om DNSSEC-validatie te gaan aan de hand van DLV. Met behulp van DLV is eigenlijk het probleem van chain-of-trust vanuit de root-zone “opgelost”. Door een derde partij te vertrouwen welke de DS-keys kan vertellen aan andere partijen wordt gevalideerde resolving mogelijk.

Een van de partijen die dit aanbiedt is ISC en is sinds BIND 9.4 te gebruiken, maar versie 9.5.1 of 9.6.0 (deze versie ondersteunt NSEC3-records) zijn aanbevolen. Gelukkig zijn er al toplevels zoals van Zweden en Brasilie welke als DNSSEC op ccTLD hebben ingevoed. Helaas heeft SIDN, de beheerder van de nl-zone, alleen een tijdelijk project gehad om DNSSEC te testen en hopelijk komt daar binnenkort verandering in met vorderingen van DRS4. Een andere toplevel welke een harde deadline heeft gekregen is het toplevel .gov welke onder de Verenigde Staten van Amerika valt. En alle overheidsinstellingen moeten met ingang van december 2009 voor zowel internet als intranet DNSSEC hebben ingevoerd. Op de dns-operations mailinglist werd ook aangekondigd dat per 1 mei 2009 .gov weer was opgenomen in dlv.isc.org zodat verificatie weer mogelijk werd. En tot nu toe lijkt deze actie redelijk probleemloos te gaan.

Sinds BIND op dit moment een van de weinige authoritive en resolving nameservers is die DNSSEC ondersteunt werd het weer tijd om te gaan testen. Helaas heeft Sun Solaris cq OpenSolaris nog geen bijgewerkte versie van BIND standaard meegeleverd en blijft alleen Debian voor mij over op dit moment. Een (virtuele) machine met Debian 5.0 met daarop BIND 9.5.1 of hoger en een werkende NTP-server zijn voorlopig voldoende om DNSSEC te gaan testen voor een resolving nameserver. Als de volgende aanpassingen worden gemaakt aan /etc/bind/named.conf.options:

trusted-keys {
dlv.isc.org. 257 3 5 "BEAAA...rBNh";
};
options {
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside . trust-anchor dlv.isc.org.;
};
logging {
channel dnssec_log {
file "/var/log/named/dnssec" size 20m;
print-time yes;
print-category yes;
print-severity yes;
severity debug 3;
};
category "dnssec" { "dnssec_log"; };
};

In het voorbeeld staat geen valide key om veiligheidsredenen en de key kan worden opgehaald bij ISC en het is verstandig om de sleutel te controleren met PGP voordat deze wordt toegevoegd. Dit is een kritiek punt in de vertrouwens relatie en door een foutieve key te importeren wordt ook de vertrouwensrelatie met de rest van de wereld beïnvloed.

Standaard is er geen directory voor logfiles van BIND binnen Debian aanwezig en met de eerste twee volgende commando’s wordt er een directory aangemaakt en de permissies goed gezet. Het commando erna zal BIND volledig opnieuw starten zodat alle instellingen worden geactiveerd en zal DNSSEC moeten werken.

sudo mkdir -m 0700 /var/log/named
sudo chown bind /var/log/named
sudo /etc/init.d/bind9 restart

Het onderstaande commando kan worden gebruikt om aan te tonen dat DNSSEC nu wordt gebruikt voor validatie. Bij de flags staat nu ook de flag ad (Authentic Data) welke alleen wordt gezet als er met behulp van DNSSEC en DLV een validatie is gedaan.

$ dig +dnssec -t any br. @127.0.0.1
; < <>> DiG 9.5.1-P2 < <>> +dnssec -t any br. @127.0.0.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 33043
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 13, AUTHORITY: 7, ADDITIONAL: 1

Het is misschien onnodig om te vermelden, maar DNSSEC is geen oplossing om even te testen, neer te zetten en daarna te vergeten. De komende jaren zullen veel problemen ontstaan welke in het verleden stilletjes zijn ontstaan door slecht ontworpen infrastructuur en infrastructuur welke slecht of geen beheer heeft. En mijn persoonlijk vermoede is dat hier vooral e-mail hinder van gaat ondervinden, maar dat is iets wat tijd ons zal leren en hopelijk heb ik ongelijk.

Voorbereiden voor DNSSEC

Hoewel DNSSEC eigenlijk op mijn todo-lijst stond voor over een paar maanden als PowerDNS daadwerkelijk ondersteuning zou krijgen, maar helaas is daar verandering in gekomen door recente ontwikkelingen. Zeker nadat er serieuze problemen zijn ontdekt waardoor vrij snel nameservers die acteren als resolver kunnen worden voorzien van valse data. En hoewel er voorlopig tijdelijke oplossingen zijn is een echte oplossingen eigenlijk alleen DNSSEC.

Aangezien DNSSEC ondersteuning bij PowerDNS en NSD beperkt is blijft voorlopig alleen Bind over als bruikbare optie aangezien het wel crossplatform moet werken. Bind is en blijft de defacto-standaard op bijna elke Unix-platform zoals HP-UX, Solaris, AIX, BSD en vele Linux-distributies. Ook omdat dit de referentie implementatie is van bijna elke RFC gerelateerd aan DNS.

Een eerste probleem dook al op bij de eerste testen, want goede entropy gaat een probleem vormen. De normale pseudogenerator voor deze getallen is blocking totdat er weer voldoende random getallen zijn, maar helaas kan het dus even deuren voordat er onvoorspelbare sleutels zijn. Een alternatief is om de non-blocking pseudogenerator te gebruiken welke vrij snel getallen kan opleveren, maar deze kunnen voorspelbaar zijn door hergebruik van oude getallen. Als dit laatste gebeurt zijn we weer terug af bij waar we begonnen zijn met de huidige DNS-problemen.

Voor deze problemen zal een oplossing moeten worden gezocht welke hoogstwaarschijnlijk in de vorm van hardware zal gaan zijn om aan de vraag van willekeurige getallen te kunnen voldoen. De eerste apparaten die lijken te voldoen zijn ongeveer 100 euro per stuk wat een redelijke prijs is. Nu wordt het uitzoeken of deze worden ondersteunt onder oa Linux en Solaris, maar hopelijk zijn er andere oplossingen zeker nu het kernel cryptographic framework vormt heeft gekregen in Solaris 10.

Perl blijft het plakband

Perl Camel“Perl is the ducktape of Internet” is de uitspraak van iemand bij Sun Microsystems en ik kan hem geen ongelijk geven. In amper een uurtje en 100 regels code doorloopt een Perl-script nu elke dag netjes door een tabel en zoekt resource records op in DNS. Als alles correct gaat in de dry-run van de komende tijd zal dit me weer wat tijd besparen wat ik dan aan andere dingen kan besteden. Ik vraag me alleen wel af of ik zo uberhaupt nog wel aan Python of Java leren toekom en of het nog toegevoegde waarde gaat hebben.