SIKKERHET

Det er en sikkerhetssvakhet i BankID

Gjør det mulig å stjele stjele brukernavn, engangskode og passord, skriver utvikleren Jonny Rein Eriksen i denne kommentaren.

BankID benyttes av flere millioner nordmenn. Utvikler mener at sikkerheten i løsningen ikke er så god som en kan få inntrykk av.
BankID benyttes av flere millioner nordmenn. Utvikler mener at sikkerheten i løsningen ikke er så god som en kan få inntrykk av. Foto: Kurt Lekanger, Digi.no
Jonny Rein Eriksen
22. mars 2019 - 14:19
Jonny Rein Eriksen har i 15 år vært utvikler i Opera Software, hvor han primært har jobbet med utvikling av nettleser-kjernen. Det han skriver om i denne artikkelen har han i utgangspunktet jobbet med på privat basis, selv om ledelsen i Opera Software hele veien har vært klar over funnene. <i>Foto:  Privat</i>
Jonny Rein Eriksen har i 15 år vært utvikler i Opera Software, hvor han primært har jobbet med utvikling av nettleser-kjernen. Det han skriver om i denne artikkelen har han i utgangspunktet jobbet med på privat basis, selv om ledelsen i Opera Software hele veien har vært klar over funnene. Foto:  Privat

BankID har 4 millioner brukere og er den viktigste måten å autentisere seg på overfor bank og offentlige tjenester. Vipps, som eier BankID, har et uttalt mål om å spre bruken utenfor finanssektoren.

Stadig nye tjenester som bruker BankID, dukker opp: Ved leie av bil hos nabobil.no, når en tar sol hos solsenterkjeden Brun og blid, eller går på date ved hjelp av datingtjenesten GoodOnes. Alle verifiserer kundene ved hjelp av BankID.

Er BankID trygg å bruke i stadig nye sammenhenger, og ikke minst: Er det en sikker løsning, slik Vipps hevder?

Sikkerhetssvakhet i BankID

En sikkerhetssvakhet i BankID gjør det mulig å utføre et MITM-angrep og stjele brukernavn, engangskode og passord.

Tre faktorer i kombinasjon forårsaker sikkerhetssvakheten:

  1. Brukeren er opplært til at BankID kan brukes på alle mulige tjenester. Mer enn 1200 brukersteder for BankID eksisterer, men ingen oversikt er tilgjengelig. Stadig flere tjenester dukker opp, og nå som EU-direktivet PSD2 har trådt i kraft, kan en forvente at bruken vil øke ytterligere.
  2. En av grunnene til at BankID er enkelt å bruke, er at samme brukernavn og passord benyttes mot alle brukersteder. Når du registrerer deg i appen til Brun og blid eller på websidene til nabobil, benytter du samme brukernavn og passord som du ville brukt når du logger deg på nettbanken eller skatteetaten. Det eneste som varierer er engangskoden.
  3. Brukernavn og passord oppgis gjerne på brukerstedets webside i en iframe. Det gjør det vanskelig å verifisere at en sender påloggingsinfo til BankID Norge og ikke til andre steder. I praksis betyr det at de fleste må stole på at brukerstedet inkluderer BankID Norges iframe. Problemstillingen kompliseres ytterligere av at enkelte brukersteder har egne, tilpassede iframes.
Slik ber henholdsvis Brun og blid-appen og GoodOnes-appen om BankID. <i>Skjermbilde: Jonny Rein Eriksen</i>
Slik ber henholdsvis Brun og blid-appen og GoodOnes-appen om BankID. Skjermbilde: Jonny Rein Eriksen

Dette gjør det mulig å servere en forfalsket BankID-iframe til en bruker og stjele brukernavn, passord og engangskode. Hvis en angriper gjenbruker denne informasjonen innen utløpstiden for engangskoden, så har vi et Man In The Middle-angrep (MITM). En angriper kan da logge på nettbanken samtidig som brukeren for eksempel tror han tar i bruk en dating-tjeneste.

Les også tilsvaret fra Vipps: – Ingen sårbarhet

Hva kan angripes?

Mange tjenester som er beskyttet av BankID kan misbrukes. Med over 1200 brukersteder, er det vanskelig å få en full oversikt.

Hvordan utnytte svakheten?

Der er minimum tre fremgangsmåter:

  • Skape en ny tjeneste og lede brukere til denne via reklame eller phishing-mail. En falsk BankID-iframe serveres og dermed blir brukeren frastjålet sin autentiseringsinformasjon.
  • En utro tjener ved et eksisterende BankID-brukersted kan bytte ut original BankID-iframe med en falsk iframe. Deretter kan en utføre et MITM-angrep på alle som aksesserer brukerstedet. Likeledes kan et eksternt angrep bytte ut en BankID-iframe med en falsk iframe.
  • Et siste alternativ er å angripe en eksisterende tjeneste som ikke bruker BankID til vanlig, for så å endre denne slik at en falsk BankID-iframe blir injisert på et passende sted. Eksempelvis innloggingssidene på en avis eller et forum. Et slikt angrep kan være eksternt eller utføres av en utro tjener.

Det finnes mange angrepsvarianter, både målrettede og med stor rekkevidde.

Nettbank

Vis mer

Et opplagt mål er nettbanken til brukeren. Ved å utnytte sikkerhetshullet, kan en angriper logge seg inn og overføre penger til en konto han selv har kontroll over. Mange nettbanker har en viss beskyttelse ved at en også må verifisere overføringer ved hjelp av BankID. Med et velkonstruert angrep, er det mulig å få en bruker til å oppgi påloggingsinfo en andre gang, og så bruke denne til å verifisere en overføring.

Det å logge seg på nettbanken én enkelt gang er ille nok. Men hva om en kunne logge seg på en annen brukers nettbank når en måtte ønske?

Fingeravtrykk

Når en har et MITM-sikkerhetshull i en autentiseringstjeneste, så er et av de alvorligste angrep å kunne opprette en alternativ pålogging basert på dette.

De siste årene har det blitt vanlig å identifisere seg med fingeravtrykk. Flere nettbanker tilbyr apper hvor en kan autentiseres ved hjelp av fingeravtrykk på egen mobil. For brukerens sikkerhet så får aldri appen tilgang til data om fingeravtrykket, kun om det er en match med den som aktiverte appen. Det svake punktet er følgelig aktivering av appen.

DNB Finger ID

DNB Finger ID for iOS var en slik app. Aktivering av appen skjedde ved hjelp av BankID, og deretter kunne man når som helst logge på nettbanken og overføre penger ved hjelp av et fingeravtrykk – enten på appen eller ved hjelp av nettsidene og en «Finger ID»-kode som genereres av appen.

Saken fortsetter under bildet.

DNBs tidligere Finger ID-app for iOS åpnet for tilgang til nettbanken. Det kunne utnyttes fram til i fjor høst. <i>Skjermbilde:  Jonny Rein Eriksen</i>
DNBs tidligere Finger ID-app for iOS åpnet for tilgang til nettbanken. Det kunne utnyttes fram til i fjor høst. Skjermbilde:  Jonny Rein Eriksen

BankID-sikkerhetshullet gjorde det mulig å opprette denne identiteten på angripers mobil. Deretter kunne angripers fingeravtrykk brukes til å aksessere offerets nettbank. Dette er verifisert ved å installere appen på en iPhone med fabrikk-innstillinger for så å aktivere med BankID. Eier av konto fikk ingen informasjon om at appen var installert på en ny telefon, noe DNB bekreftet. Dermed kan angriper bruke nettbanken over en lengre periode og i tidsrom som ikke er knyttet til brukers egen BankID-bruk.

Innlogging i DNBs nettbank med en engangskode. <i>Skjermbilde:  Jonny Rein Eriksen</i>
Innlogging i DNBs nettbank med en engangskode. Skjermbilde:  Jonny Rein Eriksen

En viktig funksjonalitet i appen var muligheten til å bruke en digital kodebrikke. Sammen med personnummer ga dette mulighet til å logge på i nettbanken ved hjelp av angripers fingeravtrykk. Dermed kunne en nå funksjonalitet som ikke var tilgjengelig i DNB Finger ID-appen.

Hvem var sårbare?

DNB Finger ID hadde en sikkerhetsmekanisme ved at kun én installasjon av denne appen var tillatt til ethvert tidspunkt. Som DNB-kunde med iPhone og appen installert var du beskyttet. DNB kunder som ikke brukte iOS eller ikke hadde installert appen, var sårbare. 70% av DNBs kunder var sårbare på tidspunktet hvor hullet ble rapportert.

Etter at DNB ble informert om sikkerhetshullet, forbedret de installasjonsprosessen. Ved installasjon ble SMS og epost sendt til eier av konto og fortalte at appen var installert på en telefon. Deretter var det opp til eier av konto å ta kontakt med DNB og få deaktivert den om det var et tilfelle av misbruk.

Appen var tilgjengelig frem til januar 2019. Den ble da erstattet av DNB mobilbank-appen som bekrefter overføringer med BankID i motsetning til fingeravtrykk i DNB Finger ID-appen.

Sparebank 1

Sparebank 1 hadde samme sikkerhetshull i sin app. De ble informert om svakheten via sikkerhetsansvarlig i SR-bank og forbedret deretter installasjonsprosessen. De sender nå SMS og epost som forteller kunden at appen er installert på en ny telefon. Dette er en funksjonalitet de også tidligere hadde hatt, men som i en periode manglet. I tillegg har Sparebank 1 alltid krevd BankID for transaksjoner, slik at en angriper ikke ville fått samme kontroll over en konto som i tilfellet med DNB finger ID. Imidlertid ville det vært mulig å overvåke konto-aktivitet over lengre tid.

Hvilken bank skal en angripe?

Vi har et stort antall banker i Norge. Hvis en angriper gjennom et angrep får kjennskap til BankID-påloggingsinformasjon, så vet han ikke nødvendigvis hvilken bank brukeren er kunde i. Det naturlige ville kanskje være å kun angripe den største banken, da det er det som mest sannsynlig vil lykkes. Men BankID har enda en svakhet i og med at en allerede etter å ha oppgitt personnummer, blir opplyst om hvilken bank som har utstedt BankID-identiteten til brukeren. Ut fra personnummer vet en dermed hvilken bank som mest sannsynlig bør angripes.

Skjermbildet er fra steg 2 i innlogging i Sbanken. Brukeren har da først oppgitt et gyldig personnummer. Her vises «DNB» i input-feltet for engangskode. Dette forteller at DNB har utstedt BankID og utgjør en informasjonslekkasje som kan bistå en angriper i å angripe en brukers egen bank. <i>Skjermbilde:  Jonny Rein Eriksen</i>
Skjermbildet er fra steg 2 i innlogging i Sbanken. Brukeren har da først oppgitt et gyldig personnummer. Her vises «DNB» i input-feltet for engangskode. Dette forteller at DNB har utstedt BankID og utgjør en informasjonslekkasje som kan bistå en angriper i å angripe en brukers egen bank. Skjermbilde:  Jonny Rein Eriksen

Det er mulig å bygge opp en database over personnummer og tilhørende bank ved å generere personnummer for en gitt dato og hente utsteder fra BankID iframe. Hver dato har rundt 230 mulige personnumre som kan finnes ved hjelp av en enkel algoritme. En kan også hente denne informasjonen i sanntid mens en utfører et angrep.

Hva med BankID på mobil?

BankID på mobil viser to referanse-ord i BankID-iframe og på mobil. Brukerne er opplært til å oppgi koden sin hvis disse samsvarer.

Et angrep kan forbigå dette ved å videresende referanseord fra en original iframe kontrollert av angriper, til en falsk iframe som bruker har fått servert. At referanseord vises et tidels sekund senere enn normalt, er vanskelig å oppdage.

En tilleggsbeskyttelse eksisterer også ved at firmanavn vises på mobilen. De fleste legger ikke merke til denne informasjonen. På flere brukersteder har en svikt i kontrollrutiner hos BankID Norge ført til at dette firmanavnet ikke samsvarte med websiden. For eksempel hos nabobil.no viste «Signicat AS» som firmanavn. Signicat er en tredjepartsleverandør av BankID-løsninger. Dette viser at brukerne fokuserer på referanse-ordene, akkurat slik de er opplært til. Samsvarer disse, føler de seg trygge og slår inn koden. Etter at BankID ble varslet om denne feilen, har Signicat endret sin løsning slik at alle som benytter deres system for BankID-autentisering, gjør dette på Signicats egne websider. Dermed samsvarer nå firmanavn som vises på mobil med websted hvor iframe benyttes.

Ser en til den svenske BankID-løsningen, så har den MITM-beskyttelse ved kun å fokusere på hvem en legitimerer seg mot i BankID-appen. Dermed er en sikret mot sikkerhetssvakheten.

Demonstrasjon

I videoen nedenfor demonstreres hvordan et angrep mot BankID ville sett ut om dette ble utført på Aftenposten sine innloggingssider. Det er viktig å merke seg at dette i sin helhet er laget på en lokal PC og at Aftenposten er en godt beskyttet tjeneste. Eksempelet er kun ment å illustrere punktet nevnt tidligere: «Et siste alternativ er å angripe en eksisterende tjeneste som ikke bruker BankID til vanlig, for så å endre denne slik at en falsk BankID-iframe blir injisert på et passende sted. Eksempelvis innloggingssidene på en avis eller et forum.»

To tilpassede Chrome-extensions er benyttet: En for å injisere en falsk BankID-iframe i websiden. Den andre for å filtrere ut content-security-policy og x-frame-options HTTP-headere som benyttes for å beskytte websiden.

Falsk BankID-iframe blir servert av en lokal Node.js-server. Visuelt så er den identisk med en standard BankID-iframe. Iframe oppretter en WebSocket-forbindelse med webserver og sender personnummer, engangskode og passord til angriper etter hvert som disse tastes inn. Når angriper mottar engangskode, må denne benyttes umiddelbart for at angrepet skal fungere.

Kode for web-server og Chrome-extensions er ikke publisert.

Oppsummering

Sikkerhetssvakheter i vanlig BankID, samt BankID på mobil, er beskrevet. I tillegg er det vist hvordan disse kunne utnyttes til å ta kontroll over en bankkonto hos DNB. Dermed var det mulig å aksessere og overføre fra en konto uten å bruke BankID.

Del
Kommentarer:
Du kan kommentere under fullt navn eller med kallenavn. Bruk BankID for automatisk oppretting av brukerkonto.