181c5a4ed18d6fc23c11a861473be624.ppt
- Количество слайдов: 53
JAVA Security Tóth Gergely tgm@mit. bme. hu Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Tóth Gergely, 2003. május 5. ELTE JAVA Speci
Tartalom • • • JAVA security alapkövek Buffer overflow JAVA security architektúra Bytecode security JAVA cryptography Applikáció authentikáció Appletek J 2 ME Saját projektem Tóth Gergely, 2003. május 5. ELTE JAVA Speci (2)
JAVA security alapkövek • nyelvi szinten • buffer overflow elleni védelem • osztályok szintjén • security architektúra • beépített kriptográfiai csomagok (JCE) • SDK szinten – applikáció authentikációs utilityk • • kulcskészítés biztonságos kulcstárolás applikáció aláírás ellenőrzés Tóth Gergely, 2003. május 5. ELTE JAVA Speci (3)
Buffer overflow – az elmélet • buffer overflow: magasan a leggyakoribb kihasznált biztonsági lyuk Tóth Gergely, 2003. május 5. ELTE JAVA Speci (4)
Buffer overflow – például C-ben #define BUF_SIZE 16 void Exploitable. Function(char* param) { // do something. . . char local. Buffer. On. Stack[BUF_SIZE]; strcpy(local. Buffer. On. Stack, param); // do something. . . printf("%s", local. Buffer. On. Stack); } void Exploiter. Function() { // nothing serious Exploitable. Function("1234567890"); // what will happen? Exploitable. Function("12345678901234567890"); } Tóth Gergely, 2003. május 5. ELTE JAVA Speci (5)
Buffer overflow – JAVA-ban • VM szinten valószinűtlen – nagyon kemény buffer-overflow elleni projekt a SUN-on belül • nyelvi szinten lehetetlen – nincs pointer művelet – tömböt nem lehet túlcímezni • a tömb tudja a hosszát (length mező) • összességében: JAVA-ban elhanyagolható a valószínűsége Tóth Gergely, 2003. május 5. ELTE JAVA Speci (6)
JAVA security architektúra I. • beépített security funkciók – standard osztályok szintjén • jogosultságok (Permission) • jogosultság hozzárendelések (Policy) • jogosultsági csoportok (Protection. Domain) – kezelése • egyszerű • integrált • a legtöbbe esetben mind a felhasználó, mint a programozó számára transzparens Tóth Gergely, 2003. május 5. ELTE JAVA Speci (7)
JAVA security architektúra II. • java. security. Permission – jogosultságok leírására – File. Permission • File. Permission(„/tmp/*”, „read”) – Socket. Permission • Socket. Permission(„localhost: 1024 -”, „listen”) – Runtime. Permission – AWTPermission –. . . Tóth Gergely, 2003. május 5. ELTE JAVA Speci (8)
JAVA security architektúra III. • java. security. Protection. Domain • osztályok halmazához rendel jogosultságokat • minden osztály pontosan egy domainhez tartozik • minden új objektum példány az osztálya domainjének jogosultságait kapja Tóth Gergely, 2003. május 5. ELTE JAVA Speci (9)
JAVA security architektúra IV. • java. security. Policy • leképezés: a futó kód bizonyos jellemzőihez (Code. Source) jogosultságok halmazát rendeli – jelenleg a futó kódot jellemzi: • . CLASS fájljának URL-je ÉS • a hozzá tartozó certificate-ek • bár több Policy objektum is létezhet, egyszerre csak egy lehet aktív Tóth Gergely, 2003. május 5. ELTE JAVA Speci (10)
JAVA security architektúra V. • Policy beállítása – van rá JDK tool (policytool) – policy fájl grant { permission java. lang. Runtime. Permission "stop. Thread"; permission java. net. Socket. Permission "localhost: 1024 -", "listen"; permission java. util. Property. Permission "java. version", "read"; . . . }; Tóth Gergely, 2003. május 5. ELTE JAVA Speci (11)
JAVA security architektúra VI. • amellett, hogy melyik osztály objektuma hajtja végre az utasítást, azt is figyelembe kell venni, hogy melyik szálon ki hívta meg őt – user domainbeli objektum ki akar írni valamit, meghívja a system domainbeli objektum metódusát (privilege gain) gain – a system domain frissíti a képernyőt és meghívja egy user domainbeli objektum paint metódusát (privilege loss) loss Tóth Gergely, 2003. május 5. ELTE JAVA Speci (12)
JAVA security architektúra VII. • az aktuális szál jogosultsága: az általa bejárt összes domain által biztosított jogosultságok metszete • java. security. Access. Controller – annak eldöntésére, hogy van-e jogunk valamire • Access. Controller. check. Permission( Permission permission) – privilegizált művelet végrehajtására (a hívó domainjének összes jogosultságával) • Access. Controller. do. Privileged( Privileged. Action action) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (13)
JAVA security architektúra – példa • java. awt. Cursor – get. System. Custom. Cursor: @return the system specific custom Cursor named cursor = (Cursor) java. security. Access. Controller. do. Privileged( new java. security. Privileged. Exception. Action() { public Object run() throws Exception { Toolkit toolkit = Toolkit. get. Default. Toolkit(); Image image = toolkit. get. Image( system. Custom. Cursor. Dir. Prefix + file. Name); return toolkit. create. Custom. Cursor( image, new Point(fx, fy), flocalized); } } ); Tóth Gergely, 2003. május 5. ELTE JAVA Speci (14)
Bytecode security I. • a JAVA virtuális gép az alkalmazás futtatása közben dinamikusan tölti be az osztályokat (bytecode-ot) – fájlból – hálózaton keresztül – elképzelhető run-time generált bytecode betöltése is • ezeket a bytecode-okat a betöltés során ellenőrizni kell Tóth Gergely, 2003. május 5. ELTE JAVA Speci (15)
Bytecode security II. Tóth Gergely, 2003. május 5. ELTE JAVA Speci (16)
Bytecode security III. • Ellenőrzésre kerülnek: – a bytecode szintakszisa legális-e; – nincs-e paraméter stack over/underflow; underflow – minden bytecode parancs minden paramétere megfelelő típusú-e; típusú-e – konstruktor, metódus és mező hozzáférések jogosultságai megfelelőek-e (private, public, protected); – objektumokat annak használ-e amik (Input. Stream-et nem Output. Stream-nek). Tóth Gergely, 2003. május 5. ELTE JAVA Speci (17)
JAVA cryptography • javax. crypto és java. security csomagok – interface-ek kriptográfiai algoritmusoknak • továbbfejlesztési és kiegészítési lehetőség – beépített kriptográfiai algoritmus implementációk • szabványoknak megfelel (RFC, IETF, PKCS) • garantáltan biztonságos • maximális teljesítmény Tóth Gergely, 2003. május 5. ELTE JAVA Speci (18)
Titkosítás • titkosító algoritmusok – szimmetrikus kulcsú algoritmusok • blokk-kódolók (pl. DES, 3 DES, Blowfish, AES) • folyam-kódolók (pl. RC 4) • működési módok (ECB, CBC, OFB, CFB) – aszimmetrikus kulcsú algoritmusok (pl. RSA, ECC) • nyilvános kulcs • titkos kulcs Tóth Gergely, 2003. május 5. ELTE JAVA Speci (19)
Titkosítás II. • szimmetrikus kulcsú – kódolásnál és dekódolásnál ugyanaz a kulcs • nem letagadhatatlan • aszimmetrikus kulcsú – A a B-nek küldött üzenetet B nyilvános kulcsával kódolja – kézbesítéskor B titkos kulcsával dekódolja – mivel csak B ismeri titkos kulcsát, csak ő tudja a nyilvános kulcsával kódolt üzenetet dekódolni • ha küldéskor B nyilvános, A titkos kulcsával kódolunk, akkor letagadhatatlan is Tóth Gergely, 2003. május 5. ELTE JAVA Speci (20)
Kriptográfiai példa I. – titkosítás import java. security. *; import javax. crypto. spec. *; public class Blowfish. Key { public static void main(String[] args) throws Exception { Key. Generator kgen = Key. Generator. get. Instance("Blowfish"); Secret. Key skey = kgen. generate. Key(); byte[] raw = skey. get. Encoded(); Secret. Key. Spec skey. Spec = new Secret. Key. Spec(raw, "Blowfish"); Cipher cipher = Cipher. get. Instance("Blowfish"); cipher. init(Cipher. ENCRYPT_MODE, skey. Spec); System. out. println(new String( cipher. do. Final("This is just an example". get. Bytes())); } } Tóth Gergely, 2003. május 5. ELTE JAVA Speci (21)
Kriptográfiai hash generálás • hashelés (pl. SHA 1 vagy MD 5) – tetszőleges sztringhez konstans hosszú egyértelmű hash sztringet rendel • sztringből hashet generálni egyszerű • adott hashből eredeti sztringet visszaállítani elméletileg lehetetlen • adott hashhez olyan sztringet generálni, aminek az adott hash a hash sztringje, gyakorlatilag lehetetlen – önmagában ritkán használják Tóth Gergely, 2003. május 5. ELTE JAVA Speci (22)
Kriptográfiai példa II. – hash generálás • SHA-1 hash érték kiszámolása: Message. Digest sha = Message. Digest. get. Instance("SHA-1"); sha. update(to. Hash); byte[] hash=sha. digest(); System. out. println(to. Hex(hash)); • futtatás: > java sha 1 abc A 9993 E 364706816 ABA 3 E 25717850 C 26 C 9 CD 0 D 89 D Tóth Gergely, 2003. május 5. ELTE JAVA Speci (23)
MAC generálás • MAC (Message Authentication Code) – „rejtjel kulccsal elvégzett hash művelet” művelet – csak a rejtjelkulccsal rendelkező entitások képesek a MAC generálására – integritásvédelemre – pl. HMAC • HMAC-SHA 1 • HMAC-MD 5 Tóth Gergely, 2003. május 5. ELTE JAVA Speci (24)
Kriptográfiai példa III. – MAC import java. security. *; import javax. crypto. *; public class init. Mac { public static void main(String[] args) throws Exception { // Generate secret key for HMAC-MD 5 Key. Generator kg = Key. Generator. get. Instance("Hmac. MD 5"); Secret. Key sk = kg. generate. Key(); // Get instance of Mac object and // initialize it with the above secret key Mac mac = Mac. get. Instance("Hmac. MD 5"); mac. init(sk); System. out. println(new String(mac. do. Final( "Hi There". get. Bytes())); } } Tóth Gergely, 2003. május 5. ELTE JAVA Speci (25)
Digitális aláírás I. • célja annak biztosítása, az aláírt dokumentumot a titkos kulcs birtokosa írta alá – direkt aláíró algoritmus (pl. DSA) – hash érték titkos kulccsal történő aszimmetrikus titkosítása (pl. SHA 1 with. RSA) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (26)
Digitális aláírás II. – generálás Tóth Gergely, 2003. május 5. ELTE JAVA Speci (27)
Digitális aláírás III. – ellenőrzés Tóth Gergely, 2003. május 5. ELTE JAVA Speci (28)
Kriptográfiai példa IV. – digitális aláírás byte[] to. Sign="Text to sign. . . ". get. Bytes(); Secure. Random ran = new Secure. Random(); Key. Pair. Generator key. Gen = Key. Pair. Generator. get. Instance("RSA"); key. Gen. initialize(1024, ran); Key. Pair pair = key. Gen. generate. Key. Pair(); // sign Signature sig = Signature. get. Instance("SHA 1 with. RSA"); sig. init. Sign(pair. get. Private()); sig. update(to. Sign); byte[] signature=sig. sign(); // verify Signature ver = Signature. get. Instance("SHA 1 with. RSA"); ver. init. Verify(pair. get. Public()); ver. update(to. Sign); System. out. println("Verification: "+ver. verify(signature)); Tóth Gergely, 2003. május 5. ELTE JAVA Speci (29)
Egyéb kriptográfiai osztályok • biztonságos véletlen szám generálás – kulcsgenerálás biztonságosságának növelésére • kulcsgenerálás • kulcstárolás (keystore) – jelszóval védett, titkosított fájl • certificate kezelés (X. 509) – nyilvános kulcs tárolására Tóth Gergely, 2003. május 5. ELTE JAVA Speci (30)
Applikáció authentikáció I. • aszimmetrikus kulcsok (RSA) – generálása (keytool) – biztonságos tárolása (keystore-ban) • szoftverfejlesztőnél: . JAR fájl aláírása szoftverfejlesztőnél (jarsigner) – aszimmetrikus kulcsú digitális aláírás (pl. SHA 1 with. RSA) • szoftver felhasználónál: . JAR fájl felhasználónál aláírásának ellenőrzése (jarsigner) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (31)
Applikáció authentikáció II. • a program gyártója aláírja a futtatható kódot – igazolja, hogy ő írta a programot – de tulajdonképpen mit is csinál a program? • ez már csak így fog maradni : ( • a tendencia – nem a program jogosultságait állítják be – hanem megbízol a gyártójában : ( Tóth Gergely, 2003. május 5. ELTE JAVA Speci (32)
Keystore • Kulcsfájl – egy keystore-ban több kulcspár is tárolható (azonosításuk aliasszal) – titkos kulcsok tárolására • fájlszinten kódolt • jelszóval védett (fájlszinten és aliasokként is) – nyilvános kulcsok tárolására • certificate-ek formájában Tóth Gergely, 2003. május 5. ELTE JAVA Speci (33)
JAR aláírás (jarsigner) I. • normális. JAR fájl –. CLASS fájlok – manifest • aláírt. JAR fájl –. CLASS fájlok – módosított manifest – ALIAS. SF (pl. TG. SF) – ALIAS. DSA (pl. TG. DSA) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (34)
JAR aláírás (jarsigner) II. • ALIAS. SF – minden aláírt fájlra • hash (pl. SHA-1) BASE-64 -ben kódolva Name: com/monica/javacom/streams/MJCWriteable. Is. AIS. class SHA 1 -Digest: lc. NRm/q+QZnxygf 9 Ubf 3 PJWg. ND 8= • ALIAS. DSA – aláírók nyilvános kulcsa (certificate-ek) – aláírások Tóth Gergely, 2003. május 5. ELTE JAVA Speci (35)
Applikáció authentikáció – példa I. • kulcsgenerálás >keytool -genkey -alias tgm -keystore. jks Enter keystore password: password What is your first and last name? [Unknown]: Gergely Toth What is the name of your organizational unit? [Unknown]: MIS What is the name of your organization? [Unknown]: BUTE What is the name of your City or Locality? [Unknown]: Budapest What is the name of your State or Province? [Unknown]: Budapest What is the two-letter country code for this unit? [Unknown]: HU Is CN=Gergely Toth, OU=MIS, O=BUTE, L=Budapest, ST=Budapest, C=HU correct? [no]: yes Tóth Gergely, 2003. május 5. ELTE JAVA Speci (36)
Applikáció authentikáció – példa II. • applikáció készítés >jar cvf sha 1. jar sha 1. class • applikáció aláírás >jarsigner -keystore. jks sha 1. jar tgm Enter Passphrase for keystore: password Enter key password for tgm: tgmpassword Tóth Gergely, 2003. május 5. ELTE JAVA Speci (37)
Applikáció authentikáció – példa III. • applikáció ellenőrzés – OK >jarsigner -verify -verbose -certs sha 1. jar 134 187 1026 0 1009 sm Thu Thu Thu Mar Mar Mar 27 27 27 18: 21: 00 18: 21: 02 18: 20: 12 18: 06 CET CET CET 2003 2003 META-INF/MANIFEST. MF META-INF/TGM. SF META-INF/TGM. DSA META-INF/ sha 1. class X. 509, CN=Gergely Toth, OU=MIS, O=BUTE, L=Budapest, ST=Budapest, C=HU s m k i = = signature was verified entry is listed in manifest at least one certificate was found in keystore at least one certificate was found in identity scope jar verified. Tóth Gergely, 2003. május 5. ELTE JAVA Speci (38)
Applikáció authentikáció – példa IV. • applikáció ellenőrzés – HIBA – ha módosul a tartalom anélkül, hogy az aláírásokat újragenerálnánk >jarsigner -verify -verbose -certs sha 1. jarsigner: java. lang. Security. Exception: SHA 1 digest error for sha 1. class Tóth Gergely, 2003. május 5. ELTE JAVA Speci (39)
Appletek I. • Applet – alapvetően browserben futó JAVA program – ha az Applet nincs aláírva: • nincs fájlrendszer-hozzáférés • csak ahhoz a hosthoz tud socketet nyitni, ahonnan le lett töltve • nincs natív hívás • nem indíthat más programot • nem tölthet be libraryt đ nehézkes Tóth Gergely, 2003. május 5. ELTE JAVA Speci (40)
Appletek II. • aláírt Applet: – „trusted” ha megfelelő az aláírás • ismert certificatehez tartozó titkos kulccsal írták alá • az aláírás érvényes – ugyanúgy tud futni, mintha nem is Applet lenne đ kényelmesebb Tóth Gergely, 2003. május 5. ELTE JAVA Speci (41)
Aláírt Applet példa I. – készítés • Kulcskészítés – keytool -genkey. . . • Certificate exportálás – keytool -export. . . • JAR fájl készítés és aláírás – jar cvf. . . – jarsigner. . . Tóth Gergely, 2003. május 5. ELTE JAVA Speci (42)
Aláírt Applet példa II. – használat • Certificate import – JAVA plug-in control panelből Tóth Gergely, 2003. május 5. ELTE JAVA Speci (43)
J 2 ME - JAVA 2 Micro Edition • limitált kapacitású (memória, CPU) eszközökre – mobiltelefonok – kézi számítógépek • lecsupaszított nyelvi környezet – kevesebb standard osztály – bizonyos nyelvi tulajdonságok is hiányoznak (pl. nincs float) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (44)
MIDP 1. 0 • jelenlegi állapot • „homokozó” elv homokozó – nincs fájlrendszer-hozzáférés – limitált erőforrások (~100 k memória, ~100 k bytecode) és kevés beépített osztály – kommunikációs csatorna absztrakció (Connection osztály) • nincs applikáció authentikáció! – az aláírást figyelmen kívül hagyja Tóth Gergely, 2003. május 5. ELTE JAVA Speci (45)
MIDP 2. 0 • hamarosan megjelenik (~idén nyáron) • security++ – permissions • bizonyos funkciók letiltása/engedélyezése – protection domains • Permission templates (untrusted, . . . ) – applikáció authentikáció • aláírás ellenőrzése – crypto csomagok (pl. SSL, HTTPS, WTLS) • push architecture: security? architecture Tóth Gergely, 2003. május 5. ELTE JAVA Speci (46)
JAVA rákfenék • natív hívás – JAVA kiegészítése: a VM-et futtató környezetre írt gépi kódú library is használható – nem platform-független – nem biztosítja a JAVA által nyújtott biztonsági megoldásokat és megbízhatóságot • MIDP 1. 0 – nincs applikáció authentikáció Tóth Gergely, 2003. május 5. ELTE JAVA Speci (47)
Saját magamról – MONICA projekt I. • JAVA alapú open-source SSH 2 – http: //monica. sourceforge. net Tóth Gergely, 2003. május 5. ELTE JAVA Speci (48)
Saját magamról – MONICA projekt II. • JAVA alapú SCP 2 (fejlesztés alatt) Tóth Gergely, 2003. május 5. ELTE JAVA Speci (49)
Kriptográfiai műveletek az SSH 2 -ben • digitális aláírás és certificate kezelés a kulcscseréhez • szimmetrikus kulcsú titkosítás a csatorna bizalmasságának védelmére • MAC a csatorna integritásának biztosításához Tóth Gergely, 2003. május 5. ELTE JAVA Speci (50)
SSH 2 csomag képzése Tóth Gergely, 2003. május 5. ELTE JAVA Speci (51)
SSH 2 csomag képzése – MONICA payload=compression. Alg. compress(payload); len_without_mac=16; padding_len=len_without_mac-5 -payload. length(); if (padding_len<4) padding_len=4; len_without_mac=padding_len+payload. length()+5; while ((len_without_mac%min. Len)!=0) len_without_mac++; padding_len=len_without_mac-5 -payload. length(); result=io. w. Uint 32(len_without_mac-4); result=result. concat(io. w. Byte(padding_len)); result=result. concat(payload); padding=new char[padding_len]; for (int i=0; i<padding_len; i++) padding[i]=(char)(Math. random()*255. 0); result=result. concat(new String(padding)); mac=mac. Alg. create. MAC(io. w. Uint 32(seq. No)). concat(result), IK); result=cipher. Alg. encode(result); result=result. concat(mac); Tóth Gergely, 2003. május 5. ELTE JAVA Speci (52)
Kérdések ? Tóth Gergely, 2003. május 5. ELTE JAVA Speci (53)
181c5a4ed18d6fc23c11a861473be624.ppt