🐧Escalada de privilegios en Linux
Introducción a la escalada de privilegios en Linux
La cuenta raíz en los sistemas Linux proporciona acceso administrativo completo al sistema operativo. Durante una evaluación, es posible que obtenga un shell con pocos privilegios en un host Linux y deba realizar una escalada de privilegios a la cuenta raíz. Si comprometemos por completo el host, podremos capturar el tráfico y acceder a archivos confidenciales, que pueden usarse para acceder más dentro del entorno. Además, si la máquina Linux está unida a un dominio, podemos obtener el hash NTLM y comenzar a enumerar y atacar Active Directory.
Enumeración
La enumeración es la clave para la escalada de privilegios. Existen varios scripts auxiliares (como LinEnum ) para ayudar con la enumeración. Sin embargo, también es importante comprender qué información buscar y poder realizar la enumeración manualmente. Cuando obtenga acceso inicial al host a través del shell, es importante verificar varios detalles clave.
Versión del S.O
Conocer la distribución (Ubuntu, Debian, FreeBSD, Fedora, SUSE, Red Hat, CentOS, etc.) le dará una idea de los tipos de herramientas que pueden estar disponibles. Esto también identificará la versión del sistema operativo para la que puede haber exploits públicos disponibles.
Versión del Kernel
Al igual que con la versión del sistema operativo, puede haber exploits públicos que tengan como objetivo una vulnerabilidad en una versión específica del kernel. Los exploits del kernel pueden provocar inestabilidad del sistema o incluso un bloqueo total. Tenga cuidado al ejecutarlos en cualquier sistema de producción y asegúrese de comprender completamente el exploit y las posibles ramificaciones antes de ejecutar uno.
Servicios corriendo
Es importante saber qué servicios se están ejecutando en el host, especialmente aquellos que se ejecutan como root. Un servicio mal configurado o vulnerable que se ejecute como root puede ser una victoria fácil para la escalada de privilegios. Se han descubierto fallas en muchos servicios comunes como Nagios, Exim, Samba, ProFTPd, etc. Existen PoC de explotación pública para muchos de ellos, como CVE-2016-9566, una falla de escalada de privilegios local en Nagios Core < 4.2.4.
Lista de procesos actuales
Paquetes instalados y versiones
Al igual que con los servicios en ejecución, es importante comprobar si hay paquetes desactualizados o vulnerables que puedan aprovecharse fácilmente para la escalada de privilegios. Un ejemplo es Screen, que es un multiplexor de terminal común (similar a tmux). Le permite iniciar una sesión y abrir muchas ventanas o terminales virtuales en lugar de abrir varias sesiones de terminal. La versión 4.05.00 de Screen sufre una vulnerabilidad de escalada de privilegios que puede aprovecharse fácilmente para escalar privilegios.
Usuarios logueados
Saber qué otros usuarios están conectados al sistema y qué están haciendo puede brindar mayor información sobre posibles movimientos laterales locales y rutas de escalada de privilegios.
Lista de procesos actuales
Directorios de usuario
¿Se puede acceder a los directorios personales de otros usuarios? Las carpetas personales de los usuarios también pueden contener claves SSH que se pueden utilizar para acceder a otros sistemas o scripts y archivos de configuración que contienen credenciales. No es raro encontrar archivos que contienen credenciales que se pueden utilizar para acceder a otros sistemas o incluso para ingresar al entorno de Active Directory.
Enumeración del directorio /home
Podemos revisar directorios de usuarios individuales y verificar si archivos como el .bash_history
si son legibles y contienen comandos interesantes, buscar archivos de configuración y verificar si podemos obtener copias de las claves SSH de un usuario.
Contenido del directorio de inicio del usuario
Si encuentra una clave SSH para su usuario actual, podría usarla para abrir una sesión SSH en el host (si SSH está expuesto externamente) y obtener una sesión estable y completamente interactiva. Las claves SSH también podrían aprovecharse para acceder a otros sistemas dentro de la red. Como mínimo, verifique la caché ARP para ver a qué otros hosts se está accediendo y haga una referencia cruzada de estas claves con cualquier clave privada SSH que se pueda utilizar.
Contenido del directorio SSH
Historial de Bash
También es importante comprobar el historial de bash de un usuario, ya que puede estar pasando contraseñas como argumento en la línea de comandos, trabajando con repositorios git, configurando tareas cron y más. Revisar lo que ha estado haciendo el usuario puede brindarle una idea considerable sobre el tipo de servidor en el que se encuentra y darle una pista sobre las rutas de escalada de privilegios.
Privilegios Sudo
¿Puede el usuario ejecutar cualquier comando como otro usuario o como root? Si no tiene credenciales para el usuario, es posible que no sea posible aprovechar los permisos de sudo. Sin embargo, a menudo las entradas de sudoer incluyen NOPASSWD
, lo que significa que el usuario puede ejecutar el comando especificado sin que se le solicite una contraseña. No todos los comandos, incluso los que podemos ejecutar como root, darán lugar a una escalada de privilegios. No es raro obtener acceso como un usuario con privilegios sudo completos, lo que significa que puede ejecutar cualquier comando como root. Emitir un comandosudo su
simple le otorgará inmediatamente una sesión de root.
Sudo - Lista de privilegios del usuario
Archivos de configuración
Los archivos de configuración pueden contener una gran cantidad de información. Vale la pena buscar nombres de usuario, contraseñas y otros secretos en todos los archivos que terminan en extensiones como .conf
y .config
Archivo Shadow legible
Si el archivo /etc/shadow
es legible, podrá recopilar los hashes de contraseñas de todos los usuarios que tengan una contraseña configurada. Si bien esto no garantiza un mayor acceso, estos hashes pueden estar sujetos a un ataque de fuerza bruta sin conexión para recuperar la contraseña en texto simple.
Password Hashes en /etc/passwd
En ocasiones, verás hashes de contraseñas directamente en el archivo /etc/passwd
. Todos los usuarios pueden leer este archivo y, al igual que con los hashes en el archivo shadow
, estos pueden estar sujetos a un ataque de descifrado de contraseñas sin conexión. Esta configuración, si bien no es común, a veces se puede ver en dispositivos integrados y enrutadores.
Cron Jobs
Los trabajos cron en sistemas Linux son similares a las tareas programadas de Windows. A menudo se configuran para realizar tareas de mantenimiento y copia de seguridad. Junto con otras configuraciones incorrectas, como rutas relativas o permisos débiles, pueden aprovecharse para aumentar los privilegios cuando se ejecuta el trabajo cron programado.
Sistemas de archivos desmontados y unidades adicionales
Si descubre y puede montar una unidad adicional o un sistema de archivos desmontado, es posible que encuentre archivos confidenciales, contraseñas o copias de seguridad que se puedan aprovechar para aumentar los privilegios.
Sistemas de archivos y unidades adicionales
Permisos SETUID y SETGID
Los archivos binarios se configuran con estos permisos para permitir que un usuario ejecute un comando como root, sin tener que otorgarle acceso de nivel root. Muchos archivos binarios contienen funciones que se pueden aprovechar para obtener un shell root.
Directorios con permisos de escritura
Es importante descubrir qué directorios son editables si necesita descargar herramientas al sistema. Puede descubrir un directorio editable donde un trabajo cron coloca archivos, lo que proporciona una idea de la frecuencia con la que se ejecuta el trabajo cron y podría usarse para elevar privilegios si el script que ejecuta el trabajo cron también es editable.
Encontrar directorios en los que se pueda escribir
Archivos con permisos de escritura
¿Hay scripts o archivos de configuración que puedan ser modificados por todo el mundo? Si bien alterar los archivos de configuración puede ser extremadamente destructivo, puede haber casos en los que una modificación menor pueda abrir más acceso. Además, cualquier script que se ejecute como root mediante trabajos de cron se puede modificar ligeramente para agregar un comando.
Buscar archivos editables
Cheatsheet
Comando | Descripción |
| SSH al objetivo del laboratorio |
| Ver procesos ejecutándose como root |
| Ver usuarios registrados |
| Ver directorios personales de usuarios |
| Comprobar las claves SSH para el usuario actual |
| Verificar el historial de Bash del usuario actual |
| ¿Puede el usuario ejecutar algo como otro usuario? |
| Comprobar trabajos cron diarios |
| Comprobar si hay sistemas de archivos o unidades desmontados |
| Encuentre directorios que permitan la escritura a nivel mundial |
| Buscar archivos que puedan ser escritos por todo el mundo |
| Comprueba la versión del Kernel |
| Compruebe la versión del sistema operativo |
| Compilar un exploit escrito en C |
| Compruebe la versión instalada de |
| Ver procesos en ejecución con |
| Buscar binarios con el bit SUID establecido |
| Buscar binarios con el bit SETGID establecido |
| Priv esc con |
| Verifique el contenido de la variable PATH del usuario actual |
| Añade un |
| Buscar archivos de configuración |
| Ver los objetos compartidos requeridos por un binario |
| Escalar privilegios usando |
| Comprobar el RUNPATH de un binario |
| Compiló una biblioteca compartida |
| Iniciar el proceso de inicialización de LXD |
| Importar una imagen local |
| Iniciar un contenedor LXD privilegiado |
| Montar el sistema de archivos del host en un contenedor |
| Iniciar el contenedor |
| Mostrar la lista de exportaciones de NFS |
| Montar un recurso compartido NFS localmente |
| Se creó un |
| Realizar una auditoría del sistema con |
Seguimos adelante
Como hemos visto, existen varias técnicas de enumeración manual que podemos llevar a cabo para obtener información que sirva de base para diversos ataques de escalada de privilegios. Existe una variedad de técnicas que se pueden aprovechar para realizar una escalada de privilegios local en Linux, que abordaremos en las siguientes secciones.
Última actualización