Este artículo se basa en el material de aprendizaje disponible en: https://tryhackme.com/room/protocolsandservers2
En este artículo exploraremos: ataques contra credenciales y tráfico en texto plano; opciones para mitigar estos ataques mediante SSH y SSL/TLS.
Introducción
En el contenido anterior, presentamos una introducción a los protocolos y servidores, cubriendo numerosos protocolos:
- Telnet
- HTTP
- FTP
- SMTP
- POP3
- IMAP
Los servidores que implementan estos protocolos son vulnerables a diversos tipos de ataques, entre los que se incluyen:
- Ataques de sniffing (captura de paquetes de red)
- Ataques de hombre en el medio (MITM: Man-in-the-Middle)
- Ataques a contraseñas (ataques de autenticación)
- Explotación de vulnerabilidades
Desde una perspectiva de seguridad, siempre debemos considerar qué estamos protegiendo; generalmente nos enfocamos en los tres pilares de la seguridad: confidencialidad, integridad y disponibilidad (CID).
La confidencialidad (Confidentiality) se refiere a mantener el contenido de la comunicación accesible solo para las partes destinadas, previniendo el acceso no autorizado a datos, en esencia: "no se puede ver". La integridad (Integrity) asegura que cualquier dato enviado llegue a su destino de manera precisa, consistente y completa, evitando modificaciones no autorizadas, es decir: "no se puede alterar". Finalmente, la disponibilidad (Availability) garantiza que el servicio sea accesible cuando se necesite, asegurando que los clientes autorizados puedan acceder a los datos de manera continua e ininterrumpida, es decir: "siempre disponible". Diferentes organizaciones priorizarán estos aspectos de manera distinta. Por ejemplo, para una agencia de inteligencia, la confidencialidad será la máxima prioridad; para un banco en línea, la integridad de las transacciones será crucial; mientras que para cualquier plataforma que genere ingresos mediante publicidad, la disponidad será lo más importante.
Sabemos que protegemos confidencialidad, integridad y disponibilidad (CID), mientras que los atacantes buscan provocar revelación, alteración y denegación (RAD), como se refleja en el siguiente diagrama.
Estos ataques (RAD) impactan directamente la seguridad del sistema. Por ejemplo, la captura de paquetes de red viola la confidencialidad y puede llevar a fugas de información; un ataque exitoso a contraseñas también puede resultar en revelación. Por otro lado, un ataque MITM compromete la integridad del sistema al modificar los datos de comunicación. En este artículo nos centraremos principalmente en tres tipos de ataques: captura de paquetes de red, ataques hombre en el medio y ataques a contraseñas. La prevención de estos ataques es parte fundamental del diseño de protocolos e implementación de servidores.
Las vulnerabilidades también representan un riesgo para la seguridad del sistema, pero su alcance es más amplio y sus efectos varían. Por ejemplo, explotar una vulnerabilidad de denegación de servicio (DoS) podría afectar la disponibilidad del sistema, mientras que explotar una vulnerabilidad de ejecución de código remoto (RCE) podría causar daños más graves. Es importante señalar que las vulnerabilidades en sí mismas crean riesgo, pero el daño ocurre solo cuando son explotadas. En este artículo no profundizaremos en el tema de vulnerabilidades.
Nos enfocaremos en cómo actualizar o reemplazar protocolos para prevenir la revelación y alteración de datos, es decir, proteger la confidencialidad e integridad de los datos en tránsito. Además, introduciremos brevemente el uso de Hydra para romper contraseñas débiles.
Se recomienda iniciar la AttackBox y la máquina virtual objetivo en el room correspondiente de TryHackMe antes de continuar. Puede conectarse a los servicios de diferentes protocolos mediante Telnet o Netcat para obtener una mejor experiencia práctica.
Ataques de Sniffing
El sniffing de red consiste en utilizar herramientas de captura de paquetes para recopilar información sobre un objetivo. Cuando los protocolos se comunican en texto plano, los datos intercambiados pueden ser capturados por terceros para su análisis; es decir: si los datos no están cifrados durante la transmisión, una simple captura de paquetes puede revelar información sensible, como mensajes privados o credenciales de inicio de sesión (nombre de usuario y contraseña).
Siempre que un usuario tenga los permisos adecuados (privilegios root en Linux o permisos de administrador en Windows), puede realizar ataques de sniffing utilizando la tarjeta de red Ethernet (802.3). Existen numerosos programas o herramientas para capturar paquetes de red, entre los que destacan:
- Tcpdump: un programa gratuito de código abierto con interfaz de línea de comandos (CLI), portado a muchos sistemas operativos.
- Wireshark: un programa gratuito de código abierto con interfaz gráfica de usuario (GUI), disponible para múltiples sistemas operativos, incluyendo Linux, macOS y Windows.
- Tshark: la alternativa con CLI de Wireshark.
Aunque existen herramientas especializadas para capturar contraseñas o mensajes completos, funcionalidades similares pueden lograrse con Tcpdump y Wireshark mediante algunas operaciones adicionales.
Supongamos que un usuario utiliza POP3 para verificar su correo electrónico. Podemos usar Tcpdump para intentar capturar su nombre de usuario y contraseña. En la siguiente salida de terminal, usamos el comando sudo tcpdump port 110 -A. Antes de explicar este comando, debemos saber que realizar este ataque requiere acceso al tráfico de red: por ejemplo, mediante un dispositivo de escucha o un switch con puerto de espejo, o si hemos realizado con éxito un ataque MITM, también podemos acceder al tráfico de red en intercambio.
Necesitamos agregar sudo al inicio del comando porque la captura de paquetes requiere privilegios root; sabemos que POP3 utiliza el puerto 110, por lo que filtramos los paquetes por ese puerto (limitando la cantidad de paquetes capturados y mostrando solo los paquetes intercambiados con el servidor POP3); finalmente, queremos mostrar el contenido de los paquetes capturados en formato ASCII, por lo que agregamos -A.
analista@TryHackMe$ sudo tcpdump port 110 -A
[...]
09:05:15.132861 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [P.], seq 1:13, ack 19, win 502, options [nop,nop,TS val 423360697 ecr 3958275530], length 12
E..@.V@.@.g.
...
......n......"............
.;....}.USER carlos
09:05:15.133465 IP 10.20.30.148.pop3 > 10.20.30.1.58386: Flags [.], ack 13, win 510, options [nop,nop,TS val 3958280553 ecr 423360697], length 0
E..4..@.@.O~
...
....n....".........?P.....
...i.;..
09:05:15.133610 IP 10.20.30.148.pop3 > 10.20.30.1.58386: Flags [P.], seq 19:43, ack 13, win 510, options [nop,nop,TS val 3958280553 ecr 423360697], length 24
E..L..@.@.Oe
...
....n....".........<-.....
...i.;..+OK Se requiere contraseña.
09:05:15.133660 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [.], ack 43, win 502, options [nop,nop,TS val 423360698 ecr 3958280553], length 0
E..4.W@.@.g.
...
......n......".....??.....
.;.....i
09:05:22.852695 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [P.], seq 13:28, ack 43, win 502, options [nop,nop,TS val 423368417 ecr 3958280553], length 15
E..C.X@.@.g.
...
......n......".....6......
.<.....iPASS K8zq2RtL
[...]
En la salida anterior, hemos eliminado paquetes irrelevantes para facilitar la comprensión. El nombre de usuario y la contraseña se envían en paquetes separados: el primer paquete muestra claramente el nombre de usuario "USER carlos", mientras que el último paquete muestra la contraseña "PASS K8zq2RtL".
También podemos usar Wireshark para lograr el mismo resultado. En la siguiente ventana de Wireshark, vemos que hemos ingresado pop en el campo de filtro, y ahora hemos filtrado el tráfico de interés. Podemos ver que el nombre de usuario y la contraseña han sido capturados con éxito.
En resumen, cualquier protocolo que utilice comunicación en texto plano es vulnerable a ataques de sniffing. El único requisito para que este ataque tenga éxito es poder acceder al sistema entre los dos sistemas en comunicación.
Para mitigar los ataques de sniffing, una medida efectiva es agregar una capa de cifrado sobre cualquier protocolo de red. En la práctica, el Protocolo de Seguridad de Capa de Transporte (TLS) se ha añadido a protocolos como HTTP, FTP, SMTP, POP3, IMAP y muchos otros. Para el acceso remoto, se pueden utilizar alternativas seguras como el Protocolo Secure Shell (SSH).
Ejercicio
Ataques de Hombre en el Medio (MITM: Man-in-the-Middle)
Un ataque de hombre en el medio (MITM) ocurre cuando la víctima (A) cree que está comunicándose con un destino legítimo (B), pero en realidad está comunicándose con un atacante (E) sin saberlo.
En el siguiente diagrama, vemos que A solicita transferir 20 dólares a M; sin embargo, E modifica este mensaje y reemplaza el valor original; finalmente B recibe el mensaje modificado y actúa en consecuencia.
Si las partes no verifican la autenticidad e integridad de cada mensaje, este ataque puede ser relativamente sencillo de implementar. En algunos casos, el protocolo utilizado puede no proporcionar autenticación o verificación de integridad; además, algunos protocolos tienen inherentemente vulnerabilidades que los hacen más susceptibles a ataques MITM.
Cada vez que navegas por HTTP, eres vulnerable a ataques MITM, y lo más preocupante es que podrías no darte cuenta de este ataque. Muchas herramientas pueden ayudarte a realizar este tipo de ataques, como Ettercap y Bettercap.
Los ataques MITM también pueden afectar otros protocolos en texto plano, como FTP, SMTP y POP3. Mitigar este ataque requiere criptografía; las soluciones específicas implican el uso de mecanismos de autenticación adecuados, así como el cifrado o firma de mensajes durante el intercambio. Con la ayuda de la infraestructura de clave pública (PKI) y certificados raíz confiables, el Protocolo de Seguridad de Capa de Transporte (TLS) puede prevenir eficazmente los ataques MITM.
Ejercicio
Protocolo de Seguridad de Capa de Transporte (TLS)
En esta sección, exploraremos una solución estándar para proteger la confidencialidad e integridad de los paquetes intercambiados, métodos que pueden prevenir eficazmente tanto los ataques de sniffing de contraseñas como los ataques de hombre en el medio (MITM).
SSL (Capa de Conexiones Seguras - Secure Sockets Layer) surgió con la aparición de nuevas aplicaciones en la World Wide Web, como el comercio electrónico que requería el envío de información de pago. Netscape introdujo SSL en 1994 y lanzó SSL 3.0 en 1996; debido a mayores necesidades de seguridad, en 1999 se introdujo el protocolo TLS (Seguridad de Capa de Transporte - Transport Layer Security). Antes de explicar qué proporcionan SSL y TLS, veamos cómo se adaptan al modelo de redes de computadoras.
Los protocolos generales que hemos cubierto hasta ahora envían datos en texto plano, lo que permite que cualquiera con acceso a la red pueda capturar, guardar y analizar los mensajes intercambiados. El siguiente diagrama muestra el modelo de red ISO/OSI; hasta ahora, los protocolos que hemos discutido operan en la capa de aplicación. En el modelo ISO/OSI, podemos agregar cifrado en la capa de presentación, de modo que los datos se presentarán en formato cifrado (texto cifrado) en lugar de su forma original.
Debido a la estrecha relación entre SSL y TLS, uno puede sustituir al otro; sin embargo, TLS es más seguro que SSL, y TLS ha reemplazado efectivamente a SSL. Podríamos haber descartado SSL y solo escribir TLS en lugar de SSL/TLS, pero continuaremos mencionando ambos para evitar ambigüedades, ya que el término SSL sigue siendo ampliamente utilizado. En escenarios del mundo real, podemos esperar que todos los servidores modernos utilicen el protocolo TLS.
Mediante el uso de cifrado SSL/TLS, podemos actualizar protocolos existentes que operan en texto plano. Por ejemplo: podemos usar TLS para actualizar protocolos como HTTP, FTP, SMTP, POP3 e IMAP. La siguiente tabla enumera los protocolos que hemos cubierto, con sus puertos predeterminantes antes y después de la actualización con SSL/TLS. Esta lista no es exhaustiva, su propósito es ayudarnos a comprender mejor el proceso de actualización con cifrado.
Consideremos el caso de la actualización con cifrado del protocolo HTTP. Para recuperar una página web mediante HTTP, un navegador web debe realizar al menos dos pasos:
- Establecer una conexión TCP con el servidor web remoto
- Enviar una solicitud HTTP al servidor web, como solicitudes GET y POST.
El protocolo HTTPS requiere pasos adicionales para cifrar el tráfico. Estos nuevos pasos ocurren después de establecer la conexión TCP y antes de enviar la solicitud HTTP. Este paso adicional se puede inferir del modelo ISO/OSI mostrado anteriormente. HTTPS requiere al menos tres pasos:
- Establecer una conexión TCP
- Establecer una conexión SSL/TLS
- Enviar la solicitud HTTP al servidor web
Para establecer una conexión SSL/TLS, el cliente debe realizar un handshake correcto con el servidor. El handshake se basa en RFC 6101, y el proceso de establecimiento de la conexión SSL se muestra en la siguiente imagen.
Después de establecer la conexión TCP con el servidor, el cliente también necesita establecer una conexión SSL/TLS, como se muestra en la imagen anterior. Estos términos pueden parecer complejos, pero podemos simplificar los cuatro pasos anteriores en:
- El cliente envía un ClientHello al servidor para indicar sus capacidades, como los algoritmos compatibles.
- El servidor responde con un ServerHello, indicando los parámetros de conexión seleccionados. Si se requiere autenticación del servidor, este proporcionará su certificado, que es un archivo digital para identificarse, generalmente firmado por un tercero; además, podría enviar información adicional necesaria para generar la clave maestra en su mensaje ServerKeyExchange, antes de enviar ServerHelloDone para indicar que la negociación ha finalizado.
- El cliente responde con un ClientKeyExchange que contiene información adicional necesaria para generar la clave maestra; además, cambia a modo cifrado y notifica al servidor mediante un mensaje ChangeCipherSpec.
- El servidor también cambia a modo cifrado y notifica al cliente mediante un mensaje ChangeCipherSpec.
Si esto aún parece complejo, no se preocupe: solo necesitamos entender los puntos clave: el cliente puede llegar a un acuerdo sobre una clave con un servidor que tiene un certificado público, esta clave se genera de manera segura, por lo que terceros que monitoreen el canal no podrán descubrirla; la comunicación posterior entre cliente y servidor utilizará esta clave generada para el cifrado.
Por lo tanto, una vez establecido el handshake SSL/TLS, nadie que monitoree el canal de comunicación podrá acceder a las solicitudes HTTP y a los datos intercambiados.
Finalmente, para que SSL/TLS sea efectivo, especialmente al navegar por HTTPS, necesitamos confiar en certificados públicos firmados por autoridades certificadoras de confianza en nuestro sistema. En otras palabras, cuando navegamos por HTTPS en TryHackMe, nuestro navegador espera que el servidor web de TryHackMe proporcione un certificado firmado por una autoridad certificadora de confianza, como en el siguiente ejemplo; de esta manera, nuestro navegador puede asegurarse de que está comunicándose con el servidor correcto, minimizando la posibilidad de un ataque hombre en el medio (MITM).
En la imagen anterior, podemos ver la siguiente información:
- ¿A quién está dirigido el certificado? Se refiere al nombre de la empresa que utilizará este certificado.
- ¿Quién emitió el certificado? Se refiere a la autoridad certificadora que emitió este certificado.
- Período de validez del certificado, evitando el uso de certificados caducados.
No necesitamos verificar manualmente el certificado para cada sitio que visitamos; nuestro navegador web lo hace por nosotros. Dependiendo del certificado proporcionado por el servidor, el navegador web podrá asegurarse de que está comunicándose con el servidor correcto y protegerá nuestra comunicación.
Ejercicio
Protocolo Shell Seguro (SSH)
El propósito de Secure Shell (SSH) es proporcionar una forma más segura para la administración remota de sistemas; en otras palabras, permite conectarse de forma segura a otro sistema a través de la red y ejecutar comandos en el sistema remoto. La "S" en SSH significa seguro, y sus características principales se pueden resumir como:
- Puede verificar la identidad del servidor remoto;
- Los mensajes intercambiados están cifrados y solo pueden ser descifrados por el destinatario previsto;
- Ambas partes pueden detectar cualquier modificación en los mensajes.
Estos tres puntos están garantizados por la criptografía; en términos más profesionales, forman parte de la confidencialidad e integridad de los tres pilares de la seguridad, y se pueden implementar mediante el uso correcto de diferentes algoritmos criptográficos.
Para usar SSH, primero necesitas un servidor SSH y un cliente SSH; el servidor SSH escucha de manera predeterminada en el puerto 22, y el cliente SSH puede usar los siguientes métodos de autenticación:
- Nombre de usuario y contraseña
- Clave privada y clave pública (el servidor SSH debe estar configurado para reconocer la clave pública correspondiente para poder identificarla)
En versiones de Linux, macOS y Windows posteriores a 2018, puedes usar el siguiente comando para conectarte a un servidor SSH: ssh nombreusuario@MAQUINA_IP. Este comando intentará conectarse al servidor con la dirección IP MAQUINA_IP usando el nombre de usuario nombreusuario. Si el servidor SSH está escuchando en el puerto predeterminado, solicitará la contraseña correspondiente a nombreusuario.
Una vez que la autenticación es exitosa, el usuario podrá acceder al terminal del servidor de destino. En el siguiente ejemplo, se muestra el acceso a un servidor Debian Linux mediante SSH.
usuario@TryHackMe$ ssh ana@MAQUINA_IP
ana@MAQUINA_IP's password: W7fj21LP
Los programas incluidos con el sistema Debian GNU/Linux son software libre;
los términos exactos de distribución para cada programa se describen en
los archivos individuales en /usr/share/doc/*/copyright.
Debian GNU/Linux viene SIN NINGUNA GARANTÍA, en la medida permitida por la ley.
Último inicio de sesión: Mar Sep 20 13:53:17 2021
ana@debian8:~$
En el ejemplo anterior, primero ingresamos el comando ssh ana@MAQUINA_IP, y una vez que ingresamos la contraseña correcta, podemos acceder al terminal del sistema remoto. El protocolo SSH es seguro y confiable para la administración remota porque el nombre de usuario y la contraseña se envían cifrados; además, todos los comandos que ejecutamos en el sistema remoto también se enviarán a través del canal cifrado.
Tenga en cuenta que si es la primera vez que nos conectamos a este sistema, necesitamos verificar la huella digital de la clave pública del servidor SSH para evitar ataques de hombre en el medio (MITM). Como se mencionó anteriormente, un MITM ocurre cuando una parte maliciosa E se encuentra entre A y B, y se hace pasar por B para comunicarse con A, y se hace pasar por A para comunicarse con B, de modo que A y B creen que se están comunicando directamente entre sí. En el caso de SSH, generalmente no hay un tercero para verificar si la clave pública es válida, por lo que necesitamos realizar esta verificación manualmente.
Podemos usar SCP (Protocolo de Copia Segura), basado en SSH, para transferir archivos a través de la conexión SSH.
Un ejemplo de sintaxis para SCP es scp ana@MAQUINA_IP:/home/archivo.tar.gz ~, este comando copiará el archivo archivo.tar.gz del sistema remoto, ubicado en el directorio /home/, al directorio local ~, que representa el directorio del usuario actualmente conectado en la máquina local (como /home/usuario1 o /root).
Otro ejemplo de sintaxis para SCP es scp respaldo.tar.bz2 ana@MAQUINA_IP:/home/ana/, este comando copiará el archivo respaldo.tar.bz2 del sistema local al directorio /home/ana/ del sistema remoto.
usuario@TryHackMe$ scp documento.txt ana@MAQUINA_IP:/home/ana
ana@MAQUINA_IP's password:
documento.txt 100% 1997KB 70.4MB/s 00:00
FTP puede ser protegido mediante SSL/TLS, y el protocolo resultante se denomina FTPS (puerto 990); vale la pena mencionar que FTP también puede ser protegido mediante el protocolo SSH, conocido como SFTP, que por defecto escucha en el puerto 22, al igual que SSH.
Ejercicio
Ataques a Contraseñas
Hemos discutido la captura de paquetes de red y los ataques MITM (hombre en el medio), así como cómo usar TLS y SSH para mitigar estos ataques. En esta sección, presentaremos el tercer tipo de ataque: ataques a contraseñas.
Muchos protocolos requieren autenticación durante su uso. La autenticación es para demostrar quién eres, y cuando usamos protocolos como POP3, no deberíamos obtener acceso al buzón de correo antes de verificar nuestra identidad. A continuación se muestra un ejemplo relacionado con el protocolo POP3, donde usamos el nombre de usuario ana y luego proporcionamos la contraseña correcta para pasar con éxito la autenticación del servidor. Esto demuestra: la contraseña es una forma importante de autenticación.
pentester@TryHackMe$ telnet MAQUINA_IP 110
Trying MAQUINA_IP...
Connected to MAQUINA_IP.
Escape character is '^]'.
+OK MAQUINA_IP Mail Server POP3 Wed, 15 Sep 2021 11:05:34 +0300
USER ana
+OK ana
PASS W7fj21LP
+OK 1 messages (179) octets
STAT
+OK 1 179
LIST
+OK 1 messages (179) octets
1 179
.
RETR 1
+OK
From: Mail Server
To: Ana
subject: Enviando email con Telnet
Hola Ana,
Solo escribiendo para saludar!
.
QUIT
+OK MAQUINA_IP closing connection
Connection closed by foreign host.
La autenticación puede realizarse mediante una o más de las siguientes formas:
- Algo que sabes, como contraseñas y códigos PIN.
- Algo que tienes, como tarjetas SIM, tarjetas RFID y dongles USB.
- Características únicas de tu persona, como huellas dactilares e iris.
Esta sección se centrará en ataques a contraseñas, es decir, a la información de verificación que la persona sabe. Si usas protocolos como Telnet, SSH, POP3 o IMAP para acceder a servidores e intentar comunicarte, siempre necesitarás una contraseña para obtener acceso. Según las 150 millones de nombres de usuario y contraseña filtrados en la brecha de Adobe en 2013, las diez contraseñas más comunes eran:
- 123456
- 123456789
- password
- adobe123
- 12345678
- qwerty
- 1234567
- 111111
- photoshop
- 123123
Solo vemos dos contraseñas relacionadas con Adobe y sus productos, el resto son contraseñas débiles comunes; esta situación puede haber cambiado en la última década, pero 123456, 1234567, 12345678 y 123456789 siguen siendo opciones de contraseña comunes para muchos usuarios; además, muchas personas aún no son conscientes de la inseguridad de qwerty, y sigue siendo utilizada por muchas personas como contraseña.
Los ataques a contraseñas generalmente se realizan de las siguientes maneras:
- Ataque por fuerza bruta: probar todas las combinaciones posibles de caracteres, lo que crece rápidamente (crecimiento exponencial con el número de caracteres).
- Ataque por diccionario: extender el alcance del ataque probando todas las palabras válidas contenidas en un diccionario o lista de contraseñas.
- Ataque por suposición: adivinar la contraseña requiere conocer información sobre el objetivo, como el nombre de la mascota del usuario o su año de nacimiento.
Podemos centrarnos en el ataque por diccionario. Con el tiempo, los hackers han compilado numerosas listas de contraseñas, que incluyen muchas expuestas en filtraciones de datos. Un ejemplo es la lista de contraseñas expuestas en la filtración RockYou, que puedes encontrar en la AttackBox en /usr/share/wordlists/rockyou.txt. La elección de la lista de contraseñas también debe depender de tu conocimiento del objetivo específico; por ejemplo, usuarios franceses podrían usar palabras francesas como contraseñas en lugar de palabras en inglés.
Si queremos una forma automatizada de intentar usar contraseñas comunes o entradas de una lista de contraseñas para realizar ataques, podemos usar la herramienta Hydra. Hydra soporta múltiples protocolos, incluyendo FTP, POP3, IMAP, SMTP, SSH y todos los métodos relacionados con HTTP.
La sintaxis general de Hydra es hydra -l nombreusuario -P listacontrasenias servidor servicio, donde cada parámetro significa:
-l nombreusuario:-ldebe ir antes denombreusuario, indicando el nombre de inicio de sesión (login) del objetivo.-P listacontrasenias.txt:-Pva antes del archivolistacontrasenias.txt, que es un archivo de texto que contiene la lista de contraseñas que intentas probar.servidores el nombre de host o dirección IP del servidor objetivo.servicioindica el servicio contra el que intentas realizar el ataque de diccionario de contraseñas.
Algunos ejemplos específicos:
hydra -l ana -P /usr/share/wordlists/rockyou.txt MAQUINA_IP ftpusaráanacomo nombre de usuario e intentará probar todas las contarseñas en la lista en el servidor FTP;hydra -l ana -P /usr/share/wordlists/rockyou.txt ftp://MAQUINA_IPes lo mismo que el ejemplo anterior,MAQUINA_IP ftpes equivalente aftp://MAQUINA_IP;hydra -l ana -P /usr/share/wordlists/rockyou.txt MAQUINA_IP sshusaráanacomo nombre de usuario e intentará iniciar sesión en SSH con diferentes contraseñas.
También puedes agregar algunos parámetros opcionales adicionales:
-s PUERTOespecifica un puerto no predeterminado para el servicio relevante;-Vo-vVmuestra información detallada, haciendo que Hydra muestre los nombres de usuario y contraseñas que está probando. Este nivel de detalle es muy útil para ver el progreso, especialmente si no tienes confianza en la sintaxis;-t ndonde n representa el número de conexiones paralelas con el objetivo, como-t 16que significa crear 16 hilos para conectarse al objetivo;-dpara depuración, para obtener más información sobre lo que está sucediendo. La salida de depuración puede ahorrarte muchos problemas, por ejemplo, si Hydra intenta conectarse a un puerto cerrado y se agota el tiempo de espera, si se usa-dse mostrará esta información inmediatamente.
Una vez que la contraseña es crackeada con éxito, puedes usar CTRL-C para detener el proceso de ataque. En la práctica, los ataques a contraseñas suelen llevar mucho tiempo, y si quieres que Hydra actualice el progreso en tiempo real, usar las opciones detalladas o de depuración será muy útil.
En resumen, podemos usar herramientas (como Hydra combinado con una lista de contraseñas adecuada) para realizar eficazmente ataques a contraseñas en sistemas de inicio de sesión. Los métodos para mitigar estos ataques pueden ser complejos y depender de la situación específica del sistema objetivo. Algunos métodos para mitigar ataques a contraseñas son:
- Políticas de contraseñas: implementar restricciones de complejidad mínima para las contraseñas de los usuarios (como: al menos 12 caracteres, letras mayúsculas y minúsculas, símbolos, etc.).
- Bloqueo de cuentas: bloquear automáticamente una cuenta después de un número determinado de intentos de autenticación fallidos.
- Limitar intentos de autenticación: retrasar las respuestas a los intentos de inicio de sesión. Para quienes conocen la contraseña, unos segundos de retraso son tolerables, pero obstaculizan gravemente las herramientas de ataque automatizado.
- Usar CAPTCHA (prueba de Turing completamente automatizada para diferenciar computadoras y humanos): presentar un problema difícil de resolver para una máquina, mostrando un código de verificación en la interfaz gráfica de usuario (GUI) en la página de inicio de sesión.
- Exigir autenticación con certificados públicos: este método es aplicable a servicios como SSH.
- Autenticación de dos factores: exigir al usuario que proporcione un código de verificación obtenido de otra manera, como a través de correo electrónico, aplicación móvil o SMS.
- Existen métodos de verificación más complejos que pueden requerir información predefinida sobre el usuario, como verificación basada en la ubicación geográfica de la IP.
El uso de combinaciones de estos métodos es una excelente manera de mitigar los ataques a contraseñas.
Ejercicio
Resumen
Los tres tipos de ataque comunes discutidos en este artículo son:
- Ataques de sniffing
- Ataques de hombre en el medio
- Ataques a contraseñas
Para cada uno de estos, nos hemos centrado en los detalles del ataque y algunos métodos para mitigarlos.
Es útil recordar los números de puerto predeterminados de los protocolos comunes. Para mayor comodidad, los protocolos comunes se enumeran en orden alfabético en la siguiente tabla:
A pesar de la existencia de muchos protocolos seguros, Hydra sigue siendo una herramienta muy efectiva que puedes iniciar desde la terminal para intentar romper diferentes contraseñas. En la siguiente tabla, resumimos sus opciones principales: