13
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.

Analiza formata ZIP arhive - nevena.lss.hrnevena.lss.hr/recordings/fer/predmeti/racfor/2018/seminari/mluketin/seminar.pdf · najčešći DEFLATE algoritam koji komprimira podatke

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.