26
S Seguridad en aplicaciones Java

Charla java

Embed Size (px)

Citation preview

Page 1: Charla java

S

Seguridad en aplicaciones Java

Page 2: Charla java

Navaja Negra - CRASH - Fco. Honrubia

2

Índice

Injection.

Cross-Site Scripting (XSS).

Gestión de la sesión.

Autenticación y autorización.

26/5/12

Page 3: Charla java

Navaja Negra - CRASH - Fco. Honrubia

3

Injection

Un ataque de este tipo como SQL, OS y LDAP injection se produce cuando datos sin verificar llegan a un interprete como parte de un comando o consulta. Estos datos pueden hace que el interprete ejecute comandos y/o acceda a datos para los que no debería tener autorización.

26/5/12

Page 4: Charla java

Navaja Negra - CRASH - Fco. Honrubia

4

Injection

SQL injection. String query = "SELECT account_balance FROM

user_data WHERE user_name = " + request.getParameter("customerName");

try { Statement statement =

connection.createStatement( … ); ResultSet results = statement.executeQuery( query );

}

26/5/12

Page 5: Charla java

Navaja Negra - CRASH - Fco. Honrubia

5

Injection

Soluciones: Utilizar Prepared Statements (Consultas parametrizadas).

String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";

PreparedStatement pstmt = connection.prepareStatement( query );

pstmt.setString( 1, custname); Utilizar Procedimientos almacenados. Escapar todas las entradas de usuario.

Adicionales: Disminuir al mínimo los privilegios de las consultas. Validación mediante lista blanca de las entradas.

26/5/12

Page 6: Charla java

Navaja Negra - CRASH - Fco. Honrubia

6

Injection

ORM’s Hibernate MyBatis

El propio driver jdbc escapa los parámetros.

OJO: Query unsafeHQLQuery = session.createQuery("from

Inventory where productID='"+userSuppliedParameter+"'"); Query safeHQLQuery = session.createQuery(“fromo

Inventory where productID = :param”); safeHQLQuery.setString(“param”,”valor”) ;

26/5/12

Page 7: Charla java

Navaja Negra - CRASH - Fco. Honrubia

7

Índice

Injection.

Cross-Site Scripting (XSS).

Gestión de la sesión.

Autenticación y autorización.

26/5/12

Page 8: Charla java

Navaja Negra - CRASH - Fco. Honrubia

8

Cross-Site Scripting (XSS)

Los ataques XSS se producen cuando una aplicación envía a un navegador web datos sin validar ni escapar. Estos ataques permiten al atacante ejecutar scripts en el navegador de la victima. Obtener su sesión. Redirigir a la victima a sitios maliciosos. …

26/5/12

Page 9: Charla java

Navaja Negra - CRASH - Fco. Honrubia

9

Cross-Site Scripting (XSS)

Son ataques complicados de detectar.

Normalmente son fáciles de corregir. Salvo que en nuestra aplicación tengamos que

permitir al usuario introducir código html.

OJO: no es suficiente con filtrar las entradas -> filtrar también los datos que vienen de partes “seguras”.

26/5/12

Page 10: Charla java

Navaja Negra - CRASH - Fco. Honrubia

10

Cross-Site Scripting (XSS)

Ejemplo JSP vulnerable: <textarea rows="5" cols="50"> <%= request.getAttribute(”userName")%> </textarea>

26/5/12

Page 11: Charla java

Navaja Negra - CRASH - Fco. Honrubia

11

Cross-Site Scripting (XSS)

Uso de frameworks JSF Struts JSTL …

Con cualquiera de ellos filtra automáticamente estos datos. <s:textfield key="username" name="userName"/>

26/5/12

Page 12: Charla java

Navaja Negra - CRASH - Fco. Honrubia

12

Cross-Site Scripting (XSS)

Si tenemos que permitir el uso de html en las entradas de usuario (Editor de texto)

Utilizar una lista blanca. Permitir negritas:

texto_filtrado.replace("&lt;b&gt;","<b>").replace("&lt;/b&gt;","</b>";

Filtrar todo lo demás.

26/5/12

Page 13: Charla java

Navaja Negra - CRASH - Fco. Honrubia

13

Índice

Injection.

Cross-Site Scripting (XSS).

Gestión de la sesión.

Autenticación y autorización.

26/5/12

Page 14: Charla java

Navaja Negra - CRASH - Fco. Honrubia

14

Gestión de la sesión

El problema relacionado con la gestión de la sesión es el robo de la misma, normalmente es muy simple con un sniffer robar el identificador de sesión del usuario.

26/5/12

Page 15: Charla java

Navaja Negra - CRASH - Fco. Honrubia

15

Gestión de la sesión

Reducir el robo de sesión. No poner sesionId en urls. Cuando un usuario hace login regenerar la sesión.

currentSession.invalidate(); HttpSession newSession = request.getSession(true)

Controlar el logout del usuario para invalidar la sesión.

Controlar el timeout de la sesión.

26/5/12

Page 16: Charla java

Navaja Negra - CRASH - Fco. Honrubia

16

Gestión de la sesión

Frameworks (Srpring Security) <session-management session-fixation-

protection="migrateSession"/>

Tomcat 7

Solución mas fiable es usar https

26/5/12

Page 17: Charla java

Navaja Negra - CRASH - Fco. Honrubia

17

Índice

Injection.

Cross-Site Scripting (XSS).

Gestión de la sesión.

Autenticación y autorización.

26/5/12

Page 18: Charla java

Navaja Negra - CRASH - Fco. Honrubia

18

Autenticación y autorización

Autenticación: un usuario es quién dice ser.

Autorización: el usuario tiene acceso solo a los recursos que debe tener.

Existen diversas formas de autenticación y autorización, basada en servidor o a nivel de aplicación

26/5/12

Page 19: Charla java

Navaja Negra - CRASH - Fco. Honrubia

19

Autenticación y autorización

Autenticación basada en servidor

HTTP Basic Authentication (sale una ventana emergente para pedir usuario y pass)

HTTP Digest Authentication (igual pero cifrado en md5)

Form Based Authentication (formulario web de login j_securtity_check)

HTTPS Client Authentication (soporte de certificados)

Problemas login con aplicaciones de terceros…

26/5/12

Page 20: Charla java

Navaja Negra - CRASH - Fco. Honrubia

20

Autenticación y autorización

Autorización basada en servidor: Concepto de reino “realms” en los que se encapsula

cada usuario (rol).

26/5/12

Page 21: Charla java

Navaja Negra - CRASH - Fco. Honrubia

21

Autenticación y autorización

A nivel de aplicación: es muy complicado conseguir una aplicación segura.

Uso de frameworks: Spring Security Apache Shiro

26/5/12

Page 22: Charla java

Navaja Negra - CRASH - Fco. Honrubia

22

Autenticación y autorización

¿Qué proporcionan estos frameworks? Autenticación. Autorización. Session management. Criptografía.

26/5/12

Page 23: Charla java

Navaja Negra - CRASH - Fco. Honrubia

23

Autenticación y autorización

Apache Shiro: Fácil Configuración. Fácil integración con entornos distribuidos. Integración con aplicaciones de escritorio. Soporte LDAP, Kerberos… …

26/5/12

Page 24: Charla java

Navaja Negra - CRASH - Fco. Honrubia

24

Autenticación y autorización

Spring Security: Fácil Configuración (10 líneas XML). No invasivo (No afecta a objetos de negocio). Soporte OpenID (Google, IBM, Sun, Yahoo…). Soporte LDAP, Kerberos... Log in con redes sociales (Spring Social). Secure Web Services …

26/5/12

Page 25: Charla java

Navaja Negra - CRASH - Fco. Honrubia

25

Referencias

http://www.owasp.org

http://static.springsource.org/spring-security/site/

http://shiro.apache.org

26/5/12

Page 26: Charla java

Navaja Negra - CRASH - Fco. Honrubia

26

Preguntas???

26/5/12