15
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA SEMINAR SVG format datoteke Filip Sakač Za predmet: Računalna forenzika Zagreb, siječanj, 2017.

SVG format datoteke · pixel), vektorska grafika sliku pohranjuje pomoću poligona. Poligoni su dvodimenzijonalna geometrijska tijela omeđena konačnim brojem dužina. Glavna prednost

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

SEMINAR

SVG format datoteke

Filip Sakač

Za predmet: Računalna forenzika

Zagreb, siječanj, 2017.

Sadržaj

Sadržaj ....................................................................................................................... 2

Uvod ........................................................................................................................... 3

Format datoteke ......................................................................................................... 4

Prikazivanje elemenata u SVG slici......................................................................... 4

Osnovni elementi SVG slike .................................................................................... 4

Složeni elementi ...................................................................................................... 7

Transformacije ........................................................................................................ 7

Primjeri svg datoteka .................................................................................................. 8

Metapodatci .............................................................................................................. 10

Steganografija koristeći SVG datoteke ..................................................................... 11

SVG datoteke i virusi ................................................................................................ 13

Zaključak .................................................................................................................. 14

Izvori ......................................................................................................................... 15

Uvod

SVG (Scalable Vector Graphics) je format za pohranjivanje slika vektorske

grafike, a temelji se na jeziku XML (Extensible Markup Language). Za razliku od

rasterske grafike koja sliku pohranjuje kao pravokutnu mrežu točaka (piksela eng.

pixel), vektorska grafika sliku pohranjuje pomoću poligona. Poligoni su

dvodimenzijonalna geometrijska tijela omeđena konačnim brojem dužina. Glavna

prednost takvih slika je da ih se može beskonačno uvećati bez gubitka kvalitete.

SVG datoteke obično imaju ekstenziju .svg, a pošto se temelje na XML

standardu može ih se čitati i uređivati u tekstualnom obliku. Dodatna prednost

korištenja XML formata je da se njime može upravljati pomoću JavaScripta, što

omogućuje animiranje SVG slike i interakciju s korisnikom, na isti način kao i HTML

dokument. Slike u SVG formatu su obično manje od slika u rasterskim formatima (.jpg,

.png, .bmp) i mogu se efikasno komprimirati bez gubitaka isto kao i tekst (komprimirana

.svg slika koristi ekstenziju .svgz).

SVG specifikacija je otvoreni standard razvijen od strane World Wide Web

Consortiuma (W3C) 1999. godine [1]. Svi moderni web pretraživači imaju ugrađenu

podršku za prikazivanje slika u SVG formatu, također postoje mnogi alati za izradu i

obradu SVG slika. Primjeri alata za obradu SVG slika otvorenog koda su: Inkscape,

LibreOffice Draw i Dia, a primjeri vlasničkih programa su: Adobe Ilustrator i Corel Draw.

Aktualna verzija SVG specifikacije je 1.1 a u izradi je novija verzija 2.0. Postoje i

posebne specifikacije s ograničenim mogućnostima prilagođenim mobilnim uređajima

SVG Basic i SVG Tiny.

Format datoteke

SVG datoteka je tekstualna datoteka koja se temelji na XML formatu. Kao i sve

XML datoteke tako i SVG počinje sa XML deklaracijom u prvom redu kao što je

prikazano u Kodu1.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

Kod1. Deklaracija XML dokumenta

Osnovni XML element koji sadrži sve ostale SVG elemente je <svg>. Jedan

<svg> element također može sadržavati i druge <svg> elemente što omogućuje

ugnježđivanje slika. S atributima <svg> elementa moguće je definirati osnovne

informacije o slici kao što su: verzija SVG jezika kojim je dokument pisan, širina slike

u pikselima, visina slike u pikselima, klasa elementa (isto kao i HTML može se koristiti

za selekciju elemenata, ili definiranje CSS stila). Ako je <svg> element ugniježden

mogu se dodatno definirati atributi x i y kao koordinate na kojima je potrebno prikazati

element.

Prikazivanje elemenata u SVG slici

Elementi SVG slike prikazuju se u kartezijevom koordinatnom sustavu jednako

kao i kod HTML-a. Ishodište koordinatnog sustava je gornji lijevi kut ekrana, X

vrijednosti rastu prema desno, a Y vrijednosti rastu prema dolje. Mjerna jedinica koja

se koristi su pikseli. Elementi se na sliku crtaju u redoslijedu kojim se pojavljuju u

datoteci, to znači da noviji elementi mogu u potpunosti ili djelomično prekrivati

elemente koji su definirani ranije.

Osnovni elementi SVG slike

<line>

o Koristi se za iscrtavanje linije između dvije točke (x1,y1) i (x2,y2),

obavezno je također definirati i boju da bi se linija iscrtala pomoću

atributa stroke. U Kodu2 je prikazan osnovni primjer crvene linije između

točaka (5,5) i (90,90)

<line x1="5" y1="5" stroke="red" x2="90" y2="90" />

Kod2. Implementacija linije

o Od ostalih atributa mogu se naglasiti: stroke-width za definiranje širine

linije, stroke-linecap koji definira dali je kraj linije zaobljen ili ravan, te

stroke-dasharray s kojim je moguće definirati isprekidanu liniju s točno

određenim segmentima

<rect>

o Koristi se da bi se nacrtao kvadrat, određene visine i širine atributima

height i width, i s definiranim koordinatama gornjeg lijevog kuta atributima

x i y. U Kodu3. je prikazan osnovni primjer kvadrata.

<rect x="60" y="95" height="30" width="50" />

Kod3. Implementacija kvadrata

o Neki ostali važniji atributi: fill za definiranje ispune kvadrata, ako atribut

nije naveden koristi se crna boja za ispunu. Osim boje kvadrat može biti

ispunjen i kompleksnijim efektima kao što su gradijent. Atributi stroke,

stroke-width i stroke-dasharray imaju jednaku funkciju kao i u <line>

elementu.

<circle>

o Element se koristi da bi se nacrtao krug, središte kruga definirano je

koordinatama cx i cy, a polumjer je definiran atributom r. S tim elementom

je također moguće koristiti i ostale atribute navedene kod elemenata

<line> i <rect>. U Kodu4. je prikazan osnovni primjer elementa <circle>.

<circle cx="80" cy="50" r="40"/>

Kod4. Implementacija kruga

<elipse>

o Element je vrlo sličan elementu <circle> samo što koristi dva polumjera

rx i ry. Polumjeri označavaju duljinu horizontalne i vertikalne poluosi.

Elipsa je uvijek jednako orijentirana osim ako se nad njom ne izvrši

rotacija. U Kodu5. je prikazan osnovni primjer elipse.

<ellipse cx="80" cy="110" rx="75" ry="105"/>

Kod5. Implementacija elipse

<path>

o Najbitniji element u SVG formatu, s njim je moguće implementirati sve do

sad navedene oblike. Može koristiti sve navedene atribute za opis linije i

ispunu kao i dosad navedeni elementi. Razlika je da su svi vrhovi

poligona pohranjeni u atributu d kao string sa vrijednostima koordinata

napisanima u nizu. Osnovna implementacija prikazana je u Kodu6.

o Navedene koordinate u stringu povezuju se linijama, te se na kraju

dobiveni lik ispuni bojom. Način na koji se povezuju vrhovi mogu se

definirati slijedećim slovima napisanim ispred koordinate: L – ravna linija,

Q – kvadratna linija, C – kubna linija, A – eliptični odsječak i M pomicanje

bez crte. Ako slovo nije navedeno pretpostavlja se ravna linija. Na kraju

stringa se sa oznakom Z označava spajanje s početnom točkom.

<path d="M 50,100 150,200 50,150"/>

Kod6. Implementacija puta

<image>

o Omogućuje uključivanje slika rasterske grafike u SVG sliku. Funkcionira

slično kao i <rect> element s dodatnim atributom xlink:href koji pokazuja

na lokaciju slike. Slika se prilagodi dimenzijama navedenima u elementu.

<text>

o Ovaj element dodaje tekst u SVG sliku. Za razliku od ostalih slika tekst u

SVG slici se može označavati, kopirati i pretraživati kao da se nalazi u

HTML-u. Sam tekst koji se želi prikazati je sadržan unutar <tekst>

elementa. S atributom font-family moguće je definirati željeni font na

jednak način kao i u CSS-u. Atribut font-size definira veličinu korištenog

fonta. U Kodu7. je prikazan primjer tekst elementa.

<text x="0" y="100" font-size="80" fill="red">Example text</text>

Kod7. Implementacija elipse

o SVG ima definirano još mnogo atributa kojima se utječe na prikaz teksta.

Zanimljiva je mogućnost prikaza teksta na način da prati neki definirani

put. To se može postići stavljanjem elementa <textPath> unutar <text>

elementa, s atributom koji pokazuje na id neke već definirane krivulje.

Složeni elementi

<g> o Služi za grupiranje više osnovnih elemenata u jednu cjelinu. Takvo

grupiranje omogućava stvaranje kompleksnijih objekata, koji se mogu

koristiti u ostatku slike. Elemente koje treba skupiti u grupu se

jednostavno stave kao djeca ovom elementu. Nad cijelom grupom se

kasnije mogu izvršavati transformacije, te se grupa može referencirati

tako da joj se zada atribut id.

o Ovom elementu moguće je definirati atribute koje nasljeđuju njegova

djeca tako da postave vrijednost zadanog atributa na inherit. Na taj način

moguće je na jednom mjestu promijeniti više atributa elemenata djece.

<use>

o Koristi se da se napravi kopija nekog elementa ili grupe elemenata.

Omogućuje ponovno iskorištavanje elemenata. Kao atribut xlink:href

prima id elementa kojeg treba kopirati.

Transformacije

Transformacije se mogu izvršiti na svim dosada navedenim elementima na način da

im se doda atribut transform koji sadrži string s transformacijama koje treba izvršiti nad

elementom. Transformacije se u stringu navode kao pozivi funkcija, a međusobno ih

se razdvaja zarezom. Postoje slijedeće transformacije:

translate(dx, dy)

o Pomiče zadani element za dx piksela po x osi, i dy piksela po y osi.

rotate(r, cx, cy)

o Rotira element za r stupnjeva oko točke s koordinatama (cx, cy)

scale(f)

o Koristi se za skaliranje objekta za faktor f. Radi na način da sve

koordinate pomnoži tim faktorom, što može kao posljedicu imati

pomicanje objekta prema ili od ishodišta. Također ako je f negativan

objekt će biti zrcaljen.

scale(fx, fy)

o Jadnako kao i scale transformacija, samo s drugačijim faktorima za

povećanje po x i y osima.

Osim ovdje navedenih elemenata i transformacija, SVG format nudi i naprednije

opcije kao što su: gradijenti, uzorci, maske, razni filteri, generiranje fraktala, itd.

Primjeri svg datoteka

Najzanimljivije svojstvo vektorske grafike, i prednost nad rasterskom grafikom,

je to da se slike mogu skalirati bez gubitka kvalitete. Da bi se to svojstvo demonstriralo

preuzet je primjer SVG slike sa stranice [2] te je uz pomoć alata [3] pretvorena u PNG

format (format rasterske grafike). Na Slici1 prikazana je originalna slika u mjerilu 1:2.

Na Slici2 je prikazan usporedba slika u SVG i PNG pormatu kada su uvećane i

fokusirane na jedno oko lika na slici. Može se uočiti da kvaliteta lijeve slike se nije

promjenila s njenim uvećavanjem, dok su na desnoj slici vidljivi pikseli koji su posljedica

povećanja slike i konačne rezlučivosti. Danas postoji trend povećanja vrsta uređaja

koja se povezuju na Internet, a i s time postoji sve više ekrana različitih dimenzija i

razlučivosti, od mobilnih telefona do TV prijamnika. Zbog toga je danas svojstvo

promjene dimenzija SVG slika bez gubitka kvalitete vrlo zanimljivo.

Slika1. Originalna slika

Slika2. Uvećane slike u SVG i PNG formatu

U Kodu8. prikazan je kod jedne jednostavne SVG slike u kojem je

implementirana većina osnovnih slikovnih elemenata. Rezultat tog koda prikazan je na

Slici 3. Na slici se može primijetiti kako zelena linija prolazi ispod kruga, te kako je tekst

napisan iznad plavog poligona, tu je prikazan redoslijed iscrtavanja SVG slike u kojem

elementi koji su kasnije definirani u kodu prekrivaju prijašnje elemente.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<svg xmlns="http://www.w3.org/2000/svg"

width="500"

height="500">

<line x1="50" y1="50" x2="170" y2="270" stroke-width="2.5"

stroke="green"/>

<circle cx="80" cy="160" r="40" fill="red" stroke="black" stroke-

width="20"/>

<rect x="160" y="25" height="100" width="200" fill="yellow"

stroke="black" stroke-width="3"/>

<path d="M 350 200 L 400 400 170 150Z" fill="blue" stroke="black"

stroke-width="3"/>

<text x="100" y="320" font-size="70" fill="red">Some text</text>

</svg>

Kod8. SVG slika s implementiranim osnovnim elementima

Slika 3. Prikaz SVG slike iz Koda8.

Metapodatci

U standardu SVG definiran je element <metadata> koji je namijenjen da sadrži

metapodatke o SVG slici. Preporuča se da postoji samo jedan takav element u SVG

dokumentu, kao dijete vanjskog SVG elementa. Sadržaj <metadata> elementa su

elementi nekog drugog jezika temeljenog na XML-u koji je namijenjen opisu

metapodataka, kod SVG slika se u tu svrhu najčešće koristi RDF.

RDF (Resource Description Framework) je obitelj W3C specifikacija koja je

namijenjena kao model za spremanje metapodataka čitljiv računalu [4]. Vezija 1.0

objavljena je 2004. godine, a trenutna verzija 1.1 je iz 2014. godine. RDF model je

implementiran u više jezika, verzija koja koristi XML zove se RDF/XML. Osnovna

struktura u RDF formatu je uređena trojka (subjekt, predikat, objekt), a označava neki

odnos, prikazan u predikatu, postoji između subjekta i objekta. Takva struktura je

pogodna za opis metapodataka, na primjer predikat „je autor“, subjekt „ime autora“, a

objekt „SVG slika“. Primjer SVG datoteke sa metapodacima prikazan je u Kodu9.

<?xml version="1.0" standalone="yes"?>

<svg width="400" height="300" version="1.1"

xmlns = 'http://www.w3.org/2000/svg'>

<metadata>

<rdf:RDF

xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc = "http://purl.org/dc/elements/1.1/" >

<rdf:Description about="http://example.org/myfoo"

dc:title="MyFoo Financial Report"

dc:description="$three $bar $thousands $dollars $from 1998

$through 2000"

dc:publisher="Example Organization"

dc:date="2000-04-11"

dc:format="image/svg+xml"

dc:language="en" >

<dc:creator>

<rdf:Bag>

<rdf:li>Irving Bird</rdf:li>

<rdf:li>Mary Lambert</rdf:li>

</rdf:Bag>

</dc:creator>

</rdf:Description>

</rdf:RDF>

</metadata>

</svg>

Kod9. Primjer SVG slike sa metapodatcima u RDF formatu

Steganografija koristeći SVG datoteke

Steganografija je način sakrivanja tajnih informacija u nekim drugim slikama,

tekstovima, videima ili datotekama. Za razliku od kriptografije koja tajnu komunikaciju

kodira na način koji ne nečitljiv trećoj strani, steganografija prikriva da komunikacija

uopće postoji. Korištena je u mnogim slučajevima kroz povijest, a i u današnje vrijeme

kao dodatak kriptografiji, ili u nekim zemljama gdje je kriptografija zabranjena. U ovom

radu opisuju se tehnike sakrivanja tajnih informacija unutar SVG datoteka.

Steganografija u SVG datotekama može koristiti vrlo jednostavne metode, koje

je lako koristiti i kasnije pročitati, do vrlo kompleksnih metoda opisanih u znanstvenim

radovima. Neke jednostavne metode koje bi se mogle koristiti je postavljanje teksta

jedne boje na istobojnu površinu. Kod gledanja slike tekst bio neprimjetan, no primatelj

poruke koji zna da tekst postoji mogao bi ga jednostavno označiti mišem i pročitati.

Primjer takve jednostavne steganografije prikazan je na Slici4.

Slika4. Kvadrat sa skrivenim tekstom prije i poslije označavanja mišem

Malo bolje skriven tekst bi se postigao tako da se tekst stavi iza kvadrata

(definira se prije u SVG kodu), tada tekst ne bi bio vidljiv kada bi se kvadrat označilo

mišem, no mogao bi se pronaći pretraživanjem u pregledniku, ili označavanjem

kvadrata i kopiranjem teksta pa njegovim lijepljenjem u neku tekstualnu datoteku (ctrl

+ c, ctrl + v).

Naprednije tehnike sakrivanja datoteka u SVG datoteke mogu se podijeliti u

dvije kategorije: odstupanje (engl. Jitter) i ugrađivanje (engl. embedding) [5]. Takve

metode pokušavaju sakriti postojanje informacije i iz prikaza slike, i iz njezinog koda.

Sakrivanje informacije odstupanjem temelji se na malim, oku nevidljivim

promjenama u slici, koje se koriste za prijenos informacija. Primjer takve tehnike je da

se informacija koja se želi prenijeti najprije kodira u binarne podatke, a zatim u niz

decimalnih brojeva. Ti decimalni brojevi dodaju se kao znamenke iza decimalne točke

svim koordinatama u dokumentu. Takva promjena u dokumentu je oku nevidljiva na

konačnom prikazu slike. Da bi se dodatno informacija sakrila i u njenom XML obliku,

na svim točkama koje su promijenjene izvrši se neka mala reverzibilna transformacija

(na primjer rotacija za vrlo mali kut), to promjeni decimalni zapis broja te se više

informacija ne može jednostavno pročitati. Transformacija koja je izvršena koristi se

kao svojevrsni ključ, primatelj ako ju zna može na svim točkama izvršiti reverznu

transformaciju te zatim pročitati sakrivenu kodiranu informaciju [6].

Steganografija ugrađivanjem radi na način da se u sliku dodaju elementi koji ne

utječu na njezin prikaz, a i nisu vidljivi iz koda slike. Primjer takve tehnike je dodavanje

točaka na ravne linije elemenata slike. Dodatne točne ne utječu na prikaz slike, a mogu

sadržavati informacije u sebi. Ako se ravna linija podijele na segmente duljina tih

segmenta mogla bi predstavljati određenu kombinaciju bitova (na primjer ako je

dozvoljeno 256 različitih duljina segmenata, svaka dodana točka označavala bi jedan

bajt informacije) [5]. Problem kod ove tehnike je da bi treća strana kod detaljnije analize

koda mogla primijetiti veliku količinu točaka na poligonima koji izgledaju jednostavnije

u prikazu.

SVG datoteke i virusi

Same SVG datoteke i njihovo pregledavanje ne može naštetiti računalu budući

da se radi o običnoj XML datoteci, no SVG datoteke mogu korisnike navesti na drugi

sadržaj koji može sadržavati viruse. Glavni mehanizam kojim se to postiže su <script>

elementi. SVG podržava <script> elemente isto kao i HTML dokumenti, a pošto se

većina SVG slika otvara pomoću web preglednika moguće je izvršiti neki JavaScript

kod na računalu.

2015. godine hakirani Facebook profili koristili su se za širenje jedne SVG slike

po Facebooku. Korisnici su otvarali sliku jer su mislili da je slikovni format bezopasan,

a i zato jer je slika dolazila od njihovih Facebook prijatelja. SVG slika se najčešće

otvara s web preglednikom, a u ovoj slici bila je sadržana skripta koja otvara dodatan

tab u pregledniku s stranicom koja je vrlo slična YouTubeu, ali je zapravo dizajnirana

za prijevaru korisnika. Stranica je korisnika tražila da instalira određeni program pod

isprikom da je potreban codec da bi se prikazao video sadržaj. Naravno nije se radilo

o codecu nego o malicioznom programu klase ransomware, takav program enkriptira

sve korisnikove podatke na računalu, te traži novac kako za šifru kojim bi se oni

otključali [7] [8].

Zaključak

SVG je format datoteke koji se koristi za pohranjivanje slika vektorske grafike,

a temelji se na jeziku XML, i specificiran je W3C standardom. Vektorska grafika

razlikuje se od standardne rasterske grafike (formati kao što su JPG, PNG, BMP, ..) u

tome da sliku ne pohranjuje kao niz piksela, već kao geometrijske oblike i krivulje.

Prednost koja se dobiva takvim opisom slike je da se slika može povećavati

beskonačno bez da izgubi oštrinu, što naravno nije slučaj kod rasterske grafike koja

ima ograničenu razlučivost. To svojstvo je vrlo zanimljivo u današnje vrijeme kada se

Internetu pristupa raznim uređajima koji imaju različite dimenzije ekrana, od mobilnih

telefona do TV prijamnika, pa web stranice moraju biti responzivne.

SVG slike opisane su kao tekstualna datoteka, i kao takve mogu se dobro

komprimirati standardnim kompresijskim metodama, što im omogućuje manju veličinu

od jednakih slika u rasterskim formatu. Zbog toga su SVG slike popularne na Internetu

jer se brže učitavaju, i danas svi poznatiji web preglednici podržavaju prikaz SVG slika.

Dodatno zanimljivo svojstvo SVG datoteka je da se njima može upravljati

pomoću koda u JavaScriptu, jednako kao i HTML dokumenti. JavaScript omogućuje

animiranje SVG slika, i interaktivnost s korisnikom, kao što je promjena slike kada se

preko nje prolazi mišem. No takva kompatibilnost s JavaScriptom također donosi i

probleme, jer daje hakerima mogućnosti širenja zlonamjernih web stranica. Iz tog

razloga, a i zbog sve veće popularnosti, SVG format je zanimljiv za računalnu

forenziku.

U ovom radu opisan je sam format SVG datoteke i elementi od kojih se sastoji

SVG slika, dani su primjeri slika na kojima je prikazano svojstvo povećavanja bez

gubitka kvalitete i kako se XML kod pretvara u sliku, zatim je opisan način kako se

pohranjuju metapodaci o SVG slici, što je uvijek zanimljivo za forenziku. U zadnja dva

poglavlja opisane su široke mogućnosti primjene SVG slika za steganografiju, i jedan

primjer gdje su SVG slike korištene za širenje zlonamjernih programa.

Izvori

[1] An SVG Primer for Today's Browsers, W3C, Rujan 2010, https://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html

[2] Open clip art, https://openclipart.org/

[3] SVG to PNG converter, http://svgtopng.com/

[4] RDF 1.1 XML Ssyntax, W3C preporuka, 25. veljače 2014, https://www.w3.org/TR/rdf-syntax-grammar/

[5] STEGANOGRAPHIC ALGORITHM FOR INFORMATION HIDING USING SCALABLE VECTOR GRAPHICS IMAGES, B. Madoš, J. Hurtuk, M. Čopjak, P. Hamaš, M. Ennert, Faculty of Electrical Engineering and Informatics, Technical University of Košice, Slovačka, 4. Studeni 2014, http://www.aei.tuke.sk/papers/2014/4/09_Mados.pdf

[6] Information Hiding in SVG by Affine Transformation with Small Perturbations, Chyuan-Huei Thomas Yang, Tsung-Ming Lin, Chin-Chih Chang, Husan-Chuang University, Hsinchu City, Taivan, 2008, http://www.inf.cyut.edu.tw/AIT2008/ft_251.pdf

[7] Soft2Secure, Beware of .svg file virus on Facebook, 22. Studeni 2016, http://soft2secure.com/knowledgebase/svg-file-virus

[8] Security Week, Cybercriminals Use SVG Files to Distribute Ransomware, 22. Svibanj 2015, http://www.securityweek.com/cybercriminals-use-svg-files-distribute-ransomware