Chociaż od premiery przeglądarki Firefox 32 – miała ona swoje miejsce na początku września – minęło już sporo czasu to warto wspomnieć o jednej istotnej implementacji tej wersji, która podnosi bezpieczeństwo jej użytkowników. Mowa o mechanizmie Public Key Pinning.
Czym jest Public Key Pinning?
Public Key Pinning jest mechanizmem pozwalającym na określenie, który Urząd Certyfikacji (ang. Certification Authority – CA) może być wystawcą certyfikatu SSL dla danej domeny. Dzięki temu przeglądarka może odrzucać próby nawiązania bezpiecznego połączenia SSL/TLS w przypadku, gdy certyfikat serwera wystawiony jest przez nieznany, nieuprawniony dla danej domeny CA. Mechanizm Public Key Pinning chroni przed atakami man-in-the-middle w przypadku próby podstawiania fałszywego certyfikatu wydanego przez CA nie znajdującego się na liście dozwolonych dla danej domeny („przypiętych” do niej).
Praktycznie Public Key Pinning realizowany jest poprzez powiązanie skrótu klucza publicznego CA (chodzi o klucz Urzędu Głównego tzw. Root, będącego na samej górze hierarchi zaufania) z nazwą domeny – informacje te znajdują się w kodzie źródłowym przeglądarki. Może ona wtedy zweryfikować czy skrót klucza pobrany ze ścieżki certyfikacyjnej danego certyfikatu odpowiada skrótowi przypisanemu do danej domeny. Opisany proces weryfikacji odbywa się w fazie połączenia, przed przesłaniem jakichkolwiek danych. Dzięki temu, w przypadku wykrycia niezgodności, żadne dane nie zostaną odczytane przez atakującego.
Firefox w obecnej wersji do wyliczenia skrótu z binarnie zakodowanej informacji o kluczu publicznym Root CA wykorzystuje funkcję skrótu z rodziny SHA2 – SHA256.
Pierwsze „przypięte” domeny
Pierwszymi domenami zaszytymi w nowym mechanizmie są domeny Twitter’a oraz te należące do fundacji Mozilla. Poniżej znajduje się ich pełna lista:
- twitter.com, api.twitter.com, business.twitter.com, dev.twitter.com, mobile.twitter.com, oauth.twitter.com, platform.twitter.com, twimg.com, www.twitter.com
- *.addons.mozilla.org, *.addons.mozilla.net
- *.cdn.mozilla.{org,net}, *.media.mozilla.com
Jak widać implementacja pozwala na dodawanie domen wildcardowych.
Kolejna wersja (33) rozszerzyła tę listę o: *.twitter.com oraz wiele domen Google. Mozilla już zapowiedziała, że kolejna wersja Firefoxa przyniesie kolejne domeny.
Jak włączyć Public Key Pinning?
Mechanizm ten wraz z aktualizacją przeglądarki do wersji 32 jest domyślnie włączony, więc jakiekolwiek działania po stronie użytkownika nie są wymagane. Firefox pozostawia jednak możliwość konfiguracji mechanizmu poprzez opcję security.cert_pinning.enforcement_level (dostępną poprzez about:config). Dostępne są cztery opcje:
- Wyłączenie mechanizmu – wartość 0.
- Domyślna opcja włączająca mechanizm – 1.
- Wymuszenie stosowania mechanizmu zawsze – 2.
- Wymuszenie trybu testowego – 3.
Różnica pomiędzy opcją 1 a 2 jest taka, że w przypadku pierwszej z nich lista uprawnionych CA dla danej domeny nie jest brana pod uwagę w momencie, gdy certyfikat prowadzi do Root’a, który został ręcznie dodany przez użytkownika do magazynu certyfikatów. Dlatego też opcja ta określana jest przez Mozillę jako „Allow User MITM” . Opcja druga natomiast nie zakłada żadnych wyjątków.
Przyszłość Public Key Pinning
Firefox nie jest pierwszą przeglądarką, która wykorzystuje mechanizm Key Pinning w celu podniesienia bezpieczeństwa swoich użytkowników. Zwolennicy Chrome korzystają z niego już od wersji 13 (2011r.). Microsoft natomiast kilka dni temu poinformował, że rozważa jego wdrożenie.
Mimo zalet jakie niesie ze sobą wdrożenie mechanizmu jego obecna implementacja w Firefoxie nie jest idealna. Głównym problemem jest brak skalowalności. Liczba domen i „przypiętych” do niej kluczy może w krótkim czasie osiągnąć olbrzymie rozmiary. Dlatego też obecnie trwają prace nad innym rozwiązaniem, pozbawionym opisanej wady. Informacja o uprawionych do wystawiania certyfikatów SSL dla danej domeny CA miałaby być przekazywana w nagłówku HTTP, o tym jednak innym razem :-)