Evitar que el malware rastree la contraseña de sudo

10

A menudo escucho a la gente citar sudo como una de las principales barreras para el malware que infecta una computadora Linux.

El argumento más común parece ir en la línea de: Se requieren privilegios de raíz para modificar la configuración del sistema, y ​​se requiere una contraseña para obtener privilegios de raíz, por lo que el malware no puede modificar la configuración del sistema sin solicitar una contraseña.

Pero me parece que, de forma predeterminada, en la mayoría de los sistemas, una vez que el malware ha infectado una cuenta de administrador, la escalada de privilegios es trivial: el malware solo tiene que esperar a que el usuario se ejecute sudo.

¿Qué métodos existen para que el malware obtenga privilegios de root cuando el usuario se ejecuta? sudo¿Y cómo podemos protegernos contra ellos?

Editar: Estoy especialmente interesado en protegerme contra una cuenta de administrador comprometida; es decir, una cuenta que tiene privilegios de root completos con sudo (por ejemplo, la cuenta del usuario en un sistema de escritorio típico).

Zaz
fuente
Para ver un ejemplo del tipo de cosas que estoy buscando, vea mi respuesta . Espero que alguien pueda elaborar algunos de los riesgos de seguridad que se plantean (o cualquier otro en el que puedan pensar), y proporcionar formas de mitigarlos.
Zaz
Pides algo como UAC o una secuencia de atención segura en Windows. Los sistemas Unixy no tienen eso. El camino a seguir para los administradores sería no usar sus cuentas para cosas tontas. Un par de cosas que menciona en su propia respuesta pueden protegerse con sistemas de control de acceso obligatorios y basados ​​en roles, como SELinux o Grsecurity. Allí puede establecer políticas de que no se pueden ejecutar archivos binarios que no sean de root, por lo que no hay troyanos a ese nivel. Por cierto, si no confías en X, entonces no confíes en el sistema, ya que X se ejecuta con privilegios de superusuario.
countermode
Gracias, busqué en SELinux, pero parece estar más diseñado para grandes instalaciones, lo que requiere mucho tiempo para la administración y configuración; Esperaba algo un poco más simple. Soy un desarrollador, por lo que las políticas estrictas con respecto a los programas en ejecución tampoco son realmente una opción.
Zaz
"X se ejecuta con privilegios de superusuario" - ¿Qué? En una instalación por defecto de X , startx funciona bien como un usuario normal. De hecho estoy corriendo X como un usuario normal en este momento.
Zaz
Sí, la curva de aprendizaje es empinada. Echa un vistazo a Grsecurity, es más simple pero potente. ~ Privilegios de X: en mi caja, el servidor X es la raíz SUID y ejecuta una raíz.
countermode

Respuestas:

9

Una vez que una pieza de malware ha obtenido acceso a la cuenta de un usuario, puede:

1. Cree un alias de bash (en el shell actual, y en ~/.bashrc ) a una orden que falsifica el [sudo] password for $USER: y roba la contraseña del usuario.

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'

2. Del mismo modo, puede colocar un ejecutable llamado sudo en ~/.bin, y modificar el PATH Variable para lograr el mismo efecto: PATH="$HOME/.bin:$PATH"

3. La tecla de captura presiona a través del servidor X, observe la palabra sudo, luego prueba el texto entre los dos siguientes Entrar La tecla presiona como la contraseña.

4. Algo similar se puede hacer en cualquier entorno (la consola, Wayland , X) utilizando, por ejemplo, $LD_PRELOAD.

5. Si el malware infecta un shell que usa sudoy sudo almacena credenciales, el malware puede verificar continuamente si es posible sudo sin contraseña:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"


Prevención:

1 & amp; 2. Utilizar \/bin/sudo. los \ ignora los alias, y /bin/… ignora $PATH. Alternativamente, agregue un alias como: ssudo="\/bin/sudo", y siempre usar ssudo en lugar de sudo. Parece poco probable que un virus sea lo suficientemente inteligente como para reasignar este alias.

3. Evite escribir su contraseña cuando use X11. En su lugar, use una consola virtual, o Weston .

5. Conjunto timestamp_timeout=0 en /etc/sudoers.


La única forma de eliminar completamente la posibilidad de sudo La contraseña que se está rastreando, parece ser para evitarla por completo. En su lugar, inicie sesión como root en una consola virtual.

Según Alexander Peslyak : "el único uso seguro para su [y sudo] es cambiar de una cuenta más privilegiada a una menos privilegiada ..."


En una nota lateral, sudo tiene algunas contramedidas:

  • sudo lee de tty en lugar de stdin, asi que alias sudo='tee -a /tmp/sudo-password | sudo' descansos sudo (pero captura la contraseña).
Zaz
fuente
sudo pregunta a la contraseña del usuario, por lo que el malware capturará la contraseña del usuario al que ya tuvo acceso.
rob
3
@rob: En realidad depende de cómo tengas sudo configurado, pero de cualquier manera, el malware ahora tiene la contraseña requerida para sudo, así que si el usuario tiene acceso de root, también lo tiene el malware.
Zaz
3

No hay protección real.

El acceso protegido por contraseña a sudo se remonta a una era anterior a los complejos entornos de shell con comandos ejecutados por shims. Una vez que se ha enviado la contraseña, hay una ventana de oportunidad en la que un shim puede ejecutar comandos a través de sudo, sin ninguna notificación y con control total del sistema.

Si tuviera la intención de acceder, crearía un shim útil para bash, zsh y fish, etc. Supervisaría los comandos ejecutados. Poco después de que un sudo haya regresado con un estado de cero, comenzaría a emitir "sudo chmod + s / bin / sh" u otros desagradables.

En el momento en que a sudo se le ha dado una contraseña satisfactoria, y tiene shells que ejecutan comandos para obtener un aviso, es posible que tenga problemas. No hay protección, más que optimismo.

Otras respuestas se han centrado en proteger la contraseña. Como agresor, no me preocuparía por eso. Me centraré en la duración después de que se haya dado la contraseña, cuando no se necesita una contraseña. Ese es el momento más riesgoso, cuando el atacante debe hacer lo menos para comprometer completamente el sistema.

¿Protegiéndote de ello? Tendrías que proteger tus archivos RC. Inspeccione las cuñas u otros comandos utilizados en las solicitudes de la línea de comandos. Busque los co-procesos conectados al shell y las herramientas utilizadas para mantener el entorno del shell. Las principales defensas serían las herramientas de intrusión del host, pero eso es después del hecho. ¿Previniendo ataques? Solo utilizando shells simples sin una configuración automatizada compleja y sin avisos activos, ese es el entorno para el cual se desarrolló sudo.

Solía ​​jugar con otros desarrolladores (1980) en los que intentábamos escribir cosas que obtuvieran el terminal que el otro desarrollador estaba usando, para insertar comandos. Este es esencialmente el mismo problema. Y hemos hecho mucho más fácil incrustar herramientas que harían la inserción de comandos sin rastro visible. :)

JezC
fuente
1

No estoy seguro acerca de ningún método para que usuarios no autorizados obtengan privilegios de root, pero sé algo que puede hacer para hacer sudo una un poco menos peligroso , si quieres decir eso. sudo le permite configurar permisos granulares para definir grupos de usuarios con privilegios específicos y comandos específicos que ciertos usuarios pueden ejecutar.

SUDO - CONTROL GRANULAR

  • Seccion de usuario

    Aquí puede configurar grupos para los usuarios que va a utilizar.   especificar comandos para. Permite configurar un grupo de operaciones;

    User_Alias  OPS = bob, jdoe 
    

    Esto crea el grupo OPS y coloca a los usuarios llamados bob y jdoe en el grupo

  • Cmnd_Alias

    Aquí especificamos conjuntos de comandos específicos. Debe especificar el   Ruta completa y cualquier opción de comando que desee utilizar. Permite configurar el   Comandos de grupo de operaciones;

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    Esto agrega los tres comandos especificados al comando   grupo OPSCMD.

  • Especificación de privilegio de usuario

    Aquí es donde usaremos   los grupos que hemos establecido hasta ahora;

    OPS  ALL=(root)  OPSCMD 
    

    Lo primero que especificamos son los usuarios, aquí usamos el grupo OPS que configuramos. Entonces el   ALL significa que se aplica a todos los servidores, esto es útil solo si   o ejecutando sudo en múltiples servidores cada uno usando el mismo   archivo de configuración. A continuación especificamos el usuario que el grupo de Operaciones   ejecutará los comandos especificados como, en este caso, queremos que se ejecuten   como raíz Por último, especificamos los comandos que queremos que el grupo OPS   Ser capaz de ejecutar, específicamente estamos utilizando el grupo OPSCMD que configuramos. Si   usted no quiso que ellos ingresaran su contraseña cada vez que usaban   sudo, entonces la especificación del comando sería NOPASSWD: OPSCMD.

Solo endurece tu sudo políticas tanto como usted no confía en sus usuarios :)

jimm-cl
fuente
Lo siento si no estaba claro en la pregunta, pero estoy interesado en protegerme contra cuentas de administrador comprometidas, es decir, cuentas que tienen privilegios de root completos con sudo. Específicamente, estoy pensando en sistemas de escritorio normales.
Zaz
1

Si está interesado en un sistema que cree que podría estar comprometido, ejecute "Rootkit" y use "Tripwire" para verificar la integridad del sistema de archivos.

También le recomendaría que endurezca los privilegios de sudo, ya que no necesita que todos los usuarios tengan acceso a todos los comandos de root, en lugar de dar acceso a comandos específicos a través de SUDO.

Rituraj
fuente
0

En primer lugar, eche un vistazo a /etc/sudoers expediente.

La sintaxis será user MACHINE=COMMANDS formato.

Por ejemplo, el usuario root tendrá root ALL=(ALL) ALL Esto significa que el usuario root puede ejecutar cualquier comando (todo) en cualquier lugar.

Si tu entrada también tiene ALL=(ALL) entonces eres casi igual a un usuario root. Si este no es el caso y solo tiene ciertos privilegios limitados, entonces el atacante / malware solo puede hacer tanto como su privilegio de sudo.

Consejos que te pueden ayudar:

  1. Examina tu /etc/sudoers expediente.
  2. Ejecute un escáner de seguridad como chkrootkit, rootkit hunter, Config server Exploit scanner, snort, etc.
  3. Utilizar visudo comando para editar y modificar los privilegios de su archivo sudoers.
  4. Ejecutar los escáneres de nuevo.

Referencia: página de manual de Linux de sudoers y sudo. hombre sudoers

Raja Ramarajan
fuente