¿Cuál es la forma más segura de obtener privilegios de root: sudo, su o login?


120

Me gustaría tener la cuenta raíz segura incluso si mi usuario no privilegiado está comprometido.

En Ubuntu solo puede usar sudo por "razones de seguridad" de forma predeterminada. Sin embargo, no estoy seguro de que sea más seguro que simplemente usar el inicio de sesión en una consola en modo texto. Hay demasiadas cosas que pueden salir mal si un atacante puede ejecutar código como mi usuario normal. Por ejemplo, agregar alias, agregar cosas a mi RUTA, configurar LD_PRELOAD y keyloggers X11 solo por mencionar algunos. La única ventaja que puedo ver es el tiempo de espera, por lo que nunca olvido cerrar sesión.

Tengo las mismas dudas sobre su pero ni siquiera tiene límite de tiempo. Algunas operaciones (especialmente la redirección de E / S) son más convenientes con su pero, en términos de seguridad, esto parece ser peor.

Iniciar sesión en una consola en modo texto parece ser el más seguro. Dado que se inicia por init si un atacante puede controlar PATH o LD_PRELOAD, él ya es root. Los eventos de pulsación de tecla no pueden ser interceptados por programas que se ejecutan en X. No sé si los programas que se ejecutan en X pueden interceptar [ctrl] + [alt] + [f1] (y abrir una ventana de pantalla completa que se parece a una consola) o es seguro como [ctrl] + [alt] + [del] en Windows. Además de eso, el único problema que veo es la falta de tiempo de espera.

Entonces, ¿me estoy perdiendo algo? ¿Por qué los chicos de Ubuntu decidieron permitir solo sudo? ¿Qué puedo hacer para mejorar la seguridad de cualquiera de los métodos?

¿Qué hay de SSH? Tradicionalmente, la raíz no puede iniciar sesión a través de SSH. Pero usar la lógica anterior no sería lo más seguro:

  • permitir root a través de SSH
  • cambiar al modo de texto
  • iniciar sesión como root
  • ssh a la otra máquina
  • iniciar sesión como root?

En su solución ssh, ¿quiere decir que desea ingresar a la caja potencialmente comprimida de otra caja? 1 / Si es así, entonces, para seguir su línea de pensamiento, debe asegurarse de que su otra caja no esté comprometida antes de salir de ella. 2 / Si no, entonces tienes el mismo problema.
asoundmove

@asoundmove: Hay 4 usuarios con mi situación ssh: root @ hosta, root @ hostb, stribika @ hosta, stribika @ hostb. Suponiendo que un atacante puede ejecutar código arbitrario como ambos stribikas (después de todo, están ejecutando flashplugin y otras cosas), todavía quiero un acceso raíz seguro. Por lo tanto, ambas cajas pueden verse parcialmente comprometidas.
Stribika

Respuestas:


104

La seguridad siempre se trata de hacer compensaciones. Al igual que el servidor proverbial que se encuentra en un lugar seguro, desconectado, en el fondo del océano, rootsería más seguro si no hubiera forma de acceder a él.

Los ataques LD_PRELOAD y PATH como los que usted describe asumen que ya hay un atacante con acceso a su cuenta, o al menos a sus archivos de puntos. Sudo no protege contra las que muy bien a todos - si tienen su contraseña, después de todo, no hay necesidad de tratar de engañar a usted para más adelante ... sólo se puede utilizar sudo ahora .

Es importante tener en cuenta para qué se diseñó originalmente Sudo: delegación de comandos específicos (como aquellos para administrar impresoras) a "subadministradores" (tal vez estudiantes graduados en un laboratorio) sin entregar la raíz por completo. Usar sudo para hacer todo es el uso más común que veo ahora, pero no es necesariamente el problema que el programa estaba destinado a resolver (de ahí la sintaxis ridículamente complicada del archivo de configuración).

Pero, sudo-para-sin restricciones de la raíz hace frente a otro problema de seguridad: gestión de las contraseñas de root. En muchas organizaciones, estos tienden a pasarse como dulces, se escriben en pizarras y se dejan para siempre. Eso deja una gran vulnerabilidad, ya que revocar o cambiar el acceso se convierte en un gran número de producción. Incluso hacer un seguimiento de qué máquina tiene qué contraseña es un desafío, y mucho menos rastrear quién sabe cuál.

Recuerde que la mayoría de los "delitos cibernéticos" provienen del interior. Con la situación de la contraseña de root descrita, es difícil rastrear quién hizo qué, algo que sudo con el registro remoto trata bastante bien.

En su sistema doméstico, creo que es más una cuestión de conveniencia de no tener que recordar dos contraseñas. Es probable que muchas personas simplemente los configuraran para que fueran iguales, o peor, al principio para que fueran iguales y luego dejaran de sincronizarse, dejando que la contraseña de root se pudriera.

El uso de contraseñas en absoluto para SSH es peligroso, ya que la contraseña detectores de demonios ssh con troyanos se puso en marcha en algo así como el 90% de los compromisos del sistema del mundo real que he visto. Es mucho mejor usar claves SSH, y este también puede ser un sistema viable para acceso raíz remoto.

Pero el problema es que ahora ha pasado de la administración de contraseñas a la administración de claves, y las claves ssh no son realmente muy manejables. No hay forma de restringir las copias, y si alguien hace una copia, tienen todos los intentos que desean para forzar la frase de contraseña. Puede hacer una política que diga que las claves deben almacenarse en dispositivos extraíbles y solo montarse cuando sea necesario, pero no hay forma de hacer cumplir eso, y ahora ha introducido la posibilidad de que un dispositivo extraíble se pierda o sea robado.

La mayor seguridad vendrá a través de claves de una sola vez o tokens criptográficos basados ​​en tiempo / contador. Esto se puede hacer en software, pero el hardware resistente a la manipulación es aún mejor. En el mundo de código abierto, está WiKiD , YubiKey o LinOTP , y por supuesto también está el SecurID RSA de peso pesado patentado . Si está en una organización de mediana a grande, o incluso en una pequeña que se preocupa por la seguridad, le recomiendo que busque uno de estos enfoques para el acceso administrativo.

Sin embargo, probablemente sea excesivo para el hogar, donde realmente no tiene los problemas de administración, siempre que siga prácticas de seguridad sensatas.


Aceptaré esto como respuesta, ya que aclara mucho lo que los desarrolladores de Ubuntu estaban pensando al hacer de sudo el método predeterminado. El registro remoto también parece una gran idea y dado que ya estoy usando syslog-ng, no debería ser demasiado difícil de configurar, por lo que todas mis computadoras inician sesión en todas las demás. Voy a seguir con mi práctica actual de cambiar al modo de texto e iniciar sesión desde allí para tener acceso completo a la raíz. Delegar un subconjunto de derechos es ciertamente una buena forma de usar sudo y una que nunca he considerado.
Stribika

77
sudoes muy similar al Control de cuentas de usuario en Windows Vista. Ambos en realidad están diseñados no para aumentar la seguridad, sino para facilitar la disminución de manera controlada. Pero debido a que hacen que sea más fácil elevar temporalmente sus privilegios de una manera de baja fricción, no necesita correr con privilegios elevados durante períodos prolongados de tiempo, lo que aumenta la seguridad. (Esto no era tan grande de un problema en Unix, pero en Windows Me acuerdo ejecutando como administrador durante varios días, sólo porque el cambio fue tan doloroso.)
Jörg W Mittag

Contraseña olfatear demonios ssh troyanos? Si pueden reemplazar el demonio ssh, ya tienen root.
psusi

@psusi: sí, en ese sistema; En un entorno donde las contraseñas son compartidas (por un servicio de directorio) entre múltiples sistemas, es fácil que un compromiso se propague de esta manera. Incluso cuando se trata de un sistema único, es una molestia volver a revisar la contraseña de todos después de una reinstalación después de que se haya detectado el compromiso.
mattdm

1
Las posibles dificultades de cambiar todas las rootcontraseñas de su empresa también se mencionan como el elemento final en el Informe de Operaciones , que vale la pena leer.
Comodín

30

Esta es una pregunta muy compleja. mattdm ya ha cubierto muchos puntos .

Entre su y sudo, cuando considera a un solo usuario, su es un poco más seguro porque un atacante que ha encontrado su contraseña no puede obtener privilegios de root de inmediato. Pero todo lo que se necesita es que el atacante encuentre un agujero raíz local (relativamente poco común) o instale un troyano y espere a que ejecute su.

Sudo tiene ventajas incluso sobre un inicio de sesión de consola cuando hay varios usuarios. Por ejemplo, si un sistema está configurado con registros remotos a prueba de manipulaciones, siempre puede averiguar quién ejecutó sudo por última vez (o cuya cuenta se vio comprometida), pero no sabe quién escribió la contraseña de root en la consola.

Sospecho que la decisión de Ubuntu fue en parte por la simplicidad (solo una contraseña para recordar) y en parte por la seguridad y la facilidad de distribución de credenciales en máquinas compartidas (empresa o familia).

Linux no tiene una clave de atención segura u otra interfaz de usuario segura para la autenticación. Hasta donde sé, incluso OpenBSD no tiene ninguno. Si está tan preocupado por el acceso a la raíz, puede deshabilitar el acceso a la raíz desde un sistema en ejecución por completo: si desea ser root, deberá escribir algo en el indicador del gestor de arranque. Obviamente, esto no es adecuado para todos los casos de uso. (* El nivel seguro de BSD funciona así: a un nivel alto seguro, hay cosas que no puede hacer sin reiniciar, como bajar el nivel seguro o acceder directamente a los dispositivos en bruto montados).

Restringir las formas en que uno puede convertirse en root no siempre es una ganancia para la seguridad. Recuerde al tercer miembro de la tríada de seguridad : confidencialidad , integridad , disponibilidad . Bloquearse fuera de su sistema puede evitar que responda a un incidente.


Si pueden encontrar su contraseña, pueden encontrar la contraseña raíz con la misma facilidad, si no es que más fácil. También puede usar sysrq-k como una secuencia de atención segura.
psusi

Linux tiene claves de atención de seguridad, eche un vistazo a la documentación del kernel
btshengsheng

@btshengsheng Linux puede tener una "clave de atención segura", pero dado que se puede configurar, no puede estar seguro de que está funcionando en una máquina en particular. También depende de la distribución del teclado, por lo que puede evitarse reasignando una de las teclas. Se llama una "clave de atención segura", pero no cumple con los requisitos.
Gilles

9

Los diseñadores de la distribución segura de OpenWall GNU / * / Linux también han expresado opiniones críticas sobre su(para convertirse en root) y sudo. Quizás te interese leer este hilo:

... desafortunadamente tanto su como sudo son sutil pero fundamentalmente defectuosos.

Además de discutir los defectos suy otras cosas, Solar Designer también apunta a una razón específica para usar su:

Sí, solía ser una sabiduría común del administrador de sistemas "su root" en lugar de iniciar sesión como root. Aquellos pocos que, cuando se les pregunta, podrían llegar a una razón válida para esta preferencia, se referirían a la mejor responsabilidad lograda con este enfoque. Sí, esta es realmente una buena razón a favor de este enfoque. Pero también es el único. ...(Lee mas)

En su distribución, se han "eliminado completamente de los programas raíz SUID en la instalación predeterminada" (es decir, incluida su; y no usan capacidades para esto):

Para los servidores, creo que la gente necesita reconsiderar y, en la mayoría de los casos, no permitir la invocación de su y sudo por parte de los usuarios. No hay seguridad adicional del antiguo "inicio de sesión como no root, luego su o sudo a la raíz" sabiduría "del administrador del sistema, en comparación con el inicio de sesión como no root y como root directamente (dos sesiones separadas). Por el contrario, el último enfoque es el único correcto, desde el punto de vista de la seguridad:

http://www.openwall.com/lists/owl-users/2004/10/20/6

(Para la responsabilidad de varios administradores de sistemas, el sistema debe admitir tener múltiples cuentas con privilegios de root, como lo hace Owl).

(Para computadoras de escritorio con X, esto se vuelve más complicado).

También tienes que lidiar absolutamente con ...

Por cierto, que eran para reemplazar sulogincon msuloginpermitir que el programa de instalación con múltiples cuentas root: msuloginpermite escribir el nombre de usuario también al entrar en el modo de usuario único (y preservar la "rendición de cuentas") (esta información proviene de esta discusión en ruso ) .


1
Para un sistema que básicamente pretende ser un firewall y no mucho más, está bien, pero si tiene la intención de ejecutar, como ejemplo aleatorio, mysql / postgresql / bind / powerdns / apache y otras cosas en un sistema de producción, comienza encontrarse con problemas, tal como lo describen con X. Esencialmente, han intercambiado mucha usabilidad por un cierto grado de seguridad; depende del administrador de sistemas decidir si es una compensación justa. Personalmente, me atendré a Debian.
Shadur

4

Parece suponer que el uso sudosiempre preserva las variables de entorno, pero este no es siempre el caso. Aquí hay un extracto de la página de manual de sudo:

Hay dos formas distintas de tratar con las variables de entorno. Por defecto, la opción env_reset sudoers está habilitada. Esto hace que los comandos se ejecuten con un entorno mínimo que contiene TERM, PATH, HOME, SHELL, LOGNAME, USER y USERNAME, además de las variables del proceso de invocación permitido por las opciones env_check y env_keep sudoers. Existe efectivamente una lista blanca para las variables de entorno.

Sin embargo, si la opción env_reset está deshabilitada en sudoers, cualquier variable que las opciones env_check y env_delete no denieguen explícitamente se heredan del proceso de invocación. En este caso, env_check y env_delete se comportan como una lista negra. Como no es posible incluir en la lista negra todas las variables de entorno potencialmente peligrosas, se recomienda el uso del comportamiento predeterminado env_reset.

En todos los casos, las variables de entorno con un valor que comienza con () se eliminan, ya que podrían interpretarse como funciones bash. La lista de variables de entorno que sudo permite o niega está contenida en la salida de sudo -V cuando se ejecuta como root.

Entonces, si env_resetestá habilitado (el valor predeterminado), un atacante no puede anular su PATHu otras variables de entorno (a menos que las agregue específicamente a una lista blanca de variables que deben conservarse).


1
Me refería a que si el atacante puede controlar mi camino, puede hacerme ejecutar cualquier cosa en lugar del real / usr / bin / sudo. Por ejemplo / tmp / sudo que imprime Password: no muestra nada cuando escribo, le envía lo que escribí, dice que la contraseña es incorrecta y luego ejecuta el sudo real.
Stribika

Hmm, supongo que en ese caso podrías ejecutar / usr / bin / sudo directamente en lugar de depender del shell para encontrarlo por ti. Pero tienes razón, es un problema en el que no pensé.
Cedric

1
@CedricStaub: Por lo que puedo decir, nadie parece pensar en esto. Puedo dar la ruta completa, pero intente esto: alias /usr/bin/sudo="echo pwned"además de que hay un montón de programas involucrados (X, xterm, el shell), cualquiera de los cuales puede robar la contraseña. Es por eso que dije que hay demasiados problemas para cambiar de forma segura.
Stribika

1
¿Lo intentaste? Lo hice:bash: alias: `/usr/bin/sudo': invalid alias name
maaartinus

@maaartinus: Interesante. Funciona en ZSH.
Stribika

4

El enfoque más seguro es el inicio de sesión ssh utilizando (al menos) la clave larga 2048 (con el inicio de sesión con contraseña desactivado) utilizando un dispositivo físico para almacenar la clave.


1
¿Ciertamente, pero de raíz a raíz o de privilegiado a no privilegiado, entonces cambie a raíz? (En realidad estoy usando las teclas de 4096 bits sólo para estar en el lado seguro teclas más grandes no son compatibles en todas partes..)
stribika

@stribika Bueno, ambos. Si la máquina se ve comprometida, todavía no pierde su llave. Eso evita la propagación (el mayor problema con las contraseñas).
Let_Me_Be

3

Solo quiero agregar algo un poco fuera de tema. (para el tema uno marque '/ bin / su -' aquí después)

Creo que la "seguridad" anterior también debe estar vinculada a los datos reales que queremos proteger.

Lo hará y debería ser diferente si queremos asegurar: my_data, my_company_data, my_company_network.

Por lo general, si hablo de seguridad, también hablo de "seguridad de datos" y respaldo. También podemos agregar sistemas tolerantes a fallas y similares.

Dado esto, creo que la seguridad en su conjunto es un equilibrio entre la usabilidad, la "seguridad de los datos" y el esfuerzo requerido para implementar un sistema seguro.

El objetivo de Ubuntu era, y sigue siendo, el usuario final: Sudo es el valor predeterminado.

Fedora es la versión gratuita de RedHat que a su vez está más orientada a servidores: Sudo solía estar deshabilitado.

Para las otras distribuciones no tengo información directa.

Estoy usando en este momento, principalmente, fedora. Y como usuario de estilo antiguo, nunca escribí 'su'. Pero puedo escribir "/ bin / su -" en muy poco tiempo, incluso si no soy exactamente un mecanógrafo. La variable PATH ... no debería ser un problema (escribo la ruta). Además, el "-" (menos) en principio debería eliminar las variables de entorno de mi usuario y cargar solo las raíz. es decir, evitar algunos posibles problemas adicionales. Probablemente también el LS_PRELOAD.

Por lo demás, supongo que @mattdm fue bastante preciso.

Pero vamos a ponerlo en la casilla correcta. Suponga que un kit inteligente de secuencias de comandos obtiene acceso a mis datos. ¿Qué demonios crees que va a hacer con eso? - Publicar mis fotos? ¿mi? - ¿Tratando de averiguar el nombre de mi novia y decirle que visito sitios pornográficos?

En la imagen de un solo usuario, las dos peores situaciones son: - El niño borra todos mis datos: por diversión o por error - El niño usa mi máquina para crear un ataque adicional a otra entidad. O objetivos similares.

Para el primer caso, mencioné anteriormente, es mejor poner esfuerzos en una copia de seguridad que en la seguridad de la red. Sí, estás a salvo. Quiero decir que un bloqueo de hardware no es tan diferente.

El segundo caso es más sutil. Pero hay señales sobre estas actividades. En cualquier caso, puede hacer lo posible, ¡pero no configuraría la PC de mi hogar para que esté protegida contra ataques terroristas!

Me saltearé los otros escenarios.

aclamaciones F


2

Si la preocupación es que se puede usar una cuenta de usuario comprometida para rastrear la contraseña utilizada para sudoo su, entonces use un código de acceso único para sudoy su.

Puede forzar el uso de claves para usuarios remotos, pero es posible que no se apruebe para fines de cumplimiento. Podría ser más efectivo configurar una caja de puerta de enlace SSH que requiera autenticación de dos factores, luego permitir el uso de la clave desde allí. Aquí hay un documento sobre dicha configuración: asegure su implementación SSH con la autenticación de dos factores WiKID .


0

También puede echar un vistazo a privacyIDEA , que no solo le brinda la posibilidad de usar OTP para iniciar sesión en la máquina (o para hacer su / sudo) sino que también puede hacer OTP sin conexión.

Además, es capaz de administrar sus claves SSH. Es decir, si tiene muchas máquinas y varios usuarios root, todas las claves SSH se almacenan centralmente. Por lo tanto, es fácil "revocar" / eliminar una clave SSH, si ya no se puede confiar en la clave.

Por supuesto, hay tareas organizativas y flujos de trabajo para asegurar el sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.