2-Factor authenticatie

#work in progress.

Inleiding

De de-facto standaard om via ssh in te kunnen loggen op een linux server is vooralsnog username/wachtwoord. Vaak geven deze 2 gegevens redelijk veel toegang tot een machine. Als deze username ook nog eens aan de sudo-ers file is toegevoegd, heb je in principe een root user beveiligd met niet meer dan een wachtwoord. Mocht iemand deze 2 gegevens bemachtigen, door bijvoorbeeld een keylogger, camera, of misschien heb je een simpel te raden wachtwoord, dan ben je natuurlijk zuur.

Om dit te voorkomen kan je een extra factor aan de vergelijking toevoegen. We spreken dan van 2 factor authenticatie. Je kan hierbij denken aan een smartcard of een token. Je authenticeert je dan op een systeem met iets dat je hebt(token) en iets dat je weet(wachtwoord). Als 1 van de 2 “gestolen” word, kan de dief nogsteeds niks gezien ze de 2e factor ook nodig hebben.

Gebruikte hardware

In dit geval gebruik ik een ‘c200′ token gebaseerd op het OATH algoritme, maar dan gekoppeld met een tijdsfactor. Het zogenaamde TOTP. Zoals je ziet op het onderstaande plaatje lijkt dit token veel op een RSA token. Voordeel van dit token vind ik dat er pas een code verschijnt als je op het knopje drukt. Dit voorkomt dat men naar je sleutelbos kan gaan staren voor een code.

Configuratie(PAM):

Een standaard binnen linux om authenticatie te kunnen doen met een module heet PAM. Pluggable authentication module. Het geeft je de vrijheid zelf iets te implementeren om je the authenticeren bij je systeem. In dit voorbeeld pas ik dit toe op de SSH-Daemon, maar dit kan ook bijvoorbeeld voor FTP en via een module zou dit ook met apache moeten kunnen (later zal ik hier nog een onderzoekje naar doen).

We beginnen met het downloaden en installeren van de laatste versie van de module.
Er zijn packages voor verschillende distro’s, maar die zijn of offline of werken niet goed.

http://download.savannah.gnu.org/releases/oath-toolkit/

De manual om dit te configureren staat hier, maar zoals bij veel open-source projecten is dit niet goed bijgewerkt. Zo staat de TOTP toevoeging hier nog niet in, dus ik heb me helemaal rot gezocht hoe ik de ‘seat’ van mijn token in het config bestand kreeg #enbedankt.

http://git.savannah.gnu.org/cgit/oath-toolkit.git/tree/pam_oath/README

Met het volgende commando zou je de module moeten kunnen compileren en installeren.
Ik ga er vanuit dat je nog het 1 en ander aan libraries gaat missen, dus ik adviseer om eerst een ./configure te doen en de output hiervan goed te bekijken. Nogmaals, zoals de meeste open-source projecten krijg je hier zeer weinig info over (kleine moeite?).

 

[[code]]czo4MDpcIiAuL2NvbmZpZ3VyZSAmYW1wO2FtcDsmYW1wO2FtcDsgbWFrZSBjaGVjayAmYW1wO2FtcDsmYW1wO2FtcDsgc3VkbyBtYWt7WyYqJl19ZSBpbnN0YWxsIFwiO3tbJiomXX0=[[/code]]

 

 

[[code]]czo4NzpcIiBUbyB1c2UgdGhlIG1vZHVsZSwgZmlyc3QgbWFrZSBzdXJlIHRoYXQgaXQgaXMgYWNjZXNzaWJsZSBhcyAvbGliL3NlY3V7WyYqJl19cml0eS9wYW1fb2F0aC5zbzpcIjt7WyYqJl19[[/code]]

 

 

 

[[code]]czoyMTg6XCIjIGxuIC1zIC91c3IvbG9jYWwvbGliL3NlY3VyaXR5L3BhbV9vYXRoLnNvIC9saWIvc2VjdXJpdHkvcGFtX29hdGguc297WyYqJl19ICMgbHMgLWxhIC9saWIvc2VjdXJpdHkvcGFtX29hdGguc28gbHJ3eHJ3eHJ3eCAxIHJvb3Qgcm9vdCAzNSBEZWPCoMKgNCAxMDo0OXtbJiomXX0gL2xpYi9zZWN1cml0eS9wYW1fb2F0aC5zbyAtJmFtcDtndDsgL3Vzci9sb2NhbC9saWIvc2VjdXJpdHkvcGFtX29hdGguc28gXCI7e1smKiZdfQ==[[/code]]

 

Nu zou de pam module beschikbaar moeten zijn voor het syteem.
Als je in /etc/pam.d/ kijkt zie je waarschijnlijk referenties naar verschillende applicaties.
Hieruit pakken we de ssh deamon:

/etc/pam.d/sshd

Voeg hierin pam_oath.so toe aan het begin van de code:

[[code]]czo0OTpcIiAjIFBBTSBjb25maWd1cmF0aW9uIGZvciB0aGUgU2VjdXJlIFNoZWxsIHNlcnZpY2VcIjt7WyYqJl19[[/code]]

 

 

[[code]]czozMjg6XCIjIFJlYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gL2V0Yy9lbnZpcm9ubWVudCBhbmQgIyAvZXRjL3NlY3VyaXR7WyYqJl19eS9wYW1fZW52LmNvbmYuIGF1dGjCoMKgwqDCoMKgwqAgcmVxdWlyZWTCoMKgwqDCoCBwYW1fZW52LnNvICMgWzFdICMgSW4gRGViaXtbJiomXX1hbiA0LjAgKGV0Y2gpLCBsb2NhbGUtcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2VyZSBtb3ZlZCB0byAjIC9ldGMvZGVme1smKiZdfWF1bHQvbG9jYWxlLCBzbyByZWFkIHRoYXQgYXMgd2VsbC4gYXV0aMKgwqDCoMKgwqDCoCByZXF1aXJlZMKgwqDCoMKgIHBhbV9lbnZ7WyYqJl19LnNvIGVudmZpbGU9L2V0Yy9kZWZhdWx0L2xvY2FsZVwiO3tbJiomXX0=[[/code]]

 

 

 

 

[[code]]czo3NzpcImF1dGggcmVxdWlyZWQgcGFtX29hdGguc28gZGVidWcgdXNlcnNmaWxlPS9ldGMvdXNlcnMub2F0aCB3aW5kb3c9MjAgZGl7WyYqJl19Z2l0cz02IFwiO3tbJiomXX0=[[/code]]

commentarieer daarbij het volgende uit
[[code]]czo1NTpcIiAjIFN0YW5kYXJkIFVuKnggYXV0aGVudGljYXRpb24uICNAaW5jbHVkZSBjb21tb24tYXV0aCBcIjt7WyYqJl19[[/code]]

Zodat je niet alsnog je wachtwoord moet invoeren, we willen in dit geval alleen gebruik gaan maken van de oath module.

 

Zoals je al in de config terug kan zien moeten we nog een /etc/users.oath file aan gaan maken.
Hierin komt de seat string, de username en de pincode of password te staan welke vooraf gaat aan de gegenereerde oath code.

Of dit nou een goede oplossing vraag ik me af. Al je informatie staat nu niet encrypted in deze file wat het nogal kwetsbaar kan maken. In een ‘bedrijfsomgeving’ zou ik dit dan ook niet direct inzetten, al is het alleen maar omdat je dit ergens centraal neer zou willen zetten (ldap?database?).

Hieronder een voorbeeld van mijn users.oath. De ‘seat’ heb ik natuurlijk deels onherkenbaar gemaakt.

 

[[code]]czoyMDU6XCIgSE9UUC9UNjAvNsKgwqBzaGFyazLCoMKgMTIzNMKgwqA2MDY3eHh4eHgwNzA4MDI5MTF4eHh4eHh4eHh4eHh4eHh4eMJ7WyYqJl19oMKgODc5MDE4wqDCoDIwMTEtMDYtMTFUMTM6MDU6MDRMIEhPVFAvVDYwLzbCoMKgc2hhcmvCoMKgNDMyMcKgwqBGQjhDNTgzRjM3NntbJiomXX1FNzZBQXh4eHh4eHh4eHh4eHh4eHh4eHh4wqDCoDAyMDczMsKgwqAyMDExLTA3LTEzVDIwOjU4OjE1TCBcIjt7WyYqJl19[[/code]]

 

Het eerste deel, HOTP/T60/6 geeft het type token aan. HOTP met T60(60seconden) als tijdsfactor en /6 cijfers. Dit is voor het c200 token.
Daarnaast staat de username, in dit geval shark (en shark2 gekoppeld aan een ander token voor als deze stuk gaat). In het volgende stuk staat 1 van de 2 factoren, de pincode of password. Bij een rsa-token is het gebruikelijk dat je hier een pincode gebruikt, maar dit kan ook prima een (sterk)wachtwoord zijn. Om het geheel nog sterker te maken, zou ik dit dan ook gebruiken (in dit voorbeeld ben ik gewoon lui).
Als 4e staat er de seat zelf.
Meer hoef je niet in te vullen, want de rest doet het systeem zelf. De cijfer reeks erna geeft de laatste gebruikte TOTP code weer zodat je deze ook echt maar 1x kan gebruiken (OTP=one-time-password). Daarna staat het datum/tijdstip van inloggen.

Nu ben je eigenlijk al klaar. Maar voor dat je je SSH-Daemon herstart, wil je eigenlijk nog 2 dingen doen. Via NTP je datum/tijd bijwerken (vrij essentieel) gezien dit een time-based token betreft en de token van te voren even testen.
Dit kan met het volgende commando:

 

[[code]]czo1MDpcIiBvYXRodG9vbCAtLXRvdHAgLXMgNjAgLWQgNiA2MDY3MDZGQjM1MDd4eHh4eHh4eHggXCI7e1smKiZdfQ==[[/code]]

De seat heb ik in dit voorbeeld weer onherkenbaar gemaakt. Dit zou nu de code moeten weergeven zoals op je c200 token.

 

Ook goed om te weten:
Omdat we alleen hier de SSH-Daemon aangepast hebben, kan je op de fysieke console nogsteeds met je username/wachtwoord inloggen. Het is aan te raden dit intact te houden voor als je tokens het begeven.

Nu kan je veilig je ssh deamon of gehele server herstarten en proberen in te loggen met je nieuwe authenticatie gegevens.

Literatuurlijst:

http://blog.josefsson.org/2011/01/20/introducing-the-oath-toolkit/
http://git.savannah.gnu.org/cgit/oath-toolkit.git/tree/pam_oath/README
http://lists.nongnu.org/archive/html/oath-toolkit-help/2011-05/msg00052.html

http://www.ietf.org/rfc/rfc4226.txt

http://www.rfc-editor.org/rfc/rfc6238.txt

 

 

 

 

2-factor authenticatie

De de-facto standaard om via ssh in te kunnen loggen op een linux server is vooralsnog username/wachtwoord. Mocht iemand deze 2 gegevens bemachtigen heb je een simpel te raden wachtwoord.
Om dit te voorkomen kan je een extra factor aan de vergelijking toevoegen. We spreken dan van 2 factor authenticatie....

download machine

Voor de basis installatie van een downloadmachine gebruik ik ubuntu server 64bits, op het moment van schrijven 12.04.....

Retrobright

Een oude spelcomputer en de kleur is niet meer wat hij geweest is (lees: geel ipv grijs)? Waarschijnlijk kun je met wat huis-tuin-en-keuken middelen een eind komen in het schoonmaken. Met spullen die in drogist en supermarkt te koop zijn kan een goede reinigingspasta worden gemaakt....