Las vulnerabilidades de la web

Aspectos básicos sobre la web

Es fundamental entender los mecanismos que se siguen al consultar páginas web para conformar la seguridad en el sitio. En este capítulo, se presentarán en detalle las principales tecnologías de la Web, acompañadas de explicaciones sobre los procesos que implican. Si cree que ya tiene conocimientos avanzados en este ámbito, puede saltar directamente a la sección de vulnerabilidades web de este capítulo.

La Web, también conocida como la World Wide Web (WWW), aunque su abreviatura "Web" se usa más comúnmente hoy en día, es una tecnología fundamental de Internet. Su objetivo inicial era difundir documentos que integraran diferentes medios y presentaran enlaces interactivos entre ellos, generalmente en forma de hipervínculos. Estos documentos eran accesibles y se podían consultar a través de un navegador web.

A lo largo de los años, esta tecnología ha experimentado una evolución significativa. Mientras que hace unos años coexistían muchas normas y tipos de medios, las autoridades reguladoras han afinado cada vez más, dejando solo unos pocos lenguajes y normas esenciales:

  • HTML5 (HyperText Markup Language), que es un lenguaje de descripción de documentos. Este lenguaje se utiliza para la priorización del contenido y la clasificación de la información en un documento....

Composición y consulta de un sitio web

1. Composición del sitio web

Un sitio web representa un conjunto de datos estructurado y coherente, integrando diversos tipos de elementos como texto, imágenes, sonidos y vídeos. Esta información se consulta mediante un software llamado navegador. Los datos se transmiten al navegador desde un servidor en respuesta a sus solicitudes, estableciendo así una relación cliente/servidor. Los protocolos predominantes utilizados para facilitar el intercambio de información entre estos dos sistemas informáticos son HTTP (Hypertext Transfer Protocol) y HTTPS (Hypertext Transfer Protocol Secure). El uso del protocolo HTTPS garantiza la confidencialidad e integridad de los datos intercambiados gracias al cifrado de las comunicaciones. Sin embargo, se debe enfatizar que HTTPS no protege contra vulnerabilidades de la aplicación, como las relacionadas con el diseño o desarrollo del sitio y, por tanto, no constituye una garantía absoluta de seguridad. A menudo, esto puede crear una falsa sensación de seguridad. Los lenguajes más comunes usados para describir páginas web son HTML y XHTML.

2. Consulta de una página web

Entre el momento en que se introduce una URL y se muestra toda la página, se realizan muchas operaciones entre el navegador y el servidor, así como dentro del propio navegador. También hay varias formas de indicar al navegador qué página se desea. Generalmente, es un clic en un enlace encontrado en un motor de búsqueda, pero también es posible indicar la URL (Uniform Resource Locator) directamente en la barra de direcciones del navegador. Los usuarios poco sofisticados suelen confundir la escritura de una URL con una búsqueda en el motor. Esta confusión proviene de la simplificación del uso de los navegadores, que han añadido funciones a la barra de direcciones. Hace unos años, esta barra debía tener una URL válida para acceder y mostrar el contenido solicitado. Actualmente, la indicación de unas pocas palabras en esta barra de direcciones activa la llamada a un motor de búsqueda, que se puede configurar en la configuración del navegador. Como la caja de entrada para una búsqueda o URL específica es la misma, la confusión entre estos dos mecanismos para acceder...

Vulnerabilidades web

1. Definición e importancia

Una brecha de seguridad en un sitio web es un comportamiento imprevisto para el desarrollador poco preparado, que probablemente desencadene un incidente crítico. Estos eventos adversos se pueden clasificar según su gravedad e impacto. Los posibles incidentes incluyen la pérdida de confidencialidad de información sensible, como la recuperación de datos de clientes o empleados, la pérdida de disponibilidad de servicio porque resulta imposible acceder al sitio web o la pérdida de integridad de los datos del sitio. Esto último puede consistir en la modificación de la apariencia o del contenido de una página web, a menudo con fines ideológicos, protestas o desafío. Otros escenarios también pueden comprometer la seguridad general del sitio.

Hemos hablado de sitios web, pero en general, hablemos de aplicaciones web. Los últimos años han estado marcados por una evolución significativa del panorama y las tecnologías de la Web. El poder y la funcionalidad de los navegadores han alcanzado tal nivel, que aplicaciones que antes requerían un desarrollo intensivo en lenguajes como C, ahora se pueden ejecutar directamente en un navegador. La alternativa actual de desarrollar aplicaciones para ejecutarse en un navegador web tiene muchas ventajas, incluyendo la capacidad de saltarse restricciones como el sistema operativo utilizado.

Por eso estamos viendo un crecimiento notable en aplicaciones basadas en navegadores, que abarcan diversas áreas como la gestión de recursos humanos, la contabilidad, la gestión de proyectos y más. Esta tendencia aumenta la importancia de las posibles vulnerabilidades que pueden causar, lo que pone de manifiesto la creciente necesidad de seguridad en el desarrollo y despliegue de aplicaciones web.

2. Exposición y arquitectura de un sitio web

Existen varios tipos de sitios web, desde la simple presentación de una empresa hasta la gestión de un área de cliente o la implementación de funciones complejas de la aplicación. Por supuesto, cuantas más complejas sean las tecnologías y arquitecturas que utilice el sitio web o la aplicación web, más probable es que contenga una vulnerabilidad de seguridad. Aquí imaginaremos una arquitectura genérica...

OWASP WSTG: una guía inestimable

Cada profesional especializado en las pruebas de intrusión, desarrolla su propia metodología para realizar evaluaciones de seguridad. Sin embargo, estas prácticas individuales forman parte de un framework común que gobierna toda la comunidad de expertos en ciberseguridad.

La Web Security Testing Guide (WSTG), anteriormente conocida como la OWASP Testing Guide (OTG), es una referencia clave en el campo de las pruebas de intrusión de aplicaciones. Su principal objetivo es ayudar a desarrolladores y profesionales de la seguridad a realizar pruebas en aplicaciones web. La guía está disponible en la web oficial de OWASP: https://owasp.org/www-project-web-security-testing-guide/

El framework WSTG va más allá de identificar puntos débiles, ayudando activamente a probar aplicaciones web para crear soluciones fiables y seguras. Una prueba de seguridad para una aplicación web implica un escaneo activo para identificar debilidades, errores técnicos o vulnerabilidades. Cada problema identificado se presenta al propietario del sistema, junto con una evaluación de impacto, propuestas de mitigación o soluciones técnicas.

Este enfoque metodológico pretende establecer una metodología de prueba coherente, reproducible, rigurosa y con control de calidad. Los problemas a abordar se documentan y prueban exhaustivamente, utilizando un método...

Metodología Pentest

Conseguir un pentest web eficaz requiere un enfoque metódico, que vaya más allá de simples herramientas automatizadas. El proceso se puede dividir en varias fases, cada una de las cuales desempeña un papel crucial en la identificación y resolución de vulnerabilidades. Esta metodología, basada en el método PTES, descrito a continuación, ofrece una perspectiva detallada de cada paso del proceso.

1. Preparación y acuerdo contractual

Antes de lanzarse a la prueba, es imprescindible redactar un contrato claro entre el cliente y la empresa de auditoría. Este contrato debe definir los parámetros de la prueba, incluyendo objetivos específicos, restricciones y expectativas. Este paso permite definir claramente el marco de intervención y garantizar una comprensión mutua de los compromisos.

2. Reconocimiento y evaluación de las funcionalidades interactivas

Este paso consiste en recopilar toda la información posible sobre el objetivo, incluyendo la identificación de las tecnologías utilizadas, la comprensión de la arquitectura del sitio web, los mecanismos de protección establecidos (cabecera HTTP, cortafuegos de la aplicación), la búsqueda de configuraciones incorrectas y el mapeo completo de su superficie de ataque.

3. Escaneo automático y detección de vulnerabilidades

Se despliegan herramientas automatizadas, como ZAP, Burp Suite y otros escáneres de seguridad, para identificar rápidamente posibles vulnerabilidades. Sin embargo, es fundamental señalar que estas herramientas pueden generar alertas erróneas. Se requiere un análisis exhaustivo para filtrar los resultados e identificar los verdaderos puntos débiles.

4. Pruebas manuales extensas

Además de los escaneos automáticos, las pruebas manuales permiten una exploración más profunda de vulnerabilidades. Los auditores pueden revisar los resultados de los escaneos, afinar falsas alarmas y detectar vulnerabilidades sutiles que podrían pasar desapercibidas por herramientas automatizadas.

También es un buen momento para explorar escenarios de ataque específicos. Como auditor, es imprescindible hacerse preguntas cruciales como:

  • ¿Cuáles serán las consecuencias si tomo esta acción?

  • ¿Los desarrolladores...

Presentación de algunas vulnerabilidades web

1. Preámbulo

Un solo capítulo no es suficiente para cubrir el Top 10 de OWASP, especialmente porque algunas categorías tienen más que ver con procesos de desarrollo, que con errores técnicos. Presentaremos un caso de estudio llamado UnSAFE Bank para poner en práctica nuestra metodología.

UnSAFE Bank es una suite bancaria virtual diseñada para aprender y desarrollar habilidades de ciberseguridad. Esta plataforma ofrece integración de aspectos de seguridad informática, así como diversos escenarios de prueba. Permite la evaluación de vulnerabilidades y las pruebas de intrusión en una variedad de entornos, incluyendo aplicaciones web, Android e iOS.

2. Montando el laboratorio

Para configurar el entorno de prueba, es imprescindible cumplir algunos requisitos previos, incluyendo asegurarse de que Docker y docker-compose estén instalados en el sistema. Además, es necesario asegurarse de que ningún servicio se esté ejecutando en el puerto 80 de la máquina, usando el comando sudo lsof -i :80, que no debería devolver ningún resultado.

Una vez terminada la instalación y la verificación de puertos, necesita descargar la última versión del proyecto y descomprimirla. Posteriormente, vaya al directorio Backend del proyecto y lance los contenedores.

wget https://github.com/lucideus-repo/UnSAFE_Bank/archive/refs/ 
tags/v2.2.0.zip  
unzip v2.2.0.zip  
cd UnSAFE_Bank/Backend  
docker compose up -d 

A continuación, se debe comprobar el estado de los contenedores individuales antes de pasar a la operación. Si el estado de los cuatro contenedores es "up", puede continuar.

docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}"  
NAMES              PORTS                                   STATUS  
backend-web-1      0.0.0.0:3000->80/tcp, :::3000->80/tcp   Up 29 minutes 
backend-server-1   0.0.0.0:80->80/tcp, :::80->80/tcp       Up...

Practicar auditorías y detectar las distintas vulnerabilidades web

Aunque este capítulo no aborda todas las vulnerabilidades existentes, ya se han analizado varios ejemplos representativos. Para profundizar en sus habilidades y práctica, existen plataformas reconocidas como https://portswigger.net, https://tryhackme.com o https://hackthebox.eu. Estos sitios suelen ofrecer retos, así como módulos de formación o recursos explicativos sobre las distintas brechas de seguridad.

Contramedidas y consejos de seguridad

Las aplicaciones web están compuestas por un conjunto de componentes de software que involucran a varios actores.

Una aplicación web se suele basarse en dos conjuntos:

  • instrucciones para la comunicación entre el navegador y el servidor (lógica de aplicación),

  • una infraestructura que ejecute y asegure estos procesamientos.

Para garantizar la seguridad de las aplicaciones web, hay varios niveles a considerar:

  • El diseño de la aplicación, asegurando que las prácticas de seguridad estén integradas desde la fase de desarrollo.

  • La integridad del comportamiento de la aplicación en el lado del cliente, asegurando que las interacciones del usuario sean seguras y fiables.

  • La configuración y seguridad de la infraestructura, incluyendo servidores, bases de datos y otros componentes del sistema.

  • Detectar vulnerabilidades de forma proactiva y comunicar información sobre amenazas potenciales, para prevenir ataques y responder eficazmente a incidentes de seguridad.

Es importante estar al tanto de las amenazas y vulnerabilidades en evolución y actualizar regularmente las medidas de seguridad en consecuencia. Adoptando un enfoque proactivo y reactivo, las organizaciones pueden minimizar el riesgo de ataques y proteger eficazmente sus aplicaciones web.

1. Reforzamiento del servidor

El objetivo de reforzar el sistema es reducir los riesgos de seguridad eliminando posibles vectores de ataque y reduciendo la superficie de ataque del sistema.

La segmentación de red está en el corazón de la defensa en profundidad para contrarrestar eficazmente los ataques, construyendo una arquitectura de red de servicios segura y aislada tanto como sea posible, mediante la implementación de una arquitectura de tres capas (frontend, middleware, backend). Es importante definir una política de seguridad de red que describa las distintas reglas de cortafuegos y el acceso a la red entre capas de la manera más concisa y sencilla posible.

Como mencionamos al analizar los servidores y lenguajes más utilizados, optamos por instalar un servidor web Apache y un sistema de gestión de bases de datos MariaDB. Estamos haciendo esta instalación en Debian Linux versión 12 ("bookworm"), la última edición disponible hoy en día.

No podemos detallar aquí todos...

Conclusión

El objetivo de este capítulo era concienciar sobre los problemas de seguridad que podemos encontrar en la web. Solo hemos dado un pequeño vistazo. Como hemos mencionado, hay tantas situaciones, lenguajes, servidores, que haría falta un libro entero para abordarlo todo. Pero si, tras leer esta parte, tiene en cuenta que nunca debe confiar en los datos enviados por el cliente y no descuidar la configuración del servidor y los componentes de software, el objetivo está alcanzado.