Hvorfor lidt salt kan være godt til dine adgangskoder (men ikke peber!)

En kort note - denne artikel handler om teorien om, hvordan man knækker hashede adgangskoder. At forstå, hvordan cyberkriminelle udfører angreb, er ekstremt vigtigt for at forstå, hvordan man sikrer systemer mod disse typer angreb.

Men forsøg på at hacke et system, som du ikke ejer, er sandsynligvis ulovligt i din jurisdiktion (plus hacking af dine egne systemer kan [og ofte bryder] enhver garanti for det produkt).

Denne artikel antager et vis niveau af viden om hashing-funktioner og grundlæggende adgangskodekrakningsteknikker - hvis du ikke forstår disse emner, skal du tjekke disse artikler.

Så du har fået et sæt hashede adgangskoder. Brute, der tvinger hashen, vil tage meget lang tid. Hvordan kan du fremskynde denne proces?

Vent, jeg troede hash-funktioner var envejs! Hvordan knækker du hash-funktioner?

Desværre er hashing-funktionerne, der bruges til hashing-adgangskoder, ikke altid så sikre som almindeligt godkendte hash-funktioner. For eksempel er hashing-funktionen, der bruges til gamle Windows-enheder, kendt som LM Hash, som er så svag, at den kan knækkes på få sekunder.

Du behøver heller ikke at reverse engineering af hashen. I stedet kan du bruge et forudberegnet sæt almindelige tekstadgangskoder og den tilsvarende hash-værdi (,). Dette fortæller en hacker, hvilken ren tekst, der producerer en bestemt hash.

Med dette ved du, hvilken ren tekstværdi der producerer den hash, du leder efter. Når du indtaster en adgangskode, vil computeren hash denne værdi og sammenligne den med den gemte værdi (hvor den vil matche), og du vil kunne godkende. Således behøver du faktisk ikke gætte nogens adgangskode, bare en værdi, der skaber den samme hash.

Dette kaldes en kollision. I det væsentlige, da en hash kan tage data af enhver længde eller indhold, er der ubegrænsede muligheder for data, der kan hashes.

Da en hash konverterer denne tekst til et fast længdeindhold (for eksempel 32 tegn), er der et endeligt antal kombinationer for en hash. Det er et meget stort antal muligheder, men ikke uendelig.

Til sidst giver to forskellige datasæt den samme hash-værdi.

Forudberegnede tabeller er meget nyttige til at opnå dette, da de sparer betydelig tid og computerkraft. Brug af et forudberegnet sæt hashes til at slå et kodeord hash kaldes et 'lookup-table attack'. Disse tabeller bruges af systemadministratorer til at teste styrken af ​​deres brugeres adgangskoder og er ofte tilgængelige online eller til køb. De kan dog også bruges af onde hackere.

Hvis en adgangskode er usikker (lad os sige, at nogen bruger en adgangskode på 5 tegn), kan den relativt let knækkes. For eksempel kan en adgangskode på 5 små bogstaver kun bruges til at oprette 11.881.376 forskellige adgangskoder (26 ^ 5).

For en hash af denne adgangskode, selvom hashen er kryptografisk sikker (bruger en passende algoritme), ville det stadig være meget let at beregne alle mulige adgangskoder og deres tilsvarende hashes. Opslagstabeller fungerer meget godt for disse typer af adgangskodeshasninger.

Da adgangskoder dog øges i længde, vokser lagringen (og derfor lageromkostningerne) for hver mulig adgangskode og den tilsvarende hash eksponentielt.

For eksempel hvis den adgangskode, du forsøger at knække, er 8 tegn lang, men bruger tal (10 cifre), små bogstaver (26), store bogstaver (26) og nogle specialtegn (10), springer antallet af mulige adgangskoder til 722,204,136,308,736 - hvilket er MEGET lagerplads, når du er klar over, at hver er hash med en hashing-funktion som SHA-256.

Rainbow-tabeller løser dette problem ved at tilbyde reducerede lagerbehov, men det tager mere tid at beregne de potentielle adgangskoder. På det mest basale niveau er disse i det væsentlige forudberegnede opslagstabeller, der gør det muligt for dig hurtigt at finde den almindelige tekst, der matcher den hash, du har. Hvis hash og almindelig tekst er indeholdt i den tabel, du har - svarende til ordbogangreb - ser du kun efter, om adgangskoden er indeholdt i den tabel, du har. Hvis det ikke er tilfældet, kan du ikke knække adgangskoden. Du kan finde disse online gratis eller til køb.

Tjek denne artikel for en vejledning i oprettelse af dine egne regnbueborde.

Jeg er stadig interesseret. Hvordan fungerer regnbueborde?

Hvis du vil springe den detaljerede forklaring over, hvordan disse fungerer, er du velkommen til at rulle ned til afsnittet 'Sådan beskyttes mod disse angreb.

For at redde dig selv fra hash og lagring af hver mulig almindelig tekst, indtil du finder den hash, du har brug for (som en opslagstabel), hasher du hver almindelig tekst og gemmer resultatet i en tabel for at se op senere uden at skulle regenerere dem. Dette tager længere tid, men sparer hukommelse.

For at generere tabellen opretter du 'kæder' af hashes og almindelig tekst ved hjælp af en hashing-funktion og en reduktionsfunktion. En reduktionsfunktion opretter bare almindelig tekst fra en hash (den reverse engineering af hashen, men opretter snarere en anden almindelig tekst end hashen). Det er også en envejsfunktion.

For at beregne tabellen bruger du således en af ​​dine hashes, h1, i din reduktionsfunktion, R (), for at skabe almindelig tekst p1.

R (h1) = p1.

Derefter bruger du hash-funktionen H () med p1 til at oprette en ny hash.

H (p1) = h2.

Ved hjælp af vores eksempel fra før:

Hvis sættet med almindelig tekst er [abcdefghijklmnopqrstuvwxyz] {5} (vi leder efter en regnbue-tabel med alle adgangskoder, der består af små bogstaver med længde 5), og vi bruger MD5 (en hashingalgoritme):

En hash kan være ab56b4d92b40713acc5af89985d4b786 (h1). Nu anvender vi reduktionsfunktionen, som kan være så enkel at tage de sidste 5 bogstaver i hashen.

R (ab56b4d92b40713acc5af89985d4b786) = cafdb

H (cafdb) = 81a516edabf924cd0f727d329e855b1f

Hvorfor kaldes de regnbue borde?

Hver kolonne bruger en anden reduktionsfunktion. Så hvis hver søjle var farvet, ville det være en meget lang, tynd regnbue.  

Brug af forskellige reduktionsfunktioner reducerer antallet af kædesammenlægninger (kollisioner), der ofte skete med hash-kæder, forgængeren til regnbueborde. Dette betyder i det væsentlige, at hvis du fortsætter med at bruge den samme reduktionsfunktion, er der en chance for, at du ender med to forskellige kæder, der konvergerer til den samme almindelige tekst. Brug af forskellige reduktionsfunktioner reducerer chancen for, at dette sker, selvom det ikke er umuligt.

Godt, hvordan opretter man en kæde?

For at oprette en kæde bruger du din reduktionsfunktion og hashing-funktion (begge veje) til at oprette en 'kæde' af hash og almindelig tekst. Hver af disse 'kæder' fortsætter i k-trin, og når kæden slutter, gemmer kun den første almindelige tekst og den sidste hash i kæden.

Så en prøvekæde ser sådan ud:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

Hver reduktionsfunktion er forskellig (repræsenteret af R1, R2, R3 osv.) En prøvetabel med kæder (hver række er en kæde med længde 5) ligner følgende. Bemærk, at dette er befolket med falske data bare for at give dig et eksempel - hashing-funktionen er ikke en hash-funktion, du ville finde brugt til hash-adgangskoder.

Reduktionsfunktionerne, R1 og R2 er defineret som følger - R1 tager de første 3 cifre i hashen, og R2 tager de sidste 2 bogstaver i hashen:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

2 -—> abdu2934 -—> 293 -—> 83kdnif8 -—> hvis -—> ike83jd3

15 -—> dks2ne94 -—> 294 -—> ld932nd9 -—> ld -—> ldie938d

20 -—> ld93md8d -—> 938 -—> lxked93k -—> lx -—> 93mdkg8d

I en regnbue-tabel gemmes kun det første startpunkt og slutpunktet for at gemme på lager, som dette:

startpunkt (almindelig tekst) slutpunkt, efter k trin gennem kæden (hash)

p1 -—> h1k

p2 -—> h2k

p3 -—> h3k

Så når du har en hash (h), hvor du ikke kender almindelig tekst (?), Sammenligner du den med kæderne.

  1. Først skal du kontrollere, om hashen er på listen over endelige hashes (h1k, h2k osv.). I så fald kan du gå til trin 3.
  2. Hvis ikke, kan du reducere hash til forskellige almindelig tekst (R1) og derefter hash denne almindelige tekst (ved hjælp af hash-funktionen og næste reduktionsfunktion ovenfor) og sammenligne den med listen over endelige hashes (h1k, h2k, h3k osv.). Når den matcher en af ​​de sidste hashes, vil denne kæde sandsynligvis indeholde den originale hash.
  3. For at finde den originale hash i kæden skal du tage kædens startklare tekst (så hvis den matcher h1k, start med p1) og anvend hashing- og reduktionsfunktionerne til at bevæge sig langs kæden, indtil du når den kendte hash og dens tilsvarende klartekst. På denne måde kan du bevæge dig gennem hash i kæden uden at få dem til at optage lagerplads på din maskine.

Selvom du ikke kan være sikker på, at kæderne indeholder den hash, du har brug for, jo flere kæder du har genereret (eller refererer til) jo mere sikker kan du være. Desværre er hver kæde tidskrævende at generere, og at øge antallet af kæder øger den tid, du har brug for.

Hvordan forsvarer man sig mod disse typer angreb?

For det første et lagdelt forsvar af alle systemer. Hvis du kan forhindre kompromittering af dine systemer via andre metoder (så angriberen ikke kan få en kopi af dine hashede adgangskoder), vil angriberen ikke være i stand til at knække dem.

Du kan også bruge saltning, som tilføjer en tilfældig værdi til adgangskoden, før du krypterer den. Det betyder, at den forudberegnede værdi, du har fundet (som matcher hash), ikke fungerer. Den krypterede tekst er ikke udelukkende baseret på den ukrypterede tekst. Fordi saltet er forskelligt for hver adgangskode, skal de hver især knækkes individuelt.

Saltning er nu inkluderet i de fleste større hashtyper som en mulighed. Mens Windows i øjeblikket ikke bruger saltning, kan de kryptere lagrede hashes, hvis du bruger værktøjet 'SYSKEY'.

Du kan også bruge 'runder' eller hashing en adgangskode flere gange. Brug af runder (især hvis antallet af runder er tilfældigt valgt for hver bruger), gør hackers job sværere. Dette er mest effektivt, når det kombineres med saltning.

Desværre har en hacker, der har de hashede adgangskoder, også adgang til antallet af anvendte runder og det anvendte salt (for for at få denne liste har de sandsynligvis kompromitteret. Saltet og antallet af anvendte runder er gemt med adgangskoden. hash, hvilket betyder, at hvis angriberen har den ene, har de også den anden. De vil dog ikke være i stand til at bruge forudberegnede regnbueborde tilgængelige online og bliver nødt til at beregne deres egne tabeller (hvilket er ekstremt tidskrævende).

En anden metode designet til at øge vanskeligheden ved at knække adgangskoden er at bruge en peber. Peber ligner salt, men mens et salt ikke er hemmeligt (det gemmes med den hashede adgangskode), gemmes peber separat (for eksempel i en konfigurationsfil) for at forhindre en hacker i at få adgang til det. Dette betyder, at peber er hemmelig, og dens effektivitet afhænger af dette.

Peber skal være forskellig for hver applikation, den bruges til, og skal være lang nok til at være sikker. Mindst 112 bits anbefales af National Institute of Standards and Technology.

Mens du bruger en peber kan være effektiv i nogle tilfælde, er der nogle ulemper. For det første understøtter ingen nuværende algoritme peberfrugter, hvilket praktisk taget betyder, at dette er umuligt at implementere i skala. Det vil sige, medmindre du opretter dine egne algoritmer. Lyt til Bruce Schneier. Gør ikke det.

For en længere artikel om problemerne med peberfrugter, tjek denne tråd.

Brug endelig stærke (mindst 12 tegn), komplekse adgangskoder, og implementer stærke adgangskodepolitikker på tværs af alle systemer. Dette kan omfatte at tvinge brugere til at oprette stærke adgangskoder, teste deres styrke regelmæssigt, bruge adgangskodeadministratorer på virksomhedsniveau, håndhæve brugen af ​​2FA osv.

Forvirret over hvad der skaber et stærkt kodeord?

Det virker virkelig let at blive hacket. Skal jeg være bekymret?

Det vigtigste at huske på hacking er, at ingen ønsker at udføre mere arbejde, end de skal gøre. For eksempel er det meget arbejde at beregne regnbueborde. Hvis der er en nemmere måde at få dit kodeord på, er det sandsynligvis, hvad en ondskabsfuld skuespiller vil prøve først (som phishing!).

Det betyder, at muliggør grundlæggende bedste praksis for cybersikkerhed sandsynligvis er den nemmeste måde at forhindre at blive hacket på. Faktisk rapporterede Microsoft for nylig, at bare at aktivere 2FA vil ende med at blokere 99,9% af automatiserede angreb.

Glad hacking!

Yderligere læsning:

Flere detaljer om hashkæder

En anden forklaring på regnbueborde

En liste over regnbueborde online