Udvikler demonstrerer elegant og automatiseret NemID-angreb

3. september 2018 kl. 03:0026
Udvikler demonstrerer elegant og automatiseret NemID-angreb
Illustration: screenshot.
Danskerne har i udgangspunktet ikke en chance for at gennemskue, hvorvidt en NemID-login-boks er et phishing-forsøg eller ej.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Med moderne værktøjer og lidt teknisk snilde er det nemt og hurtigt at lave en fup-hjemmeside, der kan franarre danskerne deres NemID-oplysninger. Og det kan for eksempel give en cyberkriminel adgang til at logge ind i andres navn og rette i skatteoplysninger på skat.dk, lure i sundheddata på sundhed.dk eller slet og ret afgive støtte til et borgerforslag på borgerforslag.dk

Søren Louv-Jansen, der til dagligt arbejder som softwareudvikler, har lavet en test-hjemmeside for at demonstrere, hvor let sådan et angreb kan udføres.

Angrebet udnytter en grundlæggende svaghed i NemID-designet. Nemlig at brugeren i udgangspunktet ikke har nogen mulighed for visuelt at vurdere, hvorvidt en NemID-loginboks indlejret på en hjemmeside er falsk eller ægte.

NemID optræder som bekendt i mange sammenhænge, eksempelvis på gambling-sider. Så der er som sådan ikke noget usædvanligt i, at en privat hjemmeside kan bede brugeren om at validere sig via på den måde.

Artiklen fortsætter efter annoncen

Men i princippet kan det være alt fra cyberkriminelle ude efter penge til fremmede stater ude efter oplysninger, der står bag login-boksen. Uanset om det er det ene eller det andet, så kan angriberen via en falsk login-boks franarre folk NemID-brugernavn og -kodeord. Disse oplysninger sætter angriberen så i en legitim NemID-boks i eksempelvis netbanken eller på borger.dk.

Denne legitime boks svarer nu tilbage med en besked om, at brugeren skal godkende via nøglekort eller den relativt nye NemID-app.

Angriberen sender disse info videre til den intetanende bruger, der nu godkender via app eller indtaster koden fra nøglekortet på fup-sitet, hvorefter angriberen bruger dette input til at få adgang til eksempelvis brugerens netbank.

Medlemsklubben.dk

Søren Louv-Jansen står bag hjemmesiden medlemsklubben.dk, der er udstyret med en falsk NemID-boks, som demonstrerer problemet.

Artiklen fortsætter efter annoncen

Hjemmesiden ser umiddelbart troværdig ud og er tilmed udstyret med en grøn hængelås i browserens adressebar. Sådan en indikerer jo som bekendt at forbindelsen er krypteret. Flere Version2-læsere ved, at en angriber sagtens kan stå bag en hjemmeside, selvom den har en grøn hængelås. Men hængelåsen vil utvivlsomt give flere brugere et indtryk af, at alt er i den skønneste orden.

»Det er jo ikke noget nyt problem, men jeg var bare irriteret over, at hver gang, jeg tastede mit brugernavn og min adgangskode ind på forskellige sites, så havde jeg ingen mulighed for at vide, om de opsnappede (red. brugernavn og adgangskode) eller ej. Så jeg følte egentlig, jeg gav mine oplysninger ud til alle og enhver, og det kan jeg ikke lide som teknisk kyndig person,« fortæller Søren Louv-Jansen.

For nyligt introducerede Google muligheden for at køre en headless Chrome-instans på Google App Engine (GAE). Det vil sige en udgave af den populære browser i skyen, der via kode kan fjernstyres til eksempelvis at udfylde data i en NemID-boks.

Og det gjorde det lige til at lave en automatiseret demonstration af angrebet på medlemsklubben.dk. Automatiseret vil her sige, at det ikke er nødvendigt med menneskelig interaktion fra angriberens side - eksempelvis i forhold til at indtaste det opsnappede kodeord i en legitim NemID-boks.

»Det gjorde det pludseligt meget nemmere at lave et angreb,« fortæller han.

Søren Louv-Jansen vurderer, det har taget ham et par timer at sætte et fungerende angreb sammen, og lidt længere tid at finpudse detaljerne.

Den danske udvikler benytter Puppeteer-værktøjet fra Google til fjernstyring af Chrome-instansen i skyen. Puppeteer kan blandt andet simulere brugerinput via et tastatur.

Så når en bruger taster data i boksen hos medlemsklubben.dk, bliver brugernavn og adgangskode fodret til den fjernstyrede Chrome-instans, der inputter login'et i NemID-boksen på borger.dk

Artiklen fortsætter efter annoncen

Herefter bliver brugeren på medlemsklubben.dk bedt om sine to-faktor-oplysninger, altså nøglekort eller app, som ligeledes bliver brugt på borger.dk

Slutresultatet er, brugeren umiddelbart logger ind på medlemsklubben.dk, men reelt bliver der logget ind i baggrunden på borger.dk, hvor antallet af beskeder i den digitale postkasse bliver aflæst og præsenteret for brugeren.

Der er tydeligt skiltet med, at der er tale om en angrebs-demonstration på medlemsklubben.dk.

I det omfang, det er muligt, bestræber vi os generelt på Version2 på at efterprøve angrebsteknikker som den, medlemsklubben.dk skilter med. Det har vi ikke haft mod på i dette tilfælde, i stedet nøjes vi med Søren Louv-Jansens forklaring, som virker troværdig. Desuden er det en kendt problemstilling, at NemID kan angribes som beskrevet.

Forskel på kort og app

Det er dog her værd at bemærke, at den NemID-app, som blev udgivet tidligere i år, og som gør det muligt at validere via mobiltelefon i stedet for papkort, faktisk kan gøre det vanskeligere at fuppe brugere. Angrebet beror jo på, at det i udgangspunktet ikke er muligt for almindelige mennesker at gennemskue om en NemID-boks er falsk eller ægte.

Men når en NemID-bruger validerer sig via app'en, så kan den kontekst, brugeren er ved at logge ind i, også vises i app'en. Det vil her sige en besked om, at brugeren er ved at logge på eksempelvis borger.dk.

Og selvom brugeren befinder sig på et svindel-site som medlemsklubben.dk, dukker der stadig en besked op om login på borger.dk, hvor angriberen jo reelt forsøger at logge ind. Og det kan i princippet give et praj om, at noget er rivravruskende galt.

Med NemID-app'en er det muligt at se den kontekst, brugeren er ved at logge ind i.

»Der er app'en bedre lige i det her tilfælde,« siger Søren Louv-Jansen.

Når det er sagt, så vurderer han, at flere brugere overordnet forbinder NemID med netop borger.dk. Og derfor mener Søren Louv-Jansen ikke, at NemID og borger.dk i samme sætning nødvendigvis får særligt mange til at rynke panden - uanset hvor der logges ind.

Desuden så fremgår det ved login på flere andre offentlige hjemmesider blot, at brugeren er ved at logge på Nemlog-in. Hvilket må sige ikke at være særligt sigende for konteksten.

Gængse metoder fungerede ikke

Det fremgår af koden i NemID-appen, at folkene bag er helt klarover problemstillingen. Søren Louv-Jansen er således stødt på flere kodemæssige tiltag, der skal forhindre et automatiseret angreb, som det, han gennemfører.

Eksempelvis er der i koden adskillige felter til brugernavn, men det er kun et af felterne, der fungerer og faktisk bliver vist for brugeren. Det samme gør sig gældende for feltet til kodeord. Søren Louv-Jansen forklarer, at det gør det vanskeligt at sætte eksempelvis kodeordet ind i det rigtige felt på automatiseret vis.

Udover at der er flere felter at vælge mellem, så var det slet ikke muligt at bruge en ellers gængs metode til at fjernstyre Chrome-instansen til at vælge et kodeordsfelt, så der kunne sættes data ind.

Søren Louv-Jansen fortæller, at sådan et skifte normalt ville blive lavet via kald til browserens API, eksempelvis i form af Document.querySelectorAll()

»Det er en API man bruger, når man vil have fat i et element på en side,« siger han.

Kodeordsfeltet ville så blive kaldt med:

  1. document.querySelectorAll('input[password]')

Men Document.querySelectorAll() fungerede ikke på NemID.

Søren Louv-Jansen forklarer, at NemID-app’en overskriver flere af metoderne i browser-API'et med proxy objekter.

Det betyder, at NemID-koden kan detektere kald til eksempelvis Document.querySelectorAll() og på den måde forhindrer et automatiseret angreb via browser-API’et.

Hvis Document.querySelectorAll() bliver forsøgt anvendt til eksempelvis at vælge kodeordsfeltet, så fejler login-forsøget ifølge Søren Louv-Jansen med en besked om, at der er sket en uventet fejl.

Han fandt i stedet på at få Chrome-instansen til at simulere et tryk på tabulator-tasten. Altså fuldstændigt som kom det fra en bruger.

Et tabulator-tryk får i mange sammenhænge, som bekendt cursoren til at springe fra et element til det næste i en formular. I NemID-tilfældet fik Søren Louv-Jansen således skiftet mellem felterne for henholdsvis brugernavn og adgangskode. Og på den måde lykkedes det at omgå beskyttelsesmekanismerne og automatisere login-processen på borger.dk via de opnsappede oplysninger fra medlemsklubben.dk

Søren Louv-Jansen fortæller, han har lagt lidt forsinkelse ind i forhold til, hvordan de enkelte tegn bliver sat ind i tekstfelterne i NemID-boksen for at det ikke skal se for maskinelt ud.

I princippet er der ikke noget til hinder for, at NemID vil kunne sættes op til at registrere, at der er lusk på færde, hvis der eksempelvis altid er 50 millisekunder mellem hvert tastetryk.

Sådan en forsvarsmekanisme vil dog ifølge Søren Louv-Jansen også kunne omgås, slet og ret ved at kopiere den forsinkelse, brugeren på medlemsklubben.dk har mellem hvert tastetryk.

Advarsel på domæne

Version2 forsøger at få en kommentar fra Digitaliseringsstyrelsen, den offentlige myndighed som NemID hører under, forholde sig til den grundlæggende sikkerhedsproblemstilling, som bliver demonstreret på medlemsklubben.dk

Siden Version2 kontaktede Digitaliseringsstyrelsen første gang i relation til medlemsklubben.dk er domænet nu blevet flaget som værende et ondsindet domæne hos Google Safe Browsing. Det indebærer en gigantisk advarsel i blandt andet Firefox, når en bruger forsøger at surfe til medlemsklubben.dk

Det er ikke første gang, Version2 har gjort Digitaliseringsstyrelsen bekendt med, at det kan være svært at spotte en fup-NemID-boks.

I 2011 lavede Version2 således en lille demonstration for at anskueliggøre problemet.

Nedenfor kan du se en video, som Søren Louv-Jansen har lavet af sin automatiske angrebsteknik. Og nedenunder den video kan du se Version2’s - medgivet - mindre stømlinede og mere manuelle demonstration af samme problemstilling fra 2011.

Remote video URL

Remote video URL

OPDATERING Artiklen er opdateret med en pointe om, at det ved brug af NemID-app'en til login på flere offentlige hjemmesider, blot fremgår, at der er ved at blive logget på Nemlog-in. Altså ikke en videre konkret kontekst.

Det fremgik desuden tidligere af artiklen, at Digitaliseringsstyrelsen grundet en booket kalender, havde problemer med at stille op til interview. Det var den første melding fra styrelsen. Sidenhen har Digitaliseringsstyrelsen igen forsøgt at kontakte Version2. Men da medlemsklubben.dk er blevet markeret som værende ondsindet, er de øvrige mails fra styrelsen, hvor domænenavnet optræder i tråden, ikke havnet i redaktionens indbakke, men i spam-filteret. Vi håber snarligt at kunne bringe en kommentar fra Digitaliseringsstyrelsen.

26 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
26
24. oktober 2018 kl. 17:17

Live op-koblingen havde jeg ikke tænkt med. ØV

24
24. oktober 2018 kl. 14:07

Hvis man laver en "trykfejl" under indtastning af Bruger-ID eller Adgangskode, kommer der en fejlmeddelse, og efter 3 forsøg med forkert adgangskode, bliver man blokeret.

Der kommer også en fejlmeddelelse ved indtastning af et forkert tal fra nøglekortet.

Hvis man er i tvivl om der er fup i en hjemmeside, kan man vel teste den, ved at indtaste en forkert nøglekode ???

Hvis hjemmesiden er OK, kommer der en fejlmeddelelse, og man kan taste den rigtige kode ind. Hvis der ikke kommer en fejlmeddelelse, må hjemmesiden være ulden, og man trækker sig høfligt tilbage.

Lidt besværligt, men burde virke ved TVIVL om ægtheden.

Vil det fungere ???

22
4. september 2018 kl. 12:55

Den blev vel lige præcist IKKE forsøgt solgt som en Digital Signatur

Jo den er blevet solgt til befolkningen som en digital signatur, trods det at det tekniske grundlag ikke lever op til loven om elektroniske signaturer.

Et stjerneeksempel på politisk inkompetence, og et embedsmandsapparat, så som digitaliseringsforstyrrelsen, som har helt deres egen agenda.

21
4. september 2018 kl. 12:45

min digitale signatur, da det hele ligger på Nets's server (I Norge)

Lige præcis de bits, som udgør din "digitale signatur" ligger svjv. stadig i DK. Men alle de andre bits, dem som får det hele til at fungere, er svjv. flyttet til Norge.

Men jeg kan tage fejl. Dels ved jeg kun, hvad vi er blevet fortalt, dels kan jeg have hørt forkert, dels kan tingene have ændret sig.

Og nej, det gør ikke anden forskel end at man sige "din signatur er stadig i DK".

20
4. september 2018 kl. 11:01

Systemet er alt for nemt at misbruge, og narre brugere! Samt NemID er ikke en digital signatur, selvom den blev solgt som sådan.

Den blev vel lige præcist IKKE forsøgt solgt som en Digital Signatur da jeg ikke er i besiddelse af noget af min digitale signatur, da det hele ligger på Nets's server (I Norge) og NemID papkortet kun er en Single Sign On løsning som verificerer mig overfor Nets.

At den så alligevel bruges som digital signatur er så en anden sag.

19
4. september 2018 kl. 10:54

Jeg har flere NEMID'er en til banken og en til det offentlige, det giver lidt bedre sikkerhed end bare at havde en der bruges til alt - dette er muligt, og jeg har brugt det i årevis, men man skal spørge efter det og bede dem blokere den offentlige i banken, og banken i det offentlige - besværligt.

Men som påpeget af andre så har mange disse svagheder været påpeget allerede før NemID blev fuldt ud lanceret, og blev prompte ignoreret både af folketinget og DanID/Nets.

Systemet er alt for nemt at misbruge, og narre brugere! Samt NemID er ikke en digital signatur, selvom den blev solgt som sådan.

18
4. september 2018 kl. 09:06

Ole Madsen: Jeg er ikke enig i, at endnu en kode fra nøglekorte skal kunne kompensere for et mindre stærkt password. Styrken ved 2FA er at der skal være to uafhængige og stærke autentificeringsfaktorer. Det er en farlig misforståelse at argumentere for, at den ene faktor er lidt ligegyldig, da der er jo altid den anden faktor…

https://en.wikipedia.org/wiki/Multi-factor_authentication

16
3. september 2018 kl. 20:42

Henrik Madsen: Hvis man sætter sit nemid op med en 4-cifret pinkode i stedet for et almindeligt password, skal man bruge en kode fra nøglekortet (eller appen, går jeg ud fra) hver gang man logger ind.

Bevares, en 4-cifret kode er nemmere at aflure end et password, men jeg vil påstå at sikkerheden på min bankkonto er højere hvis jeg har en 4-cifret kode og 2FA end hvis min kode er abe123.

15
3. september 2018 kl. 17:05

Hvordan løses problemet med engangskoden?

Der er intet problem med engangskoden - du har givet manden engangskode og han bruger den til at logge på et andet system end det du tror (borger.dk i stedet for medlemsklubben.dk).

14
3. september 2018 kl. 16:36

Det ville blive brugt at så at det ville være spild at tid at udvikle

Måske, men hvis alle kritikere får ret med det argument, stopper al udvikling.

Jeg mindes en tilsvarende kommentar da blandt andet facebook startede op i tidernes morgen.

Man kunne også sagtens lave setuppet, så ALLE tjenste udbydere får unikke bruger-ids ud af nem-id, så data IKKE kan sammenkøres uden at brugeren kobler dem sammen. Hver udbyder ville så kunne identificere mig og dig, men ikke sammenkører data ud fra bruger-id'et.

Hvor der er en vilje, er der en vej. Både mhv til at samkøre ting uaftoriseret, og til at besværliggøre en samkøring.

/Henning

13
3. september 2018 kl. 15:25

“Havde man mulighed for flere ID'er, kunne man eksempelvis have et til privat økonomi, et til offentlige ting, og et til mindre seriøse ting, som f.eks. spil og handel i DBA.”

Det ville blive brugt at så at det ville være spild at tid at udvikle

12
3. september 2018 kl. 13:46

Hvordan løses problemet med engangskoden?

11
3. september 2018 kl. 12:26

Problemet er at man kun har eet ID til alle services.

Havde man mulighed for flere ID'er, kunne man eksempelvis have et til privat økonomi, et til offentlige ting, og et til mindre seriøse ting, som f.eks. spil og handel i DBA.

Hvis jeg med flere ID'er blev udsat for et MITM som ovenstående ville jeg nok undre mig hvis DBA udbad sig et ID til min privat økonomi.

Det sikreste ville være eet ID pr. Service, men så skulle man have en del papkort.

En mellemvej ville være at give folk selv lov til hvordan de ville organisere deres sikkerhed.

Som det er nu er det forkasteligt at borgere bliver tvunget ud i en situation hvor man skal kompromittere sin økonomiske sikkerhed fordi man vil sælge en brugt stol.

10
3. september 2018 kl. 11:59
9
3. september 2018 kl. 11:47

Kunne være at fjerne IFRAME muligheden, så der altid er pop-up med verificerbar URL.

Jo, men det er jo ikke lige så pænt som boksen på siden. Og hvis folk kommer til at trykke på vinduet bag popup'en så forsvinder den. Brugervenlighed er jo vigtigere end sikkerhed - det er også derfor at der ikke er forskel på store og små bogstaver i password til nemId. Så kan folk have aktiveret caps-lock ved en fejl og alligevel logge ind - nemt og bekvemt.

8
3. september 2018 kl. 11:34

Hej Christian,

Tak for kommentaren (og din mail). Jeg har indføjet pointen om Nemlog-in i artiklen. Men app'en kan give en bedre kontekst end nøglekortet, det viser eksemplet med borger.dk Jakob - V2

7
3. september 2018 kl. 11:01

Det er korrekt at app'en viser borger.dk ved borger.dk, men ved sundhed.dk viser den "Nemlog-in".

6
3. september 2018 kl. 10:49

“Kunne være at fjerne IFRAME muligheden, så der altid er pop-up med verificerbar URL.”

Husk at det bruges at alle i Danmark,ikke kun den der ved noget it

Og hvad er det nu nem id ligger ???

NemID.dk Nem-id.dk NemID.com Nem-id.com

Der er så mange muligheder

5
3. september 2018 kl. 09:41

Som der i artiklen gøres opmærksom på, så blev muligheden demonstreret allerede for omkring 7 år siden.

Så vidt jeg husker (og tilgiv mig, hvis jeg husker forkert), så blev der allerede dengang peget på to problemer:

  1. At det var noget, som blev indlejret i alle mulige sider, og det derfor ikke var muligt at verificere, om det var reelt eller snyd.
  2. At der kun var et niveau, både til at låne bøger og frasige sig statsborger eller pantsætte ejendom.

Mao. blev detpåpeget at det var en usædvanlig ringe ide at vænne folk til at indtaste NemID oplysninger her og der og alle vegne - og i tide og utide.

Men vi har vist ikke rigtigt hørt om angreb af denne art i den mellemliggende periode. Skyldes det, at det simpelthen ikke er attraktive ting, som dækker sig ind med NemID - eller har man formået at lægge låg på det?

Og værd at bemærke er, at selvom NemID er steam-punk udgaven af to-faktor autentifikation, så virker det jo også her ... man er henvist til at lave et realtidsangreb, og det er et meget lille vindue, som man der skal snige selv igennem.

Måske er det også derfor at de angreb vi har set, mere går på at opsnappe nøglekort eller franarre indholdet af samme.

Men det ville virkelig være rart med en sikker kanal udenom siderne med login-boksen, hvor man som bruger får en besked om, hvor man prøver at logge ind og til hvilket formål - og en besked hvis indhold er autentificeret af NemID på en måde, så den ikke kan forfalskes, hvor NemID indestår for afsenderens identitet og hvor indholdet umiddelbart kan verificeres af brugeren.

At have koder på flere niveauer er trivielt (flere kort, 6- hhv. 8-cifrede numre, etc.), men det forudsætter, at man fra afsender side på fornuftig vis kan skelne, og det kan man tydeligvis ikke, når der kommer påmindelser fra skoletandplejen både som sikker-epost og på SMS på samme tid.

4
3. september 2018 kl. 09:33

Dette er den eneste mulige løsning. Det er også det, som alle 3.-parts login systemer i det private har gjort, f.eks. Facebook og Google. Du skal altid ind over deres site for at logge ind, således at du kan se, at du kun sender oplysninger til dem i dit adressevindue.

3
3. september 2018 kl. 09:12

"I hvert fald er sitet siden Version2’s henvendelse nu blevet flaget som værende et ondsindet domæne hos Google Safebrowsing."

Der går nok ikke længe inden Søren bliver sigtet og hans hjem ransaget. :-(

2
3. september 2018 kl. 09:09

Kunne være at fjerne IFRAME muligheden, så der altid er pop-up med verificerbar URL. Så kunne brugeren lære at se efter. Nu er jeg ikke HTML mand, så jeg ved ikke om man kunne gemme adresselinien, lave et passende IMG tag med noget der ligner en adresselinie godt nok til at snyde de fleste brugere.

Generelt med OpenID, så sendes man til identitity providers webside. Og her bør brugeren kunne genkende den.

1
3. september 2018 kl. 09:01

Jeg har altid haft præcis den samme tanke som Søren her. Det er da grov uagtsomhed at man designer og accepterer det så tåbeligt naivt! Man in the middle angreb har jo været kendt siden it hed edb! Hvordan kan de tillade at alle mulige sites bruger NemID på deres egne domæner?