
Eenvoudige wachtwoorden bieden geen bescherming, terwijl complexe moeilijk te onthouden zijn. Daarom belanden ze vaak op een sticker onder het toetsenbord of op het scherm. Om ervoor te zorgen dat wachtwoorden in het geheugen blijven van ‘vergankelijke’ gebruikers en de veiligheid niet in gevaar komt, is er twee-factor-authenticatie (2FA).
Door de combinatie van een apparaatbezit en het kennen van de PIN-code kan de PIN-code eenvoudiger en gemakkelijker te onthouden zijn. Gebreken in de lengte of willekeurigheid van de PIN-code worden gecompenseerd door de eis van fysiek bezit en beperkingen op het raden van de PIN-code.
Bovendien willen overheidsinstellingen soms dat alles volgens GOST werkt. Dit betreft de variant van 2FA voor inloggen op Linux, waarover ik zal spreken. Ik begin vanuit een breder perspectief.
PAM-modules
Pluggable Authentication Modules (PAM) zijn modules met een standaard API en implementaties van verschillende authenticatiemechanismen in applicaties.
Alle utiliteiten en applicaties die met PAM kunnen werken, nemen deze over en kunnen ze gebruiken voor gebruikersauthenticatie.
In de praktijk werkt dit ongeveer zo: het login-commando vraagt PAM om de nodige controles uit te voeren met behulp van de modules die in het configuratiebestand zijn opgegeven en retourneert het resultaat terug aan het login-commando.
librtpam
De door het bedrijf ‘Aktiv’ ontwikkelde module voegt twee-factor-authenticatie toe voor gebruikers via smartcards of USB-tokens met asymmetrische sleutels volgens de nieuwste standaarden van binnenlandse cryptografie.
Laten we het principe van zijn werking bekijken:
- op de token wordt het gebruikerscertificaat en de privésleutel opgeslagen;
- het certificaat is opgeslagen in de thuismap van de gebruiker als vertrouwd.
Het authenticatieproces verloopt als volgt:
- Op de Rutoken wordt naar het persoonlijke certificaat van de gebruiker gezocht.
- De PIN-code van de token wordt opgevraagd.
- Er wordt een handtekening gemaakt van willekeurige gegevens met de privésleutel direct in de chip van de Rutoken.
- De verkregen handtekening wordt gecontroleerd met behulp van de publieke sleutel uit het gebruikerscertificaat.
- De module retourneert het resultaat van de handtekeningverificatie aan de aanroepende applicatie.
Er kan geauthenticeerd worden met GOST R 34.10-2012 sleutels (lengtes van 256 of 512 bits) of met de verouderde GOST R 34.10-2001.
U hoeft zich geen zorgen te maken over de veiligheid van de sleutels - ze worden rechtstreeks in de Rutoken gegenereerd en verlaten tijdens cryptografische operaties nooit zijn geheugen.

Rutoken ECP 2.0 is gecertificeerd door de FSB en FSTEC volgens NDV 4, en kan worden gebruikt in informatiesystemen die vertrouwelijke informatie verwerken.
Praktisch gebruik
Bijna elke moderne Linux-distributie is geschikt, als voorbeeld gebruiken we xUbuntu 18.10.
1) Installeer de benodigde pakketten
sudo apt-get install libccid pcscd opensc
Als u een bureaublokschermer wilt toevoegen - installeer dan aanvullend het pakket libpam-pkcs11.
2) Voeg de PAM-module met ondersteuning voor GOST toe
Laad de bibliotheek met
Kopieer de inhoud van de PAM map librtpam.so.1.0.0 naar de systeemmap
/usr/lib/ of /usr/lib/x86_64-linux-gnu/of /usr/lib64
3) Installeer het pakket met librtpkcs11ecp.so
Laad en installeer het DEB- of RPM-pakket via de link:
4) Controleer of Rutoken ECP 2.0 in het systeem werkt
Voer in de terminal uit
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Als u de regel ziet Rutoken ECP is alles goed.
5) Lees het certificaat
Controleer of er een certificaat op het apparaat staat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Als na de regel:
Using slot 0 with a present token (0x0)
- informatie over sleutels en certificaten wordt weergegeven, moet het certificaat worden gelezen en op de schijf worden opgeslagen. Voer hiervoor de volgende opdracht uit, waarbij u in plaats van {id} de ID van het certificaat invoert dat u in de uitvoer van de vorige opdracht hebt gezien: $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Als het bestand cert.crt is aangemaakt, gaat u naar punt 6).
is er niets - , betekent dat het apparaat leeg is. Neem contact op met de administrator of maak zelf sleutels en een certificaat aan volgens de volgende stap.5.1) Maak een testcertificaat
Let op! De beschreven methoden voor het maken van sleutels en certificaten zijn bedoeld voor testen en zijn niet geschikt voor gebruik in de productiefase. Hiervoor moeten sleutels en certificaten worden gebruikt die zijn uitgegeven door een vertrouwd certificeringscentrum van uw organisatie of een geaccrediteerd verificatiecentrum.
Let op! De beschreven methoden voor het aanmaken van sleutels en certificaten zijn bedoeld voor testdoeleinden en zijn niet bedoeld voor gebruik in een productieomgeving. Hiervoor moeten sleutels en certificaten worden gebruikt die zijn uitgegeven door een vertrouwd certificeringscentrum van uw organisatie of een geaccrediteerd certificeringsorgaan.
De PAM-module is ontworpen om lokale computers te beschermen en is bedoeld voor gebruik in kleine organisaties. Aangezien er niet veel gebruikers zijn, kan de beheerder zelf de status van de certificaten volgen en accounts handmatig blokkeren, net als de geldigheid van de certificaten. De PAM-module kan momenteel geen certificaten controleren op CRL en geen vertrouwensketens opbouwen.
Eenvoudige manier (via de browser)
Om een testcertificaat te verkrijgen, gebruikt u . Het proces duurt niet langer dan 5 minuten.
Gevorderde manier (via de console en mogelijk een compiler)
Controleer de versie van OpenSC
$ opensc-tool --version
Als de versie lager is dan 0.20, update of compileer van onze GitHub (op het moment van publicatie was release 0.20 nog niet uitgebracht) of van de mastertak van het hoofdproject OpenSC niet later dan
Genereer een sleutelpaar met de parameters:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit met parameter A), GOSTR3410-2012-256:A (GOST-2012 256 bit met parameter A)
--id: objectidentificator (CKA_ID) in de vorm van hex-decimale getallen van twee karakters uit de ASCII-tabel. Gebruik alleen ASCII-codes voor drukbare tekens, omdat id aan OpenSSL moet worden doorgegeven als een string. Bijvoorbeeld, de ASCII-code "3132" komt overeen met de string "12". Voor uw gemak kunt u gebruikmaken van .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Vervolgens gaan we een certificaat aanmaken. Hieronder worden twee paden beschreven: de eerste via de CA (we zullen test-CA's gebruiken), de tweede - zelfondertekend. Voor dit doel moet eerst OpenSSL versie 1.1 of hoger worden geïnstalleerd en geconfigureerd voor gebruik met RudToken via de speciale module rtengine volgens de handleiding .
Bijvoorbeeld: voor '--id 3132' in OpenSSL moet "pkcs11:id=12«.
U kunt gebruikmaken van de diensten van een test-CA, die er veel zijn, bijvoorbeeld, , en , hiervoor maken we een certificaatverzoek aan
Een andere optie is om lui te zijn en een zelfondertekend certificaat aan te maken.
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
We laden het certificaat op het apparaat
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) We registreren het certificaat in het systeem
Zorg ervoor dat uw certificaat eruitziet als een base64-bestand:

Als uw certificaat er als volgt uitziet:

moet het certificaat van DER- naar PEM-indeling (base64) worden geconverteerd
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Controleer opnieuw of alles nu in orde is.
Voeg het certificaat toe aan de lijst met vertrouwde certificaten
$ mkdir ~/\.eid
$ chmod 0755 ~/\.eid
$ cat cert.pem >> ~/\.eid/authorized_certificates
$ chmod 0644 ~/\.eid/authorized_certificates
De laatste regel beschermt de lijst met vertrouwde certificaten tegen onbedoelde of opzettelijke wijzigingen door andere gebruikers. Dit voorkomt situaties waarin iemand zijn eigen certificaat hier toevoegt en zich kan aanmelden als u.
7) Stel authenticatie in
De configuratie van onze PAM-module is volkomen standaard en verloopt precies hetzelfde als de configuratie van andere modules. We creëren het bestand /usr/share/pam-configs/rutoken-gost-pam dat de volledige naam van de module bevat, of deze standaard is ingeschakeld, de prioriteit van de module en de authenticatieparameters.
In de authenticatieparameters zijn er eisen voor de succesvolle uitvoering:
- required (vereist): dergelijke modules moeten een positieve respons teruggeven. Als het resultaat van de module een negatieve respons bevat, leidt dit tot een authenticatiefout. De aanvraag wordt afgebroken, maar de andere modules worden aangeroepen.
- requisite (vereist): lijkt op required, maar leidt onmiddellijk tot een fout in de authenticatie en negeert de andere modules.
- sufficient (voldoende): als er vóór een dergelijke module geen enkele required- of sufficient-module een negatieve respons heeft teruggegeven, dan zal de module een positieve respons geven. De resterende modules worden genegeerd.
- optional (optioneel): als er in de stack geen required-modules zijn en geen enkele sufficient-module een positieve respons heeft teruggegeven, moet ten minste één van de optional-modules een positieve respons teruggeven.
Volledige inhoud van het bestand /usr/share/pam-configs/rutoken-gost-pam:
Naam: Rutoken PAM GOST
Standaard: ja
Prioriteit: 800
Auth-Type: Primair
Auth: voldoende /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

we slaan het bestand op, waarna we uitvoeren
$ sudo pam-auth-update
in het verschenen venster plaatsen we een sterretje bij Rutoken PAM GOST and click OK

8) Controleer de instelling
Om te begrijpen dat alles is ingesteld, maar om de mogelijkheid om in te loggen niet te verliezen, voert u de opdracht in
$ sudo login
Voer de gebruikersnaam in. Alles is correct ingesteld als het systeem om de PIN-code van het apparaat vraagt.

9) Stel de vergrendeling van de computer in bij het verwijderen van de token
Het pakket bevat libpam-pkcs11 de utility pkcs11_eventmgr, die verschillende acties mogelijk maakt bij het optreden van PKCS#11-gebeurtenissen.
Voor de configuratie pkcs11_eventmgr de configuratiebestand dient: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Voor verschillende Linux-distributies zal de opdracht die de accountvergrendeling oproept bij het verwijderen van smartcards of tokens verschillen. Zie event card_remove.
Een voorbeeld van het configuratiebestand is hieronder weergegeven:
pkcs11_eventmgr
{
# Uitvoering op de achtergrond
daemon = true;
# Configuratie van debugberichten
debug = false;
# Polling tijd in seconden
polling_time = 1;
# Instelling van de timeout voor het verwijderen van de kaart
# Standaard 0
expire_time = 0;
# Selectie van de pkcs11-bibliotheek voor gebruik met de Rootoken
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Acties met de kaart
# Kaart is ingevoegd:
event card_insert {
# Laat standaardwaarden staan (niets gebeurt)
on_error = ignore ;
action = "/bin/false";
}
# Kaart is verwijderd
event card_remove {
on_error = ignore;
# Roep schermblokkering functie aan
# Voor GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Voor XFCE
# action = "xflock4";
# Voor Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Kaart is al lange tijd verwijderd
event expire_time {
# Laat standaardwaarden staan (niets gebeurt)
on_error = ignore;
action = "/bin/false";
}
}Voeg daarna de applicatie pkcs11_eventmgr toe aan het opstarten. Hiervoor bewerkt u het bestand .bash_profile:
$ nano /home//.bash_profile
Voeg de regel pkcs11_eventmgr aan het einde van het bestand toe en herstart.
De beschreven stappen voor het configureren van het besturingssysteem kunnen als instructie worden gebruikt in elke moderne Linux-distributie, inclusief binnenlandse.

Conclusie
PC's met Linux worden steeds populairder in Russische overheidsstructuren, en het opzetten van betrouwbare twee-factor-authenticatie in dit systeem is niet altijd eenvoudig. We hopen met deze handleiding het ‘wachtwoordprobleem’ op te lossen en de toegang tot de PC betrouwbaar te beveiligen, zonder veel tijd te besteden.
Bron: habr.com
