Detaljerede oplysninger om din computers indmad opsamles rutinemæssigt af NemID-appletten, som flere end tre millioner danskere bruger til at logge på netbanken og offentlige hjemmesider som Skat.dk.
Det viser en gennemgang af den kildekode, som Version2 i sidste uge kunne afsløre bag fire tilforladeligt udseende billedfiler af GIF-typen, der ligger placeret lokalt på brugerens pc.
»Det er meget sandsynligt, at GIF-filernes eneste opgave er at generere en pc-checksum,« siger Mathias Svensson til Version2.
Han er datalogistuderende ved Københavns Universitet og har forelagt Version2 resultatet af sin gennemgang af filernes indhold. Samtidig er han formand for datalogistudiets hackerklub, Pwnies.
Hidtil ukendt omfang
Detaljerne omfatter blandt andet dine ramblokkes serienumre, din processors id-nummer og serienumrene på BIOS og motherboard.
Dem bruger DanID til at beregne en såkaldt pc-checksum - en værdi, der kan bruges til unikt at identificere netop din pc i tilfælde af efterforskning ved misbrug af for eksempel netbank.
Det er der intet hemmeligt i, for det fremgår af DanID's privatlivspolitik.
Omfanget af indsamlingerne har dog ikke været kendt uden for DanID's mure før nu.
Det viser sig, at der på 32-bit Windows og Mac-platformen indsamles henholdsvis 16 og 13 unikke informationer om brugernes hardware i computeren.
Bruger du Linux på din pc, slipper du billigere. Her indsamles blot seks informationer.
Konkret har Mathias Svensson taget fat i hver fil og arbejdet sig baglæns fra maskinkoden i filerne og omskrevet den til en mere letlæselig pseudokode i programmeringssproget Python; det, der også kaldes reverse engineering.
Dermed har han populært sagt omdannet symboler og volapyk til kildekode, som programmører kan læse og forstå.
Ud af maskinkodens dis dukker der adskillige programkald til systemet op, som altså afslører hvilke oplysninger om brugerens pc, DanID indsamler.
DanID understreger i sin privatlivspolitik, at der er tale om 'ikke personoplysninger'. Det fremgår også, at pc-checksummen indgår i mængden af oplysninger, der kan bruges ved efterforskning af misbrug. Er det overhovedet et problem, at DanID indsamler de her oplysninger?
»DanID's hovedargument for at indsamle dem er, at hardwareværdierne kan bruges til efterforskning, men det er ufatteligt nemt at omgå,« siger Mathias Svensson.
For eksempel kan erfarne it-kriminelle blot opsætte et virtualiseret miljø på computeren, hvor hackeren selv indstiller alle hardwareværdierne, forklarer Mathias Svensson.
Dermed kan misbrug af NemID sløres, for så vidt angår muligheden for at spore det tilbage til en bestemt pc.
Mathias Svensson medgiver, at pc-checksummen kan være effektiv nok i de tilfælde, hvor Fru Jensen på et falsk grundlag hævder ikke at have overført et pengebeløb fra sin netbank.
Så der kan godt være en god mening med at indsamle oplysningerne trods alt?
»Det kan selvfølgelig fungere som et indicium på, om for eksempel en netbankoverførsel er sket på det rigtige eller forkerte grundlag. Men det vil klart ikke virke i forhold til de professionelle it-kriminelle,« siger Mathias Svensson.
Det er ikke lykkedes at få DanID til at kommentere på antallet af systemkald og deres funktionalitet.
Version2 viser her Mathias Svenssons pseudokode til de systemkald, der udføres i GIF-filerne på de forskellige platforme.
Windows (32-bit):
(0, GetComputerName) (1, GetProductID) (2, get_cpuid_stuff) (3, WQL_func("Win32_NetworkAdapter", "DeviceID")) (4, WQL_func("Win32_BIOS", "SerialNumber")) (5, disc_stuff1) # Får antallet af bytes per sector ved hjælp af funktionen "GetDiskFreeSpaceExA" (6, WQL_func("Win32_Battery", "DeviceID")) (7, WQL_func("Win32_BaseBoard", "SerialNumber")) (8, WQL_func("Win32_Keyboard", "DeviceID")) (9, WQL_func("Win32_SoundDevice", "DeviceID")) (10, WQL_func("Win32_USBController", "DeviceID")) (11, WQL_func("Win32_ComputerSystem", "Model")) (12, get_username) (13, get_language) (14, get_screen_size) (15, WQL_func("Win32_NetworkAdapter", "ProductName"))
Mac OS X:
(0, sys_func("Software", "Computer Name")) (1, uname_stuff) (2, cpuid_stuff) (3, sys_func("Network", "MAC")) (4, sys_func("Hardware", "Boot ROM Version")) (6, sys_func("Power", "Serial Number")) (11, sys_func("Hardware", "Model Identifier")) (12, get_uid) (14, sys_func("Displays", "Resolution")) (15, sys_func("Bluetooth", "Address")) (16, sys_func("Hardware", "SMC Version")) (17, sys_func("Memory", "Serial Number")) (18, sys_func("Software", "Kernel Version"))
GNU/Linux:
(0,get_hostname_stuff), (1,get_uname_stuff), (2,get_cpuid_stuff), (5,get_harddrive_stuff), (12,get_uid_stuff), (16,get_mac_address_stuff)