Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

Proste hasła nie są bezpieczne, a skomplikowanych nie da się zapamiętać. Dlatego tak często lądują na karteczce samoprzylepnej pod klawiaturą lub na monitorze. Aby mieć pewność, że hasła pozostaną w pamięci „zapominających” użytkowników i nie zostanie utracona niezawodność ochrony, stosuje się uwierzytelnianie dwuskładnikowe (2FA).

Dzięki połączeniu posiadania urządzenia i znajomości jego PIN-u, sam PIN może być prostszy i łatwiejszy do zapamiętania. Wady związane z długością lub losowością kodu PIN są równoważone przez wymóg fizycznego posiadania i ograniczenia dotyczące brutalnej siły PIN.

Ponadto zdarza się, że w agencjach rządowych chcą, aby wszystko działało zgodnie z GOST. Ta opcja 2FA do logowania do Linuksa zostanie omówiona. Zacznę od daleka.

Moduły PAM

Pluggable Authentication Modules (PAM) to moduły posiadające standardowe API i implementacje różnych mechanizmów uwierzytelniania w aplikacjach.
Wszystkie narzędzia i aplikacje, które mogą współpracować z PAM, pobierają je i mogą używać do uwierzytelniania użytkowników.
W praktyce działa to mniej więcej tak: polecenie login wywołuje PAM, który wykonuje wszystkie niezbędne sprawdzenia przy użyciu modułów określonych w pliku konfiguracyjnym i zwraca wynik z powrotem do polecenia login.

biblioteka

Moduł opracowany przez firmę Aktiv dodaje uwierzytelnianie dwuskładnikowe użytkowników za pomocą kart inteligentnych lub tokenów USB przy użyciu kluczy asymetrycznych zgodnie z najnowszymi standardami krajowej kryptografii.

Przyjrzyjmy się zasadzie jego działania:

  • Token przechowuje certyfikat użytkownika i jego klucz prywatny;
  • Certyfikat jest zapisywany w katalogu domowym użytkownika jako zaufany.

Proces uwierzytelniania przebiega w następujący sposób:

  1. Rutoken wyszukuje osobisty certyfikat użytkownika.
  2. Wymagany jest PIN tokena.
  3. Losowe dane są podpisywane na kluczu prywatnym bezpośrednio w chipie Rutoken.
  4. Powstały podpis weryfikowany jest za pomocą klucza publicznego z certyfikatu użytkownika.
  5. Moduł zwraca wynik weryfikacji podpisu do aplikacji wywołującej.

Możesz uwierzytelnić się za pomocą kluczy GOST R 34.10-2012 (długość 256 lub 512 bitów) lub przestarzałego GOST R 34.10-2001.

Nie musisz martwić się o bezpieczeństwo kluczy - są one generowane bezpośrednio w Rutoken i nigdy nie opuszczają jego pamięci podczas operacji kryptograficznych.

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

Rutoken EDS 2.0 posiada certyfikaty FSB i FSTEC według NDV 4, dzięki czemu może być stosowany w systemach informatycznych przetwarzających informacje poufne.

Praktyczne zastosowanie

Prawie każdy nowoczesny Linux będzie odpowiedni, na przykład użyjemy xUbuntu 18.10.

1) Zainstaluj niezbędne pakiety

sudo apt-get install libccid pcscd opensc
Jeśli chcesz dodać blokadę pulpitu z wygaszaczem ekranu, zainstaluj pakiet dodatkowo libpam-pkcs11.

2) Dodaj moduł PAM z obsługą GOST

Ładowanie biblioteki z https://download.rutoken.ru/Rutoken/PAM/
Skopiuj zawartość folderu PAM librtpam.so.1.0.0 do folderu systemowego
/usr/lib/ lub /usr/lib/x86_64-linux-gnu/lub /usr/lib64

3) Zainstaluj pakiet z librtpkcs11ecp.so

Pobierz i zainstaluj pakiet DEB lub RPM z linku: https://www.rutoken.ru/support/download/pkcs/

4) Sprawdź, czy w systemie działa Rutoken EDS 2.0

W terminalu wykonujemy
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Jeśli widzisz linię Rutoken ECP <no label> - to znaczy, że wszystko jest w porządku.

5) Przeczytaj certyfikat

Sprawdzenie, czy urządzenie posiada certyfikat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Jeśli po linii:
Using slot 0 with a present token (0x0)

  • wyświetlana jest informacja o kluczach i certyfikatach, musisz przeczytać certyfikat i zapisać go na dysku. Aby to zrobić, uruchom następującą komendę, gdzie zamiast {id} musisz zastąpić identyfikator certyfikatu, który widziałeś w wynikach poprzedniego polecenia:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Jeżeli plik cert.crt został utworzony, przejdź do kroku 6).
  • tam nic nie ma, to urządzenie jest puste. Skontaktuj się z administratorem lub samodzielnie utwórz klucze i certyfikat, wykonując następny krok.

5.1) Utwórz certyfikat testowy

Uwaga! Opisane metody tworzenia kluczy i certyfikatów nadają się do testowania i nie są przeznaczone do stosowania w trybie bojowym. Aby to zrobić, musisz użyć kluczy i certyfikatów wydanych przez zaufany urząd certyfikacji Twojej organizacji lub akredytowany urząd certyfikacji.
Moduł PAM przeznaczony jest do ochrony komputerów lokalnych i przeznaczony jest do pracy w małych organizacjach. Ponieważ użytkowników jest niewielu, Administrator może monitorować unieważnianie certyfikatów i ręcznie blokować konta, a także okres ważności certyfikatów. Moduł PAM nie wie jeszcze, jak weryfikować certyfikaty za pomocą list CRL i budować łańcuchy zaufania.

Prosty sposób (przez przeglądarkę)

Aby uzyskać certyfikat testu, użyj serwis internetowy „Centrum rejestracji Rutoken”. Proces zajmie nie więcej niż 5 minut.

Sposób maniaka (przez konsolę i ewentualnie kompilator)

Sprawdź wersję OpenSC
$ opensc-tool --version
Jeśli wersja jest mniejsza niż 0.20, zaktualizuj lub zbuduj gałąź pkcs11-tool z obsługą GOST-2012 z naszego GitHuba (w momencie pisania tego artykułu wersja 0.20 nie została jeszcze wydana) lub z głównej gałęzi głównego projektu OpenSC nie później popełnij 8cf1e6f

Wygeneruj parę kluczy z następującymi parametrami:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: identyfikator obiektu (CKA_ID) w postaci dwucyfrowych liczb szesnastkowych z tablicy ASCII. W przypadku znaków drukowalnych używaj wyłącznie kodów ASCII, ponieważ... id będzie musiał zostać przekazany do OpenSSL jako ciąg znaków. Na przykład kod ASCII „3132” odpowiada ciągowi „12”. Dla wygody możesz użyć usługa online służąca do konwersji ciągów znaków na kody ASCII.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Następnie utworzymy certyfikat. Poniżej zostaną opisane dwa sposoby: pierwszy odbywa się za pośrednictwem urzędu certyfikacji (będziemy korzystać z testowych urzędów certyfikacji), drugi z podpisem własnym. Aby to zrobić należy najpierw zainstalować i skonfigurować OpenSSL w wersji 1.1 lub nowszej do współpracy z Rutokenem poprzez specjalny moduł rtengine korzystając z instrukcji Instalacja i konfiguracja OpenSSL.
Na przykład: dla „--id 3132' w OpenSSL musisz określić "pkcs11:id=12".

Można skorzystać z usług testowego urzędu certyfikacji, których jest wiele np. tutaj, tutaj и tutaj, w tym celu utworzymy prośbę o certyfikat

Inną opcją jest poddanie się lenistwu i stworzenie własnego podpisu
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Przesyłanie certyfikatu na urządzenie
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Zarejestruj certyfikat w systemie

Upewnij się, że Twój certyfikat wygląda jak plik base64:

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

Jeśli Twój certyfikat wygląda tak:

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

to musisz przekonwertować certyfikat z formatu DER na format PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Sprawdzamy jeszcze raz, czy teraz wszystko jest w porządku.

Dodaj certyfikat do listy zaufanych certyfikatów
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Ostatnia linia zabezpiecza listę zaufanych certyfikatów przed przypadkową lub celową zmianą przez innych użytkowników. Uniemożliwia to komuś dodanie tutaj swojego certyfikatu i zalogowanie się w Twoim imieniu.

7) Skonfiguruj uwierzytelnianie

Konfiguracja naszego modułu PAM jest całkowicie standardowa i odbywa się dokładnie w taki sam sposób, jak konfigurowanie innych modułów. Utwórz do pliku /usr/share/pam-configs/rutoken-gost-pam zawierający pełną nazwę modułu, czy jest on domyślnie włączony, priorytet modułu i parametry uwierzytelniania.
Parametry uwierzytelniania zawierają wymagania dotyczące powodzenia operacji:

  • wymagane: Takie moduły muszą zwrócić pozytywną odpowiedź. Jeśli wynik wywołania modułu będzie zawierał odpowiedź negatywną, spowoduje to błąd uwierzytelnienia. Żądanie zostanie odrzucone, ale pozostałe moduły zostaną wywołane.
  • wymagane: podobne do wymagane, ale natychmiastowe uwierzytelnienie kończy się niepowodzeniem i ignoruje inne moduły.
  • wystarczający: Jeśli żaden z wymaganych lub wystarczających modułów przed takim modułem nie zwrócił wyniku negatywnego, wówczas moduł zwróci odpowiedź pozytywną. Pozostałe moduły zostaną zignorowane.
  • opcjonalne: Jeśli na stosie nie ma wymaganych modułów i żaden z wystarczających modułów nie zwrócił wyniku pozytywnego, wówczas co najmniej jeden z modułów opcjonalnych musi zwrócić wynik pozytywny.

Pełna zawartość pliku /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

zapisz plik, a następnie wykonaj
$ sudo pam-auth-update
w wyświetlonym oknie umieść obok niego gwiazdkę Rutoken PAM GOST i kliknij OK

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

8) Sprawdź ustawienia

Aby zrozumieć, że wszystko jest skonfigurowane, ale jednocześnie nie stracić możliwości zalogowania się do systemu, wpisz polecenie
$ sudo login
Wpisz twoją nazwę użytkownika. Wszystko jest skonfigurowane poprawnie jeśli system wymaga podania kodu PIN urządzenia.

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

9) Skonfiguruj komputer tak, aby był blokowany po wyodrębnieniu tokena

Zawarte w pakiecie libpam-pkcs11 narzędzie w zestawie pkcs11_eventmgr, co umożliwia wykonanie różnych działań w przypadku wystąpienia zdarzeń PKCS#11.
Do ustawień pkcs11_eventmgr służy jako plik konfiguracyjny: /etc/pam_pkcs11/pkcs11_eventmgr.conf
W przypadku różnych dystrybucji Linuksa polecenie powodujące zablokowanie konta po usunięciu karty inteligentnej lub tokena będzie się różnić. Cm. event card_remove.
Przykładowy plik konfiguracyjny pokazano poniżej:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Następnie dodaj aplikację pkcs11_eventmgr zacząć. Aby to zrobić, edytuj plik .bash_profile:
$ nano /home/<имя_пользователя>/.bash_profile
Dodaj linię pkcs11_eventmgr na końcu pliku i uruchom ponownie komputer.

Opisane kroki konfiguracji systemu operacyjnego można wykorzystać jako instrukcje w dowolnej nowoczesnej dystrybucji Linuksa, w tym w krajowych.

Jak używać modułów PAM do lokalnego uwierzytelniania w systemie Linux przy użyciu kluczy GOST-2012 na Rutoken

wniosek

Komputery z systemem Linux stają się coraz bardziej popularne w rosyjskich agencjach rządowych, a skonfigurowanie niezawodnego uwierzytelniania dwuskładnikowego w tym systemie operacyjnym nie zawsze jest łatwe. Z przyjemnością pomożemy Ci rozwiązać „problem z hasłem” za pomocą tego przewodnika i niezawodnie zabezpieczymy dostęp do Twojego komputera, nie poświęcając na niego dużo czasu.

Źródło: www.habr.com

Dodaj komentarz