¿Puedo, en este caso particular, permitir almacenar la contraseña en el programa java?

5

Tengo un programa Java-Server que se ejecuta en Ubuntu-Server y que recibe cada 5 minutos los datos de ubicación actuales de mi teléfono inteligente Android (que llevo conmigo). Mi arquitectura es la siguiente: Mi teléfono inteligente se conecta al servidor mediante tlsv1.2 y transmite la ubicación de gps. Después de recibir los datos, el servidor-programa establece una conexión a una base de datos mysql local que inserta la ubicación, la hora, etc.

Leí esta respuesta de William Brandl y yo pensamos, sí, pero esto no aumenta mi nivel de seguridad.

Soy el único que tiene acceso físico a mi máquina. Por lo tanto, mi programa java solo puede ser invertido si mi servidor se ve comprometido. Almacenar el nombre de usuario y la contraseña en un archivo separado no tiene ningún sentido para mí en esta situación particular. El programa se está ejecutando bajo un usuario con privilegios bajos. Por lo tanto, si mi usuario o mi servidor se pusieron en peligro, alguien puede realizar una ingeniería de ingeniería inversa con mi programa ("nombre de usuario y contraseña") y simplemente abrir el archivo que contiene el nombre de usuario y las contraseñas que puede leer el mismo usuario.

¿En este caso particular, almacenar el nombre de usuario y la contraseña en un archivo separado solo es más carga de trabajo? ¿Existe una forma más segura de este caso de almacenamiento de datos confidenciales?

Ten paciencia conmigo si este es el lugar equivocado para preguntar.

    
pregunta Mike 12.07.2015 - 00:28
fuente

3 respuestas

4

Almacenaría la contraseña solo en memoria en tiempo de ejecución, pero esto tiene un inconveniente. Debe escribir la contraseña cada vez que inicie / reinicie el servidor. Esta es la forma más segura de administrar contraseñas de texto simple.

Además, seguiría los consejos para r00t, crear dos usuarios en el servidor MySQL, uno con permiso de lectura y otro con permiso de escritura. En caso de que alguien haya podido acceder a su servidor y descargar la memoria.

    
respondido por el BufferOverflow 12.07.2015 - 03:00
fuente
1

Le recomendaría crear dos usuarios de mysql y tener el único con acceso de escritura almacenado en el programa java.

Para ti, usa el segundo con acceso de lectura.

Si su servidor se ve comprometido, el atacante no podrá leer sus ubicaciones, solo inserte las falsas.

--Editar--

Para responder si puede guardar su credencial en su código:

No mejora ni degrada la seguridad de las credenciales, pero le da la habilidad de modificarla más difícilmente. De hecho, necesitarás recompilar tu código java.

La buena práctica dice que las credenciales deben estar en un archivo por este motivo. En caso de que se revele la contraseña, su tiempo de respuesta será mayor.

    
respondido por el r00t 12.07.2015 - 00:45
fuente
1

Para comenzar: estoy de acuerdo con usted en que la pieza de William Brandl se inclina más hacia la conveniencia que hacia la seguridad. Incluso podría ir tan lejos como para decir que está equivocado cuando dice que almacenar las credenciales en un archivo es la única manera de hacerlo. Al menos cuando deja fuera alguna parte con respecto al cifrado. El enlace que proporciona al artículo de CWE-259 dice específicamente que:

  

La información de nombre de usuario y contraseña no debe incluirse en un archivo de configuración o en un archivo de propiedades en texto sin formato ya que esto permitirá que cualquiera que pueda leer el archivo acceda al recurso. Si es posible, cifre esta información y evite CWE-260 y CWE-13 .

El hecho es que, independientemente de lo que haya decidido hacer, un atacante con acceso a sus archivos podrá robar sus credenciales.

Ya que está ejecutando el servidor con un usuario con pocos privilegios, con acceso restringido y una contraseña segura, generalmente está bastante seguro. Siempre que bloquee a todos los usuarios, otorgue a su usuario de la base de datos solo los privilegios mínimos requeridos, etc. probablemente no tendrá ningún problema.

Archivo separado

Es posible que desee considerar almacenar las credenciales en un archivo separado, solo para su propia conveniencia. Esto se debe a que puede intercambiar nuevas credenciales fácilmente si alguna vez decide cambiar la base de datos. De esta manera, no tienes que volver a compilar tu fuente.

También puede cifrar las credenciales almacenadas en ese archivo separado. Esto requerirá que su código descifre la clave, sin embargo, lo que significa que la clave de descifrado está en los archivos compilados de Java. Esto es realmente solo seguridad a través de la oscuridad (por ejemplo, una falsa sensación de seguridad), y honestamente no agrega mucho. Sin embargo, aumentará un poco la dificultad, en lugar de solo un nombre de usuario y contraseña de texto simple.

Inicio

Lo único que puedo sugerir para hacerlo más seguro, evitando la codificación y el almacenamiento de las credenciales en un archivo separado, es proporcionar las credenciales en el inicio. Esto será más engorroso desde una perspectiva técnica (por ejemplo, tendrá que reiniciar el servidor manualmente cada vez que se caiga), pero al menos eliminará todos los problemas relacionados con dónde almacenar las credenciales.

Sin embargo, las credenciales se se almacenarán en la memoria. Entonces, si un atacante realmente quiere obtener las credenciales, un volcado de memoria podría ser todo lo que necesite, independientemente de dónde almacene las credenciales.

Resumen

Digo, para su propia conveniencia, almacene las credenciales en un archivo, pero no tenga miedo si quiere mantener las credenciales en el código fuente. (Solo tenga cuidado con los programadores que revisan su código, ya que es una mala práctica ;-)). Una vez más, asegúrese de supervisar su servidor, asegúrese de aplicar una política de privilegios mínimos en sus usuarios y servicios, y asegúrese de que todas las credenciales sean únicas y sólidas.

Nota:

Para futuros lectores; Esto no quiere decir que no deba preocuparse por la forma en que realiza la gestión de credenciales. Una gran cantidad de marcos e idiomas proporcionan formas de cifrar y asegurar sus credenciales, y siempre se recomienda seguir las mejores prácticas. Pero el hecho del asunto es que si alguien tiene acceso a sus archivos, generalmente no tiene suerte. ¡Así que protege tus archivos!

    
respondido por el Mrtn 12.07.2015 - 02:05
fuente

Lea otras preguntas en las etiquetas