2011-06-12 16 views
8

Sabemos que podemos cifrar un archivo con OpenSSL utilizando este comando:pasar la contraseña segura a través de la entrada estándar openssl

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin 

La contraseña se leerá de la entrada estándar. Como tal, para proporcionar la contraseña de antemano, todo lo que necesitamos hacer es anteponer

al comando anterior. Mi pregunta es: ¿cómo puedo hacer esto de forma más segura? El método anterior no parece lo suficientemente seguro.

Agradecería algunos comentarios sobre esto para poder entender mejor este problema.

Respuesta

13

prácticamente cualquier mecanismo que utilice será snoopable por root, así que tenga esto en cuenta.

La opción echo, se mostrará en la lista 'ps', lo que la hace vulnerable a los usuarios habituales que buscan y encuentran la contraseña.

Puede utilizar -pass file:filename utilizar un archivo, por lo que puede utilizar:

sumask=$(umask) 
umask 077 
rm -f passfile 
cat >passfile <<EOM 
someGoodPassword 
EOM 
umask $sumask 

esto crea el archivo, ilegible para otras cuentas (pero aún legibles por root). Uno asume que el script se usa una sola vez para crear el archivo de paso, como si repitiera el proceso, tiende a estar en un archivo y, por lo tanto, necesita chmod go-rwx el archivo para que otros usuarios no lo puedan leer.

continuación, utiliza:

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:passfile 

para realizar el cifrado, utilizando el archivo de contraseñas previamente creada.

Otros mecanismos son -pass env:ENVVAR para el uso de una variable de entorno (de nuevo conseguir que en allí sin revelar es el truco)

+0

Así que si tengo algún software que haga que el usuario escriba una contraseña en alguna IU, y luego escribe esta contraseña en este archivo (con los permisos correctos), y luego llama a estos comandos de terminal, ¿diría usted que ¿es seguro? En este sentido: si la 2da aplicación ha comprometido la computadora para obtener esta contraseña, entonces el usuario tiene algunos problemas graves de seguridad de los que preocuparse. En realidad, podría ser algún software diseñado específicamente para atacar mi propio software :) ¿Qué piensas sobre esto? – Enchilada

+1

Eso haría que las cosas sean relativamente seguras, sin embargo, si hay una aplicación diseñada específicamente para atacar su programa, entonces todas las apuestas están desactivadas. Podemos husmear el teclado mientras se ingresa la contraseña, podemos leer la E/S ya que el archivo es por escrito, podemos leer el archivo, podemos leer su entorno.Prácticamente no hay protección que sea 100% segura: puede usar el archivo abierto, desenlazarlo pero mantener el archivo abierto y pasar el truco para que no haya rastro de la contraseña en el sistema de archivos (use fd: number as el argumento a -pass) la aplicación con la interfaz de usuario utiliza un fd también – Petesh

+1

Si esto es parte de una aplicación de escritorio en GNOME, se puede utilizar el gnome-keyring como un lugar seguro para guardar la contraseña, ya que es encriptada y generalmente inaccesibles cuando el usuario no está conectado (KDE tiene kwallet IIRC). Las aplicaciones de Adobe AIR también tienen un mecanismo de almacenamiento de contraseñas (no conozco el mecanismo de AIR para protegerlo), pero debido a que está utilizando modismos de comandos de shell, espero que estos no sean realmente una opción. – Petesh

1

Ponga la contraseña en bash u otro archivo de script, y cree 600 permisos para ello. Eso permitirá que solo usted vea el archivo, y la contraseña no se revelará en ninguna parte.

11

Versión corta

Utilice una tubería con nombre.

openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass file:<(echo -n "someGoodPassword") 

Versión larga

Utilice una tubería con nombre. Puede crearlo en bash con

<(*output*) 

p.

<(echo -n "content") # without -n echo will add a newline 

se abrirá una tubería con nombre, por lo general una cola FIFO, y verá en la lista de procesos algo así como

/dev/fd/63 

Será que sólo esté accesible por el usuario actual y será cerrado automáticamente después de haber sido leída, para que no tenga que preocuparse por los permisos y limpiar el disco (el conducto se cerraría si el programa falla, mientras que un archivo creado por usted, como se sugiere en otra respuesta, permanecería en el disco).

De esta manera se cerrará de la manera más rápida posible, justo después de que el comando lo lea y sin esperar a que termine su tarea (Acabo de hacer una prueba: cifrar algunos gigabytes e intentar leer el conducto con nombre (es visible en la lista de procesos): la tubería nombrada se cierra instantáneamente incluso si openssl tarda años en encriptarse).

Sobre sus comentarios

Si el ordenador ha sido comprometido por una segunda aplicación para obtener esta contraseña , entonces el usuario tiene algunos problemas de seguridad graves que preocuparse acerca . En realidad, podría haber algún software diseñado específicamente para ataque de mi propio software

Si su ordenador ha sido hackeado y el atacante tiene sus mismos derechos de usuario, que está hecho para. Por ejemplo, el atacante puede modificar fácilmente su .bashrc a alias openssl para que inicie un "evil-openssl" hipotético que copie su contraseña y datos antes de manipular todo en el openssl real, dejándolo con su falsa sensación de seguridad.

Dicho esto, no soy un experto en seguridad, así que si alguien quiere desvirtuarme en el olvido (y dime por qué), de nada.

0

Si entiendo bien, su concierto sobre

$ echo "someGoodPassword" | openssl (...) -pass stdin 

es que la contraseña será visible en la lista de procesos a todos los usuarios durante algún periodo corto de tiempo. Que puede ser fácilmente trabajado en torno a <<< redirección de bash (no va a funcionar en la llanura shell POSIX de edad, sin embargo):

$ openssl (...) -pass stdin <<<"someGoodPassword" 

Esta construcción es compatible con la interpolación de variables (<<<"$password") y la salida del comando se puede canalizar más o redirigido a presentar como siempre.

Cuestiones relacionadas