bezpečnosť java aplikácií
DESCRIPTION
Bezpečnosť JAVA aplikácií. Marian Lojka 2003/2004. http :// skola.marloom.net. Obsah. Model zabezpečenia v Jave Sandbox (bezpečnostné prostredie) Správca zabezpečenia Súbory zásad Podpisovanie tried Typy oprávnenia Spätný preklad kódu. Model zabezpečenia v Jave. - PowerPoint PPT PresentationTRANSCRIPT
Marian Lojka2003/2004
http://skola.marloom.net
Obsah
• Model zabezpečenia v Jave• Sandbox (bezpečnostné prostredie)• Správca zabezpečenia• Súbory zásad• Podpisovanie tried• Typy oprávnenia• Spätný preklad kódu
Model zabezpečenia v Jave
Zabezpečenie v Jave sa vyvíjalo už od jej samotného počiatku. Podstatné rozdiely, ktoré vznikali sa prejavili vo verziách JDK 1.0, JDK 1.1 a Java 2.
V prvých počiatkoch vývoja Javy bola jedna z prelomových technológií tvorba Apletov. Keďže Aplet je malá časť kódu, ktorú možno prenášať sieťou a spúšťať na klientských počítačoch prostredníctvom vnorených objektov v dokumentoch formátu WWW, používatelia boli bezprostredne ohrozený pred nebezpečným kódom.
História vývoja zabezpečenia v Jave
Model zabezpečenia v Jave
SANDBOX stručne
Výsledkom prvotnej snahy zabezpečenia, ktoré by nepripustilo poškodenie klientského počítača spustením kódu z Internetu je model zabezpečenia nazývaný SANDBOX (krabica z piesku).
Model pieskoviska je bezpečnostné prostredie okolo systému alebo aplikácie, ktoré je postavené na zákaze potenciálne nebezpečných činností (prístup k súborom, sieťovým prostriedkom a pod.). Úloha a využitie Sandboxu budú popísané neskôr.
Model zabezpečenia v Jave
Zabezpečenia v Java SDK 1.0
Vzdialený kód Apletov, ktoré sa spustili na klientskom počítači nemali možnosť manipulovať s prostriedkami počítača. Mali priradenú iba pamäť a procesor. Prostredie Sandboxu, kde sa kód vykonával striktne zakazoval priradenie iných prostriedkov.
Systémové prostriedky
Zabezpečovací manažér (Security manager)
Plný prístup k prostriedkom
SandboxObmedzený prístup
Lokálny kód Vzdialený kód
Internet
Model zabezpečenia v Jave
Zabezpečenia v Java SDK 1.1
Po nejakej dobe sa ukázalo že model Sandboxu je veľmi obmedzujúci. Autori jazyka Java pristúpili na možnosť podpisovania vzdialeného kódu. Tento podpis dosvedčuje že kód nebol zmenený od doby jeho podpísania.
Systémové prostriedky
Zabezpečovací manažér (Security manager)
Plný prístup k prostriedkom
SandboxObmedzený prístup
Lokálny kód
Nepodpísanýalebo
odmietnutý
vzdialený kód z Internetu
Podpísaný a prijatýklientom
Model zabezpečenia v Jave
Zabezpečenia v Java 2
V prostredí Java 2 bol vytvorený dômyselnejší mechanizmus a to spustenie vzdialeného kódu vo vnútri špecifických bezpečnostných domén, založených na súboroch zásad zabezpečenia (security policy file).
Systémové prostriedky
Zabezpečovací manažér (Security manager)
Sandbox Obmedzený
prístup
Vzdialený alebo lokálny kód
JVMkód
dómenaPlný
prístup
security policy
dómena
Sandbox
Bezpečnostné prostredie Java 2
Načítanie triedy
Overenie práv a sprístupnenie systémových prostriedkov
Sandbox - Class Loader
Priebeh načítania triedy
Požiadavka pre načítanie triedy
Trieda už je načítaná ?
Má program prístup k triede ?
Vrátenie referencie na objekt
Má program povolenie na vytvorenie tejto triedy ?
SecurityException !Hľadanie triedy v :1.Java API2.JVM extension
Načítaná a sprístupnená
Bola trieda nájdená ?
Načítanie triedy vo forme bytov
Class File Verifier
Trieda je v poriadku ?
VerifyError ! Pridanie triedy do bezpečnostnej domény pre neskoršie otestovanie práv triedy.
Inicializácia statických premenných
Trieda je pripravená na vykonávanie
Sandbox
Class File Verifier
Zabezpečuje overenie triedy na základe postupnosti testov Zabezpečuje overenie triedy na základe postupnosti testov vnútornej integrity. Dôraz pri testovaní sa kladie na vnútornej integrity. Dôraz pri testovaní sa kladie na prítomnosť nasledujúcich (úmyselných)prítomnosť nasledujúcich (úmyselných) chýb :chýb :
• Obsah ilegálneho Obsah ilegálneho byte codbyte codu.u.• Formát tried (napr.: Triedy musia mať superclass)Formát tried (napr.: Triedy musia mať superclass)• Formát a vlastnosti metód.Formát a vlastnosti metód.• Formát premenných.Formát premenných.• Vytvorenie smerníka na chránenú časť pamäte.Vytvorenie smerníka na chránenú časť pamäte.• Podtečenie alebo pretečenie programového staku.Podtečenie alebo pretečenie programového staku.• Iné cesty k narušeniu integrity JVM.Iné cesty k narušeniu integrity JVM.
Sandbox
Class File Verifier Príklad požitia neinicializovaného registra
Pre názornosť vytvoríme tried Pre názornosť vytvoríme tried ClassVerifyClassVerify /** * Metoda pre spustenie ako Aplikacia */public static void main(String[] args) {
System.out.println("3 + 4 = " + add());}/** * Metoda, ktoru upravime prostrednictvom Hexakodu * (testujeme ByteCode Verifier) */static int add(){
int a,b,c;a = 3;b = 4; // use hex editor to change to "a = 4" in class filereturn (a+b);
}/** * Metoda, pre vykreslovanie Textu s vysledkom */public void paint(Graphics g){
g.drawString("3 + 4 = " + add(), 10, 20);}
java.lang.VerifyError: (class: ClassVerify, method: add signature: ()I) Accessing value from uninitialized register 1at java.lang.Class.getDeclaredConstructors0(Native Method)at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)at java.lang.Class.getConstructor0(Unknown Source)at java.lang.Class.newInstance0(Unknown Source)at java.lang.Class.newInstance(Unknown Source)at sun.applet.AppletPanel.createApplet(Unknown Source)at sun.applet.AppletPanel.runLoader(Unknown Source)at sun.applet.AppletPanel.run(Unknown Source)at java.lang.Thread.run(Unknown Source)
***static int add(); Code: 0: iconst_3 1: istore_0 2: iconst_4 3: istore_1 1->0 4: iload_0 5: iload_1 6: iadd 7: ireturn***
Zmeníme časť bytecodu a spustíme program znovu. JVM ohlási Zmeníme časť bytecodu a spustíme program znovu. JVM ohlási chybu z dôvodu čítania neinicializovania registra. Program sa chybu z dôvodu čítania neinicializovania registra. Program sa ukončí. Dôsledok toho že nieje možné pristupovať do chránenej ukončí. Dôsledok toho že nieje možné pristupovať do chránenej pamäte.pamäte.
Sandbox
Class File Verifier Príklad požitia neinicializovaného registra
Jadrom celého procesu riadenia prístupu v jazyku Java je Jadrom celého procesu riadenia prístupu v jazyku Java je trieda trieda SecurityManagerSecurityManager. .
• definovaná v balíčku definovaná v balíčku java.langjava.lang
• riadi prístup k prostriedkom hostiteľského riadi prístup k prostriedkom hostiteľského operačného systému.operačného systému.
• kedykoľvek si program vyžiada prístu k určitemu kedykoľvek si program vyžiada prístu k určitemu prostriedku je požiadavka predaná objektu typu prostriedku je požiadavka predaná objektu typu SecurityManagerSecurityManager
Správca zabezpečenia
Charakteristika
public FileInputStream(File file) throws FileNotFoundException { String name = (file != null ? file.getPath() : null); SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(name); } if (name == null) { throw new NullPointerException(); } fd = new FileDescriptor(); open(name);}
Správca zabezpečenia
Konštruktor ešte pred tým ako dovolí vytvorenie Konštruktor ešte pred tým ako dovolí vytvorenie inštancie inštancie FileInputStream FileInputStream skontroluje či má právo čítať.skontroluje či má právo čítať.
Preskúmanie zdrojového kódu triedy FileInputStream
Správca zabezpečenia
Vlastnosti
• Za normálnych okolností nieje žiadna inštancia Za normálnych okolností nieje žiadna inštancia správcu zabezpečenia aktívna. správcu zabezpečenia aktívna.
• Výnimkou je spustenie apletu v okne webového Výnimkou je spustenie apletu v okne webového prehliadača, kde JVM vytvorí automaticky prehliadača, kde JVM vytvorí automaticky inštanciu). Tým docieli vytvorenie Sandboxu. inštanciu). Tým docieli vytvorenie Sandboxu.
• V prebehu spracovania je aktívny len jeden Správca V prebehu spracovania je aktívny len jeden Správca zabezpečenia a to posledne priradený systému zabezpečenia a to posledne priradený systému prostredníctvom funkcie : prostredníctvom funkcie :
System.setSecurityManager(...)System.setSecurityManager(...);;
Správca zabezpečenia
Spôsob inštalácie
Správcu zabezpečenia je možné do systému inštalovať dvoma Správcu zabezpečenia je možné do systému inštalovať dvoma spôsobmi a to:spôsobmi a to:
• Explicitne inštaláciou v aplikácií. To je vytvorením inštancie Explicitne inštaláciou v aplikácií. To je vytvorením inštancie SecurityManager a jej priradeniu Systému. SecurityManager a jej priradeniu Systému.
• Aktiváciou virtuálneho stroja pomocou Aktiváciou virtuálneho stroja pomocou prepínača –D : prepínača –D :
•java –Djava.security.manager NazovTriedyjava –Djava.security.manager NazovTriedy
Správca zabezpečenia
Súbory zásad (policy files)
• Súbor zásad je jednoduchý plochý súbor obsahujúci oprávnenia Súbor zásad je jednoduchý plochý súbor obsahujúci oprávnenia ((permissionspermissions) . Sú to práva užívateľa alebo kódu k vykonávaniu ) . Sú to práva užívateľa alebo kódu k vykonávaniu určitej činnosti. určitej činnosti.
• Ak je daná činnosť povolená volanie metódy Ak je daná činnosť povolená volanie metódy checkPermission()checkPermission() správcom zabezpečenia prebehne bez problémov v opačnom správcom zabezpečenia prebehne bez problémov v opačnom prípade je vyvolaná výnimka. V tomto prípade je potrebné vytvoriť prípade je vyvolaná výnimka. V tomto prípade je potrebné vytvoriť nový súbor zásad alebo modifikovať už vytvorený. nový súbor zásad alebo modifikovať už vytvorený.
• Java 2 umožnite definovať oprávnenie nielen na základe danej Java 2 umožnite definovať oprávnenie nielen na základe danej činnosti ale aj na základe načítania triedy z určitého miesta alebo na činnosti ale aj na základe načítania triedy z určitého miesta alebo na základe podpisu vlastníka alebo skupiny vlastníkovzáklade podpisu vlastníka alebo skupiny vlastníkov..
Správca zabezpečenia
Súbory zásad (policy files)
• Pri inštalovaní prostredia Java je vytvorený štandardný Pri inštalovaní prostredia Java je vytvorený štandardný konfiguračný súbor zabezpečenia. Tento súbor je uložený v konfiguračný súbor zabezpečenia. Tento súbor je uložený v podadresári podadresári /lib/security/lib/security domovského adresára inštalácie JRE. domovského adresára inštalácie JRE.
• Konfiguračný súbor sa nazýva Konfiguračný súbor sa nazýva java.securityjava.security a obsahuje a obsahuje časť podobnú následnému výpisu : časť podobnú následnému výpisu :
# The default is to have a single system-wide policy file,# The default is to have a single system-wide policy file,# and a policy file in the user's home directory.# and a policy file in the user's home directory.policy.url.1=file:${java.home}/lib/security/java.policypolicy.url.1=file:${java.home}/lib/security/java.policypolicy.url.2=file:${user.home}/.java.policypolicy.url.2=file:${user.home}/.java.policy
• Súbor Súbor ..java.policyjava.policy obsahuje základné povolenia na prístup k obsahuje základné povolenia na prístup k prostriedkom, ktoré sú rovnaké aké ma aplet po spustení v prostriedkom, ktoré sú rovnaké aké ma aplet po spustení v okne webového prehliadača. okne webového prehliadača.
• Súbory zásad možno vytvárať a upravovať pomocou Súbory zásad možno vytvárať a upravovať pomocou ľubovoľného textového editor ľubovoľného textového editoruu. K uvedenej činnosti môžeme . K uvedenej činnosti môžeme použiť tiež nástroj použiť tiež nástroj policytoolpolicytool dodávaný ako súčasť sady JDK dodávaný ako súčasť sady JDK ( (Java Development KitJava Development Kit)).. Podrobnejší návod nájdete na Podrobnejší návod nájdete na http://java.sun.com/j2se/1.3/docs/tooldocs/win32/policytool.html
• Súbor zásad sa ukladá prostredníctvom FileSúbor zásad sa ukladá prostredníctvom File -> Save As -> Save As
Ako vytvoriť vlastný súbor zásad
Správca zabezpečenia
Miesto uloženia súboru zásad
Certifikát
Povolenia ktoré sú uložené v danom súbore zásad.
Pridať odobrať alebo editovať zásadu.
Ako vytvoriť vlastný súbor zásad
Správca zabezpečenia
• Pre vytvorenie novej zásady stlačíme v hlavnom okne Pre vytvorenie novej zásady stlačíme v hlavnom okne ““Add Policy EntryAdd Policy Entry””.. Zobrazí sa ďalší dialóg.Zobrazí sa ďalší dialóg.
Adresa na ktorú sa vzťahuje Adresa na ktorú sa vzťahuje oprávnenieoprávnenie
Alias podpisu užívateľa na Alias podpisu užívateľa na ktorý sa vzťahuje oprávneniektorý sa vzťahuje oprávnenie
Pridať odobrať alebo editovať Pridať odobrať alebo editovať oprávnenie.oprávnenie.
Ako vytvoriť vlastný súbor zásad
Správca zabezpečenia
• CodeBase Definuje na akú adresu je povolené oprávnenie.
• Signed By Alias podpisu používateľa, ktorého kód je podpísaný. Využíva sa verejný kľúč na zistenie pravosti kódu podpísaného privátnym kľúčom.
• Add,Remove,Edit Permission Slúži na pridanie odobratie a zmenu oprávnenia. Toto oprávnenie sa vzťahuje na danné miesto alebo kódu podpísaného Aliasom a identifikovaného verejným kľúčom.
Ako vytvoriť vlastný súbor zásad
Správca zabezpečenia
Permission určuje druh oprávnenia
Target Name určuje triedu na ktorú sa bude oprávnenie vzťahovať
Action určuje vlastnosť oprávnenia na ktorú sa oprávnenie vzťahuje
Správca zabezpečenia
Využitie súboru zásad
Pre názornú ukážku vytvorme triedu WriteFile.
import java.io.*;
public class WriteFile{
public static void main(String[] args) throws IOException{FileOutputStream fos = new FileOutputStream(“test.txt”);PrintWriter pw = new PrintWriter(fos);pw.println(“Testujem.”);pw.close();
}}
Trieda vykonáva jednoduchý zápis slova “Testujem.” do súboru “test.txt”.
Využitie súboru zásad
Správca zabezpečenia
Po spustení vytvorenej aplikácie WriteFile s implicitným správcom zabezpečenia spustíme program príkazom:
java –Djava.security.manager WriteFile
Chyba, ktorá nastala pre zákaz zapisovania do súboru.java.security.AccessControlException: access denied (java.io.FilePermission test.txt write)at java.security.AccessControlContext.checkPermission(Unknown Source)at java.security.AccessController.checkPermission(Unknown Source)at java.lang.SecurityManager.checkPermission(Unknown Source)at java.lang.SecurityManager.checkWrite(Unknown Source)at java.io.FileOutputStream.<init>(Unknown Source)at java.io.FileOutputStream.<init>(Unknown Source)at WriteFile.main(WriteFile.java:18)Exception in thread "main"
Využitie súboru zásad
Správca zabezpečenia
Vytvoríme nový súbor zásad s názvom WriteFile.policy, ktorý povoľuje zápis ľubovoľnej triedy na disk a uložíme ho do rovnakého adresára ako je trieda WriteFile.class.
WriteFile.policy
/* AUTOMATICALLY GENERATED ON Mon Apr 1/* AUTOMATICALLY GENERATED ON Mon Apr 100 13:00:32 CEST 2004*/ 13:00:32 CEST 2004*//* DO NOT EDIT *//* DO NOT EDIT */
grant {grant { permission permission java.io.FilePermissionjava.io.FilePermission "<<ALL FILES>>", "write"; "<<ALL FILES>>", "write";};};
Spustíme program prostredníctvom príkazu :java –Djava.security.manager –Djava.security.policy=WriteFile.policy WriteFile
–Djava.security.policy – identifikuje miesto kde sa nachádza súbor povolení.Program sa vykoná bez problémov pretože SecurityManager je na základe oprávnení definovaných v súbore WriteFile.policy povolí zápis súboru na disk.
Využitie súboru zásad Oprávnenie založené na adresách URL a podpisu užívateľa
Správca zabezpečenia
WriteFile.policy
grant codeBase "file:/D:/_Projects/Secure1" { permission java.io.FilePermission "<<ALL FILES>>", "write";};
• pre oddeľovanie adresárov sa používa bežné lomítko (/) aj v prípade súborového systému Windows.
WriteFile.policy
grant signedBy "bis", codeBase "file:/D:/_Projects/Secure1" { permission java.io.FilePermission "<<ALL FILES>>", "write„};
• aby bolo možné vytvoriť povolenie na základe podpisu je potrebné aby autor kódu vytvoril pár kľúčov a podpísal kód svojím súkromným kľúčom.
Využitie súboru zásad Ako svoju triedu podpísať
Správca zabezpečenia
Osoba, ktorá chce svoj kód podpísať :
• Vytvorí dvojicu šifrovacích kľúčov (súkromný a verejný pomocou nástroja keytool).
• Vytvorí súbor jar, ktorý obsahuje triedy určené k distribucii (k tomu použije nástroj jar).
• Podpíše súbor jar pomocou súkromného kľúča (k tomuto účelu je určený nástroj jarsigner).
• Všetkým užívateľom takto zabalených tried poskytne archív jar a verejný kľúč. K tomuto musí vedieť ako nástroj keytool použiť k exportu certifikátu z databázy certifikátov a odoslaniu ich k danným užívateľom.
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
Pre vytvorenie novej dvojice šifrovacích kľúčov je možné použiť nástroj keytool s prepínačom -genkey. Nástroj požadovanú dvojicu vytvorí a uloží ju do databázy certifikátov.
Databáza certifikátov (KEYSTORE) Je malá databáza kde su uložené súkromné kľúče a k nim pridružené certifikáty, tiež zoznamy odvolaných certifikátov a dôveryhodných certifikátov. Pokiaľ daný súbor databázy neexistuje, nástroj keytool ho vytvorí.
Ak použijeme nástroj keytool s prepínačom –genkey budeme musieť špecifikovať hodnoty:Alias Jednoduchý názov reprezentujúci užívateľa pre ktorého bude pár šifrovacích kľúčov vytvorený.Heslo k zašifrovaným párom kľúčov Heslo, ktoré bude spojené s dvojicou zašifrovaných kľúčov.Adresu URL Umiestnenie databázy certifikátov. Táto adresa môže obsahovať cestu už k existujúcej databáze (súboru) alebo k databáze ktorá sa
má vytvoriť.Heslo do databázy certifikátov Ak nebola databáza certifikátov vytvorená použije hodnotu tohto parametru ako heslo pre novú databázu.
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
Nasledujúci príkaz ukazuje ako vytvoriť pár šifrovacích kľúčov :
keytool -genkey –alias kosice –keypass tajomstvo –keystore Autor.jks –storepass heslokeystore
Po zadaní nasledujúceho príkazu program požiada o zadanie informácií, ktoré slúžia na identifikovanie osoby, ktorá vytvára kľúč. Nakoniec vyzve používateľa k potvrdeniu zadaných údajov.
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
C:\Documents and Settings\Maio>keytool -genkey -alias kosice -keypass heslokeypass -keystore store.jst -storepass heslokeystoreWhat is your first and last name? [Unknown]: Marian LojkaWhat is the name of your organizational unit? [Unknown]: StudentWhat is the name of your organization? [Unknown]: TU KosiceWhat is the name of your City or Locality? [Unknown]: KosiceWhat is the name of your State or Province? [Unknown]: SlovakiaWhat is the two-letter country code for this unit? [Unknown]: SKIs CN=Marian Lojka, OU=Student, O=TU Kosice, L=Kosice, ST=Slovakia, C=SK correct? [no]: yes
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
Na prácu s nástrojom keytool je možné použiť nástroj KeyTool GUI 1.7 vytvorený Wayne Grantom. Ako voľnú verziu ho nájdete tu.
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
Ako vytvoriť pár šifrovacích kľúčov
Správca zabezpečenia
Aby sme mohli vytvoriť kľúče musíme vytvoriť novú databázu kľúčov alebo použiť už vytvorenú.
•Java KeyStore (Sun's KeyStore format)
•Java Cryptography Extension KeyStore (More secure version of JKS)
•Public-Key Cryptography Standards #12 KeyStore (RSA's Personal Information
Exchange Syntax Standard)
•Bouncy Castle KeyStore (Bouncy Castle's version of JKS)
•Bouncy Castle UBER KeyStore (More secure version of BKS)
Ako vytvoriť pár šifrovacích kľúčov pomocou KeyToolGUI
Správca zabezpečenia
Vytvoreniekľúčov
Výber metódy šifrovania
Nastavenie potrebných údajov
Nastavenie Alias mena
Ako vytvoriť pár šifrovacích kľúčov pomocou KeyToolGUI
Správca zabezpečenia
Ako vytvoriť jar súbor
Správca zabezpečenia
Súbor jar, ktorý obsahuje zverejnené triedy vytvoríme prostredníctvom nástroja jar dodávaného štandardne s JDK. Jar súbor z sôr definovanej triedy vytvoríme nasledujúcim príkazom:
jar cf WriteFile.jar WriteFile.class
Bližšie sa zaoberať nástrojom jar nieje úlohou tejto prezentácie. Stručnú nepovedú získate zadaním príkazu jar – help.
Ako podpísať súbor jar
Správca zabezpečenia
Podpísanie súboru jar môžeme vykonať prostredníctvom nástroja jarsigner, ktorý je súčasťou JDK. Pri podpisovaní Vás tento nástroj požiada aby ste zadali rovnaké hodnoty ako pri vytváraní páru šifrovacích kľúčov. Sú to :
• Adresa URL databázy certifikátov.• Heslo do databázy certifikátov.• Alias kľúča.• Heslo k rozšifrovaniu kľúča.
Okrem uvedených hodnôt je potrebné zadať aj názov súboru jar, ktorý sa má podpísať aj meno jeho kópie, ktorá bude podpísaná.
jarsigner -keystore keystore.jks -storepass heslokeystore -keypass heslokeypass -signedjar SignedWriteFile.jar WriteFile.jar brown.
Štruktúra podpísaného jar súboru
Správca zabezpečenia
Zverejnené triedy
META-INF
SignedWriteFile.jar
BROWN.DSABROWN.SFMANIFEST.MF
Export a Import verejného kľúča databázy certifikátov
Správca zabezpečenia
Export a Import verejného kľúča databázy je potrebné vykonať ak chcete preniesť kľúč k druhej osobe, ktorá používa vami podpísaný kód a potrebuje si overiť či kód nebol od jeho vytvorenia a podpísania zmenený.
Postup exportu aj importu je v programe KeyToolGUI intuitívny avšak tento postup je možné vykonať prostredníctvom už skôr uvedeného nástroja keytool.
Export :keytool -export –alias brown –keystore keystore.jks –storepass heslokeystore –file Brown.cer.
Import:keytool -import –alias brown –keystore keystore.jks –storepass heslokeystore –file Brown.cer
Ako upraviť súbor zásad. Overenie identity vo vhodnej databáze certifikátov.
Správca zabezpečenia
Posledným krokom je úprava súboru zásad takým spôsobom aby našiel cestu k databáze certifikátov, kde sú uložené verejné kľúče vrátane ich aliasov. Túto činnosť je možné vykonať prostredníctvom nástroja policytool.
URL k databáze certifikátov
Ako upraviť súbor zásad. Overenie identity vo vhodnej databáze certifikátov.
Správca zabezpečenia
WriteFile.policy
keystore "file:/D:/_Projects/Secure1/keystore.jks";
grant signedBy "brown" { permission java.io.FilePermission "<<ALL FILES>>", "write";};
Spustenie programu :
Pre spustenie programu WriteFile uloženého v súbore SignedWriteFile.jar napríklad tento príkaz :
java -cp SignedWriteFile.jar -Djava.security.manager -Djava.security.policy=WriteFile.policy WriteFile
Súbory zásad
javac
jar
jarsigner private key
public key certificate
Keytool -export
Keystore.jks
Keytool -genkey
FileWriter.java
FileWriter.class
FileWriter.jar
SignedFileWriter.jarJamesBrown.cer
1.
2.3.
Alias brown
4.5.
Databáza kľúčov Jamesa Browna
java
SignedFileWriter.jar od James Brown
ExceptionProgram nemá oprávnenie pre
zápis údajov na disk
security manager
datový súbor
1.
JamesBrown.cer od James Brown
Keytool -import
Keystore.jks
Databáza kľúčov Jennifer Lopez
Brownov public key certificate java
Policy tool
Policy súbor Jennifer Lopezudeľuje oprávnenie kódu
podpísaného aliasom “brown” na zápis údajov na disk
SignedFileWriter.jar
security manager
datový súbor
2.
3.
4.
Súbory zásad
Základná špecifikácia
Typy oprávnenia
Všetky platné oprávnenia definované v súbore zásad sú v Jave interne reprezentované ako inštancia abstraktnej triedy Permission definovaného v balíku java.security.
Ak sa má vykonať špecificky nebezpečná činnosť volá sa metóda checkXXX() a tá vola metódu checkPermission() definovanej v triede AccessControler.
security.checkWrite(fileName);
FileOutpuStream
checkPermission(new FilePermission(file,SecurityConstants.FILE_WRITE_ACTION));
SecurityManager
public static void checkPermission(Permission perm) throws AccessControlException{
AccessController
Základné rozdelenie typov oprávnení.
Typy oprávnenia
Určité triedy odvodené od triedy Permission sa používajú pre Určité triedy odvodené od triedy Permission sa používajú pre jeden jeden typ oprávneniatyp oprávnenia,, ako napríklad ako napríklad java.io.FilePermissionjava.io.FilePermission, ktorej , ktorej inštancia sa používa k povoleniu prístupu k súboru alebo k skupine inštancia sa používa k povoleniu prístupu k súboru alebo k skupine súborou. Iné triedy ako napríklad súborou. Iné triedy ako napríklad java.lang.RuntimeExceptionjava.lang.RuntimeException sa používajú k popisu sa používajú k popisu viacej typov oprávneniaviacej typov oprávnenia..
Vo všetkých triedach odvodených od triedy Permission je zapuzdrená Vo všetkých triedach odvodených od triedy Permission je zapuzdrená jedna alebo viacej hodnôt String. Uvedené hodnoty popisujú špecifický jedna alebo viacej hodnôt String. Uvedené hodnoty popisujú špecifický typ oprávnenia alebo typ povoleného prístupu. Typy prístupu sa typ oprávnenia alebo typ povoleného prístupu. Typy prístupu sa označujú tiež ako zoznam akcií (označujú tiež ako zoznam akcií (action listaction list).).
Základná charakteristika
Typy oprávnenia
Typy oprávnenia
Táto trieda je definovaná v baliču java.security. Je priamym potomkom triedy Permission a rovnako ako jej predok je abstraktnou triedou. Na rozdiel od je bázovej triedy Permission obsahuje metódu implies(Permission per). Metóda umožňuje určiť čí dané oprávnenie zahrnuje v sebe aj iné oprávnenie.
Triedy dedené od BasicPermission• AWTPermission • NetPermission• PropertyPermission• ReflectPermission• RuntimePermission• SecurityPermission• SerializablePermission• SQLPermission
Bližší popis tried nájdete www.java.sun.com.
BasicPermission
Oprávnenie FilePermission.
Typy oprávnenia
Použitím tejto triedy sa určuje prístup k súborom alebo adresárom. Zoznam operácií by mal obsahovať jednu alebo viac nasledujúcich položiek : read, write, execute, delete.
Väčšinou bude cieľ oprávnenia zastupovať názov súboru alebo adresára. Následne je uvedených nikoľko príkladov:
grant { permission java.io.FilePermission “C:/temp”,”read”; permission java.io.FilePermission “C:/temp/readme.txt”,”read”;}
Oprávnenie k čítaniu adresára temp a k čítaniu súboru readme.txt.
grant { permission java.io.FilePermission “C:/temp/*”,”read”;}
Oprávnenie k čítaniu adresára a všetkých v ňom uložených súborov.
grant { permission java.io.FilePermission “C:/temp/-”,”read”;}
Oprávnenie k čítaniu všetkých súborov v tomto adresári a jeho podadresároch.
grant { permission java.io.FilePermission “<<ALL FILES>>”,”write,read”;}
Oprávnenie k čítaniu a zápisu všetkých súborov a adresárov.
Oprávnenie FilePermission.
Typy oprávnenia
Oprávnenie SocketPermission.
Typy oprávnenia
Schopnosť apletov vytvárať soketové pripojenie je obmedzené. Nepodpísané aplety môžu vytvárať soketové pripojenie iba k serveru z ktorého boli stiahnuté. Samotné oprávnenie sa skladá z dvoch položiek a to :
• Názov hostiteľa(názov DNS počítača v sieti alebo jeho IP).• Zoznam akcií, ktoré sú povolené pri operáciách s hostiteľom
Zoznam akcií môže obsahovať jednu alebo viacej nasledujúcich položiek : accept, connect, listen, resolve.
Oprávnenie SocketPermission.
Typy oprávnenia
ConnectUmožňuje určiť povolenie ktoré lokálnemu počítaču dovoľuje vytvoriť soketové pripojenie k iným počítačom.
ListenUdeľuje oprávnenie k sledovaniu prichádzajúcich pripojení.permission java.net.SocketPermission “localhost:500-5010”,”listen”;
AcceptUdeľuje, ktoré počítače môžu vytvoriť soketové pripojenie k lokálnemu počítaču. permission java.net.SocketPermission “*.tuke.sk:6000-6500”,”accept”;
ResloveUrčuje povolenie na preklad názvov hostiteľov na adresy IP a naopak.
Nebezpečie spätnej analýzy DJ Decompiler
Spätný preklad bajtového kódu
Nebezpečie spätnej analýzy Súbor WriteFile.class po spätnej anlýze.
Spätný preklad bajtového kódu
Nechránený prístup k
reťazcom
Protiopatrenia
Spätný preklad
Jednou z možností ako je predísť nebezpečiu pred spätným prekladom je použitie Obfuscator-a (Zatemňovača). Je to program, ktorý je určený pre jeden cieľ a to zmareniu spätného prekladu.
Jedným z takýchto nástrojov je JShrink.
Spätný preklad
Protiopatrenia JShrink
Nastavenie úrovne zatemňovania tried
BibliografiaBibliografia
[1] [1] Marco Pistoia, Duane F. Reller : Java 2 Network Security , Jun 1999 , Jun 1999[2] [2] Scott OaksScott Oaks:Java Security 2nd EditionJava Security 2nd Edition, , O'REILLYO'REILLY , , May 2001May 2001 [3] BretSpell : [3] BretSpell : Java Programujeme ProfesionJava Programujeme Profesionáálnelne, Január 2002, Január 2002[[44] ] Markus FalkhausenMarkus Falkhausen::Contributions to Information TechnologyContributions to Information Technology,,
http://www.falkhausen.de/en/diagram/diagram.htmlhttp://www.falkhausen.de/en/diagram/diagram.html[[55] ] James A. VuccoloJames A. Vuccolo : : Java - A Secure Programming LanguageJava - A Secure Programming Language, September 2000, September 2000
http://www.personal.psu.edu/staff/j/v/jvuccolo/javasecurity/index.htmhttp://www.personal.psu.edu/staff/j/v/jvuccolo/javasecurity/index.htm[6][6] Gary McGraw and Edward Felten: Gary McGraw and Edward Felten: The Original Applet SandboxThe Original Applet Sandbox, Januar 2000, Januar 2000
http://www.securingjava.com/chapter-two/chapter-two-2.htmlhttp://www.securingjava.com/chapter-two/chapter-two-2.html[7] [7] Scott OaksScott Oaks::Java SecurityJava Security,, May 1998May 1998[8] [8] Sun Microsystems: Sun Microsystems: The Source for DevelopersThe Source for Developers,,
http://developers.sun.com/techtopics/security/index.htmlhttp://developers.sun.com/techtopics/security/index.html [9] [9] Sun Microsystems: Sun Microsystems: The JavaTM TutorialThe JavaTM Tutorial , Trail: Security in Java 2 SDK 1.2 , Trail: Security in Java 2 SDK 1.2
http://java.sun.com/docs/books/tutorial/security1.2/index.htmlhttp://java.sun.com/docs/books/tutorial/security1.2/index.html[10] [10] Joseph A: Joseph A: BankBank::Java SecurityJava Security,,
http://swissnet.ai.mit.edu/~jbank/javapaper/javapaper.htmlhttp://swissnet.ai.mit.edu/~jbank/javapaper/javapaper.html
A iné ...A iné ...