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:
- Rutoken wyszukuje osobisty certyfikat użytkownika.
- Wymagany jest PIN tokena.
- Losowe dane są podpisywane na kluczu prywatnym bezpośrednio w chipie Rutoken.
- Powstały podpis weryfikowany jest za pomocą klucza publicznego z certyfikatu użytkownika.
- 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.
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
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:
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
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
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ć
$ ./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
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.
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:
Jeśli Twój certyfikat wygląda tak:
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
zapisz plik, a następnie wykonaj
$ sudo pam-auth-update
w wyświetlonym oknie umieść obok niego gwiazdkę Rutoken PAM GOST i kliknij OK
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.
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.
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