Gå tilbage

Huller i MitID

  Metoderapport

Navnene på journalisten/journalisterne bag det indstillede

Mads Lorenzen

Projektets beskrivelse

Titel:
Huller i MitID
Beskrivelse:
Der løb rygter i hackermiljøet om, at MitID kunne manipuleres/hackes til at afsløre brugernavne og at man derefter kunne blokere dem. Blandt andet fordi MitID ikke kræver et kodeord. Det skulle 'være så nemt, at en førsteårs it-studerende kunne finde ud af det'. Det lød for dumt/vildt til at være sandt, men da vi henvendte os til Digitaliseringsstyrelsen ville de hverken be- eller afkræfte eksperternes påstande. De ville end ikke mødes med os for at tage imod eksperternes advarsler.

Så vi besluttede os for at efterprøve påstandene og MitID faldt pladask igennem vores hjemmelavede robots tests, der hev mere end 18.000 valide brugernavne ud af systemet og blokerede godt 25 brugernavne (efter samtykke) i mere end to uger uden at systemet reagerede. Konkret betyder det at vi hos vores testpersoner loggede på én gang hvert 5 minut og på den måde holdt dem fra selv at logge ind og bruge MitID.

Hvis de angrebne personer swipede, ville de lukke vores robot/'angriber' ind. Selvom vores forsøgspersoner var advaret og vidende om, at de var med i en test, gjorde hver fjerde netop dét. Vi kunne nemt have skaleret angrebet op til de 18.000 brugernavne, vi fandt, eller flere, men gjorde det ikke af etisk indlysende grunde.

Digitaliseringsstyrelsen fastholdt flere gange, at systemet var som tiltænkt - men ændrede MitID i flere omgange i forlængelse af vores artikler. Til sidst måtte Digitaliseringsministeren stå skoleret i et samråd, hvor hun lovede en stor sikkerhedsopdatering inden sommer.

Senere i forløbet kom det frem, at den dårlige sikkerhed havde ført til, at borgere havde logget hinanden ind med hinandens MitID - en ret alvorlig sag, der viser, at sikkerheden var så dårlig, at brud kunne ske ved et uheld. Dette fik Datatilsynet til at kaste sig ind i sagen og give styrelsen et påbud, som de nu har efterlevet med en højere sikkerhed i MitID - blandt andet med tunnel-og krydsfletning som vi ser det med QR-koderne, når vi bruger MitID i dag.
Publicering:
Mellem september 2022 og start april 2023.

Idéen:

Idébeskrivelse:
Flere kilder havde uafhængigt af hinanden snakket om at denne slags angreb i teorien kunne lade sig gøre. Jeg affejede dem, fordi det lød for vanvittigt. Men da jeg hørte det fra en tredje kilde, der ikke kender de andre, spurgte jeg, om de kunne hjælpe mig med at lave en test, og om det kunne undgås, at nogen kom noget til.

Det blev startskuddet til et nørdet og spændende testforløb.
Tidshorizont:
Selve blokeringstesten løb i små tre uger. Brute force/gætteriet af brugernavne tog kun ti timer, før jeg lettere forfærdet slukkede for den.

Op til da gik der en måned med research, etiske overvejelser og et langvarigt forsøg på at sætte et møde op med Digitaliseringsstyrelsen samt et forsøg på at undersøge, om de selv havde lavet lignende tests i styrelsen.

Nyhed:

Før det første viste vi, at MitID lækkede brugernavne. Det er aldrig godt når vigtige it-systemer gør det, for sammen med kodeordet udgør det halvdelen af sikkerheden.

i MitID er der intet kodeord. Så brugernavnet ér sikkerheden i det led i loginprocessen. (Og den skelner ikke mellem små og store bogstaver...)

For det andet viste vi, at systemet er uintelligent. Det reagerede ikke, da vi blokerede mere end 20 brugere i ugevis ved at prøve at 'logge på' hvert 5 minut hele døgnet rundt i perioden. Med andre ord bemærkede systemet ikke at vores forsøgspersoner ikke sov i to uger for konstant at logge på MitID...

For det tredje udstillede vi Digitaliseringsstyrelsens manglende evne til at erkende fejl. De sagde alt var fint, men opdaterede konstant systemet efterhånden som vi pressede det. Se det etiske afsnit for at blive klogere på, hvordan vi sikrede borgerne trods vores forsøg.

For det fjerde afslørede vi, at styrelsen skjulte, at designfejlene/sikkerhedshullerne havde reelle konsekvenser for borgere, der uvidende lukkede hinanden ind i deres MitID.

Som en femte sidehistorie afslørede vi, at endnu en designfejl gjorde det muligt at bruge CPR-numre i stedet for brugernavne. Det er katastrofalt fordi man i så fald kan lukke specifikke borgere ude, hvis man kender deres CPR eller kan regne det CPR ud, hvilket er relativt nemt. Men det er en anden historie :)

Og så er der alt det løse.

Konsekvens:

Konkret er der blevet udrullet mindst fire sikkerhedsopdateringer til MitID efter vores afsløringer. Den største her i juni hvor der blev indført QR-koder der umuliggør den mest alvorlige del af angrebet. Derudover kan man nu nemmere ændre sit brugernavn hvis man udsættes for vores angreb.

Ministeren blev også kaldt i samråd og blev dér tvunget til at forholde sig til de mange smuttere og den fremtidige sikkerhed i løsningen.


Metode:

Først og fremmest har løbende aktindsigter skabt et overblik gennem sagen der særligt har været nyttigt i de perioder, Digitaliseringsstyrelsen forsøgte at tysse sagen ned. Her er der både tale om indsigt hos selve styrelsen, men også Digitaliseringsministeret, Datatilsynet og hos de selskaber, der leverer dele af MitID-løsningen.

Det indgående baggrunds-samarbejde med adskillige nationale og internationale sikkerhedseksperter i og uden for universitetsverdenen var altafgørende både i forhold til at udføre testen men også komme på sporet af historierne til at starte med.

Den primære metode er dog mere atypisk - vi byggede to simple softwares med det ene formål at trykteste vores alle sammens ID-system.

Det første script blev programmeret i Python og var på ganske, ganske få linjer. Hvilket i sig selv er vigtigt, for der er ikke tale om avanceret angrebskode. Scriptet logger ind med MitID hvor man beder den om det - vi valgte bare mitid.dk.

Herfra begynder den at indtaste brugernavne ud fra en ordliste ét ad gangen. Vi fandt hurtigt ud af, at man kunne gætte forkert 200 gange i timen før systemet reagerede, så vi satte farten efter det og købte nogle billige IP'er for at sprede gætteriet ud. Vi trak ordlister på danske fornavne, efternavne og bynavne. Og alene ved at trawle de tre lister fandt vi vores 18000 brugernavne. Vi kunne have fundet mange, mange flere ved at bruge kunstig intelligens til at indsætte et 1-tal bag dem, kombinere dem og så videre og så videre. Men vi havde allerede vist pointen og ville ikke gå længere end nødvendigt.

Det andet python-script opererede ud fra kendte brugernavne - vi fodrede det med brugernavne vi havde indhentet tilladelse til at blokere. Men kunne lige så vel have brugt vores 18.000 fundne brugernavne. Herefter bad vi dette andet program om at logge ind hvert femte minut for på den måde at udelukke ejeren for at komme på. Det virkede - endda uden at sprede angrebet ud som før. Med andre ord har det her digitalt set ud som om mere end tyve borgere, der ikke bor sammen bruger én computer i to uger til at logge på hvert femte minut.

MitID gjorde intet.


Modstand:

Digitaliseringsstyrelsen har tilbageholdt informationer i flere omgange - blandt andet da de skjulte at vores forsøg ikke var teoretisk, men at brogere selv havde henvendt sig fordi de pludselig var logget ind med andres MitID eller omvendt.

Derudover har vi været ualmindeligt opsatte på ikke at gå længere end til grænsen i vores tests, da vi følte os overbevist om, at styrelsens jurister læste alt vi lavede meget grundigt.


Etik:

Som nævnt ovenfor var vi meget opmærksomme på ikke gå for langt. Vi ville bevise, angrebet var muligt og kunne skaleres, så vi blokerede folk vi kendte og havde indhentet tilladelse fra, men vi ville under ingen omstændigheder påvirke almindelige danskere eller selve systemets driftsstabilitet.

Samtidig stod vi over for en myndighed der nægtede at noget var galt - stik imod eksperter fra universiteter, private firmaer og undergrundsmiljøet. Vi vurderede derfor, at det var i offentlighedens tjeneste at undersøge sagen nærmere.

Vi var konstant i dialog med Digitaliseringsstyrelsen, der fik tid til at opdatere systemerne, inden vi udkom. Derfor kom der også tit en sikkerhedsopdatering der adresserede vores fund samme dag eller dagen før vi udkom. Samtidig blev styrelsen advaret om dette angreb seks måneder inden vores første historie af forskere på Aarhus Universitet. De sad advarslerne overhørigt, og det talte for et offentligt pres på styrelsen.

Vi kørte gætte-testen om natten, så risikoen for at folk bemærkede det ved at få notifikationer i MitID-appen var minimal.

Vores robot var programmeret til at stoppe blokeringsforsøget, hvis folk swipede os ind. På den måde kunne vi ikke få adgang til det der var bag loginprocessen, selv hvis vores forsøgspersoner swipede ved en fejl - hvilket det gjorde.

Vores historier kom bredt ud, idet de handlede om noget, alle kender. Derfor følte vi os forpligtede til også at gøre en del ud af at fortælle folk, hvad de selv kunne gøre, hvis denne type angreb ramte dem.

Vi opbevarede vores data på en krypteret harddisk et skjult sted, så vi kunne bevise historien men ikke selv ville blive det datalæk, vi advarede mod.

Formidling:

Siden vores historier handlede om noget, de fleste danskere har berøring med skrev jeg flere versioner af historierne. Én jeg eksempelvis sendte til EB, én som et oplæg til Godmorgen Danmark, én til Ritzau og så selvfølgelig en til mine egne nørdede læsere, der vil have alle de tekniske detaljer med.

På den måde trak jeg formidlingsmæssigt på flere andre medier, herunder også flere radiokanaler. Vi bredte den ud på flere platforme end vi selv rådede over, og selvom der ikke er tale om ét formidlingsmæssigt greb skulle historien skæres skarpt til flere platforme med begrænsede ressourcer.