tisdag 3 september 2013

Lösenordens död del 2 - Knäckning med grafikkort - TechWorld

Lösenordens död del 2 - Knäckning med grafikkort - TechWorld

Det har blivit alldeles för lätt att knäcka lösenord. Numera används grafikkort ofta för att snabba upp processen. Våra experter förklarar hur det går till och varför lösenordens tid är förbi.  

De senaste åren har flera databaser med lösenord publicerats efter intrång mot publika tjänster. Lösenorden har ofta forcerats med lätthet. Frågan som vi försöker svara på i den här artikelserien är: Varför är det så lätt?



I del 1 gick vi igenom svagheter som finns inbyggda i lösenordsskyddet. Knäckningen kan dock snabbas på med hjälp av hårdvara, och en växande trend är att grafikkort används för att knäcka lösenorden. I denna artikel tittar vi närmare på hur det går till.

Inte orden i klartext
I de allra flesta fall då stulna lösenordsdatabaser publicerats har de innehållit hashsummor av lösenord och inte lösenorden i klartext. Det är inte heller ovanligt att salt (se Ordlista) använts för att skydda hashsummorna mot angrepp med förberäknade regnbågstabeller, vilket gör att angripare måste använda sig av mer beräknings- och tidskrävande attacker, som till exempel ordlisteattacker eller uttömmande sökning.

Men trots att lösenorden skyddats med hjälp av hashalgoritmer och att salt använts har angripare i många fall lyckats komma åt lösenorden i klartext.



Inte alls komplicerat
Vi börjar med en kort repetition från den föregående artikeln för att beskriva hur ett lösenord forceras. Att knäcka ett lösenord kan låta komplicerat, men i själva verket följer det en mycket enkel algoritm. Följande metod förutsätter en uttömmande sökning, alltså det som kallas brute force:

1. Lösenord gissas.
2. Eventuellt salt klistras på lösenordet.
3. Lösenord tillsammans med salt matas in i en hash-algoritm, till exempel md5, ntlm eller sha1.
4. Resultatet jämförs med hashsumman av det lösenord som ska knäckas.
5. Om resultatet är identiskt med en hashsumma har man funnit lösenordet. Om inte så gissa nästa lösenord – alltså börja om på punkt 1.


Innehållsförteckning

Att knäcka ett lösenord är alltså i själva verket en gissningslek där angripare gissar lösenord tills dess att rätt ord hittats. Hur många gissningsförsök som krävs innan en lösenord har knäckts beror på lösenordets komplexitet. Läs mer om det i den förra artikeln.



På senare år har stora mängder lösenord läckt ut vid hacker-attacker.

8 tecken vanlig policy
Många system använder sig av en lösenordspolicy som kräver åtminstone åtta tecken långa lösenord. Om ett tecken kan vara antingen en stor eller liten bokstav, en siffra eller ett specialtecken, kan varje tecken ha 112 (baserat på tjugosex bokstävers alfabet, tio siffror och cirka femtio specialtecken) olika värden.

Om ett åtta tecken långt lösenord väljs slumpmässigt, vilket oftast inte sker i praktiken, ger det här en angripare sannolikheten en på cirka 2,48 x 10^16 att gissa rätt.

Enligt diskret matematik kan man förvänta sig att gissa rätt efter halva antalet, alltså cirka 1,24 x 10^16 gissningar. För att ge en referensram kan tilläggas att sannolikheten för att vinna Svenska Spels Drömvinsten är cirka 1 på 338 miljoner – det är alltså ungefär 36,6 miljoner gånger troligare att vinna drömvinsten än att gissa rätt lösenord.

Tålamod eller kapacitet
Att knäcka lösenord genom den här tekniken kräver antingen ett, för att uttrycka det milt, stort tålamod eller tillgång till stor beräkningskapacitet. En allt vanligare trend är att använda grafikkort för att knäcka lösenord. För att förstå varför behöver vi titta närmare på tre egenskaper som knäckning av lösenord uppvisar:
Oberoende: Knäckning av ett lösenord är oberoende av resultatet från knäckning av andra lösenord – det gör det möjligt att knäcka flera lösenord parallellt.


Sisd-arkitektur. En given instruktion appliceras på data lagrad i en minnescell.


Simd-arkitektur. En given instruktion appliceras på data i flera minnesceller parallellt.

Beräkningsintensivt: Många beräkningar krävs för att generera en hashsumma av ett lösenord samtidigt som förgreningar (branches) inte förekommer.
Ej latenskritiskt: Det är inte viktigt hur snabbt hashsumman av ett specifikt lösenord beräknas (latency, latens) utan vad som är av intresse är antalet hashsummor som beräknas per sekund (throughput, genomströmning).
 

Det visar sig att de här egenskaperna medför att knäckning av hashsummor kan parallelliseras, och det är mer lämpligt att utföra med ett grafikkort i stället för med en traditionell processor. Anledningen till det blir tydligt när man tittar närmare på skillnaderna i arkitektur mellan grafikkort och processorer.

Parallellt, inte seriellt
Man kan förenklat säga att en vanlig processor, som består av en eller flera cpu:er, hanterar data seriellt medan ett grafikkort hanterar data parallellt.
En cpu i en processor är uppbyggd enligt en sisd-arkitektur. I en sådan tillämpas en given instruktion på data lagrad i en minnescell. Sisd-arkitekturen uppvisar alltså ett seriellt beteende.

En cpu är skapad för att hantera en uppgift så snabbt som möjligt. För att uppnå snabbheten är cpu:n beroende av ett relativt stort cache-minne, djup instruktionspipeline samt avancerad kontrollogik.
En cpu lämpar sig väl att användas i applikationer som innehåller många förgreningar och många beroenden mellan applikationer, till exempel operativsystem eller databaser.


Skillnaden mellan cpu och gpu. I gpu:n får fler beräkningsenheter (alu) plats eftersom den inte är lika beroende av komplex kontrollogik och stort cacheminne som cpu:n.

En gpu i grafikkort är i stället uppbyggd enligt en simd-arkitektur, där varje given instruktion appliceras på data i flera minnesceller parallellt.
En simd-arkitektur fungerar väldigt bra för vissa typer av applikationer där det är möjligt att utföra parallella beräkningar. Grafikkort används som bekant normalt för att rendera 2d- och 3d-grafik där varje bild består av flera miljoner pixlar, en beräkningsintensiv uppgift som lämpar sig väl för en simd-arkitektur då pixlar till stor del kan beräknas oberoende av varandra.

Vid rendering av grafik ligger fokus på att uppnå en så hög genomströmning av pixlar som möjligt medan latens är mindre viktigt. Exempel på andra lämpliga användningsområden för ett grafikkort är beräkningar av fysiska fenomen, sortering av långa listor och knäckning av lösenord.

Cpu:er och gpu:er konstrueras på chip där chipets storlek är en starkt kostnadsdrivande faktor. Tillverkarna är alltså måna om att hålla nere på chipets storlek för att hålla nere kostnaderna.
Det innebär att den funktionalitet som kan läggas på ett chip begränsas av mängden transistorer som får plats på chipet. För en cpu, som behöver mycket snabbt cacheminne och en komplicerad kontrollogik, måste många transistorer användas för det ändamålet.




För en gpu, som inte har det behovet, kan transistorerna i stället användas för att lägga flera beräkningsenheter, till exempel alu på chipet. En gpu får därför plats med många fler beräkningsenheter än en cpu – gpu:n är alltså lämpliga att använda för beräkningar som kan parallelliseras.

Öppna ramverk hjälper
I och med att flera utvecklingsramverk blivit tillgängliga har populariteten också ökat att använda grafikkort vid lösenordsknäckning. Först ut var Nvidia med det proprietära ramverket Cuda år 2007. I slutet av 2008 släpptes ramverket OpenCL, en öppen standard för integration av beräkningsenheter som är kompatibelt med grafikkort från båda de ledande tillverkarna av grafikkort, Nvidia och AMD.

Grafikkortstillverkare har dessutom börjat släppa grafikkort som inte endast är specialiserade på grafik utan på mer generella beräkningar. Termen gpgpu, general purpose graphics processing unit, används allt oftare för denna typ av grafikkort.

Testade i praktiken
Hur mycket snabbare är då ett grafikkort än en processor på att knäcka lösenord? Vi beslutade oss för att testa detta i praktiken. Vi utrustade vår labbdator, som har en Intel Core i7-2600-processor, med ett AMD HD 7970-grafikkort. Den mjukvara som vi valde för knäckning av lösenord var 64-bitarsversionen av programvarusviten Hashcat. Vi använde oclhashcat-lite64 för knäckning med grafikkort medan hashcat-cli64 användes för knäckning med processor.


Så här ser skillnaden i prestanda mellan en processor och ett grafikkort ut när det gäller en uttömmande lösenordssökning. Värdena anger antal miljoner gissade lösenord per sekund. Observera att värdena är ungefärliga och endast syftar till att ge en uppfattning om hastighetsskillnaden.

Det framgår tydligt av resultatet att grafikkortet är betydligt snabbare än processorn, framförallt när det gäller äldre hashalgoritmer som md5 och ntlm. Vad kan vi då dra för slutsatser av våra resultat?
Låt oss anta att lösenord består av slumpmässigt utvalda tecken med en blandning av stora och små bokstäver, siffror och specialtecken. Det resulterar som sagt i att varje tecken i ett lösenord kan anta 112 olika värden. Vi antar vidare att lösenordet skyddas av hash-algoritmen ntlm, det är vanligt vid jämförelser.

Av resultatet kan man dra slutsatsen att man bör ha ett lösenord bestående av åtminstone nio slumpmässiga tecken för att vara säker från en angripare som har en ganska simpel knäckningsmaskin, en utrustad med ett grafikkort som kostar cirka fyra tusen kronor i inköp. Notera dock att det kan gå mycket snabbare om lösenordet inte består av slumpmässiga tecken.

Genom att öka investeringen kan knäckningen effektiviseras. Eftersom knäckning av lösenord är ett problem som går att parallellisera kan en angripare köpa in fler grafikkort och på så sätt nå en högre knäckningskapacitet. De flesta moderna datorer kan normalt inte utrustas med fler än en handfull grafikort, bland annat på grund av brist på pci express-platser och fysiskt utrymme.

Skapa virtuellt kluster
Det är dock möjligt att komma runt de begränsningarna genom att bygga ett kluster av flera datorer där varje dator utrustas med maximalt antal grafikkort. Dessa kan sedan slås ihop i ett virtuellt kluster med hjälp av programvaran Virtual OpenCL. Med den kan samtliga grafikkort i klustret hanteras som lokala grafikkort, så att man kan använda dem direkt i knäckningsprogrammet Hashcat.


Jämförelse mellan TechWorlds labbdator och ett grafikkortskluster bestående av 25 grafikkort. Siffrorna anger antalet miljoner lösenordsgissningar per sekund för tre vanliga hash-algoritmer.

Det är precis vad den amerikanske it-säkerhetsexperten Jeremi Gosney gjorde, och redovisade på konferensen Passwords12 i december 2012. Hans knäckningskluster bestod av tjugofem AMD-grafikkort av varierande modell.

I tabellen ovan jämför vi TechWorlds labbdator med den angivna prestandan på klustret bestående av tjugofem grafikkort. Klustret är cirka tjugofem gånger snabbare än TechWorlds labbdator. Kostnaden för klustret uppskattas till cirka trehundratusen kronor.

Vi uppgav tidigare att ett lösenord på nio slumpmässiga tecken är starkt nog för att skydda mot en angripare med ett grafikkort. Ett sådant lösenord knäcks av Jeremi Gosney grafikkortskluster på cirka 93 dagar – ännu starkare lösenord krävs alltså. Ett ord med tio slumpmässigt utvalda tecken skulle ta cirka tjugoåtta år att knäcka med Jeremi Gosneys kluster, så det borde avskräcka de flesta angripare.


Gratisverktyget Hashcat kan användas för att knäcka lösenord med hjälp av grafikkort. Det har stöd för de flesta populära hash-algoritmerna.

Men hur starkt lösenord behövs om vi leker med tanken att vi vill skydda våra lösenord mot en ännu mer resursstark angripare, till exempel en underrättelsetjänst som FRA? Många sådana organisationer hemlighåller specifikationer på sina superdatorer, så det är svårt att uppskatta deras knäckningskapacitet. Om vi gör några antaganden kan vi dock göra en grov uppskattning:


  • Underrättelsetjänsten har en budget i paritet med de dyraste superdatorerna i världen, och sådana specifikationer finns redovisade offentligt.
  • Det är möjligt att utföra knäckning av lösenord distribuerat på ett mycket stort antal grafikkort utan någon prestandaförlust.

Världens snabbaste dator
Den snabbaste superdatorn i världen vars specifikation är känd i november 2012 var superdatorn Cray Titan. Den består av 18 688 stycken Nvida Tesla K20-grafikkort och den uppges kosta cirka 630 miljoner kronor. Om kostnaden för ett sådant inköp slås ut över flera budgetår kan vi anta att det ryms inom budgetramen för FRA, som för 2013 ansökt om en budget på cirka 821 miljoner.

Om vi antar att Nvida Tesla K20 har liknande prestanda som vår labbdators grafikkort AMD HD 7970 (tester har dock visat att HD 7970 är snabbare för flera typer av beräkningar) kan vi göra en grov uppskattning på att Cray Titan är 19 200 gånger snabbare än vår labbdator. Det innebär att Cray Titan kan utsätta ett lösenord skyddat med ntlm för cirka 4,58 x 10^14 knäckningsförsök per sekund. Det betyder att en uttömmande sökning av ett lösenord bestående av elva helt slumpmässiga tecken tar cirka fyra år. Tolv helt slumpmässiga tecken tar cirka 479 år.


Att använda grafikkort för att parallellisera knäckning av lösenord är dock inte det enda angreppssättet. Det finns flera försök där man använt sig av fpga-kretsar som konfigurerats och optimerats för ett visst ändamål. Företaget Pico Computing demonstrerade 2010 ett knäckningskluster bestående av trettiosex Xilinx-fpga-kretsar som kunde genomföra 144 miljarder gissningar per sekund, och alltså är cirka tio gånger snabbare än grafikkortet i vår labbdator.


Ungefärliga tider för hur lång tid det tar att genomföra en knäckning av en ntlm-hashsumma med en Intel Core i7 processor jämfört med ett AMD HD 7970-grafikkort. Vi har även lagt till tiderna för Jerimi Gosneys grafikkortskluster och en Cray Titan. Notera att tiderna i tabellen är baserade på en uttömmande sökning, alltså att samtliga kombinationer av lösenordet gås igenom. Halvera tiden för att få förväntad knäckningstid.

Det är även möjligt att använda asic-kretsar för att knäcka lösenord. Företaget Butterfly Labs säljer en asic-krets designad för att generera bitcoins som presterar 1 500 miljarder gissningar av sha256 lösenord. Den kan visserligen inte användas för något annat än att generera bitcoins, men det ger en indikation på vilken potential asic-kretsar har. Den kostar cirka 200 000 kronor.

Den fördel som asic och fpga har mot grafikkort är att de har en relativt låg strömförbrukning. Nackdelar är att de tar längre tid att utveckla och att grafikkort är prispressade eftersom de efterfrågas på privatanvändarmarknaden.

TechWorlds slutsats
En angripare kan parallellisera knäckningen av lösenord, och det blir allt vanligare att grafikkort används för det syftet. Hur långt lösenord som behövs för att skydda sig mot en angripare beror på de ekonomiska resurserna som angriparen har. Vi har i denna artikel visat ett helt slumpmässigt lösenord bestående av nio tecken är säkert mot en angripare som har ett grafikkort för fyra tusen kronor.

Redan där, utan att nämna grafikkortskluster eller en underrättelsetjänsts superdator, ser vi alltså att lösenordens tid är passé. I praktiken orkar inte någon använda långa och slumpmässiga lösenord – användarens rationalisering vid lösenordsval förenklar angreppen radikalt. Som exempel kan nämnas att ett lösenord på sexton tecken lång passordsfras kan liknas i komplexitet med ett cirka åtta tecken långt slumpmässigt lösenord.

Att tvinga användarna att välja långa slumpmässiga lösenord skulle endast resultera i en mängd gula lappar fastklistrade på skärmar eller gömda under tangentbord. Det är dags att leta efter andra autentiseringslösningar – lösenord duger inte längre.

Inga kommentarer:

Skicka en kommentar