martes, 5 de junio de 2012

Seguridad WEB

Seguridad y privacidad


Hoy en día es necesario tener en cuenta para el desarrollo de páginas y aplicaciones web, las constantes amenazas que se tiene, tales como: los constantes virus informáticos, código malicioso, spyware, robots e inclusive perdonas físicas (HACKERS)... (mas informacion aquí)
El intercambioseguro de información a través de la red abierta e insegura como Internet ha obligado a desarrollar numerosos sistemas de encriptación y autentificación de las transacciones, destinados a cubrir tres problemas fundamentales:
 1. Conocer la identidad real de los clientes y servidores que se comunican, de forma que ambos dispongan de algún sistema para verificar la identidad del otro. Este tipo de identificación tiene particular importancia en las ciber-tiendas, ya que al enviar un número de VISA para realizar un pago se tiene que estar seguro de que el destinatario es quien dice ser.
2. Garantizar que la transferencia de datos sólo pueda ser entendida por las aplicaciones que se comunican, utilizando métodos criptográficos para codificar todos los datos intercambiados, y evitar las ‘escuchas’ en la red.
3. Garantizar la integridad de los datos enviados, teniendo capacidad de detectar cualquier cambio, intencionado o no, en los mismos.

Los métodos criptográficos tradicionales operan a partir de una palabra o frase llave, que sirve para codificar y descodificar los datos intercambiados. Está llave debe ser conocida por los dos extremos de la comunicación, por lo que el punto débil de este método es justamente el proceso de difusión de la llave. Se han ideado diversos sistemas para realizar un intercambio seguro de las llaves, por lo general haciendo que cambien con el tiempo, pero casi todos tienen algún punto débil.

La mayoría de los intercambios seguros de información se realizan según un sistema denominado Criptografía de Clave Pública; cada extremo de la comunicación dispone de dos claves, una pública que cualquiera puede solicitar y conocer, y otra privada, cuya seguridad es fundamental para el éxito de la codificación. Para enviar un mensaje seguro a una persona, se solicita su clave pública, con la que se codifica el mensaje. El sistema garantiza que el mensaje resultante sólo puede ser descodificado con la clave privada del destinatario.

El siguiente paso es asegurar la correcta identidad del destinatario. Para ello, se han creado las autoridades de certificación, organizaciones o empresas que distribuyen certificados, unos documentos digitales que contienen la identidad y clave pública de una determinada organización. Cuando se establece una conexión segura con un servidor HTTP, es posible acudir a una de estas autoridades de certificación para verificar su identidad. Una de las autoridades de certificación más conocidas es Verisign (www.verisign.com), una empresa que proporciona diversos tipos de certificados, personales o para empresas, tras un proceso de verificación de la identidad del solicitante (previo pago de una tasa).


El uso de tecnologías y estándares para la creación de nuevos proyectos es indispensable para el buen desarrollo de páginas seguras, tanto para el administrador como para el público que accede a ellas.
Entre dichas Tecnologías tendremos por mencionar algunas…

Cross-Site Scripting (XSS)
Es un tipo de vulnerabilidad web que permite a personas malintencionadas insertar código de lado de cliente (Javascript, VBScript, Flash…) en las páginas web accesibles por el resto de usuarios. Debido a esto, un atacante podría conseguir acceso a contenido sensible, cookies de sesión y demás información que el navegador almacene sobre el usuario atacado.
 Un posible uso de esta vulnerabilidad, sería ejecutar un código Javascript que obtenga la cookie que almacena el identificador de sesión (SID) y lo envía al atacante, pudiendo así usar esa cookie para suplantar al usuario afectado.

Hay una pequeña categorización de este tipo de ataques, que los divide en dos:

No persistente
Este es el tipo más común y se produce cuando un usuario envía datos al servidor, normalmente a través de la Query String (GET) o de un formulario (POST) e inmediatamente el código del servidor genera una respuesta usando esa misma información sin limpiar adecuadamente los datos.

Persistente
Este es un tipo más devastador ya que puede llegar a afectar a cualquier usuario que entre en tu web. Se trata de insertar y almacenar código malicioso en el servidor, de forma que se muestre a cualquier persona que acceda a dicha página. Esto es muy fácil de conseguir en las aplicaciones web que permiten a los usuarios generar contenido, como enviar comentarios, dar opinión en foros, etc…

La diferencia entre persistente y no persistente es que en los ataques persistentes, el código queda almacenada en el lado del servidor, mostrándose y ejecutándose en cada petición, mientras que los ataques no persistentes, inyectan el código de forma temporal como respuesta a una petición específica.

Cómo protegerse
 Asegúrate de que todas las salidas generadas con textos potencialmente inseguros (enviados por usuarios) son completamente escapados. Para eso PHP nos ofrece algunas funciones como htmlentities o htmlspecialchars, o como habíamos visto en un tutorial anterior, puedes Validar y sanear datos en PHP de forma bastante sencilla.
 Como ya he comentado, el principal objetivo de este tipo de ataques, es el robo de las cookies. Muchos sitios web, evitan que un atacante pueda suplantar cookies de otros usuarios vinculando la cookie a la dirección IP para la cual se había creado. De esta forma, alguien que intente usar una cookie desde otro ordenador, será considerado un usuario malicioso y se ignorará la cookie. También existe la opción de especificar una cookie como HttpOnly, de forma que los navegadores no permiten acceder a dicha cookie al código ejecutado en el lado de cliente. Esta opción es soportada prácticamente por todos los navegadores modernos.


Cross-site request forgery (CSRF o XSRF)
Esta vulnerabilidad explota la confianza que un sitio tiene un usuario, a diferencia del XSS, que explota la confianza que un usuario tiene en un sitio web. A grandes rasgos, consiste en que una persona malintencionada envía un link a una persona que sabe (o supone) que está identificada en una web, de forma que la persona ejecuta ciertos comandos sin enterarse.
 Cómo protegerse
 Requerir una clave secreta al usuario antes de llevar a cabo cualquier acción comprometida, como sería el caso del ejemplo anterior.
 Limitar el tiempo de vida de la sesión: lo hacen en muchas webs de contenido sensible.
 Deshabilitar la opción de “Recordarme” ayuda a prevenir este tipo de ataques: si activas esa opción y luego te envían un exploit de CSRF, tienes muchas más posibilidades de que te afecte, pues el no estar logueado no te salva, ya que iniciarás la sesión automáticamente, ejecutando la acción que el exploit te envía.
 Comprobar la cabecera Referer: cualquier petición que no contenga esta cabecera debe ser denegada, debido a que existen formas sencillas de evitar el envío de esa cabecera. Además, esta validación podría tener problemas con navegadores o proxies que evitan el envío de esta cabecera por razones de privacidad. Sin embargo, si el sitio web requiere de máxima seguridad, es una opción más a tener en cuenta.
 Usar GET y POST debidamente: según los estándares, las peticiones GET nunca deben de tener efectos permanentes. Si bien los envíos POST también se pueden falsear, es una tarea más complicada en la que tienen que darse más vulnerabilidades.

SQL injection
Es un tipo de ataque que explota la vulnerabilidad de la capa de base de datos de una aplicación. Se presenta cuando los filtros pasados a una sentencia SQL no son escapados correctamente y por lo tanto, un usuario malintencionado puede enviar caracteres con significado especial en SQL para modificar la consulta.


El protocolo SSL fue desarrollado por Netscape para permitir confidencialidad y autenticación en Internet. SSL es una capa por debajo de HTTP y tal como lo indica su nombre está a nivel de socket por lo que permite ser usado no tan solo para proteger documentos de hipertexto sino también servicios como FTP, SMTP, TELNET entre otros.
La idea que persigue SSL es encriptar la comunicación entre servidor y cliente mediante el uso de llaves y algoritmos de encriptación.

El protocolo TLS está basado en SSL y son similares en el modo de operar.
Es importante señalar que ambos protocolos se ejecutan sobre una capa de transporte definida, pero no determinada. Esto indica que pueden ser utilizados para cualquier tipo de comunicaciones. La capa de transporte más usada es TCP cobre la cual pueden implementar seguridad en HTTP.
Como punto de diferencia se puede mencionar que existen protocolos implementados sobre la capa de red, por ejemplo sobre IP. Tal es el caso de IPSec.
HTTPS
Netscape Communications creó HTTPS en 1994 para su navegador Netscape Navigator.13 Originalmente, HTTPS era usado solamente para cifrado SSL, pero esto se volvió obsoleto ante TLS. HTTPS fue adoptado como un estándar web con la publicación de RFC 2818 en Mayo del 2000.14
El sistema HTTPS utiliza un cifrado basado en SSL/TLS para crear un canal cifrado (cuyo nivel de cifrado depende del servidor remoto y del navegador utilizado por el cliente) más apropiado para el tráfico de información sensible que el protocolo HTTP. De este modo se consigue que la información sensible (usuario y claves de paso normalmente) no pueda ser usada por un atacante que haya conseguido interceptar la transferencia de datos de la conexión, ya que lo único que obtendrá será un flujo de datos cifrados que le resultará imposible de descifrar.

Control de acceso a la información
Se utiliza para limitar el acceso a determinados documentos de un servidor Web, en función del origen y tipo de petición. La forma de hacerlo varía con el entorno en el que se publican las páginas (sistema operativo y servidor HTTP, principalmente); en general, todas las soluciones pasan por definir un fichero que contiene las diferentes limitaciones de acceso, en un formato característico del servidor HTTP. En algunos casos se utiliza un fichero global con las restricciones de acceso o bien un fichero por cada directorio al que se quiere limitar el acceso.

Control de acceso en un servidor CERN
La versión 3.0 del servidor desarrollado por el CERN permite limitar el acceso a documentos o grupos de documentos, en función de nombres de usuario o direcciones de origen. El control de acceso se puede realizar para todo el servidor, modificando los ficheros globales de configuración o para un directorio concreto. Como este método está disponible para cualquier usuario, sin necesidad de tener privilegios de administración.

Control de acceso en un servidor NCSA
El servidor HTTP de la NCSA (esto se aplica también a Apache, desarrollado a partir de él) permite limitar el acceso en función de direcciones de origen o nombres de usuario. El procedimiento es similar al del servidor del CERN. Se debe crear un fichero de nombre .htaccess en cada directorio cuyos ficheros requieran protección.




Conclusión:
La seguridad web es indispensable para evitar las amenazas a las q se está expuesto día a día.
Es necesario el uso de tecnologías para la realización de aplicaciones web seguras, generalmente integradas al servidor, siendo un conjunto de estándares y tecnologías para el buen desarrollo web seguro.

No hay comentarios:

Publicar un comentario