Bruk en yubikey for mer sikker ekstern autentisering.

Bruk en yubikey for mer sikker ekstern autentisering.

Versjon $ Id: yubikey.html, v 1.15 2011/12/10 22:39:42 madhatta Exp $

Dessuten er all yubikey back-end-programvaren vanligvis tilgjengelig under GPL eller andre gratis lisenser, slik at du genererer hemmelighetene for dine tokens, du laster dem pa dine tokens selv, du beskytter dem etter eget onske, og du validerer dem pa back-end som synes best for deg. I hovedsak er sikkerheten ditt ansvar, ikke en andres. Jeg betraktet det som en stor hyggelig a ha til RSA skrudd pa poochet ved a trolig miste masterlisten over hemmelige fro for sine SecurID-tokens. Mens RSA fortsatt nekter a si noyaktig hva de mistet, ble minst en stor sikker kunde kompromittert som et resultat. Sa jeg gjentar: Det er alltid bedre a v re i kontroll over dine egne hemmeligheter. Hvis du stoler pa noen andre til a ta vare pa dem, kan denne tilliten v re uberettiget eller – enda verre – du kan finne at de ikke vil fortelle deg om det var uberettiget eller ikke.

Jeg sier «mer sikker» ikke «sikker» i tittelen fordi det ser ut som om det fortsatt vil v re enfaktorautentisering, for na er det ikke alle metoder for a validere yubikey OTP-stotten, ogsa ved bruk av en personlig PIN-kode. Men yubikey-autentisering er fortsatt mye bedre enn rett brukernavn-passord, da donglen ikke enkelt kopieres, og OTP-dataene kan vel bare brukes en gang.

Ikke at dette er et stort problem, men jeg ma bekjenne at en annen attraksjon i yubikey er at den er lett, tynn og vanntett, jeg kan b re den rundt nakken som en slags missilnokkel eller digital hundemerker. Geek marine! Semper pi (nguis)!

De universelle prinsippene.

Yubikey bruker en AES-nokkel til a generere engangspassord med et unikt identifiserende nonce, to tellere og noe timerbasert salt. Du kobler den til USB-porten din; det vertsystemet mener det er et USB-tastatur. Nar en OTP er pakrevet, legger du bare den nakne fingeren pa teeny touch pad for et sekund eller sa, og den injiserer neste OTP i tastaturet, akkurat som om du selv hadde skrevet det. Det gjor det veldig enkelt a bruke med ethvert program som tar passorddata, enten CLI, webklient eller en tilpasset klient som PuTTY eller TOAD eller system-config. Back-end ma gjore arbeidet med a autentisere OTP; fronten kan v re veldig generell. Det er smart.

En viktig designfunksjon er at yubikey er skrivebeskyttet sa langt som AES-nokkelen er opptatt av. Yubikey vil gjerne sitte der og gi deg OTPer opprettet med nokkelen til tellerne vikler rundt, men det vil ikke gi nokkelen tilbake til noen. Derfor, hvis du installerer en nokkel som ikke er kjent for yubikeys bruker, kan brukeren ikke enkelt produsere en annen enhet som vil generere en lignende OTP-strom.

Den yubikey kommer forhandslastet med en AES-nokkel kjent med yubico, og hvis du planlegger a utnytte sin internett-tilgjengelige autentiseringsinfrastruktur, kan du onske a legge den der. Det er ogsa helt mulig a kjore din egen autentiseringsinfrastruktur, og hvis du planlegger a gjore det, bor du generere dine egne hemmeligheter og skrive dem til yubikey. Eller du kan gjore begge deler:

Jeg vil forklare dette mer detaljert senere, men en fin rynke av v2 yubikeys er at de stotter to profiler, som jeg skal referere til som slot-1 og spor-2. I bruk er disse differensiert av lengden pa beroring pa sensoren; et raskt trykk genererer et token fra slot-1-data, et trykk pa 3-4 sekunder genererer en fra slot-2-data. Deres nettsted gjor det ikke klart, men deres tekniske stotte bekrefter at begge sporene kan v re i OTP-modus. Jeg har tenkt a bruke spor-1 meg selv; Jeg vil holde AES-nokkelen hemmelig, og bygge mine egne autentiseringsservere. Men jeg har tenkt a laste opp slot-2s AES-nokkel til yubikey, og bruk infrastrukturen de gir nar de godkjennes til verden.

Setter min egen AES-nokler inn i yubikey.

Verktoyene for a installere mine egne hemmeligheter pa nokkelen var allerede i Fedora 12-depotet, som var en hyggelig overraskelse. Jeg gjorde en.

Du installerer ykpers.

og de ble installert. Hvis depotet ditt ikke har dem, kom de fra http://code.google.com/p/yubikey-personalization/ og er under BSD-lisensen.

Jeg vil ha en hemmelig nokkel i spor 1, til bruk og en nokkel til a bli lastet opp til yubico for offentlig bruk i spor 2. Etter a ha hatt en fin samtale med teknisk stotte, var det klart at det ikke er noen mate a flytte yubico-forhandsinstallerte nokkel fra spor 1 til spor 2 (men hold oye med denne forumtraden). Sa for na var det klart at jeg matte sette nye nokler i begge sporene. Siden jeg hadde en arbeidsnokkel i spor 1, bestemte jeg meg for a begynne med a prove a programmere spor 2.

Som referanse er det noen testutdata fra min (yubico-forsynte) nokkel i spor 1:

sa jeg fulgte det jeg trodde var den rette incantation for a sette en nokkel i spor 2. Disse ma gjores som rot, forresten, siden det er nodvendig med vilkarlig tilgang til USB-enheten.

Spesielt provde jeg a sette en nokkel ombord, hvoretter jeg provde a trykke pa knappen i tre sekunder, og ingenting kom ut. Jeg fant raskt at du ma koble fra og kopiere nokkelen etter en programmeringsovelse. Da fikk jeg:

Ah, OK, det var det som STATIC_TICKET mente. Hvordan slar jeg av det? som ga meg produksjon slik:

Vel, det er alt veldig bra, men det er kortere enn standardutgangen den forhandsdefinerte sporet 1 ga meg, som du kan se over. Siden dette er sporet jeg planlegger a bruke med yubico-serverne, vil jeg bedre fa det til a ha samme format. Hva med hva ga meg.

Nei, det ser ikke riktig ut enna. Ved en feil overskriver jeg nesten nokkelen i spor 1 og oppdaget at standard config_flags for spor 1 var tomme. Sa jeg provde a sla dem alle til slot 2, med og, mirabile dictu, som synes a ha gjort det:

cccccccbkuctnftgflceklebrflklrkdgvrehvkcjrgj fra spor 1.

cccccccbkuctfntgdiehdjegckvibievdrrlngbiluki fra spor 1.

vvccccccccccvubjibchdivdekfitklicrevrtlckrbu fra spor 2.

vvcccccccccccclbbhkdkrdhrllekdfujrjduttlgbkj fra spor 2.

Jeg gjentok ovelsen for mine to spor med sterke AES-nokler, som jeg genererte med.

dd hvis = / dev / tilfeldig bs = 1k count = 1 | sha1sum.

og som jeg ikke har tenkt a legge inn her. Jeg brukte et fast felt som begynte med «vv» for spor 2, den jeg planlegger a dele med yubico, som de gjor det mulig a gjore her. Jeg har ogsa lagt til -o uid = 0123456789ab-feltet nar du genererer min «sterke» nokkel i spor 1, bare hvis du forlater UID-feltet fullt av nuller, svekker krypto (men bruker 12 tilfelle heks sifre, ikke de ovenfor).

Jeg lastet opp min yubikey pa linken ovenfor, ventet fem minutter, og brukte demo siden for a bekrefte at de hadde det bra.

Bruke min slot-2-tast for a autentisere til offentlige servere.

Pa wiki, sier yubico at Clavid gir en yubikey-aktivert OpenID-tjeneste. Jeg gikk til sin paloggingsside og registrerte meg veldig raskt ved hjelp av min slot-2 nokkel og brukernavnet madhatter. Jeg legger deretter folgende kodefragment overst pa min hovedside. og fortalte LJ at jeg onsket a godkjenne som www.teaparty.net, som jeg vanligvis gjor. Jeg ble straks shunted til Clavid, vennligst godkjenne med din yubikey side, levert min slot-2 nokkel med et langt trykk og hei presto! Jeg leste vennene mine LJ-innlegg. Tips pa hatten til Clavid: takk!

Merknad til selvtillit: Clavids administrasjonsportal er pa https://www.clavid.com/portal, som jeg ogsa (fornuftig) kan godkjenne med min yubikey.

Bruker min slot-1-tast for a autentisere til mine egne servere.

Bruke sshd.

PAM-modulen kom fra http://www.securixlive.com/yubipam/download.php og synes ikke a v re under noen reell utvikling for oyeblikket. Det gir server-sidebit og det er lisensiert under GPL.

Jeg pakket ut den, installerte pam-devel-pakken, gjorde en ./configure && gjor deretter en installasjon som root, og fulgte resten av instruksjonene i INSTALL-filen i distroen med hensyn til a legge til en yubikey auth-gruppe for a gruppere filen / etc / yubikey, og sgid’ing bin rkontrollen.

I henhold til README-filen i distroen endret jeg /etc/pam.d/sshd fra til.

Jeg har lagt til passordet til yubikey-filen med.

Jeg er definitivt i databasen, og replay-angrep fungerer definitivt ikke (som de absolutt ikke burde):

Jeg kunne ha brukt ykpasswd uten den faktiske nokkelen til handen hvis jeg visste de offentlige og private UID-strengene, i hex. Fra utgangen ovenfor fant jeg ut at det offentlige UID (00 00 00 89 87 3d) er det samme som min modhex faste streng (ccccccjkjiet) ved hjelp av yubico’s modhex-kalkulator. Fra dette antar jeg det.

ykpasswd -a -user madhatta -k abcabcabcabcabcabcabcabcabcabcab -f 00000089873d -p 0123456789ab.

ville ha jobbet like bra, selv om jeg ikke har provd det.

Jeg opprettet en lokal gjestebruker og ble ham for a unnga problemer med SSH-agenter, identiteter etc. Da ga jeg OTP-passordet, men fikk mens / var / log / facility / authpriv * sa:

Jeg fant ut at jeg ogsa matte aktivere ChallengeResponseAuthentication i / etc / ssh / sshd_config med.

Da fikk jeg suksess:

Jeg provde et svarangrep ved a lime inn OTP i en tekstbuffer og presentere det to ganger, den andre gangen jeg fikk: Merk hvordan den forste OTP, som er den fra det forrige eksemplet, ble retried, svikter ganske enkelt ikke; bare en ny, gyldig OTP lykkes.

Yubico tilbyr ogsa en PAM-implementering pa http://code.google.com/p/yubico-pam/wiki/YubikeyAndSSHViaPAM, men dette autentiserer yubico’s sentrale server, noe som ikke er onskelig i dette programmet. Skam.

Bruke sudo.

Etter a ha gjort det ovenfor, endrer /etc/pam.d/sudo a starte gjor sudo jobbe lykkelig med OTP, noe som er ekstremt nyttig for meg.

Pa min colocated boks bruker jeg for tiden ikke sudo. Jeg vil gjerne, men jeg vil ikke at sudoers skal ha muligheten til a bruke passordautentisering; Yubikey vil v re obligatorisk. I dette tilfellet laget jeg en kopi av /etc/pam.d/system-auth kalt /etc/pam.d/system-yubiauth, deretter slettet alle ikke-auth linjer og kommenterte folgende linje i / etc / pam. d / system-yubiauth: og endret starten pa /etc/pam.d/sudo for a lese.

Na, hvis en bruker som blir bedt om en yubikey OTP, bare treffer retur, mislykkes sudo i stedet for a sende ham / henne til passordautentisering.