Como de costumbre en The Hacker Way, es una formación 100% práctica y didáctica, repleta de ejemplos reales y ejercicios. A lo largo del contenido aprenderás a:
👉 Mi recomendación es que aproveches esta oferta antes de que finalice.
Ah, además, en el precio están incluidas todas las actualizaciones que se irán publicando, las cuales incluirán ejercicios prácticos, uso de herramientas y técnicas modernas.
La formación está compuesta por vídeos y recursos descargables.
En total, tendrás acceso a aproximadamente 10 horas de vídeo, a las que estimamos que deberás dedicarle aproximadamente 40 horas para realizar las prácticas y ejemplos que se enseñan en las lecciones.
Además de este curso de OSINT para analistas e investigadores, también tenéis disponible el curso de Técnicas de Investigación con OSINT si buscas algo más introductorio y no tan avanzado sobre este tema.
Domina la seguridad SSH con estrategias inspiradas en épicas batallas navales históricas.
SSH Hardening and Offensive Mastery: Guía Completa de Seguridad SSH
La seguridad SSH es esencial para proteger servidores y sistemas remotos frente a accesos no autorizados. Este artículo aborda desde conceptos básicos de hardening SSH hasta técnicas ofensivas para evaluar y fortalecer la seguridad de tus conexiones. Descubre las mejores prácticas para asegurar tu entorno y dominar herramientas para pruebas de penetración.
¿Qué es SSH y por qué es importante asegurar su acceso?
SSH (Secure Shell) es un protocolo que permite conexiones seguras y cifradas entre un cliente y un servidor. Se utiliza principalmente para administrar servidores de forma remota, evitando que atacantes puedan interceptar credenciales o comandos.
La exposición de un servicio SSH sin protección puede suponer un riesgo grave, ya que los atacantes suelen buscar vulnerabilidades para obtener acceso privilegiado. Por eso, es crucial practicar el ssh hardening para proteger tus sistemas.
Conceptos clave para el hardening SSH
El ssh hardening implica aplicar configuraciones y medidas que limiten los riesgos y dificulten el acceso no autorizado. Aquí algunas de las técnicas más efectivas:
1. Cambiar el puerto SSH por defecto
El puerto por defecto es el 22, y cambiarlo ayuda a evitar ataques automatizados que escanean esta puerta comúnmente.
«`bash
Editar el archivo /etc/ssh/sshd_config
Port 2222
«`
2. Deshabilitar el acceso root directo
Permitir acceso root directo es un gran riesgo. Mejor iniciar sesión con un usuario normal y usar `sudo` para privilegios.
«`bash
PermitRootLogin no
«`
3. Uso obligatorio de autenticación por clave pública
Eliminar el acceso mediante contraseñas y forzar el uso de llaves SSH mejora mucho la seguridad.
«`bash
PasswordAuthentication no
PubkeyAuthentication yes
«`
4. Limitar el acceso a usuarios específicos
Solo ciertos usuarios deben poder iniciar sesión por SSH.
«`bash
AllowUsers usuario1 usuario2
«`
5. Configurar el firewall para permitir solo conexiones SSH desde rangos confiables
Filtra IPs para minimizar posibles atacantes.
«`bash
ufw allow from 192.168.1.0/24 to any port 2222
«`
Técnicas ofensivas para pruebas de seguridad SSH
Una buena seguridad implica también entender cómo atacan los ciberdelincuentes. Herramientas y técnicas ofensivas permiten evaluar la robustez del sistema.
Fuerza bruta y diccionarios
Ataques comunes que prueban múltiples combinaciones de usuario y contraseña. Herramientas como Hydra o Medusa son habituales para estas pruebas.
Escaneo de puertos
Escanear qué puertos SSH están activos usando nmap para identificar servidores vulnerables o mal configurados.
«`bash
nmap -p 22,2222 -sV IP_DESTINO
«`
Explotación de vulnerabilidades
Buscar versiones antiguas del servicio SSH que puedan tener bugs conocidos. Herramientas como Metasploit pueden automatizar estas tareas.
Ingeniería social y phishing
Aunque no es técnico, no debe subestimarse la capacidad de un atacante para engañar a usuarios y obtener credenciales.
Herramientas recomendadas para hardening y auditoría SSH
– OpenSSH: Implementación estándar para configurar servidores SSH.
– Fail2ban: Bloquea IPs con intentos de acceso fallidos repetidos.
– ssh-audit: Analiza configuraciones SSH en busca de debilidades.
– Lynis: Auditoría completa de seguridad de sistemas, incluyendo SSH.
– John the Ripper: Para pruebas de cracking de contraseñas de llaves SSH.
Buenas prácticas adicionales para asegurar SSH
– Mantén siempre actualizado el software del servidor.
– Realiza auditorías periódicas de accesos y configuraciones.
– Utiliza autenticación de dos factores (2FA) en conexiones SSH.
– Implementa un sistema de registro y alerta ante accesos sospechosos.
– Limita el tiempo de sesiones o desconecta automáticamente tras inactividad.
Conclusión
El ssh hardening es una parte fundamental dentro de cualquier estrategia de ciberseguridad. Combinar configuraciones seguras con pruebas ofensivas controladas permite proteger eficazmente servidores y mantener confiables las conexiones remotas. La implementación de estas recomendaciones y el uso de herramientas especializadas te acercarán a la ofensive mastery en seguridad SSH, garantizando la integridad y confidencialidad de tus sistemas.
—
Para profundizar en seguridad y ofensiva SSH, sigue explorando nuevas técnicas y mantente siempre actualizado con las últimas tendencias en ciberseguridad. Tu servidor y su información lo agradecerán.
Un arcoíris vibrante ilumina las montañas y bosques bajo un cielo despejado.
En esta ocasión os vamos a enseñar cómo crear Rainbow Tables con Python para cualquier algoritmo de hashing que esté soportado por la librería hashlib.
Pero, por si alguno aún no lo sabe…
¿Qué son las Rainbow Tables?
Se conoce como Rainbow Tables a tablas de hashes donde podemos encontrar equivalencias de contraseñas hasheadas. Realmente, esto recibe el nombre de Complete Lookup Tables.
Las Rainbow Tables son tablas con una función muy similar, pero que se usan principalmente para las contraseñas largas, ya que el coste computacional de encontrar esas contraseñas mediante ataques de fuerza bruta o ataques de diccionario puede ser demasiado elevado.
Por eso, en esta publicación, usaré el término Rainbow Tables como sinónimo de Complete Lookup Tables.
Es decir, por poner un ejemplo, si usamos la función de hashing MD5 para cifrar la contraseña «password», obtendremos el hash «5f4dcc3b5aa765d61d8327deb882cf99».
Las funciones de hashing, como muchos sabréis, no son reversibles, por lo que no es como convertir una cadena a base64, que se puede deshacer con una simple función.
Para descubrir la equivalencia de un hash con una contraseña, hemos de comparar el hash que tenemos con el hash generado a partir de esa contraseña. Y ahí es donde entran las Rainbow Tables.
Además, en algunas funciones de hashing se puede añadir lo que se conoce como «salt», que no es otra cosa que una palabra de cifrado que ayuda a dificultar aún más la posibilidad de descifrar la contraseña.
En este caso nos centraremos en hashes sin salt, es decir, hashes que han sido creados a partir de la contraseña directamente, y con los que se ha creado una tabla para un diccionario de palabras concreto.
En nuestro ejemplo usaremos el algoritmo MD5 y el diccionario rockyou.txt, de sobras conocido por la gran mayoría de hackers. Cabe decir que se puede editar el código que encontraréis a continuación para elegir otro algoritmo, y el diccionario a utilizar puede ser cualquier archivo de texto plano «txt» con una lista de palabras.
Es momento de enseñaros cómo crear esas rainbow tables con python y desgranar el algoritmo de la herramienta en cuestión, creada por DamonCDB y la cual podéis encontrar en su GitHub.
Rainbow Tables con Python línea a línea
Lo primero que debemos hacer es importar la librería hashlib que es la que contiene las distintas funciones de hashing que utilizaremos para crear las rainbow tables con Python. Para ello, la primera línea del código debe ser la siguiente:
import hashlib
De esta forma tenemos disponibles las funciones incluidas en hashlib que nos ayudarán a crear las rainbow tables según la función de hashing que elijamos (MD5, SHA-256, etc.)
A continuación hacemos que el programa nos pida el hash que queremos buscar en la tabla:
hash = input("Introduce el hash a buscar en el diccionario: ").strip()
Con esta línea de código nos aseguramos de que se elimine cualquier espacio al final o al principio del hash, por si lo copiamos con algún espacio y no nos damos cuenta (algo que puede pasarnos si vamos demasiado deprisa).
Después hemos de indicarle a la herramienta la ruta del diccionario de contraseñas que queremos usar. Para ello usamos la siguiente línea de código:
dict_path = input("Introduce la ruta del archivo del diccionario de contrasenyas: ").strip()
La herramienta ya está preparada para pedirnos el hash y el diccionario que queremos usar, pero no es suficiente para que lea el contenido del diccionario. Para ello le decimos a la herramienta que lea la lista de palabras:
f = open(dict_path, "r", encoding='latin-1')
Una vez abierto al archivo del diccionario en modo lectura e introducido el hash, lo que queda es que la herramienta compruebe si dicho hash pertenece a alguna de las palabras del diccionario que le hemos indicado.
Para ello lo que haremos es, línea por línea, crear el hash de cada palabra con la función seleccionada (en nuestro caso MD5, pero como ya se ha dicho, se puede cambiar el código para que use otra función de hash incluida en hashlib).
Después de eso se comparará el hash creado con el introducido por el usuario, y si coinciden, nos devolverá la contraseña a la que pertenece dicho hash y la herramienta se cerrará. En caso de no coincidir, pasará a la siguiente línea, y así continuamente hasta llegar a la última. Si la herramienta no devuelve un resultado, significa que no ha encontrado ninguna palabra cuya conversión con esa función coincida con el hash introducido.
En el supuesto caso en que el archivo que le hemos introducido como ruta del diccionario no exista, nos avisará de que no puede abrir el archivo indicado.
Todo esto se hará mediante una sentencia try – except de Python:
try:
for line in f:
password = line.strip()
hash_md5 = hashlib.md5(password.encode('utf-8')).hexdigest()
if hash == hash_md5:
print("El hash " + hash + " pertenece al password " + password)
break
except FileNotFoundError:
print("No se pudo abrir el archivo. Verifica la ruta.")
Y eso es todo. Como veis es bastante sencillo crear una herramienta de este tipo para tener nuestras propias rainbow tables con Python.
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional
Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.