User Tools

Site Tools


length-extension-attack

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
length-extension-attack [2023/11/29 09:26] lsslength-extension-attack [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====Length extension attack====
 +
 Hashevi koji koriste Merkle-Damgård konstrukciju (npr. [[MD5]], [[SHA|SHA1]] i [[SHA|SHA2]]) imaju sljedeće svojstvo: Hashevi koji koriste Merkle-Damgård konstrukciju (npr. [[MD5]], [[SHA|SHA1]] i [[SHA|SHA2]]) imaju sljedeće svojstvo:
 ako nam je poznat //hash(M1)// gdje je //M1// neka proizvoljna poruka i znamo duljinu poruke //M1//, možemo izračunati ako nam je poznat //hash(M1)// gdje je //M1// neka proizvoljna poruka i znamo duljinu poruke //M1//, možemo izračunati
Line 5: Line 7:
 To je moguće zato što Merkle-Damgård konstrukcija pri hashiranju dijeli sadržaj u blokove. Zato je moguće iz hasha rekonstruirati interno stanje hash funkcije i jednostavno nadodati sadržaj //M2// (i nadopunu) kao sljedeći blok. To je moguće zato što Merkle-Damgård konstrukcija pri hashiranju dijeli sadržaj u blokove. Zato je moguće iz hasha rekonstruirati interno stanje hash funkcije i jednostavno nadodati sadržaj //M2// (i nadopunu) kao sljedeći blok.
  
-To svojstvo može predstavljati ranjivost, ako se taj hash koristi kao MAC [link].+To svojstvo može predstavljati ranjivost, ako se taj hash koristi kao [[MAC]].
  
 Zamislimo aplikaciju koja poslužuje datoteke koje korisnik zatraži, ali kako bi autentificirao korisnika prvo validira MAC. MAC kod bi se mogao izračunati na sljedeći način: Zamislimo aplikaciju koja poslužuje datoteke koje korisnik zatraži, ali kako bi autentificirao korisnika prvo validira MAC. MAC kod bi se mogao izračunati na sljedeći način:
-MD5(tajna_vrijednost + ime_datoteke)+//MD5(tajna_vrijednost + ime_datoteke)//
  
-Ako je napadaču poznat jedan takav MAC, npr. MD5(tajna_vrijednost + datoteka1) i ako zna (ili može pogoditi) koliko je dug string tajna + datoteka1, tada +Ako je napadaču poznat jedan takav MAC, npr. //MD5(tajna_vrijednost + datoteka1)// i ako zna (ili može pogoditi) koliko je dug string //tajna + datoteka1//, tada 
-može generirati validnu MAC vrijednost MD5(tajna_vrijednost + datoteka1 + proizvoljni_sufiks), primjerice može generirati vrijednost MD5(tajna_vrijednost + datoteka123). To može učiniti iako mu+može generirati validnu MAC vrijednost //MD5(tajna_vrijednost + datoteka1 + proizvoljni_sufiks)//, primjerice može generirati vrijednost //MD5(tajna_vrijednost + datoteka123)//. To može učiniti iako mu
 tajna_vrijednost nije poznata! tajna_vrijednost nije poznata!
  
-Jedan od alata kojim se može izvesti ovakav napad je hash_extender [1] (https://github.com/iagox86/hash_extender).  +Jedan od alata kojim se može izvesti ovakav napad je **hash_extender** [1]. 
- +
-Primjer - hacknite digitalni potpis+
  
 +__**PRIMJER**__ - **Zadatak s Hacknite platforme - Digitalni potpis**
 <file> <file>
  
-Stjepan je osmislio inovativan način autentifikacije. Umjesto lozinke, korisnici moraju učitati digitalno potpisanu datoteku koja dokazuje njihov identitet. Je li autentifikacija implementirana na siguran način?+Stjepan je osmislio inovativan način autentifikacije. Umjesto lozinke, korisnici moraju učitati digitalno  
 +potpisanu datoteku koja dokazuje njihov identitet. Je li autentifikacija implementirana na siguran način?
  
-Dostupna Vam je python skripta za generiranje datoteka i digitalno potpisana datoteka niskoprivilegiranog korisnika, ali ne i tajna lozinka koja se koristi za digitalno potpisivanje.+Dostupna Vam je python skripta za generiranje datoteka i digitalno potpisana datoteka niskoprivilegiranog  
 +korisnika, ali ne i tajna lozinka koja se koristi za digitalno potpisivanje.
  
 Hint: length extension attack Hint: length extension attack
Line 35: Line 38:
 Proučimo skriptu gen_signed_dokument.py Proučimo skriptu gen_signed_dokument.py
  
-<code>+<code python>
 import sys import sys
 import hashlib import hashlib
Line 61: Line 64:
 </code> </code>
  
-Iz koda vidimo da se MAC generira algoritmom MD5(secret+data), nije nam poznat secret, ali iz koda možemo saznati da on mora bit dug 32 znaka.  +Iz koda vidimo da se MAC generira algoritmom //MD5(secret+data)//, nije nam poznat //secret//, ali iz koda možemo saznati da on mora bit dug 32 znaka.  
-Podaci za koje se generira MAC su ime korisnika i opcionalno tekst "can_read_flag"+Podaci za koje se generira MAC su ime korisnika i opcionalno tekst //can_read_flag//
  
-Također nam je dostupan dokument niskoprivilegiranog korisnika test_dokument.txt. Na prvoj liniji se nalazi MAC, a na drugoj korisničko ime.+Također nam je dostupan dokument niskoprivilegiranog korisnika //test_dokument.txt//. Na prvoj liniji se nalazi MAC, a na drugoj korisničko ime.
 Kada učitamo dokument, dobijemo poruku da trenutno nemamo nikakve privilegije u sustavu. Kada učitamo dokument, dobijemo poruku da trenutno nemamo nikakve privilegije u sustavu.
  
-*slika ovdje*+{{length_extension_1.png}}
  
-Kada pokušamo jednostavno dodati tekst "can_read_flagna kraj dokumenta dobijemo poruku "Ne može!"+Kada pokušamo jednostavno dodati tekst //can_read_flag// na kraj dokumenta dobijemo poruku //Ne može!//
    
-*slika ovdje*+{{length_extension_2.png}}
  
-To se dogodilo zato što je u tom dokumentu valjani MAC za tekst "testni_korisnik", a ne za  +To se dogodilo zato što je u tom dokumentu valjani MAC za tekst <code>testni_korisnik</code> a ne za  
-"testni_korisnik +<code>testni_korisnik 
- can_read_flag".+can_read_flag</code>
  
-Možemo zaključiti da trebamo generirati dokument koji ima u sebi ime korisnika, tekst "can_read_flagi validni MAC.  +Možemo zaključiti da trebamo generirati dokument koji ima u sebi ime korisnika, tekst //can_read_flag// i validni MAC.  
-Budući da ne znamo tajnu vrijednost, ne možemo jednostavno izračunati valjani MAC, a budući da je tajna duga 32 znaka ne  +Budući da ne znamo tajnu vrijednost, ne možemo jednostavno izračunati valjani MAC, abudući da je tajna duga 32 znakane možemo ju ni pogoditi. Međutim, imamo valjani MAC za tekst //testni_korisnik//, a poznata nam je i duljina tajne, pa možemo izvesti napad produljenjem. \\ 
-možemo ju ni pogoditi. Međutim, imamo valjani MAC za tekst "testni_korisnik", a poznata nam je i duljina tajne, pa možemo izvesti +Koristimo alat //hash_extender//
-napad produljenjem. +
- +
-Koristimo alat "hash_extender+
  
 <code>./hash_extender --data=testni_korisnik --signature=0cad728d48584e1650aaf9e978690111 --append=" <code>./hash_extender --data=testni_korisnik --signature=0cad728d48584e1650aaf9e978690111 --append="
  can_read_flag" --out-data-format=fancy --secret 32</code>  can_read_flag" --out-data-format=fancy --secret 32</code>
  
-U argument "--datapostavljamo podatak "testni_korisnikzato što za taj niz znakova imamo validni MAC, u argument "signaturestavljamo signature iz testne datoteke +U argument //--data// postavljamo podatak //testni_korisnik// zato što za taj niz znakova imamo validni MAC, u argument //signature// stavljamo MAC iz testne datoteke 
-, u argument append dodajemo tekst koji želimo nadodati na kraj datoteke (paziti da se treba dodati i newline!) te kao veličinu tajne stavljamo 32 (što smo isčitali iz koda).+, u argument append dodajemo tekst koji želimo nadodati na kraj datoteke (paziti da se treba dodati i newline!) te kao veličinu tajne stavljamo 32 (što smo čitali iz koda).
  
-Kao ispis programa dobili smo novogenerirani validni MAC te "hexdumpnovog dokumenta. Osim teksta "can_read_flag" dodan je i "padding".+Kao ispis programa dobili smo novogenerirani validni MAC te //hexdump// novog dokumenta. Osim teksta //can_read_flag// dodana je i nadopuna (engl. padding). Alat je generirao novi MAC i za md5 i za md4 algoritam, u ovom slučaju nas zanima samo md5.
  
-<slika> +{{hash_extender.png}}
  
-S hex editorom kao što su HxD ili xxd tako možemo konstruirati novu datoteku s validnim MAC-om kao prvom linijom.  
  
-<slika>+S hex editorom kao što su HxD ili xxd tako možemo konstruirati novu datoteku s validnim MAC-om kao prvom linijom. Slika prikazuje //hexdump// finalne datoteke. 
 + 
 +{{length_extension_3.png}}
  
 Kad učitamo datoteku dobijemo flag. Kad učitamo datoteku dobijemo flag.
  
-<slika> 
  
 +===Izvori===
 +
 +[1] https://github.com/iagox86/hash_extender
length-extension-attack.1701250001.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki