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