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).
startx
funciona bien como un usuario normal. De hecho estoy corriendo X como un usuario normal en este momento.Respuestas:
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.2. Del mismo modo, puede colocar un ejecutable llamado
sudo
en~/.bin
, y modificar elPATH
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
sudo
ysudo
almacena credenciales, el malware puede verificar continuamente si es posiblesudo
sin contraseña: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 usarssudo
en lugar desudo
. 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 detty
en lugar destdin
, asi quealias sudo='tee -a /tmp/sudo-password | sudo'
descansossudo
(pero captura la contraseña).fuente
sudo
configurado, pero de cualquier manera, el malware ahora tiene la contraseña requerida parasudo
, así que si el usuario tiene acceso de root, también lo tiene el malware.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. :)
fuente
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
Solo endurece tu
sudo
políticas tanto como usted no confía en sus usuarios :)fuente
sudo
. Específicamente, estoy pensando en sistemas de escritorio normales.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.
fuente
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:
/etc/sudoers
expediente.visudo
comando para editar y modificar los privilegios de su archivo sudoers.Referencia: página de manual de Linux de sudoers y sudo. hombre sudoers
fuente