Bienvenido a cursohacker.es. Puedes acceder a todo el contenido líbremente pero si deseas poder crear tus propios temas en el foro y que tus respuestas y comentarios se publiquen de forma automática regístrate como alumno aquí

Securizar FTP windows, linux y mac

Tras los estudios que llevamos ya hechos sobre servidores FTP y su funcionamiento llega el momento de verlos desde el punto de vista de la seguridad informática. Todas las publicaciones anteriores con conceptos previos sobre servidores FTP eran necesarias para poder comprender desde el punto de vista hacker cómo se ha de securizar un servidor FTP correctamente para disminuir al máximo las posibilidades de ser hackeados.

Evitar ataques MITM (Man In The Middle) FTP

Los ataques de tipo MITM (Man In The Middle) en español, "hombre en medio", son un tipo de ataque que buscan poder interceptar el tráfico que tenemos entre nosotros y nuestro servidor, normalmente para poder conseguir las claves de acceso. Se pueden realizar de 2 modos:

  1. Man In The Middle interceptando la conexión. En esta situación el atacante ha conseguido hacer que los paquetes viajen por un router o equipo que el controla. Rocordad, por esquemas anteriores, en los que mostrábamos cómo al conectarnos a internet toda nuestra comunicación pasaba por el router, si el atacante puede acceder ahí y conectar un sniffer (lo cual veremos más adelante) será capaz de ver el tráfico entre nosotros y nuestro servidor, por consiguiente podrá ver nuestras claves y todo lo que hacemos.
     
  2. Man In The Middle alterando el host. Aquí la situación es diferente, el atacante nos hará creer que nos estamos conectando a nuestro servidor cuando en realidad nos estamos conectando a un host que el controla. Esto se puede hacer con diversas técnias, una de las mas comunes es DNS Spoofing (la veremos más adelante). En esta situación el ataque puede deribar a su vez en otros 2 tipos de ataque. En el primero y mas sencillo, cuando nos intentemos autentificar (escribiendo nuestro usuario y clave) lo que estaremos haciendo será dárselas al atacante, ya que estamos intentando autentificarnos en SU servidor y no en el nuestro. En el segundo tipo de ataque y mas complejo el atacante redirigirá el tráfico al servidor original de modo que será capaz de ver todo nuestro tráfico tal y como lo vería si hubiera hecho un MiTM interceptado la conexión.

Ante estas amenzas tenemos un grupo de herramientas y precauciones a tomar que nos ayudarán a paliar en gran medida ambos ataques. La primera de ellas es utilizar de forma obligatoria FTPS, el protocolo seguro de FTP. De esta forma todo nuestro tráfico (usuarios, claves y comandos) viajarán de forma cifrada por la red. Con esta primera medida evitamos el primer tipo de MiTM, ya que si nuestro tráfico pasa por un router o equipo el cual ha sido sometido por un hacker éste verá el tráfico cifrado y no será capaz de ver la información sensible que estamos transmitiendo.

Alquien podría pensar que con esto ya es suficiente, pues al estar cifrado el tráfico queda protegido frente a terceros. Pero la realidad es que esto no es así y no porque el hacker pueda romper el cifrado (que también podría ser, aunque no es lo mas común) sino porque el hacker ha podido engañarnos y hacernos creer que nos estamos conectando a nuestro servidor cuando en realidad nos estamos conectando a uno suyo (MiTM alterando el host). Y en ese escenario nuestro tráfico estaría cifrado, si, pero sería un cifrando entre nosotros y SU servidor. Así que al llegar el tráfico a su servidor el hacker lo vería sin problema alguno. ¿Cómo evitamos esto? Aquí la segunda medida que WINSCP ya toma por nosotros por defecto, los certificados de seguridad.

Los certificados de seguridad y su fución para evitar MITM

La utilización de certificados se seguridad para evitar el segundo tipo de ataques MITM es crucial. La función de estos certificados es asegurar que realmente vamos a conectados a quien realmente queremos conectarnos y no a otra entidad. En el proceso de autentificación de usuarios entre un servidor y un cliente, lo primero es intercambiar sus firmas y llaves públicas, con la llave pública que nos da el servidor nsotros ciframos el tráfico de tal forma que solo el servidor puede descifrarlo con su llave privada, por otro lado nosotros damos al servidor nuestra llave pública para que el cifre los mensajes con nuestra llave pública y solo nosotros seamos capaces de descifrarlo con nuestra llave privada.  Mas adelante veremos mas a fondo en criptografía asimétrica cómo trabajar en profundidad con los certificados de seguridad. De momento quedarmos con el concepto de que en un sistema de criptografía asimétrica, cada parte tiene 2 llaves una pública y otra privada, la pública es la que se difunde para que todo el mundo la tenga, y todo lo que se cifre con la llave pública sólamente será descifrable por la llave privada.

La primera vez que nosotros nos conectamos a un servidor FTP con el modo seguro activado FTPS, WinSCP va a recibir la llave pública del servidor y nos la va a mostrar. Nos va a decir que NO LA CONOCE, y nos va a preguntar si realmente estamos seguros de que es el servidor al que queremos conectar. Así que la primera vez que os váis a conectar al servidor debéis estar seguros de que lo hacéis en unas condiciones de seguridad aceptables, o pedir al administrador que os de por correo electrónico la llave pública del servidor y no memorizarla en WinSCP hasta que verifiquéis que la llave que da el servidor FTP es la misma que os ha dado el administrador. En el caso de que seamos nosotros el administrado del servidor vamos a aprender a configurar nuestro servidor FTP (Filezilla) para trabajar en el modo seguro FTPS.

Configuración de certificados de seguridad SSL/TLS en Filezilla

En este apartado vamos a aprender a configurar nuestro servidor Filezilla para que sea capaz de trabajar con conexiones seguras SSL y así evitar en gran medida los ataques de tipo MiTM. El primera paso es pulsar sobre el icono de configuración, diriginos al apartado de SSL/TLS Settings, habilitar FTPS y generar los certificados:
Configuración habilitar SSL/TLS Filezilla server

Cuando pulsamos sobre el botón "Generate new certificate..." se nos va a abrir un diálogo en el que vamos a poder personalizar nuestro certificado. El primero punto es la robustez de la clave que podrá ser desde 1024 bits hasta 4096. Siendo 1024 menos robusta y 4096 la más fuerte. La ventaja de escoger un cifrado mas fuerte es que las posiblidadesde de crackeo baján de forma exponencial, como desventaja nuestro PC tendrá que realizar mas cálculos para cifrar y descifrar el tráfico, así que haremos que tanto el cliente como el servidor tengan que trabajar más. Nosotros hemos elegido 4096. Los siguientes datos hacen referencia a lo que querías que el cliente véa cuando le entreguéis el certificado:
Crear certificado seguridad 4096 bits SSL/TLS Filezilla

Al pulsar el boton "Generate certificate" WinSCP tardará un poco en generarlo, ya que ha de generar una clave aleatória, tarda unos segundos en los que puede parecer que se ha quedado pillado, pero finalmente os mostrará un mensaje en el que os confirmará que se ha generado correctamente. Ya tenemos generado nuestro certificado de seguridad y estamos en posición de avanzar al siguiente paso.

Configurar WinSCP para trabajar con SSL/TLS

Ahora que tenemos un servidor FTP securizado, tenemos que configurar nuestro cliente FTP WinSCP para que sea capaz de trabajar en el modo seguro de dicho servidor. Para ello, abrimos WinSCP, y editamos (o creamos si no la guardásteis) la sesión que teníamos de haber trabajado previamente. Cambiamos del puerto 21 al puerto 990 (que es el de SSL) y por defecto WinSCP nos dirá que ese puerto habilita por defecto la encriptación SSL/TLS que buscamos:
Configurar sesión SSL/TLS WinSCP

Guardamos nuestra sesión y pulsamos sobre conectar (Login). Entonces veremos cómo WinSCP nos muestra el certificado que hemos creado unos pasos antes en Filezilla:
Validación certificado seguridad SSL/TLS WinSCP

WinSCP nos muestra todos los datos de nuestro certificado y nos pregunta si realmente queremos guardarlo. Este punto es crítico. Solo debemos hacerlo si estamos totalmente seguros de que el certificado pertenece al servidor que queremos conectarnos, podríamos para ello copiar la clave (con el botón copy Key) y compararla con la que nos ha dado el administrador por correo. Estando seguros de esto, pulsamos sobre "Yes" para indicar que el certificado es correcto y que queremos conectarnos. WinSCP lo guardará y en sucesivas conexiones comprobará de forma automática que siempre que nos queramos conectar a este servidor éste nos entregue siempre el mismo certificado, ya que el certificado es algo que no cambia. Si cambia es que no nos estamos conectando al servidor que creemos estar conectándonos (o que el administrador ha cambiado el certificado, en cuyo caso debería avisarnos). 

Desde el vamos a ver qué ocurre si generamos otro certificado y pedimos a WinSCP que se conecte; WinSCP se va a dar cuenta de que el certificado no concuerda con el que tiene guardado y en consecuencia mostrará lo siguiente:
Certificado desconocido WinSCP, FTP TLS/SSL
Nos adevertirá de nuevo que no conoce el certificado, y no nos dejará conectar hasta que o bien aceptemos el nuevo certificado como váido o bien solucionemos los problemas por los cuales no nos estamos conectando al servidor que queríamos conectarnos realmente.

Por norma general, una vez que hemos guardado un certificado de seguridad en nuestra biblioteca de certificados de WinSCP no debemos aceptar un nuevo certificado de un servidor que ya teníamos almacenado, si esto ocurre debemos contactar con el administrador del servidor y verificar que ha sido el quien por algún motivo se ha visto obligado a cambiar el certificado. Los motivos por los cuales un administrador de servidores puede cambiar un certificado son varios; desde haber perdido sus certificados hasta que el servidor haya sido hackeado y el administrador considere que le han podido robar sus certificados, con lo cual debe generar otros para asegurar la integridad del sistema.

Comentarios

Vamos a empezar a utilizar ssl en todos nuestros servidores FTP de nuestra empresa.

cuando intento generar el certificado me sale el aviso "failed to open output file"

Puede ser que si estás bajo Windows 7 o Windows 8 necesites ejecutar Filezilla con permisos de administrador para que tenga permisos de escritura en el directorio. Pruébalo y nos cuentas si consigues así solucionar tu problema.

Pues, antes de leer tu respuesta hice mas o menos lo q dices instale de nuevo el filezilla y le di permisos de administrador y luego en cmd hice un ejercicio y no escribi localhost ni 127.0.0.1 si no q le coloque ftp y mi ip privada y ya todo empezo a funcionar muy bien.
Gracias y q bueno q respondas tan pronto.

Despues de cambiar el puerto en WinSCP le doy a "Loggin" y me da error.

Connection failed.

No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión.
Connection failed.

Hola Aitor.

Antes de configurar los certificados de seguridad para sesiones TLS te dejaba hacer la conexión o también te la denegaba?. Te lo pregunto porque lo primero que debemos hacer es acotar el problema para ver si esque está denegado la IP, el usuario/cotraseña o los certificados. Cuando sepamos en que parte se está bloqueando la conexión podremos saber porqué lo está haciendo y cómo solucionarlo.

Saludos.

Ya configure filezilla ya me creo mi certificado hasta ahi todo va bien luego ejecuto como administrador einscp y login  la primero ves si me conecta y me vuelve a salir la ventana que si continuo con los sertificados presiono yes y me sale no puede estableser conecion IP agradeceria tu ayuda lo mas proto posible 

Hola Stalin.

Trata de exponer tu caso de forma más detallada en nuestro foro para que podamos ver en un hilo toda tu configuración y ayudarte a solucionar el problema.

Saludos.

Hola, ante todo muchas gracias por el curso. Espero poder seguir avanzando con vosotros.

El problema que me surge es que cuando renicio el ordenador y vuelvo para practicar, Filezilla no me "guarda" las opciones de SSL/TLS. Claro que de esto no me doy cuenta hasta que trato de entrar con el certificado que cree la ultima vez que entre. Al configurar de nuevo el SSL con un nuevo certificado que reemplaza al anterior intento entrar y me da error. En esta segunda ocasion es el password, que pese a ser el mismo , me dice que es incorrecto... total que vuelvo a editar el usuario en el filezilla y el usuario del WinSp y todo perfecto. Con esto quiero decir que para hacer pruebas es perfecto por que no me cuesta nada hacerlo para cada ocasion, pero seguro que algo estoy haciendo mal y por algun motivo que desconozco no se queda guardada la configuracion de seguridad ni las passwords tras el reinicio de la maquina... no de la aplicacion.  

Pienso que es posible que el error no tenga nada que ver con las aplicaciones, si no con mi maquina, pero me extrañaria mucho... 

Si estás trabajando en versiones de Windows 7 o Windows 8 trata de ejecutar filezilla y Winscp como administrador. Ya que si no lo haces no pueden guardar los cambios. Este puede ser el motivo por el cual al reiniciar te das cuenta de que se han perdido todos los cambios.

Saludos.

Gracias por contestar y ademas hacerlo tan rapido.

Se me olvido mencionar que ambos programas los lanzo como administrador. En cualquier caso he vuelto a lanzarlos como administrador, luego modificado las opciones. He salido. He reniciado el ordenador. He vuelto a ejecutar ambas aplicaciones como administrador y al tratar de conectar con el usuario creado me da el siguiente error:

No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión.
Connection failed.

Despues de ver este error vuelvo al Filezilla, me voy a las opciones de SSL/TSL y veo que estan desmarcados los checkbox. Es decir que el servidor incia de nuevo como si esa ultima sesion en la que configure el certificado nunca hubiese pasado.... pero el certificado esta ahi !! de hecho lo puedo "cargar" de nuevo. Total que ya solo me queda volver a intentar acceder con el WinSP, el problema es que esta vez me dice que el password es incorrecto. Total que voy a las opciones como me habeis enseñado, lo modifico y entro sin mas problemas y todo va genial una vez dentro :D.

En cualquier caso si no le veis una solucion facil, lo dejamos correr, ya que es un problema que hoy por hoy no lo es y cuesta muy poco hacerlo cada vez que entro en el filezilla.

Gracias por vuestro tiempo y no publiqueis esta respuesta si no quereis, ya que poco aporta y no quiero monopolizar el tema :D 

 

Gracias por vuestro trabajo, continuo con el curso !

Buenas, a mi me a surgido una duda. Si yo fuera el administrador del servidor como o donde podria ver el certificado para mandarselo al cliente y que lo compare.

Gracias

Los certificados se guardan en la carpeta de instalación del servidor FTP. Aunque la forma más sencilla es que la primera conexión la hagáis en un canal seguro y el propio WinSCP del cliente guarde el certificado.

 Todo me va perfecto, pero no me llega la contraseña al correo electronico del certificado creado, a que se puede deber esto? Saludos.

Este tipo de certificados no envían las contraseñas por correo. Es criptografía asimétrica. Esto lo veremos más a fondo en lecciones más avanzadas.

Bueno despues de crear mi certificado proceso a este paso 

"Configurar WinSCP para trabajar con SSL/TLS"

realizo esto y al momento te prosionar login me sale un erro que dice lo siguiente:

"Using TLSv1.2, cipher TLSv1/SSLv3: AES256-GCM-SHA384, 4096 bit RSA
Connection failed.
This user is not allowed to connect from this IP"

 

NO SE DONDE ESTA MI ERROR EH ECHO TODO TAL CUAL POR FAVOR LO MAS RAPIDO POSIBLE GRACIAS

El error te lo está indicado precisamente aquí: "This user is not allowed to connect from this IP" En la lista de IPs permitidas no estás autorizando la IP de tu ordenador. Tienes 2 opciones la primera es revisar tu IP local y autorizarla, la segunda es deshabilitar la restricción de acceso por IP.

Saludos.

Hola, tengo la duda de ¿si 'a' consigue la llave privada de 'b' como le causa perjuicio y en ese caso donde se guarda una llave privada para usarla arbitrariamente con contenido encriptado de 'b'?  (Me refiero a parte del MitM).
Gracias y buen curso,, ameno, para repasar y aprender cosas nuevas.

En este caso solo se utiliza el certificado de seguridad para que el cliente tenga la certeza de que se está conectando al servidor que quiere y no ha un intermediario. En otros sistemas si basta con el certificado de seguridad para autentificarse.

Así que en caso de que alguien consiguiera la llave privada del servidor lo único que podría hacer es crear un servidor "falso", establecer el certificado de seguridad del servidor verdadero y hacer el ataque MiTM. 

Para prevenir estos riesgos la llave privada suele guardarse de forma cifrada de modo que si alguien la obtiene no sea capaz de utilizarla.

Saludos.

ya que me sale el siguiente comentario:

TLS connect: error in SSLv2/v3 read server hello A
Can't establish TLS connection
Disconnected from server
Connection failed.

les agradezco de antemano su ayuda

Parece ser que estás tratando de conectar a un servidor FTP indicando al cliente que utilice SSL cuando el servidor FTP no soporta SSL. Estás tratando de acceder al puerto 21? Si es así asegurate en el filezilla que tienes desactivada la opción SSL.

Suerte.

El problema que te da es al generar el certificado en Filezilla. Cuando lo estas creando, en el último apartado:
Save key and certificated to this file,
asegurate que lo estas guardando donde tienes instalado el FileZilla server.
Yo tenia el problema que la carpeta por defecto donde me lo guardaba era en "Mis documentos", la cambie por la de FileZilla Server que esta en C:\Program Files (x86)\FileZilla Server.
Espero que os sirva.

Llevaba mucho mirando este error , simplemente gracias.

Al ejecutar WinSCP con encriptación me aparece el siguiente error:

TLS connect: error in SSLv2/v3 read server hello A
No pude establecer la conexión SSL
Desconectado del servidor
Error de conexión.

Sin encriptar la conexión no tiene ningún problema, el certificado se genera correctamente y ambos programas se están ejecutando en modo administrador.

Primero, gracias por tu post es de gran utilidad. Hasta hoy he seguido tu post y me ha ido muy bien pero esta tarde he intentado entrar al server y me ha dicho esto:

Connecting to server localhost:14147...
Error, could not connect to server
Trying to reconnect in 5 seconds

No he tocado nada desde la sesion anterior. Puede ser que tenga algo que ver con mi direccion ip privada ya que ayer era 192.168.1.42 y hoy es 192.168.1.43?

Gracias

Si te ha cambiado la dirección IP del ordenador donde tienes instalado el servidor FTP en el cliente de conexión tienes que indicar la nueva dirección IP, ya que si indicas la vieja el cliente no será capaz de encontrar al servidor FTP.

Saludos.

tengo un problema, realizo todos los pasos para generar  el certificado pero me manda el siguiente error: ==>certificate could not be generated.reason:failed to initialize ssl library <== que tengo que hacer hay?

Hola.

Realizo los pasos para generar el certificado pero me manda el siguiente error:

certificate could not be generated.
reason:failed to initialize ssl library

Ayuda por favor.

Al configurar todos los ajustes del server, cuando acabo y confirmo, me salta esto : 

Error, could not connect to server
Trying to reconnect in 5 seconds

Podrian ayudarme?? 

Gracias, pd : Gran blog :D

Si te ha sido de utilidad Compárteme