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("<b>","<b>").replace("</b>","</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