Sie sind auf Seite 1von 11

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

INGENIERIA EN SISTEMAS DE INFORMACION


DISEO DE SISTEMAS
NOVENO SEMESTRE










Resumen OWASP











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:

<select name="language"><option value="fr">Franais</option></select>

require_once ($_REQUEST['language]."lang.php");


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.

Das könnte Ihnen auch gefallen