PLNY TEXT (1.164Mb)
Total Page:16
File Type:pdf, Size:1020Kb
Sem vložte zadání Vaší práce. České vysoké učení technické v Praze Fakulta informačních technologií Katedra Softwarového Inženýrství Diplomová práce Obfuskace webových zdrojů Bc. Tomáš Budnikov Vedoucí práce: Ing. Jiří Hunka 12. ledna 2016 Poděkování Rád bych poděkoval vedoucímu mé diplomové práce Ing. Jiřímu Hunkovi a oponentovi Ing. Janu Matouškovi za poskytnutí odborných rad, věcné připo- mínky, ochotu a vstřícný přístup. Velké poděkování náleží také mé přítelkyni za její trpělivost a podporu. Děkuji také rodině za podporu po dobu mého studia. Prohlášení Prohlašuji, že jsem předloženou práci vypracoval(a) samostatně a že jsem uvedl(a) veškeré použité informační zdroje v souladu s Metodickým pokynem o etické přípravě vysokoškolských závěrečných prací. Beru na vědomí, že se na moji práci vztahují práva a povinnosti vyplývající ze zákona č. 121/2000 Sb., autorského zákona, ve znění pozdějších předpisů, zejména skutečnost, že České vysoké učení technické v Praze má právo na uzavření licenční smlouvy o užití této práce jako školního díla podle § 60 odst. 1 autorského zákona. V Praze dne 12. ledna 2016 . České vysoké učení technické v Praze Fakulta informačních technologií c 2016 Tomáš Budnikov. Všechna práva vyhrazena. Tato práce vznikla jako školní dílo na Českém vysokém učení technickém v Praze, Fakultě informačních technologií. Práce je chráněna právními před- pisy a mezinárodními úmluvami o právu autorském a právech souvisejících s právem autorským. K jejímu užití, s výjimkou bezúplatných zákonných li- cencí, je nezbytný souhlas autora. Odkaz na tuto práci Budnikov, Tomáš. Obfuskace webových zdrojů. Diplomová práce. Praha: České vysoké učení technické v Praze, Fakulta informačních technologií, 2016. Abstrakt Cílem této práce je zanalyzovat používané metody obfuskace zdrojových kódů webových aplikací a navrhnout nové metody pro obfuskaci kaskádových stylů. Navržené metody obfuskace jsou zaměřeny na obecné použití bez předpokladu znalosti cílového dokumentu. Správnost vybraných metod je verifikována na základě prototypové implementace obfuskátoru. Prototyp disponuje uspoko- jivou kvalitou obfuskace: Nárůst velikosti stylopisu se pohybuje kolem 2,5 – 3,5 násobku. Výsledky této práce přinášejí nové možnosti v oblasti ochrany kaskádových stylů před neoprávněným použitím. Klíčová slova Obfuskace, Kaskádové styly, CSS, autorství, bezpečnost Abstract The aim of this study is to analyze used methods of web applications code ob- fuscation and propose new methods for Cascading Style Sheets obfuscation. Proposed methods of code obfuscation are focused to general use, without assuming knowledge of a target document. The correctness of the chosen me- thods is verified on the basis of the obfuscator prototype implementation. The prototype has a satisfactory obfuscation quality: Increase in size of the ix stylesheet is around 2.5 – 3.5 times. The results of this study brings new possi- bilities in the field of Cascading Style Sheets protection against unauthorized use. Keywords Code obfuscation, Cascading Style Sheets, CSS, authorship, secu- rity x Obsah Úvod 1 Cíle práce . 2 Přístupy k informační bezpečnosti . 2 Definice pojmu obfuskace . 3 Role obfuskace na webu . 4 Technologie . 5 Cílová skupina . 5 1 Teorie obfuskace 7 1.1 Taxonomie obfuskačních transformací . 7 1.2 Skládání transformací . 11 1.3 Hodnocení kvality obfuskační transformace podle [1][2] . 12 1.3.1 Parametry analytického přístupu . 12 1.3.1.1 Potency (míra obskurity transformace) . 12 1.3.1.2 Resilience (míra energie vynaložené na deob- fuskaci) . 12 1.3.1.3 Složitost výsledného programu . 13 1.3.2 Parametry empirického přístupu . 13 2 Analýza používaných technik obfuskace 15 2.1 Hodnocení kvality . 15 2.2 Volba informačních zdrojů . 16 2.3 JavaScript . 16 2.3.1 jscrambler.com . 16 2.3.2 javascriptobfuscator.com . 18 2.3.3 Google Closure Compiler [3] . 19 2.3.4 JSFuck . 19 2.3.5 Deobfuskátoy . 21 2.3.5.1 Mozilla Firefox . 21 xi 2.3.5.2 jsbeautifier.org . 21 2.3.5.3 jsnice.org . 21 2.4 HTML . 22 2.4.1 htmlobfuscator.com . 22 2.4.2 colddata.com . 23 2.4.3 isnoop.net . 23 2.4.4 templateaccess.com . 24 2.5 CSS . 24 2.5.1 Minifikátory / kompresory . 24 2.5.2 Agregace CSS souborů . 25 2.5.3 CSS Preprocesory: SASS, LESS, Stylus, . 25 2.6 Další zdroje . 26 2.7 Zhodnocení použitých technik . 26 3 Návrh obfuskace CSS 27 3.1 Definice CSS . 27 3.1.1 Stylopisy a syntaxe . 27 3.1.2 Pravidla vyhodnocování pořadí kaskád . 28 3.1.2.1 Výpočet konkrétnosti pravidla . 28 3.2 Technologie a omezení . 29 3.3 Taxonomie navržených transformací . 32 3.3.1 Odstranění bílých znaků . 33 3.3.2 Odstranění komentářů . 34 3.3.3 Vyčlenění stylů do externích souborů . 34 3.3.4 Vložení mrtvého kódu . 34 3.3.5 Rozdělení stylu . 35 3.3.6 Sloučení stylů . 35 3.3.7 Změna pořadí stylů . 36 3.3.8 Přepisování hodnot . 36 3.3.9 Doplnění stylu o deklarace předchůdce . 37 3.3.10 Rozdělení selektoru . 37 3.3.11 Odstranění speciální syntaxe selektoru . 38 3.3.12 Rozvinutí vlastností ze zkráceného zápisu . 38 3.3.13 Konverze hodnot . 39 3.3.14 Využití nevalidních konstrukcí . 40 3.3.15 Změna linkování . 42 3.3.16 Vkládání/mazání stylů prostřednictvím JS API . 43 3.3.17 Přejmenování identifikátorů v HTML i CSS . 44 3.3.18 Aplikace pravidel na cílové elementy . 45 4 Implementace 47 4.1 Volba CSS parseru . 47 4.2 Modifikace parseru . 48 4.3 Obfuskátor . 48 xii 4.4 Implementované transformace . 49 4.5 Výstup obfuskátoru . 54 5 Testování 55 5.1 Teorie . 55 5.1.1 Verifikace návrhu vs testování softwaru . 55 5.1.2 Možnosti verifikace . 55 5.1.2.1 Formální metody . 56 5.1.2.2 Výpočetní model . 56 5.1.2.3 Vizuální testování . 56 5.1.3 Požadavky na testování . 56 5.2 Implementace . 57 5.2.1 Architektura testovacího prostředí . 57 5.2.2 Softwarové komponenty testu . 59 5.2.2.1 Validace vstupů . 59 5.2.2.2 Tvorba snímků obrazovky . 60 5.2.2.3 Porovnání snímků obrazovky . 60 5.2.3 Proces testování . 60 5.2.4 Spouštěč testů . 60 5.3 Volba vzorků webů . 62 5.4 Komplikace při testování . 62 5.5 Odstranění komplikací s dynamickým obsahem . 64 5.6 Výsledky testování . 65 5.7 Hodnocení kvality obfuskace . 65 5.8 Zhodnocení . 66 Závěr 67 Literatura 69 A Seznam použitých zkratek 71 B Přílohy 73 C Obsah přiloženého CD 83 xiii Seznam obrázků 3.1 Syntaxe kaskádových stylů . 27 3.2 Změna pořadí se zachováním pořadí v rámci třídy konkrétnosti. Čísla reprezentují konkrétnost selektoru. 36 4.1 Porovnání výkonnosti parserů. 49 5.1 Architektura testovacího prostředí. 59 5.2 Zjednodušené schéma testovacího procesu. 61 B.1 Metriky zdojového kódu programu . 73 B.2 Hodnocení kvality obfuskačních transformací . 74 B.3 UML Class diagram tříd získaných CSS parserem . 75 B.4 Příklad výstupu packeru (packing transformation) . 76 B.5 Procesní schéma testovacího procesu. 77 B.6 Konceptuální schéma testovacího procesu. 78 B.7 Zachycení rozdílů snímků (výřez) . 79 B.8 Výsledná kvalita obfuskace — metrika µ1: Počet znaků. 80 B.9 Výsledná kvalita obfuskace — metrika µ2: Počet pravidel. 80 B.10 Výsledná kvalita obfuskace — metrika µ3: Průměrný počet vlast- ností na pravidlo. 81 B.11 Výsledná kvalita obfuskace — metrika µ4: Průměrný počet selek- torů ve skupině. 81 xv Úvod Tato práce se zabývá úzkým výřezem spektra internetové bezpečnosti: ochra- nou autorských děl proti odcizení a neoprávněné manipulaci, za použití bez- pečnostního přístupu ’Security Through Obscurity’ (bezpečnost skrze neka- lost). Pojem autorské dílo budeme pro účely práce uvažovat pouze v kontextu webových aplikací, tedy výsledek vývojářské činnosti. Příkladem snadno od- cizitelných a manipulovatelných děl jsou soubory HTML, CSS, JavaScript a další (dále jen jako zdroje, či webové zdroje). Na rozdíl od zdrojových kódů serverových aplikací jsou tyto zdroje volně dostupné. Kromě uživatelského agenta si může zdroj volně stáhnout i uživatel, porozumět mu a použít jej, což je důsledkem architektury webu. Snadná odcizitelnost děl je tvůrci webových prezentací či aplikací stan- dardně opomíjena, nejspíše z neznalosti existence dostupných obranných pro- středků, nebo z domnění, že je jejich případné odcizení nijak nepoškodí, je- likož ono dílo buď například nelze samostatně (bez poskytnuté služby) zob- chodovat, nebo v případě webových aplikací nedává bez aplikačního software umístěného na vlastním serveru žádný smysl. Také je to dáno absencí zabez- pečovacích mechanizmů plynouchích z architektury webu (odesílání zdrojů — tedy programátorova autorského díla — v čitelné podobě na klientská zaří- zení). Následkem toho je možné odcizit, porozumět, upravit a dál používat dílo někoho jiného za zlomek vynaložené práce. V závislosti na licenci to ne- musí být legální (ani morální), ale děje se tomu tak a při celkovém počtu přes 1 miliardu internetových stránek [4] není v lidských silách dohledávat výskyty neoprávněného použití konkrétního autoského díla. Existjí ale metody, kterými lze zdroje částečně chránit, nikoliv však proti odcizení (z architektonických důvodů to nelze), nýbrž proti porozumění. Tako- véto metody převedou zdrojový kód z lidsky přijatelné formy do jiné tak, aby byla sémantika zdroje zachována, ale nový kód byl pro člověka nesrozumitelný a tím pádem nepoužitelný. Těmito metodami se bude zabývat zbytek práce. 1 Úvod Cíle práce Práce si klade za cíl zmapovat současně používané techniky obfuskace vy- braných webových zdrojů. Výstupem analýzy bude zhodnocení úrovně jejich kvality, možnosti prolomení, vliv na výkon webu (nikoliv v obchodním slova smyslu, ale v technickém a pouze pokud to bude pro danou metodu relevantní) a jejich limity. Na základě analýz a s použitím vlastní kreativity se pokusím navrhnout několik metod obfuskace CSS zdrojů. Poté pro jednu či více metod vytvořím prototypovou aplikaci, která bude obfuskaci vykonávat na zadaných vstupech. Aplikaci podrobím testování. Bude potřeba navrhnout a otesto- vat prototyp tak, aby bylo možné (pokud možno automatizovaně) verifikovat správnost navržených metod a ověřit funkčnost implementace. Přístupy k informační bezpečnosti Pro další pochopení je třeba nejprve vydefinovat základní přístupy k infor- mační bezpečnosti.