Evitando el paso a una shell con sudo
Tal como hemos visto en los wargames de narnia es posible ejecutar una shell con unos privilegios superiores a los del usuario si tiene definido el bit suid o si usasemos sudo. Vamos a ver como deshabilitar el posible paso a una shell.
Para saber si podemos deshabilitar el exec podemo verlo mediante el siguiente comando:
# sudo -V | grep exe File containing dummy exec functions: /usr/libexec/sudo_noexec.so
En caso que no lo tengamos deberemos recompilar sudo con la opción with-noexec:
--with-noexec=PATH fully qualified pathname of sudo_noexec.so
Si lo tenemos habilitado simplemente deberemos editar el /etc/sudoers para añadir la opción de la misma forma que lo haríamos con la opción NOPASSWD:
jprats ALL=(ALL) NOEXEC: /bin/vi
A continuación podemos abrir el vi con sudo:
$ sudo vi
Al intentar ejecutar un comando con vi:
:!bash
Obtendremos un mensaje de error:
Cannot execute shell /bin/bash Press ENTER or type command to continue
Esto mismo ocurriría con cualquier binario que intentase realizar un exec ya que se ha substituido la familia de funciones exec mediante LD_PRELOAD:
# objdump -M intel -d /usr/libexec/sudo_noexec.so | grep "^[0-9]" 000005ac <_init>: 000005dc <__errno_location@plt-0x10>: 000005ec <__errno_location@plt>: 000005fc <__gmon_start__@plt>: 0000060c <__cxa_finalize@plt>: 00000620 <__fexecve-0xd0>: 000006f0 <__fexecve>: 00000720 <_fexecve>: 00000750 <fexecve>: 00000780 <__execve>: 000007b0 <_execve>: 000007e0 <execve>: 00000810 <__execvP>: 00000840 <_execvP>: 00000870 <execvP>: 000008a0 <__execvp>: 000008d0 <_execvp>: 00000900 <execvp>: 00000930 <__execv>: 00000960 <_execv>: 00000990 <execv>: 000009c0 <__execlp>: 000009f0 <_execlp>: 00000a20 <execlp>: 00000a50 <__execle>: 00000a80 <_execle>: 00000ab0 <execle>: 00000ae0 <__execl>: 00000b10 <_execl>: 00000b40 <execl>: 00000ba8 <_fini>:
Relacionados
Imprimir
Deja un comentario: