Bezpieczeństwo w aplikacjach Java

Podobne dokumenty
Aplikacje w środowisku Java

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Podstawy i języki programowania

Bezpieczne uruchamianie apletów wg

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Strumienie i serializacja

Wykład 8: Obsługa Wyjątków

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Laboratorium Programowania Kart Elektronicznych

Programowanie obiektowe zastosowanie języka Java SE

Wywoływanie metod zdalnych

Aplikacje w środowisku Java

Wykład 7: Pakiety i Interfejsy

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowane refleksyjne i serializacja

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Remote Method Invocation 17 listopada 2010

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

JAVA I SIECI. MATERIAŁY:

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Aplikacje RMI

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podstawy języka Java. przygotował:

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Aplikacja wielowątkowa prosty komunikator

Wywoływanie metod zdalnych

Instrukcja pobrania i instalacji. certyfikatu Microsoft Code Signing. wersja 1.4

1 Atrybuty i metody klasowe

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Programowanie obiektowe

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

akademia androida Składowanie danych część VI

Wykład 2: Podstawy Języka

Programowanie Obiektowe Ćwiczenie 4

Podpisywanie i bezpieczne uruchamianie apletów wg

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Java jako język programowania

Aplikacje RMI Lab4

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Dokumentacja do API Javy.

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Pakiety i interfejsy. Tomasz Borzyszkowski

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Java Platform Micro Edition

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Programowanie rozproszone w języku Java

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wyjątki (exceptions)

Tworzenie i wykorzystanie usług

Programowanie w Internecie. Java

Obsługa wyjątków. Rysunek 2-4 Hierarchia dziedziczenia klas wyjątków

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

KLASY, INTERFEJSY, ITP

Liczby pseudolosowe. Math. Różne sposoby generowania liczb pseudolosowych. Wybrane metody klasy Math

Java Podstawy. Michał Bereta

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Zaawansowane aplikacje WWW - laboratorium

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

2. Składnia, środowisko i konwencje w Javie

Java EE produkcja oprogramowania

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Projektowanie aplikacji internetowych laboratorium

Java SE Laboratorium nr 4. Temat: Obsługa wyjątków i zdarzeń

Programowanie obiektowe

Języki i metody programowania Java. Wykład 2 (część 2)

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Programowanie w języku Java. Bazy danych SQLite w Javie

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Transkrypt:

Bezpieczeństwo w aplikacjach Java

Weryfikacja kodu bajtowego Można wyłączyć podając w linii komend którąś z opcji: -Xverify:none lub -noverify jednak nie jest to zalecane https://stackoverflow.com/questions/2554 1778/does-verification-of-byte-codehappen-twice https://wiki.sei.cmu.edu/confluence/disp lay/java/env04- J.+Do+not+disable+bytecode+verification https://docs.oracle.com/javase/specs/jvm s/se8/html/jvms-4.html#jvms-4.10

Drukowanie informacji na standardowy wyjście printstacktrace zwykle używane do debuggowania, może doprowadzić do wycieku danych import java.io.ioexception; public class A { public static void main(string... args) { try { throw new NullPointerException(); catch (NullPointerException e) { System.out.println(e); java.lang.nullpointerexception Error: null try { java.io.ioexception throw new IOException(); at A.main(A.java:11) catch (IOException e) { System.out.println(e.getMessage()); e.printstacktrace(); System.exit(0);

Łamanie praw dostępu oraz interpretacji zakresu Mechanizmy, którymi można obejść reguły wyznaczone przez modyfikatory dostępu serializacja obiektów: Serializable i użycie transient refleksja: getdeclaredfield, getdeclaredmethod Zakres pola statyczne: static jeśli to ma być wartość niezmieniana, to z modyfikatorem final ograniczenie dziedziczenia jeśli klasa finalna, to z modyfikatorem final

Przykład (serializacja i wyjątki) import java.io.*; class Student implements Serializable { int id; String name; transient int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; try z okrągłymi nawiasami można stosować do obiektów implementujących java.lang.autocloseable, do których public class B { należą obiekty implementujące java.io.closeable public static void m() throws IOException, ClassNotFoundException { Student s = new Student(123, "Jan", 22); try (FileOutputStream f = new FileOutputStream("f.txt"); ObjectOutputStream out = new ObjectOutputStream(f);) { out.writeobject(s); out.flush(); System.out.println("success"); try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("f.txt"));) { s = (Student) in.readobject(); System.out.println(s.id + " " + s.name + " " + s.age); Do wyjątków stłumionych (ang. suppressed) można uzyskać dostęp wywołując metodę Throwable.getSuppressed wyjątku obsługiwanego strukturalnie w bloku catch https://docs.oracle.com/javase/tutorial/essential/exceptions/tryresourceclose.html

Inżynieria odwrotna Dekompilacja kodu bajtowego Javap c można pozyskać ciągi znaków, np. zaszyte hasła można też zaszumić kod, np.: nadpisz niechciany kod wartościami 00 00.. (nop) pamiętaj o argumentach operatorów (x9a0016 zamień na x570000, tj. "ifne +22 " na "pop nop nop" Dekompilatory http://www.crunchytricks.com/2016/07/bes t-offline-java-decompilers.html https://www.thecrazyprogrammer.com/2015/ 07/5-best-java-decompilers.html Mieszacze kodu (obfuscators) https://www.excelsior-usa.com/articles/javaobfuscators.html

Praca z kodem bajtowym (metody o tej samej nazwie i innym typie wartości zwracanej).class public overload.super java/lang/object.field static myint I.field static mydouble D.method static jvmoverload ()I.limit stack 3.limit locals 1 iconst_1 ireturn.end method.method static jvmoverload ()D.limit stack 3.limit locals 1 dconst_1 dreturn.end method.method public static main ([Ljava/lang/String;)V.limit stack 3.limit locals 1 invokestatic overload/jvmoverload ()I putstatic overload/myint I invokestatic overload/jvmoverload ()D putstatic overload/mydouble D return.end method.end class

Praca z kodem bajtowym (po dekompilacji nie można skompilować) >javac -classpath. overload.java overload.java:15: jvmoverload() is already defined in overload static double jvmoverload() ^ 1 error Kompilacja zdekompilowanego kodu kończy się błędem (istnienie dwóch metod o tej samej sygnaturze)

Generatory liczb pseudolosowych Ciągi liczb generowane przez Java.util.random dają się rozpoznać artykuł o rozpoznawaniu id sesji w Jetty: https://www.nccgroup.trust/globalassets/our -research/uk/whitepapers/randomness.pdf Należy stosować bardziej zaawansowane generatory liczb pseudolosowych, np. java.security.securerandom

Wstrzykiwanie poleceń SQL Rada zamiast Statement używać PreparedStatement https://www.journaldev.com/2489/jdbc-statementvs-preparedstatement-sql-injection-example

Podpisy, klucze, szyfrowanie Java Cryptography Architecture (JCA) Reference Guide https://docs.oracle.com/javase/8/docs/technotes/guides/ security/crypto/cryptospec.html Security Features in Java SE: Table of Contents https://docs.oracle.com/javase/tutorial/security/toc.html Packaging Programs in JAR Files https://docs.oracle.com/javase/tutorial/deployment/jar/int ro.html

Domyślna ścieżka User policy user.home/.java.policy user.home\.java.policy System policy Pliki polityki java.home/lib/security/java.policy java.home\lib\security\java.policy (Solaris/Linux) (Windows -%USERPROFILE%) Definicja położenie plików polityki (ścieżka jre) java.home/lib/security/java.security java.home\lib\security\java.security (Solaris/Linux) (Windows) (Solaris/Linux) (Windows) Edycja za pomocą policytool https://docs.oracle.com/javase/8/docs/technotes/guides/s ecurity/policyguide.html Linia komend z definicją pliku polityki java -Djava.security.manager - Djava.security.policy=someURL SomeApp Przykład pliku polityki https://docs.oracle.com/javase/tutorial/security/userper m/policy.html https://docs.oracle.com/javase/8/docs/technotes/guides/security/policyfiles.h tml

Podpisy cyfrowe Generowanie i weryfikowanie podpisów dla wymienianych plików https://docs.oracle.com/javase/tutorial/security/apisign/i ndex.html Podpisywanie i zabezpieczanie kodu https://docs.oracle.com/javase/tutorial/security/toolsign/ index.html Narzędzia keytool, jarsigner, Policy Tool, jar https://docs.oracle.com/javase/8/docs/technotes/guides/sec urity/securitytoolssummary.html Przykładowy scenariusz Publikowanie podpisanej aplikacji: utworzyć jar ze skompilowanymi klasami (jar) podpisać jar używając klucza prywatnego (jarsigner) jarsigner -keystore examplestore -signedjar scount.jar Count.jar signfiles wyeksportować certyfikat klucza publicznego odpowiadający kluczowi prywatnemu użytemu podczas podpisywania Uzyskanie zezwoleń przez podpisaną aplikację zaimportować certyfikat do magazynu kluczy (keytool) wygenerować plik polityki ze wskazaniem na podpisane źródło kodu uruchomić aplikację z menadżerem bezpieczeństwa

Przykład szyfrowania przy użyciu klucza Java Asymmetric Cryptography example https://www.mkyong.com/java/java-asymmetriccryptography-example/ RSA Signing and Encryption in Java http://niels.nu/blog/2016/java-rsa.html