Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF



Podobne dokumenty
The OWASP Foundation Session Management. Sławomir Rozbicki.

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

prepared by: Programowanie WWW Servlety

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

CGI i serwlety. Plan wykładu. Wykład prowadzi Mikołaj Morzy. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji

Architektury Usług Internetowych. Laboratorium 1. Servlety

Tworzenie i wykorzystanie usług

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Aplikacje internetowe i rozproszone - laboratorium

Zarządzanie sesją w aplikacjach Internetowych. Kraków, Paweł Goleń

Programowanie w Internecie

Piotr Laskowski Krzysztof Stefański. Java Servlets

Systemy Rozproszone - Ćwiczenie 6

Google Web Toolkit. Piotr Findeisen

Integracja frameworku Wicket z serwisem Platnosci.pl.

Java EE: Serwlety i filtry serwletów

Programowanie w języku Java

FRONT-END SECURITY SZYMON GRZYBOWSKI NSENSE POLSKA S.A.

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Google Web Toolkit Michał Węgorek ZPO 2009

Java wybrane technologie spotkanie nr 3. Serwlety

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

Wybrane działy Informatyki Stosowanej

HTTP W 5-CIU PYTANIACH MICHAŁ KOPACZ

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Stripes & Stripernate. Zbigniew Skowron 13 kwietnia 2007

Programowanie obiektowe

Java Enterprise Edition spotkanie nr 4. Java Server Pages c.d.

Wywoływanie metod zdalnych

1 Wprowadzenie do J2EE

Wywoływanie metod zdalnych

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Zaawansowane aplikacje internetowe laboratorium

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Java wybrane technologie

prepared by: Programowanie WWW Model-View-Controller

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

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

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

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

Remote Method Invocation 17 listopada 2010

STRUTS 2. Krystyna Bury Katarzyna Sadowska Joanna Pyc Politechnika Wrocławska Wydział Informatyki i Zarządzania Informatyka, III rok

In»ynieria systemów informacyjnych - Adam Krechowicz

Zagadnienia Programowania Obiektowego Agata Hejmej

Wzorce prezentacji internetowych

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Architektura MVC w ASP.NET. Autor wykładu: Marek Wojciechowski

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku XSS

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

Java Database Connectivity

Serwlety. Co to jest serwlet? Przykładowy kod serwletu. Po co są serwlety?

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Kurs rozszerzony języka Python

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ć

Drobne błędy w portalach WWW

Bezpieczeństwo portali społecznościowych w ujęciu robaków Web 2.0

Architektury Usług Internetowych. Laboratorium 1 Servlety

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

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

Java wybrane technologie spotkanie nr 5. Java Server Pages

Programowanie obiektowe

I.Wojnicki, Tech.Inter.

Java programowanie w sieci. java.net RMI

Programowanie wielowarstwowe i komponentowe

b) Jako nazwę projektu wpisz SerwletyJSPJSTL. Nie zmieniaj wartości pozostałych opcji. Kliknij przycisk Next >.

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

DLL TUTORIAL GÖRLITZ GERMANY 20:30. Spis Treści


KLASY, INTERFEJSY, ITP

Serwlety i JSP. Autor: Marek Zawadka deekay@gazeta.pl

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

1. Podstawowe usługi bezpieczeństwa. 2. Użytkownicy i role. przydzielanie uprawnie ń metodom, role komponentów, korzystanie i konfiguracja

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

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

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

Wstęp. Ale po co? Implementacja

Programowanie warstwy klienta w aplikacji JavaEE

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Aktywne i dynamiczne strony WWW. Elementy projektowania stron WWW. Część 3. Formularze HTML przykład. Formularze HTML. dr inŝ.

Tworzenie aplikacji w języku Java

Architektura Model-View-Controller

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Transkrypt:

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

O mnie 12 lat doświadczenia w systemach WEB Java/JEE (ISC) 2 CISSP CTO w J-LABS

GET / HTTP/1.1 Host: bank.pl User-Agent: Mozilla/5.0 HTTP/1.1 200 OK Set-Cookie: JSESSIONID=2UvGThyi46DQuiYXlbLp4Zft; expires=sun, 17-Nov-2013 12:13:13 GMT; path=/; domain=bank.pl; httponly; Secure

TWOJA PRZEGLĄDARKA ZAWSZE WYSYŁA COOKIE

TWOJA PRZEGLĄDARKA ZAWSZE WYSYŁA COOKIE

GET /favicon.png HTTP/1.1 Host: bank.pl User-Agent: Mozilla/5.0 Cookie: JSESSIONID=2UvGThyi46DQuiYXlbLp4Zft

Hej zobacz jaka fajna strona http://bit.ly/sqgzns <html>... <img src= http://bank.pl/przelew?z=007&do=666&kwota=42 > </html>

Demo

Jak to się stało? www.fajnastrona.pl <img src= http://bank.pl/przelew?z=007&do=666&kwota=42 > http://bank.pl/przelew?z=007&do=666&kwota=42 Cookie: JSESSIONID=2UvGThyi46D

A można też. <html>... <form action="http://bank.pl/przelew" method="post" id="form"> <input type="hidden" name="splackarte" value="true"/> </form> <script> var csrf = document.getelementbyid("form"); csrf.submit(); </script> </html>

Skala zjawiska 5 w OWASP top10

Ochrona - TOKEN String token = generaterandomtoken(); HttpSession session = request.getsession(false); session.setattribute(token, token); PrintWriter out = response.getwriter(); out.println("<input type='hidden' name='token' value='" + token +"'/>"); i weryfikacja String requesttoken = request.getparameter("token"); String sessiontoken = session.getattribute(token).tostring(); if (! sessiontoken.equals(requesttoken)) {.}

Ochrona ponowne uwierzytelnienie captcha itp.

Ochrona (od strony użytkownika) Wyloguj się NoScript

<% String token = generaterandomtoken(); session.setattribute(token, token); %> <form> <input type='hidden' name='token' value='<%=token%>' /> <!--... --> </form> <% String requesttoken=request.getparameter("token"); String sessiontoken=session.getattribute(token).tostring(); if(! sessiontoken.equals(requesttoken)){//... } %>

struts.xml: <interceptors> <interceptor-stack name="defaultsecuritystack"> <interceptor-ref name="defaultstack"/> <interceptor-ref name="tokenstack"> <param name="excludemethods">*</param> </interceptor-ref> </interceptor-stack> </interceptors> <action> <interceptor-ref name="defaultsecuritystack"> <param name="tokensession.includemethods">*</param> </interceptor-ref> </action> i w formularzu <s:token />

public class CsrfForm extends HtmlForm { public void encodebegin(facescontext context) throws IOException { TokenInput tokeninput = new TokenInput(); getchildren().add(tokeninput); super.encodebegin(context); } } public class TokenInput extends UIComponentBase { public void encodeend(facescontext context) throws IOException { //generowanie: <input type= hidden name= token value= losowy token /> } } // weryfikacja w public void decode(facescontext context) { //weryfikacja }

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib"> <h:form> <s:token /> </h:form>

Double Submit Cookies RequestBuilder RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url); rb.setheader("x-xsrf-cookie", Cookies.getCookie("myCookieKey")); rb.sendrequest(null, mycallback); GWT RPC public interface ExampleInterface extends RemoteService { public boolean examplemethod(string cookievalue); public void differentexamplemethod(string cookievalue, String arg); }

wersja: 2.3+ public class MyServiceImpl extends XsrfProtectedServiceServlet implements MyService { } public String mymethod(string s) { } public interface MyService extends XsrfProtectedService { public String mymethod(string s); } albo @XsrfProtect public interface MyService extends RemoteService { public String mymethod(string s); }

Domyślnie posiada ochronę! Można ją wyłączyć poprzez: <init-param> <param-name>disable-xsrf-protection</param-name> <param-value>true</param-value> </init-param>

WICKET ma zabezpieczenie!

Nie ma wbudowanej ochrony public class CSRFFilterImpl implements ComponentEventRequestFilter, LinkFactoryListener{ } i dodajemy do modułu aplikacji.

@Intercepts(LifecycleStage.EventHandling) public class CSRFInterceptor implements Interceptor { public Resolution intercept(executioncontext ctx) throws Exception { HttpServletRequest request = ctx.getactionbean().getcontext().getrequest(); HttpSession session = request.getsession(false); } weryfikacja tokenu return ctx.proceed(); <init-param> <param-name>interceptor.classes</param-name> <param-value> pl.package.name.csrf.csrfinterceptor </param-value> </init-param> <stripes:hidden name="token" value="${sessionscope.token}" />

o Analiza statyczna skanery kodu źródłowego (Yasca, Fortify) Uwaga! Skaner nie sprawdzi, czy token jest weryfikowany! o Analiza dynamiczna kopiowanie formularzy, umieszczanie w innej domenie otwarcie strony z poziomu zalogowanego użytkownika

Więcej informacji: http://old.zope.org/members/jim/zopesecurity/clientsidetrojan http://www.tux.org/~peterw/csrf.txt http://www.isecpartners.com/files/xsrf_paper_0.pdf http://en.wikipedia.org/wiki/samy_%28xss%29 http://www.darkreading.com/security/application-security/208804131/index.html http://directwebremoting.org/blog/joe/2007/01/01/csrf_attacks_or_how_to_avoid_exposing_your_gmail_contacts.html https://www.owasp.org/index.php/top_10_2007-a5 http://en.wikipedia.org/wiki/cross-site_request_forgery https://www.owasp.org/index.php/top_10_2010-a5 http://java.sun.com/blueprints/corej2eepatterns/patterns/frontcontroller.html http://java.dzone.com/articles/preventing-csrf-jsf-20 http://code.google.com/webtoolkit/articles/security_for_gwt_applications.html#xsrf http://code.google.com/webtoolkit/doc/latest/devguidesecurityrpcxsrf.html http://nickcoblentz.blogspot.com/2008/11/csrf-prevention-in-struts-2.html http://wiki.apache.org/tapestry/tapestry5csrf https://www.owasp.org/index.php/cross-site_request_forgery_%28csrf%29 https://www.owasp.org/index.php/reviewing_code_for_cross-site_request_forgery_issues http://www.cgisecurity.com/csrf-faq.html http://shiflett.org/articles/cross-site-request-forgeries http://pl.wikipedia.org/wiki/cross-site_request_forgery http://www.w3schools.com/js/js_cookies.asp http://docs.jboss.org/seam/2.1.2/reference/en-us/html/controls.html#d0e28825 http://seamframework.org/documentation/crosssiterequestforgery

www.j-labs.pl Piotr Bucki piotr.bucki@j-labs.pl Szymon Janowski szymon.janowski@j-labs.pl Dziękujemy zakończenie Piotr Konieczny pk@niebezpiecznik.pl