Password Attacks
En esta sección abordaremos algunas de las técnicas más conocidas y utilizadas para realizar ataques de contraseñas en organizaciones.
Nota: Este tipo de técnicas son muy invasivas, ya que vamos a conseguir contraseñas de un usuario y acceder a sistemas, por lo que no podemos utilizar estas técnicas sin un consentimiento o aprobación por parte del objetivo o en un entorno controlado.
Autenticación
La autenticación, en esencia, es la validación de la identidad presentando una combinación de tres factores principales a un mecanismo de validación:
Algo que sabes (una contraseña, código de acceso, pin, etc.).
Algo que tienes (una tarjeta de identificación, una clave de seguridad u otras herramientas MFA).
Algo que eres (tu yo físico, nombre de usuario, dirección de correo electrónico u otros identificadores).
Almacenamiento de credenciales
Cada aplicación que admite mecanismos de autenticación compara las entradas/credenciales proporcionadas con bases de datos locales o remotas. En el caso de bases de datos locales, estas credenciales se almacenan localmente en el sistema. Las aplicaciones web suelen ser vulnerables a las inyecciones de SQL, lo que puede llevar al peor de los casos a que los atacantes vean la totalidad de los datos de una organización en texto sin formato.
Hay muchas listas de palabras diferentes que contienen las contraseñas más utilizadas. Un ejemplo de una de estas listas es rockyou.txt
. Esta lista incluye alrededor de 14 millones de contraseñas únicas y se creó después de una violación de datos de la empresa RockYou, que contenía un total de 32 millones de cuentas de usuario. La empresa RockYou almacenó todas las credenciales en texto plano en su base de datos, que los atacantes podían ver después de un ataque exitoso de inyección SQL.
También sabemos que todos los sistemas operativos admiten este tipo de mecanismos de autenticación. Por tanto, las credenciales almacenadas se almacenan localmente. Veamos con más detalle cómo se crean, almacenan y administran los sistemas basados en Windows y Linux.
Linux
Como ya sabemos, los sistemas basados en Linux manejan todo en forma de archivo. En consecuencia, las contraseñas también se almacenan cifradas en un archivo. Este archivo se llama shadow
y se encuentra /etc/shadow
y forma parte del sistema de gestión de usuarios de Linux. Además, estas contraseñas suelen almacenarse en formato hashes
. Un ejemplo puede verse así:
Archivo etc/shadow
El archivo /etc/shadow
tiene un formato único en el que las entradas se ingresan y guardan cuando se crean nuevos usuarios.
htb-student:
$y$j9T$3QSBB6CbHEu...SNIP...f8Ms:
18955:
0:
99999:
7:
:
:
:
<username>
:
<Contraseña encriptada>
:
<Último día de cambio>
:
<min age>
:
<max age>
:
<tiempo de aviso>
:
<periodo inactividad>
:
<fecha de expiración>
:
<campo reservado>
El cifrado de la contraseña en este archivo tiene el siguiente formato:
$ <id>
$ <salt>
$ <hashed>
$ y
$ j9T
$ 3QSBB6CbHEu...SNIP...f8Ms
El tipo (id
) es el método hash criptográfico utilizado para cifrar la contraseña. En el pasado se utilizaron muchos métodos hash criptográficos diferentes y algunos sistemas todavía los utilizan en la actualidad.
ID
Cryptographic Hash Algorithm
$1$
$2a$
$5$
$6$
$sha1$
$y$
$gy$
$7$
Sin embargo, algunos archivos más pertenecen al sistema de gestión de usuarios de Linux. Los otros dos archivos son /etc/passwd
y /etc/group
. En el pasado, la contraseña cifrada se almacenaba junto con el nombre de usuario en el archivo /etc/passwd
, pero esto se reconocía cada vez más como un problema de seguridad porque todos los usuarios del sistema pueden ver el archivo y debe ser legible. El archivo /etc/shadow
sólo puede ser leído por el usuario root
.
Archivo etc/passwd
htb-student:
x:
1000:
1000:
,,,:
/home/htb-student:
/bin/bash
<username>:
<password>:
<uid>:
<gid>:
<comment>:
<home directory>:
<cmd executed after logging in>
El campo x
de contraseña indica que la contraseña cifrada está en el archivo /etc/shadow
. Sin embargo, la redirección al archivo /etc/shadow
no hace que los usuarios del sistema sean invulnerables porque si los derechos de este archivo se configuran incorrectamente, el archivo puede manipularse de modo que el usuario root
no necesite escribir una contraseña para iniciar sesión. El campo vacío significa que podemos iniciar sesión con el nombre de usuario sin ingresar una contraseña.
Windows
El subsistema de seguridad realiza un seguimiento de las políticas y cuentas de seguridad que residen en un sistema informático. En el caso de un Controlador de Dominio, estas políticas y cuentas se aplican al dominio donde se encuentra el Controlador de Dominio. Estas políticas y cuentas se almacenan en Active Directory. Además, el subsistema LSA proporciona servicios para verificar el acceso a objetos, verificar los permisos de los usuarios y generar mensajes de monitoreo.
Diagrama del proceso de autenticación de Windows
Winlogon
es un proceso confiable responsable de gestionar las interacciones de los usuarios relacionadas con la seguridad. Éstas incluyen:
Iniciar LogonUI para ingresar contraseñas al iniciar sesión
Cambiar contraseñas
Bloquear y desbloquear la estación de trabajo
Depende de los proveedores de credenciales instalados en el sistema para obtener el nombre de cuenta o la contraseña de un usuario. Los proveedores de credenciales son objetos COM
que se encuentran en archivos DLL.
Winlogon es el único proceso que intercepta las solicitudes de inicio de sesión desde el teclado enviadas mediante un mensaje RPC desde Win32k.sys. Winlogon inicia inmediatamente la aplicación LogonUI al iniciar sesión para mostrar la interfaz de usuario para iniciar sesión. Después de que Winlogon obtiene un nombre de usuario y una contraseña de los proveedores de credenciales, llama a LSASS para autenticar al usuario que intenta iniciar sesión.
LSASS
Paquetes de autenticación
Descripción
Lsasrv.dll
El servicio LSA Server aplica políticas de seguridad y actúa como administrador de paquetes de seguridad para LSA. El LSA contiene la función Negociar, que selecciona el protocolo NTLM o Kerberos después de determinar qué protocolo tendrá éxito.
Msv1_0.dll
Paquete de autenticación para inicios de sesión en máquinas locales que no requieren autenticación personalizada.
Samsrv.dll
El Administrador de cuentas de seguridad (SAM) almacena cuentas de seguridad locales, aplica políticas almacenadas localmente y admite API.
Kerberos.dll
Paquete de seguridad cargado por LSA para la autenticación basada en Kerberos en una máquina.
Netlogon.dll
Servicio de inicio de sesión basado en red.
Ntdsa.dll
Esta biblioteca se utiliza para crear nuevos registros y carpetas en el registro de Windows.
Base de datos SAM
Los sistemas Windows se pueden asignar a un grupo de trabajo o a un dominio durante la instalación. Si el sistema ha sido asignado a un grupo de trabajo, maneja la base de datos SAM localmente y almacena a todos los usuarios existentes localmente en esta base de datos. Sin embargo, si el sistema se ha unido a un dominio, el Controlador de Dominio ( DC
) debe validar las credenciales de la base de datos de Active Directory ( ntds.dit
), que está almacenada en %SystemRoot%\ntds.dit
.
Microsoft introdujo una característica de seguridad en Windows NT 4.0 para ayudar a mejorar la seguridad de la base de datos SAM contra el pirateo de software fuera de línea. Esta es la característica SYSKEY
( syskey.exe
), que, cuando está habilitada, cifra parcialmente la copia del disco duro del archivo SAM para que los valores hash de contraseña para todas las cuentas locales almacenadas en el SAM se cifren con una clave.
Administrador de Credenciales
Credential Manager es una función integrada en todos los sistemas operativos Windows que permite a los usuarios guardar las credenciales que utilizan para acceder a diversos recursos de red y sitios web. Las credenciales guardadas se almacenan según los perfiles de usuario en el archivo Credential Locker
. Las credenciales se cifran y almacenan en la siguiente ubicación:
Existen varios métodos para descifrar las credenciales guardadas con Credential Manager. Practicaremos con algunos de estos métodos en este módulo.
NTDS
Cuentas de usuario (hash de nombre de usuario y contraseña)
Cuentas grupales
cuentas de computadora
Objetos de política de grupo
Practicaremos métodos que nos permitan extraer credenciales del archivo NTDS.dit más adelante en este módulo.
Ahora que hemos repasado los conceptos de almacenamiento de credenciales, estudiemos los diversos ataques que podemos realizar para extraer credenciales y ampliar nuestro acceso durante las evaluaciones.
Última actualización
¿Te fue útil?