Technologie Certificate Transparency nijak nezabrání neoprávněnému vydání certifikátu, dává ale jistotu, že všechny platné certifikáty jsou zveřejněny. Aby mělo zveřejnění nějaký bezpečnostní efekt, je potřeba seznamy certifikátů monitorovat. Přesně k tomu slouží open-source nástroj Cert Spotter.
Ten dokáže monitorovat známé CT logy a procházet všechny certifikáty, které do nich přibývají. Vybírá z nich přitom jen ty zajímavé, tedy ty vydané na konkrétní doménové jméno, případně subdoménu takového jména. Po dosažení konce si zapamatuje aktuální otisk kořenu daného logu a při dalším spuštění projde jen ty certifikáty, které do logu přibyly od minula.
Instalace a konfigurace
Cert Spotter je napsán v jazyce Go, pro jeho kompilaci je tedy nutné nainstalovat překladač tohoto jazyka. Zbytek instalace zvládneme už jen s uživatelským oprávněním.
# apt install golang-go
$ mkdir ~/go
$ go get software.sslmate.com/src/certspotter/cmd/certspotter
Nyní musíme připravit seznam sledovaných doménových jmen. Jde o jednoduchý textový soubor s jedním záznamem na řádek. Pokud jméno začíná tečkou, bude sledována jak samotná doména, tak i všechny subdomény. Jinak je sledováno pouze zadané jméno.
$ mkdir ~/.certspotter
$ echo .google.com > ~/.certspotter/watchlist
$ echo www.youtube.cz >> ~/.certspotter/watchlist
$ ~/go/bin/certspotter
První spuštění utility certspotter
pouze zaznamená aktuální kořeny Merkelova stromu (STH) pro všechny sledované logy do adresáře ~/.certspotter
. Jedná se tedy o určení okamžiku, od kterého bude zahájeno sledování všech logů. Přepínačem -all_time
je možné vynutit průchod celé historie všech logů od úplného začátku; na něco takového si však vyhraďte rychlé připojení a několik týdnů času.
Vlastní provoz
Seznam sledovaných logů je součástí zdrojových kódů a je shodný s logy, které Chrome uznává jako důvěryhodné. Při dalším spuštění jsou všechny logy opět dotázány na STH a následně jsou po nich požadovány všechny certifikáty přidané mezi danými STH. Certifikáty jsou následně filtrovány podle sledovaných doménových jmen. Pro každý certifikát, vydaný na sledované doménové jméno, jsou na standardní výstup vypsány základní informace a certifikát je uložen na disk:
$ time go/bin/certspotter
381a904b02510458ab2a05c26a23125c8164d2ca2151b8af61cc51cafc49a602:
DNS Name = *.c.docs.google.com
DNS Name = *.a1.googlevideo.com
DNS Name = *.c.2mdn.net
… (redakčně kráceno)
DNS Name = *.xn--ngstr-lra8j.com
DNS Name = xn--ngstr-lra8j.com
Pubkey = a3aee426ca972017285da51122e863338c7b74baa52e04b56ef62104e4d25a6e
Issuer = C=US, O=Google Inc, CN=Google Internet Authority G2
Not Before = 2018-03-20 12:45:00 +0000 UTC
Not After = 2018-06-12 12:45:00 +0000 UTC
Log Entry = 107874875 @ https://ct.googleapis.com/logs/argon2018 (Certificate)
crt.sh = https://crt.sh/?sha256=381a904b02510458ab2a05c26a23125c8164d2ca2151b8af61cc51cafc49a602
Filename = /home/user/.certspotter/certs/38/381a904b02510458ab2a05c26a23125c8164d2ca2151b8af61cc51cafc49a602.cert.pem
real 83m56.438s
user 4m25.846s
sys 1m46.546s
Jak je vidět na příkladu, běh Cert Spotteru může trvat poměrně dlouho; většinu času přitom zabere čekání na odpovědi z CT logů v různých koutech světa. Vytížení procesoru i spotřeba paměti jsou poměrně malé.
Automatizace cronem
Utilita je přímo navržena pro použití se standardním plánovačem úloh cron
. Pokud není žádný certifikát nalezen, certspotter
mlčí, při nalezení zajímavého certifikátu vypíše detaily na standardní výstup a cron
pak zařídí, aby se takový standardní výstup odeslal e-mailem administrátorovi. Cert Spotter si také hlídá vícenásobné spuštění – pokud by běh trval déle, než je perioda cronu, odmítne se podruhé spustit.
Nevýhodou posílání e-mailu přímo z cronu je, že všechny takové e-maily mají stejný předmět ve tvaru Cron <user@ubuntu> /home/user/go/certspotter
a e-mailová adresa je společná pro všechny úlohy. Oba problémy je možné vyřešit použitím externí utility bsd-mailx
, která s přepínačem -E
dokáže poslat e-mail pouze v případě, že standardní vstup není prázdný. Příslušný řádek v crontabu, který spustí Cert Spotter ve 23. minutu každé hodiny, může vypadat nějak takto (zalomeno pro přehlednost):
23 * * * * /path/to/go/bin/certspotter 2>> /tmp/cs-stderr.log \
| mail -E -s 'Certspotter alert' admin@server.example
Na standardní chybový výstup jsou vypisovány nejčastěji chyby komunikace s jednotlivými logy. Takové chyby jsou sice důležité, ale mezi e-maily o vydaných certifikátech způsobují spoustu šumu, proto je lepší je přesměrovat do souboru.
Balíčky jsou k dispozici
Kompilace Cert Spotteru přímo ze zdrojových kódů je sice jednoduchá, ale vyžaduje ruční aktualizace, například kdykoli se změní seznam důvěryhodných logů. Dobrou zprávou je, že minimálně pro Debian a Ubuntu jsou k dispozici balíčky. Odpadá tedy úvodní kompilace a aktualizaci můžeme nechat na správcích distribuce.
Otázkou pouze zůstává, zda balíček s Cert Spotterem ve stabilní distribuci, jakou je Debian, nezastará příliš rychle. Přece jen vývoj webových prohlížečů a s nimi i bezpečnostních požadavků je mnohem agilnější.
Nezávislá alternativa k on-line službám
Pro sledování logů Certificate Transparency existuje několik nástrojů. Asi nejznámější je web crt.sh, existuje také nástroj od Facebooku a samotný Cert Spotter je k dispozici také dostupný jako služba. Jedině Cert Spotter je ale svobodným softwarem, který si můžete nainstalovat na svůj server a provádět tak monitoring ve své vlastní režii. Software, který pohání crt.sh, je sice také otevřený, ale vzhledem ke zpracovávání kompletní historie CT logů má netriviální nároky na výkon a kapacitu úložiště.
Trvalé sledování CT logů může pomoci včas odhalit kompromitaci vlastních systémů, je však potřeba dobře odfiltrovat legitimní obnovy certifikátů. Jednou z možností je třeba obnovovat certifikáty kolem nějakého pevného data. Další nepříjemností také může být, že zatímco některé logy se o nově vydaném certifikátu dozví okamžitě od autority, jiné jej zaznamenají až při automatickém robotickém sběru na webu. Důsledkem toho je dvojí informování o vydání téhož certifikátu, což opět zvyšuje úroveň šumu.