Archivo por meses: septiembre 2016

Podcast – 01 – Introducción y Botnet

Micro con feed

Fuente imagen:PerfectYourPodcast

Os presento el capítulo presentación de una nueva idea loca: crear un podcast sobre seguridad informática.

La idea es presentar diferentes aspectos de la seguridad informática de una forma más amena y ágil que la simple lectura de un post. Quizás te pueda interesar añadir este podcast a tu listado y lo escuchas cuando sales a hacer ejercicio, quizás simplemente lo vas escuchando mientras trabajas, o quizás esto sea una locura que nadie usará y acabará arrinconada… pero por mi parte lo intentaré, ¿te apuntas?

En este primer capítulo hago una pequeña presentación del proyecto y paso a explicar el funcionamiento y creación de una botnet.

He creado un grupo en Telegram por si te animas a comentar los podcast o a realizar peticiones: Aquí tienes la invitación.

Que conste que lo he grabado cinco veces antes de darlo por medio-bueno… y sigo sin saberme oír.

Descarga directa.

Denegación de servicio contra servidores DNS

DNS logo

Fuente imagen: bleepingtech.com

El sistema DNS (Domain Name Service) es el que nos facilita a los humanos el uso de los servicios de Internet ya que sería casi imposible que recordásemos las direcciones IP de nuestras páginas web, sistemas de almacenamiento en la nube, portales de vídeos, etc. Así pues cualquier servicio de Internet que utilicen usuarios humanos depende, aún sin ser consciente, de este sistema de conversión de texto humano a direcciones IP.

Este sistema de nombre se creó en un momento en el que las comunicaciones eran caras y poco fiables, por lo que una de las características de este sistema es la gran permanencia de la información publicada. Esto hace que un ataque que busque una denegación de servicio contra DNS de un servicio concreto a base de eliminar su información registrada en el sistema deba ser continúo y durar más de 24 o 48 horas. La dificultad de mantener durante tanto tiempo estos ataques ha hecho que no sean prácticos para conseguir evitar que un servicio esté disponible para todos sus clientes. Por este motivo este tipo de ataques se suelen utilizar cuando queremos que un objetivo concreto no tenga conexión al exterior: anulando los servidores DNS a los que consulta una persona podemos hacer que, en la práctica, pierda su conexión a Internet (al menos para los humanos, ya que la conexión sigue estando habilitada).

En este artículo veremos algunos ataques DoS contra los propios servidores DNS y en una próxima entrada definiremos las protecciones y defensas básicas para anular, si es posible, estos ataques. Ademas hay una familia de ataques espejo en el que utilizando peticiones malformadas podemos conseguir que los propios servidores DNS dejen fuera de servicio una tercera víctima, pero estos ya merecen otro artículo.

Peticiones múltiples de dominios inexistentes

Se trata del tipo de ataque más básico que consiste simplemente en enviar solicitudes de información sobre dominios no existentes. Al recibir la petición el servidor consultará con sus servidores de referencia gastando recursos en el proceso (memoria, ciclos de CPU, ancho de banda…). El hecho de utilizar nombre de dominio inexistentes es porque, a diferencia de un dominio existente, al no obtener una respuesta afirmativa en la primera petición a su servidor de referencia realizará otra a un segundo servidor, y luego otra tercera, hasta agotar todos los servidores de referencia que ha aprendido previamente. Esto hace que una única consulta de un dominio no existente implique un mayor consumo de recursos que varias legítimas.

Si se hace de forma rápida es posible llenar la caché del servidor DNS víctima con dominios no existentes (NXDOMAIN) haciendo que cualquier petición legítima tenga un procesamiento más lento aún y acelerando la denegación de servicio a los clientes válidos de este servidor.

Ataque de dominios fantasma

Para este esquema el atacante crea un dominio real con un servidor DNS real especialmente configurado para responder de forma incorrecta: ya sea muy lentamente o con información parcial. Así cuando el atacante realiza consultas DNS a la víctima se asegura que las peticiones de información llegan a un equipo que él controla.

¿Qué pasa cuando un equipo responde, por TCP, de forma lenta? Pues que el receptor debe esperar, reservando recursos para ello, hasta que la transmisión finalice. ¿Qué pasa cuando un servidor envía la información de forma desordenada? Pues que el receptor debe esperar a recibir los diferentes paquetes para reordenarlos y obtener la información, lo cual implica reserva de recursos. ¿Y si el servidor pide retransmisiones de paquetes? Pues lo mismo: más reserva de recursos para almacenar información.

Realizando múltiples peticiones al servidor DNS víctima para que resuelva información contra el servidor DNS que nosotros controlamos podemos hacer que se quede sin recursos y provocar una denegación de servicio a todos los clientes que consultan a ese servidor.

Ataque basado en subdominios aleatorios

Gráfico de un ataque por subdominios

Ejemplo de ataque por subdominio. Fuente imagen: Incapsula

Este tipo de ataque es una evolución de los dos anteriores. La idea es solicitar una gran cantidad de subdominios inexistentes de un dominio concreto. Aunque es posible realizarlo contra un dominio inexistente (cosa que puede ser interesante para intentar burlar defensas contra el ataque anteriormente explicado) generalmente se realiza contra nombres de dominio existentes, ya sean controlados por el atacante (con lo que sería una evolución del ataque al dominio fantasma) o bien contra páginas conocidas que tengan gran capacidad de respuesta (de forma que se sature antes nuestro servidor víctima) como pudiera ser Google, Microsoft, Amazon, etc.

Aunque no es imprescindible, en la práctica, debido a las defensas de los propios servidores es necesario realizar este tipo de ataque desde una botnet. Cada miembro de una botnet, de forma coordinada, solicita la resolución de un subdominio aleatorio (asjdhaskd.yahho.com, jhsgdhafasd.microsoft.com, 8ajsdalNDBY.apache.org ,etc.) que no existirá forzando al servidor a reservar recursos para su infructuosa resolución.

¿Qué es una botnet?

Representación de una botnet

Representación de una botnet
FuenteUniversidad Nacional Autónoma de México

Empecemos por la definición clásica: Botnet es un término que hace referencia a un conjunto o red de «robots informáticos» o «bots», que se ejecutan de manera autónoma y automática. También es común denominarlas redes zombi, ya que los equipos de la red no actúan por voluntad propia sino bajo las órdenes de un tercero

Una definición menos oficial diría que el término botnet hace referencia a una red (net en inglés) de ordenadores (o cualquier sistema informático) que realiza tareas de forma autónoma (el sufijo bot viene de robot) que son ordenadas por un tercero sin autorización ni conocimiento de  sus propietarios.

La idea es realizar trabajos específicos, ordenados por un externo que ni tiene la propiedad ni ninguna autorización para ello, de forma coordinada por parte de diferentes máquinas.

Explicación simplificada del funcionamiento de una botnet

Uso de una botnet

Explicacion creación de una red zombi.
Fuente imagen: Wikipedia

Un atacante, ya sea hacker porque ha desarrollado él mismo las herramientas o un script-kiddie porque las ha encontrado y utilizado, consigue infectar diferentes equipos víctima con un malware. Los métodos de infección serán diferentes en cada caso (aplicaciones troyano en juegos gratuitos; infección en una página web que infecta a quien la visite; etc.), pero lo que se busca siempre es ejecutar un software en el equipo víctima (bot o zombi) que reciba instrucciones y las ejecute.

Veamos pues el proceso de infección y uso de una botnet:

1. Infección inicial

Los métodos de infección inicial pueden ser múltiples pero la idea básica es la misma: conseguir que el usuario se instale nuestra aplicación, ya sea de forma consciente o no. El uso de troyanos, campañas de phishing, etc. es habitual.

Aunque es posible el uso de una botnet como parte de un ataque orientado a un objetivo específico, lo más habitual es el uso de técnicas de infección indiscriminadas con la intención de conseguir una red de equipos zombis lo más amplia posible.

2. Actualización y gestión de nuevos módulos (opcional)

Aunque cada herramienta tenga un comportamiento diferente es común que la infección inicial sea con un programa base de pequeño porte y características reducidas, pero configurado para que una vez arranque se conecte a un servidor remoto y se descargue diferentes módulos que le conferirán las capacidades que el controlador desee (envío de spam, ataque por saturación, generación ataques DNS, etc.).

Esta estrategia, además de facilitar la infección inicial y su propagación, permite mejorar la herramienta de forma remota actualizando cada módulo de forma independiente y asegurándose de que cada vez las víctimas recibirán la última versión del malware.

3. Contacto con servidores C&C

De poco nos serviría una red de ordenadores listos para obedecernos si no pudiésemos darles órdenes, ¿no? Por ello los responsables de una botnet configuran el software malicioso en los equipos de las víctimas para que se conecten cada cierto tiempo a unos servidores externos para ver qué deben realizar. Estos servidores suelen conocerse por las siglas C&C que vienen de la expresión Command and Control.

Tradicionalmente se han utilizado servidores IRC privados debido a que resulta relativamente fácil pasar desapercibido (poco uso actual, salas privadas con acceso restringido, etc.) y utilizan un protocolo relativamente fácil de interpretar de forma dinámica. No es difícil configurar una sala privada para que al conectarse un usuario (un equipo zombi) éste reciba un mensaje automático con un formato específico que pueda interpretarse.

Por ejemplo si queremos que los zombis envíen spam a un destinatario (cuentaaspammear@sudominio.com) simulando ser una persona en concreto (cuentafalseada@dominio.com) bastaría con que el mensaje de bienvenida al canal fuera algo así:

SPAM – FROM:cuentafalseada@dominio.com – TO:cuentaaspammear@sudominio.com – SUBJECT:Asunto – BODY:»Texto del cuerpo del mensaje» – EOF

Mientras que si lo que queremos es realizar una denegación de servicio basándonos en un ataque espejo mediante DNS bastaría configurar un mensaje de bienvenida similar al siguiente:

DNS-MIRROR – VICTIM:www.empresa.com – PETITION:google.com – EOF

Es común que haya más de un servidor C&C ya que si sólo hubiera uno la mera desconexión del mismo implicaría la pérdida de la red. De igual forma para botnets profesionales se suele tener una estructura de servidores C&C piramidal de tal forma que el dueño de la red no se conecte siempre a un único servidor para evitar ser localizado por la policía. Estas estructuras pueden ser bastante complejas.

4. Ejecución de las instrucciones

Una vez recibidas las instrucciones el software ejecuta los módulos necesarios para realizar la tarea asignada utilizando los recursos de la máquina infectada de tal manera que es muy difícil localizar el origen real del ataque ya que la víctima final tan solo podrá conocer información de los equipos infectados. Esto hace que, además de la pérdida de rendimiento o posibles gastos que pueda incurrir el dueño del equipo zombi, éste pueda enfrentarse a problemas legales ya que en realidad ha formado parte de un ataque informático.

Usos maliciosos de una botnet

Si bien las funciones que realiza una botnet dependen de la inventiva de su diseñador, como estamos ante un uso no autorizado de unos medios que no son de su propiedad no podemos esperar que se utilice con fines benéficos. Los siguientes serían los más habituales:

  • DDoS (DNS espejo, sobrecarga peticiones, envío tráfico, etc.)
  • Spam
  • Mineria de Bitcoins con recursos de las víctimas (cada vez menos habitual)