Acceso FTP -> proteger contraseña de ingeniería inversa

Iniciado por patilanz, 16 Enero 2015, 20:27 PM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

Hola estoy haciendo un programa en la que me conecto a un servidor ftp y la contraseña esta en texto sin mas. Como protejo la contraseña o si la codifico ?

Saludos

Almamu

#1
Buenos días patilanz,

Puedes ofuscar la contraseña de FTP pero no ocultarla por completo. Las soluciones más rápidas pasan por moldear la cadena, por ejemplo pasarla a base64, invertir la cadena, alterar el orden de los caracteres de acuerdo a un patrón, básicamente lo que se te ocurra. Otra opción sería no almacenar la contraseña en el ejecutable y solicitarla por https por ejemplo a un servidor (añadiendo comprobaciones de certificados, de forma que no puedan poner un proxy "man in the middle"), así además la contraseña pasaría cifrada a tu programa, que luego podría hacer conexiones SFTP para evitar que esta contraseña sea visible por un sniffer.

Otra opción es combinar ambas técnicas, de forma que en memoria solo almacenas la contraseña ofuscada y cuando la vayas a usar la deofuscas, la usas y destruyes la contraseña deofuscada, manteniendo la original, ofuscada en memoria, por lo que requeriría de tecnicas más avanzadas de ingeniería inversa para poder dar con ella.

Ten en cuenta que es posible hacerlo lo más dificil que quieras para el ingeniero inverso, pero nunca podrás evitar que acabe descifrando como obtienes la contraseña y la averigüe, pero para ese entonces tu ya podrías haber cambiado la contraseña (de hecho con el metodo de peticion https sería bastante sencillo cambiar la contraseña periódicamente).

Espero que te haya ayudado,
Almamu.

MeCraniDOS

Como dice Almamu, no puedes ocultar la contraseña, hagas lo que hagas si esta en el exe se puede sacar, será facil o dificil, pero al final se saca.

De todas formas, si el programa es para ti, da igual como lo pongas  :silbar:

Un saludo
"La física es el sistema operativo del Universo"
     -- Steven R Garman

patilanz

#3
Si codifico la clave luego para pasar la por el ftp tengo que descifrar la y viaja sin codificar. Quiero implemente https pero no estoy seguro como. Tengo el ftp en un servidor de hostinger gratuito y he leído que con curl se puede con php, es lo que quiero. En plan conectarme al https en un archivo php que me va proporcionar la clave para enviarla al exe que se conectara al ftp. Así ?

Como se hace el https ?

@Edit: Con OpenSLL ?

Almamu

Cita de: patilanz en 16 Enero 2015, 22:27 PM
Si codifico la clave luego para pasar la por el ftp tengo que descifrar la y viaja sin codificar. Quiero implemente https pero no estoy seguro como. Tengo el ftp en un servidor de hostinger gratuito y he leído que con curl se puede con php, es lo que quiero. En plan conectarme al https en un archivo php que me va proporcionar la clave para enviarla al exe que se conectara al ftp. Así ?

Como se hace el https ?

@Edit: Con OpenSLL ?

Buenas noches,

Con usar curl es suficiente para el https, no es necesario implementar el protocolo http desde cero con OPENSSL. FTP tiene una variante (SFTP) que hace que los datos pasen cifrados a través de la conexión. De esa forma te evitas que se vea la contraseña.

patilanz

#5
Ahora veo lo de SFTP pero ahora mismo estaba probando con openssl y se me ocurrió porque no generar una clave, que ya tengo privada y publica, luego cifrar la contraseña con esa clave desde php con openssl_public_encrypt y luego en c++ desencriptarla con alguna librería de ssl teniendo la clave privada guardada en el exe ?

@Edit: He visto que sftp no esta disponible en hostinger así que no creo que sera una alternativa.

cpu2

Antes de enviar nada cifralo y ya, cual es el problema?

Citarpero ahora mismo estaba probando con openssl y se me ocurrió porque no generar una clave, que ya tengo privada y publica, luego cifrar la contraseña con esa clave desde php con openssl_public_encrypt y luego en c++ desencriptarla con alguna librería de ssl teniendo la clave privada guardada en el exe ?

Pero donde se a visto eso, la clave privada no tiene por que estar en el paquete. Para no complicarte la vida si el server es de tu propiedad o de un amigo podeis poneros de acuerdo con la clave y ya.

Si no tienes claves de uso publico.

Citar@Edit: He visto que sftp no esta disponible en hostinger así que no creo que sera una alternativa.

SFTP es una combinacion estre FTP y SSH, si no me equivoco, y esas dos si que las tendras disponibles, supongo.

Un saludo.

Almamu

Cita de: patilanz en 16 Enero 2015, 23:58 PM
Ahora veo lo de SFTP pero ahora mismo estaba probando con openssl y se me ocurrió porque no generar una clave, que ya tengo privada y publica, luego cifrar la contraseña con esa clave desde php con openssl_public_encrypt y luego en c++ desencriptarla con alguna librería de ssl teniendo la clave privada guardada en el exe ?

@Edit: He visto que sftp no esta disponible en hostinger así que no creo que sera una alternativa.

Sin soporte SFTP no podrás evitar que la contraseña pase sin cifrar por la red, puesto que a la hora de conectar tendrás que enviarla de forma insegura. Por otro lado, la opción "sencilla" para obtener la contraseña encriptadaa través de https sería:


  • Incrustar una clave pública en el código de tu programa, ofuscándola de alguna forma como en base64, invertiendo la cadena o alterando su orden.
  • Hacer una solicitud a una web PHP que te proporcione la clave cifrada (tendrás que cifrar la contraseña con la clave privada para que luego tu aplicación pueda desencriptarla usando la clave pública)
  • De-ofuscar la clave publica incrustada en tu programa y usarla para descifrar la contraseña que has recibido del web-server (funcionamiento básico de SSL, clave publica descifra lo que cifra la clave privada, y la clave privada descifra lo que cifra la clave pública, más info aquí: http://es.wikipedia.org/wiki/Transport_Layer_Security )
  • Iniciar autenticación FTP (insegura) y relizar las operaciones en cuestión.

Obviamente el problema aquí está en que al conectar al FTP no podrás cifrar la contraseña de ninguna forma puesto que FTP es un protocolo de texto plano simple, como lo es HTTP. La opción "mas segura" sería poder cambiar la contraseña cada vez que se solicita al script PHP y que el servidor FTP la acepte como válida, de forma que harías el trabajo más dificil al RE puesto que tendría que hacer parches en tiempo de ejecución de la aplicación para poder interceptar la contraseña y conectar libremente al FTP.