Inlägg taggade ‘hacking’
Paranoida spekulationer kring Stuxnet
Det är sommar, det är semestertider. Vad sägs om lite desinformation, en och annan konspirationsteori och en hel drös rena spekulationer?
W32.Stuxnet har fascinerat mig ända sedan förra sommaren då detaljer om det avancerade datorviruset började sippra ut på nätet och i media. Jag har ingen lust att ge en ingående beskrivning eller utförlig introduktion, det finns det så många som redan gjort. Kim Zetter har skrivit en lång och läsvärd text som berättar historien om Stuxnet och hur analytiker på Symantec och andra företag tillsammans dekompilerade sig in i virusets gastkramande inre. Det är otroligt spännande läsning – nästan som en thriller.
Kort bara: Stuxnet är ett Windowsbaserat datorvirus som sprider sig med hjälp av ett flertal nolldagarssårbarheter. Det är konstruerat för att ta sig in i slutna nätverk utan internetaccess, bland annat via USB-stickor. Det maskerar sig själv med hjälp av ett rootkit som kommer med drivrutiner signerade med två olika stulna certifikat (från JMicron och Realtek som båda huserar i samma “science park” i Taiwan). Likt en rysk Matrjosjkadocka är virusets binära kod inkapslad i flera på varandra krypterade lager som dekrypteras i minnet efter behov. Så långt är det visserligen imponerande och synnerligen intrikat, men det var när kodanalytikerna började förstå vad viruset faktiskt gjorde med infekterade datorer — naturen av dess “payload” — som de förstod vidden av hur avancerat det faktiskt var.
Viruset letar efter datorer med Microsoft Windows, kopplade till en viss typ av industristyrningssystem från Siemens, så kallade “Programmable Logic Controllers” eller PLCs. Om det hittar ett sådant system (eller egentligen dess programvara Step 7) och systemet är konfigurerat på ett visst sätt så dekrypteras virusets inre kärna, “payload”:en aktiveras och går till attack. Stuxnet börjar injicera egna kommandon mellan programvaran och den externa PLC-hårdvaran, samtidigt som den rapporterar tillbaka just de kommandon som styrsystemet tror sig skicka. Allt ser normalt ut.
Den speciella PLC-konfiguration som viruset söker är av allt att döma anrikningsanläggningar för uran. De kommandon som injiceras är riktade till frekvenskonverterare som styr rotationshastigheten för de centrifuger som används vid anrikning. Genom att med ganska långa intervall omväxlande accelerera och retardera hastigheten för centrifuger kan Stuxnet åsamka dessa skada.
Media började tidigt spekulera. Målet för attacken ansågs vara anrikningsanläggningar i Iran. Det finns mycket som pekar på det, bland annat visade Symantec att spridningen av viruset var större i Iran än i något annat land, något som inte brukar vara fallet vid epidemiska utbrott av datorvirus. Dessutom fanns det tecken på att Natanz, en anrikningsanläggning i Iran, hade problem med ovanligt många trasiga centrifuger.
Stuxnet anses så sofistikerat att bland annat Kaspersky Lab gått ut med att det måste röra sig om en statssponsrad operation (“…this type of attack could only be conducted with nation-state support and backing”). Media har kategoriskt och ogenerat pekat ut Israel och USA, något som knappast känns långsökt. Det är dock viktigt att komma ihåg att det finns inga som helst bevis för detta, det rör sig enbart om spekulationer.
I den rapport som Symantec skrivit om Stuxnet finns två intressanta fynd som möjligen säger något om virusets skapare.
Det finns en så kallad “do not infect”-mekanism inbyggd i viruset. Om registryvärdet “NTVDM TRACE” med nyckeln “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MS-DOS Emulation” har värdet 19790509 så smittas inte den aktuella datorn. Det är ett sätt för virusmakarna att undvika att smitta sina egna datorer under utvecklingen (och senare). Symantec spekulerar i rapporten kring det numeriska värdet:
The value may be a random string and represent nothing, but also appears to match the format of date markers used in the threat. As a date, the value may be May 9, 1979. This date could be an arbitrary date, a birth date, or some other significant date. While on May 9, 1979 a variety of historical events occured, according to Wikipedia “Habib Elghanian was executed by a firing squad in Tehran sending shock waves through the closely knit Iranian Jewish community. He was the first Jew and one of the first civilians to be executed by the new Islamic government. This prompted the mass exodus of the once 100,000 member strong Jewish community of Iran which continues to this day.”
Det andra intressanta fyndet är en kvarlämnad sökväg till en så kallad symbolfil som återfanns i en av virusets drivrutiner. En symbolfil är en genererad fil som används vid avlusning under mjukvaruutveckling. Sökvägen i virusets binärkod är “b:\myrtus\src\objfre_w2k_x86\i386 \guava.pdb”. Symantec spekulerar igen:
Guavas are plants in the myrtle (myrtus) family genus. The string could have no significant meaning; however, a variety of interpretations have been discussed. Myrtus could be “MyRTUs”. RTU stands for remote terminal unit and are similar to a PLC and, in some environments, used as a synonym for PLCs. In addition, according to Wikipedia, “Esther was originally named Hadassah. Hadassah means ‘myrtle’ in Hebrew.” Esther learned of a plot to assassinate the king and “told the king of Haman’s plan to massacre all Jews in the Persian Empire…The Jews went on to kill only their would-be executioners.”
Dessa två fynd — de subtila referenserna till judisk historia och kultur — kan förstås tolkas som spår av israelisk inblandning. Som jag ser det finns det dock två problem med detta:
-
Med tanke på hur avancerat och välgjort Stuxnet är ter det sig närmast ofattbart slarvigt att lämna sådana spår efter sig, särskilt den kvarlämnade symbolsökvägen. Att så skickliga programmerare skulle göra en sådan tabbe är tveksamt.
-
De två spåren tycks nästan lite för lagom subtila och tvetydiga. Visst, 19790509 kan möjligen vara ett datum. Eller så är det bara en slumpmässig sträng av siffror. Visst, det kan röra sig om datumet för Habib Elghanians avrättning. Eller så är det en födelsedag för en av virusmakarna som “taggat” sitt verk. Guavaspåret känns aningen långsökt, men samtidigt känns symboliken mellan det saboterade iranska kärnvapenprogrammet och den judiska berättelsen om att “the Jews went on to kill only their would-be executioners” lite för passande för att vara en slump.
Kort och gott: de två spåren har den omisskänneliga auran av desinformation. Symantec är förstås medvetna om “false flag”-aspekten och poängterar i samband med båda spekulationerna:
Symantec cautions readers on drawing any attribution conclusions. Attackers would have the natural desire to implicate another party.
Går det då att dra några slutsatser utifrån detta? Nej, givetvis inte, men man kan spekulera vilket är precis vad jag föresatt mig att göra.
Den tråkigaste spekulationen är att det är Israel som ligger bakom Stuxnet, eventuellt har man då också planterat de två spåren med vilje. Anledningen till detta skulle kunna vara att göra sig själv till den troligaste kandidaten — den som alla vet gjorde det — utan att lämna några entydiga bevis efter sig. På så sätt kan man åtnjuta respekten för att ha genomfört en osedvanligt avancerad cyberattack och på samma gång undgå en internationell kontrovers.
Den mest konspirationsteoretiska spekulationen är att USA ensam ligger bakom. En anledning till detta skulle kunna vara att det sedan en tid tillbaka pågår en lobbykampanj i USA där militären försöker förvandla “cyberkriget” till det fjärde vapenslaget efter armén, flottan och flygvapnet. Detta har bland annat resulterat i United States Cyber Command. Som vanligt hägrar lukrativa kontrakt för det militärindustriella komplexet och som väntat är det också därifrån man hör de mest högljudda varningarna för cyberkriget (“The United States is fighting a cyber war today, and we are losing”).
Sunda säkerhetsexperter skakar förstås på huvudet åt detta vansinne.
Det är inte otänkbart att Stuxnet är en produkt av denna militärisering av internet. Se det som två flugor i en smäll, Irans kärnvapenprogram fick sig en rejäl törn och på samma gång fick man ett bra exempel på det farliga cyberhotet — precis vad man behövde för att övertyga politikerna. Och just det, med hjälp av två planterade spår skyllde man allt på Israel.
Men som sagt, det är bara spekulationer.
Men om vi nu ändå slösar bort värdefulla soltimmar på rena spekulationer, varför inte gå hela vägen? Jag backar bandet — …drivrutiner signerade med två olika stulna certifikat… — STOP. Digitalt signerade drivrutiner bygger på asymmetrisk kryptering — kryptering baserad på publika och privata nycklar. Man signerar sin drivrutin med den hemliga privata nyckeln och lämnar ut den publika nyckeln via ett certifikat. Certifikatet gör det möjligt att verifiera att drivrutinen är tillförlitlig. Grunden för denna tillit är den matematiska förhoppningen — något formellt bevis existerar ej — att det är svårt att återskapa den privata nyckeln utifrån den publika. Detta bygger i sin tur på förhoppningen att det är, och alltid kommer vara, mycket svårt att primtalsfaktorisera stora tal.
Om en underrättelsetjänsts stab av matematiker mot all förmodan knäcker detta problem uppstår ett intressant dilemma. Man har just tillintetgjort en betydande del av all världens kryptering, hur använder man denna kunskap utan att avslöja för andra att man har den? Tja, till exempel så knäcker man två olika drivrutinscertifikat som rent fysiskt finns förvarade bredvid varandra i samma stad, i samma område… Den enda rimliga förklaringen blir ett inbrott.
0x00000000
0x00000000
0xFFFFFFFF
0xFFFFFFFF
0x0D15EA5E
0xDEADBEEF
0xFACEDEAD
Källkodspoeterna
(Det här inlägget är det i särklass nördigaste jag någonsin skrivit. Ber om ursäkt för eventuella olägenheter.)
Elegant och välskriven källkod kan vara en fröjd att läsa och studera. Den kan vara vacker, lekfull och hisnande. Den kan vara mystisk och gåtfull. Men kan programmering ha litterära kvaliteter? Kan källkod vara poesi? Ibland tror jag det.
Låt oss nu vara fullständigt ärliga: en stor del av världens samlade källkod är bedrövlig. Den är slarvigt skriven, rörig och tillkrånglad. Den är illa strukturerad och full med inkonsekvent namngivning och halvt obegripliga snabbfixar. Kort och gott: den bär alla spår av bristande kärlek från sin författare. Många gånger har jag tvingats arbeta med usla programmerares kvarlämnade synder. Det är en mardröm. Jag är övertygad om att det har förkortat mitt liv med åtskilliga år. Jag fick åtminstone betalt.
Det finns de som tagit det här till sin spets, sensibla programmerare som tagit ”ful” programkod långt bortom de öppna kontorslandskapens kärlekslösa tillvaro och förvandlat den till konst.
En quine är inom programmeringskretsar ett program som genererar en kopia av sin egen källkod som enda output. Det är inte alldeles trivialt. I åratal har programmerare dessutom tävlat om vem som kan skriva kortast möjliga quine. En klassisk quine i programmeringsspråket C ser ut så här:
char*f="char*f=%c%s%c;main()
{printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}
Om man kompilerar det här programmet, alltså översätter det till, för processorn begriplig, maskinkod och sedan exekverar det kommer exakt samma rader som ovan att spottas ut på terminalen. Det är alltså ett självreproducerande program. Det finns även mer avancerade varianter som också är palindrom (!). Tyvärr har de lite för långa rader för att se bra ut i mitt WordPresstema.
International Obfuscated C Code Contest var en tävling som ordnades årligen mellan 1984 och 1996 och sedan ett antal gånger fram till att sista tävlingen gick av stapeln 2006. Det var en programmeringstävling för att kora den mest kreativt förvrängda och oläsliga (”obfuskierade”) C-koden. Wikipedia ger exempel på några underbart förvridna tävlingsvinnare: programmet som beräknar Pi genom att mäta arean av sin egen programkod eller flygsimulatorn vars kod har formen av ett flygplan (koden är så gott som oläslig även för en erfaren programmerare).
En smått på otrolig bedrift är Don Yangs bidrag från 2000 års tävling. Källkoden är ett ASCII-porträtt av mangafiguren Saitou Hajime (som bygger på en riktig historisk person). Programmet genererar en källkod som bilder ett ASCII-konstverk med hiraganatexten ”aku” (synda). Kompilerar man och kör detta program får man ytterligare en källkod som i ett ASCII-konstverk bildar ordet ”soku” (kvick) som i sin tur (!) genererar ett ASCII-konstverk med texten ”zan” (dräpa). Dessa tre ord – aku, soku och zan – utgör Saitou Hajimes motto… På Yangs hemsida läser jag att han idag arbetar på Google och bland annat är ”member of the C++ readability team” (det tyckte jag var ganska roligt).
Min personliga favorit är ett bidrag från 1990 års tävling. Koden är här utformad som en tämligen infekterad brevväxling mellan Charlie (som älskar henne) och Charlotte (som avskyr honom). Programmeraren/poeten Brian Westley utnyttjar C-språkets olika nyckelord och operatorer på ett alldeles makalöst vis för att forma kärlekskranka och svavelosande fraser omvartannat (min favorit av det senare slaget är helt klart raden ”do {auto*eroticism”). Så, vad gör då detta program? Jo, det rör sig om en kongenial implementering av den gamla ”älskar… älskar inte”-leken (ni vet, den med kronbladen). Ett fantastiskt verk!
1954 gav Öyvind Fahlström ut sitt manifest för den konkreta poesin: Hätila ragulpr på fåtskliaben. I den korta skriften lägger han ut sina tankar om en poesi ”med utgångspunkt från språket som konkret materia”. Han ger sina råd för den nya poesin, till exempel att studera främmande språk, utvidga logiken, utsätta språket för en mekanisk behandling (”genom nya läsriktningar eller genom att ordna ord och meningar efter seriesystem”) och inte bara blanda om ordföljder utan ”knåda med hela den invanda satsmekaniken”. Jag inbillar mig att Fahlström hade älskat programmeringsspråken och den potential för konkret poesi som finns där.
I manifestet ger Fahlström dessutom en lysande beskrivning av den syssla inom programmering som kallas ”kodrefaktorisering” (code refactoring). ”Krama språkmaterien”, manar han och skriver att det ”hela tiden [är] en fråga om att omforma materialet och inte själv omformas av det”. Poeter och programmerare har mycket att lära av varandra.
Ett underverk i 4k
Påtvingade begränsningar kan verkligen göra underverk – och det här (samma länk som det inbäddade videoklippet överst som inte syns i alla RSS-läsare) är ett underverk! Vad det handlar om är ett så kallat 4k-demo från demopartyt Chaos Construction 2010 i Ryssland. 4k-demos, eller 4k-intros, är en av många tävlingssektioner på demoscenens olika tävlingar världen över där hackers tävlar om vem som kan programmera de bästa och mest imponerande audiovisuella presentationerna. 4k-sektionen innebär att den exekverbara filen som rymmer det kompletta demot – programkod, grafik och musik – inte får överstiga fyra kilobyte (4096 bytes). Det är alltså en informationsmängd motsvarande en kortare novell och mindre än vad som ryms på en sida i en dagstidning. I datorsammanhang är det nästan ingenting.
Jag trodde inte mina ögon (eller öron) när jag såg Cdak – ett samarbete mellan demogrupperna Quite och Orange – som vann sin tävlingssektion. Det är helt makalöst! Hur är det möjligt att få in detta på fyra, ynka kilobyte? Det är svårt att beskriva hur pass imponerande det är utan att bli väldigt teknisk och jag kan överhuvudtaget inte komma på någon åskådliggörande metafor. Det här är lite problemet med demoscenen. Det är en digital kulturyttring i gränslandet mellan teknik, mjukvara och konst som uppstod på allvar med Commodore 64-datorn på 80-talet. Programmerare och hackers utforskade varenda skrymsle i processorn, lärde den sig utan och innan och skrev små audiovisuella verk som pressade den primitiva datorn till bristningsgränsen. Kulturen är väldigt teknikorienterad (och nördig) och når sällan bortom de redan invigda. Det är synd, för det är en fascinerande värld.
På 80- och 90-talet innehöll 4k-demon sällan speciellt avancerad grafik. Det kunde handla om textskrollar, enklare snurrande kuber, lite färgeffekter och ganska primitiv chipmusik. På den tiden hade man visserligen inte så avancerad grafikhårdvara som idag, utan fick programmera allt själv. Att rita en fylld polygon på skärmen eller rotera 3D-modeller var inte alldeles triviala uppgifter som tog en hel del programkod i anspråk. Idag sköter grafikhårdvaran sådant, och den gör det fruktansvärt snabbt. Detta förminskar dock inte Quite & Oranges prestation nämnvärt, demot är magnifikt.
Se på videon – jag rekommenderar starkt att se den i större format än det inbäddade klippet – och njut av den förvridna, fraktala geometrin, färgerna, texturerna, musiken med kaskader av ljudsynteser, oljud och drönande toner som bara den spränger alla gränser för vad som borde vara möjligt att göra på fyra kilobyte. Musiken är komponerad (frågan är om det är rätt ord i det här sammanhanget) av Orange-medlemen Dune som även gett ut ett flertal skivor på klassiska Warp Records under namnet Brothomstates.
Vill man går det att ladda ned demot i sin binära form (samma webbsida som ovan) och köra det direkt från exe-filen som rymmer det. Filen är dock inte körbar på alla datorer och kräver en hel del av datorkraft och grafikkort för att snurra på jämnt och snyggt. Jag rekommenderar att man ser den färdigrenderade videon istället. Var faktiskt tvungen att köra exe-filen och se med egna ögon att den faktiskt innehåller hela demot med både musik och grafik. Jag kan intyga att så är fallet.
Som en trampad mask – ett samtal med litteraturen
I min iver att inte slänga bort min tid och på samma gång inte lösa några problem har jag utfört en serie intressanta experiment. Tyvärr måste jag konstatera att resultatet av dessa var en aning nedslående, men jag känner att det är värt att rapportera om ändå.
Det talas så ofta om litteraturen att jag ibland undrar om vi inte pratar om den mer än vi faktiskt läser den. Något som säkerligen sker för sällan är samtal med litteraturen och det är just vad de senaste dagarnas experiment handlat om. Med hjälp av konversationssimulatorn MegaHAL har jag samtalat med tre klassiska svenska romaner: Röda rummet av Strindberg, Kallocain av Karin Boye och Hjalmar Söderbergs Doktor Glas.
För att lära en roman att tala matar man in hela textmassan i MegaHAL, ett tämligen användarovänligt konsolprogram utan grafiskt användargränssnitt. Mac- och Iphoneanvändare drabbas förmodligen av svår chock vid blotta anblicken av något så gräsligt och primitivt. Rent praktiskt så behöver man ha tillgång till romanen i textformat – jag laddade ned ovanstående romaner från Project Runeberg. Därefter måste man omvandla texten till en träningsfil som innehåller hela romanen med en mening per rad. Träningsfilen används, som namnet antyder, för att träna upp MegaHAL i romanens språkbruk och stilistik.
Nu lär sig ju programmet förstås inte ordens mening och betydelse, utan det handlar om en inlärning av matematiska och statistiska samband mellan ord och fraser. Upplärning sker dessutom kontinuerligt under samtalens gång genom att programmet analyserar inmatningen från användaren. MegaHAL implementerar en ganska primitiv form av ”artificiell intelligens” (AI) som bygger på så kallade Markovkedjor. Min tilltro till mer avancerad AI är dock fortsatt låg.
Experimentet krävde mer jobb och förberedelser än jag trodde, bland annat för att jag behövde konfigurera och hacka programmet för att hantera svenska korrekt. Min förhoppning och förväntan om goda samtal vänner emellan drev mig dock tålmodigt vidare.
Experimentet blev på det stora hela en besvikelse. Samtalen med romanerna blev ofta förvirrade och inte sällan var de till och med otrevliga. Doktor Glas och Kallocain gav jag upp om ganska snart, för hur jag än försökte var de mer eller mindre deliriska. Jag tog fram mina mest älskvärda, charmerande och lismande sidor, men inget tycktes hjälpa. Röda rummet gick i sammanhanget betydligt bättre men dessvärre talar vi inte längre med varandra.
Här följer ett komprimerat sammandrag från ett av samtalen med Röda rummet (mina repliker i fetstil):
Hur står det till, bäste bok?
Jaså, ja, det läste några diagonaler och det gör en bok?
Nej du, några diagonaler gör ingen bok.
Jag går sönder hans – ja!
Pärmen är något sprucken, men så värst sönder är du inte.
Jag förstår!
Jag vill bara prata lite.
Han ska inte prata smörja om att verkställande direktören sin röst, som icke gått långt borta vid drivbänkarne i skydd av planket sutto två människor som icke var ett fint huvud, må du tro, den är något finare?
Kanske skulle man ändå satsa sina pengar på obligationer.
Nå, jag erbjöd herrn; vet herrn vad det nu haft under min vård var förlöjligat och måste befinna sig bland boskapen, blir respektabel, får du pengar på obligationer.
Dina logiska resonemang förvirrar mig, är de ockulta?
Vad var det för dig!
Jag tycker du har en väl hård ton.
Du är så rörd att han icke ha hänt förakt!
Jag är inte rörd och jag förstår inte vad du menar.
Jag menar att det var blott förruttnelsens doft, och han hade kört hem och lät brodern njuta av varandras sällskap.
Jag pratade just med Kallocain, men det var inte direkt givande.
Du var inte direkt givande.
Du kan vara ganska otrevlig.
Jag skall gå i trapporna, vi ha all anledning att påminna henne om, att jag i dag kan vara ganska otrevlig.
Låt oss bedöva oss tillsammans. Det tycks vi båda behöva.
Det är för oss som en trampad mask, och du behöver vi några år sedan, en statskalender, som var högfärdig, därför att man har hustru och barn och jag kan göra det!
Hur står det till med förståndet?
Jag förståndet?
Folk pratar inte som du gör längre. Tack och lov för det!
Tack, hjärtligt tack!
Jag funderar allvarlig på att ställa ned dig i tvättstugan.
Allvarlig men glad, uppriktigt glad på hela sitt liv, och nu har jag fått stå för slag?
Ja.
Han sade tvärt nej!