Curso de Seguridad Informática - Módulo 6 - Ataques a Servidores Web

Curso de Pentesting, Seguridad Informática

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web

En el módulo anterior vimos diferentes métodos para atacar o testear la seguridad de un sistema, tanto en la práctica como la teoria. Ahora, vamos a profundizar en los servidores web y su importancia dentro del ecosistema empresarial, obviamente nos enfocaremos en su seguridad como principal objetivo de este curso de seguridad informática.

Curso completo: gburu.net/csi, aquí encontrarás todo el temario de este curso gratis de seguridad informática, en un solo lugar.

Responsabilidad:
Este curso de hacking ético esta orientado a fines educativos para mejorar tus habilidades en seguridad informática para planificar y diseñar redes mas seguras, no incita a cometer actividades ilegales en sistemas o redes de terceras personas, si cometes una actividad ilicita en un sistema o red lo haras bajo tu propia responsabilidad. Si quieres practicar y mejorar tus habilidades en ethical hacking hazlo bajo sistemas donde tengas un permiso legal o sean tuyos, te recomiendo utilizar ímagenes de sistemas operativos instalados en máquinas virtuales en un ambiente controlado.

Temario: Módulo 6 - Ataques a Servidores Web

Objetivos del Módulo 6

A menudo, una violación en la seguridad causa más daño en términos de buena voluntad, es decir pierdes la fidelidad de tus clientes al saber que no puedes proteger la información que ellos alojan en tu servidor que en la pérdida cuantificable real, esto hace que la seguridad del servidor web sea crítica para el funcionamiento normal de una empresa, o por lo menos todos queremos creer que las empresas que estan a cargo de las aplicaciones que utilizamos en nuestro día a día le preocupan nuestra información y invierten en seguridad...

La mayoría de las empresas consideran que su presencia web es una extensión de sí mismas, este módulo intenta resaltar las diversas preocupaciones de seguridad en el contexto de los servidores web, en este módulo podrás entender que es un servidor web y su arquitectura, tipos de ataques que suelen utilizar los delincuentes informáticos, herramientas mas utilizadas, etc. Es bueno mencionar, que el hacking de servidores web es un tema muy amplio y este módulo intenta darte una introducción general, te recomiendo seguir investigando por tu cuenta luego de ver este módulo para aumentar tus conocimientos en el hackeo de servidores.

visión general de lo que vamos a ver en este sexto módulo del curso gratuito de seguridad informatica:

  • ¿Qué es un Servidor Web, y como funciona?
  • ¿Por que se busca atacar a Servidores?
  • Impactos de los ataques contra los Servidores
  • Ataques contra Servidores Web
  • Metodología para ataques contra Servidores
  • Herramientas que se suelen utilizar
  • Contramedidas, y como defendernos
  • Administración de parches y herramientas para automatizar la actualización del sistema
  • El hackeo de servidores en el Pentesting

¿Qué es un Servidor?

Un servidor es como los ordenadores que utilizamos a diario, en otras palabras no deja de ser un ordenador de uso habitual. Tiene algunas diferencias que intentare explicar de una forma simple ya que este curso no trata de hardware de servidores. Bien, vamos a ver las diferencias que tiene un servidor de nuestro ordenador.

Un servidor esta siempre en un rack, ubicado dentro de un centro de datos, el rack es como un gabinete o armario pero muy alto en el se pueden albergar varios servidores, veamos como es uno:
curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-1
curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-2
Nosotros solemos tener el ordenador en un gabinete, pero el servidor tiene un aspecto diferente por ejemplo este servidor de la marca Dell:
curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-3
Como vemos no se parece en nada al gabinete que solemos ver, pero adentro sigue teniendo los mismos componentes que un ordenador, aunque por su puesto los mismos son de alto rendimiento.

Ademas de lo anterior, los servidores se gestionan en remoto es decir que estan adaptados para ser controlados de cualquier parte del mundo mediante la terminal o consola de comandos, generalmente en nuestro ordenador tenemos una interfaz gráfica, esto no ocurre cuando estamos dentro de un servidor, ya que en la mayoria de los casos nos conectamos via SSH y ejecutamos ordenes de comandos para que el servidor reaccione y haga lo que le pidamos, ya sea ejecutar una tarea simple hasta realizar un deploy de una aplicación web.

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-4
Como vemos en la imagen un centro de datos es un edificio donde se ubican todos los racks que dentro contienen servidores, también a los centros de datos se los conoce como "granja de servidores".

¿Que es un Servidor Web, y como funciona?

Ahora que entendimos que es un servidor, entender que es un servidor web será mas fácil.

Bien tomemos de ejemplo el servidor Dell que vimos en imagen anteriormente, ahora vamos a instalar un sistema operativo (Linux o Windows), despues vamos a instalar un software (Nginx, Apache, IIS, etc) que se encargue de recibir peticiones (GET, POST, etc), procesarlas y luego devolver respuestas ya sea: información de una base de datos, un código de error HTTP (404, 500, etc) o archivos como por ejemplo: HTML, CSS, JS, PHP, .NET, JSP, ASP, MP3, JPG, PNG, MP4, PDF, etc. Listo ya tenemos un servidor web, ahora vamos a profundizar un poco mas.

Por lo tanto, un servidor web es un programa que se puede instalar en un sistema operativo y ejecutarse en el puerto que tu quieras, por defecto suelen ejecutar en el puerto 80 o 8080, puede realizar conexiones bidireccionales es decir envia y recibe información al mismo tiempo y conexiones unidireccionales envia una respuesta hacia un solo punto. Toda la información envia por el servidor es renderizada por un navegador web (software) y luego transmita de forma visual al cliente, ya sea por HTTP o HTTPS.

Modelo cliente-servidor

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-5

El servidor web es la capa intermedia entre el lenguaje cliente y el lenguaje servidor, es decir una aplicación web esta compuesta por un back-end en el mismo vamos a encontrar un lenguaje de programación que puede ser PHP, NodeJS (Javascript), .NET, JSP (Java), Ruby, etc. El "lenguaje back-end" se encarga de recibir las peticiones procesadas por el servidor y tomar acciones dependiendo de la lógica del negocio puede consultar a una base de datos (MySQL, PostgreSQL, Redis, etc) y devolver a una respuesta que el servidor procesa y se lo envia al cliente, este cliente esta ubicado en el front-end que esta capa suele estar compuesta por HTML, JS, CSS y archivos multimedia.

Roles: en el modelo cliente-servidor

  • El cliente: es el remitente de una petición (request), por lo tanto su papel en la comunicación es activo, puede enviar peticiones a varios servidores al mismo tiempo y espera sus respuestas, este proceso siempre se realiza con una interfaz gráfica (navegador web). Por ejemplo: abrimos nuestro navegador, ingresamos a gburu.net y a facebook.com, realizamos 2 peticiones de forma simultanea y esperamos la respuesta de 2 servidores diferentes.
  • El servidor: es el receptor de las peticiones que realiza un cliente, por lo tanto su papel es pasivo ya que al iniciarse queda esperando a recibir peticiones en el puerto que quieras, procesa todas las peticiones y puede comunicarse con los lenguajes de programación y luego retornar una respuesta (response) al cliente, puede recibir y procesar muchas peticiones al mismo tiempo dependiendo del hardware que le fue otorgado, un servidor web puede ser utilizado de manera local para pruebas y de producción ya que es compatible con la escalabilidad de recursos.

Protocolo: HTTP

Existen muchas formas de utilizar un servidor puede ser para correo electrónico, almacen de archivos, dedicados para bases de datos, etc. En este módulo de curso de seguridad informática nos vamos a enfocar en servidores orientados a la web, por lo tanto vamos a hablar un poco sobre HTTP.

HTTP es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. El cliente (se le suele llamar "agente de usuario", en inglés "user agent") realiza una petición enviando un mensaje, con cierto formato al servidor. El servidor (se le suele llamar un servidor web) le envía un mensaje de respuesta. Ejemplos de cliente son los navegadores web y las arañas web (también conocidas por su término inglés, webcrawlers).

Cada sitio web que visitamos desde un navegador HTTP esta involucrado, por ejemplo veamos el patrón cliente-servidor desde la perspectiva de HTTP, cuando visitamos https://gburu.net

  • General:
    curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-6
    Podemos ver que se hace una petición a https://gburu.net mediante el método GET y luego recibimos un código 200 que nos dice que el recurso solicitado se encuentra disponible.
    curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-7
    En la respuesta podemos ver en "content-type" que el servidor nos devolvio un archivo HTML con el formato de caracteres UTF-8, en nuestra petición vemos el 'user-agent' el contenido que aceptamos recibir, el método y luego la ruta.

HTTP: métodos

HTTP es un protocolo que maneja varios verbos (métodos) para peticiones.

  • GET: es el mas común, el mismo se activa por defecto cuando ingresamos a una URL cualquiera, toda la información que le pasemos al GET sera visible por cualquiera es decir que el método acepta "parametros", por ejemplo: cuando estamos en la página 2 de una web solemos ver "/index.php?page=2" esto nos dice que el parametro es "page" y el valor es "2", su función es devolvernos la página número 2, solo basta con mirar la URL para darnos cuenta que información le pasamos a GET, por eso este método es recomendable para: búsquedas, filtros, ordenar contenido y paginación.
  • POST: este método es el 2do mas común cuando se trata de HTTP, el mismo cumple la función de llevar información sensible al servidor para que luego se ejecute en el lenguaje back-end, un uso normal es en formularios de ingreso, registro o contacto, ya que codifica la información y no la muestra en la URL como hace GET, otro punto importante es que a POST se la añade la capacidad de soportar cookies lo cual es bueno para recordar usuarios que iniciaron sesión, y almacenar información del mismo en el navegador para su posterior uso, de todas formas se recomienda usar POST en operaciones de destrucción (agregar, editar, eliminar) sobre recursos, para mas seguridad es recomendable utilizar POST con HTTPS.
  • PUT: suele ser el mas óptimo para tratar con subidas de archivo a un servidor web, por ejemplo POST tiene que utilizar un mensaje multiparte para codificar el recurso (archivo) a subir en el lado del servidor se tiene que descodificar. Ejemplo de un formulario en HTML para subir archivo en POST:
<form action="/upload.php" method="POST" enctype="multipart/form-data"></form>

Por el contrario PUT realiza una conexión socket directa con el servidor para enviar el archivo, por lo tanto lo hace mas óptimo pero tienes que tener un control total del servidor como un VPS ya que en algunos hosting compartido el método PUT no esta permitido.

A tener en cuenta: Todos los navegadores modernos y los nuevos estandares de HTML solamente admiten de forma oficial los métodos GET y POST en los formularios, para poder utilizar PUT, solo basta con crear un formulario POST y luego agregar un campo oculto con los siguiente parametros y valores: (name:_method, value="PUT"), queda de esta forma:

<form action="/upload.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="_METHOD" value="PUT"/>
</form>
  • PATCH: tiene la misma función que PUT, pero se utiliza para actualizar recursos.
  • DELETE: destruir o eliminar recursos de una aplicación web
  • TRACE: este método tiene como objetivo la depuración, por lo tanto al estar habilitado le permite a un cliente obtener información del servidor y si hay servidores intermedios, generalmente suele estar desactivado para no brindar información que le sirva a un delincuente informático.
  • OPTIONS: Devuelve los métodos HTTP que el servidor soporta para un URL específico. Esto puede ser utilizado para comprobar la funcionalidad de un servidor web mediante petición en lugar de un recurso específico.
  • CONNECT: Se utiliza para saber si se tiene acceso a un host, no necesariamente la petición llega al servidor, este método se utiliza principalmente para saber si un proxy nos da acceso a un host bajo condiciones especiales, como por ejemplo "corrientes" de datos bidireccionales encriptadas (como lo requiere SSL).

Servidores Web mas populares

Existen muchos softwares para cumplir con las tareas rutinarias de un servidor web, pero existen un mercado detrás de ellos y los consumidores suelen elegir 3 softwares:
curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-8
En el último informe (Abril 2018) de w3techs, vemos que el servidor web que mas cuota de mercado tiene es Apache, le sigue Nginx y tercero esta Microsoft IIS, despues vemos que esta LiteSpeed WebServer.

¿Por que un servidor web esta en riesgo?

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-9

Existen diferentes tipos de riesgos de seguridad asociados a los servidores web, las redes de área local que alojan sitios web y los usuarios que acceden a estos sitios web mediante navegadores, los empleados, el mercado de la aplicación, la competencia, el crimen informático organizado, etc.

  • Perspectiva del desarrollador: desde la perspectiva de un programador o desarrollador web, la mayor preocupación de seguridad es que el servidor web puede exponer la red de área local (LAN) o la intranet corporativa a las amenazas que representa Internet. Esto puede ser en forma de virus, troyanos, atacantes o el compromiso de la información en sí. Los errores de software presentes en los grandes programas complejos a menudo se consideran la fuente de lapsos de seguridad inminentes. Sin embargo, los servidores web que son grandes dispositivos complejos y también vienen con estos riesgos inherentes. Además, la arquitectura abierta de los servidores web permite que se ejecuten scripts arbitrarios en el servidor mientras se responden las solicitudes remotas. Cualquier script CGI instalado en el sitio puede contener errores que son agujeros de seguridad en el futuro.
  • Perspectiva del administrador de la red: desde la perspectiva de un administrador de red, un servidor web configurado conjunto presenta otro agujero potencial en la seguridad de la red local. Si bien el objetivo de una web es proporcionar acceso controlado a la red, un control excesivo puede hacer que una web sea casi imposible de usar. En un entorno de intranet, el administrador de la red debe tener cuidado con la configuración del servidor web, de modo que los usuarios legítimos sean reconocidos y autenticados, y varios grupos de usuarios tengan asignados distintos privilegios de acceso.
  • Perspectiva del usuario final (cliente): generalmente el usuario final no percibe ninguna amenaza inmediata, ya que navegar por la red parece seguro y anónimo, además la mayoria no tiene conocimientos técnicos ni de programación por lo tanto resulta muy dificil que se de cuenta de un ataque informatico, de todas formas si tuviera esos conocimientos, resulta complicado saber que un servidor ajeno este sufriendo un ataque informático. De esta forma el contenido activo como códigos javascript maliciosos producto de un ataque al sitio web que usuario visita, hacen posible que las aplicaciones dañinas, como los virus, invadan el sistema del usuario. Además, el contenido activo del navegador de un sitio web puede ser un conducto para que el software malicioso evite el sistema de firewall e impregne la red de área local del propio usuario. No solo eso, un ataque a un servidor web puede dar acceso directo al atacante a la base de datos que guarda información sensible del cliente de la aplicación, sin que el mismo se de cuenta.

Causas mas comunes que facilitan los ataques a Servidores

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-10

La mayoria de los ataques informáticos orientados a servidores se producen por las causas que vamos a ver a continuación:

  • Instalación del servidor con la configuración por defecto: archivos innecesarios que vienen por defecto en una instalación, archivos de pruebas, configuración por defecto para usuarios y sus respectivas contraseñas.
  • Permisos incorrectos de archivos y directorios: esto es una pobre política de control de acceso para empleados internos, para darle facilidad se evita controles rigurosos, por lo tanto no hay limites claros en temas de permisos y acceso a la información sensible.
  • No se aplican parches de softwares: falta de políticas de seguridad, procedimientos y mantenimiento adecuados de toda la infraestructura. Por lo tanto el software expuesto con una vulnerabilidad no se le aplica el parche para solucionar la vulnerabilidad.
  • Mala reputación en certificados: esto es porque se usan certificados autofirmados y no por una autoridad de confianza, autenticación incorrecta con sistemas externos.
  • Falta de hardening en la infraestructura: esto significa que no se aplica una auditoria interna al sistema y se deja en funcionamiento servicios que no son utilizados y le dan mas posibilidad al atacante de encontrar puntos de acceso, por ejemplo: utilizar SSH para administración remota y sin embargo esta el servicio TELNET abierto, si se aplica una auditoria se sabe que telnet es inecesario cuando utilizamos ssh, esto puede variar.

¿Qué impacto recibe el servidor, luego de un ataque?

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-11

El impacto que va a recibir un servidor despues de ser atacado, puede variar dependiendo de la psicología del delincuente informático pero se realizaron estudios de la mayoria de los ataques y que hicieron en los servidores comprometidos y se puede "predecir" que intenciones puede llegar a tener un atacante y las veremos en detalles a continuación:

  • Comprometer las cuentas de usuarios: los ataques al servidor web se concentran principalmente en el compromiso de la cuenta del usuario. Si el atacante puede poner en peligro una cuenta de usuario, el atacante puede obtener mucha información útil, ya sea tarjetas de creditos o alguna información del usuario para extorsionar o preparar mas ataques.
  • Alteración de la información: el atacante puede alterar o eliminar los datos del servidor o base de datos. Él o ella puede incluso instalar un software malicioso para atacar empleados internos de la organización.
  • Desfiguración (defacement) del diseño web: el delincuente informático, puede cambiar el diseño del sitio web a su antojo, reemplazando el diseño original con el propio para mostrar un mensaje intimidatorio a los visitantes del sitios web.
  • Ataques secundarios: cuando el atacante logra tener control del servidor web (ataque primario), puede implementar javascript malicioso en el sitio web y realizar ataques a los usuarios o visitantes del sitio web, esto se denomina un ataque secundario.
  • Robo de datos: los datos son uno de los principales activos de la empresa. Los atacantes pueden obtener acceso a datos confidenciales de la empresa como el código fuente de un programa en particular y robarlo, esto se denomina un robo de propiedad intelectual.
  • Acceso root: esto es cuando un atacante logra escalar privilegios y obtener el usuario root, por ende consigue acceso de administrador al sistema con eso puede buscar tener acceso a toda la red.

Desfiguración de sitios web

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-12

Este tipo de ataques es uno de los mas vistos o populares, se trata del "website defacement" es realizar un cambio en la pagina principal de un sitio web para mostrar un mensaje a los visitantes, suele ser una amenaza o simplemente un nombre de un grupo o delincuente indivual impulsado por diferentes razones, de esta forma toma estado público la "causa" que tiene el mismo.

También suele verse propaganda política o contenido ofensivo para los usuarios, en el 2007 se produjo una serie de ataques informáticos entre un conflicto de 2 naciones se trata de Estonia y Rusia, el conflicto se llevo acabo por un desacuerdo sobre la estatua del Soldado de bronce de Tallin, entre los ataques informáticos estaba la desfiguración de sitios web a favor de Rusia y de mantener la posición de la estatua en el mismo lugar, en este ejemplo los ataques tuvieron motivación política.

Configuración por defecto, en servidores web

Los servidores web tienen varias vulnerabilidades relacionadas con la configuración, las aplicaciones, los archivos, los scripts o las páginas web. Una vez que el atacante encuentra estas vulnerabilidades, como el acceso remoto a la aplicación, estas se convierten en las puertas para que el atacante ingrese a la red de una empresa de manera ilegal.

Estos agujeros en el servidor pueden ayudar a los atacantes a eludir la autenticación del usuario. La configuración errónea del servidor se refiere a las deficiencias de configuración en la infraestructura web que pueden aprovecharse para lanzar varios ataques contra servidores web, tales como el recorrido del director (directory traversal), la intrusión del servidor y el robo de datos. Una vez detectados, estos problemas pueden explotarse fácilmente y resultar en el compromiso local de un sitio web.

  • El acceso remoto a un servidor (SSH), suelen ser los puntos de acceso mas comunes en muchos casos se eligen malas contraseñas y no se configura un limite te intentos fallidos, de esta forma se pueden ejecutar ataques de fuerza bruta.
  • Servicios innecesarios funcionando y abiertos al público, esto puede darle una ventaja al delincuente informático.
  • Mensajes o información valiosa para los programadores (debugs) disponible para el público en general.
  • Usuarios y contraseñas anónimos o por defecto
  • Ejemplos comunes: el banner que brinda información sobre la versión del servidor web (Server) y ademas suele mostrar información sobre el lenguaje que hay de fondo (X-Powered-By):
    curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-13

Ataques de directorio cruzado (directory traversal)

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-14

Los servidores web están diseñados de tal manera que el acceso público está limitado en cierta medida. El recorrido de directorio es la explotación de HTTP a través del cual los atacantes pueden acceder a directorios restringidos y ejecutar comandos fuera del directorio root del servidor web manipulando una URL. Los atacantes pueden usar el método de prueba y error para navegar fuera del directorio raíz y acceder a información sensible en el sistema, o ejecutar comandos de shell del propio sistema operativo del servidor.

Ataque de división de respuesta HTTP

Un ataque de respuesta HTTP (HTTP Response splitting attack) es un ataque basado en web donde se engaña a un servidor al inyectar nuevas líneas en los encabezados de respuesta junto con un código arbitrario. Cross-Site-Scripting (XXS), Cross-Site-Request-Forgery (CSRF) y SQL injection son algunos ejemplos de este tipo de ataques. El atacante altera una sola solicitud para aparecer y ser procesada por el servidor web como dos solicitudes. El servidor web a su vez responde a cada solicitud. Esto se logra agregando datos de respuesta del encabezado en el campo de entrada. Un atacante pasa datos maliciosos a una aplicación vulnerable la primera respuesta para redirigir al usuario a un sitio web malicioso, mientras que las otras respuestas serán descartadas por el navegador web.

  • Petición y respuesta normal:
    curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-15
    En este caso vemos una aplicación web normal, que tiene el parametro 'lang' en el se puede configurar el idioma del sitio web
  • Petición inyectada por un atacante, y respuesta vulnerable:
    curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-16
    Aprovechando el parametro lang, el atacante toma datos de la respuesta anterior y las inyecta para manipular la respuesta del servidor y devolver contenido HTML creado por el atacante. (Images source)

Ataque de envenenamiento de caché web

El envenenamiento del caché web (Web Cache Poisoning) es un atacante que se lleva a cabo en contraste con la confiabilidad de una fuente intermedia de caché web, en la que el contenido honesto almacenado en caché para una URL aleatoria se intercambia con contenido infectado. Los usuarios de la fuente de caché web pueden, sin saberlo, utilizar el contenido envenenado en lugar del contenido verdadero y seguro al exigir la URL requerida a través del caché web.

Un atacante fuerza la memoria caché del servidor web para eliminar el contenido real de la memoria caché y envía una solicitud especialmente diseñada para almacenarla en la memoria caché.

Secuestro de respuesta HTTP

El secuestro de respuesta HTTP (HTTP response hijacking) se logra con una solicitud de división de respuesta. En este ataque, inicialmente el atacante envía una respuesta dividiendo las solicitudes al servidor web, el servidor divide la respuesta en dos y envía la primera respuesta al atacante y la segunda respuesta a la víctima. Al recibir la respuesta del servidor web, la víctima solicita el servicio dando credenciales. Al mismo tiempo, el atacante solicita la página de índice, luego el servidor web envía la respuesta de la solicitud de la víctima al atacante y la víctima permanece desinformada.

Fuerza bruta contra SSH

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-17

Los protocolos SSH se usan para crear un túnel SSH encriptado entre dos hosts para transferir datos no encriptados a través de una red insegura, con el fin de realizar un ataque en SSH, primero el atacante escanea todo el servidor SSH para identificar las posibles vulnerabilidades. Con la ayuda de un ataque de fuerza bruta, el atacante gana los créditos de inicio de sesión. Una vez que el atacante obtiene las credenciales de inicio de sesión de SSH, utiliza los mismos túneles SSH para transmitir malware y otras vulnerabilidades a las víctimas sin ser detectado.

Ataque: Man in the middle

Un ataque de hombre en el medio (Man in the middle) es un método donde un intruso intercepta o modifica el mensaje que se intercambia entre el usuario y el servidor web a través del espionaje o la intrusión en una conexión. Esto permite que un atacante robe información confidencial de un usuario, como detalles bancarios en línea, nombres de usuario, contraseñas, etc. Transferido a través de Internet al servidor web. El atacante atrae a la víctima para conectarse al servidor web haciéndose pasar por un proxy. Si la víctima cree y acepta la solicitud del atacante, entonces toda la comunicación entre el usuario y el servidor web pasa por el atacante. Por lo tanto, el atacante puede robar información sensible del usuario.

Desciframiento de contraseñas

La mayoría de los delincuentes informáticos solo se inician con el descifrado de contraseñas, una vez que la contraseña se descifra, el atacante puede iniciar sesión en la red como personas autorizadas. Los atacantes usan diferentes métodos como ingeniería social, suplantación de identidad, phishing, troyanos o virus, escuchas telefónicas, registro de teclas, un ataque de fuerza bruta, un ataque de diccionario, etc. Para descifrar las contraseñas.

Los atacantes apuntan principalmente a:

  • Ataques contra autenticación de formularios web
  • Acceso por SSH
  • Servidores FTP
  • Servidores SMTP
  • Servidores compartidos

Técnicas de descifrado de contraseña del servidor web

Las contraseñas se pueden descifrar manualmente o con herramientas automáticas como Cain & Abel, Brutus, THC Hydra, etc. Los atacantes siguen varias técnicas para descifrar la contraseña:

  • Adivinar: un método común de craqueo utilizado por los atacantes es adivinar contraseñas ya sea por humanos o por herramientas automatizadas provistas de diccionarios. La mayoría de las personas tienden a usar los nombres de sus mascotas, nombres de sus mascotas, números de placa, fechas de nacimiento u otras contraseñas débiles como "contraseña", "administrador". Para que puedan recordarlos fácilmente, lo mismo le permite al atacante descifrar las contraseñas adivinando.
  • Ataque de diccionario: un ataque de diccionario es un método que tiene palabras predefinidas de varias combinaciones, pero esto también podría no ser efectivo si la contraseña consta de caracteres especiales y símbolos, pero en comparación con un ataque de fuerza bruta esto consume menos tiempo.
  • Ataque de fuerza bruta: en el método de fuerza bruta, todos los caracteres posibles se prueban, por ejemplo, mayúsculas de "A a Z" o números de "0 a 9" o minúsculas "de la a a la z". Pero este tipo de método es útil para identificar contraseñas de una o dos palabras. Mientras que si una contraseña se compone de letras mayúsculas y minúsculas y caracteres especiales, puede tomar meses o años para descifrar la contraseña, que es prácticamente imposible.
  • Ataque híbrido: un ataque híbrido es más poderoso ya que usa un ataque de diccionario y de fuerza bruta. También consiste en símbolos y números. El crackeo de contraseñas se vuelve más fácil con este método.

Ataques contra aplicaciones web

Las vulnerabilidades en las aplicaciones web que se ejecutan en un servidor web proporcionan una amplia ruta de ataque para el compromiso del servidor web, por lo tanto si un delincuente informático no quiere atacar directamente al servidor, puede buscar vulnerabilidades en la aplicación web que funciona sobre el mismo.

  • Recorrido de directorio: es una explotación de HTTP a través de la cual los atacantes pueden acceder a directorios restringidos y ejecutar comandos fuera del directorio 'root' del servidor web manipulando una URL.
  • Modificación de parámetros / formularios: este tipo de ataque de manipulación tiene por objeto manipular los parámetros intercambiados entre el cliente y el servidor para modificar los datos de las aplicaciones, como las credenciales y los permisos del usuario, el precio y la cantidad de productos, etc.
  • Infiltración de cookies: es el método de envenenamiento o alteración de la cookie del clinte. Las fases donde la mayoría de los ataques se realizan al enviar una cookie desde el lado del cliente al servidor. Las cookies persistentes y no persistentes se pueden modificar utilizando diferentes herramientas.
  • Ataques de inyección de comandos: es un método de ataque en el que un hacker altera el contenido de la página web mediante el uso de código HTML e identifica los campos de formulario que carecen de restricciones válidas.
  • Ataques de desbordamiento de búfer: la mayoría de las aplicaciones web están diseñadas para mantener cierta cantidad de datos. Si se excede esa cantidad, la aplicación puede bloquearse o mostrar algún otro comportamiento vulnerable. El atacante usa esta ventaja e inunda las aplicaciones con demasiados datos, lo que a su vez causa un ataque de desbordamiento del búfer (Buffer Overflow).
  • Ataques de scripts cruzados (XSS): es un método en el que un atacante inyecta etiquetas HTML o scripts de javascript en un sitio web objetivo, para realizar un ataque al usuario o visitante del mismo.
  • Ataque de Denegación de Servicio (DoS): es una forma de método de ataque destinado a terminar las operaciones de un sitio web o un servidor y hacer que no esté disponible para usuarios intencionados, perjudicando la disponibilidad del servidor.
  • Ingreso no validado y ataques de inyección de archivos: los ataques de entrada no validada y de inyección de archivos se refieren a los ataques que se realizan al suministrar una entrada sin validación que permite inyectar archivos en una aplicación web, por ejemplo un formulario web donde puedas subir una foto de perfil, en el back-end no hay una validación de archivos que se pueden subir, el atacante podría subir un PDF con malware.
  • Ataque de falsificación de solicitudes entre sitios (CSRF): el navegador web del usuario es solicitado por una página web maliciosa para enviar solicitudes a un sitio web malicioso donde se realizan varias acciones vulnerables, que no son realizadas por el usuario. Este tipo de ataque es peligroso en el caso de sitios web financieros.
  • Inyección de SQL: es una técnica de inyección de código que usa la vulnerabilidad de seguridad de una base de datos para ataques, el atacante inyecta código malicioso en las cadenas que luego se pasan al servidor SQL para su ejecución, por ejemplo: un cuadro de busquedas en un sitio web no esta siendo validado lo que ingresa el usuario y se pasa directamente a una consulta SQL, el atacante puede ingresar directamente código SQL y saber que hay dentro de la base de datos.
  • Secuestro de sesión: es un ataque en el que el atacante explota, roba, predice y negocia el verdadero mecanismo de control de sesión web válido para acceder a las partes autenticadas de una aplicación web.

Metodología de ataque contra un Servidor

Como vimos en módulos anteriores de este curso de seguridad informática, el proceso para obtener acceso o hackear un servidor web es el mismo que se le aplica a un sistema objetivo. Es decir, reunir información de manera pasiva y activa luego planificar un ataque con la información obtenida y finalmente lanzar el ataque, a continuación vamos a ver los pasos para realizar una auditoria de seguridad orientada a los servidores web.

Te recuerdo que no voy a profundizar mucho en cada fase, ya que en el primer módulo del curso de seguridad informática ya vimos de que trata cada paso que se ejecuta para realizar una auditoria de seguridad.

Recopilar información

La recopilación de información implica recopilar información sobre la empresa objetivo, los atacantes buscan en Internet, grupos de noticias, tableros de anuncios, etc. Para obtener información sobre la compañía. Los atacantes usan: Whois, traceroute, whois activos, etc.

Herramientas y consulta las bases de datos Whois para obtener detalles como un nombre de dominio, una dirección IP o un número de sistema autónomo.

Un caso común para empezar a obtener información de un sitio web es: buscar en el archivo 'robots.txt', suele encontrarse en la raiz del servidor (www.example.com/robots.txt). El archivo robots.txt contiene la lista de directorios y archivos del servidor web que el propietario del sitio web quiere ocultar de los rastreadores web (Motores de Búsquedas (ej: Google)). El atacante puede simplemente solicitar el archivo robots.txt desde la URL y recuperar la información confidencial, como la estructura del directorio raíz, la información del sistema de administración de contenido, etc.

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-18

Como vemos en la imagen el webmaster específico que carpetas los motores de búsquedas deben ignorar, en este caso el atacante podría ver un interés en el directorio '/admin'.

Obtener información sobre los servicios

El propósito de la huella (footprinting) es recopilar detalles de la cuenta, sistema operativo y otras versiones de software, nombres de servidores y detalles del esquema de la base de datos y tanta información como sea posible sobre los aspectos de seguridad de un servidor web o red objetivo. El objetivo principal es conocer sus capacidades de acceso remoto, los puertos y servicios abiertos, y los mecanismos de seguridad implementados.

Información buscada: el nombre del servidor, el tipo de servidor, los sistemas operativos, las aplicaciones en ejecución, etc. Entre los ejemplos de herramientas utilizadas para realizar footprinting se incluyen ID Server, Netcraft, etc.

Este paso suele mezclarse con la enumeración para eso realizamos un escaneo activo contra el servidor para tener información especifica y técnica sobre el mismo, es ideal para esto la herramienta Nmap.

Análisis de Vulnerabilidades

El análisis de vulnerabilidades es un método para determinar varias vulnerabilidades y configuraciones incorrectas de un servidor web o red objetivo. El escaneo de vulnerabilidades se realiza con la ayuda de varias herramientas automatizadas conocidas como escáneres de vulnerabilidades.

La exploración de vulnerabilidades permite determinar las vulnerabilidades que existen en el servidor web y su configuración. Por lo tanto, para determinar si el servidor web es explotable o no, se adoptan técnicas de rastreo en el tráfico de la red para descubrir los sistemas activos, los servicios de red, las aplicaciones y las vulnerabilidades presentes.

Además, los atacantes prueban la infraestructura del servidor web en busca de cualquier configuración errónea, contenido desactualizado y vulnerabilidades conocidas. Varias herramientas se utilizan para escanear vulnerabilidades como: Nessus, Expose, etc.

Secuestro de Sesión

El secuestro de sesión es posible una vez que se identifica la sesión actual del cliente, el atacante puede hacerse cargo del control completo de la sesión del usuario una vez que el usuario establece la autenticación con el servidor. Con la ayuda de las herramientas de predicción del número de secuencia, los atacantes realizan el secuestro de la sesión.

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-19

El atacante, después de identificar la sesión abierta predice el número de secuencia del siguiente paquete y luego envía los paquetes de datos antes de que el usuario legítimo envíe la respuesta con el número de secuencia correcto. Por lo tanto, un atacante realiza un secuestro de sesión, además de esta técnica, también puede usar otras técnicas de secuestro de sesión como la fijación de sesión, el secuestro de sesión, el XSS, etc. Las herramientas más utilizadas para secuestro de sesión son: Burp Suite, Hamster, Firesheep.

Contramedidas para proteger un Servidor Web

Ahora vamos a ver un poco sobre posibles contramedidas que se recomiendan seguir a la hora de poner en producción un servidor, es decir darle acceso a Internet. Cabe resaltar que estas contramedidas son un conjunto de buenas prácticas, existe la posibilidad de que algun delincuente informático logre acceder igual a tu servidor, ya que la seguridad informática es un campo del día a día, pero gracias a los estandares de contramedidas podemos minimizar el daño que podría causarnos un atacante, por eso es vital tomar en cuenta la seguridad a la hora de exponer un servidor a Internet.

Lectura recomendada: (Guía) Introducción a las redes informáticas, su seguridad, y como armar una red segura.

Contramedidas: Actualización y parches de seguridad

  • Busque vulnerabilidades existentes, aplique parches y actualice el software del servidor regularmente.
  • Antes de aplicar cualquier paquete de servicio, revisión o parche de seguridad, lea y revise toda la documentación relevante
  • Aplicar todas las actualizaciones, independientemente de su tipo, según sea necesario
  • Pruebe parches y las revisiones en un entorno representativo que no sea de producción antes de implementarlos en la producción.
  • Asegúrese de que las interrupciones del servidor estén programadas y de que haya un backup (copias de seguridad) de emergencia disponibles
  • Tener un plan de retroceso que permita que el sistema y la empresa vuelvan a su estado original, antes de la implementación fallida.
  • Programe actualizaciones periódicas del paquete de servicio como parte del mantenimiento de las operaciones.

Contramedidas: Protocolos y servicios

  • Bloquee todos los puertos innecesarios, el tráfico del Protocolo de mensajes de control de Internet (ICMP).
  • Mejore la pila de TCP/IP y aplique consistentemente los últimos parches de software y actualizaciones al software del sistema
  • Si usa protocolos inseguros como Telnet, POP3, SMTP, FTP, tome las medidas adecuadas para proporcionar autenticación y comunicación seguras, por ejemplo, mediante el uso de políticas IPSec.
  • Si se necesita acceso remoto, asegúrese de que la conexión remota esté asegurada correctamente, mediante el uso de protocolos de túnel y cifrado
  • Deshabilite WebDAV si la aplicación no lo usa o manténgalo seguro si es necesario

Contramedidas: Cuentas de usuarios

  • Eliminar todos los módulos no utilizados y extensiones de aplicaciones
  • Deshabilitar cuentas de usuario por defecto no utilizadas, creadas durante la instalación de un sistema operativo o servicio.
  • Al crear un nuevo directorio raíz (root) web, otorgue los permisos NTFS apropiados (los menos posibles).
  • Elimine los usuarios de bases de datos innecesarios y los procedimientos almacenados, y siga el principio de privilegios mínimos para la aplicación de base de datos para defenderse contra el envenenamiento por consultas SQL.
  • Reduzca la velocidad de la fuerza bruta y ataques de diccionario con políticas de contraseñas seguras, y la auditoría y alerta de fallas de inicio de sesión.
  • Ejecutar procesos utilizando cuentas con menos privilegios, así como servicio menos privilegiado y cuentas de usuario

Contramedidas: Archivos y directorios del servidor

  • Eliminar la información de configuración sensible dentro del código de bytes
  • Evite correlacionar directorios virtuales entre dos servidores diferentes o en una red
  • Controle y verifique con frecuencia todos los registros de servicios de red, registros de acceso al sitio web, registros del servidor de la base de datos y registros del sistema operativo.
  • Deshabilitar la publicación de listados de directorios
  • Elimine la presencia de archivos que no sean web, como archivos de almacenamiento, copias de seguridad, texto y encabezado/inclusión.
  • Deshabilitar el servicio de ciertos tipos de archivos creando una asignación de recursos
  • Asegúrese de que haya una aplicación web o archivos de sitios web y secuencias de comandos en una partición o unidad distinta de la del sistema operativo, los registros y cualquier otro archivo del sistema.

Cómo defenderse de los ataques al servidor web

  1. Puertos
  • Audite los puertos en el servidor regularmente para asegurarse de que un servicio inseguro o innecesario no esté activo en su servidor web.
  • Limite el tráfico entrante al puerto 80 para HTTP y al puerto 443 para HTTPS (SSL)
  • Encriptar o restringir el tráfico de intranet
  1. Certificados de servidor
  • Asegúrese de que los intervalos de datos del certificado sean válidos y de que los certificados se utilicen para el fin previsto
  • Asegúrese de que el certificado no haya sido revocado y que la clave pública del certificado sea válida durante todo el camino hasta una autoridad raíz confiable
  1. Código de seguridad de acceso
  • Implementar prácticas seguras de codificación
  • Restringir la configuración de la política de seguridad de acceso al código
  1. Servidor web
  • Evitar dar información sobre los directorios, cuando no se encuentra un recurso específico
  • Desabilitar las especificaciones técnicas del servidor, de esta forma no facilitamos el banner grabbing


Buenas prácticas recomendadas

  • Utilice una máquina dedicada como servidor web (VPS)
  • Crear asignaciones de URL a los servidores internos con cautela
  • Seguimiento de ID de sesión del lado del servidor de usuario y conexiones de coincidencia con marcas de tiempo, direcciones IP, etc.
  • Si un servidor de base de datos, como el servidor MySQL, se va a utilizar como una base de datos back-end, instálelo en un servidor diferente.
  • Utilice herramientas de seguridad provistas con software de servidor web y escáneres que automaticen y faciliten el proceso de seguridad de un servidor web.
  • Proteja físicamente la máquina del servidor web en una sala de máquinas segura, o contrate un servidor en la nube con buena reputación (ej: DigitalOcean)
  • No conecte un servidor web a Internet hasta que esté completamente reforzado
  • No permita que nadie inicie sesión localmente en la máquina, excepto el administrador
  • Limite la funcionalidad del servidor para admitir las tecnologías web que se van a utilizar
  • Monitorear y filtrar el trafico entrante y saliente, del servidor web.
  • Implementar un WAF (Web application Firewall) para que filtre los ataques mas utilizamos por los atacantes, es recomendable utilizar una versión paga y con contramedidas profesionales.

Gestión de parches

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-20

Un parche es un programa utilizado para realizar cambios en el software instalado en una computadora. Los parches se utilizan para corregir errores, solucionar problemas de seguridad, agregar funcionalidad, etc. Un parche es un pequeño software diseñado para solucionar problemas, vulnerabilidades de seguridad y errores, y para mejorar la usabilidad o el rendimiento de un programa informático o su soporte. Un parche puede considerarse un trabajo de reparación a un problema de programación.

Una revisión es un paquete que incluye varios archivos utilizados específicamente para abordar diversos problemas de software. Las revisiones se usan para corregir errores en un producto. Los proveedores actualizan a los usuarios sobre las últimas revisiones por correo electrónico o pueden descargarse desde el sitio web oficial. Las revisiones son una actualización para solucionar un problema específico del cliente y no siempre se distribuyen fuera de la organización del cliente. Los usuarios pueden recibir notificaciones por correo electrónico o a través del sitio web del proveedor. Las revisiones a veces se empaquetan como un conjunto, arreglos llamados revisiones combinadas o paquete de servicio.


¿Qué es la Gestión de Parches?

La gestión de parches es un proceso que se utiliza para garantizar que los parches apropiados estén instalados en un sistema y ayudar a corregir vulnerabilidades conocidas. Es una buena definición de lo que es la gestión de parches, ahora vamos a ver el mecanismo del mismo:

  1. Detectar: es muy importante detectar siempre los parches de seguridad faltantes a través de las herramientas de detección adecuadas. Si hay algún retraso en el proceso de detección, las posibilidades de ataques maliciosos son muy altas.
  2. Evaluar: una vez que finaliza el proceso de detección, siempre es mejor evaluar varios problemas y los factores asociados, relacionados con ellos y mejor implementar esas estrategias donde los problemas pueden reducirse o eliminarse drásticamente.
  3. Adquirir: el parche adecuado requerido para solucionar los problemas debe descargarse.
  4. Prueba: siempre se sugiere instalar primero el parche requerido en el sistema de prueba en lugar del sistema principal (producción) ya que esto brinda la oportunidad de verificar las diversas consecuencias de la actualización en el mismo.
  5. Despliegue: los parches deben desplegarse en el sistema con la máxima precaución, para que el sistema no se vea afectado por ningun problema causado por el nuevo parche.
  6. Mantener: siempre es útil suscribirse para recibir notificaciones sobre varias vulnerabilidades posibles a medida que se informan.


Gestión de parches: herramientas recomendadas

  • Microsoft Baseline Security Analyzer (MBSA): El analizador de seguridad de Microsoft Baseline (MBSA) le permite identificar las actualizaciones de seguridad faltantes y las configuraciones de seguridad comunes. Es una herramienta diseñada para el profesional de TI que ayuda a las pequeñas y medianas empresas a determinar su estado de seguridad de acuerdo con las recomendaciones de seguridad de Microsoft y ofrece una guía de remediación específica. Mejore su proceso de administración de seguridad mediante el uso de MBSA para detectar configuraciones de seguridad comunes y actualizaciones de seguridad faltantes en sus sistemas informáticos.
  • ZENworks Patch Management (Micro Focus)
  • Endpoint Security Patch Management (Ivanti)

Pentesting: hackeo de servidores

curso-de-seguridad-informatica-modulo-6-ataques-a-servidores-web-21

Las pruebas de penetración del servidor web comienzan con la recopilación de la mayor cantidad de información posible sobre una organización, desde su ubicación física hasta el entorno operativo, para poder realizar con exito un pentesting contra el servidor web objetivo.

Lo siguiente son los pasos realizados por el pentester para penetrar en el servidor web:

  1. Busque en fuentes abiertas para obtener información sobre el objetivo: intente recopilar la mayor cantidad de información posible sobre el servidor web de la organización objetivo, desde su ubicación física hasta el entorno operativo. Puede obtener dicha información de Internet, grupos de noticias, tableros de anuncios, etc.
  2. Realizar ingeniería social: realizar técnicas de ingeniería social para recopilar información, como recursos humanos, detalles de contacto, etc. Eso puede ayudar en las pruebas de autenticación del servidor web. También puede realizar ingeniería social a través de sitios de redes sociales o de manejo de contenedores de basura.
  3. Consultar las bases de datos de whois: puede utilizar las herramientas de consulta de bases de datos Whois como Whois, Traceroute, Active Whois, etc. Para obtener detalles sobre el destino, como nombre de dominio, dirección IP, contactos administrativos, número de sistema autónomo, dns, etc.
  4. Documentar toda la información sobre el objetivo: debe documentar toda la información obtenida de las diversas fuentes.
  5. Realizar escaneo en busca de información: para recopilar información como el nombre del servidor, el tipo de servidor, los sistemas operativos, las aplicaciones en ejecución, etc. Utilizando herramientas como ID Serve, httprecon y Netcraft.
  6. Realice el rastreo del sitio web: realice el rastreo del sitio web para recopilar información específica de páginas web, como direcciones de correo electrónico. Puede usar herramientas como httprint y Metagoofil para rastrear el sitio web.
  7. Enumere los directorios web: enumere los directorios del servidor web para extraer información importante, como funcionalidades web, formularios de inicio de sesión, etc. Puede hacerlo utilizando una herramienta como DirBuster.
  8. Realice la exploración de vulnerabilidades: realice una exploración de vulnerabilidades para identificar debilidades en una red usando herramientas como Nessus, etc. Y determine si el sistema puede ser explotado.
  9. Realizar pentesting: realizar diferentes tipos de ataques ya sea de forma manual, o con herramientas automatizadas como Metasploit, etc. Para lograr tener acceso al servidor web objetivo.
  10. Documentar: realizar una documentación de todo el proceso que realizaste y como obtuviste acceso al servidor, para luego ofrecer contramedidas de seguridad.

Este módulo terminá aqui, espero que hayas podido aprender los objetivos de este módulo. Este curso tiene un esfuerzo y es gratis, me gustaría que lo compartas en tus redes sociales o foros de hacking para que mas personas lo vean, este curso avanzará hasta alcanzar varios módulos, podes suscribirte si quieres saber el avanzé del curso, podes dejar tus comentarios, nos vemos!

Tenemos más cursos para vos en: gburu.net/cursos

¡Dejá tu Comentario!