DanID camouflerer programkode på din pc som billedfiler

17. november 2011 kl. 13:3098
DanID's login-applet til NemID camouflerer eksekverbar kode som uskadelige GIF-filer i NemID-mappen din pc.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Den nyeste version af McAfees antivirusmotor opdager to mistænkelige programfiler blandt de filer, som bliver gemt lokalt på brugerens pc, når han logger på med NemID.

I første omgang så det ud til at være en falsk alarm efter en opdatering af McAfees scanningsværktøj, men som flere læsere også har gjort opmærksom på, så er NemID-applettens billedfiler ikke, hvad de giver sig ud for at være.

De mistænkelige filer ligger i en pakket fil, et såkaldt JAR-arkiv, som bruges til at distribuere filer sammen med Java-appletter.

Version2 har pakket den pågældende JAR-fil ud for at se nærmere på de to GIF-filer, som udløser virusalarmen fra McAfee, og det viser sig, at der ikke er tale om billedfiler.

Artiklen fortsætter efter annoncen

Filerne ligger ganske vist i mappen "/img" og hedder "large.gif" og "pause.gif", men ser man nærmere på indholdet, så er det ikke GIF-billeder.

I stedet er der tale om kompilerede programfiler. Halvvejs nede i large.gif bliver man således mødt af klartekst, som ser ud til at være fejlmeddelelser, som programmet kan give under kørslen i forbindelse med fejlfinding.

I stedet for harmløse billedfiler, så er der altså tale om programkode. Det fremgår også, hvis man ser på de sidste linjer af large-gif, som indeholder XML-kode, der bruges til blandt andet at angive, hvilke rettigheder programmet skal køre med.

Men det er ikke kun de to filer, som McAfees antivirus gav udslag på, som ikke er, hvad de udgiver sig for at være. Som flere læsere også har gjort opmærksom på i debatten til den første artikel, så ser de øvrige GIF-filer i JAR-filen også ud til at være programfiler.

Eksempelvis er filen "error.gif" en ELF-fil, altså en eksekverbar programfil til Unix-systemer. Ud af de GIF-filer, som ligger i appletten, er i alt fire ikke GIF-filer, som man også kan se ud fra visningen i Windows Stifinder:

Version2 har kontaktet DanID for at få svar på, hvorfor NemID-appletten inkluderer nogle programfiler, som udgiver sig for at være billeder ud fra filnavnet.

»Det kan jeg ikke svare på. Vi er i færd med at få det afklaret,« siger kommunikationschef Jette Knudsen fra Nets DanID til Version2.

De to umiddelbart nærliggende muligheder er, at der enten kan være tale om en fejl i filerne, som ikke er blevet opdaget tidligere, eller at filerne bruges i forbindelse med sikkerheden i NemID-appletten, hvilket kan forklare, hvorfor DanID har forsøgt at sløre dem ved at camouflere dem som billedfiler.

98 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
99
30. juni 2012 kl. 15:21

jeg er ikke en fan nemid og danid og bliver det aldrig sætter hemmelige filer ind på ens computer det er ikke noget jeg støtter sidste gang jeg bruger det.....

97
30. maj 2012 kl. 11:28

Hej Alle.

Ville lige forelægge en tanke der slog mig, efter at have læst omkring Cyberkrig på EB.DK http://ekstrabladet.dk/kup/elektronik/teknologi/article1767831.ece og den relaterede link til Version2 af EB-brugeren Jesper P, hvori der var et indslag her fra Christian E. Lysel med link'et http://www.threatexpert.com/report.aspx?md5=35f9182e2df7777956c2f7506e96c8aa hvor man kan se i bunden at den opretter en process på lidt over 20 MB. Med tanke på dette og på beskrivelsen benævnt i EB's artikel om en virus på over 20MB kunne det måske tænkes at DanID (og alle os der bruger det) er blevet offer for et angreb?? Jeg vil ihvertfald tjekke det nærmere nu.. :)

98
30. maj 2012 kl. 12:12

hvor man kan se i bunden at den opretter en process på lidt over 20 MB. Med tanke på dette og på beskrivelsen benævnt i EB's artikel om en virus på over 20MB kunne det måske tænkes at DanID (og alle os der bruger det) er blevet offer for et angreb??

Ingen sammenhæng - den nævnte malware har moduler der fylder ~20meg på disk, ThreatExpert linket har ~105k diskplads og ~20meg memory forbrug... hvilket på ingen måde er unaturligt hvis vi snakker Java.

96
31. januar 2012 kl. 11:30

Psst. Husk, hvor partierne står i sager som denne, når det næste valg kommer. :)

Problemet er bare at man kan finde et hvilket som helst parti, der i enkeltsager som dette agerer hensigtsmæssigt eller ej - og lige omkring de bizarre ting der sker for tiden, som dette og ACTA, så ser vi at det er yderfløjene der er de eneste der er nogenlunde vågne.

Desværre er mange andre parametre der indgår i styring af et land, så uagtet hvor gode intentioner EL ellers har på lige dette område, så er der også en masse takter der er uforenelige med en forsvarlig forvaltning af et land - og uagtet hvilken retning man vender kikkerten, så er det svært at finde nogen politikere der ikke enten er hamrende inkompetente, eller syltet ind i skandalerne på en måde der grænser til det korrupte.

90
19. november 2011 kl. 18:08

Hvis man undersøger ELF version (error.gif) bliver det ganske tydeligt, at der er tale om native unsandboxed C++ kode, der bliver kaldt via JNI fra appletten.

Den benytter libstdc++.so.6, libm.so.6 og libc.so.6 og symboltabellen afslører det drejer sig om kaldene:

Symbol table '.dynsym' contains 88 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.0 (2) 2: 00000000 0 NOTYPE WEAK DEFAULT UND gmon_start3: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses 4: 00000000 0 FUNC GLOBAL DEFAULT UND _IO_getc@GLIBC_2.0 (2) 5: 00000000 0 FUNC GLOBAL DEFAULT UND uname@GLIBC_2.0 (2) 6: 00000000 0 NOTYPE WEAK DEFAULT UND pthread_once 7: 00000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.0 (2) 8: 00000000 0 FUNC GLOBAL DEFAULT UND ioctl@GLIBC_2.0 (2) 9: 00000000 0 FUNC GLOBAL DEFAULT UND socket@GLIBC_2.0 (2) 10: 00000000 0 FUNC WEAK DEFAULT UND pthread_mutex_unlock@GLIBC_2.0 (2) 11: 00000000 0 FUNC GLOBAL DEFAULT UND fclose@GLIBC_2.1 (3) 12: 00000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.0 (2) 13: 00000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.0 (2) 14: 00000000 0 FUNC GLOBAL DEFAULT UND fopen@GLIBC_2.1 (3) 15: 00000000 0 FUNC GLOBAL DEFAULT UND strcpy@GLIBC_2.0 (2) 16: 00000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.0 (2) 17: 00000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.0 (2) 18: 00000000 0 FUNC WEAK DEFAULT UND pthread_mutex_lock@GLIBC_2.0 (2) 19: 00000000 0 NOTYPE WEAK DEFAULT UND pthread_cancel 20: 00000000 0 FUNC GLOBAL DEFAULT UND __sprintf_chk@GLIBC_2.3.4 (4) 21: 00000000 0 FUNC GLOBAL DEFAULT UND __snprintf_chk@GLIBC_2.3.4 (4) 22: 00000000 0 FUNC GLOBAL DEFAULT UND dl_iterate_phdr@GLIBC_2.2.4 (5) 23: 00000000 0 FUNC GLOBAL DEFAULT UND __gxx_personality_v0@CXXABI_1.3 (6) 24: 0000186b 38 FUNC GLOBAL DEFAULT 11 _Z23BytesToWordLittleEndi 25: 00002c99 116 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 26: 00001a5c 99 FUNC GLOBAL DEFAULT 11 _ZN7cAES25613InvMixColumn 27: 00002d3e 43 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 28: 00008c94 11 OBJECT GLOBAL DEFAULT 13 LibraryVersion 29: 0000b080 1024 OBJECT GLOBAL DEFAULT 23 e30: 00002abe 92 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 31: 00002258 182 FUNC GLOBAL DEFAULT 11 _ZN11cCBC_AES2567DecryptE 32: 00003126 278 FUNC GLOBAL DEFAULT 11 _Z15CollectPcFpDataPA32_h 33: 00002b1a 205 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 34: 00007fc8 0 FUNC GLOBAL DEFAULT 12 _fini 35: 00002ff1 109 FUNC GLOBAL DEFAULT 11 _Z2_5Pci 36: 0000802c 4 OBJECT GLOBAL DEFAULT 13 _9 37: 0000171b 10 FUNC GLOBAL DEFAULT 11 _Z2_qv 38: 000019c2 34 FUNC GLOBAL DEFAULT 11 _ZN7cAES256D1Ev 39: 00002398 37 FUNC GLOBAL DEFAULT 11 _ZN11cCBC_AES2568KeySetup 40: 00002586 34 FUNC GLOBAL DEFAULT 11 _ZN7cSHA256C2Ev 41: 00002dc5 98 FUNC GLOBAL DEFAULT 11 _Z2_mPci 42: 00003260 159 FUNC GLOBAL DEFAULT 11 _Z16GetAuthenticatorjPKhP 43: 00003588 62 FUNC GLOBAL DEFAULT 11 _Z4Initv 44: 0000276c 837 FUNC WEAK DEFAULT 11 _ZN7cSHA25612ProcessBlock 45: 000026a2 201 FUNC GLOBAL DEFAULT 11 _ZN7cSHA2567ProcessEPKhj 46: 0000323c 36 FUNC GLOBAL DEFAULT 11 _Z5Closev 47: 00001ac0 850 FUNC GLOBAL DEFAULT 11 _ZN7cAES25612DecryptBlock 48: 000034dc 172 FUNC GLOBAL DEFAULT 11 _Z14GetIdentifiersPh 49: 000015d0 331 FUNC GLOBAL DEFAULT 11 _Z12Base64EncodePKhPcjj 50: 00002ecc 206 FUNC GLOBAL DEFAULT 11 _Z2_fPci 51: 000018ba 62 FUNC GLOBAL DEFAULT 11 _Z24BytesToWordsLittleEnd 52: 00008aa8 4 OBJECT GLOBAL DEFAULT 13 _i 53: 00001891 10 FUNC GLOBAL DEFAULT 11 _Z2_ev 54: 000024f4 13 FUNC GLOBAL DEFAULT 11 _Z5_rotrjj 55: 0000305e 200 FUNC GLOBAL DEFAULT 11 _Z2__Pci 56: 00001e12 838 FUNC GLOBAL DEFAULT 11 _ZN7cAES25612EncryptBlock 57: 00002e27 53 FUNC GLOBAL DEFAULT 11 _Z2_yPci 58: 000023f2 53 FUNC GLOBAL DEFAULT 11 _ZN12cHMAC_SHA2565ResetEv 59: 00001a3c 31 FUNC GLOBAL DEFAULT 11 _ZN7cAES2566FFmulXEj 60: 000023ca 40 FUNC GLOBAL DEFAULT 11 _ZN12cHMAC_SHA2567Process 61: 000032ff 477 FUNC GLOBAL DEFAULT 11 _Z6EnrollPKhPh 62: 0000b060 0 NOTYPE GLOBAL DEFAULT ABS __bss_start 63: 00001935 105 FUNC GLOBAL DEFAULT 11 _Z15HashFingerprintPKciiP 64: 00002502 97 FUNC GLOBAL DEFAULT 11 _ZN7cSHA2565ResetEv 65: 000019a0 34 FUNC GLOBAL DEFAULT 11 _ZN7cAES256D2Ev 66: 0000b5a4 0 NOTYPE GLOBAL DEFAULT ABS _end 67: 00001725 272 FUNC GLOBAL DEFAULT 11 _Z12Base64DecodePKcPhjj 68: 00007fe4 4 OBJECT GLOBAL DEFAULT 13 _s 69: 0000230e 137 FUNC GLOBAL DEFAULT 11 _ZN11cCBC_AES2567EncryptE 70: 00002ab4 10 FUNC GLOBAL DEFAULT 11 _Z2_lv 71: 00002d6c 7 FUNC GLOBAL DEFAULT 11 _Z23ReadCpuClockTickCount 72: 00008aac 256 OBJECT GLOBAL DEFAULT 13 _ZN7cSHA2561KE 73: 00002158 254 FUNC GLOBAL DEFAULT 11 _ZN7cAES2568KeySetupEPKh 74: 0000b060 0 NOTYPE GLOBAL DEFAULT ABS _edata 75: 000019e4 88 FUNC GLOBAL DEFAULT 11 _ZN7cAES2567SubWordEj 76: 00002564 34 FUNC GLOBAL DEFAULT 11 _ZN7cSHA256C1Ev 77: 000023c0 10 FUNC GLOBAL DEFAULT 11 _Z2_kv 78: 00002f9a 87 FUNC GLOBAL DEFAULT 11 _Z2_oPci 79: 0000189b 31 FUNC GLOBAL DEFAULT 11 _Z23WordToBytesLittleEndi 80: 000018f8 61 FUNC GLOBAL DEFAULT 11 _Z24WordsToBytesLittleEnd 81: 000025a8 249 FUNC GLOBAL DEFAULT 11 _ZN7cSHA2568FinalizeEPhj 82: 00002be7 178 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 83: 0000139c 0 FUNC GLOBAL DEFAULT 9 _init 84: 00002d0d 49 FUNC GLOBAL DEFAULT 11 Java_dk_danid_plugins_Wud 85: 00002488 107 FUNC GLOBAL DEFAULT 11 _ZN12cHMAC_SHA2568Finaliz 86: 00002428 96 FUNC GLOBAL DEFAULT 11 _ZN12cHMAC_SHA2568KeySetu 87: 0000183c 47 FUNC GLOBAL DEFAULT 11 _Z9IntToStr2iPc

Tilbage er så spørgsmålet, hvad har DanID brug for via native kode, som de ikke kan få igennem Java's sandkasse?! Det begynder jo helt klart at se ud som om at hovedårsagen til overhovedet at bruge en applet, er at downloade og eksekvere native kode via browseren!

91
19. november 2011 kl. 19:10

Tilbage er så spørgsmålet, hvad har DanID brug for via native kode, som de ikke kan få igennem Java's sandkasse?! Det begynder jo helt klart at se ud som om at hovedårsagen til overhovedet at bruge en applet, er at downloade og eksekvere native kode via browseren!

Prøv at kigge på mit indlæg i en anden tråd: http://www.version2.dk/artikel/danid-ja-vi-staar-bag-de-fire-skjulte-programfiler-i-nemid-32745#comment-184853

Der er en en sætning der indeholder ordene "PET", "bagdør", og "krav om".

Synes du at det lyder som en mulighed, Casper Bang? Andre må naturligvis også meget gerne kommentere den mistanke.

Hvis du svarer, så begrund dit svar.

87
18. november 2011 kl. 13:52

Hvis der lige er nogen der kan pathce programmerne til altid at returnere "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" og så vi alle sammen forsøger at bruge NemID samtidigt. Så kan det være at vi kan trigge en interessant beskyttelsesmekanisme.

88
18. november 2011 kl. 15:47

Hvis der lige er nogen der kan pathce programmerne til altid at returnere "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" og så vi alle sammen forsøger at bruge NemID samtidigt. Så kan det være at vi kan trigge en interessant beskyttelsesmekanisme.

Jeg har lavet en 32-bit windows-udgave som burde gøre det. (Bortset fra at jeg ikke bruger det tal).

Den skulle gerne give de samme hashes hver gang - og det skulle gerne være nogen som systemet ikke normalt bruger.

Jeg vil dog ikke garantere at jeg ikke har lavet en dum fejl - eller at deres applet ikke laver en checksum af den først.

http://pwnies.dk/pause.new.gif

Meld gerne tilbage hvad I finder ud af (jeg kører ikke selv windows). ;)

89
19. november 2011 kl. 01:36

Jeg vil dog ikke garantere at jeg ikke har lavet en dum fejl - eller at deres applet ikke laver en checksum af den først.

Jeg vil håbe at DanID's Java applet laver checksum af koden i ~/.oces2 inden den bliver udført. Hvis en angriber kan komme til at overskrive nogle af filerne i ~/.oces2, vil du eksekvere denne kode (malware) når du bruger NemID. Executables i ~/.oces2 modarbejder også princippet om at den type filer skal være ejet at root (eller UAC på Windows).

84
Indsendt af David Askirk Fotel (ikke efterprøvet) den fre, 11/18/2011 - 13:33

De bruger nok de informationer til enten:

  1. Se hvilke computere og deres setup, der bruger NemID
  2. Konstatere om brugerens computer kan bruges til NemID
  3. En form for log, for at se hvis der kommer angreb, hvilken maskine de så kommer fra
86
18. november 2011 kl. 13:50

De bruger nok de informationer til enten:</p>
<ol><li>Se hvilke computere og deres setup, der bruger NemID</li>
<li>Konstatere om brugerens computer kan bruges til NemID</li>
<li>En form for log, for at se hvis der kommer angreb, hvilken maskine de så kommer fra

Vær opmærksom på at:

  • De får kun hashede værdier
  • De tager også eksempelvis brugernavn, hostname og et id fra din harddisk.

Det vil sige, at de tager information der ikke har indflydelse på om nemid vil virke - og som derudover er hashed. De kan heller ikke være sikker på at værdierne er de samme, da jeg eksempelvis godt kan skifte min computers netkort eller hostname.

Det eneste jeg kan se at det kan bruges til er at identificere at der er blevet logget på fra en bestemt computer, så de kan bevise at en IT-kriminels computer er blevet brugt til at logge ind på Fru Jensens netbank. Og da de IT-kriminelle formentlig selv kan regne de her ting ud, kører de nok bare på en virtuel maskine med tilfældigt genereret hostname, brugernavn, osv.

85
18. november 2011 kl. 13:44

Jeg går ud fra at NemID virker fra f.eks. FreeBSD (ellers havde vi jo nok hørt om det for længst), så gad vide hvad den gør i de situationer?

Hvis det er en del af NemID's sikkerhed, vil det være lidt upraktisk hvis man kan omgå det ved bare skifte til FreeBSD eller Solaris...

80
18. november 2011 kl. 12:21

Her er så et import dump af large.gif på Windows:

KERNEL32.dll
         180013028 Import Address Table
         1800177E8 Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

                     1F6 GetModuleHandleA
                     220 GetProcAddress
                     223 GetProcessHeap
                     245 GetSystemDirectoryA
                     276 GetVersionExW
                     26E GetUserDefaultLangID
                     176 GetComputerNameA
                     4BD lstrlenA
                     142 FlushFileBuffers
                      43 CloseHandle
                      79 CreateFileA
                     1E8 GetLocaleInfoA
                     1AE GetCurrentThreadId
                     140 FlsSetValue
                     170 GetCommandLineA
                     431 TerminateProcess
                     1AA GetCurrentProcess
                     442 UnhandledExceptionFilter
                     419 SetUnhandledExceptionFilter
                     2CB IsDebuggerPresent
                     397 RtlVirtualUnwind
                     390 RtlLookupFunctionEntry
                     389 RtlCaptureContext
                     1E6 GetLastError
                     2A1 HeapFree
                     29D HeapAlloc
                     354 RaiseException
                     392 RtlPcToFileHeader
                      D6 EncodePointer
                      B8 DecodePointer
                     13F FlsGetValue
                     13E FlsFree
                     3F0 SetLastError
                     13D FlsAlloc
                     425 Sleep
                     1F9 GetModuleHandleW
                     105 ExitProcess
                     3EC SetHandleCount
                     23B GetStdHandle
                     1D8 GetFileType
                     239 GetStartupInfoA
                      BF DeleteCriticalSection
                     1F4 GetModuleFileNameA
                     14B FreeEnvironmentStringsA
                     1C0 GetEnvironmentStrings
                     14C FreeEnvironmentStringsW
                     47E WideCharToMultiByte
                     1C2 GetEnvironmentStringsW
                     2A5 HeapSetInformation
                     29F HeapCreate
                     2A0 HeapDestroy
                     396 RtlUnwindEx
                     34E QueryPerformanceCounter
                     266 GetTickCount
                     1AB GetCurrentProcessId
                     24F GetSystemTimeAsFileTime
                     3E4 SetFilePointer
                     491 WriteFile
                     184 GetConsoleCP
                     196 GetConsoleMode
                      DA EnterCriticalSection
                     2E9 LeaveCriticalSection
                     15C GetCPInfo
                     153 GetACP
                     213 GetOEMCP
                     2D5 IsValidCodePage
                     2A6 HeapSize
                     2A4 HeapReAlloc
                     2EB LoadLibraryA
                     2B5 InitializeCriticalSectionAndSpinCount
                     400 SetStdHandle
                     486 WriteConsoleA
                     19A GetConsoleOutputCP
                     490 WriteConsoleW
                     314 MultiByteToWideChar
                     2DB LCMapStringA
                     2DD LCMapStringW
                     23D GetStringTypeA
                     240 GetStringTypeW

USER32.dll
         1800132E0 Import Address Table
         180017AA0 Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

                     171 GetSystemMetrics

ADVAPI32.dll
         180013000 Import Address Table
         1800177C0 Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

                     15E GetUserNameA
                     25A RegOpenKeyExA
                     267 RegQueryValueExA
                     22A RegCloseKey

ole32.dll
         1800132F0 Import Address Table
         180017AB0 Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

                      14 CoCreateInstance
                      6F CoUninitialize
                      42 CoInitializeEx
                      66 CoSetProxyBlanket

OLEAUT32.dll
         1800132A8 Import Address Table
         180017A68 Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

                         Ordinal     6
                         Ordinal    12
                         Ordinal     8
                         Ordinal    10
                         Ordinal     9
                         Ordinal     2

...og der eksporteres som nævnt Java_dk_danid_plugins_Wuddelcakes_X for X i [a, f].

75
18. november 2011 kl. 10:49

Det mest fristende er vel at se hvad de native kald i Wuddlecakes gør, men det er nok krypteret på det niveau også:

final class dk.danid.plugins.Wuddelcakes { static native java.lang.String d(java.lang.String); static native java.lang.String c(java.lang.String); static native java.lang.String a(java.lang.String); static native java.lang.String f(java.lang.String); static native java.lang.String e(java.lang.String); dk.danid.plugins.Wuddelcakes(); }

76
18. november 2011 kl. 10:57

Det mest fristende er vel at se hvad de native kald i Wuddlecakes gør, men det er nok krypteret på det niveau også:

Det er de ikke. Det er det, du kan se ved at disassemble de der "gif" filer :-)

De laver et fingerprint af maskinen. Der hentes en masse system informationer, hostnavn, disk parametre, MAC adresser på netkortene. Den slags...det ser ud til at de så bliver hashet og så ved jeg ikke, hvad der sker derudover. Måske det bare er en slags identifikation af hardwaren.

78
18. november 2011 kl. 11:40

I Mac OS X udgaver er der ihvertfald både en cAES256, SHA256 og en HMAC_SHA256, så det er nok rigtigt (lærte lige otool og otx dér)

Det tyder på at appletten derved indsamler data, der potentielt ville kunne knytte brugen af NemID til en bestemt maskine - det kunne jo gode ekstra indicier hvis eller hvis en tvist opstår om hvem, der har underskrevet hvad hvornår.

Til dem, der ikke kender begrebet: Dette er præcis problemet ved security by obscurity:

Man forsøger at skjule noget som ikke er sikkert. Den manglende sikkerhed er jo at nøglen ikke er i brugerens lomme. Tiltag som det skjulte DLL/so/dylib, som bryder ud af Java-sandkassen gør det muligt at gå efter alle amatørerne med indicier.

En rigtig angriber vil selvfølgelig kombinere anvendelsen af et TOR netværk med en passende virtuel afvikling af appletten, hvis han ikke blot bruger et kompromitteret JVM. Det ville være dumt at antage at en alvorlig angriber vidste mindre om sikkerhed og disassemblering end et par emsige Version2-læsere.

Den skjulte DLL er selvfølgelig den eneste reelle grund til overhovedet at have en applet, som jo ville være er unødvendig i det rene NemID tilfælde (men nødvendig med den gamle signatur).

68
18. november 2011 kl. 02:07

Kigger man på dem, finder man ud af, det er PE filer. Umiddelbart ligner de bare to udgaver af samme fil: en til x86 og en til x86-64. De importerer samme filer og eksporterer samme. De eksporterer: _Java_dk_danid_plugins_Wuddelcakes_a ... helt til... _Java_dk_danid_plugins_Wuddelcakes_f Hvilket passer meget fint med, at strengene brugt i Wuddelcakes-klassen fås gennem native metoder.

Noget af det interessante er dog, hvad de begge importerer: advapi32.dll kernel32.dll ole32.dll oleaut32.dll user32.dll

Så der er helt sikkert mulighed for at læse fra og skrive til harddisk og registreringsdatabase. I advapi32.dll importeres funktioner til at læse brugernavn og keys fra registreringsdatabasen. Mit bud på strengene i Wuddelcakes vil være strenge med ens brugernavn samt andre data.

71
18. november 2011 kl. 09:33

Noget af det interessante er dog, hvad de begge importerer:

Du skal ikke lægge alt for meget i et hurtigt kig på import tabellen - jeg har ikke selv kigget på filerne, men fra de EDIT screenshots i starten af artiklen ser det ud til at DLL'erne er compilet med Visual C++. Dens CRT har en række standard-imports, der ikke nødvendigvis bliver brugt. Der skal lidt disassembly til før man kan drage konklusioner :)

62
17. november 2011 kl. 23:02

Nu har Danid jo udtalt at de har flere muligheder for at øge sikkerheden ved Nemid. Den kode der tales om her kan vel være en del af en sådan løsning?

63
17. november 2011 kl. 23:11

Jeg håber sandelig du glemte et tag.

60
17. november 2011 kl. 22:49

Hvis man nu sammenlignede med det "virkelige liv". Lad os sige du havde hyret til at lave arbejde i din have. Og du havde selvfølgelig givet dem lov til at benytte dit badeværelse til toilet besøg, og dit køkken til at lave the/kaffe og dit køleskab til deres frokost sodavand/øl. Hvad nu hvis du så overraskede dem, i at stå og affotografere dit pas og dine personlige papirer, skødet på huset etc. Fordi de skulle jo vide om du nu også var den du udgav dig for.

Det her er for at sige det lige ud et tillids brud, og et groft misbrug af privilegier, som man har presset ned over hovedet på brugerne. Igen hvis det her ikke havde været 'IT' så ville de fleste folk jo have politi anmeldt sådan et firma.

// Jesper

59
17. november 2011 kl. 22:48

1321565819821DanID_Applet-boot-prod.jar som er bootstrap tingen er mere interessant, er det først som bliver loader og det som henter de andre ting ned, vil nok være den som man skulle interessert sig for.

58
17. november 2011 kl. 22:26

Efter som sikkerhed ved sløring i IT sikkerhedsmæssig forstand som vist her ikke har en pind med sikkerhed at gøre vil det være meget ubehageligt hvis det ikke er en fejl og nogen har brugt vores skattepenge på sådan noget pjat. Eller som jeg siger til vores kunder: Hvis jeg med hjælp af nogen kommerciel hjælp kan komme igennem system vi har bygget til jer når I ændre administrations koderne til nogen vi ikke kender så er det ikke sikkerhed der må holde på monetære værdier, personlige oplysninger m.m.

55
17. november 2011 kl. 21:12

Til alle reverse engineers derude. Nu kan vi NemId brugere da i det mindste trøste os med at i kigger DanID i kortene :)

54
17. november 2011 kl. 20:34

Jeg har ikke lige de nævne filer, men man burde kunne spore alle informationer appletten søger efter ved at strace processen i Linux/UNIX.

Så kan man nemt finde ud af hvad appletens maskinekode samler ind af information. I praksis skal man vel bare tilføje strace sporing til browserens pid, når man skal bruge NemID.

50
17. november 2011 kl. 20:12

Altså... Nu har jeg mange gange kommenteret SlemID.... men denne gang er jeg mere forundret over Version2's screenshot... Edit???? really??? Så vidt jeg kan se er den slet ikke med i win7 mere... Hvor pokker har i opstøvet den oldsag?

49
17. november 2011 kl. 20:03

Uden at have gravet dybt i det, så kunne det være native kode beregnet til at blive loadet via JNI

52
17. november 2011 kl. 20:25

Uden at have gravet dybt i det, så kunne det være native kode beregnet til at blive loadet via JNI

Det kan jeg bekræfte, at det er. Det aflæser nogle system informationer, som bliver krypteret, base64 enkodet og skrevet til en fil.

Windows udgaven er lidt paranoid og kigger ofte efter, om der er en debugger tilstede...hvorfor er jeg ikke nået til endnu, men jeg tror heller ikke, at jeg vil bruge meget mere tid på det.

Det er ikke en virus eller trojaner, men jeg har svært ved at se, hvorfor NemID skal bruge disse informationer.

57
17. november 2011 kl. 21:30

Er det filen ~/danid.log? Hvis ja, kan du se hvad der sker hvis den første skrivning fejler? Nogle har sat read-only på deres danid.log for at undgå at DanID skriver til disken.

Jeg kender ikke filnavnet...tror det kommer fra Java (Java_dk_danid_plugins_Wuddelcakes_d funktionen), og der har jeg ikke kigget endnu, men jeg ser to steder (Z2_fPci og Z2_oPci), hvor 'fopen' bliver kaldt, og hvis de fejler, så gør den bare intet, men den skriver ikke til filen. Den læser indholdet, en byte ad gangen, med '_IO_getc' (mon ikke det er 'fgetc'?).

Nogle af de statiske strenge er følgende:

  • '/proc/sys/kernel/hostname'
  • '/proc/ide/hda/geometry'
  • '/proc/ide0/hda/geometry'
  • '/proc/scsi/scsi'

Derudover er der noget, som ser ud som formatteringen af en MAC adresse:

  • '%02X:%02X:%02X:%02X:%02X:%02X'
  • 'eth0'
  • 'eth1'
  • 'wlan0'

Tror det var det mest interessante indtil videre :-)

70
18. november 2011 kl. 08:49

Nogle af de statiske strenge er følgende:</p>
<ul><li>'/proc/sys/kernel/hostname'</li>
<li>'/proc/ide/hda/geometry'</li>
<li>'/proc/ide0/hda/geometry'</li>
<li>'/proc/scsi/scsi'

/proc/scsi/scsi er bare en fil, og den er ret nem at læse direkte fra Java, og da NemID har adgang til hele disken, så er der ingen grund til at have en .so-fil (hvilket error.gif ligner) for at samle disse informationer. /proc/scsi/scsi indeholder bare oplysninger om disken, fabrikat etc.

De kald error.gif laver ligner mest noget med at få en ID på maskinen, og det bruges måske bare til at afgøre om der er sket ændringer på maskinen og om JAR filen skal hentes igen. I så fald en lidt underlig måde at afgøre det på.

Til dem der ikke kan pakke jar-filen ud, har jeg lagt dem her:http://w0.dk/~chlor/nemid/

61
17. november 2011 kl. 22:58

Tror det var det mest interessante indtil videre :-)

Ud over at det ser ud til at være tusse gammel kode (formentlig Ubuntu 9.04):
  1. 0000A060 00 47 43 43 3A 20 28 55 62 75 6E 74 75 20 34 2E .GCC: (Ubuntu 4.
  2. 0000A070 33 2E 33 2D 35 75 62 75 6E 74 75 34 29 20 34 2E 3.3-5ubuntu4) 4.
  3. 0000A080 33 2E 33 00 00 47 43 43 3A 20 28 55 62 75 6E 74 3.3..GCC: (Ubunt
  4. 0000A090 75 20 34 2E 33 2E 33 2D 35 75 62 75 6E 74 75 34 u 4.3.3-5ubuntu4
  5. 0000A0A0 29 20 34 2E 33 2E 33 00 00 47 43 43 3A 20 28 55 ) 4.3.3..GCC: (U
  6. 0000A0B0 62 75 6E 74 75 20 34 2E 33 2E 33 2D 35 75 62 75 buntu 4.3.3-5ubu
  7. 0000A0C0 6E 74 75 34 29 20 34 2E 33 2E 33 00 00 47 43 43 ntu4) 4.3.3..GCC
  8. 0000A0D0 3A 20 28 55 62 75 6E 74 75 20 34 2E 33 2E 33 2D : (Ubuntu 4.3.3-
  9. 0000A0E0 35 75 62 75 6E 74 75 34 29 20 34 2E 33 2E 33 00 5ubuntu4) 4.3.3.
  10. 0000A0F0 00 47 43 43 3A 20 28 55 62 75 6E 74 75 20 34 2E .GCC: (Ubuntu 4.
  11. 0000A100 33 2E 33 2D 35 75 62 75 6E 74 75 34 29 20 34 2E 3.3-5ubuntu4) 4.
  12. 0000A110 33 2E 33 00 00 47 43 43 3A 20 28 55 62 75 6E 74 3.3..GCC: (Ubunt
  13. 0000A120 75 20 34 2E 33 2E 33 2D 35 75 62 75 6E 74 75 34 u 4.3.3-5ubuntu4
  14. 0000A130 29 20 34 2E 33 2E 33 00 00 47 43 43 3A 20 28 55 ) 4.3.3..GCC: (U
  15. 0000A140 62 75 6E 74 75 20 34 2E 33 2E 33 2D 35 75 62 75 buntu 4.3.3-5ubu
  16. 0000A150 6E 74 75 34 29 20 34 2E 33 2E 33 00 00 47 43 43 ntu4) 4.3.3..GCC
  17. 0000A160 3A 20 28 55 62 75 6E 74 75 20 34 2E 33 2E 33 2D : (Ubuntu 4.3.3-
  18. 0000A170 35 75 62 75 6E 74 75 34 29 20 34 2E 33 2E 33 00 5ubuntu4) 4.3.3.
  19. 0000A180 00 47 43 43 3A 20 28 55 62 75 6E 74 75 20 34 2E .GCC: (Ubuntu 4.
  20. 0000A190 33 2E 33 2D 35 75 62 75 6E 74 75 34 29 20 34 2E 3.3-5ubuntu4) 4.
  21. 0000A1A0 33 2E 33 00 00 47 43 43 3A 20 28 55 62 75 6E 74 3.3..GCC: (Ubunt
  22. 0000A1B0 75 20 34 2E 33 2E 33 2D 35 75 62 75 6E 74 75 34 u 4.3.3-5ubuntu4
  23. 0000A1C0 29 20 34 2E 33 2E 33 00 00 47 43 43 3A 20 28 55 ) 4.3.3..GCC: (U
  24. 0000A1D0 62 75 6E 74 75 20 34 2E 33 2E 33 2D 35 75 62 75 buntu 4.3.3-5ubu
  25. 0000A1E0 6E 74 75 34 29 20 34 2E 33 2E 33 00 00 47 43 43 ntu4) 4.3.3..GCC
  26. 0000A1F0 3A 20 28 55 62 75 6E 74 75 20 34 2E 33 2E 33 2D : (Ubuntu 4.3.3-
  27. 0000A200 35 75 62 75 6E 74 75 34 29 20 34 2E 33 2E 33 00 5ubuntu4) 4.3.3.
  28. 0000A210 00 47 43 43 3A 20 28 55 62 75 6E 74 75 20 34 2E .GCC: (Ubuntu 4.
  29. 0000A220 33 2E 33 2D 35 75 62 75 6E 74 75 34 29 20 34 2E 3.3-5ubuntu4) 4.
  30. 0000A230 33 2E 33 00 00 47 43 43 3A 20 28 55 62 75 6E 74 3.3..GCC: (Ubunt
  31. 0000A240 75 20 34 2E 33 2E 33 2D 35 75 62 75 6E 74 75 34 u 4.3.3-5ubuntu4
  32. 0000A250 29 20 34 2E 33 2E 33 00 00 47 43 43 3A 20 28 55 ) 4.3.3..GCC: (U
  33. 0000A260 62 75 6E 74 75 20 34 2E 33 2E 33 2D 35 75 62 75 buntu 4.3.3-5ubu
  34. 0000A270 6E 74 75 34 29 20 34 2E 33 2E 33 00 00 00 00 00 ntu4) 4.3.3.....
  35. 0000A280 24 00 00 00 02 00 00 00 00 00 04 00 00 00 00 00 $...............
  36. 0000A290 9C 13 00 00 22 00 00 00 C8 7F 00 00 13 00 00 00 ...."...........
  37. 0000A2A0 00 00 00 00 00 00 00 00 24 00 00 00 02 00 78 00 ........$.....x.
  38. 0000A2B0 00 00 04 00 00 00 00 00 C8 13 00 00 04 00 00 00 ................
  39. 0000A2C0 E0 7F 00 00 04 00 00 00 00 00 00 00 00 00 00 00 ................
  40. 0000A2D0 74 00 00 00 02 00 00 00 00 00 04 01 00 00 00 00 t...............
  41. 0000A2E0 00 00 00 00 2F 62 75 69 6C 64 2F 62 75 69 6C 64 ..../build/build
  42. 0000A2F0 64 2F 67 6C 69 62 63 2D 32 2E 39 2F 62 75 69 6C d/glibc-2.9/buil
  43. 0000A300 64 2D 74 72 65 65 2F 69 33 38 36 2D 6C 69 62 63 d-tree/i386-libc
  44. 0000A310 2F 63 73 75 2F 63 72 74 69 2E 53 00 2F 62 75 69 /csu/crti.S./bui
  45. 0000A320 6C 64 2F 62 75 69 6C 64 64 2F 67 6C 69 62 63 2D ld/buildd/glibc-
  46. 0000A330 32 2E 39 2F 63 73 75 00 47 4E 55 20 41 53 20 32 2.9/csu.GNU AS 2
  47. 0000A340 2E 31 39 2E 31 00 01 80 4C 00 00 00 02 00 12 00 .19.1...L.......

47
17. november 2011 kl. 19:15

Hmm kan se et par af jer kigger i filen. Det er hverken obfuskeret eller krypteret, men bare 'manglet'. Jvnf.http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B

Et hurtigt kig ud fra navnene, unmangled, viser at det er diverse krypterings og hashing algoritmer implementeret i c++ ,sha256, AES og noget der læser maskin information (/usr/sbin/system_profiler på mac). Derudover sikkert noget kode så det kan kaldes fra java. Ie, '*wuddelcake[a-f]'....

48
17. november 2011 kl. 19:45

Det er ikke C++ koden, som er obfusceret...det er Java koden. Havde det bare været compilet og ikke obfusceret, så kunne 'jad' (http://en.wikipedia.org/wiki/JAD_%28JAva_Decompiler%29) decompile det til noget der ligner den originale kode...det kan man ikke med det her. Navnen er mærkelige og strenge er endnu mærkeligere.

C++ koden er til gengæld ret nemt at læse med en disassembler. På Linux bliver der tjekket en masse system informationer med 'uname', 'getuid' og 'ioctl'...resultatet ser ud til at blive krypteret, base64 enkodet og skrevet til en fil...men jeg er ikke kommet så langt endnu.

46
17. november 2011 kl. 19:05

Det er vel det samme som danske bank har/havde i deres applets? Finnerne blev opmærksom på det da en af deres banker blev købt af danske bank (og løb skrigende væk pga. dårligere netbank). På linux læste det /proc/cpuinfo og andet.

Jeg mindes nu ikke det var gemt i billedfiler.....

45
17. november 2011 kl. 17:38

Hvis obfuskeringen skulle være endnu mere obskur, kunne de have ladet filerne ligne rigtige GIF-filer, dvs. så der vises rigtige ikoner i Windows Stifinder (illustrationen i artiklen). Så vidt jeg husker kan man til enden af en gyldig GIF-fil tilføje en vilkårlig mængde binære data, uden at filen “går i stykker”, dvs. så den stadig kan vises (selvom den måske strengt taget ikke er gyldig i henhold til GIF-specifikationen).

Ditto kan man til en ZIP-fil tilføje en vilkårlig mængde skrammel først i filen. Dvs. du kan have én fil, der – afhængigt af filendelsen – opfører sig enten som en gyldig GIF-fil eller en gyldig ZIP-fil. Viel Spaß!

79
18. november 2011 kl. 12:20

Har nogen af jer kigget efter, om det der ligner billedfiler, kun indeholder billeddata ?

44
17. november 2011 kl. 17:31

Som ekstra bidrag til mysteriet:

Jeg kunne se på min maskine og mit email-trail at denne "funktionalitet" i OCES appletten ihvertfald var til stede i februar. Så det er ikke en "ny opfindelse".

38
17. november 2011 kl. 16:49

ELF'en (error.gif) har lidt flere detaljer i symbolerne. Det ligner mere kryptering og hash-algoritmer:

_ZN7cSHA25612ProcessBlockEPKh _ZN7cSHA2567ProcessEPKhj _ZN7cAES25612DecryptBlockEPKhPh _ZN7cAES25612EncryptBlockEPKhPh

Men hvad er Wuddelcakes?

Java_dk_danid_plugins_Wuddelcakes_e Java_dk_danid_plugins_Wuddelcakes_f Java_dk_danid_plugins_Wuddelcakes_a Java_dk_danid_plugins_Wuddelcakes_c Java_dk_danid_plugins_Wuddelcakes_b Java_dk_danid_plugins_Wuddelcakes_d

39
17. november 2011 kl. 16:51

De der Wuddelcakes er vist noget Java obfuscering. JAD kan heller ikke fuldt ud decompile Java koden.

42
17. november 2011 kl. 17:17

De der Wuddelcakes er vist noget Java obfuscering.
JAD kan heller ikke fuldt ud decompile Java koden.

Da jeg prøvede at dekompilere de normale Java-klasser, så kunne http://java.decompiler.free.fr/ kan næsten fuldstændigt dekompilere dem.

Alle strenge var krypterede. Men funktionen til at dekryptere var selvfølgelig til stede i kildekoden, så det var ret let at rekompilere den klasse, og derefter dekryptere strengene.

Funktions-kaldenavne i bytekode er tilsyneladende bestemt ud fra navnet,argumenttyper,returtype mens de i Java er bestemt ud fra navnet,argumenttyper. Så hvis du ser 2 funktioner i den dekompilerede kode med samme navn og argumenttyper, så kan du kigge i den disassemblede bytecode for at kende forskel på dem på kaldstederne.

35
17. november 2011 kl. 16:35

Kan se mange andre er begyndt at decompile deres java app også... Jeg synes alle der kan og vil / har tiden bør gå igang. Download den i aften om ikke andet så de ikke kan nå at ændre i den.

Personligt vil jeg til bunds i hvad den kan og gør på mine maskiner når den kører!

  • Ind til da kan i andre gøre det samme som jeg har gjort hele tiden, at køre alt med NemID login i VMWare under Linux Mint ell. Det er simpelt og lige til at sætte op :)
34
17. november 2011 kl. 16:33

Ok, jeg er vist en hat, men jeg kan sgi ikke finde de filer i min Java cache...heller ikke efter at have netbanket.

Kan én eller anden venlig sjæl lægge dem et eller andet sted, så jeg kan downloade dem ? Jeg kunne godt tænke mig at se nærmere på dem.

36
Indsendt af David Askirk Fotel (ikke efterprøvet) den tor, 11/17/2011 - 16:42

På unix systemer ligger i .oces2 i home folderen.

41
17. november 2011 kl. 17:01

I Windows, i hverfald på win7 ligger de i mappen C:\Bruger"Brugernavn".oces2\danid\plugins

37
17. november 2011 kl. 16:47

Her skal de dog lige pakkes ud: "jar xf DanID_Applet.jar". Så ligger filerne i ./img

29
17. november 2011 kl. 16:07

Fra Wikipedia ( http://en.wikipedia.org/wiki/Malware ):

Malware, short for malicious software, consists of programming (code, scripts, active content, and other software) designed to disrupt or deny operation, *gather information that leads to loss of privacy or exploitation", gain unauthorized access to system resources, and other abusive behavior.

Hvis DanID uden min viden indsamler oplysninger om min computer, så er det vel malware.

Specielt når de gør sig så meget umage med at skjule det for mig?

Så det er vel egentlig fint at antivirus programmet reagerer på det, er det ikke?

28
17. november 2011 kl. 16:04

Jeg har sendt spørgsmålet videre til Finansministeriet, der vist nok har fået ansvaret for den det af IT- og Telestyrelsen, som har med NemID at gøre:

Kære Bjarne Corydon,

Jeg håber, at dette brev når den rette modtager; så vidt jeg har forstået, har Finansministeriet taget det tidligere IT- og Telestyrelsens ansvar for sager vedrørende digital kommunikation med borgerne, og som sådan formodentlig også ansvaret for NemID.

I dag er det kommet frem, at DanID har camoufleret udførbar kode i filer, som de har gemt og navngivet som billedfiler. Koden er skjult i forskellige filer, hvor de enkelte filers kode er særligt udformet, sådan den kan udføres på Windows-, Mac-, og Linux-maskiner: Se http://www.version2.dk/artikel/login-applet-til-nemid-camouflerer-exe-fil-som-gif-32706.

Dette strider imod DanIDs hidtidige forsikringer om, at der ikke ville blive installeret software på brugernes computer. Det afslører også, hvad IT-Politisk Forening har advaret om kunne ske, nemlig at DanID kan installere software, som de ikke kan eller vil redegøre for.

Hvad vil Ministeren konkret gøre for at sikre mere åbenhed omkring DanIDs reelle adfærd i udbredelsen af NemID, samt sikringen af borgernes computere mod muligheden for, at der via DanIDs applikation kan installeres overvågning af brugerne, såfremt dette skulle blive pålagt DanID?

26
Indsendt af David Askirk Fotel (ikke efterprøvet) den tor, 11/17/2011 - 15:54

Efter at have leget lidt med strings, ligner det at de programmer der ligger der kan køres for at finde information om din computer, men gad vide hvad de så bruger de informationer til....

31
17. november 2011 kl. 16:19

Jup, Mac adresserne, disk geometri, disk type med mere.

// Jesper

25
17. november 2011 kl. 15:46

Gys - Dybt useriøst af en såkaldt sikker log in løsning, med mindre, som det er nævnt andetsteds at de er blevet hacket....

Ud af busken DanID - PR OMGÅENDE!

Dette her er en for alvorlig en sag til at I kan få lov til at lege Struds!!!

24
17. november 2011 kl. 15:37

En af mine bekendte formulerede det ret godt:

"Nu har NemID virkeligt et forklaringsproblem. Den kritik der blev rettet mod deres digitale signatur løsning, har nu vist sig at være berettiget. De kan ikke forklare, hvilke filer de har lagt på DIN computer, når du bruger DanID."

23
17. november 2011 kl. 15:34

Nogle der har set på log filen danid.log? Hvad jeg lige hurtig har set, er at den indeholder en masse binært data der er base64 encoded.

18
17. november 2011 kl. 14:44

Lav det nu open source så kan alle se at det er sikkert, at gemme noget i en gif gør at det er de snu der finder ud af det, og så skifter de lige giffen, og så skal vi hører på det bavl og det skal op i folketinget og en masse god tid spildes

13
17. november 2011 kl. 14:40

umidelbart ligener det samme ting som var i den gamle applet til den rigtig digital signatur, den samler info om ens hardware og bruger det som en hardware nøgle til at sikkere af filen ikke kan flyttes på en anden maskine, altså noget som der ikke er brug for. Har kiggede på en ældre version, 16/01/2011 der var samme filer også det er ikke noget som de lige har smidt i den.

12
17. november 2011 kl. 14:38

Ah ja. Det gamle gedemarked med filendelser. Jeg kan simpelthen ikke tro at DanID har døbt filerne sådan af sikkerhedsmæssige årsager. Det ville være for dumt.

17
17. november 2011 kl. 14:43

Det ville være for dumt.

Har du ikke dermed argumenteret for, at det netop kunne formodes at være årsagen? :)

14
17. november 2011 kl. 14:41

Tjah, jeg ved ikke hvad der er værst. Et dårlig forsøg på at skjule filerne ved at omdøbe dem og ligge dem i en img mappe med andre billedefiler. Eller have så lidt styr på filstrukturen at der rent faktisk findes ekskverbare filer i et mappe der indeholder billeder og er navngivet til at have billeder...

Kan ikke se et godt argument/god undskyldning for hverken det ene eller andet...

10
17. november 2011 kl. 14:29

Der er jo faktisk også den mulighed, at DanId er blevet hacket, og de nævnte filer (og modifikationer til andre) er lavet af hackerne uden DanIds viden. I givet fald tyder det på seriøse huller i DanIds sikkerhedsprocedurer.

16
17. november 2011 kl. 14:41

Det må man da ikke håbe:

ls -al ./DanID_Applet/img/* 236 Nov 15 2010 ./DanID_Applet/img/blackdot.png 55 Nov 15 2010 ./DanID_Applet/img/blank_16x16.gif 94 Nov 15 2010 ./DanID_Applet/img/checkbox_deselected.gif 104 Nov 15 2010 ./DanID_Applet/img/checkbox_selected.gif 456 Nov 15 2010 ./DanID_Applet/img/checkmark_16x16.png 743 Nov 15 2010 ./DanID_Applet/img/close.jpg 718 Nov 15 2010 ./DanID_Applet/img/combobutton.jpg 44325 Nov 15 2010 ./DanID_Applet/img/error.gif 956 Nov 15 2010 ./DanID_Applet/img/hash.gif 8666 Nov 15 2010 ./DanID_Applet/img/helpnogleandkortnummer.gif 3630 Nov 15 2010 ./DanID_Applet/img/helpnogle.gif 3892 Nov 15 2010 ./DanID_Applet/img/helpnoglekortnummer.gif 958 Nov 15 2010 ./DanID_Applet/img/key.gif 105984 Nov 15 2010 ./DanID_Applet/img/large.gif 180 Nov 15 2010 ./DanID_Applet/img/list_bullet.gif 4178 Nov 15 2010 ./DanID_Applet/img/loader.gif 93728 Nov 15 2010 ./DanID_Applet/img/logo2.gif 473 Nov 15 2010 ./DanID_Applet/img/nemid_logo.gif 1135 Nov 15 2010 ./DanID_Applet/img/noglebg.gif 92160 Nov 15 2010 ./DanID_Applet/img/pause.gif 3724 Nov 15 2010 ./DanID_Applet/img/print.gif 66 Nov 15 2010 ./DanID_Applet/img/small_checkmark.gif

file ./DanID_Applet/img/error.gif ./DanID_Applet/img/error.gif: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

file ./DanID_Applet/img/large.gif ./DanID_Applet/img/large.gif: PE32+ executable (DLL) (GUI) x86-64, for MS Windows

file ./DanID_Applet/img/logo2.gif ./DanID_Applet/img/logo2.gif: Mach-O fat file with 3 architectures

file ./DanID_Applet/img/pause.gif ./DanID_Applet/img/pause.gif: PE32 executable (DLL) (GUI) Intel 80386, for MS Windows

93
31. januar 2012 kl. 04:22

otx logo2.gif er lidt interessant... specielt i funtionen SystemProfiler henter den stort set alt der er at vide om min hardware, mac-adresse, serienummer (apple-computer) etc... den bruger /usr/sbin/system_profiler

27
17. november 2011 kl. 16:03

Ja, som Henrik viser her er der executables til Mac, Winx86 32 og 64 bit og 'Linux'. Hvorfor skal Danid have kode installeret på min PC, der skal execute i OS ?

.....

// jesper

32
17. november 2011 kl. 16:23

Ja, som Henrik viser her er der executables til Mac, Winx86 32 og 64 bit og 'Linux'.
Hvorfor skal Danid have kode installeret på min PC, der skal execute i OS ?

Er NemID appletten ikke java bytecode? Hvad skal jeg så med dll'er og so filer i forklædning? Java appletten skal vel også kunne køre på andre platforme end Windows, Mac og Linux x86.

Til mail signering på Linux med NemID skal man i forvejen installere en række nye programmer, så det kan ikke være derfor.

15
17. november 2011 kl. 14:41

Der er jo faktisk også den mulighed, at DanId er blevet hacket, og de nævnte filer (og modifikationer til andre) er lavet af hackerne uden DanIds viden.

Dette tydeliggør hvorfor det er problematisk, at DanID prøver at holde så mange detaljer om NemID hemmelige. Hvis denne mærkelige opførsel var dokumenteret, kunne man slappe en smule af hvis man ellers har grundlæggende tillid til DanIDs hensigter. Nu ved vi hverken hvad de bruger filerne til, eller om de i det hele taget er en del af designet.

8
17. november 2011 kl. 14:16

Man kalder altså ikke programkode for "large.gif" og den slags ved et uheld. Som det er blevet påpeget et par gange, så er det i absolut bedste fald "security by obscurity", og med DanIDs hidtidige demonstrationer af kompetencer skal man måske lade være med at forveksle inkompetence med bevidst destruktiv adfærd.

6
17. november 2011 kl. 13:57

En filendelse skal vælges. Måske står GIF for noget andet i DanIDs system? Jeg har svært ved at se hvorfor dette er mere "skjult" end hvis de havde kaldt filerne .foobar.

7
17. november 2011 kl. 14:03

Bortset fra filerne ligger sammen med alle de andre billedefiler (f.eks. blackdot.png, close.jpg, key.gif osv osv..) i en mappe der hedder img. Come on - lad være med at forsvare det - det er som mimimum security by obscurity - måske endda noget endnu værrere...

3
17. november 2011 kl. 13:48

For the record:

Den første der blev opmærksom på dette skalkeskjul var Christian Callesen,

Tip med hatten!

9
17. november 2011 kl. 14:26

:D

Jeg synes som sagt til PHK at det er underligt at man forsøger at obfuskere. Hvorfor ikke bare vise det som det er?

Mvh

Christian Callsen

43
17. november 2011 kl. 17:30

For mig at se er problemet, at når DanID spilder tid på denne ineffektive obfuskering, så er det et tegn på at de ikke ved hvordan man rent faktisk sikrer transaktionerne.

Det som DanID prøver at beskytte sig imod er, hvis computeren allerede er overtaget af en virus. Det kan man selvfølgelig ikke beskytte sig imod, så obfuskering er det bedste de kan gøre. Dette forsøg på at beskytte mod virus er så vidt jeg har forstået også grunden til at de overhovedet bruger en signeret java-applet, i stedet for for eksempel JavaScript.

(Jeg mener selvfølgelig, at DanID ikke skal køre programmer uden for en sandboks på min computer)

65
17. november 2011 kl. 23:19

Det som DanID prøver at beskytte sig imod er, hvis computeren allerede er overtaget af en virus.

Ved nærmere eftertanke - det er måske også for at prøve at forhindre, at nogen bygger et automatiseret MitM-angreb, i stil med det manuelle angreb som Version2 demonstrerede. Hvis det er svært at læse koden, så er det også svært at lave sin egen tilpassede version af appletten til det automatiserede angreb.

DanID kunne jo prøve at proppe kode ind i appletten som prøvede at detektere, at den samme angriber brugte NemID mange gange i træk, hvis angriberen brugte DanIDs applet umodificeret. Et automatiseret angreb med en custom applet vil jo være mere eller mindre immumt over DanID's forsvar.

66
17. november 2011 kl. 23:22
67
17. november 2011 kl. 23:37

</p>
<p>Den slags skal ikke i appletten, for det er client side security og ikke meget mere værd en security by obscurity.
Et sådant tjek skal på serveren for at være effektivt.

Jeg sagde ikke at det ville være meget værd. Jeg sagde at DanID måske havde tænkt sådan.

Nu kan man se af gif-filerne at de indsamler hardware-information. Hvis nu appletten sende den information til serveren ved hvert login, så kunne DanID på server-siden lave statistik, og vide at den samme computer blev brugt med mange forskellige brugerkonto. Hvis altså MitM-angriberen brugte den officielle applet (på højre computer i Version2's demo-video).

69
18. november 2011 kl. 02:25

Jeg har kigget på ELF-udgaven og du har i høj grad ret. Så vidt jeg kan se er eneste formål med den at skaffe system-data (på hashed form).

Den gør omtrent det her: http://pwnies.dk/nemid.py

P.s. jeg beklager at jeg kom til at anmelde dit indlæg.

72
18. november 2011 kl. 09:48

pause.idb gør så vidt jeg kan se præcis det samme som error.gif.

Dog snager den i en hel del flere ting - primært via WQL.

74
18. november 2011 kl. 10:22

Jeg mener naturligvis pause.gif.

77
18. november 2011 kl. 11:35

logo2.gif gør (overraskende nok) det samme.

Den får primært sine data fra /usr/sbin/system_profiler.

19
17. november 2011 kl. 14:46

Security by obscurity er et vigtigt værktøj i stort set alt der har med sikkerhed at gøre i dag. Eksempelvis AES benytter sig i særlig høj grad af det, ligesom stort set alle andre krypteringsalgoritmer. Der er intet galt i det princip, det fungerer, det skal bare være et bevidst funderet valg, og sikkerheden skal selvfølgelig ikke udelukkende være baseret på det, det er blot et komponent i den samlede helhed.

20
17. november 2011 kl. 14:50

@Morten Hansen Kan du give et eksempel på hvor fx AES bruger security by obscurity, eller poste et link til noget der dokumenterer dette?

11
17. november 2011 kl. 14:31

Har DanID ikke blot vist - gang på gang - at de ikke ønsker at vise/fortælle/offentliggøre noget som helst omkring hvorfor og hvordan de gør noget som helst?

De lever i et andet årti, hvor den slags var naturligt... befolkningen skal blot makke ret, og gøre som der bliver sagt. De ønsker ikke der bliver stillet spørgsmål til deres måde at løse tingene på - for der er kun en korrekt måde at gøre det, set fra deres side af sagen.

5
17. november 2011 kl. 13:53

Ja, mange tak til de læsere, der har gjort os opmærksom på emnet og har hjulpet med at kigge filerne efter i sømmene.

Filerne er sendt til McAfee og et andet sikkerhedsfirma, og vi håber at få en kommentar derfra, og naturligvis en kommentar fra DanID.

Mvh.

Jesper Stein Sandal

Version2.dk

2
17. november 2011 kl. 13:40

'nuff said.

4
17. november 2011 kl. 13:48

Kør med IC4 via et rejsekort oprettet med NemID.

Måske har det været planen fra starten.

Så vidt jeg kan se, kan man ikke identificere sig med NemID på rejsekortet.dk, dog, men en skønne dag...