Seguridad en contraseñas
Introducción
En el ámbito de la Informática, es importante discriminar de manera clara tres conceptos en el marco del control de acceso a Sistemas de Información que, aunque diferentes, están relacionados:
- Identificación: proceso mediante el cual el usuario indica al sistema o servicio, quién dice ser. El caso típico, es mediante un usuario y contraseña.
- Autenticación: mecanismo mediante el cual la máquina valida la identidad del usuario, es decir, si las credenciales aportadas en el proceso de identificación, son correctas. Los factores de autenticación más habituales en un esquema múltiple, son:
- Contraseña (algo que conozco).
- Tarjeta de coordenadas, token RSA, código SMS o notificación push en mi smartphone, etc. (algo que poseo).
- Rasgo biométrico, como la voz, el iris, la huella dactilar o un escaneo facial 3D (algo que soy).
- Se comienza a utilizar hoy en día un cuarto factor (UEBA, User & Entity Behavior Analytics), basado en patrones característicos de un individuo como son la forma de teclear (cadencia y presión), origen de la conexión, horarios, comportamiento a nivel de tráfico generado…
- Autorización: procedimiento para asignar y verificar capacidades concretas y específicas de los diferentes usuarios dentro de un sistema o aplicación, mediante por ejemplo, el uso de roles en base a una matriz de permisos (administrador, owner de parte del aplicativo, gestor de la base de datos del mismo, etc). Se revisan automáticamente antes de permitir una acción.
Como se ha indicado, y a pesar de que muchos gurús las daban por muertas hace años, la contraseña sigue siendo el mecanismo de identificación y autenticación básico por excelencia hoy en día, gracias a su sencillez y facilidad de implementación.
Uno de los primeros usos rudimentarios de las contraseñas como mecanismo de identificación que se conocen, se documentó en el texto bíblico del Libro de los Jueces, del Antiguo Testamento. En el siglo XI a.C. los fugitivos efraimitas que cruzaban el río Jordán se encontraban a soldados galaaditas, que para verificar su origen les sometían a la prueba de pronunciar la palabra shibboleth (espiga en hebreo). Dado que los efraimitas carecían de ese fonema en su dialecto, eran identificados como impostores y ajusticiados por sus enemigos.
El primer uso conocido en computación, data de los años 60 del siglo pasado, fruto de la colaboración entre el MIT y los laboratorios Bell.
En la actualidad, es algo ampliamente extendido, y con lo que todos estamos muy familiarizados. En este artículo haremos una fotografía del estado actual de las contraseñas como mecanismo de seguridad: riesgos y características, técnicas de ataque, y mecanismos de protección.
Riesgos de las contraseñas
Dado que las contraseñas son activos de gran valor al permitir al usuario identificarse ante máquinas, servicios o entidades, deben ser custodiadas con gran celo y no reveladas a terceros. Además, deben de cumplir con una serie de características que iremos desgranando, para minimizar la probabilidad de robo o derivación de las mismas.
Riesgos principales:
- Robo de contraseña. Es un escenario muy común, y que puede darse a través de múltiples vectores de ataque como pueden ser campañas de ingeniería social mediante phishing, shoulder surfing, instalación de malware (keyloggers…), etc.
- Predictibilidad. Las personas intentan minimizar el esfuerzo intelectual en la medida de lo posible, haciendo uso en muchos casos de contraseñas muy evidentes por ser fáciles de recordar. Hay dos variantes de este riesgo:
- Ingeniería social. A veces de manera trivial, como la cuestión del reset de contraseña con la pregunta del nombre de tu gato. Aún sin ser algo tan burdo, existen herramientas de uso libre como John The Ripper, que permiten incluir palabras clave relacionadas con un usuario (su nombre, el de sus hijos, fechas clave, lugares de nacimiento, etc.), y probar miles de combinaciones con las mismas de manera automática de manera altamente efectiva.
- Password spraying. Consiste en probar de manera sistemática sobre una lista de usernames obtenidas de cualquier fuente (leaks, linkedin, etc), una batería de contraseñas típicas que, desgraciadamente, un relativamente bajo porcentaje de usuarios sigue empleando (como pueden ser “12345”, o “chucknorris”).
- Password stuffing. Esta técnica implica la reutilización de contraseñas filtradas en brechas de seguridad de un servicio dado (disponibles en internet de manera pública o en la Dark web), en otros servicios de los que el usuario pudiera disponer.Cuando se produce una filtración de contraseñas, los responsables de un servicio generalmente optan por hacer un reseteo masivo de claves (ejemplo, LinkedIn en 2016). Pero si el usuario hacía uso de la misma en algún otro servicio, como por ejemplo Facebook, es vulnerable a esta forma de proceder de los ciberdelincuentes (a no ser que proactivamente sea consciente de dicho riesgo, y la cambie en todos sus servicios con la misma contraseña, algo altamente improbable). Esta parece haber sido el vector de ataque al oleoducto de Colonial en USA en mayo de 2021.
- Password cracking. Consiste en la derivación de la clave a partir del hash*, obtenido éste previamente del robo de un almacén de claves, por ejemplo, del fichero SAM de un servidor Windows. Hay ataques que permiten evadir las protecciones, y se pueden realizar de forma offline, como veremos.
(*) Las contraseñas en general no se almacenan en los sistemas en claro, sino procesadas. Esto aumenta el nivel de confidencialidad. Entre estos mecanismos de procesamiento, el hashing es el más básico, y consiste en una transformación mediante una función matemática de la cadena de caracteres, con una expresión que posee una serie de propiedades que hacen interesante su uso (entre las que están el efecto avalancha, la no colisión y la unidireccionalidad).
Cuando en un servicio de internet para el que has olvidado tu contraseña, te envían un mail en el que te recuerdan cuál era en texto plano: échate a temblar. Esto implica que las están guardando sin hashear, y es una práctica nada recomendable, puesto que hasta el administrador de sistemas podría leerlas.
Técnicas de ataque
La fortaleza inicial de una clave (al margen de las técnicas de protección con que se procese en los sistemas de información), depende básicamente de dos factores:
1. El tamaño del espacio de claves. Es decir, cuántas combinaciones posibles existen y podrían teóricamente ser utilizadas, y que son función tanto de la longitud de la propia contraseña, como del alfabeto utilizado. La fórmula para calcular el tamaño del espacio de claves, es la siguiente:
Siendo S la longitud máxima, N el número de símbolos del alfabeto.
De esto se deriva una conclusión interesante y poco conocida: es más importante la longitud de la contraseña (factor exponencial en la fórmula anterior) que el alfabeto utilizado (factor lineal), y por tanto la contraseña “estapasswordesbastantesegura” (29 bytes), es más fuerte que “9xz_aSD_1#” (10 bytes), a pesar de utilizar sólo letras.
Como curiosidad, se dice que los archivos del caso Villarejo que la policía no ha logrado descifrar todavía, están encriptados con Veracrypt (software open source de encriptación ampliamente difundido y analizado, sin puertas traseras), y se sospecha que las contraseñas están constituidas por sentencias largas, extraídas de páginas de libros de su biblioteca particular.
Con la tecnología actual, en 2022 la longitud mínima de contraseña debe ser 12 bytes (aunque el NIST recomienda 8 o más). Veremos también que hoy en día, hay mecanismos para mitigar el impacto que tiene la Ley de Moore en la capacidad de cómputo de hashes por parte de los ciberdelincuentes.
2. La entropía empleada en la creación de la clave, es decir, el grado de desorden de sus caracteres. Por ejemplo la contraseña de 5 caracteres “12345”, tiene una entropía escasa y facilita su derivación mediante diferentes estrategias.
Grandes grupos de técnicas
Ataques de fuerza bruta offline
Una vez capturado el almacén de claves de una máquina (un simple fichero), tenemos un archivo con una colección de hashes para el que intentaremos recuperar qué clave dio lugar a dicha transformación, de manera offline (cracking).
En este ámbito, siempre ha habido un juego del gato y el ratón entre los investigadores y los ciberdelincuentes, para intentar proteger el castillo los primeros, y asaltarlo los segundos, haciendo uso de diferentes técnicas de ataque y salvaguarda, que veremos a continuación (cada vez más sofisticadas).
1. Ataque: Rainbow tables. Para agilizar el cómputo de hashes a la hora de intentar derivar qué contraseña en claro corresponde a un determinado hash, los atacantes comenzaron a hacer uso de estas tablas. Consisten en diccionarios de contraseñas reducidos, mediante hashes pre-computados y funciones de reducción. Si a partir de una función de reducción se llega al hash, la contraseña en claro es la entrada de dicha función de reducción. De esta manera, se agiliza el cómputo. En el ejemplo de la figura en Wikipedia para la entrada rainbow table, el hash era re3xes, la password es culture.
Existen multitud de herramientas para generar rainbow tables y para hacer uso de ellas, como por ejemplo: Rtgen para la creación, servicios online como Passcracking, o tablas pregeneradas como las que proporciona Ophcrack.
2. Defensa: Salting/peppering. Para contrarrestar los ataques de fuerza bruta sobre el hash y/o los usos de rainbow table, se creó el concepto de salting. Consiste en añadir una cadena de caracteres aleatorios al final de la contraseña del usuario en el momento de la creación de la misma, para modificarla y aumentar su longitud, dificultando de esta manera el cómputo (recordemos, el espacio de claves aumenta exponencialmente con la longitud).
El valor único de sal se guarda junto con la contraseña, de tal manera que una exfiltración de la base de datos convierte el salting en un proceso inútil. En caso contrario, implica que la tabla rainbow se multiplica por el tamaño del hash, con lo que el tiempo de procesamiento y por tanto de prueba y error por parte de los malos, crece mucho.
Por el inconveniente de su inutilidad asociado a un eventual leak, posteriormente nace un mecanismo nuevo de defensa: peppering. Mismo concepto que el anterior, se añade pimienta a las password antes de hashearlas, pero en este caso el pepper es común para todas las contraseñas y no se almacenan en base de datos, sino en otro lugar o incluso hardcodeada en el aplicativo.
Esta técnica funciona, pero presenta problemas de diseño e implementación, complejidad excesiva, y requiere un mantenimiento que hoy en día, gracias a otros mecanismos de seguridad que veremos, hace que su uso sea innecesario. En cualquier caso, forma parte de la cronología de cómo avanzaron los ataques y defensas.
3. Ataque: GPUs. Las GPU (Graphic Processing Units) o GPGPUs (General Purpose GPUs), son componentes hardware que tienen la característica de permitir realizar operaciones matemáticas a muy alta velocidad, lo que las hace adecuadas para el cómputo de hashes en los ataques de fuerza bruta (como curiosidad, en Bitcoin para generar bloques y recibir la recompensa monetaria asociada hay que verificar hashes, y por ello los mineros de criptomonedas emplean este hardware. Esta es la causa de que las tarjetas gráficas de PC hayan aumentado tanto de valor en los últimos tiempos, dado que su core, es una GPU).
Con un equipo de 50.000€, actualmente se puede crackear una password NTLM de Windows (protocolo inseguro) en menos de 6 horas.
- Hay multitud de herramientas disponibles, gratuitas y de pago: Hashcat, Passware, Crackstation… Otra opción es contratar, por ejemplo, EC2 Elastic GPUS de Amazon Web Services.
4. Defensa: Key stretching. Con la ley de Moore en la mano, dado que cada 2 años se dobla la capacidad de cómputo, necesitaríamos aumentar un bit la longitud de las contraseñas para mantenerlas a salvo de ataques de fuerza bruta.
En la práctica, esto no es necesario debido al empleo de un ingenioso mecanismo, el stretching. Esta técnica incrementa la fortaleza de una contraseña mediante el incremento del tiempo de procesamiento necesario para probar cada variante dentro del espacio de claves. Se basa en que la contraseña del usuario definida inicialmente, se guarda no sólo hasheada con el algoritmo seleccionado en diseño, sino que además se aplican otras funciones matemáticas complejas. Ejemplos:
- PBKDF1. Publicado como RFC del IETF. Se basa no sólo en requerir tiempo para el procesamiento, sino también gran cantidad de memoria para ejecutar las operaciones de cálculo de hash. Las GPUs son rápidas, pero no son eficientes en uso de memoria, y esto penaliza mucho los ataques.
- PBKDF2 (password based key derivation function 2), calcula el HMAC SHA256 de la password+salt, lo mezcla con la password, y repite la operación 1000 veces. Esto parece poco eficiente, pero realizar estas 1000 operaciones para validar la contraseña de un usuario legítimo, es asumible. En cambio, si un ciberdelincuente intenta mediante fuerza bruta probar todo el espacio de claves, y la contraseña era suficientemente larga… good luck.Este algoritmo se emplear en Linux por ejemplo, para securizar la password que protege el acceso a ciertas opciones del GRUB.
Ataques de búsqueda inteligente
Se consideran de canal lateral. Algunos son básicos, y otros ciertamente sofisticados.
Ejemplos: uso de cámaras de vídeo o térmicas en cajeros automáticos, comprometer los giroscopios de un smartwatch al desbloquear un smartphone, escuchar el ruido de la CPU al procesar la contraseña introducida…
Ataques de diccionario
Prueba con ficheros de passwords aleatorias, generadas de diversos modos. Algunos están disponibles ya en repositorios o el propio sistema operativo, como el caso de rockyou o los de dirbuster en Kali linux. Otros se pueden generar en base a diferentes patrones (en función de hallazgos de OSINT, intuición del ciberdelincuente, etc.).
Para testearlas online, una aplicación muy conocida es THC Hydra, integrada en la suite de Kali.
Ataque personal
Un sujeto se ve obligado a revelar sus credenciales (debido a una amenaza de agresión física, presión psicológica, etc). Desgraciadamente, esto no ocurre solamente en películas.
Mecanismos de protección
Como se ha indicado, las contraseñas son activos de información vitales para un individuo u organización, por motivos más que evidentes. Las buenas prácticas en gestión de contraseñas a título individual, resumiendo lo visto anteriormente, son:
- Regla general: Emplear contraseñas fuertes, diferentes en cada servicio, y cambiarlas solamente en caso de compromiso o sospecha del mismo, o una vez al año.En contra de lo que se dice en muchas ocasiones, una contraseña suficientemente larga y con una entropía adecuada, no necesita cambiarse cada pocas semanas.De hecho, es contraproducente, puesto que conduce a los usuarios a repetir contraseñas sencillas con ligeras variaciones (¿os suena comenzar con mayúsculas y terminar con números, al estilo de “Marzo2022”? ;-)).
- Contra password spraying: utilizar en los sistemas una lista negra de contraseñas muy débiles, e imponer una longitud mínima suficientemente elevada (al menos 12 caracteres, como se ha comentado).
- Contra password stuffing: no reutilizar contraseñas. Emplear gestores como LastPass, Keepass, 1password…, con longitud tanto de clave maestra como de las secundarias, de al menos 12 caracteres siempre que sea posible. La maestra, indudablemente, más larga todavía, y guardada bajo siete llaves (idealmente sólo en tu cerebro).
- Contra robo/keyloggers, etc: utilizar un segundo factor de autenticación. Por ejempo FIDO U2F (llaves criptográficas USB), SMSs, sistemas TOTP (Time-based One Time Password…), claves RSA…
- Contra password cracking: hashes con salt (anti-rainbow tables), key stretching (anti-GPU), aleatorias (anti-diccionario) y suficientemente largas (anti-fuerza bruta).
Si quieres aportar otras ideas, o discutir sobre cualquier cuestión relacionada con el post, usa los comentarios!
Suscríbete sin compromiso para recibir nuevos posts, y recibirás acceso gratuito a una Masterclass acerca de qué es la ciberseguridad, por qué es tan importante, y cómo acceder a un puesto en dicho sector. Si estás pensando en formarte en ese ámbito o reciclarte, te vendrá estupendamente.
Comparte esto con quien consideres que puede estar interesado!
Si quieres contactar por privado: oscar.iglesias@daferrasecure.com.
Gracias por leernos. Stay secure!
ETD