🐧Linux - Capabilities
Las capacidades o capabilities
de Linux son una característica de seguridad del sistema operativo Linux que permite otorgar privilegios específicos a los procesos, lo que les permite realizar acciones específicas que de otro modo estarían restringidas. Esto permite un control más preciso sobre qué procesos tienen acceso a ciertos privilegios, lo que lo hace más seguro que el modelo tradicional de Unix de otorgar privilegios a usuarios y grupos.
Sin embargo, como cualquier característica de seguridad, las capacidades de Linux no son invulnerables y pueden ser explotadas por atacantes. Una vulnerabilidad común es el uso de capacidades para otorgar privilegios a procesos que no están adecuadamente aislados o aislados de otros procesos, lo que nos permite aumentar sus privilegios y obtener acceso a información confidencial o realizar acciones no autorizadas.
Otra vulnerabilidad potencial es el mal uso o uso excesivo de las capacidades, lo que puede provocar que los procesos tengan más privilegios de los que necesitan. Esto puede generar riesgos de seguridad innecesarios, ya que podríamos explotar estos privilegios para obtener acceso a información sensible o realizar acciones no autorizadas.
En general, las capacidades de Linux pueden ser una característica de seguridad práctica, pero deben usarse con cuidado y correctamente para evitar vulnerabilidades y posibles ataques.
La configuración de capacidades implica el uso de las herramientas y los comandos adecuados para asignar capacidades específicas a ejecutables o programas. En Ubuntu, por ejemplo, podemos utilizar el comando setcap
para configurar capacidades para ejecutables específicos. Este comando nos permite especificar la capacidad que queremos configurar y el valor que queremos asignar.
Por ejemplo, podríamos usar el siguiente comando para establecer la capacidad cap_net_bind_service
de un ejecutable:
Establecer capacidades
Cuando se establecen capacidades para un binario, significa que el binario podrá realizar acciones específicas que no podría realizar sin las capacidades. Por ejemplo, si se establece la capacidad cap_net_bind_service
para un binario, este podrá vincularse a puertos de red, lo cual es un privilegio que normalmente está restringido.
Algunas capacidades, como cap_sys_admin
, que permite a un ejecutable realizar acciones con privilegios administrativos, pueden ser peligrosas si no se utilizan adecuadamente. Por ejemplo, podríamos explotarlas para escalar sus privilegios, obtener acceso a información confidencial o realizar acciones no autorizadas. Por lo tanto, es fundamental configurar este tipo de capacidades para ejecutables aislados y en un entorno de pruebas adecuado y evitar otorgarlas innecesariamente.
Capacidad | Descripción |
| Permite realizar acciones con privilegios administrativos, como modificar archivos del sistema o cambiar configuraciones del sistema. |
| Permite cambiar el directorio raíz del proceso actual, permitiéndole acceder a archivos y directorios que de otra manera serían inaccesibles. |
| Permite conectarse a otros procesos y depurarlos, lo que potencialmente le permite obtener acceso a información confidencial o modificar el comportamiento de otros procesos. |
| Permite aumentar o disminuir la prioridad de los procesos, lo que potencialmente le permitirá obtener acceso a recursos que de otro modo estarían restringidos. |
| Permite modificar el reloj del sistema, lo que potencialmente le permite manipular marcas de tiempo o hacer que otros procesos se comporten de manera inesperada. |
| Permite modificar los límites de recursos del sistema, como el número máximo de descriptores de archivos abiertos o la cantidad máxima de memoria que se puede asignar. |
| Permite cargar y descargar módulos del kernel, lo que potencialmente le permite modificar el comportamiento del sistema operativo u obtener acceso a información confidencial. |
| Permite vincularse a puertos de red, lo que potencialmente le permite obtener acceso a información confidencial o realizar acciones no autorizadas. |
Cuando se ejecuta un binario con capacidades, puede realizar las acciones que permiten las capacidades. Sin embargo, no podrá realizar ninguna acción que no esté permitida por las capacidades. Esto permite un control más detallado de los privilegios del binario y puede ayudar a prevenir vulnerabilidades de seguridad y acceso no autorizado a información confidencial.
Al utilizar el setcap
comando para configurar las capacidades de un ejecutable en Linux, debemos especificar la capacidad que queremos configurar y el valor que queremos asignar. Los valores que utilicemos dependerán de la capacidad específica que estemos configurando y de los privilegios que queramos otorgar al ejecutable.
A continuación se muestran algunos ejemplos de valores que podemos usar con el comando setcap
, junto con una breve descripción de lo que hacen:
Valores de capacidad | Descripción |
| Este valor establece la capacidad especificada para el ejecutable, pero no otorga ningún privilegio. Esto puede resultar útil si queremos borrar una capacidad previamente establecida para el ejecutable. |
| Este valor otorga al ejecutable los privilegios efectivos y permitidos para la capacidad especificada. Esto permite que el ejecutable realice las acciones que permite la capacidad, pero no le permite realizar ninguna acción que no esté permitida por la capacidad. |
| Este valor otorga privilegios suficientes y heredables para la capacidad especificada al ejecutable. Esto permite que el ejecutable realice las acciones que permite la capacidad y que los procesos secundarios generados por el ejecutable hereden la capacidad y realicen las mismas acciones. |
| Este valor otorga los privilegios permitidos para la capacidad especificada al ejecutable. Esto permite que el ejecutable realice las acciones que permite la capacidad, pero no le permite realizar ninguna acción que no esté permitida por la capacidad. Esto puede ser útil si queremos otorgar la capacidad al ejecutable, pero evitar que la herede o permitir que los procesos secundarios la hereden. |
Se pueden utilizar varias capacidades de Linux para aumentar los privilegios de un usuario a root
, entre ellas:
Capacidad | Descripcion |
| Permite que un proceso establezca su ID de usuario efectivo, que puede usarse para obtener los privilegios de otro usuario, incluido el |
| Permite establecer su ID de grupo efectivo, que puede usarse para obtener los privilegios de otro grupo, incluido el grupo |
| Esta capacidad proporciona una amplia gama de privilegios administrativos, incluida la capacidad de realizar muchas acciones reservadas para el usuario |
| Permite omitir las comprobaciones de permisos de lectura, escritura y ejecución de archivos. |
Enumeración de capacidades
Es importante tener en cuenta que estas capacidades deben utilizarse con precaución y solo deben concederse a procesos de confianza, ya que pueden utilizarse de forma indebida para obtener acceso no autorizado al sistema. Para enumerar todas las capacidades existentes para todos los ejecutables binarios existentes en un sistema Linux, podemos utilizar el siguiente comando:
Este comando de una sola línea utiliza el comando find
para buscar todos los ejecutables binarios en los directorios donde se encuentran normalmente y luego utiliza el indicador -exec
para ejecutar el comando getcap
en cada uno, mostrando las capacidades que se han establecido para ese binario. La salida de este comando mostrará una lista de todos los ejecutables binarios en el sistema, junto con las capacidades que se han establecido para cada uno.
Explotación
Si obtuvimos acceso al sistema con una cuenta con privilegios bajos, entonces descubrimos la capacidad cap_dac_override
:
Explotación de capacidades
Por ejemplo, el binario /usr/bin/vim.basic
se ejecuta sin privilegios especiales, como con sudo
. Sin embargo, debido a que el binario tiene la capacidad cap_dac_override
establecida, puede aumentar los privilegios del usuario que lo ejecuta. Esto permitiría al evaluador de penetración obtener la capacidad cap_dac_override
y realizar tareas que requieren esta capacidad.
Echemos un vistazo al archivo /etc/passwd
donde se especifica el usuario :root
Podemos utilizar la capacidad cap_dac_override
del binario /usr/bin/vim
para modificar un archivo del sistema:
También podemos realizar estos cambios en un modo no interactivo:
Ahora, podemos ver que en esa línea ha desaparecido la x
, lo que significa que podemos usar el comando su
para iniciar sesión como root sin que se nos solicite la contraseña.
Caso práctico
Aumente los privilegios utilizando capacidades y lea el archivo flag.txt
en el directorio "/root
". Envíe su contenido como respuesta.
Al acceder vamos que no pertenecemos a ningún grupo especial ni podemos ejecutar sudo. Hacemos un getcap de /usr/bin/vim.basic
y confirmamos que tenemos bajos privilegios, ya que descubrimos la capacidad cap_dac_override
Podemos utilizar la capacidad cap_dac_override
del binario /usr/bin/vim
para modificar un archivo del sistema como /etc/passwd
:
Una vez que lo hemos modificado podemos cambiar al usuario root sin poner ninguna contraseña, y acceder a la flag dentro del directorio /root
:
Última actualización