Charla java

Preview:

Citation preview

S

Seguridad en aplicaciones 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Navaja Negra - CRASH - Fco. Honrubia

26

Preguntas???

26/5/12

Recommended