Archivo de la categoría: Podcast

Podcast – 38 – Ataques a contraseñas hasheadas

Fuente imagen: Sifi Feefer

Recientemente recibí un correo electrónico de un proveedor avisándome de que debido a un acceso no autorizado a sus servidores un atacante se había hecho con la información de mi usuario y su correspondiente contraseña hasheada. En ese mismo correo aseguraban que la contraseña estaba protegida por la función de hash por lo que el atacante no podía descubrirla, pero aún así me obligaban a cambiarla… ¿No es esto una incongruencia? ¿Si está a salvo por qué me obligan a cambiarla?

Dejando de lado el dicho de que ‘más vale prevenir que curar’, la verdad es que una contraseña bien hasheada está bien protegida, pero no perfectamente protegida… y los crackers tienen técnicas para realizar ataques a contraseñas hasheadas y averiguarlas. Veamos las tres principales.

Aunque hablé más a fondo sobre cómo almacenar contraseñas de forma segura en el capítulo 11, podemos resumir la operativa de almacenamiento sería aplicar una función hash sobre la contraseña recibida y almacenar únicamente el resultado de la función hash. NUNCA deberíamos guardar la contraseña sino únicamente el resultado de la función hash. Sabemos que una función hash es un sistema de un solo sentido de tal forma que una misma cadena de entrada siempre devuelva el mismo resultado, pero que sea “computacionalmente imposible” obtener la cadena de entrada (es decir, la contraseña) teniendo únicamente la salida.

Ataques a contraseñas hasheadas

  1. La primera opción sería un ataque de fuerza bruta para conseguir encontrar qué contraseña genera un hash como el obtenido. Así el atacante tan sólo debe probar todas y cada una de las posibles combinaciones de caracteres para ver si el resultado de aplicarle una función hash es igual al de nuestra contraseña. Como entenderás se trata de un proceso que requiere de una capacidad de computación importante, sobre todo si usamos contraseñas largas e incluimos caracteres no alfanuméricos. Aunque es un proceso que con el tiempo será efectivo (en algún momento probará nuestra contraseña) no es muy eficiente en tiempo (pueden pasar años o siglos para localizar una password compleja), por lo que no es muy común su uso (salvo que sepamos a ciencia cierta que la contraseña es corta).
  2. Otra opción es aplicar la función de hash a un grupo concreto de contraseñas que tengamos almacenadas y ver si alguna coincide con el hash que queremos descubrir. Se suele denominar diccionario al listado de claves que queremos comprobar. Existen multitud de diccionarios con las contraseñas más utilizadas; combinaciones de palabras y números comunes; expresiones de uso común en casi cualquier idioma; etc… con lo que se puede sacar una lista de contraseñas probables. Entonces se cogen todas estas claves posibles (los listados puedes ser miles o millones de combinaciones) y se aplica la función de hash a cada una de ellas comparándola con la de la contraseña que queremos romper. Los ataques de diccionario son muy útiles cuando el atacante ha conseguido un gran listado de hashes sobre los que comparar. Pensad en las noticias de filtraciones de grandes empresas con miles o millones de usuarios: es muy probable que dentro de esos millones de usuarios haya centenares o miles de ellos que utilicen como contraseña una de las incluidas dentro del diccionario inicial. Así pues, los ataques de diccionarios son un sistema eficiente de encontrar alguna contraseña en un listado grande de víctimas, aunque no tanto cuando se busca una contraseña en concreto (aunque cómo son rápidos de ejecutar, es probablemente el primero que un atacante intente).
  3. La tercera estrategia que se encuentra en un punto intermedio, computacionalmente hablando, entre las dos anteriores los las denominadas rainbow table (aunque en español se llamarían «tablas arcoíris«, la verdad es que nunca las he oído llamar así). Se trata de tablas de hash precompiladas, específicas para cada protocolo, que relacionan distintas contraseñas con sus correspondientes hashes, aunque la relación no es uno-uno como sería el caso de los ataques por diccionario, sino que incluyen una serie de pasos intermedios que no son almacenados pero que son accesibles con los datos de la tabla. Así tenemos un sistema que implica una mayor necesidad de computación que los ataques de diccionario, pero muchísimo menos espacio de almacenamiento. A grandes rasgos podemos decir que una rainbow table aplica dos funciones (la de hash y otra denominada de reducción) varias veces de tal forma que el resultado de una función sirve como entrada de la siguiente ronda. Finalmente, tras las rondas correspondientes se almacena únicamente la entrada inicial y el resultado final, pero no los resultados intermedios. En el momento de querer sacar una contraseña se aplican las funciones de hash y reducción según el algoritmo de la tabla de reducción, permitiendo la detección de la contraseña correcta no sólo por las dos columnas almacenadas, sino también por los resultados intermedios que son calculados al vuelo. El procedimiento y las funciones utilizadas dependen de cada ‘tabla arcoíris’.

Como ves, los atacantes tienen estrategias para conseguir sacar la contraseña real del hash obtenido, y es por ello que las empresas afectadas por este tipo de filtraciones solicitan, u obligan, a sus usuarios a cambiar su contraseña de acceso: porque el atacante no tiene ahora mismo la contraseña pero puede llegar a tenerla (sobre todo si usamos claves cortas o que usen palabras/combinaciones comunes).

Descarga directa.

Podcast – 37 – Seguridad en viajes con Sergio R Solis

Aprovechando que coincidía con Sergio, del podcast Bitácora de Ciberseguridad, en un viaje, hemos aprovechado para grabar un capítulo rápido sobre las medidas de seguridad que conviene tomar cuando vamos de viaje y llevamos nuestros dispositivos electrónicos encima.

Micro con feed
Fuente imagen:PerfectYourPodcast

No somos tan paranoicos como @RadioHacking, pero mantener unas medidas de seguridad normales nos ayudará a disfrutar de nuestro viaje con la tranquilidad de que la mayor parte de los problemas que puedan surgir están cubiertos. Estos consejos no son suficientes si eres Jason Bourne, pero muy probablemente sí para el resto de personas.

Son sólo 15 minutos, pero si aún así te de pereza escucharnos, te los resumo en estos puntos:

  1. Evita usar Wi-Fi públicas. Hoy en día las tarifas de datos móviles tienen Gigas de sobra
  2. Usa VPN para navegar
  3. Haz copias de seguridad antes del viaje
  4. Bloquea tu teléfono

La introducción del capítulo está a cargo de Eduardo Collado.

Gracias por escucharnos… ¡y hasta la próxima!

Descarga directa.

Podcast – 36 – Entrevista con Bernat Mut sobre los antibots

En este capítulo hablaremos de los sistemas antibot con Bernat Mut, de la web BitsDeLocos. Repasaremos su funcionamiento, su diseño y veremos cómo protegen a las webs de venta on-line frente a los rastreadores de tarifas.

Micro con feed
Fuente imagen:PerfectYourPodcast

Daremos un repaso a las diferentes generaciones de sistemas bot rastreadores de tarifas, sus características y cómo las empresas han evolucionado sus sistemas defensivos para detectarlos y bloquearlos.

Como vemos se trata de una función muy específica que va más allá de las posibilidades de los cortafuegos o de los IPS. Aunque los IPS pueden adoptar algunas de las medidas básicas de los sistemas antibots no pueden cubrir todas las protecciones incorporadas en los sistemas antibot.

No dudéis en seguir a Bernat en el propio blog o en su cuenta de Twitter.

Descarga directa.


Podcast – 34 – Port Knocking

Hoy hablaremos sobre una técnica de ‘seguridad por oscuridad’: el Port Knocking. Podéis encontrar una entrada en la Wikipedia española con el nombre de “Golpeo de puertos”. Ciertamente es una traducción literal de la expresión inglesa y es el único sitio donde la he visto, por lo que si me lo permitís me quedaré con Port Knocking.

Micro con feed

Fuente imagen:PerfectYourPodcast

Según algunas fuentes esta técnica apareció por primera vez en 2003 en un artículo de la revista “SysAdmin Magazine” como un mecanismo de autenticación ante un cortafuegos. La idea es permitir el acceso a un servicio a través de un firewall que tiene los puertos cerrados por defecto.

Recordemos que los firewall tradicionales permiten o deniegan el tráfico en función de las direcciones IP origen/destino y de los puertos usados.

La idea básica del Port Knocking es simple: el cliente realiza una serie de intentos de conexión a una secuencia de puertos concreta. Si esta secuencia es correcta, el firewall habilitará el acceso al puerto para acceder al servicio protegido. Así pues, la “contraseña de acceso” al servicio sería la secuencia de puertos que debe ejecutarse antes de conectar con el servicio protegido.

Port Knoking

Ejemplo de Port Knocking. Fuente imagen: CyberVault

Veamos el ejemplo más sencillo de esta técnica: Supongamos que tenemos una página web oculta mediante esta técnica. Para acceder a esa página primero hay que ‘tocar’ los puertos 55, 34034 y 24124.

  1. Cuando cualquier usuario quiera conectar al servidor web protegido el firewall denegará la conexión como si no existiera ningún servicio web operativo. Así se consigue ocultar el servicio de miradas ajenas.
  2. Cuando queremos acceder a nuestra web oculta lanzamos tres peticiones de conexión TCP en el orden correcto: a cada petición recibiremos respuesta de que el puerto está cerrado (igual que recibiría cualquier intento de acceso a un puerto cerrado). Es decir, el Port Knocking no daría pistas de su existencia.
  3. Una vez realizada la secuencia en el orden correcto, en nuestra cuarta conexión accederíamos a nuestra página web y el firewall nos permitiría el paso. A partir de ese momento podemos trabajar con neustra web oculta sin problemas.

Así pues, la clave para acceder al servicio oculto es la secuencia exacta de peticiones que debemos realizar antes de acceder a la web.

Obviamente una vez abierto el acceso, el propio servicio puede (y debe) tener sus propias medidas de seguridad. El Port Knocking dificulta el descubrimiento del servicio, pero en su versión más sencilla (que es la que hemos explicado) no protege al propio servicio. En nuestro ejemplo una vez revelado un servicio web, la propia aplicación web debería tener un control de acceso, por ejemplo, con usuario/contraseña.

Esta técnica puede ser útil para proteger un servicio de miradas indiscretas, pero dónde no podemos saber con antelación desde dónde se conectarán nuestros clientes (servicios en itinerancia, redes móviles, direccionamiento IP dinámico etc.). Si nuestros clientes siempre tienen la misma IP es más sencillo configurar el firewall para que habilite el acceso normal únicamente a una serie de direcciones específicas y bloquee el del resto del mundo.

El principal problema de este modelo más sencillo de Port Knocking es que es débil frente ataques de repetición: si un atacante consigue capturar el tráfico de red (o los logs del propio firewall) podrá darse cuenta de esta secuencia repetida aparentemente sin sentido y averiguar la existencia del servicio secreto simplemente enviando la misma secuencia de peticiones. Una manera de dificultar esta detección sería el uso de puertos comúnmente comprobados por escaneadores de vulnerabilidades, aunque, obviamente, en una secuencia distinta a la habitual: a nadie extraña ver intentos de peticiones a puertos comunes (SMTP, FTP, telnet, ssh, etc.) por lo que se dificultaría que, entre todas las peticiones que hay en cualquier firewall, se detectase el patrón de acceso.

Otras técnicas para evitar los ataques de repetición implican el conocimiento de una clave previa:

  1. Codificaremos la información de nuestra dirección IP origen y el puerto destino al que queremos acceder (donde está el servicio oculto). Por ejemplo: IPPUERTO = 6 bytes.
  2. Ciframos esta cadena de caracteres con la clave adecuada
  3. Cogemos el valor del cifrado y lo separamos en bytes. Cada byte puede tener un valor entre 0 y 255. Así obtenemos una secuencia de valores del 0 al 255
  4. Sumamos a estos valores obtenidos un valor base (por ejemplo 23000). Y enviamos una conexión nueva al puerto resultante de esta operación.
  5. El firewall que recibe las peticiones puede restar el valor base (conocido de antemano) y obtener así los valores de bytes resultantes del cifrado
  6. Como el firewall conoce la clave de cifrado puede obtener el mensaje inicial y así puede abrir el acceso desde la IP origen al puerto solicitado.

Este sistema tiene la ventaja que ante un ataque de repetición (donde se enviasen los mismos paquetes) simplemente se abriría el firewall para la IP origen cifrada en el paquete y no para la IP del atacante. La elección de un valor base al que sumar a los puertos puede ser fija o realizarse de forma dinámica (en función de la hora, día del mes, etc.) permitiendo así dificultar los ataques de repetición y generar una alerta en el sistema en caso de detectar intentos de conexiones en puertos no adecuados a la franja temporal).

Una funcionalidad de este sistema es que permite abrir accesos a diferentes servicios sin cambiar el esquema, o bien incluso enviar los mensajes de Port Knocking desde direcciones IP diferentes a las que se usarán después para conectar al servicio protegido.

Un caso de control de acceso, que de forma irónica se incluye en la categoría de Port Knocking, son los sistemas Single Packet Authorization: es decir autenticación en un único paquete. A modo resumen se enviaría en un único paquete toda la información de IP origen y servicio al que se quiere acceder de forma cifrada en un único paquete. El firewall lo interpretaría y actuaría en consecuencia. Con este esquema se dificulta en gran medida la detección del sistema de ocultación, si bien al enviar un único paquete no parece que caiga en la categoría de Port Knocking 😉

Este método de protección, aunque parece sacado de una película de espías, podría ser una capa de seguridad adicional útil en algunas ocasiones. No es una configuración habitual en empresas (al menos no en las no tecnológicas), pero puede ser interesante que busquéis este tipo de patrones en los logs de firewall con las herramientas SIEM… quizás os llevéis alguna sorpresa.

Descarga directa.