Password spraying — što je i zašto radi

Password spraying je online napad: napadač ima poznatu lozinku, ali ne zna koji korisnik je koristi. Ista lozinka se isprobava protiv više korisnika — polako, redom — da se izbjegne account lockout.

Tipovi napada na lozinke — usporedba

PASSWORD SPRAYING 1-2 lozinke MNOGO korisnika Online napad Izbjegava lockout Alat: Hydra Slow & low Cilj: pronadi account DICTIONARY ATTACK Lista lozinki (rjecnik) Jedan ili vise targeta Offline napad Radi na hashevima Alat: John the Ripper Brz (milijarde/s) Ovisi o sadrzaju rjecnika BRUTE FORCE SVE kombinacije znakova Jedan ili vise targeta Offline napad Nema ogranicenja Alat: JtR --incremental Spor za duge lozinke Teorijski 100% uspjesan OBRANA Account lockout MinPasswordLength 12+ Kompleksnost lozinke MFA Edukacija korisnika NIST SP 800-63B smjernice Kombinacija mjera

Online vs offline napad

  • Online: radi s živim autentifikacijskim sustavom — ograničen brzinom i lockoutom, 1-2 pokušaja/sekundi
  • Offline: direktan napad na ukradene hasheve — nema lockout, milijarde pokušaja/sekundi
  • Password spraying je uvijek online napad
  • Dictionary i brute force su offline napadi (JtR radi na hashevima)

Scenarij iz laba

  • Cilj: SMB share //10.1.16.2/HR na MS10
  • mkdir /mnt/HR — mount point za share
  • cat users.txt — pregled poznatih korisnika
  • Poznate lozinke: abc123, 123456, Pa$$w0rd
  • Ručni pokušaj: mount //10.1.16.2/HR /mnt/HR -o username=pat

Hydra — automatiziran spraying

Kreiranje liste lozinki

  • echo abc123 > pass.txt — kreira datoteku (zamjenjuje)
  • echo 123456 >> pass.txt — dodaje (>> = append, ne zamjena!)
  • echo 'Pa$$w0rd' >> pass.txtjednostruki navodnici zbog $ znaka!
  • cat pass.txt — provjeri sadržaj

hydra-wizard parametri

  • Service: smb
  • Target: 10.1.16.2
  • Username: users.txt
  • Password: pass.txt
  • Rezultat: jaime i admin koriste Pa$$w0rd

Verifikacija: mount //10.1.16.2/HR /mnt/HR -o username=jaime → Pa$$w0rd

Važno: Koristiti 'Pa$$w0rd' s jednostrukim navodnicima pri echo naredbi — bez toga, ljuska interpretira $ kao varijablu i password se ne upiše ispravno. Bez ispravno upisane lozinke, hydra napad neće uspjeti.

John the Ripper — dictionary napad

Dictionary attack je offline napad — radi na ukradenim hashevima bez kontakta s autentifikacijskim sustavom. JtR hashira svaku lozinku iz liste i uspoređuje s ciljanim hashem. Ako nema exact match u rječniku — lozinka ostaje necrackana.

Naredbe

  • cat ms10-hashes.txt — pregled hasheva (RID 500 = admin, RID 501 = Guest)
  • ls -lSr /usr/share/seclists/Passwords — lista rječnika (sort po veličini)
  • john --format=NT --wordlist=/usr/share/seclists/Passwords/xato-net-10-million-passwords.txt ms10-hashes.txt
  • Rezultat: 12 lozinki crackano za nekoliko sekundi

Prikaz rezultata

  • john --show --format=NT ms10-hashes.txt — prikaz crackanih (lozinka između username i RID)
  • john --show=left --format=NT ms10-hashes.txt — prikaz NECRACKANIH
  • john --show --format=NT ms10-hashes.txt > dict-cracked.txt — spremi
  • less dict-cracked.txt — pregled (SPACE=sljedeća, b=natrag, q=izlaz)

Napomena: --show i --show=left mogu se razlikovati u broju — blank lozinke se računaju kao 2 uspjeha kod --show ali samo 1 kod --show=left.

John the Ripper — brute force napad

Brute force testira sve moguće kombinacije znakova. JtR naziva ovaj mode incremental. Defaultni charset: 95 printabilnih ASCII znakova (pozicije 32-127). Max duljina: 13 znakova.

Naredbe

  • rm ~/.john/john.pot — briši povijest crackanog (čisti slate za novi test)
  • john --format=NT --incremental ms10-hashes.txt — brute force
  • SPACE — status (postotak, ETA, pokušaji/s)
  • john --format=NT --incremental --max-length=6 ... — ograniči na max 6 znakova
  • john --format=NT --incremental --max-length=7 ... — max 7: ETA je tjedni unaprijed
  • max-length=8+: JtR ne izračunava ETA (godinama)

JtR incremental modovi

  • ASCII — 95 printabilnih znakova (default)
  • Alnum — 62 alfanumerička znaka
  • Alpha — 52 slova
  • LowerNum — mala slova + brojevi (36)
  • UpperNum — velika slova + brojevi (36)
  • Digits — samo znamenke

Svaki dodatan znak množi prostor sa 95 → eksponencijalni rast trajanja.

Active Directory password policy

Stare vrijednosti (prije laba)

  • LockoutThreshold: 0 (nema lockout!)
  • MinPasswordLength: 7
  • MaxPasswordAge: 42 dana
  • LockoutDuration: 00:15:00
  • ComplexityEnabled: True
  • MinPasswordAge: 3 dana

Nove vrijednosti (preporučene po NIST SP 800-63B)

  • LockoutThreshold: 3 (zaključaj nakon 3 pokušaja)
  • LockoutDuration: 00:15:00
  • MinPasswordLength: 12
  • MaxPasswordAge: 365 dana
  • MinPasswordAge: 3 dana
  • LockoutObservationWindow: 00:15:00

PowerShell naredbe za promjenu politike

  • Import-Module ActiveDirectory
  • Get-ADDefaultDomainPasswordPolicy
  • Set-ADDefaultDomainPasswordPolicy -Identity structureality -LockoutThreshold 3
  • Set-ADDefaultDomainPasswordPolicy -Identity structureality -MaxPasswordAge 365.00:00:00
  • Set-ADDefaultDomainPasswordPolicy -Identity structureality -MinPasswordLength 12

Format vremena: D:H:M:S.F (Days:Hours:Minutes:Seconds.Fractions). Npr. 3 dana = 3.00:00:00.

Prisilna promjena svih lozinki: Get-ADUser -Filter * | Set-ADUser -ChangePasswordAtLogon $True

Na ispitu zapamti:
  • Password spraying = 1 lozinka, mnogi korisnici → izbjegava account lockout (online napad)
  • Dictionary attack i brute force = offline napadi na hasheve (nema lockout, milijarde/s)
  • Dictionary attack može pronaći lozinku SAMO ako je u rječniku (exact match)
  • JtR brute force mode = --incremental (95 ASCII znakova po defaultu)
  • --show=left prikazuje NECRACKANE (ostale); --show prikazuje crackane
  • MinPasswordLength je najvažniji parametar — svaki dodatan znak = ×95 više vremena za brute force
  • NIST SP 800-63B — referentni dokument za preporuke password politike
  • > = zamjena datoteke; >> = dodavanje na kraj (append)

Kviz — 15 pitanja

0 / 15
Odgovori na pitanja da vidiš rezultat.

1. Zašto password spraying napad pokušava samo 1-2 lozinke po korisničkom računu, pa prelazi na sljedeći?

Account lockout onemogućuje više uzastopnih neuspjelih pokušaja za isti račun. Password spraying obilazi tu zaštitu probajući mali broj lozinki po računu ali na velikom broju različitih računa.

2. Koji alat se koristio za automatiziran password spraying napad na SMB share u labu?

Hydra je alat za online autentifikacijske napade koji podržava mnoge protokole uključujući SMB. hydra-wizard je interaktivni wizard koji vodi korisnika kroz konfiguraciju napada korak po korak.

3. Hydra password spraying napad otkrio je koji par korisnika koristi Pa$$w0rd?

Hydra je otkrio da admin i jaime koriste istu lozinku Pa$$w0rd. Verifikacija: mount //10.1.16.2/HR /mnt/HR -o username=jaime → Pa$$w0rd → uspješan mount znači točne kredencijale.

4. Zašto se koriste jednostruki navodnici pri echo 'Pa$$w0rd' >> pass.txt?

U bash ljusci, $ unutar dvostrukih navodnika se interpretira kao početak varijable. 'Pa$$w0rd' s jednostrukim navodnicima sprečava tu interpretaciju — slovo $ se tretira doslovno. Bez toga, lozinka u pass.txt ne odgovara ciljanoj lozinci.

5. Dictionary napad s John the Riperom cracka 12 NTLM hasheva za nekoliko sekundi. Zašto je napad tako brz?

Offline napad ne kontaktira živi autentifikacijski sustav — radi direktno na hashevima. Nema network latency, nema lockout — samo računalna snaga ograničava brzinu. Moderni CPU-ovi mogu procesirati milijarde NTLM hasheva u sekundi.

6. Koji John the Ripper parametar specificira format hasha za Windows NTLM lozinke?

John the Ripper koristi --format=NT za NTLM hasheve (Windows New Technology LAN Manager). NT je kratica jer Microsoft naziva format "NT hash". Parametar se mora specificirati i pri --show i --show=left operacijama.

7. U čemu je temeljna razlika između dictionary attacka i brute force attacka?

Dictionary attack je ograničen sadržajem rječnika — ako lozinka nije u listi kao exact match, neće biti pronađena. Brute force teoretski može pronaći svaku lozinku, ali eksponencijalno raste s duljinom i složenošću.

8. Koliko printabilnih ASCII znakova koristi John the Ripper u incremental (brute force) modu po defaultu?

JtR default incremental mode = ASCII mode = 95 printabilnih ASCII znakova (pozicije 32-127 u 7-bitnoj ASCII tablici). Svaki dodatan znak u lozinci množi prostor pretrage sa 95.

9. Što JtR naredba rm ~/.john/john.pot radi i zašto se koristi u labu?

john.pot je datoteka u kojoj JtR pamti ranije crackane lozinke. Ako je lozinka u .pot fajlu, JtR je preskače u novom napadu. Brisanjem .pot fajla osigurava se čisti slate — JtR tretira sve hasheve kao necrackane.

10. Koja John the Ripper naredba prikazuje lozinke koje JOŠ NISU crackane?

--show prikazuje crackane lozinke, --show=left prikazuje one koje NISU crackane (koje su "ostale"). Oba zahtijevaju --format=NT za NTLM hasheve inače JtR neće prikazati točne rezultate.

11. Koji PowerShell cmdlet prikazuje trenutnu password politiku Active Directory domene?

Get-ADDefaultDomainPasswordPolicy prikazuje password politiku domene: lockout, kompleksnost, min/max duljinu, trajanje. Za postavljanje koristiš Set-ADDefaultDomainPasswordPolicy s -Identity parametrom i specifičnim promjenama.

12. Koji parametar AD password politike ima NAJVEĆI utjecaj na otpornost lozinke prema brute force napadu?

Duljina lozinke eksponencijalno povećava prostor pretrage. Svaki dodatan znak množi opcije za 95 (ASCII charset). Kompleksnost dodaje simbole i povećava bazu, ali duljina je dominantan faktor — 8-znakovna lozinka s punim ASCII skupom zahtijeva daleko manje vremena nego 12-znakovna s istim skupom.

13. Nakon promjene MinPasswordLength na 12 u AD politici — što se događa s postojećim lozinkama koje imaju manje od 12 znakova?

Password politika se primjenjuje na promjene lozinki, ne retroaktivno na postojeće. Korisnici sa starim kratkim lozinkama mogu ih nastaviti koristiti dok ne dođe do obvezne promjene. Za prisilnu promjenu: Get-ADUser -Filter * | Set-ADUser -ChangePasswordAtLogon $True.

14. Originalna AD politika u labu imala je LockoutThreshold = 0. Što to znači u praksi?

LockoutThreshold = 0 znači da lockout nije aktivan — napadač može probati neograničen broj lozinki bez rizika zaključavanja. To je kritična sigurnosna ranjivost koja omogućuje password spraying i online brute force napade bez ikakve prepreke.

15. Koji od sljedećih faktora povećavaju otpornost lozinke prema brute force napadu? (Odaberi 2)

Duljina i kompleksnost direktno povećavaju matematički prostor pretrage brute force napada. Starost/frekvencija promjene ne utječe na težinu brute force napada (pomaže samo ako napadač već ima hash). Izgovorljivost je sigurnosna slabost (predvidive lozinke).
0 / 15
Riješi kviz da vidiš rezultat.