Protegiendo la contraseña en el código

1

Estoy escribiendo un programa en Processing (que básicamente es java), que (entre otras cosas) descarga archivos desde un servidor FTP. Para conectarse al servidor, el programa necesita la contraseña de FTP correcta, que actualmente se guarda como texto sin formato en una cadena en el código fuente. El programa debería entregarse a otras personas más adelante, así que supongo que esta no es una forma muy segura de almacenar la contraseña. ¿Cuál sería una buena manera de proteger la contraseña?

    
pregunta BigAl 19.08.2014 - 12:29
fuente

4 respuestas

5

Creo que tu esfuerzo se rompe por diseño. Desea instalar un programa en la máquina de alguien que se conecta a un servidor FTP mediante una contraseña, pero no desea que el usuario conozca la contraseña. No importa lo que haga para protegerlo, el usuario puede interceptar fácilmente el tráfico de red proveniente del programa. Por ejemplo, el usuario podría configurar un proxy y simplemente descargar todo lo que se ejecuta a través de él, la contraseña estará en algún lugar de este volcado. Cifrar la contraseña en el lado del usuario y descifrarla en el servidor solo retrasará el problema, el usuario simplemente enviará la contraseña cifrada.

Prefiero configurar una cuenta FTP adicional con un directorio adicional solo para este usuario. Allí no puede dañar nada, porque todo lo que ve es generado por sus propias acciones.

edit Es cierto que con FTPS el usuario no podría extraer la contraseña. Pero, ¿quién está configurando la conexión encriptada en primer lugar? La máquina del usuario. Por lo tanto, el certificado se envía al servidor FTP antes de que se realice el cifrado, que puede interceptarse nuevamente y usarse para descifrar toda la comunicación.

    
respondido por el Philipp Murry 19.08.2014 - 15:26
fuente
0

Almacenar la contraseña en el código fuente es el peor enfoque. Pero el enfoque correcto no es fácil de definir y depende de los procedimientos elegidos.

Un mejor enfoque podría ser:

  • Pídale al usuario que inserte la contraseña cada vez (interfaz de consola / gui)
  • Guarde la contraseña en un archivo de texto (propiedad), en este caso, otros usuarios con permisos adecuados podrían leer el archivo con la contraseña de cleartexr. Aún puede cifrar la (s) contraseña (s) con una contraseña maestra y un cifrado como AES. En este caso, cada vez que el usuario necesita insertar la contraseña maestra, puede proteger muchas contraseñas con la contraseña maestra al mismo tiempo.
respondido por el DavidC 19.08.2014 - 12:44
fuente
0

¿En qué plataforma se está ejecutando?

Idealmente, deberías usar algo como un almacén de contraseñas cifradas o un administrador de contraseñas que admita API o utilidades de línea de comandos.

En linux, uso una herramienta llamada 'pass' que utiliza el cifrado gpg para almacenar contraseñas.

Cuando quiero usar una contraseña de mi almacén de contraseñas en uno de mis scripts, simplemente envío la salida a una variable y asigno esa variable como la contraseña.

Aquí hay algo de documentación para el pase:

enlace

También utilizo Password Manager Pro de ManageEngine; tienen una excelente API SSL para recuperar contraseñas. XML-RPC también está disponible. Proporcionan bibliotecas de java para hacer esto. Sin embargo, PMP no es gratis, pero probablemente sea uno de los mejores administradores de contraseñas que he visto por el precio que pagas.

    
respondido por el James Spiteri 19.08.2014 - 14:37
fuente
0

No puedes.

FTP es un protocolo de texto plano. No importa lo que haga para frenar la ingeniería inversa de la contraseña desde el código del programa, un atacante siempre puede obtener la contraseña con solo usar un rastreador de red para ver lo que el programa está enviando por cable.

Editar: en respuesta a su comentario, FTPS es un poco más difícil de romper: un atacante no puede agarrar la contraseña con un rastreador de red. La contraseña aún debe estar presente en la RAM en algún momento, por lo que el atacante puede buscarla con un depurador, o incluso puede aplicar ingeniería inversa a su programa para extraer la contraseña.

    
respondido por el Mark 19.08.2014 - 12:40
fuente

Lea otras preguntas en las etiquetas