SEGURIDAD Y APLICACIONES WEB Licencia Creative Commons Esta obra esta distribuida bajo una licencia de: Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría.
No Comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales.
Compartir Igual (Share alike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Vulnerabilidades WEB
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web SQL Injection
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Vamos a explicar un poco más en profundidad algunas de las vulnerabilidades web más comunes y como prevenirlas Sql Injection
XSS XSRF Abuso de funcionalidad
Fuerza bruta
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web SQL INJECTION Es un método de infiltración de código que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para ejecutar querys contra la base de datos de la aplicación.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Ejemplo código vulnerable (Username y password se recogen de un formulario en pantalla) conn = pool.getConnection( ); String sql = "select * from user where username='" + username +"' and password='" + password + "'"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { loggedIn = true; out.println("Successfully logged in"); } else { out.println("Username and/or password not recognized"); }
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Ataque: Username == ' OR '1'='1 Password vacio La sentencia SQL que se ejecuta en la BD quedaría: select * from user where username='' OR '1'='1' and password=' ' Esta sentencia devolverá todos los datos de la tabla  y la aplicación nos permitirá ingresar en el sistema.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Nos podemos encontrar varios escenarios en los cuales explotar esta vulnerabilidad: La aplicación presenta mensajes de error de la BD
La aplicación presenta información en pantalla devuelta por la query
La aplicación presenta una pantalla de error genérica cuando la query falla
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web La aplicación presenta mensajes de error de la BD
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web La aplicación presenta información en pantalla devuelta por la query
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web La aplicación presenta una pantalla de error genérica cuando la query falla
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Porque son importantes estos tres escenarios? Nivel de información que nos dan y facilidad a la hora de extraerla Errores en pantalla: Versiones de Bd y en que estamos fallando al componer la query
Resultados de la query: Nos permiten obtener de vuelta los resultados de la query
Pantalla de error genérica: Nos fuerza a realizar Blind SQL Injection (Inyección SQL ciega)
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de SQLi en una aplicación? Mínimo:  Consultar, modificar o insertar los datos en las tabla sobre la que se realiza la query Si añadimos permisos mal configurados Consulta, modificación e inserción en todas las tablas a las que pueda acceder el usuario de BD (usuarios del sistema incluidas)
Ejecución de exploits sobre la BD que nos permita realizar una escalada de privilegios
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de SQLi? Validar  TODAS  las entradas que provengan del usuario.
En java utilizar la clase PreparedStatement.
El usuario de BD configurado en el servidor debe tener los mínimos privilegios posibles.
Controlar todos los errores que se puedan devolver presentando en todos los casos una pantalla de error genérica que no de ninguna información sobre el sistema  y/o error.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Validar TODAS las entradas. La validación se debe realizar en el servidor
Javascript NO SIRVE para securizar la entrada
Da igual que los datos vayan por POST o por GET
Se pueden inyectar TODOS los datos que viajan del navegador al servidor.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web JavaScript NO APORTA NINGUNA PROTECCIÓN
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Los métodos recomendados para la prevención de sql injectión para cualquier lenguaje de programación son: Uso de queries parametrizadas o Use de procedimientos almacenados
Escapar la entrada del usuario
Usuario de BD de la aplicación con mínimos privilegios
Lista blanca de validación Los datos solo pueden ser del tipo esperado (string, date, ...)
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Se deben aplicar todos estos métodos Estas políticas se implementarán SIEMPRE del lado servidor
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web En general para todos los lenguajes existen recomendaciones sobre como protegernos frente a Sqli En java: Usar la clase PreparedStatement
Hibernate CreateQuery con bind parameters En PHP db->prepare
sql->bind_param
mysql_real_escape_string para mysql
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Ejemplo query con java: String custname = request.getParameter("customerName"); // This should REALLY be validated too // perform input validation to detect attacks String query = "SELECT account_balance FROM user_data WHERE  user_name = ?  "; PreparedStatement  pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname);  ResultSet results = pstmt.executeQuery( );
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Algunas referencias en la web: http://es.wikipedia.org/wiki/Inyección_SQL https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¡No debemos olvidar que el simple hecho de seguir estas recomendaciones no aporta una seguridad absoluta! Se debe codificar el acceso a base de datos con la seguridad en mente.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web XSS Cross Site Scripting
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Cross Site Scripting (XSS) Vulnerabilidad que permite inyectar scripts o contenido en páginas web. Tipos: No persistente
Persistente
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Se da cuando se utiliza la entrada del usuario para componer la respuesta html que devolverá el servidor. Si la entrada del usuario se guarda en BD y se utiliza posteriormente para componer la salida html hacia el cliente a esta vulnerabilidad se le denomina  XSS persistente
Si no es así la denominará  XSS no persistente
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web XSS No Persistente El ejemplo más popular actualmente el de la página web de la presidencia europea y mr. Bean
Http ://www.eu2010.es/en/resultadoBusqueda.html?query= %3Cscript%3Edocument.write%28%27%3Cimg%20src%3D%22http%3A%2F%2Fblog.tmcnet.com%2Fblog%2Ftom-keating%2Fimages%2Fmr-bean.jpg%22%20%2F%3E%27%29%3C%2Fscript%3E& index=buscadorGeneral_en
<script>document.write('<img src=”http /../mr-bean.jpg”/>')</script>
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web XSS Persistente Más peligroso que el anterior, sobre todo porque es más difícilmente detectable (no se verá en la url) y es más probable que el número de afectados sea mayor.
Sucede cuando la inyección realizada por el atacante es guardada en el servidor y usada para componer la página atacada cada vez que es solicitada por algún usuario.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de XSS? Este tipo de vulnerabilidad afecta principalmente al usuario de la aplicación web
Se pueden robar credenciales de los servicios en los que este acreditado el usuario en el momento de ejecución del script (cookies de sesión , …)
También se pueden ejecutar exploits que aprovechen vulnerabilidades del navegador pudiendo llegar a tener el control sobre el equipo de la víctima.
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web ¿Como evitar los ataques de XSS? Validar  TODAS  las  entradas  que provengan del usuario.
Validar  TODAS  las  salidas  de datos de la aplicación que provengan de datos introducidos anteriormente por un usuario
SEGURIDAD Y APLICACIONES WEB Vulnerabilidades Web Validar TODAS las entradas. La validación se debe realizar en el servidor
Javascript NO SIRVE para securizar la entrada

Curso basicoseguridadweb slideshare3

  • 1.
    SEGURIDAD Y APLICACIONESWEB Licencia Creative Commons Esta obra esta distribuida bajo una licencia de: Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría.
  • 2.
    No Comercial (Noncommercial): La explotación de la obra queda limitada a usos no comerciales.
  • 3.
    Compartir Igual (Sharealike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas.
  • 4.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Vulnerabilidades WEB
  • 5.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web
  • 6.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web SQL Injection
  • 7.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Vamos a explicar un poco más en profundidad algunas de las vulnerabilidades web más comunes y como prevenirlas Sql Injection
  • 8.
    XSS XSRF Abusode funcionalidad
  • 9.
  • 10.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web SQL INJECTION Es un método de infiltración de código que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para ejecutar querys contra la base de datos de la aplicación.
  • 11.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Ejemplo código vulnerable (Username y password se recogen de un formulario en pantalla) conn = pool.getConnection( ); String sql = &quot;select * from user where username='&quot; + username +&quot;' and password='&quot; + password + &quot;'&quot;; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { loggedIn = true; out.println(&quot;Successfully logged in&quot;); } else { out.println(&quot;Username and/or password not recognized&quot;); }
  • 12.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Ataque: Username == ' OR '1'='1 Password vacio La sentencia SQL que se ejecuta en la BD quedaría: select * from user where username='' OR '1'='1' and password=' ' Esta sentencia devolverá todos los datos de la tabla y la aplicación nos permitirá ingresar en el sistema.
  • 13.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Nos podemos encontrar varios escenarios en los cuales explotar esta vulnerabilidad: La aplicación presenta mensajes de error de la BD
  • 14.
    La aplicación presentainformación en pantalla devuelta por la query
  • 15.
    La aplicación presentauna pantalla de error genérica cuando la query falla
  • 16.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web La aplicación presenta mensajes de error de la BD
  • 17.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web La aplicación presenta información en pantalla devuelta por la query
  • 18.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web La aplicación presenta una pantalla de error genérica cuando la query falla
  • 19.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¿Porque son importantes estos tres escenarios? Nivel de información que nos dan y facilidad a la hora de extraerla Errores en pantalla: Versiones de Bd y en que estamos fallando al componer la query
  • 20.
    Resultados de laquery: Nos permiten obtener de vuelta los resultados de la query
  • 21.
    Pantalla de errorgenérica: Nos fuerza a realizar Blind SQL Injection (Inyección SQL ciega)
  • 22.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de SQLi en una aplicación? Mínimo: Consultar, modificar o insertar los datos en las tabla sobre la que se realiza la query Si añadimos permisos mal configurados Consulta, modificación e inserción en todas las tablas a las que pueda acceder el usuario de BD (usuarios del sistema incluidas)
  • 23.
    Ejecución de exploitssobre la BD que nos permita realizar una escalada de privilegios
  • 24.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¿Como evitar los ataques de SQLi? Validar TODAS las entradas que provengan del usuario.
  • 25.
    En java utilizarla clase PreparedStatement.
  • 26.
    El usuario deBD configurado en el servidor debe tener los mínimos privilegios posibles.
  • 27.
    Controlar todos loserrores que se puedan devolver presentando en todos los casos una pantalla de error genérica que no de ninguna información sobre el sistema y/o error.
  • 28.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Validar TODAS las entradas. La validación se debe realizar en el servidor
  • 29.
    Javascript NO SIRVEpara securizar la entrada
  • 30.
    Da igual quelos datos vayan por POST o por GET
  • 31.
    Se pueden inyectarTODOS los datos que viajan del navegador al servidor.
  • 32.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web JavaScript NO APORTA NINGUNA PROTECCIÓN
  • 33.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Los métodos recomendados para la prevención de sql injectión para cualquier lenguaje de programación son: Uso de queries parametrizadas o Use de procedimientos almacenados
  • 34.
    Escapar la entradadel usuario
  • 35.
    Usuario de BDde la aplicación con mínimos privilegios
  • 36.
    Lista blanca devalidación Los datos solo pueden ser del tipo esperado (string, date, ...)
  • 37.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Se deben aplicar todos estos métodos Estas políticas se implementarán SIEMPRE del lado servidor
  • 38.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web En general para todos los lenguajes existen recomendaciones sobre como protegernos frente a Sqli En java: Usar la clase PreparedStatement
  • 39.
    Hibernate CreateQuery conbind parameters En PHP db->prepare
  • 40.
  • 41.
  • 42.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Ejemplo query con java: String custname = request.getParameter(&quot;customerName&quot;); // This should REALLY be validated too // perform input validation to detect attacks String query = &quot;SELECT account_balance FROM user_data WHERE user_name = ? &quot;; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( );
  • 43.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Algunas referencias en la web: http://es.wikipedia.org/wiki/Inyección_SQL https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API
  • 44.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¡No debemos olvidar que el simple hecho de seguir estas recomendaciones no aporta una seguridad absoluta! Se debe codificar el acceso a base de datos con la seguridad en mente.
  • 45.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web XSS Cross Site Scripting
  • 46.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Cross Site Scripting (XSS) Vulnerabilidad que permite inyectar scripts o contenido en páginas web. Tipos: No persistente
  • 47.
  • 48.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Se da cuando se utiliza la entrada del usuario para componer la respuesta html que devolverá el servidor. Si la entrada del usuario se guarda en BD y se utiliza posteriormente para componer la salida html hacia el cliente a esta vulnerabilidad se le denomina XSS persistente
  • 49.
    Si no esasí la denominará XSS no persistente
  • 50.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web XSS No Persistente El ejemplo más popular actualmente el de la página web de la presidencia europea y mr. Bean
  • 51.
  • 52.
  • 53.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web XSS Persistente Más peligroso que el anterior, sobre todo porque es más difícilmente detectable (no se verá en la url) y es más probable que el número de afectados sea mayor.
  • 54.
    Sucede cuando lainyección realizada por el atacante es guardada en el servidor y usada para componer la página atacada cada vez que es solicitada por algún usuario.
  • 55.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¿Que podemos conseguir al explotar una vulnerabilidad de XSS? Este tipo de vulnerabilidad afecta principalmente al usuario de la aplicación web
  • 56.
    Se pueden robarcredenciales de los servicios en los que este acreditado el usuario en el momento de ejecución del script (cookies de sesión , …)
  • 57.
    También se puedenejecutar exploits que aprovechen vulnerabilidades del navegador pudiendo llegar a tener el control sobre el equipo de la víctima.
  • 58.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web ¿Como evitar los ataques de XSS? Validar TODAS las entradas que provengan del usuario.
  • 59.
    Validar TODAS las salidas de datos de la aplicación que provengan de datos introducidos anteriormente por un usuario
  • 60.
    SEGURIDAD Y APLICACIONESWEB Vulnerabilidades Web Validar TODAS las entradas. La validación se debe realizar en el servidor
  • 61.
    Javascript NO SIRVEpara securizar la entrada