1 / 53

JAVA Security

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. Tartalom. JAVA security alapkövek Buffer overflow JAVA security architektúra Bytecode security JAVA cryptography Applikáció authentikáció Appletek

vinny
Download Presentation

JAVA Security

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Tartalom • JAVA security alapkövek • Buffer overflow • JAVA security architektúra • Bytecode security • JAVA cryptography • Applikáció authentikáció • Appletek • J2ME • Saját projektem Tóth Gergely, 2003. május 5. (2) ELTE JAVA Speci

  3. 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 • aláírás ellenőrzés Tóth Gergely, 2003. május 5. (3) ELTE JAVA Speci

  4. Buffer overflow – az elmélet • buffer overflow: magasan a leggyakoribb kihasznált biztonsági lyuk Tóth Gergely, 2003. május 5. (4) ELTE JAVA Speci

  5. Buffer overflow – például C-ben #define BUF_SIZE 16 void ExploitableFunction(char* param){ // do something ... char localBufferOnStack[BUF_SIZE]; strcpy(localBufferOnStack, param); // do something ... printf("%s", localBufferOnStack); } void ExploiterFunction() { // nothing serious ExploitableFunction("1234567890"); // what will happen? ExploitableFunction("123456789012345678901234567890"); } Tóth Gergely, 2003. május 5. (5) ELTE JAVA Speci

  6. 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. (6) ELTE JAVA Speci

  7. 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 (ProtectionDomain) • 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. (7) ELTE JAVA Speci

  8. JAVA security architektúra II. • java.security.Permission • jogosultságok leírására • FilePermission • FilePermission(„/tmp/*”, „read”) • SocketPermission • SocketPermission(„localhost:1024-”, „listen”) • RuntimePermission • AWTPermission • ... Tóth Gergely, 2003. május 5. (8) ELTE JAVA Speci

  9. JAVA security architektúra III. • java.security.ProtectionDomain • 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. (9) ELTE JAVA Speci

  10. JAVA security architektúra IV. • java.security.Policy • leképezés: a futó kód bizonyos jellemzőihez (CodeSource) 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. (10) ELTE JAVA Speci

  11. JAVA security architektúra V. • Policy beállítása • van rá JDK tool (policytool) • policy fájl grant { permission java.lang.RuntimePermission "stopThread"; permission java.net.SocketPermission "localhost:1024-", "listen"; permission java.util.PropertyPermission "java.version", "read"; ... }; Tóth Gergely, 2003. május 5. (11) ELTE JAVA Speci

  12. 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) • a system domain frissíti a képernyőt és meghívja egy user domainbeli objektum paint metódusát (privilege loss) Tóth Gergely, 2003. május 5. (12) ELTE JAVA Speci

  13. 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.AccessController • annak eldöntésére, hogy van-e jogunk valamire • AccessController.checkPermission(Permission permission) • privilegizált művelet végrehajtására (a hívó domainjének összes jogosultságával) • AccessController.doPrivileged(PrivilegedAction action) Tóth Gergely, 2003. május 5. (13) ELTE JAVA Speci

  14. JAVA security architektúra – példa • java.awt.Cursor • getSystemCustomCursor: @return the system specific custom Cursor named cursor = (Cursor) java.security.AccessController.doPrivileged( new java.security.PrivilegedExceptionAction() { public Object run() throws Exception { Toolkit toolkit = Toolkit.getDefaultToolkit(); Image image = toolkit.getImage( systemCustomCursorDirPrefix + fileName); return toolkit.createCustomCursor( image, new Point(fx,fy), flocalized); } } ); Tóth Gergely, 2003. május 5. (14) ELTE JAVA Speci

  15. 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. (15) ELTE JAVA Speci

  16. Bytecode security II. Tóth Gergely, 2003. május 5. (16) ELTE JAVA Speci

  17. Bytecode security III. • Ellenőrzésre kerülnek: • a bytecode szintakszisa legális-e; • nincs-e paraméter stack over/underflow; • minden bytecode parancs minden paramétere megfelelő 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 (InputStream-et nem OutputStream-nek). Tóth Gergely, 2003. május 5. (17) ELTE JAVA Speci

  18. 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. (18) ELTE JAVA Speci

  19. Titkosítás • titkosító algoritmusok • szimmetrikus kulcsú algoritmusok • blokk-kódolók (pl. DES, 3DES, Blowfish, AES) • folyam-kódolók (pl. RC4) • 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. (19) ELTE JAVA Speci

  20. 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. (20) ELTE JAVA Speci

  21. Kriptográfiai példa I. – titkosítás import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; public class BlowfishKey { public static void main(String[] args) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("Blowfish"); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish"); Cipher cipher = Cipher.getInstance("Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); System.out.println(new String( cipher.doFinal("This is just an example".getBytes())); } } Tóth Gergely, 2003. május 5. (21) ELTE JAVA Speci

  22. Kriptográfiai hash generálás • hashelés (pl. SHA1 vagy MD5) • 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. (22) ELTE JAVA Speci

  23. Kriptográfiai példa II. – hash generálás • SHA-1 hash érték kiszámolása: • futtatás: MessageDigest sha = MessageDigest. getInstance("SHA-1"); sha.update(toHash); byte[] hash=sha.digest(); System.out.println(toHex(hash)); > java sha1 abc A9993E364706816ABA3E25717850C26C9CD0D89D Tóth Gergely, 2003. május 5. (23) ELTE JAVA Speci

  24. MAC generálás • MAC (Message Authentication Code) • „rejtjel kulccsal elvégzett hash művelet” • csak a rejtjelkulccsal rendelkező entitások képesek a MAC generálására • integritásvédelemre • pl. HMAC • HMAC-SHA1 • HMAC-MD5 Tóth Gergely, 2003. május 5. (24) ELTE JAVA Speci

  25. Kriptográfiai példa III. – MAC import java.security.*; import javax.crypto.*; public class initMac { public static void main(String[] args) throws Exception { // Generate secret key for HMAC-MD5 KeyGenerator kg = KeyGenerator.getInstance("HmacMD5"); SecretKey sk = kg.generateKey(); // Get instance of Mac object and // initialize it with the above secret key Mac mac = Mac.getInstance("HmacMD5"); mac.init(sk); System.out.println(new String(mac.doFinal( "Hi There".getBytes())); } } Tóth Gergely, 2003. május 5. (25) ELTE JAVA Speci

  26. 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. SHA1withRSA) Tóth Gergely, 2003. május 5. (26) ELTE JAVA Speci

  27. Digitális aláírás II. – generálás Tóth Gergely, 2003. május 5. (27) ELTE JAVA Speci

  28. Digitális aláírás III. – ellenőrzés Tóth Gergely, 2003. május 5. (28) ELTE JAVA Speci

  29. Kriptográfiai példa IV. – digitális aláírás byte[] toSign="Text to sign...".getBytes(); SecureRandom ran = new SecureRandom(); KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024, ran); KeyPair pair = keyGen.generateKeyPair(); // sign Signature sig = Signature.getInstance("SHA1withRSA"); sig.initSign(pair.getPrivate()); sig.update(toSign); byte[] signature=sig.sign(); // verify Signature ver = Signature.getInstance("SHA1withRSA"); ver.initVerify(pair.getPublic()); ver.update(toSign); System.out.println("Verification: "+ver.verify(signature)); Tóth Gergely, 2003. május 5. (29) ELTE JAVA Speci

  30. 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. (30) ELTE JAVA Speci

  31. 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 (jarsigner) • aszimmetrikus kulcsú digitális aláírás (pl. SHA1withRSA) • szoftver felhasználónál: .JAR fájl aláírásának ellenőrzése (jarsigner) Tóth Gergely, 2003. május 5. (31) ELTE JAVA Speci

  32. 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. (32) ELTE JAVA Speci

  33. 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. (33) ELTE JAVA Speci

  34. 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. (34) ELTE JAVA Speci

  35. 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/MJCWriteableIsAIS.class SHA1-Digest: lcNRm/q+QZnxygf9Ubf3PJWgND8= • ALIAS.DSA • aláírók nyilvános kulcsa (certificate-ek) • aláírások Tóth Gergely, 2003. május 5. (35) ELTE JAVA Speci

  36. Applikáció authentikáció – példa I. • kulcsgenerálás >keytool -genkey -alias tgm -keystore 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. (36) ELTE JAVA Speci

  37. Applikáció authentikáció – példa II. • applikáció készítés • applikáció aláírás >jar cvf sha1.jar sha1.class >jarsigner -keystore keystore.jks sha1.jar tgm Enter Passphrase for keystore: password Enter key password for tgm: tgmpassword Tóth Gergely, 2003. május 5. (37) ELTE JAVA Speci

  38. Applikáció authentikáció – példa III. • applikáció ellenőrzés – OK >jarsigner -verify -verbose -certs sha1.jar 134 Thu Mar 27 18:21:00 CET 2003 META-INF/MANIFEST.MF 187 Thu Mar 27 18:21:02 CET 2003 META-INF/TGM.SF 1026 Thu Mar 27 18:21:02 CET 2003 META-INF/TGM.DSA 0 Thu Mar 27 18:20:12 CET 2003 META-INF/ sm 1009 Thu Mar 27 18:06:06 CET 2003 sha1.class X.509, CN=Gergely Toth, OU=MIS, O=BUTE, L=Budapest, ST=Budapest, C=HU s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified. Tóth Gergely, 2003. május 5. (38) ELTE JAVA Speci

  39. 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 sha1.jar jarsigner: java.lang.SecurityException: SHA1 digest error for sha1.class Tóth Gergely, 2003. május 5. (39) ELTE JAVA Speci

  40. 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. (40) ELTE JAVA Speci

  41. 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. (41) ELTE JAVA Speci

  42. 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. (42) ELTE JAVA Speci

  43. Aláírt Applet példa II. – használat • Certificate import • JAVA plug-in control panelből Tóth Gergely, 2003. május 5. (43) ELTE JAVA Speci

  44. J2ME - 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. (44) ELTE JAVA Speci

  45. MIDP 1.0 • jelenlegi állapot • „homokozó” elv • nincs fájlrendszer-hozzáférés • limitált erőforrások (~100k memória, ~100k 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. (45) ELTE JAVA Speci

  46. MIDP 2.0 • hamarosan megjelenik (~idén nyáron) • security++ • permissions • bizonyos funkciók letiltása/engedélyezése • protection domains • Permission templates (untrusted, trusted, ...) • applikáció authentikáció • aláírás ellenőrzése • crypto csomagok (pl. SSL, HTTPS, WTLS) • push architecture: security? Tóth Gergely, 2003. május 5. (46) ELTE JAVA Speci

  47. 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. (47) ELTE JAVA Speci

  48. Saját magamról – MONICA projekt I. • JAVA alapú open-source SSH2 • http://monica.sourceforge.net Tóth Gergely, 2003. május 5. (48) ELTE JAVA Speci

  49. Saját magamról – MONICA projekt II. • JAVA alapú SCP2 (fejlesztés alatt) Tóth Gergely, 2003. május 5. (49) ELTE JAVA Speci

  50. Kriptográfiai műveletek az SSH2-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. (50) ELTE JAVA Speci

More Related