Wdrażanie systemu uwierzytelniania dwuskładnikowego

Przy aktualnym stanie bezpieczeństwa usług internetowych, gdzie większość podatności wykorzystanych może być w wyrafinowanych i wieloelementowych atakach, statyczne hasła, często bez wymuszonej polityki dotyczącej ich złożoności i czasu życia, stanowią najsłabsze ogniwo systemów informatycznych, również tych niepublicznych (takich jak dostęp do systemów VPN, CRM czy informacji finansowych). Dlatego też coraz więcej firm decyduje się na stosowanie wieloetapowego uwierzytelniania użytkowników w swoich kluczowych systemach informatycznych, a nawet oferuje taką możliwość swoim klientom (np. Google Apps, LastPass). Wieloskładnikowe logowanie zazwyczaj bazuje na trzech sposobach potwierdzenia tożsamości użytkownika formułowanych w pytaniach: coś co wiesz? (hasło, PIN), coś co masz? (kod jednorazowy, token) oraz kim jesteś? (urządzenia bazujące na biometrii). O ile biometria jest często rozwiązaniem drogim, wymagającym specjalnego oprogramowania oraz sprzętu po stronie klienta a często nawet zawodna, natomiast samo hasło nie chroni przed nieautoryzowanym dostępem w sposób wystarczający (zbyt restrykcyjne polityki są przez użytkowników obchodzone lub ignorowane) o tyle powiązanie hasła oraz fizycznego przedmiotu, będącego osobistą własnością użytkownika jest w tej chwili najskuteczniejszym sposobem podniesienia bezpieczeństwa usług, które wymagają od użytkownika częstego logowania się.

Naturalnym przedmiotem codziennego użytku każdego użytkownika jest telefon komórkowy, stąd niezwykła popularność rozwiązań bazujących na kodach jednorazowych przesyłanych przez SMS oraz, dzięki zwiększonemu udziałowi w rynku smartphone’ów, aplikacjach instalowanych na telefonach. Nie mniej wygodnym sposobem jest jednak użycie dedykowanego tokena OTP ważącego kilka gram i wielkości małego pendrive’a, a zdolnego emitować kody OTP po podłączeniu do portu USB emulując klawiaturę, a więc bez konieczności instalacji jakiegokolwiek dodatkowego oprogramowania i bezpieczne nawet w przypadku korzystania przez użytkownika z publicznego dostępu do internetu lub współdzielonych urządzeń. Ostatnim rozwiązaniem jest cryptocard, czyli karta (w formacie kredytowej lub urządzenia bezpośrednio podłączane do USB), która przeprowadza w sposób autonomiczny operacje kryptograficzne (posiada własny procesor i pamięć), a zatem niemożliwe jest przeprowadzenie ataków typu replay. Takie rozwiązanie, w przeciwieństwie do powyższych, posiada jednak ograniczenia w zakresie dostępnego oprogramowania klienckiego implementujący protokół PKCS#11 oraz braki w oprogramowaniu zawierającego pełną implementację PKCS#15 (gdzie poszczególne karty kryptograficzne mogą zawierać informacje zgodne tylko z jednym z wymienionych standardów). Jeśli poruszamy się zatem w obrębie rozwiązań opartych na oprogramowaniu open source dwa pierwsze rozwiązania wydają się być niezastąpione.

Uwierzytelnianie dwuskładnikowe w oparciu o telefon komórkowy.

Najprostszym i najbardziej przenośnym sposobem dwuskładnikowego uwierzytelniania są kody jednorazowe SMS. Udostępniamy wysoko dostępną bramkę SMS oraz oprogramowanie, które w przypadku żądania ze strony serwera uwierzytelniającego lub po wysłaniu wiadomości na specjalny numer generuje jednorazowy kod SMS ważny przez ograniczony okres czasu (zabezpieczający przed atakami replay). Serwer uwierzytelniający po stronie klienta może korzystać z prostego API lub jednego z dostarczonych adapterów (np. OpenID, Memcache czy dowolny RDBMS). Drugi sposób bazuje na implementacji mechanizmu Apache Triplesec (opartego o standardowe protokoły LDAP i Kerberos) oraz instalację aplikacji klienckiej na telefonie (J2ME Soft Token) bazującej na standardzie HOTP. Oba ta rozwiązania obarczone są wadą – wymagają posiadania telefonu komórkowego oraz wymuszają na użytkowniku przepisanie kodu z ekranu telefonu. Wad tych pozbawiony jest system oparty o klucze OTP, gdzie generowany kod jest od razu umieszczany w oknie logowania lub odpowiednim formularzu bez żadnego dodatkowego oprogramowania po stronie klienta oraz bez konieczności modyfikacji systemów logowania (hasło oraz kod jednorazowy może być przesyłany razem w jednym polu, klasycznie służącym do wpisania hasła użytkownika).

Uwierzytelnianie dwuskładnikowe w oparciu o system OTP

Rozwiązanie jest w pełni oparte na opensource’owym oprogramowaniu (serwer PHP) składającym się z trzech składników: bazy sekretów (silnie strzeżony serwer udostępniający serwerom uwierzytelniającym API do dekodowania danych przesłanych przez token), serwerów uwierzytelniających klucze (przeprowadzających proces weryfikacji nadesłanego kodu OTP) oraz serwerów uwierzytelniających do usługi (mapujących dany klucz do konkretnego użytkownika i dodatkowo samodzielnie przeprowadzający uwierzytelnienie poprzez hasło). Ostatnim elementem jest oczywiście token. Całe rozwiązanie charakteryzuje się wysoką skalowalnością (serwer PHP), dostępnością (konfiguracja HA), bezpieczeństwem (dzięki izolacji mechanizmów kryptograficznych w sposób podobny jak zachodzi to na karcie kryptograficznej, jedynie po stronie klienta – standardowo z zabezpieczającym przed kradzieżą modelem full disk encryption, opcjonalnie można również zastosować zapobiegający wyciekowi danych moduł HSM) oraz standardowym API dostępnym przez HTTP. Serwer uwierzytelniający do usługi (korzystający z tokenów oprócz standardowej metody dostępu za pomocą hasła) może korzystać bezpośrednio z dostarczanego API bądź adapterów (m.in. Radius, PAM czy OpenID). Cały system może być hostowany (wtedy serwer uwierzytelniający klucze jest dostępny poprzez bezpieczne połączenie HTTPS) lub dedykowany i zainstalowany w infrastrukturze klienta (2 serwery sekretów oraz 2 serwery uwierzytelniające klucze  działające w trybie HA plus dodatkowe oprogramowanie/wtyczka do serwerów uwierzytelniających w sposób klasyczny (hasłem). Struktura przesyłanych komunikatów OTP zawiera dane jednoznacznie identyfikująca klucz oraz zaszyfrowane (sprzętowo) poprzez symetryczny klucz algorytmem AES256. Token nie zawiera znacznika czasowego (dzięki czemu jest bardzo trwały ze względu na brak baterii czy jakichkolwiek serwisowalnych części), ale możliwe jest zabezpieczenie przed atakami typu replay poprzez wymaganie podania kilku kolejnych kodów.

Uwierzytelnianie dwuskładnikowe w oparciu o karty kryptograficzne.

Oferowane rozwiązanie bazuje na systemie uwierzytelniania Kerberos, bazie LDAP oraz sprzętowych tokenach w postaci kart USB. Implementacja w zależności od systemu operacyjnego klienta może bazować na protokole PKCS#11 (Windows) lub PKCS#15 (Mac, Linux) i obejmuje systemy logowania do popularnych usług, a także uwierzytelnianie dla przeglądarek bazujących na mechanizmie GSSAPI.

W przypadku dowolnego rozwiązania sprzętowego wspomagającego proces uwierzytelniania bardzo ważne są odpowiednie procedury związane z nieautoryzowanym dostępem do danych i urządzeń uwierzytelniających. Dlatego udostępniamy prosty sposób na zablokowanie skradzionego urządzenia w systemie oraz analizujemy anomalie, które mogą być związane z nieuprzywilejowanym użyciem urządzenia.