Současný model certifikačních autorit má několik zásadních slabin. Mezi ty nejviditelnější patří fakt, že jsou si autority rovny, tedy že libovolná z nich může teoreticky vydat certifikát pro libovolnou doménu. Z hlediska uživatele bude vše v pořádku, protože pokud jeho klient nepoužívá například validaci záznamů TLSA (DANE) nebo nemá nakešované hlavičky HPKP, nedozví se, že je něco špatně.
Útočník tak může zmanipulovat některou z autorit tak, aby mu vydala certifikát s jeho vlastním veřejným klíčem. V takovém případě je pak schopen se vydávat za cizí server, protože vlastní privátní klíč k platnému certifikátu vydanému důvěryhodnou autoritou. Nedávno se takto podařilo například kvůli chybě vylákat certifikáty k doménám GitHubu.
Takto chybně vydané certifikáty jsou velkým problémem, který se v komunitě intenzivně řeší. Vývojáři Chrome například intenzivně prosazují databázi Certificate Transparency, jejíž použití bude pro autority povinné ještě během letošního roku. Umožní dodatečně odhalit, že byl neoprávněně vydán certifikát pro vaši doménu. Pokud budete tento log automatizovaně sledovat (třeba pomocí utility certspotter), certifikátu si všimnete. V tu chvíli už ale bude vydaný a může být zneužíván proti uživatelům.
CAA jako prevence
Záznam typu CAA má za úkol chybnému vydání certifikátů předcházet. Provozovatel domény pomocí tohoto záznamu v DNS určí, které autority jsou oprávněny certifikát pro danou doménu vystavovat. Kontrola tohoto záznamu je pro autoritu zatím dobrovolná, ale jde o jakousi pojistku navíc, protože chrání autoritu před chybným vystavením certifikátu. Ať už vlivem technického problému nebo úmyslnou manipulací.
Důležité je, že na rozdíl od zmíněného TLSA nejsou záznamy typu CAA určeny pro validaci koncovým klientem. Aplikace je nesmí využívat při kontrole důvěryhodnosti certifikátu. Výslovně to zakazuje RFC 6844, které tyto záznamy zavádí. Důvodem je především to, že záznamy se mohou v čase měnit a zatímco autorita se k nim dostává v čase vydání certifikátu, klient už může později vidět jiný stav. Třeba ten určený pro novou autoritu. Pro klienty zůstává platný TLSA záznam.
V případě nové žádosti o vystavení certifikátu autorita kromě dalších validačních kroků zkontroluje na doméně přítomnost CAA záznamu. Pokud existuje a povoluje dané autoritě vystavení certifikátu, proces může pokračovat. Pokud záznam odkazuje na jinou autoritu, měl by být proces vydávání zastaven.
Samozřejmě stále existuje řada scénářů, které dovolují tuto kontrolu obejít. Útočník může zcela ovládnout systémy autority a vystavit si certifikát i bez kontroly. Může také získat privátní klíče autority a pak si podepisovat certifikáty dle libosti. Ovšem viděli jsme celou řadu případů, kdy byla zneužita drobná chyba v API autority nebo byl narušen validační proces. V takové situaci by CAA záznam velmi pravděpodobně umožnil vydání certifikátu zastavit. Stejně tak může být využit jako obrana proti plně automatizovaným autoritám, které by mohl útočník zmanipulovat. Stále je tu řada situací, kdy další zámek navíc pomůže.
V současné době je kontrola CAA záznamů ze strany autorit zcela dobrovolná a některé autority s ní už začaly. Chrání tím především samy sebe před skandálem s omylem vydanými certifikáty pro důležité domény. Od 8. září ale musí záznam kontrolovat všechny autority. Správci domén tak budou mít možnost skutečně významně omezit možnosti zneužití systému PKI.
Je tu samozřejmě otázka, zda se některé autority nemohou rozhodnout CAA jednoduše ignorovat. Pokud by tak učinily, vystavují se riziku vyřazení z databází důvěryhodných autorit, protože budou porušovat jedno ze závazných pravidel. Navíc je třeba zopakovat, že je v zájmu autorit podobnou pojistku podporovat, protože tím chrání především samy sebe. Jeho nasazením nemáme v každém případě co ztratit.
V době psaní článku CAA záznam validují autority: Amazon, Certum, Comodo, DigiCert, Entrust, GlobalSign, GoDaddy, Izenpe, QuoVadis, Starfield GoDaddy, StartCom WoSign, Let’s Encrypt, Symantec/GeoTrust/Thawte, T-Telesec, Trustwave, WoSign.
Jak si ho pořídit a nasadit
CAA je záznam typu 257 a pokud máte starší utility (například dig
), bude vám pod tímto označením také zobrazován. Vyzkoušel jsem, že například BIND utils 9.9.5 tento záznam ještě neznají, verze 9.11 si s ním ale už rozumí a zobrazí vám jednak samotný název záznamu, ale i jeho podobu dekódovanou do lidsky čitelné podoby.
Pro vytvoření záznamu je možné použít pěkný webový CAA Record Generator, kde stačí jednoduše vyplnit doménu a poté naklika, které autority mají oprávnění vydávat běžný či hvězdičkový certifikát pro danou doménu.
Generátor poté vygeneruje záznam ve standardním tvaru pro běžné DNS servery, případně v legacy tvaru pro starší verze. Nakonec záznam vypadá například takto:
$ dig nebezi.cz caa +short 0 issue "letsencrypt.org" 0 issuewild "\;"
Vidíte, že jsou tu záznamy dva, jeden pro běžný certifikát na konkrétní jméno, druhý na hvězdičkové certifikáty. V případě webu Neběží.cz tak signalizujeme autoritám, že jedině Let's Encrypt je oprávněna vydávat pro doménu certifikáty. Číslo v záznamu (v tomto případě nula) pak značí, zda je daný záznam kritický. Pokud by zde byla hodnota 128, nesmí autorita certifikát vydat, pokud by danému záznamu nerozuměla.
Definován je ještě záznam typu iodef
, který dovoluje určit způsob, jakým autorita správci domény může ohlásit, že se někdo pokusil neoprávněně certifikát získat. Informace putují pomocí formátu IODEF (RFC 5070) a mohou být doručeny zde uvedeným e-mailem nebo na URL webové služby podle RFC 6546. Chování autority v tomto ohledu ale podléhá vnitřním směrnicím a není zaručeno, že autorita bude incidenty hlásit.
Další pojistka
Záznam typu CAA slouží jako další pojistka navíc, která nic nepokazí. Už teď ji podporuje celá řada autorit, za pár měsíců to budou dělat povinně všechny. Autority by tak už neměly neoprávněně vystavit certifikát, pokud správce domény záznam zavedl a uvádí v něm skutečně jen tu svou používanou autoritu.
Zároveň to ale umožní posílení externí kontroly například s pomocí Certificate Transparency. Bude tak možné automatizovaně kontrolovat všechny vystavené certifikáty a vyhledávat v použitých doménových jménech CAA záznamy. Přinejmenším tak bude možné velmi rychle a efektivně odhalit autority, které i přes povinnou kontrolu CAA certifikát vystavily.