Bash scripting y entrada de contraseña

4

Estoy escribiendo un script de bash y le pido al usuario su contraseña. Esta contraseña se proporciona para una cuenta local o de dominio para consultar un MS SQL Server (usando sqsh y freetds).

¿Qué tan seguro es el código de abajo?

echo "What is the password for $mssqlu ?: "
read -s mssqlp

Supongo que no hay hash involucrado aquí, y la contraseña clara existe en algún lugar de la memoria.

¿Es vulnerable a cualquier tipo de ataque? ¿Se puede revelar? Gracias por su ayuda

    
pregunta Florian Bidabe 25.06.2015 - 02:56
fuente

1 respuesta

5

Gran pregunta.

En bash, cuando usa "leer" para obtener una contraseña de la entrada estándar, la contraseña, por supuesto, se almacena en texto plano en la memoria. Sin embargo, este es a menudo el caso de las contraseñas en general: algo tiene que ser almacenarlas en texto sin formato para usarlas. Si estuviera cifrado, una forma de descifrarlo también tendría que existir en la memoria, por lo que el cifrado no sería muy útil en ese momento.

En este caso, puedo ofrecer dos conjuntos de mejores prácticas:

1) Utilice otro método de autenticación que la contraseña introducida por el usuario. Esto podría tomar la forma de:

  • Para las bases de datos MS-SQL, usar una conexión "confiable" para la autenticación en lugar de una contraseña ingresada por el usuario. Otras bases de datos ofrecen una variedad de sistemas para iniciar sesión sin una contraseña.
  • Une la computadora al dominio y haz que el usuario inicie sesión con credenciales de Active Directory. Luego haga que el script use esta autenticación para iniciar sesión en SQL. MS publica sqlcmd y un controlador ODBC para Linux que he usado con éxito.

2) Si debe usar una contraseña provista por una entrada estándar, desactive el eco en el script de bash. Por supuesto, los scripts de bash todavía necesitan ser revisados para detectar posibles vulnerabilidades. Si su secuencia de comandos genera un archivo que cualquier usuario puede escribir, por supuesto, ese archivo podría modificarse para enviar la contraseña a un atacante.

Es posible que desee considerar el uso de un archivo de frase de contraseña que esté codificado para que solo un usuario pueda acceder a él. Luego simplemente lea la contraseña de este archivo. Esto es probablemente comparable en seguridad al uso de la contraseña estándar. Si bien el usuario no escribe constantemente la contraseña, no existen algunas vulnerabilidades (por ejemplo, keylogger); aumentaría la facilidad de un ataque de captura de contraseña si alguien simplemente hackeara el servidor.

    
respondido por el Herringbone Cat 25.06.2015 - 04:17
fuente

Lea otras preguntas en las etiquetas