JORGE NERU BARRERA BARRERA 0900-10-1259 GUATEMALA, 19 DE ABRIL 2014.
INTRODUCCION
El sigueinte trabajo es un resumen del top 10 de la owasp que tiene como objetivo que los desarrolladores elaboren aplicaciones web mas seguras ante las vulnerabilidades actuales, adicional nos muestran herramientas que deben utilizarse para verificar los errors mas communes de inseguridad del ambiente web.
Tabla de contenido
Introduccin 2 Inyeccin de cdigo 4 Perdida de autenticacin y gestin de sesiones 6 Secuencia de sitios cruzados XSS 7 Referencia directa insegura a objetos
7 Configuracin de seguridad incorrecta
8 Exposicin de datos sensibles 8 Inexistente Control de Acceso a nivel de funcionalidades
9 Falsificacin de peticiones en Sitios Cruzados (CSRF)
9 Uso de componentes con vulnerabilidades conocidas
10 Redicciones y reenvos no validos
10 Conclusiones 11
Inyeccin de cdigo:
Es bsicamente la vulnerabilidad que existe en introducir cdigo a travs del intrprete que pueda resultar en perdida de informacin o acceso a informacin sensitiva y/o confidencial. Este tipo de riesgo se puede mitigar utilizando una API parametrizada que impida la inyeccin de cdigo a travs del interprete por ejemplo utilizar procedimientos almacenados Store Procedures. Es necesario que cuando se utilicen Frameworks se valide que no se est confiando demasiado en el de tal forma que se puedan explotar sus vulnerabilidades. Elaborar una lista blanca de caracteres tambin es muy importante sin embargo el intrprete puede utilizar caracteres especiales para comunicarse con otros sistemas. Ejemplos de querys seguros en lenguajes populares:
Language - Library Parameterized Query Java - Standard String custname = request.getParameter("customerName"); String query = "SELECT account_balance FROM user_data WHERE user_name = ? "; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( );
Java - Hibernate //HQL Query safeHQLQuery = session.createQuery("from Inventory where productID=:productid"); safeHQLQuery.setParameter("productid", userSuppliedParameter); //Criteria API String userSuppliedParameter = request.getParameter("Product-Description"); // This should REALLY be validated too // perform input validation to detect attacks Inventory inv = (Inventory) session.createCriteria(Inventory.class).add (Restrictions.eq("productDescription", userSuppliedParameter)).uniqueResult();
Perdida de Autentificacin y gestin de sesiones.
Es bsicamente la vulnerabilidad que existe en las credencias y los identificadores de sesiones. Las vulnerabilidades son las siguientes: 1. Las credenciales de los usuarios no estn protegidas cuando se almacenan utilizando un hash o cifrado. 2. Se pueden adivinar o sobrescribir las credenciales a travs de funciones dbiles de gestin de la sesin. 3. Los ID de sesin son expuestos en la URL. 4. Dejar los IDS in control de expiracin. 5. Transmisin de contraseas, ID de sesin y otras credenciales son transmitidas a travez de canales no cifrados.
Existen actualmente algunas tecnologas que pueden utilizarse para mejorar la seguridad en cuanto a autenticacin de password y gestin de sesiones para tener mejor control. Adicional debemos tomar en cuenta las siguientes recomendaciones:
1. Generar una gua de password para una aplicacin: a. Largo mnimo de password as como su mximo. b. Complejidad de password debe tener maysculas, minsculas, nmeros y caracteres especiales. c. No utilizar 2 caracteres iguales juntos, etc. 2. Implementar un mecanismo de recuperacin de password 3. Guardar los password de forma segura utilizando criptografa. 4. Trasmitir los password a travs de TLS (Transport Layer protection) 5. Utilizar la re autenticacin por funcionalidades sensitivas 6. Utilizar Multifactor Authentication ej. Tokens, biometra, nmeros de telfono, etc. 7. Autentificacion a travez de SSL, conocidas como doble autenticacin donde el navegador y el servidor envias sus respectivos certificados durante el proceso TLS handshake. 8. Correcto manejo de autenticacin de mensajes, ej. El usuario o password son incorrectos 9. Utilizar un mecanismo de defensa ante ataques de fuerza-bruta, utilizando autenticacin multifactor, o bloqueo de cuentas por 20 min.
Secuencia de comandos en Sitios cruzados (XSS)
Consideremos que cualquier persona pueda enviar datos no confiables al sistema, el atacante enva cadenas de comandos de ataque que explotan el intrprete del navegador. La mayora de fallas de XSS son detectadas de forma relativamente fcil por medio de pruebas o anlisis de cdigo. La vulnerabilidad consiste en que el atacante puede ejecutar secuencia de comandos en el navegador de la vctima para secuestrar las sesiones de usuario, alterar la apariencia del sitio web, insertar cdigo, redirigir usuario, secuestrar el navegador.
Resumen de reglas para prevenir el XSS
Tipo de Data Contexto Ejemplo de cdigo Defensa String HTML Body <span>UNTRUSTED DATA</span> HTML Entity Encoding String Safe HTML Attributes <input type="text" name="fname" value="UNTRUSTED DATA"> Aggressive HTML Entity Encoding Only place untrusted data into a whitelist of safe attributes (listed below). Strictly validate unsafe attributes such as background, id and name. String GET Parameter <a href="/site/search?value=UNTRUSTED DATA">clickme</a> URL Encoding String Untrusted URL in a SRC or HREF attribute <a href="UNTRUSTED URL">clickme</a> <iframe src="UNTRUSTED URL" /> Canonicalize input URL Validation Safe URL verification Whitelist http and https URL's only (Avoid the JavaScript Protocol to Open a new Window) Attribute encoder String CSS Value <div style="width: UNTRUSTED DATA;">Selection</div> Strict structural validation CSS Hex encoding Good design of CSS Features String JavaScript Variable <script>var currentValue='UNTRUSTED DATA';</script> <script>someFunction('UNTRUSTED DATA');</script> Ensure JavaScript variables are quoted JavaScript Hex Encoding JavaScript Unicode Encoding Avoid backslash encoding (\" or \' or \\) HTML HTML Body <div>UNTRUSTED HTML</div> HTML Validation (JSoup, AntiSamy, HTML Sanitizer) String DOM XSS <script>document.write("UNTRUSTED INPUT: " + document.location.hash);<script/> DOM based XSS Prevention Cheat Sheet
Referencia directa insegura a objetos
Esta vulnerabilida ocurre cuando el desarrollador hace referencia a un objeto como un archivo, directorio, registro de la base de datos o clave, puede ser una direccin URL o un parmetro de un formulario.
Por ejemplo en las aplicaciones bancarias de internet es comn utilizar la cuenta del cliente como clave primaria, sin embargo si la cuenta es utilizada directamente en la interfaz web aunque tenga consultas parametrizadas de SQL que prevean la inyeccin un atacante puede manipular el nmero de cuenta y cambiar el parmetro para que le muestre todas las cuentas. Ejemplo de vulnerabilidad:
Si el codigo permite al usuario cambiar paths, o nombres de archive puede llegar a directories o archivos.
Configuracin de seguridad incorrecta
Se debe asegurar que el servidor de produccin cuente con una configuracin adecuada, asi como un manejo adecuado del manejo de errores que no muestre demasiada informacin al usuario lo que puede llevar a que estos exploren esos fallos. As tambin es necesario que dentro de la configuracin a los usuarios no se permita acceso a directorios o configuraciones que puedan en algn momento acceder a los archivos compilados del lenguaje utilizado en los que puedan utilizar ingeniera inversa y encontrar fallas en el manejo de la validacin de usuarios. Configurar los ambientes de desarrollo, UAT y produccin con los mismo niveles de seguridad y passwords diferentes. Mantener actualizado nuestro software tanto como SO, DBMS, parches de seguridad y tener siempre actualizados nuestros componentes.
Exposicin de datos Sensibles
Esta categora surge de la fusin y ampliacin de las anteriores A7 y A9. Muchas aplicaciones web no protegen adecuadamente datos sensibles tales como nmeros de tarjetas de crdito o credenciales de autenticacin. Los datos sensibles requieren de mtodos de proteccin adicionales tales como el cifrado de datos almacenados mediante tcnicas criptogrficas adecuadas (p.ej. manteniendo el hash de la contrasea en vez de la propia contrasea cifrada), as como tambin de precauciones especiales en el intercambio de datos con el navegador.
Los riesgos completos de utilizar cifrado de forma no segura, uso de SSL y proteccin de datos escapan al alcance del top 10. Dicho esto para los datos sensibles de debe realizar como minimo lo siguiente: I. Cifrar los datos internos sensibles o en trafico de manera de defenderse de estas amenazas. II. No almacene datos sensibles innecesariamente. Descartelos apenas sea posible. III. Asegurese de aplicar algoritmos de cifrado fuertes y estndar asi como claves fuertes y gestinelas de forma segura. IV. Deshabilite la opcin de autocompletar en los formularios que recolectan datos sensibles ( ej. Usuarios, contraseas)
Inexistente Control de Acceso a nivel de funcionalidades
Este riesgo bsicamente se refiere a un dbil control de accesos a las pginas restringidas en el cual el atacante tratara de accesar a las pginas de administracin de la aplicacin. Para solventar este inconveniente se debe contar con roles y segregacin de funciones parametrizables para que su mantenimiento sea factible.
Falsificacin de peticiones en Sitios Cruzados (CSRF)
Bsicamente este vulnerabilidad explota las peticiones que un cliente real realiza al servidor con el objetivo de malisiosamente cerrar una sesin o realizar acciones con el usuario autenticad, estos problemas pueden reseolverse de las siguientes formas:
1. Incluir un captcha en cada solicitud para verificar que realmente es un persona la que realiza la solicitud. 2. Incluir un tocken nico que puede ser inlcuido en la propia URL o un parmetro d ela misma. 3. Incluir tokens secretos en JAVA EE, .NET y aplicaciones PHP. 4. Requerir que el usuario vuelva a autenticase o pruebas de que se trata de un usuario legtimo.
Uso de componentes con vulnerabilidades conocidas
Algunos componentes son vulnerables pueden ser identificados y explotados por los atacantes, por medio de su identificacin y posterior explotacin. Debera ser fcil distinguir si estamos utilizando un componente que es vulnerable sin embargo los frameworks y utilidades comerciales o de cdigo abierto no especifican precisamente cules son sus vulnerabilidades o deficiencias de seguridad Lo mas apropiado es utilizar componentes que no ha codificado. La mayora de proyectos utilizan componentes que pueden o no estar actualizados, lo ms recomendable es actualizarlos debido que el fabricante al identificar una debilidad la corregir en la siguiente versin. Es indispensable que se cuente con una poltica de desarrollo en la cual se limite la utilizacin de componentes a solo aquellos que sean de total confiabilidad de la empresa.
Redicciones y reenvos no validos
Este riesgo se refiere especficamente a un redireccionamiento de los usuarios a sitios que no son precisamente los que se indican en el link original. Bsicamente buscan enviar al usuario a otro sitio donde se puede instalar cdigo malicioso o engaar a las vctimas para que revelen informacin sensitiva (contraseas, usuarios, etc.) En este caso es imperativo utilizar una lista blanca para validar que los redireccionameintos cumplan con ella porque en el caso que no cuente con este componente usted es vulnerable
CONCLUSIONES
Personalmente revisar este documento ha sido muy beneficioso para mi labor como desarrollador, actualmente me encuentro desarrollando una aplicacin web lo que me ha llevado a explorar la seguridad con la que debo contar para implementarla correctamente, en el recorrido por el documento se pueden revisar tanto riesgos que son detectables y corregibles fcilmente as como aquellos que requerirn un poco ms de investigacin y conocimiento por parte del desarrollador para poder mitigarlos.
Diseño e Implementacion de Un Sistema Electronico Par El Registro de Acceso y Envio de Informacion Mediante Tecnologia NFC Al Personal Administrativo y Soporte