Gå til forsiden
Søk
Søk

Kan Webauthn få slutt på phishing?

Då Apple lanserte iOS 14, inkluderte dei ei lita linje i Safari 14 sine release-notes. “Added a Web Authentication platform authenticator using Face ID or Touch ID, depending on which capability is present.” Denne linja kan få store konsekvenser for sikkerheten på nettet framover.

Web Authentication (Webauthn) kan nemleg freiste med ein trygg og enkel påloggingsmekanisme og Safari på mobil (47% av mobilnettlesarar i Noreg) har vore det siste store hinderet for at ein kan ta det i bruk. Nå mangler berre Internet Explorer (kun 3% av alle desktop-nettlesarar i Noreg) og Samsung internet (8% av mobilnettlesarar i Noreg) før alle dei største nettlesarane er kompatible med Webauthn, noko som vil seie at me bør ta det i bruk!

Så kva er Webauthn?

Webauthn er ein standard støtta av FIDO-alliansen (Fast IDentity Online) og W3C. Den spesifiserer eit Javascript-API som nettlesarar kan implementere. 

Dette APIet kan dermed brukes til registrering og autentisering ved hjelp av ein FIDO-brikke eller biometri. Det linja i release notesa betydde, var at Safari nå implementerer Webauthn med biometrisk autentisering.

Kva er det Webauthn skal løyse eigentleg?

“Vanleg” innlogging foregår ved hjelp av brukernamn og passord. Dessverre blir frykteleg mange passord gjenbrukt, samtidig som mange brukarnamn og passord-kombinasjoner blir lekka og solgt. Dette gir slemminger mogelegheit til å prøve brukarnamnet og passordet ditt ikkje berre på sida det blei lekka frå, men òg på alle andre sider der du har det brukarnamnet og passordet. 

Dette problemet har allereie ein løysing som får meir og meir fotfeste (men ikkje nok), passord-managere. Men eit problem disse passord-managerene ikkje løyser, er phishing.

For dei som ikkje veit korleis phishing fungerer, så fungerer det meir eller mindre som vist under:

howtophishNoPush1 
1: Du mottek ein epost frå ei side du stoler på, f.eks. Netflix. Den seier eit eller anna som du kunne forvente å høyre frå denne sida. F.eks. at den førre betalinga di ikkje gjekk gjennom og du må oppdatere betalingsinformasjonen din for at ikkje abonnementet ditt skal bli kansellert. Dei har til og med vore hyggelege nok til å legge ved ei lenke du kan trykke på. 

Du blir stressa, så du trykker på lenka for å fikse det snarast råd, uten å merke at lenka går til eit anna domene enn sida eigentleg ligg på. Njetflix.com i dette tilfellet.

howtophishNoPush2
2: Dette tek deg til noko som ser ut som Netflix sin innloggingsside, så du skriv inn brukarnamnet og passordet ditt og trykker logg inn.

howtophishNoPush3
3: Du har nå sendt innloggingsinformasjonen din til Njetflix!

howtophishNoPush4
4: Njetflix kan nå gjere kva det vil med det. F.eks. sende det til Tom, som ikkje gidd betale for sin egen Netflix-konto. I dette tilfellet logger Tom inn med din Netflix-bruker og sørger for at du får opp forslag “fordi du såg på Honey Boo Boo” neste gong du skal sjå på Netflix med nokon...

Men kva viss du bruker 2-faktor?

2-faktor gjer at du får ein pushmelding på telefonen din når du logger inn. Då kan du stoppe Tom frå å logge inn. Problem solved! Eller?

Tom kan bruke brukarnamnet og passordet ditt med ein gong han får det. På det tidspunktet prøver jo du å logge inn, så vidt du veit. 

howtophishWithPush5
5: Tom bruker ditt brukarnamn og passord for å logge inn på den faktiske Netflix.com.

howtophishWithPush6
6: Netflix reagerer kanskje på at dette er ein mistenkeleg innlogging, så dei sender ein push til telefonen din for å la deg bekrefte eller avkrefte at du logger inn.

howtophishWithPush7

7: Men du prøver jo å logge inn! Så du svarer ja, og Tom kan sjå alle sesongene med Here comes Honey Boo Boo på din rekning.

Så korleis kan dette fikses?

Det er to hovedproblem med brukarnamn og passord, som er grunnen til at phishing er mogeleg. Det viktigste problemet er at innloggingsdetaljene dine forlater enheten din. “Kven som helst” kan lese brukarnamnet og passordet ditt når du sender det. 

Det andre problemet er at det ikkje er nokon kopling mellom nettlesarsesjonen og 2-faktor-autentiserings-requestet som kjem. I eksempelet over så visste nettlesaren at du ikkje prøvde å logge inn på Netflix. Dessverre tolker telefonen nettlesarsesjonen og to-faktoren som to forskjellige ting som ikkje hadde noko med kvarandre å gjere.

Begge disse problema blir løyst viss me tek i bruk Webauthn! Ved å bruke JavaScript-APIet nettlesaren gir oss, kan me lage ein registrerings- og innloggings-flyt som fungerer som vist under:

Registrering:

WebauthnRegistration1
1: Du kjem til ei nettside og fyller inn brukarnamnet ditt (og all annen registreringsinformasjon, viss det er førstegongsregistrering). Evt. så trykker du berre på ein “logg inn med biometri neste gang”-knapp, viss du allereie er logga inn.

WebauthnRegistration2
2: Brukarnamnet ditt blir sendt til serveren til sida du vil logge inn på.

WebauthnRegistration3
3: Serveren svarer med litt diverse data, men for å holde dette forståeleg kan me oversette det til at den ber om ein public key.

WebauthnRegistration4
4: Nettlesaren ber om biometri for å generere eit public-private key pair.

WebauthnRegistration5
5: Etter at du bruker tommelen eller andletet ditt til å godta, skapes ein privat nøkkel og ein offentleg nøkkel som blir lagra på enheten. Disse nøklene blir òg kopla til brukarnamnet du logger inn med og vertsnamnet til tenesten du logger inn på. Den offentlege nøkkelen blir så sendt til serveren.

WebauthnRegistration6
6: Serveren lagrer public keyen og kopler den til brukaren din, sånn at du kan bruke denne til å logge inn seinare.

Login:

WebauthnLogin1
1: Du går til nettsida du skal logge inn på og skriv inn brukarnamnet ditt. Dette blir sendt til serveren.

WebauthnLogin2
2: Serveren ser at du allereie har logga inn, då dei har minst ein public key som er kopla til brukaren din. Dei sender deg difor noko som du skal signere med privatnøkkelen din.

WebauthnLogin3

3: Nettlesaren ber deg om å bekrefte at du er den same som registrerte deg, ved hjelp av biometri. Du kan ha fleire nøkler lagra på enheten din, som er kopla til forskjellige brukarnamn og nettsteder. Når nettlesaren henter ut nøkkelen din, kan den kun hente ut for det nettstedet du logger inn på og det brukarnamnet du bruker.

WebauthnLogin4

4: Du stadfester at du er deg og signerer dokumentet ved hjelp av privatnøkkelen som er kopla til denne nettsida og dette brukarnamnet.

WebauthnLogin5
5: Serveren verifiserer at dokumentet har blitt signert ved hjelp av privatnøkkelen som høyrer til den offentlege nøkkelen som er lagra på serveren.

WebauthnLogin6

6: Viss dette stemmer så er du er ferdig logga inn! Viss nokon andre har prøvd å signere dokumentet vha. ein annen privatnøkkel, vil signaturen vera feil og dei får ikkje logge inn.

Dette har fiksa problemet med at passordet ditt blir sendt over nettet då det kun er den offentlege nøkkelen din som blir sendt. Privatnøkkelen din ligg trygt lagra på enheten din, og uten den klarer ingen andre signere challengen og late som om dei er deg. 

Det har òg fiksa problemet med at to-faktor-requestet ikkje er kopla til sesjonen. Når du bruker Webauthn, kan nettlesaren kun signere challengen med privatnøkkelen som høyrer til eit spesifikt brukarnamn og ei spesifikk nettside. Viss Njetflix.com prøver å hente ut Netflix.com sin privatnøkkel, vil dette bli stoppa.

Så vil webauthn gjøre at phishing forsvinn?

Nei, det vil nok ikkje det heilt ennå, av fleire grunner.

I teorien er Webauthn fantastisk frå eit brukaropplevingsperspektiv. Innlogging skjer ved hjelp av eit lite fingeravtrykk og er i tillegg sikrare enn passord. I realiteten kjem det ann på korleis kvar nettlesar har implementert det. I Safari får ein mellom anna opp ein ekstra boks som spør om du vil la nettsida bruke nøkkelen din, noko som kan vera forvirrande. 

Det er heller ingen bra måte å sjekke om ein enhet er innrullert på, uten å spørre om fingeravtrykk. Ein har altså mange mogelegheiter til å lage skikkeleg lite brukervenlege innloggingsmekanismer ved hjelp av Webauthn. Det vil seie, som med alt anna - dette må tenkes gjennom og implementeres med gjennomtenkte fallbacker for at det skal fungere som ønska. 

Men det er eit meget stort steg i riktig retning og kan verkeleg gjere nettet sikrare, viss det blir tatt i bruk. Problemet nå er at det ikkje føles heilt modent ennå, men dess fleire som bruker det, dess meir arbeid vil nettlesarane legge ned i å få det til å fungere bra. Eg vil difor anbefale alle som styrer sine egne login-løysinger å legge til Webauthn, eventuelt at de tek det i bruk viss de treff på det “in the wild”. Github.com har mellom anna støtte for Webauthn-pålogging.

Så ta turen til webauthn.io og prøv det ut du òg, men ikkje forvent at det skal løyse alle autentiseringsproblema dine heilt ennå.

 

Referanser:
- Safari 14 release notes: https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes
- Nettlesarstats: https://gs.statcounter.com/browser-market-share/all/norway
- Webauth: https://webauthn.io/
- FIDO Alliance: https://fidoalliance.org/fido2/
- Github og Webauthn: https://github.blog/2019-08-21-github-supports-webauthn-for-security-keys/

Litt om forfatteren

Martin Valen

Martin Valen

Fullstackutvikler som tidvis prøver å lære vekk enkle og mindre enkle konsepter.
comments powered by Disqus