Upload
vuongdien
View
221
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Seminarski rad u okviru predmeta „Računalna forenzika“
[2017./2018.]
Analiza formata ZIP arhive
Marin Luketin
Zagreb, siječanj 2018.
Sadržaj
Uvod ...................................................................................................................................... 1
1. Općenita struktura ZIP formata ..................................................................................... 2
1.1. Lokalni zapisi ........................................................................................................ 4
1.2. Centralni direktorij ................................................................................................ 5
1.3. Polja u zaglavljima ................................................................................................ 6
1.4. Kraj centralnog direktorija..................................................................................... 7
1.5. Dodatni zapisi ........................................................................................................ 8
Zaključak ............................................................................................................................. 10
Literatura ............................................................................................................................. 11
1
Uvod
ZIP je arhivski datotečni format koji podržava kompresiju podataka bez gubitaka. ZIP
arhiva može sadržavati jednu ili više datoteka koje mogu, ali ne moraju, biti komprimirane
(engl. compressed). Format dozvoljava više kompresijskih algoritama među kojima je
najčešći DEFLATE algoritam koji komprimira podatke bez gubitaka koristeći kombinaciju
LZ77 algoritma i Huffmanovog kodiranja. ZIP format je osmislio Phillip Katz 1989.
godine. Prva implementacija nastala je u tvrtci PKWARE u alatu PKZIP [1].
ZIP format je podržan u mnogim programskim alatima. Microsoft ima ugrađenu podršku
za ZIP format od 1998. godine, a Apple je uveo podršku od operacijskog sustava Mac OS
X 10.3 pa nadalje. Također, većina besplatnih operacijskih sustava imaju ugrađenu
podršku za ZIP format.
ZIP datoteke uobičajeno koriste nastavke „.zip“ ili „.ZIP“ i MIME tip application/zip [2].
Neki od poznatih nastavaka koji koriste ZIP format su .JAR, .WAR, .DOCX, .XLSX,
.PPTX, .ODT i drugi.
2
1. Struktura ZIP formata
ZIP datoteke se mogu identificirati preko metapodataka koji se sastoje od definiranih
zapisa (engl. record) koji sadrže informacije potrebne za održavanjem datoteka
spremljenih u ZIP arhivi. Svaki zapis se identificira korištenjem potpisa zaglavlja (engl.
header signature), tj. magičnog broja (engl. magic number) koji je dodijeljen svakoj vrsti
zapisa. Svi potpisi započinju sa dva bajta, 0x4b50, koji reprezentiraju slova „PK“ [5].
ZIP datoteke su arhivske datoteke koje mogu pohranjivati više datoteka. ZIP datoteke bi
trebale sadržavati barem jednu datoteku [5]. Pohranjene datoteke mogu biti komprimirane
korištenjem različitih metoda, ali se mogu pohraniti i bez prethodnog komprimiranja.
Svaka datoteka je zasebno pohranjena čime je omogućeno da različite datoteke iste arhive
budu komprimirane različitim metodama. Datoteke u arhivi je moguće zasebno
dekomprimirati ili je moguće dodati nove datoteke u arhivu bez da se čitava arhiva prije
toga mora komprimirati ili dekomprimirati.
Na slici 1.1. prikazana je općenita struktura arhive koja se sastoji od N datotečnih zapisa
(engl. file entry) i centralnog direktorija (engl. central directory) koji sadrži N zapisa.
Svaki datotečni zapis sastoji se od zaglavlja i podataka.
Slika 1.1 Struktura ZIP arhive [6]
3
Centralni direktorij nalazi se na kraju datoteke i sadrži zapise u kojima je navedeno koje se
datoteke nalaze u arhivi i gdje se one nalaze unutar arhive. Svaka ZIP arhiva mora imati
jedan i samo jedan kraj centralnog direktorija (engl. end of central directory record).
Ukoliko ga nema, tada se datoteka smatra praznom ZIP datotekom. U tablici 1.1. prikazana
je detaljnija struktura arhive. Ispred svake datoteke koja je dodana u arhivu nalazi se
lokalno zaglavlje datoteke (engl. local file header), enkripcijsko zaglavlje (engl. encryption
header) i opcionalni opisnik podataka (engl. dana descriptor). Svako lokalno zaglavlje
datoteke ima i odgovarajuće centralno zaglavlje datoteke (engl. central directory header)
koje se nalazi u centralnom direktoriju arhive. Nakon lokalnog zaglavlja datoteke slijede
komprimirani ili pohranjeni podaci za tu datoteku. Ako je datoteka kriptirana, dodaje se
enkripcijsko zaglavlje koje se smješta između lokalnog zaglavlja datoteke i kriptiranih
podataka.
Tablica 1.1 Raspored zapisa u arhivi
Local file header 1
Encryption header 1
File data 1
Data descriptor 1
…
Local file header n
Encryption header n
File data n
Data descriptor n
Archive decryption header
Archive extra data record
Central directory header 1
…
4
Central directory header n
Zip64 end of central directory record
Zip64 end of central directory locator
End of central directory record
ZIP arhiva može biti podijeljena na segmente korisnički definirane veličine, a sve
vrijednosti moraju biti pohranjene u little-endian poretku bajtova. Lokalno zaglavlje
datoteke, enkripcijsko zaglavlje i kraj centralnog direktorija nisu komprimirani, ali
centralni direktorij, bez kraja centralnog direktorija, može biti komprimiran. Kao što je
prikazano u tablici 1.1., nakon podataka datoteke može slijediti opisnik podataka. Opisnici
podataka koriste se kako bi olakšali datotečno strujanje ZIP -a (engl. ZIP file streaming).
1.1. Lokalni zapisi
U tablici 1.2 prikazana su polja zaglavlja lokalne datoteke. Odmah poslije zaglavlja nalaze
se podaci datoteke. U slučaju da su podaci kriptirani, tada se između zaglavlja i kriptiranih
podataka nalazi i enkripcijsko zaglavlje.
Tablica 1.2 Zaglavlje lokalne datoteke
Odmak Veličina [B] Opis
0 4 Magic number zaglavlja lokalne datoteke = 0x04034b50 (little endian)
4 2 Minimalna verzija potrebna da bi se datoteka mogla raspakirati
6 2 Zastavica opće namjene
8 2 Kompresijska metoda
10 2 Vrijeme zadnje modifikacije datoteke
12 2 Datum zadnje modifikacije datoteke
14 4 CRC-32
18 4 Komprimirana veličina
22 4 Nekomprimirana veličina
5
26 2 Duljina imena datoteke (n)
28 2 Duljina dodatnog polja (m)
30 n Ime datoteke
30+n m Dodatno polje
Nakon podataka datoteke može se nalaziti opisnik podataka lija je struktura prikazana u
tablici 1.3. Opisnik ne mora imati polje s magičnim brojem, a ima polja u kojima se nalazi
CRC-32 sažetak i veličine komprimirane i nekomprimirane datoteke. Opisnik postoji
ukoliko je treći bit zastavice opće namjene postavljen.
Tablica 1.3 Opisnik podataka
Odmak Veličina [B] Opis
0 0/4 Magic number opisnika podataka = 0x08074b50 (opcionalan)
0/4 4 CRC-32
4/8 4 Komprimirana veličina
8/12 4 Nekomprimirana veličina
1.2. Centralni direktorij
Centralni direktorij sastoji se od zapisa zaglavlja centralnog direktorija (u arhivi s N datoteka,
postoji N zaglavlja centralnog direktorija) i kraja centralnog direktorija.
Zapis zaglavlja centralnog direktorija opisuje datoteku koja se nalazi u arhivi. U tablici 1.4.
dana su polja zaglavlja opisana odmakom (engl. offset), veličinom u bajtovima i opisom
polja. Važno je naglasiti da su podaci u arhivi zapisani korištenjem little endian poretka
bajtova.
Tablica 1.4 Zaglavlje centralnog direktorija
Odmak Veličina [B] Opis
0 4 Magic number centralnog direktorija = 0x02014b50 (little endian)
6
4 2 Verzija u kojoj je napravljena datoteka
6 2 Minimalna verzija potrebna da bi se datoteka mogla raspakirati
8 2 Zastavica opće namjene
10 2 Kompresijska metoda
12 2 Vrijeme zadnje modifikacije datoteke
14 2 Datum zadnje modifikacije datoteke
16 4 CRC-32
20 4 Komprimirana veličina
24 4 Nekomprimirana veličina
28 2 Duljina imena datoteke (n)
30 2 Duljina dodatnog polja (m)
32 2 Duljina komentara datoteke (k)
34 2 Broj diska na kojem datoteka počinje
36 2 Unutarnja svojstva datoteke
38 4 Vanjska svojstva datoteke
42 4 Relativni odmak lokalnog zaglavlja
46 n Ime datoteke
46+n m Dodatno polje
46+n+m k Komentar datoteke
1.3. Polja u zaglavljima
Zastavica opće namjene velika je 2 bajta (16 bitova). Bit 0 će biti postavljen ako je
datoteka kriptirana. Bitovi 1 i 2 imaju značenje u slučaju da se za metode kompresije
koristi Imploding ili Deflating, inače nisu definirane. Bit 1 također ima značenje ako se
koristi LZMA metoda kompresije. Ako je bit 3 postavljen, tada se crc-32, komprimirana
veličina i nekomprimirana veličina postavlja na nula u zapisu centralnog direktorija i
upisuje se u opisnik podataka (engl. data descriptor) koji se nalazi nakon komprimiranih
podataka. Bit 4 je rezerviran za korištenje u slučaju. Bit 5 označava da je datoteka u biti
7
komprimirana podatkovna zakrpa (engl. compressed patched data). Bit 6 označava jaku
enkripciju (engl. strong encryption). Bitovi 7, 8, 9 i 10 se trenutno ne koriste. Ako je bit 11
postavljen, imena datoteka i komentari za datoteku moraju biti kodirani koristeći UTF-8.
PKWARE je rezervirao bit 12 za naprednu kompresiju. Bit 13 se postavlja ako kriptiramo
centralni direktorij i on ukazuje na to da su podaci u lokalnom zaglavlju maskirani kako bi
sakrili pravu vrijednost.
Polje za metodu kompresije označava kompresijski algoritam koji se koristi. Neke od
vrijednosti su: 0 - datoteka je pohranjena bez kompresije; 1 - koristi se Shrunk algoritam;
2,3,4,5 – koristi se Reducer algoritam s kompresijskim faktorom 1,2,3 i 4; 6 – označava
Implode; 8 – koristi se Deflate; 9 – koristi se Deflate64(tm); 12 – BZIP2 algoritam, 14 –
LZMA algoritam.
Datum i vrijeme zapisani u poljima kodirani su standardnim MS-DOS formatom.
CRC-32 je hash algoritam koji se koristi za zaštitnu sumu datoteke. Kad se datoteka
raspakira, izračuna se njena zaštitan suma algoritmom CRC-32 i usporedi s navedenom
sumom u zaglavlju.
Veličine imena datoteke, dodatnog polja i komentara su maksimalno 65535 bajtova.
Polje za unutarnja svojstva datoteke je veliko 2 bajta (16 bitova). Bitovi 1 i 2 rezervirani su
od stranke PKWARE-a. Ako je najmanji bit u polju postavljen, tada je datoteka navodno
ASCII ili tekstualna datoteka. Inače sadrži binarne podatke.
Vanjska svojstva datoteke ovise o operacijskom sustavu.
Relativni odmak do lokalnog zaglavlja je odmak od početka prvog diska na kojem se
datoteka pojavljuje do početka lokalnog zaglavlja.
1.4. Kraj centralnog direktorija
Programi koji čitaju ZIP arhive počinju čitanje od kraja centralnog direktorija. Kraj
centralnog direktorija označen je magičnim brojem 0x06054b50. Zaglavlje je veliko 22
bajta bez komentara koji može biti veličine do 65535 bajtova. Struktura kraja centralnog
direktorija prikazana je u tablici 1.2.
8
Tablica 1.5 Kraj centralnog direktorija
Odmak Veličina [B] Opis
0 4 Magic number kraja centralnog direktorija = 0x06054b50 (little endian)
4 2 Broj diska na kojem se nalazi kraj centralnog direktorija
6 2 Disk na kojem započinje centralni direktorij
8 2 Broj zapisa centralnog direktorija na ovom disku
10 2 Ukupni broj zapisa centralnog direktorija
12 4 Veličina centralnog direktorija (u bajtovima)
16 4 Odmak na početak centralnog direktorija u odnosu na početni broj diska
20 2 Duljina komentara (n)
22 n Komentar
U polju s veličinom centralnog direktorija upisana je vrijednost koja odgovara ukupnoj
veličini svih zapisa zaglavlja centralnog zaglavlja, tj. veličina centralnog direktorija bez
kraja centralnog direktorija.
U polju u kojem piše odmak od početak centralnog direktorija u odnosu na početni broj
diska misli se na disk na kojem centralni direktorij počinje. Broj diska na kojem počinje
centralni direktorij ne mora biti isti kao broj diska na kojem je kraj centralnog direktorija
ili datoteka.
Komentar ZIP arhive nije kriptiran, već je pohranjen bez ikakve enkripcije i u njemu se ne
bi trebali nalaziti osjetljivi podaci.
1.5. Dodatni zapisi
Polja u zapisima su veličine 2 ili 4 bajta, što znači da je veličina datoteka koje se mogu
smjestiti u arhivu ograničena. Ovaj problem riješen je dodatnim zip64 zapisima čija su
polja veličine 8 bajtova. Ako je vrijednost polja u zaglavlju postavljena na FFFF ili 0000,
prava vrijednost može naći u zip64 zapisu. Svako zaglavlje centralnog direktorija može
imati svoj zip64 zapis, ovisno o potrebi. U slučaju malih datoteka i nekriptiranog sadržaja,
zip arhiva imat će lokalna zaglavlja, podatke, zaglavlja centralnog direktorija i kraj
centralnog direktorija.
9
1.6. Sigurnost
ZIP podržava enkripciju arhive. Podržana je jednostavna simetrična enkripcija korištenjem
lozinke, ali je ova vrsta zaštite podložna KPA napadima (known-plaintext attacks) i u
nekim slučajevima još pogoršana lošom implementacijom generatora nasumičnih
brojeva.[3]
Od verzije 5.2. specifikacije ZIP formata uvedene su nove značajke poput novih
kompresijskih i enkripcijskih (npr. AES) metoda. WinZip je razvio standard na bazi AES-a
koji se također koristi u 7-Zip-u i Xceed-u.[4] Neke tvrtke u svojim proizvodima koriste i
druge formate.
Od verzije 6.2. specifikacije ZIP formata uvedena je značajka kriptiranja imena datoteka
koja kriptira metapodatke pohranjene u centralnom direktoriju arhive, ali lokalna zaglavlja
ostaju nekriptirana. Kada je centralni direktorij kriptiran, lokalna zaglavlja mogu biti
maskirana da sakriju stvarne vrijednosti.
Osim lokalnih zaglavlja, komentar arhive također nije kriptiran.
10
Zaključak
ZIP arhive omogućuju pohranu datoteka uz primjenu nekog od kompresijskih algoritama.
Datoteke u arhivi su ne ovisne jedna o drugoj čime je omogućeno dodavanje, zamjena ili
brisanje datoteke unutar arhive bez utjecanja na ostale datoteke. Datoteke ne moraju biti
komprimirane istim algoritmom. Svaka arhiva mora imati kraj centralnog direktorija, a
svaka od datoteka u arhivi mora imati lokalno zaglavlje datoteke i pripadajući zapis
centralnog zaglavlja datoteke koji se nalazi u centralnom direktoriju. U slučaju da je
datoteka kriptirana dodaje se i enkripcijsko zaglavlje, a u nekim slučajevima se koriste i
dodatna zip64 zaglavlja. Zaglavlja zapisa uglavnom su veličine 2 i 4 bajta. Koristi se little-
endian poredak bajtova. Arhive se mogu kriptirati s nekoliko algoritama čime je osigurano
da sadržaj podataka nije dostupan osobama koje nemaju ključ za njihovo dešifriranje.
11
Literatura
[1] THE NEW YORK TIMES, Phillip Katz, Computer Software Pioneer, 37,
http://www.nytimes.com/2000/05/01/us/phillip-katz-computer-software-pioneer-
37.html, nastalo 1.5.2000., dohvaćeno 24. 1. 2018.
[2] IANA, Registration of a new MIME Content-Type/Subtype,
http://www.iana.org/assignments/media-types/application/zip, nastalo 20.7.1993.,
dohvaćeno 24.1.2018.
[3] STAY, MICHAEL, ZIP Attacks with Reduced Known Plaintext“,
http://math.ucr.edu/~mike/zipattacks.pdf, dohvaćeno 24.1.2018.
[4] WINZIP, AES Encryption Information: Encryption Specification AE-1 and AE-2,
http://www.winzip.com/aes_info.htm, zadnja izmjena: 30.1.2009, dohvaćeno
24.1.2018.
[5] PKWARE INC., APPNOTE.TXT - .ZIP File Format Specification,
https://www.loc.gov/preservation/digital/formats/digformatspecs/APPNOTE%28201
20901%29_Version_6.3.3.txt, dohvaćeno 24.1.2018.
[6] https://en.wikipedia.org/wiki/File:ZIP-64_Internal_Layout.svg, 24.1.2018.