
Herramienta automatizada de enriquecimiento de hallazgos de seguridad y evaluación de impacto para AWS. Enriquece los datos de vulnerabilidades con contexto de recursos, asociaciones y etiquetas para calcular puntuaciones de impacto contextual para una remediación priorizada.
MetaHub es una herramienta automatizada de enriquecimiento contextual de hallazgos de seguridad y evaluación de impacto para la gestión de vulnerabilidades. Puede usarla con AWS Security Hub o cualquier escáner de seguridad compatible con ASFF. Deje de depender de severidades inútiles y cambie a definiciones de puntuación de impacto basadas en SU contexto.
MetaHub es una herramienta de seguridad de código abierto para la gestión de vulnerabilidades contextualizadas por impacto. Puede automatizar el proceso de contextualizar hallazgos de seguridad basados en su entorno y sus necesidades, SU contexto, identificar propietarios, y calcular una puntuación de impacto basada en ello que puede usar para definir priorización (¿por dónde empezar?) y automatizaciones como remediaciones, alertas o tickets. La herramienta es para entornos AWS y puede usarla con AWS Security Hub o cualquier escáner compatible con ASFF (como Prowler).
ℹ️ ¡Explore y amplíe los nuevos Paneles de MetaHub usando Powerpipe!
MetaHub describe su contexto conectándose a sus recursos afectados en sus cuentas afectadas. Puede describir información sobre su cuenta y organización de AWS, las etiquetas de los recursos afectados, eventos relacionados de CloudTrail, las configuraciones de sus recursos afectados y todas sus asociaciones: si está contextualizando un hallazgo de seguridad que afecta una instancia EC2, MetaHub no solo se conectará a esa instancia en sí, sino también a sus Roles IAM; desde allí, se conectará a las Políticas IAM asociadas a esos roles. Se conectará a los Grupos de Seguridad y analizará todas sus reglas, la VPC y las Subredes donde se ejecuta la instancia, los Volúmenes, los Grupos de Auto Scaling, y más. Puede aplicar filtros para automatizar la detección de otros recursos con las mismas propiedades y realizar investigaciones en profundidad.
Después de obtener toda la información de su contexto, MetaHub evaluará las condiciones de impacto para todos sus recursos: exposición, acceso, cifrado, estado, entorno, aplicación, y propietario y basado en esos cálculos y además de la información sobre los hallazgos de seguridad que afectan al recurso, todo junto, MetaHub generará una puntuación para cada hallazgo y recurso afectado.
Consulte el siguiente panel generado por MetaHub. Tiene los recursos afectados, agrupando todos los hallazgos de seguridad que los afectan junto con la severidad original de cada hallazgo. Después, tiene la puntuación y todos los criterios que MetaHub evaluó para generar esa puntuación. Toda esta información es filtrable, ordenable, agrupable, descargable y personalizable.
El siguiente es el resultado JSON salida para una instancia EC2; observe cómo MetaHub organiza toda la información sobre su contexto junta, bajo asociaciones, config, etiquetas, cuenta y cloudtrail, y finalmente la clave impacto con la puntuación y todos los criterios evaluados para generar esa puntuación.
MetaHub proporciona una variedad de formas de listar, gestionar y generar salidas de sus hallazgos de seguridad para investigación, supresión, actualización e integración con otras herramientas. Está diseñado para usarse como herramienta CLI o dentro de flujos de trabajo automatizados, como funciones AWS Lambda. Soporta diferentes salidas, algunas de ellas json programático, pero también potentes html, xlsx y csv que puede personalizar.
Si usa AWS Security Hub, MetaHub se integra sin problemas y extiende sus funcionalidades. Puede usarse como una Acción Personalizada de Security Hub, soporta filtros de AWS Security Hub, puede gestionar el estado del flujo de trabajo de sus hallazgos, e incluso puede enriquecer sus hallazgos directamente en AWS Security Hub.
MetaHub está diseñado para usarse con AWS y soporta configuraciones multi-cuenta. Puede ejecutar la herramienta desde cualquier entorno asumiendo roles en su cuenta master de AWS Security Hub y sus cuentas child/servicio. Esto le permite obtener datos agregados de múltiples cuentas usando su implementación multi-cuenta de AWS Security Hub mientras también obtiene y enriquece esos hallazgos con datos de las cuentas donde se ejecutan sus recursos afectados. Consulte Configuración de Security Hub para más información.
Lea sus hallazgos de seguridad desde AWS Security Hub con los filtros predeterminados y ejecuta las opciones de contexto predeterminadas:```bash ./metahub
Lee un hallazgo de seguridad específico (filtrado por ID) de AWS Security Hub y ejecuta las opciones de contexto predeterminadas:```bash
./metahub --sh-filters Id=arn:aws:securityhub:us-east-1:123456789012:security-control/CloudFront.1/finding/8bd4d049-dcbc-445b-a5d1-595d8274b4c1
Lee todos los hallazgos de seguridad que afectan a un recurso que están ACTIVE (filtrados por ResourceId y RecordState) de AWS Security Hub y ejecuta las opciones de contexto predeterminadas:```bash ./metahub --sh-filters RecordState=ACTIVE ResourceId=arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0b7d243ff90ebc03e
Lee todos los hallazgos de seguridad que afectan a una cuenta de AWS que están ACTIVOS (filtrados por AwsAccountId y RecordState) para recursos con una etiqueta `Environment` y el valor `stg` y ejecuta las opciones de contexto `config` y `tags`:```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags
Lee tus hallazgos de seguridad desde Prowler como un archivo de entrada y ejecuta las opciones de contexto predeterminadas:```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff
Lee tus hallazgos de seguridad de Powerpipe como un archivo de entrada y ejecuta las opciones de contexto predeterminadas:```bash
powerpipe benchmark run aws_compliance.benchmark.all_controls --export asff
./metahub --inputs file-asff --input-asff /path/to/powerpipe-findings.json.asff
Lee tus hallazgos de seguridad de Trivy como un archivo de entrada y ejecuta las opciones de contexto predeterminadas:```bash export AWS_REGION=us-west-1 export AWS_ACCOUNT_ID=012345678901 trivy image --format template --template "@contrib/asff.tpl" -o trivy-findings.json.asff public.ecr.aws/n2p8q5p4/metahub:stable ./metahub --inputs file-asff --input-asff /path/to/trivy-findings.json.asff
# Context
En **MetaHub**, el **contexto** se refiere a información sobre los recursos afectados como su **configuración**, **asociaciones**, **logs**, **tags** y **cuenta**.
MetaHub no se detiene en el recurso afectado, sino que también analiza cualquier recurso asociado o adjunto. Por ejemplo, si un hallazgo de seguridad existe en un Security Group, **MetaHub** analizará el Security Group y todo lo demás asociado a él, como las instancias EC2 que lo usan. Para cada recurso asociado, **MetaHub** obtendrá su contexto. Si el Security Group está adjunto a una instancia EC2, **MetaHub** analizará la instancia y todas sus asociaciones, como los roles y políticas de IAM. A partir de un único hallazgo de seguridad en un Security Group, **MetaHub** obtendrá el contexto del Security Group, la instancia EC2, los roles de IAM y las políticas de IAM. Esto es crítico para comprender el impacto de sus hallazgos de seguridad.
El módulo **contexto** tiene cinco partes principales: [**config**](#config) (que incluye [**associations**](#associations)), [**tags**](#tags), [**cloudtrail**](#cloudtrail) y [**account**](#account). Por defecto solo **config**, **tags** y **account** están habilitados, pero puede cambiar este comportamiento usando la opción `--context` (por ejemplo, use `--context config tags cloudtrail account` para habilitar todas las claves de contexto, o `--context config` para habilitar solo la clave de config y asociaciones):
## Config
Bajo la clave `config`, puede encontrar información importante de configuración del recurso afectado. Por ejemplo, si el recurso afectado es un bucket S3, encontrará información sobre su política de bucket, sus ACL, su configuración de cifrado y más. Si el recurso afectado es una instancia EC2, encontrará información sobre su clave, su IP pública y privada, sus metadatos y más. La información de configuración que **MetaHub** obtiene se define por tipo de recurso. Si desea agregar más información de configuración, consulte [contributing](#contributing).
Puede filtrar sus hallazgos basándose en las salidas de config usando la opción: `--mh-filters-config <key> {True/False}` (consulte [config filters](#config-filters)).
<details>
<summary>Ejemplo para una clave de configuración de bucket S3</summary>```json
"config": {
"resource_policy": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Test",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::metahub-bucket",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
}
}
},
]
},
"website_enabled": false,
"bucket_acl": [
{
"Grantee": {
"DisplayName": "gabriel.soltz",
"ID": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
],
"cannonical_user_id": "1234564bd76c6c64080717b68eafaa588b41706daaf22d3d0705b398bd7cbd57",
"public_access_block_enabled": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"account_public_access_block_enabled": false,
"public": false,
"bucket_encryption": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
},
"BucketKeyEnabled": false
}
]
},
Bajo la clave associations, encontrarás todos los recursos asociados del recurso afectado. Por ejemplo, si el recurso afectado es una Instancia EC2, encontrarás recursos como: Security Groups, IAM Roles, Volumes, VPC, Subnets, Auto Scaling Groups. Si el recurso afectado es un IAM Role, encontrarás recursos como IAM Policies, IAM Users, IAM Groups, y más. Cada vez que MetaHub encuentra una asociación, se conectará nuevamente al recurso asociado y obtendrá su propio contexto. Las asociaciones son clave para entender el contexto y el impacto de tus hallazgos de seguridad.
Puedes filtrar tus hallazgos basándote en las salidas de asociaciones usando la opción: --mh-filters-config <key> {True/False} (ver config filters).
Bajo la clave tags, encontrará todas las etiquetas asociadas al recurso afectado. MetaHub se basa en la API de Etiquetado de Grupos de Recursos de AWS para consultar las etiquetas asociadas a sus recursos. Tenga en cuenta que no todos los tipos de recursos de AWS admiten esta API. Puede consultar los servicios compatibles.
Las etiquetas son una parte crucial para comprender su contexto. Las estrategias de etiquetado suelen incluir:
Si sigue una estrategia de etiquetado adecuada, puede filtrar y generar resultados interesantes. Por ejemplo, podría listar todos los hallazgos relacionados con un equipo específico y proporcionar esos datos directamente a ese equipo.
Puede filtrar sus hallazgos basándose en las salidas de etiquetas usando la opción: --mh-filters-tags TAG=VALUE (consulte filtros de etiquetas).
En la clave cloudtrail, encontrará eventos críticos de CloudTrail relacionados con el recurso afectado, como eventos de creación. Los eventos de CloudTrail que buscamos se definen por tipo de recurso, y puede agregarlos, eliminarlos o cambiarlos editando el archivo de configuración resources.py. Por ejemplo, para un recurso afectado de tipo Security Group, MetaHub buscará los siguientes eventos: CreateSecurityGroup (evento de creación de Security Group) y AuthorizeSecurityGroupIngress (evento de autorización de regla de Security Group).
Bajo la clave account, encontrarás información sobre la cuenta donde se ejecuta el recurso afectado, como si es parte de una organización de AWS, información sobre sus contactos, y más.
El módulo de impacto en MetaHub se centra en comprender las 7 propiedades clave del recurso afectado: exposición, acceso, cifrado, estado, entorno, aplicación y propietario y combinando sus valores con los valores de todos los hallazgos de seguridad que afectan al mismo recurso y sus severidades para generar una puntuación. La puntuación de impacto es un número entre 0 y 100, donde 100 es el mayor impacto.
Exposición evalúa cómo el recurso afectado está expuesto a otras redes. Por ejemplo, si el recurso afectado es efectivamente público o simplemente público, si es parte de una VPC, si tiene una IP pública o si está protegido por un firewall o un grupo de seguridad.
Acceso evalúa la capa de políticas de recursos. MetaHub verifica todas las políticas disponibles, incluyendo: políticas IAM administradas, políticas IAM en línea, políticas de recursos, ACL de Bucket, y cualquier asociación a otros recursos como Roles IAM cuyas políticas también son analizadas. Una política sin restricciones no es solo un problema en sí misma, sino que afecta a cualquier otro recurso que la esté utilizando.
Cifrado evalúa las diferentes capas de cifrado según cada tipo de recurso. Por ejemplo, para algunos recursos evalúa si la configuración de cifrado at_rest e in_transit están ambas habilitadas.
| Estados posibles | Valor |
|---|
Estado evalúa el estado del recurso afectado en términos de adjunción o funcionamiento. Por ejemplo, para una instancia EC2 evaluamos si el recurso está en ejecución, detenido o terminado, pero para recursos como volúmenes EBS y grupos de seguridad, evaluamos si esos recursos están adjuntados a algún otro recurso.
Environment evalúa el entorno donde se ejecuta el recurso afectado. Por defecto, MetaHub define 3 entornos: production, staging y development, pero puedes agregar, eliminar o modificar estos entornos según tus necesidades. MetaHub evalúa el entorno basándose en las etiquetas del recurso afectado, el ID de la cuenta o el alias de la cuenta. Puedes definir tus propias definiciones y estrategias de entornos en el archivo de configuración (Ver Personalizar Configuración).
Aplicación evalúa la aplicación de la que forma parte el recurso afectado. MetaHub se basa en la función myApplications de AWS, que se basa en la etiqueta awsApplication, pero puedes extender esta funcionalidad según tu contexto, por ejemplo definiendo otras etiquetas que uses para definir aplicaciones o servicios (como Service o cualquier otra), o basándote en el ID o alias de la cuenta. Puedes definir tus definiciones y estrategias de aplicación en el archivo de configuración (consulta Personalizar la configuración).
| Estados posibles | Valor | Descripción |
|---|---|---|
| 🔵 desconocido | - | No se pudo verificar el recurso para la aplicación. |
Propietario se centra en la detección de propiedad. Puede determinar el propietario del recurso afectado de varias maneras. Esta información se puede utilizar para asignar automáticamente un hallazgo de seguridad al propietario correcto, escalarlo o tomar decisiones basadas en esta información. Una forma automatizada de determinar el propietario de un recurso es crítica para los equipos de seguridad. Les permite centrarse en los problemas más críticos y asignarlos lo más rápido posible a las personas adecuadas en flujos de trabajo automatizados. Puede definir sus definiciones y estrategias de propietario en el archivo de configuración (Consulte Customizing Configuration).
| Estados posibles | Valor | Descripción |
|---|---|---|
| 🔵 unknown | - | No se pudo verificar el propietario del recurso. |
Como parte del cálculo de la puntuación de impacto, también evaluamos la cantidad total de hallazgos de seguridad y sus gravedades que afectan al recurso. Usamos la siguiente fórmula para calcular esta métrica:```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)
Por ejemplo, si el recurso afectado tiene dos hallazgos que lo afectan, uno con severidad `HIGH` y otro con severidad `LOW`, el **Impact Findings Score** será:```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875
MetaHub lee sus hallazgos de seguridad de AWS Security Hub o cualquier escáner de seguridad compatible con ASFF. Luego consulta los recursos afectados directamente en la cuenta afectada para proporcionar contexto adicional. Basándose en ese contexto, calcula su impacto. Finalmente, genera diferentes salidas según sus necesidades.
Algunos casos de uso para MetaHub incluyen:
MetaHub utiliza archivos de configuración que le permiten personalizar el comportamiento de algunas comprobaciones, filtros predeterminados y más. Los archivos de configuración se encuentran en lib/config/.
Cosas que puede personalizar:
lib/config/configuration.py: Este archivo contiene la configuración predeterminada de MetaHub. Puede cambiar los filtros predeterminados, los modos de salida predeterminados, las definiciones de entorno y más.
lib/config/impact.py: Este archivo contiene los valores y sus pesos para los criterios de la fórmula de impacto. Puede modificar los valores y los pesos según sus necesidades.
lib/config/reources.py: Este archivo contiene definiciones para cada tipo de recurso, como qué eventos de CloudTrail buscar.
MetaHub es un programa Python3. Debe tener Python3 instalado en su sistema y los módulos Python requeridos descritos en el archivo requirements.txt.
Los requisitos se pueden instalar en su sistema manualmente (usando pip3) o usando un entorno virtual de Python (método sugerido).
git clone [email protected]:gabrielsoltz/metahub.gitcd metahubpython3 -m venv venv/metahubsource venv/metahub/bin/activatepip3 install -r requirements.txt./metahub -hdeactivateLa próxima vez, solo necesita los pasos 4 y 6 para usar el programa.
Alternativamente, puede ejecutar esta herramienta usando Docker.
MetaHub también está disponible como una imagen de Docker. Puede ejecutarlo directamente desde la imagen pública de Docker o compilarlo localmente.
Las etiquetas disponibles para los contenedores de MetaHub son las siguientes:
latest: en sincronía con la rama master<x.y.z>: puede encontrar los lanzamientos aquístable: esta etiqueta siempre apunta al último lanzamiento.Para ejecutar desde el registro público, puede ejecutar el siguiente comando:```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
## Credenciales de AWS y Docker
Si ya has iniciado sesión en la máquina host de AWS, puedes usar sin problemas las mismas credenciales dentro de un contenedor Docker. Puedes lograr esto pasando las variables de entorno necesarias al contenedor o montando el archivo de credenciales.
Por ejemplo, puedes ejecutar el siguiente comando:```sh
docker run -e AWS_DEFAULT_REGION -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h
Por otro lado, si no has iniciado sesión en la máquina anfitriona, deberás iniciar sesión nuevamente desde dentro del contenedor.
O también puedes construirlo localmente:```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h
# Ejecutar con Lambda
**MetaHub** está listo para usarse con Lambda/Serverless. Puede ejecutar MetaHub directamente en una función AWS Lambda sin necesidad de infraestructura adicional.
Ejecutar MetaHub en una función Lambda le permite automatizar su ejecución basándose en los activadores que haya definido. Por ejemplo, puede:
- Activar la función Lambda de MetaHub cada vez que haya un nuevo hallazgo de seguridad para enriquecer ese hallazgo de vuelta en AWS Security Hub.
- Activar la función Lambda de MetaHub cada vez que haya un nuevo hallazgo de seguridad para suprimir según el contexto.
- Activar la función Lambda de MetaHub para identificar al propietario afectado de un hallazgo de seguridad según el contexto y asignarlo usando sus sistemas internos.
- Activar la función Lambda de MetaHub para crear un ticket con contexto enriquecido.
## Desplegar Lambda
El código de Terraform para desplegar la función Lambda se proporciona en la carpeta `terraform/`.
Simplemente ejecute los siguientes comandos:```sh
cd terraform
terraform init
terraform apply
El código creará un archivo zip para el código de Lambda y un archivo zip para las dependencias de Python que usaremos como capa de Lambda. También creará la función Lambda y todos los recursos necesarios.
El código de Terraform también creará una acción personalizada de Security Hub y una regla de EventBridge para activar la función Lambda cuando se ejecute la acción personalizada. Ver abajo.
Puede personalizar las opciones de MetaHub para su lambda editando el archivo lib/lambda.py. Puede cambiar las opciones predeterminadas de MetaHub, como los filtros, las opciones Meta* y más.
Terraform creará los permisos mínimos requeridos para que la función Lambda se ejecute localmente (en la misma cuenta). Si desea que su Lambda asuma un rol en otras cuentas (por ejemplo, necesitará esto si está ejecutando la Lambda en la cuenta maestra de Security Hub que está agregando hallazgos de otras cuentas), deberá especificar el rol a asumir, agregando la opción --mh-assume-role en la configuración de la función Lambda (consulte el paso anterior) y agregando la política correspondiente para permitir que la Lambda asuma ese rol en el rol de lambda.
MetaHub se puede ejecutar como una acción personalizada de Security Hub. Esto le permite ejecutar MetaHub directamente desde la consola de Security Hub para un hallazgo seleccionado o para un conjunto seleccionado de hallazgos.
La acción personalizada activará entonces una función Lambda que ejecutará MetaHub para los hallazgos seleccionados.
Cuando active la Lambda usando la acción personalizada de Security Hub, la lambda leerá los hallazgos seleccionados para su contexto y se ejecutará una vez por cada hallazgo. De forma predeterminada, no se tomará ninguna acción sobre los hallazgos, pero puede cambiar este comportamiento. Consulte Personalizar el comportamiento de Lambda.
La acción personalizada de Security Hub se despliega como parte del código de Terraform. Consulte Despliegue de Lambda para más información.
Asegúrese de tener configuradas las credenciales de AWS en su máquina local (o desde donde ejecutará MetaHub).
Por ejemplo, puede usar la opción aws configure.```sh
aws configure
O puedes exportar tus credenciales al entorno.```sh
export AWS_DEFAULT_REGION="us-east-1"
export AWS_ACCESS_KEY_ID= "ASXXXXXXX"
export AWS_SECRET_ACCESS_KEY= "XXXXXXXXX"
export AWS_SESSION_TOKEN= "XXXXXXXXX"
Si está ejecutando MetaHub para una configuración de una sola cuenta de AWS (AWS Security Hub no agrega hallazgos de diferentes cuentas), no necesita usar opciones adicionales; MetaHub utilizará las credenciales de su entorno. Aun así, si su diseño de IAM lo requiere, es posible iniciar sesión y asumir un rol en la misma cuenta en la que inició sesión. Simplemente use las opciones --sh-assume-role para especificar el rol y --sh-account con el mismo ID de cuenta de AWS donde inició sesión.
--sh-region: La región de AWS donde se ejecuta Security Hub. Si no especifica una región, se utilizará la configurada en su entorno. Si está utilizando la agregación entre regiones de AWS Security Hub, debe usar esa región como la opción --sh-region para poder recuperar todos los hallazgos juntos.
--sh-account y --sh-assume-role: El ID de cuenta de AWS donde se ejecuta Security Hub y el rol de IAM de AWS para asumir en esa cuenta. Estas opciones son útiles cuando ha iniciado sesión en una cuenta de AWS diferente a la que se ejecuta AWS Security Hub o cuando ejecuta AWS Security Hub en una configuración de múltiples cuentas de AWS. Ambas opciones deben usarse juntas. El rol proporcionado debe tener suficientes políticas para obtener y actualizar hallazgos en AWS Security Hub (si es necesario). Si no especifica un --sh-account, MetaHub asumirá la cuenta en la que ha iniciado sesión.
--sh-profile: También puede proporcionar el nombre de su perfil de AWS para usar con AWS Security Hub. Al usar esta opción, no necesita especificar o ya que MetaHub usará las credenciales del perfil. Si está usando y , esas opciones tienen prioridad sobre .
Esta es la política IAM mínima que necesita para leer y escribir desde AWS Security Hub. Si no desea actualizar sus hallazgos con MetaHub, puede eliminar la acción securityhub:BatchUpdateFindings.```sh
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"security hub:GetFindings",
"security hub:ListFindingAggregators",
"security hub:BatchUpdateFindings",
"iam:ListAccountAliases"
],
"Resource": [
"*"
]
}
]
}
# Configuración del Contexto
Si está ejecutando MetaHub para una configuración de múltiples cuentas de AWS (AWS Security Hub está agregando hallazgos de múltiples cuentas de AWS), debe proporcionar el rol a asumir para las consultas de Context porque los recursos afectados no están en la misma cuenta de AWS que los hallazgos de AWS Security Hub. El `--mh-assume-role` se usará para conectarse directamente con los recursos afectados en la cuenta afectada. Este rol necesita tener suficientes políticas para poder describir recursos.
## Política IAM para Context
La política mínima necesaria para context incluye la política administrada `arn:aws:iam::aws:policy/SecurityAudit` y las siguientes acciones:
- `tag:GetResources`
- `lambda:GetFunction`
- `lambda:GetFunctionUrlConfig`
- `cloudtrail:LookupEvents`
- `account:GetAlternateContact`
- `organizations:DescribeAccount`
- `iam:ListAccountAliases`
# Entradas
MetaHub puede leer hallazgos de seguridad directamente desde AWS Security Hub usando su API. Si no usa Security Hub, puede usar cualquier escáner compatible con ASFF. La mayoría de los escáneres de seguridad en la nube admiten el formato ASFF, como Prolwer, Steampipe, Trivy y más.
Si desea leer desde un archivo ASFF de entrada, debe usar la opción (`--inputs file-asff`) y proporcionar la ruta al archivo. Puede proporcionar varios archivos separados por un espacio.:```sh
./metahub.py --inputs file-asff --input-asff path/to/the/file.json.asff path/to/the/file2.json.asff
También puede combinar los hallazgos de AWS Security Hub con archivos ASFF de entrada especificando ambas entradas (--inputs file-asff securityhub). MetaHub procesará todos los hallazgos juntos y dará como resultado una única salida.:```sh
./metahub.py --inputs file-asff securityhub --input-asff path/to/the/file.json.asff
Cuando se usa un archivo como entrada, no se puede usar la opción `--sh-filters` para filtrar hallazgos, ya que esta opción depende de la API de AWS para el filtrado. No se pueden usar las opciones `--update-findings` o `--enrich-findings` porque esos hallazgos no están en AWS Security Hub. Si se están leyendo ambas fuentes al mismo tiempo, solo se actualizarán los hallazgos de AWS Security Hub.
MetaHub también implementa algunos **mecanismos de corrección** para el formato ASFF, cuando no están formateados correctamente. Este es un enfoque de mejor esfuerzo para hacer que el ASFF sea lo más útil posible, pero no es perfecto y debe corregirse en el escáner de origen.
- Si la clave `Region` falta en los Recursos y en el Nivel Raíz, MetaHub calculará la región basándose en el ARN del recurso afectado.
- Si el archivo ASFF no está configurando correctamente el Tipo de Recurso ASFF, MetaHub lo calculará basándose en el ARN del recurso afectado utilizando la librería [aws-arn](https://github.com/gabrielsoltz/aws-arn)
- Si falta cualquier otro campo como `SeverityLabel`, `Workflow`, `RecordState`, `Compliance`, `Id`, `ProductArn` o `StandardsControlArn`, MetaHub los establecerá como `Unknown`.
# Salidas
**MetaHub** puede generar diferentes salidas programáticas y visuales. Por defecto, todos los modos de salida están habilitados: `json-short`, `json-full`, `json-statistics`, `json-inventory`, `html`, `csv` y `xlsx`. Si solo desea generar un modo de salida específico, puede usar la opción `--output-modes` con el modo de salida deseado. Las salidas se guardarán en la carpeta `outputs/` con la fecha de ejecución.
Por ejemplo, si solo desea generar la salida `json-short`, puede usar:```sh
./metahub.py --output-modes json-short
Si quieres generar las salidas json-short, json-full y html, puedes usar:```sh
./metahub.py --output-modes json-short json-full html
**MetaHub** organiza todos los hallazgos de seguridad que afectan al mismo recurso bajo la clave `findings` en un intento de evitar Shadowing (cuando dos verificaciones se refieren al mismo problema, pero una de una manera más genérica que la otra) y Duplication (cuando se usa más de un escáner y se obtiene el mismo problema de más de uno.). Puede ver este comportamiento claramente en las salidas `json-short`, `json-full` y `html`.
- [JSON](#json)
- [HTML](#html)
- [CSV](#csv)
- [XLSX](#xlsx)
- [SQLite](#sqlite)
## JSON
> :info: Para explorar una salida JSON de forma interactiva, puede usar la herramienta [fx](https://github.com/antonmedv/fx).
### JSON-Full
Muestra el recurso afectado usando su ARN como clave y los hallazgos que lo afectan como una lista bajo la clave `findings`. Además de los hallazgos, también obtendrá las siguientes claves: `ResourceType`, `Region`, `AwsAccountId`, `associations`, `config`, `tags`, `account`, `cloudtrail`, y `impact`.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
{
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)": { --> The finding title
"SeverityLabel": "HIGH", --> The finding severity label
"Workflow":{ --> The finding workflow
"Status": "NEW",
},
"RecordState": "ACTIVE", --> The finding record state
"Compliance":{ --> The finding compliance
"Status": "FAILED",
},
"Id": "arn:aws:securityhub:eu-west-1:123456789012:security-control/EC2.8/finding/a1d4f19f-453e-4c3c-b486-8443c73e84f1",
"ProductArn": "arn:aws:securityhub:eu-west-1::product/aws/securityhub",
}
},
{"EC2 instances should be managed by AWS Systems Manager": {...}}, --> Another finding title
{"EC2 instances should not have a public IPv4 address": {...}} --> Another finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
Muestra el recurso afectado utilizando su ARN como clave y los hallazgos que lo afectan como una lista bajo la clave findings. Además de los hallazgos, también obtendrá las siguientes claves: ResourceType, Region, AwsAccountId, associations, config, tags, account, cloudtrail, y impact.```json
"arn:aws:ec2:eu-west-1:1234567890:instance/i-0a40b2be25dbac0ac": { --> The affected resource ARN
"findings": [ --> The findings affecting the resource
"EC2 instances should use Instance Metadata Service Version 2 (IMDSv2)", --> The finding title
"EC2 instances should be managed by AWS Systems Manager", --> The finding title
"EC2 instances should not have a public IPv4 address" --> The finding title
],
"ResourceType": "AwsEc2Instance", --> The affected resource type
"Region": "eu-west-1", --> The affected resource region
"AwsAccountId": "1234567890", --> The affected resource account id
"associations": { --> The associations of the affected resource
"security_groups": {}, --> The security groups associated with the affected resource
"iam_roles": {}, --> The IAM roles associated with the affected resource
"volumes": {}, --> The volumes associated with the affected resource
"autoscaling_groups": {}, --> The autoscaling groups associated with the affected resource
"vpcs": {}, --> The VPCs associated with the affected resource
"subnets": {}, --> The subnets associated with the affected resource
},
"config": { --> The configuration of the affected resource (based on it's type)
"public_ip": "200.200.200.200", --> The public IP of the affected resource, if any
"private_ip": "10.10.10.10", --> The private IP of the affected resource, if any
"key": "ssh-key", --> The key used for the affected resource, if any
"metadata_options": { --> The metadata options of the affected resource, if any
"State": "applied",
"HttpTokens": "required",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled",
"HttpProtocolIpv6": "disabled",
"InstanceMetadataTags": "disabled"
},
},
"tags": { --> The tags of the affected resource
"Name": "test", --> The tag key and value
"Env": "prod",
"awsApplication": "arn:aws:resource-groups:eu-west-1:1234567890:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2"
},
"account": { --> The account of the affected resource
"Alias": "prod", --> The account alias
"AlternateContact": {}, --> The alternate contact of the account, if any
"Organizations": { --> The organization of the account, if any
"Id": "o-1234567890",
"Arn": "arn:aws:organizations::1234567890:organization/o-1234567890/o-1234567890",
"MasterAccountId": "1234567890",
"MasterAccountArn": "arn:aws:organizations::1234567890:account/o-1234567890/1234567890",
"MasterAccountEmail": "",
"Details": {
"ParentId": "p-k1234567890",
"ParentType": "ROOT",
"OU": "ROOT",
"Policies": { --> The policies of the account, if any
"p-FullAWSAccess": {...} --> The policy name and policy
}
}
},
},
"cloudtrail": { --> The CloudTrail events affecting the affected resource
"RunInstances": { --> The CloudTrail event name
"Username": "test", --> The username of the event, if any
"EventTime": "2021-01-01T00:00:00Z",
"EventId": "12345678-1234-1234-1234-123456789012",
}
},
"impact": { --> The impact of the affected resource
"exposure": {...}, --> The exposure impact
"access": {...}, --> The access impact
"encryption": {...}, --> The encryption impact
"status": {...}, --> The status impact
"environment": {...}, --> The environment impact
"application": {...}, --> The application impact
"owner": {...}, --> The owner impact
"findings": {...}, --> The findings impact
"score": {...} --> The total impact score
}
}
### JSON-Inventory
Muestra una lista de todos los recursos con su ARN.```json
[
"arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated",
"arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated"
]
Muestra estadísticas para cada campo/valor. En la salida, verá cada campo/valor y la cantidad de ocurrencias; por ejemplo, la siguiente salida muestra estadísticas de seis hallazgos.```json { "Title": { "SageMaker.1 Amazon SageMaker notebook instances should not have direct internet access": 2, "SageMaker.2 SageMaker notebook instances should be launched in a custom VPC": 2, "SageMaker.3 Users should not have root access to SageMaker notebook instances": 2 }, "SeverityLabel": { "HIGH": 6 }, "Workflow": { "NEW": 6 }, "RecordState": { "ACTIVE": 6 }, "Compliance": { "FAILED": 6 }, "ProductArn": { "arn:aws:security hub:eu-west-1::product/aws/security hub": 3, "arn:aws:security hub:us-east-1::product/aws/security hub": 3 }, "ResourceType": { "AwsSageMakerNotebookInstance": 6 }, "AwsAccountId": { "obfuscated": 6 }, "Region": { "eu-west-1": 3, "us-east-1": 3 }, "ResourceId": { "arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated": 3, "arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated": 3 } }
## HTML
Puede crear informes HTML enriquecidos de sus hallazgos, añadiendo su contexto como parte de ellos.
Los informes HTML son interactivos de varias maneras:
- Puede añadir/eliminar columnas.
- Puede ordenar y filtrar por cualquier columna.
- Puede autofiltrar por cualquier columna.
- Puede agrupar/desagrupar hallazgos.
- También puede descargar esos datos a xlsx, CSV, HTML y JSON.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/21d785d2413698ed7cb3e9dc7e9b51dc6550395a598d777abc9fc358f8a23573.png" alt="ejemplo-html"/>
</p>
## CSV
Puede crear informes CSV de sus hallazgos, añadiendo su contexto como parte de ellos.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/66f15350123702e1cc317e47938401853bdcb1d86dad0ad4e48e73f15e00dd76.png" alt="ejemplo-csv"/>
</p>
## XLSX
Similar a CSV pero con más opciones de formato.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/953a77917dc5b06e5185e6cb882ba7e711d785861e184599f10cd472efc42db9.png" alt="ejemplo-xlsx"/>
</p>
## Personalizar salidas HTML, CSV o XLSX
Puede personalizar qué claves de contexto desglosar como columnas para sus salidas HTML, CSV y XLSX usando las opciones `--output-tag-columns` y `--output-config-columns` (como una lista de columnas). Si las claves que especificó no existen para el recurso afectado, estarán vacías. También puede configurar estas columnas por defecto en el archivo de configuración (Véase [Personalización de la configuración](#customizing-configuration)).
Por ejemplo, puede generar una salida HTML con Tags y añadir "Owner" y "Environment" como columnas a su informe usando:```sh
./metahub --output-modes html --output-tag-columns Owner Environment
MetaHub puede guardar los hallazgos y el contexto en una base de datos SQLite. Esta base de datos se puede utilizar para análisis posteriores, informes e integración con otras herramientas, como Powerpipe. La base de datos se guardará en la carpeta outputs/ con la fecha de ejecución y la extensión .db.
Puedes usar la base de datos SQLite generada por MetaHub con Powerpipe. Puedes encontrar el mod de MetaHub PowerPipe en la carpeta powerpipe/.
Para usarlo, necesitas tener Powerpipe instalado en tu sistema.
Una vez instalado, puedes ejecutar el siguiente comando:```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db
### Construye tus propios paneles
Construir paneles con Powerpipe es super fácil y poderoso. Puedes consultar la [documentación de Powerpipe](https://powerpipe.io/docs) para más información.
A continuación encontrarás las tablas disponibles en la base de datos SQLite.
#### Recursos
| Column Name | Data Type | Descripción |
| ------------------------------- | --------- | ----------------------------------------------------------------------------------------------- |
| resource_arn | VARCHAR | El nombre de recurso de Amazon (ARN) del recurso, que sirve como clave primaria. |
| resource_type | VARCHAR | El tipo del recurso. |
| resource_region | VARCHAR | La región donde se encuentra el recurso. |
| resource_account_id | VARCHAR | El ID de cuenta asociado al recurso. Clave foránea que referencia a accounts(account_id). |
| resource_account_alias | VARCHAR | El alias de la cuenta asociada al recurso. |
| resource_tags | TEXT | Etiquetas asociadas al recurso. |
| resource_exposure | VARCHAR | El nivel de exposición del recurso. |
| resource_access | VARCHAR | El nivel de acceso del recurso. |
| resource_encryption | VARCHAR | El estado de cifrado del recurso. |
| resource_status | VARCHAR | El estado actual del recurso. |
| resource_application | VARCHAR | La aplicación asociada al recurso. |
| resource_environment | VARCHAR | El entorno (ej., producción, staging) en el que se encuentra el recurso. |
| resource_owner | VARCHAR | El propietario del recurso. |
| resource_score | INTEGER | Una puntuación asociada al recurso. |
| resource_findings_score | INTEGER | Una puntuación basada en hallazgos asociados al recurso. |
| resource_findings_critical | INTEGER | El número de hallazgos críticos. |
| resource_findings_high | INTEGER | El número de hallazgos de gravedad alta. |
| resource_findings_medium | INTEGER | El número de hallazgos de gravedad media. |
| resource_findings_low | INTEGER | El número de hallazgos de gravedad baja. |
| resource_findings_informational | INTEGER | El número de hallazgos informativos. |
#### Hallazgos
| Column Name | Data Type | Descripción |
| ------------------------ | --------- | ------------------------------------------------------------------- |
| finding_id | VARCHAR | El identificador único del hallazgo, que sirve como clave primaria. |
| finding_title | VARCHAR | El título del hallazgo. |
| finding_severity | VARCHAR | La gravedad del hallazgo. |
| finding_workflowstatus | VARCHAR | El estado del flujo de trabajo del hallazgo. |
| finding_recordstate | VARCHAR | El estado de registro del hallazgo. |
| finding_compliancestatus | VARCHAR | El estado de cumplimiento del hallazgo. |
| finding_productarn | VARCHAR | El ARN del producto que genera el hallazgo. |
| finding_resource_arn | VARCHAR | El ARN del recurso asociado. |
#### Cuentas
| Column Name | Data Type | Descripción |
| ------------------------------- | --------- | --------------------------------------------------------------------------------- |
| account_id | INTEGER | El identificador único de la cuenta, que sirve como clave primaria. |
| account_alias | VARCHAR | El alias de la cuenta. |
| account_organizations_id | VARCHAR | El ID de la organización a la que pertenece la cuenta. |
| account_organizations_arn | VARCHAR | El ARN de la organización a la que pertenece la cuenta. |
| account_master_account_id | VARCHAR | El ID de la cuenta maestra, si esta cuenta es parte de una organización de AWS. |
| account_master_account_email | VARCHAR | La dirección de correo electrónico asociada a la cuenta maestra. |
| account_alternate_contact_type | VARCHAR | El tipo de contacto alternativo (ej., facturación, seguridad). |
| account_alternate_contact_name | VARCHAR | El nombre del contacto alternativo. |
| account_alternate_contact_email | VARCHAR | La dirección de correo electrónico del contacto alternativo. |
| account_alternate_contact_phone | VARCHAR | El número de teléfono del contacto alternativo. |
| account_alternate_contact_title | VARCHAR | El título del contacto alternativo. |
# Filtros
Puedes filtrar los hallazgos de seguridad y los recursos que obtienes de tu origen de diferentes maneras y combinarlos todos para obtener exactamente lo que buscas, luego reutilizar esos filtros para crear automatizaciones, alertas, informes y más.
- [Filtrado de Security Hub](#security-hub-filtering)
- [Filtrado de Security Hub usando plantillas YAML](#security-hub-filtering-using-yaml-templates)
- [Filtros de Config](#config-filters)
- [Filtros de Etiquetas](#tags-filters)
- [Filtros de Impacto](#impact-filters)
## Filtrado de Security Hub
MetaHub admite el filtrado de hallazgos de AWS Security Hub en forma de filtrado `KEY=VALUE` para AWS Security Hub usando la opción `--sh-filters`, de la misma manera que filtrarías usando AWS CLI pero limitado a la comparación `EQUALS`. Si deseas otra comparación, usa la opción `--sh-template` [Filtrado de Security Hub usando plantillas YAML](#security-hub-filtering-using-yaml-templates).
Puedes consultar los filtros disponibles en [Documentación de AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/securityhub.html#SecurityHub.Client.get_findings)```sh
./metahub --sh-filters <KEY=VALUE>
Si no especificas ningún filtro, se aplican los filtros predeterminados: RecordState=ACTIVE WorkflowStatus=NEW
Pasar filtros usando esta opción restablece los filtros predeterminados. Si deseas añadir filtros a los predeterminados, debes especificarlos además de los predeterminados. Por ejemplo, añadiendo SeverityLabel a los filtros predeterminados:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW
Si un valor contiene espacios, debes especificarlo usando comillas dobles: `"ProductName="Security Hub"`
Puedes agregar tantos filtros diferentes como necesites a tu consulta y también agregar la misma clave de filtro con diferentes valores:
Ejemplos:
- Filtrar por Severidad (CRÍTICA):```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
- Filtrar por gravedad y cuenta de AWS:```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
- Filtrar por tipo de recurso de AWS:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
- Filtrar por Finding Id:```sh
./metahub --sh-filters Id="arn:aws:security hub:eu-west-1:01234567890:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.19/finding/01234567890-1234-1234-1234-01234567890"
## Filtrado de Security Hub usando plantillas YAML
**MetaHub** te permite crear filtros complejos usando archivos YAML (plantillas) que puedes reutilizar cuando sea necesario. Las plantillas YAML te permiten escribir filtros utilizando cualquier comparación compatible con AWS Security Hub como "EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS". Puedes llamar a tu archivo YAML usando la opción `--sh-template <<FILE>>`.
Puedes encontrar ejemplos en la carpeta [templates](https://github.com/gabrielsoltz/metahub/blob/HEAD/templates)
- Filtrar usando la plantilla YAML default.yml:```sh
./metaHub --sh-template templates/default.yml
MetaHub soporta filtros de Config (y asociaciones) usando KEY=VALUE donde el valor solo puede ser True o False usando la opción --mh-filters-config. Puedes usar tantos filtros como quieras y separarlos con espacios. Si especificas más de un filtro, obtendrás todos los recursos que coincidan con todos los filtros.
Los filtros de Config solo admiten valores True o False:
True o con datos.False o sin datos.Los filtros de Config se ejecutan después de los filtros de AWS Security Hub:
--sh-filters (o los predeterminados).--mh-filters-config, por lo que es un subconjunto de los recursos del punto 1.Ejemplos:
ResourceType=AwsEc2SecurityGroup) con hallazgos de AWS Security Hub que sean ACTIVE y NEW (RecordState=ACTIVE WorkflowStatus=NEW) solo si están asociados a interfaces de red (network_interfaces=True):```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-config network_interfaces=True- Obtener todos los S3 Buckets (`ResourceType=AwsS3Bucket`) solo si son públicos (`public=True`):```sh
./metahub --sh-filters ResourceType=AwsS3Bucket --mh-filters-config public=False
MetaHub admite filtros de etiquetas en la forma KEY=VALUE donde KEY es el nombre de la etiqueta y value es el valor de la etiqueta. Puede usar tantos filtros como desee y separarlos con espacios. Especificar múltiples filtros le dará todos los recursos que coincidan con al menos un filtro.
Los filtros de etiquetas se ejecutan después de los filtros de AWS Security Hub:
--sh-filters (o los predeterminados).--mh-filters-tags, por lo que es un subconjunto de los recursos del punto 1.Ejemplos:
ResourceType=AwsEc2SecurityGroup) con hallazgos de AWS Security Hub que sean ACTIVE y NEW (RecordState=ACTIVE WorkflowStatus=NEW) solo si están etiquetados con una etiqueta Environment y valor Production:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-tags Environment=Production## Filtros de Impacto
**MetaHub** soporta **filtros de impacto**, puedes filtrar por las [claves de impacto](#impact) calculadas por MetaHub. Puedes usar tantos filtros como quieras y separarlos usando espacios. Si especificas más de un filtro, obtendrás todos los recursos que coincidan con **todos** los filtros.
Ejemplos:
- Filtrar todos los Hallazgos de Seguridad que afecten a recursos con exposición calculada como efectivamente-pública:```sh
./metahub --mh-filters-impact exposure=effectively-public
# Security Hub Actions
## Actualización del Estado del Flujo de Trabajo
Puede usar **MetaHub** para actualizar el estado del flujo de trabajo de los hallazgos de AWS Security Hub (`NOTIFIED,` `NEW,` `RESOLVED,` `SUPPRESSED`) con un solo comando. Usará la opción `--update-findings` para actualizar todos los hallazgos de su consulta de MetaHub. Esto significa que puede actualizar uno, diez o miles de hallazgos con un solo comando. La API de AWS Security Hub está limitada a 100 hallazgos por actualización. Metahub dividirá sus resultados en fragmentos de 100 elementos para evitar esta limitación y actualizar sus hallazgos independientemente de la cantidad.
Por ejemplo, usando el siguiente filtro: `./metahub --sh-filters ResourceType=AwsSageMakerNotebookInstance RecordState=ACTIVE WorkflowStatus=NEW` encontré dos recursos afectados con tres hallazgos cada uno, lo que suma seis hallazgos de Security Hub en total.
Ejecutar el siguiente comando de actualización cambiará el estado del flujo de trabajo de esos seis hallazgos a `NOTIFIED` con una nota:```sh
./metahub --update-findings Workflow=NOTIFIED Note="Enter your ticket ID or reason here as a note that you will add to the finding as part of this update."
La opción --update-findings te pedirá confirmación antes de actualizar tus hallazgos. Puedes omitir esta confirmación usando la opción --no-actions-confirmation.
Puedes usar MetaHub para enriquecer tus hallazgos de AWS Security Hub con salidas de Contexto usando la opción --enrich-findings. Enriquecer tus hallazgos significa actualizarlos directamente en AWS Security Hub. MetaHub utiliza el campo UserDefinedFields para esto.
Al enriquecer tus hallazgos directamente en AWS Security Hub, puedes aprovechar funciones como Insights y Filtros al usar la información adicional que no estaba disponible antes en Security Hub.
Por ejemplo, quieres enriquecer todos los hallazgos de AWS Security Hub con WorkflowStatus=NEW, RecordState=ACTIVE, y ResourceType=AwsS3Bucket que sean public=True con salidas de Contexto:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsS3Bucket --mh-filters-checks public=True --enrich-findings
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6190/93a45d119a712b11ae5f23ea68e3a1f7d71e0e9511df7d7dadd2b462fcde71a2.png" alt="update-findings" width="850"/>
</p>
La opción `--enrich-findings` te pedirá confirmación antes de enriquecer tus hallazgos. Puedes omitir esta confirmación usando la opción `--no-actions-confirmation`.
# Contribuir
Puedes seguir esta guía si deseas contribuir al módulo Context [guía](https://github.com/gabrielsoltz/metahub/blob/HEAD/docs/context.md).
| Estados posibles | Valor | Descripción |
|---|
| 🔴 efectivamente-público | 100% | El recurso es efectivamente público desde Internet. |
| 🟠 público-restringido | 40% | El recurso es público, pero tiene una restricción como un grupo de seguridad. |
| 🟠 privado-sin-restricciones | 30% | El recurso es privado pero sin restricciones, como un grupo de seguridad abierto. |
| 🟠 lanzamiento-público | 10% | Son recursos que pueden lanzar otros recursos como públicos. Por ejemplo, un grupo de Auto Scaling o una subred. |
| 🟢 restringido | 0% | El recurso está restringido. |
| 🔵 desconocido | - | El recurso no pudo ser verificado. |
| Posibles Estados | Valor | Descripción |
|---|
| 🔴 unrestricted | 100% | El principal no tiene restricciones, sin ninguna condición o restricción. |
| 🔴 untrusted-principal | 70% | El principal es una cuenta de AWS, que no forma parte de sus cuentas de confianza. |
| 🟠 unrestricted-principal | 40% | El principal no está restringido, definido con un comodín. Podría tener condiciones que lo restrinjan u otras restricciones como bloques públicos de S3. |
| 🟠 cross-account-principal | 30% | El principal es de otra cuenta de AWS. |
| 🟠 unrestricted-actions | 30% | Las acciones se definen usando comodines. |
| 🟠 dangerous-actions | 30% | Algunas acciones peligrosas están definidas como parte de esta política. |
| 🟠 unrestricted-service | 10% | La política permite un servicio de AWS como principal sin restricción. |
| 🟢 restricted | 0% | La política está restringida. |
| 🔵 unknown | - | No se pudo verificar la política. |
| Descripción |
|---|
| 🔴 no cifrado | 100% | El recurso no está completamente cifrado. |
| 🟢 cifrado | 0% | El recurso está completamente cifrado incluyendo cualquiera de sus asociaciones. |
| 🔵 desconocido | - | No se pudo verificar el cifrado del recurso. |
| Posibles Estados | Valor | Descripción |
|---|
| 🟠 adjuntado | 100% | El recurso soporta adjunción y está adjuntado. |
| 🟠 en ejecución | 100% | El recurso soporta ejecución y está en ejecución. |
| 🟠 habilitado | 100% | El recurso soporta habilitación y está habilitado. |
| 🟢 no adjuntado | 0% | El recurso soporta adjunción y no está adjuntado. |
| 🟢 no en ejecución | 0% | El recurso soporta ejecución y no está en ejecución. |
| 🟢 no habilitado | 0% | El recurso soporta habilitación y no está habilitado. |
| 🔵 desconocido | - | No se pudo verificar el estado del recurso. |
| Estados Posibles | Valor | Descripción |
|---|
| 🟠 producción | 100% | Es un recurso de producción. |
| 🟢 staging | 30% | Es un recurso de staging. |
| 🟢 desarrollo | 0% | Es un recurso de desarrollo. |
| 🔵 desconocido | - | No se pudo verificar el entorno del recurso. |
--sh-account--sh-assume-role--sh-account--sh-assume-role--sh-profile