Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
metahub — Outil d'enrichissement automatisé des constats de sécurité et d'évaluation d'impact pour AWS. Enrichit les données de vulnérabilité avec le contexte des ressources, les associations et les tags pour calculer des scores d'impact contextuels en vue d'une correction priorisée. | Kitploit
Outils/GitHubGitHub/gabrielsoltz/metahub
Scanners de VulnérabilitésAnalyse des VulnérabilitésAudit de ConfigurationSécurité CloudRenseignement sur les MenacesRéponse aux Incidents
GitHubgabrielsoltz/metahub

metahub

Outil d'enrichissement automatisé des constats de sécurité et d'évaluation d'impact pour AWS. Enrichit les données de vulnérabilité avec le contexte des ressources, les associations et les tags pour calculer des scores d'impact contextuels en vue d'une correction priorisée.

Voir le dépôt
17719il y a 5 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

MetaHub

MetaHub est un outil automatisé d'enrichissement contextuel et d'évaluation d'impact des findings de sécurité pour la gestion des vulnérabilités. Vous pouvez l'utiliser avec AWS Security Hub ou tout scanner de sécurité compatible ASFF. Arrêtez de vous fier à des sévérités inutiles et passez à des définitions de score d'impact basées sur VOTRE contexte.

AWS ECR Gallery

Table des matières

  • Description
  • Exécution rapide
  • Contexte
  • Impact
  • Architecture de haut niveau
  • Cas d'utilisation
  • Configuration
  • Exécuter avec Python
  • Exécuter avec Docker
  • Exécuter avec Lambda
  • Exécuter avec une action personnalisée Security Hub
  • Authentification AWS
  • Configuration de Security Hub
  • Configuration du contexte
  • Entrées
  • Sorties
  • Filtres
  • Actions Security Hub
  • Contribuer

Description

MetaHub est un outil de sécurité open-source pour la gestion des vulnérabilités basée sur l'impact contextuel. Il peut automatiser le processus de contextualisation des findings de sécurité en fonction de votre environnement et de vos besoins, VOTRE contexte, identifier la propriété et calculer un score d'impact basé sur celui-ci, que vous pouvez utiliser pour définir la priorisation (par où commencer ?) et les automatisations comme les corrections, alertes ou tickets. L'outil est conçu pour les environnements AWS et vous pouvez l'utiliser avec AWS Security Hub ou tout scanner compatible ASFF (comme Prowler).

ℹ️ Explorez et étendez les nouveaux Tableaux de bord MetaHub avec Powerpipe !

MetaHub décrit votre contexte en se connectant aux ressources affectées dans vos comptes concernés. Il peut décrire les informations sur votre compte AWS et votre organisation, les tags des ressources affectées, les événements CloudTrail associés, les configurations de vos ressources affectées et toutes leurs associations : si vous contextualisez un finding de sécurité affectant une instance EC2, MetaHub se connectera non seulement à cette instance elle-même mais aussi à ses rôles IAM ; de là, il se connectera aux politiques IAM associées à ces rôles. Il se connectera aux groupes de sécurité et analysera toutes leurs règles, au VPC et aux sous-réseaux où l'instance s'exécute, aux volumes, aux groupes Auto Scaling, et plus encore. Vous pouvez appliquer des filtres pour automatiser la détection d'autres ressources ayant les mêmes propriétés et effectuer des investigations approfondies.

Après avoir récupéré toutes les informations de votre contexte, MetaHub évaluera les conditions d'impact pour toutes vos ressources : exposition, accès, chiffrement, statut, environnement, application et propriétaire. Sur la base de ces calculs et en plus des informations sur les findings de sécurité affectant la ressource, le tout ensemble, MetaHub générera un score pour chaque finding et ressource affectée.

Consultez le tableau de bord suivant généré par MetaHub. Vous avez les ressources affectées, regroupant tous les findings de sécurité les affectant ensemble et la sévérité d'origine de chaque finding. Ensuite, vous avez le score et tous les critères que MetaHub a évalués pour générer ce score. Toutes ces informations sont filtrables, triables, groupables, téléchargeables et personnalisables.

Voici la sortie JSON output pour une instance EC2 ; voyez comment MetaHub organise toutes les informations sur son contexte ensemble, sous associations, config, tags, account et cloudtrail, et enfin la clé impact avec le score et tous les critères évalués pour générer ce score.

Diagramme

MetaHub offre une gamme de moyens pour lister, gérer et sortir vos findings de sécurité pour investigation, suppression, mise à jour et intégration avec d'autres outils. Il est conçu pour être utilisé comme outil en CLI ou dans des workflows automatisés, tels que des fonctions AWS Lambda. Il prend en charge différentes sorties, certaines json programmatique, mais aussi des formats puissants html, xlsx et csv que vous pouvez personnaliser.

Si vous utilisez AWS Security Hub, MetaHub s'intègre parfaitement et étend ses fonctionnalités. Il peut être utilisé comme action personnalisée Security Hub, prend en charge les filtres AWS Security Hub, vous pouvez gérer le statut de workflow de vos findings, et vous pouvez même enrichir vos findings directement dans AWS Security Hub.

MetaHub est conçu pour être utilisé avec AWS et prend en charge les configurations multi-comptes. Vous pouvez exécuter l'outil depuis n'importe quel environnement en assumant des rôles dans votre maître AWS Security Hub et vos comptes enfant/service. Cela vous permet de récupérer des données agrégées depuis plusieurs comptes en utilisant votre implémentation multi-compte AWS Security Hub tout en récupérant et enrichissant ces findings avec des données provenant des comptes où vos ressources affectées s'exécutent. Reportez-vous à Configuration de Security Hub pour plus d'informations.

Exécution rapide

Lisez vos findings de sécurité depuis AWS Security Hub avec les filtres par défaut et exécutez les options de contexte par défaut :```bash ./metahub

root@kitploit:~
Lit un résultat de sécurité spécifique (filtré par ID) depuis AWS Security Hub et exécute les options de contexte par défaut :```bash
./metahub --sh-filters Id=arn:aws:securityhub:us-east-1:123456789012:security-control/CloudFront.1/finding/8bd4d049-dcbc-445b-a5d1-595d8274b4c1

Lit toutes les conclusions de sécurité affectant une ressource qui sont ACTIVE (filtrées par ResourceId et RecordState) depuis AWS Security Hub et exécute les options de contexte par défaut :```bash ./metahub --sh-filters RecordState=ACTIVE ResourceId=arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0b7d243ff90ebc03e

root@kitploit:~
Lire toutes les conclusions de sécurité affectant un compte AWS qui sont ACTIVE (filtrées par AwsAccountId et RecordState) pour les ressources avec une balise `Environment` et la valeur `stg` et exécute les options de contexte `config` et `tags` :```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags

Exécution rapide (Lecture des résultats à partir d'un fichier ASFF d'entrée)

Lisez vos résultats de sécurité depuis Prowler en tant que fichier d'entrée et exécutez les options de contexte par défaut :```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff

root@kitploit:~
Lit vos résultats de sécurité depuis Powerpipe en tant que fichier d'entrée et exécute les options de contexte par défaut :```bash
powerpipe benchmark run aws_compliance.benchmark.all_controls --export asff
./metahub --inputs file-asff --input-asff /path/to/powerpipe-findings.json.asff

Lit vos conclusions de sécurité de Trivy en tant que fichier d'entrée et exécute les options de contexte par défaut :```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

root@kitploit:~
# Contexte

Dans **MetaHub**, le **contexte** fait référence aux informations sur les ressources affectées, comme leur **configuration**, leurs **associations**, leurs **journaux**, leurs **tags** et leur **compte**.

MetaHub ne s'arrête pas à la ressource affectée, mais analyse également toutes les ressources associées ou attachées. Par exemple, si une constatation de sécurité existe sur un groupe de sécurité, **MetaHub** analysera le groupe de sécurité et tout ce qui lui est associé, comme les instances EC2 qui l'utilisent. Pour chaque ressource associée, **MetaHub** récupérera son contexte. Si le groupe de sécurité est attaché à une instance EC2, **MetaHub** analysera l'instance et toutes ses associations, comme les rôles IAM et les politiques. À partir d'une seule constatation de sécurité sur un groupe de sécurité, **MetaHub** récupérera le contexte du groupe de sécurité, de l'instance EC2, des rôles IAM et des politiques IAM. Cela est essentiel pour comprendre l'impact de vos constatations de sécurité.

Le module **contexte** comporte cinq parties principales : [**config**](#config) (qui inclut [**associations**](#associations)), [**tags**](#tags), [**cloudtrail**](#cloudtrail) et [**account**](#account). Par défaut, seuls **config**, **tags** et **account** sont activés, mais vous pouvez modifier ce comportement à l'aide de l'option `--context` (par exemple, utilisez `--context config tags cloudtrail account` pour activer toutes les clés de contexte, ou `--context config` pour activer uniquement les clés config et associations) :

## Config

Sous la clé `config`, vous trouverez des informations de configuration importantes sur la ressource affectée. Par exemple, si la ressource affectée est un compartiment S3, vous trouverez des informations sur sa politique de compartiment, ses ACL, sa configuration de chiffrement, etc. Si la ressource affectée est une instance EC2, vous trouverez des informations sur sa clé, ses adresses IP publique et privée, ses métadonnées, etc. Les informations de configuration que **MetaHub** récupère sont définies par type de ressource. Si vous souhaitez ajouter plus d'informations de configuration, consultez [contributing](#contributing).

Vous pouvez filtrer vos constatations en fonction des sorties de configuration à l'aide de l'option : `--mh-filters-config <key> {True/False}` (voir [config filters](#config-filters)).

<details>
  <summary>Exemple pour une clé de configuration de compartiment 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
    }
  ]
},

Associations

Sous la clé associations, vous trouverez toutes les ressources associées de la ressource affectée. Par exemple, si la ressource affectée est une instance EC2, vous trouverez des ressources comme : les groupes de sécurité, les rôles IAM, les volumes, le VPC, les sous-réseaux, les groupes Auto Scaling. Si la ressource affectée est un rôle IAM, vous trouverez des ressources comme les politiques IAM, les utilisateurs IAM, les groupes IAM, et plus encore. Chaque fois que MetaHub trouve une association, il se connecte à nouveau à la ressource associée et récupère son propre contexte. Les associations sont essentielles pour comprendre le contexte et l'impact de vos constatations de sécurité.

Vous pouvez filtrer vos constatations en fonction des sorties d'associations en utilisant l'option : --mh-filters-config <key> {True/False} (voir filtres de configuration).

Exemple pour une clé d'assocations d'instance EC2```json "associations": { "security_groups": { "arn:aws:ec2:eu-west-1:123456789012:security-group/sg-020cc749a58678e05": { "associations": { "vpcs": { "arn:aws:ec2:eu-west-1:123456789012:vpc/vpc-03cc56a1c2afb5760": { "associations": { "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0ccfb8dea658f49ec": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-05e85a7b0ec9e404c": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0e177ea95bcc76256": {} } }, "config": { "cidr": "172.10.0.0/16", "default": false, "public": null } } }, "network_interfaces": { "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-041a6e5bb59c336ee": {} }, "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "public_ips": [ "100.100.100.100" ], "managed_services": [], "its_referenced_by_a_security_group": false, "security_group_rules": [ { "SecurityGroupRuleId": "sgr-08cdc9fdac8fd1a5b", "GroupId": "sg-020cc749a58678e05", "GroupOwnerId": "123456789012", "IsEgress": true, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIpv4": "0.0.0.0/0", "Tags": [] }, { "SecurityGroupRuleId": "sgr-0e6cd39169dc137ab", "GroupId": "sg-020cc749a58678e05", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIpv4": "0.0.0.0/0", "Tags": [] } ], "public": true, "default": false, "attached": true, "resource_policy": null } }, }, "iam_roles": { "arn:aws:iam::123456789012:role/eu-west-1-stg-backend-iam-role": { "associations": { "iam_policies": { "arn:aws:iam::123456789012:policy/eu-west-1-stg-backend-iam-policy-cw": { "associations": { "iam_roles": { "arn:aws:iam::123456789012:role/eu-west-1-stg-backend-iam-role": {} }, "iam_groups": {}, "iam_users": {} }, "config": { "name": "eu-west-1-stg-backend-iam-policy-cw", "description": false, "customer_managed": true, "attached": true, "public": null, "resource_policy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] } } }, } }, "config": { "iam_inline_policies": {}, "instance_profile": "arn:aws:iam::123456789012:instance-profile/eu-west-1-stg-backend-iam-profile", "trust_policy": { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "permissions_boundary": false, "public": null, "resource_policy": null } } }, "volumes": { "arn:aws:ec2:eu-west-1:123456789012:volume/vol-0371a09e338f582da": { "associations": { "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "encrypted": true, "attached": true, "public": null, "resource_policy": null } } }, "autoscaling_groups": { "arn:aws:autoscaling:eu-west-1:123456789012:autoScalingGroup/stg-backend-20201205160228428400000002": { "associations": { "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} }, "launch_templates": { "arn:aws:ec2:eu-west-1:123456789012:launch-template/lt-06b73d2e77f10446f": {} }, "launch_configurations": {} }, "config": { "name": "stg-backend-20201205160228428400000002", "public": null, "resource_policy": null } } }, "vpcs": { "arn:aws:ec2:eu-west-1:123456789012:vpc/vpc-03cc56a1c2afb5760": { "associations": { "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0ccfb8dea658f49ec": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-05e85a7b0ec9e404c": {}, "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0e177ea95bcc76256": {} } }, "config": { "cidr": "172.10.0.0/16", "default": false, "public": null } } }, "subnets": { "arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-03d86f1ccd7729d85": { "associations": { "route_tables": { "arn:aws:ec2:eu-west-1:123456789012:route-table/rtb-0ebae6462f919943d": { "associations": {}, "config": { "default": false, "route_to_internet_gateway": [ { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": "igw-0790540d8d726f9d4", "Origin": "CreateRoute", "State": "active" } ], "route_to_nat_gateway": [], "route_to_transit_gateway": [], "route_to_vpc_peering": [], "public": null } } }, "network_interfaces": { "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0e8918fa31d2acd55": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0f6c936934fd9d6a6": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-041a6e5bb59c336ee": {}, "arn:aws:ec2:eu-west-1:123456789012:network-interface/eni-0e5f6cfdc7c286224": {} }, "instances": { "arn:aws:ec2:eu-west-1:123456789012:instance/i-018daeedcf06398c0": {} } }, "config": { "cidr": "172.11.11.0/24", "map_public_ip_on_launch_enabled": true, "default": false, "public": true, "resource_policy": null, "public_ips": [ "100.100.100.100", ], "managed_services": [ "ELB app/stg-alb-backend/3567d780bd062d75", "Interface for NAT Gateway nat-0805d9808347bba69" ], "attached": true } } }, } ```

Balises

Sous la clé tags, vous trouverez toutes les balises associées à la ressource concernée. MetaHub s'appuie sur l'API AWS Resource Groups Tagging pour interroger les balises associées à vos ressources. Notez que tous les types de ressources AWS ne prennent pas en charge cette API. Vous pouvez consulter les services pris en charge.

Les balises sont un élément crucial pour comprendre votre contexte. Les stratégies de balisage incluent souvent :

  • Environnement (comme Production, Staging, Développement, etc.)
  • Classification des données (comme Confidentiel, Restreint, etc.)
  • Propriétaire (comme une équipe, une escouade, une unité commerciale, etc.)
  • Conformité (comme PCI, SOX, etc.)

Si vous suivez une stratégie de balisage appropriée, vous pouvez filtrer et générer des résultats intéressants. Par exemple, vous pourriez lister tous les résultats liés à une équipe spécifique et fournir ces données directement à cette équipe.

Vous pouvez filtrer vos résultats en fonction des sorties de balises à l'aide de l'option : --mh-filters-tags TAG=VALUE (voir filtres de balises).

Exemple pour une clé de balise d'instance EC2```json "tags": { "aws:autoscaling:groupName": "stg-backend-20201205160228428400000002", "environment": "stg", "terraform": "true", "aws:ec2launchtemplate:version": "8", "aws:ec2launchtemplate:id": "lt-06b73d2e77f10446f", "Name": "stg-backend" } ```

CloudTrail

Sous la clé cloudtrail, vous trouverez les événements CloudTrail critiques liés à la ressource affectée, tels que les événements de création. Les événements CloudTrail que nous recherchons sont définis par type de ressource, et vous pouvez en ajouter, supprimer ou modifier en éditant le fichier de configuration resources.py. Par exemple, pour une ressource affectée de type Security Group, MetaHub recherchera les événements suivants : CreateSecurityGroup (événement de création de groupe de sécurité) et AuthorizeSecurityGroupIngress (événement d'autorisation de règle de groupe de sécurité).

Exemple pour une clé cloudtrail d'instance EC2```json "cloudtrail": { "RunInstances": { "Username": "root", "EventTime": "2023-11-15 06:10:07+01:00", "EventId": "4f122d76-812d-4438-bc33-3585a9e863cf" } } ```
Exemple pour une clé cloudtrail d'une table DynamoDB```json "cloudtrail": { "CreateTable": { "Username": "gabriel.soltz", "EventTime": "2023-12-05 14:34:25+01:00", "EventId": "7110e3ae-09a3-44b9-929a-1775e0fbedcf" } } ```

Compte

Sous la clé account, vous trouverez des informations sur le compte où la ressource affectée est en cours d'exécution, par exemple si elle fait partie d'une organisation AWS, des informations sur leurs contacts, et plus encore.

Exemple pour la clé account```json "account": { "Alias": "metahub-demo", "AlternateContact": { "AlternateContactType": "SECURITY", "EmailAddress": "[email protected]", "Name": "Gabriel", "PhoneNumber": "+1234567890", "Title": "Security" }, "Organizations": { "Arn": "arn:aws:organizations::123456789012:organization/o-12349772jb", "Id": "o-12349772jb", "MasterAccountId": "123456789012", "MasterAccountEmail": "[email protected]", "FeatureSet": "ALL", "DelegatedAdministrators": {}, "Details": { "ParentId": "r-k123", "ParentType": "ROOT", "OU": "ROOT", "Policies": { "p-FullAWSAccess": { "Name": "FullAWSAccess", "Arn": "arn:aws:organizations::aws:policy/service_control_policy/p-FullAWSAccess", "Type": "SERVICE_CONTROL_POLICY", "Description": "Allows access to every operation", "AwsManaged": true, "Targets": [] } } } } }, ```

Impact

Le module Impact de MetaHub se concentre sur la compréhension des 7 propriétés clés de la ressource affectée : exposition, accès, chiffrement, statut, environnement, application et propriétaire. Il combine leurs valeurs avec celles de toutes les observations de sécurité affectant la même ressource et leur sévérité pour générer un score. Le score d'impact est un nombre compris entre 0 et 100, où 100 représente l'impact le plus élevé.


Exposition

L'exposition évalue comment la ressource affectée est exposée à d'autres réseaux. Par exemple, si la ressource affectée est effectivement publique ou simplement publique, si elle fait partie d'un VPC, si elle possède une adresse IP publique ou si elle est protégée par un pare-feu ou un groupe de sécurité.

Exemple pour une ressource effectively-public```json "exposure": { --> The exposure key "effectively-public": { --> The exposure value, effectively-public "entrypoint": "66.66.66.66", --> The entrypoint to the resource from the Internet (Ip, Domain, etc.) "unrestricted_ingress_rules": [ --> The unrestricted ingress rules, if any { "SecurityGroupRuleId": "sgr-0553206714e321b87", "GroupId": "sg-0a15a46e47f07d139", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIpv4": "0.0.0.0/0", "Tags": [] } ], "unrestricted_egress_rules": [ --> The unrestricted egress rules, if any { "SecurityGroupRuleId": "sgr-007b509667896ebe3", "GroupId": "sg-0a15a46e47f07d139", "GroupOwnerId": "123456789012", "IsEgress": true, "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIpv4": "0.0.0.0/0", "Tags": [] }, ], "resource_public_config": true --> The public configuration of the resource } } ```

Accès

Accès évalue la couche de politique des ressources. MetaHub vérifie toutes les politiques disponibles, y compris : les politiques IAM gérées, les politiques IAM en ligne, les politiques de ressources, les ACL de compartiments, et toute association à d'autres ressources comme les rôles IAM dont les politiques sont également analysées. Une politique non restreinte n'est pas seulement un problème en soi, elle affecte toute autre ressource qui l'utilise.

Exemple pour une ressource avec unrestricted-actions```json "access": { --> The access key "unrestricted-actions": { --> The access value, unrestricted-actions "wildcard_actions": { --> The wildcard policies, if any "arn:aws:iam::123456789012:policy/eu-west-1-stg-iam-policy-dynamodb-cache": [ { "Action": [ "dynamodb:*" --> The wildcard action ], "Effect": "Allow", "Resource": [ "arn:aws:dynamodb:eu-west-1:123456789012:table/table", ] } ], } } ```

Chiffrement

Chiffrement évalue les différentes couches de chiffrement en fonction de chaque type de ressource. Par exemple, pour certaines ressources, il évalue si les configurations de chiffrement at_rest et in_transit sont toutes deux activées.

Statuts possibles
Exemple d'une ressource non chiffrée```json "encryption": { --> The encryption key "unencrypted": { --> The encryption value, unencrypted "unencrypted_resources": [ --> the unencrypted resources associated with the affected resource, if any "arn:aws:ec2:eu-west-1:012345678901:volume/vol-0ac713ec808a8d8bd" ], "resource_encryption_config": null --> The encryption configuration of the resource, if it has any } } ```

Statut

Statut évalue le statut de la ressource affectée en termes de rattachement ou de fonctionnement. Par exemple, pour une instance EC2, nous évaluons si la ressource est en cours d'exécution, arrêtée ou terminée, mais pour des ressources comme les volumes EBS et les groupes de sécurité, nous évaluons si ces ressources sont attachées à une autre ressource.

Exemple pour une ressource en cours d'exécution```json "status": { --> The status key "running": { --> The status value, running "status": "running", --> The status configuration of the resource, if it has any "attached": null --> The attachment configuration of the resource, if it has any } } ```

Environnement

Environnement évalue l'environnement dans lequel la ressource affectée s'exécute. Par défaut, MetaHub définit 3 environnements : production, staging et development, mais vous pouvez ajouter, supprimer ou modifier ces environnements selon vos besoins. MetaHub évalue l'environnement en fonction des balises de la ressource affectée, de l'ID du compte ou de l'alias du compte. Vous pouvez définir vos propres définitions d'environnements et votre stratégie dans le fichier de configuration (voir Personnalisation de la configuration).

Exemple de ressource de production correspondant par balises```json "environment": { --> The environment key "production": { --> The environment value, production "tags": { --> The parameters used for evaluating the environment, in this case tags "Env": "prod" --> The tag and key found used for evaluating the environment } } } ```

Application

Application évalue l'application dont la ressource affectée fait partie. MetaHub s'appuie sur la fonctionnalité AWS myApplications, qui repose sur le tag awsApplication, mais vous pouvez étendre cette fonctionnalité en fonction de votre contexte, par exemple en définissant d'autres tags que vous utilisez pour définir des applications ou services (comme Service ou tout autre), ou en vous basant sur l'ID ou l'alias du compte. Vous pouvez définir vos définitions d'application et votre stratégie dans le fichier de configuration (Voir Personnalisation de la configuration).

Statuts possiblesValeurDescription
🔵 inconnu-La ressource n'a pas pu être vérifiée pour l'application.
Exemple pour une ressource correspondant au tag myApplication```json "application": { --> The application key "payments-app": { --> The application value, payments-app "tags": { --> The parameters used for evaluating the environment, in this case the tag awsApplication "awsApplication": "arn:aws:resource-groups:eu-west-1:123456789012:group/app1/0c8vpbjkzeeffsz2cqgxpae7b2" --> The tag and key found used for evaluating the environment } } } ```

Propriétaire

Propriétaire se concentre sur la détection de la propriété. Il peut déterminer le propriétaire de la ressource affectée de différentes manières. Cette information peut être utilisée pour attribuer automatiquement une constatation de sécurité au bon propriétaire, l'escalader ou prendre des décisions en fonction de ces informations. Une méthode automatisée pour déterminer le propriétaire d'une ressource est essentielle pour les équipes de sécurité. Elle leur permet de se concentrer sur les problèmes les plus critiques et de les attribuer le plus rapidement possible aux bonnes personnes dans des flux de travail automatisés. Vous pouvez définir vos définitions de propriétaire et votre stratégie dans le fichier de configuration (Voir Personnalisation de la configuration).

Statuts possiblesValeurDescription
🔵 unknown-La ressource n'a pas pu être vérifiée pour le propriétaire.
Exemple pour une ressource correspondant à l'ID de compte```json "owner": { --> The owner key "payments-team": { --> The owner value, payments-app "account": { --> The parameters used for evaluating the environment, in this case the account "account_ids": ["123456789012"], --> The account ids found used for evaluating the environment "account_aliases": [], }, } } ```

Findings

Dans le cadre du calcul du score d'impact, nous évaluons également le nombre total de constats de sécurité et leurs sévérités affectant la ressource. Nous utilisons la formule suivante pour calculer cette métrique :```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)

root@kitploit:~
Par exemple, si la ressource affectée a deux constatations qui l'affectent, une avec une sévérité `HIGH` et une autre avec `LOW`, le **Score d'Impact des Constatations** sera :```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875

Architecture de haut niveau

MetaHub lit vos résultats de sécurité depuis AWS Security Hub ou tout scanner de sécurité compatible ASFF. Il interroge ensuite les ressources affectées directement dans le compte concerné pour fournir un contexte supplémentaire. Sur la base de ce contexte, il calcule son impact. Enfin, il génère différentes sorties en fonction de vos besoins.

Diagramme

Cas d'utilisation

Quelques cas d'utilisation de MetaHub incluent :

  • Intégration de MetaHub avec Prowler en tant que scanner local pour l'enrichissement du contexte
  • Automatisation de la suppression des résultats Security Hub en fonction du marquage (Tagging)
  • Intégrer MetaHub directement en tant qu'action personnalisée Security Hub pour l'utiliser depuis la console AWS
  • Créez des rapports HTML enrichis de vos résultats que vous pouvez filtrer, trier, regrouper et télécharger
  • Créez des Insights Security Hub basés sur le contexte MetaHub

Personnalisation de la configuration

MetaHub utilise des fichiers de configuration qui vous permettent de personnaliser certains comportements des contrôles, les filtres par défaut, et plus encore. Les fichiers de configuration se trouvent dans lib/config/.

Choses que vous pouvez personnaliser :

  • lib/config/configuration.py: Ce fichier contient la configuration par défaut de MetaHub. Vous pouvez modifier les filtres par défaut, les modes de sortie par défaut, les définitions d'environnement, et plus encore.

  • lib/config/impact.py: Ce fichier contient les valeurs et leurs poids pour les critères de la formule d'impact. Vous pouvez modifier les valeurs et les poids en fonction de vos besoins.

  • lib/config/reources.py: Ce fichier contient les définitions pour chaque type de ressource, comme les événements CloudTrail à rechercher.

Exécution avec Python

MetaHub est un programme Python3. Vous devez avoir Python3 installé sur votre système ainsi que les modules Python requis décrits dans le fichier requirements.txt.

Les prérequis peuvent être installés sur votre système manuellement (en utilisant pip3) ou en utilisant un environnement virtuel Python (méthode suggérée).

Exécution en utilisant un environnement virtuel Python

  1. Clonez le dépôt : git clone [email protected]:gabrielsoltz/metahub.git
  2. Déplacez-vous dans le répertoire du dépôt : cd metahub
  3. Créez un environnement virtuel pour ce projet : python3 -m venv venv/metahub
  4. Activez l'environnement virtuel que vous venez de créer : source venv/metahub/bin/activate
  5. Installez les prérequis de Metahub : pip3 install -r requirements.txt
  6. Exécutez : ./metahub -h
  7. Désactivez votre environnement virtuel après avoir terminé avec : deactivate

La prochaine fois, vous n'avez besoin que des étapes 4 et 6 pour utiliser le programme.

Alternativement, vous pouvez exécuter cet outil en utilisant Docker.

Exécution avec Docker

MetaHub est également disponible en tant qu'image Docker. Vous pouvez l'exécuter directement depuis l'image Docker publique ou le construire localement.

Les balises disponibles pour les conteneurs MetaHub sont les suivantes :

  • latest : synchronisée avec la branche master
  • <x.y.z> : vous pouvez trouver les versions ici
  • stable : cette balise pointe toujours vers la dernière version.

Pour exécuter depuis le registre public, vous pouvez exécuter la commande suivante :```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h

root@kitploit:~
## Identifiants AWS et Docker

Si vous êtes déjà connecté à la machine hôte AWS, vous pouvez utiliser les mêmes identifiants de manière transparente dans un conteneur Docker. Vous pouvez y parvenir soit en passant les variables d'environnement nécessaires au conteneur, soit en montant le fichier d'identifiants.

Par exemple, vous pouvez exécuter la commande suivante :```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

D'autre part, si vous n'êtes pas connecté sur la machine hôte, vous devrez vous reconnecter depuis l'intérieur du conteneur lui-même.

Construire et exécuter Docker localement

Ou vous pouvez également le construire localement :```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h

root@kitploit:~
# Exécuter avec Lambda

**MetaHub** est prêt pour Lambda/Serverless ! Vous pouvez exécuter MetaHub directement sur une fonction AWS Lambda sans aucune infrastructure supplémentaire nécessaire.

Exécuter MetaHub dans une fonction Lambda vous permet d'automatiser son exécution en fonction de déclencheurs définis. Par exemple, vous pouvez :

- Déclencher la fonction Lambda MetaHub à chaque nouvelle constatation de sécurité pour enrichir cette constatation dans AWS Security Hub.
- Déclencher la fonction Lambda MetaHub à chaque nouvelle constatation de sécurité pour la supprimer en fonction du contexte.
- Déclencher la fonction Lambda MetaHub pour identifier le propriétaire affecté d'une constatation de sécurité en fonction du contexte et l'assigner à l'aide de vos systèmes internes.
- Déclencher la fonction Lambda MetaHub pour créer un ticket avec un contexte enrichi.

## Déploiement de Lambda

Le code terraform pour déployer la fonction Lambda est fourni dans le dossier `terraform/`.

Exécutez simplement les commandes suivantes :```sh
cd terraform
terraform init
terraform apply

Le code créera un fichier zip pour le code Lambda et un fichier zip pour les dépendances Python que nous utiliserons comme couche Lambda. Il créera également la fonction Lambda et toutes les ressources nécessaires.

Le code Terraform créera également une action personnalisée Security Hub et une règle EventBridge pour déclencher la fonction Lambda lorsque l'action personnalisée est exécutée. Voir ci-dessous.

Personnaliser le comportement de Lambda

Vous pouvez personnaliser les options de MetaHub pour votre lambda en modifiant le fichier lib/lambda.py. Vous pouvez modifier les options par défaut de MetaHub, telles que les filtres, les options Meta*, et plus encore.

Permissions Lambda

Terraform créera les permissions minimales requises pour que la fonction Lambda s'exécute localement (dans le même compte). Si vous souhaitez que votre Lambda assume un rôle dans d'autres comptes (par exemple, vous en aurez besoin si vous exécutez le Lambda dans le compte maître Security Hub qui agrège les résultats d'autres comptes), vous devrez spécifier le rôle à assumer, en ajoutant l'option --mh-assume-role dans la configuration de la fonction Lambda (voir l'étape précédente) et en ajoutant la politique correspondante pour permettre au Lambda d'assumer ce rôle dans le rôle lambda.

Exécution avec une action personnalisée Security Hub

MetaHub peut être exécuté en tant qu'action personnalisée Security Hub. Cela vous permet d'exécuter MetaHub directement depuis la console Security Hub pour un résultat sélectionné ou pour un ensemble sélectionné de résultats.

custom_action

L'action personnalisée déclenchera alors une fonction Lambda qui exécutera MetaHub pour les résultats sélectionnés.

Lorsque vous déclenchez le Lambda à l'aide de l'action personnalisée Security Hub, le lambda lira les résultats sélectionnés pour son contexte et s'exécutera une fois pour chaque résultat. Par défaut, aucune action ne sera effectuée sur les résultats, mais vous pouvez modifier ce comportement. Voir Personnaliser le comportement de Lambda.

L'action personnalisée Security Hub est déployée dans le cadre du code Terraform. Voir Déploiement de Lambda pour plus d'informations.

Si vous souhaitez le déployer manuellement, vous pouvez suivre les étapes ci-dessous :
  1. Dans Security Hub, choisissez Paramètres, puis Actions personnalisées.
  2. Choisissez Créer une action personnalisée.
  3. Fournissez un nom, une description et un ID d'action personnalisée pour l'action.
  4. Choisissez Créer une action personnalisée. (Notez l'ARN de l'action personnalisée. Vous devez utiliser cet ARN lorsque vous créez une règle à associer à cette action dans EventBridge.)
  5. Dans EventBridge, choisissez Règles, puis Créez une règle.
  6. Saisissez un nom et une description pour la règle.
  7. Pour le bus d'événements, choisissez le bus d'événements que vous souhaitez associer à cette règle. Si vous souhaitez que cette règle corresponde aux événements provenant de votre compte, sélectionnez default. Lorsqu'un service AWS de votre compte émet un événement, il va toujours au bus d'événements par défaut de votre compte.
  8. Pour le type de règle, choisissez une règle avec un modèle d'événement, puis cliquez sur Suivant.
  9. Pour la source d'événement, choisissez Événements AWS.
  10. Pour la méthode de création, choisissez Utiliser le formulaire de modèle.
  11. Pour la source d'événement, choisissez Services AWS.
  12. Pour le service AWS, choisissez Security Hub.
  13. Pour le type d'événement, choisissez Résultats Security Hub - Action personnalisée.
  14. Choisissez ARN d'action personnalisée spécifiques et ajoutez un ARN d'action personnalisée.
  15. Choisissez Suivant.
  16. Sous Sélectionner des cibles, choisissez la fonction Lambda
  17. Sélectionnez la fonction Lambda que vous avez créée pour MetaHub.

Authentification AWS

Assurez-vous d'avoir configuré les identifiants AWS sur votre machine locale (ou depuis l'endroit où vous exécuterez MetaHub).

Par exemple, vous pouvez utiliser l'option aws configure.```sh aws configure

root@kitploit:~
Ou vous pouvez exporter vos identifiants dans l'environnement.```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"

Configuration de Security Hub

  • Si vous exécutez MetaHub pour une configuration de compte AWS unique (AWS Security Hub n'agrège pas les résultats de différents comptes), vous n'avez pas besoin d'utiliser d'options supplémentaires ; MetaHub utilisera les identifiants de votre environnement. Toutefois, si votre conception IAM l'exige, il est possible de se connecter et d'assumer un rôle dans le même compte que celui auquel vous êtes connecté. Utilisez simplement les options --sh-assume-role pour spécifier le rôle et --sh-account avec le même ID de compte AWS que celui auquel vous êtes connecté.

  • --sh-region : La région AWS où Security Hub est en cours d'exécution. Si vous ne spécifiez pas de région, celle configurée dans votre environnement sera utilisée. Si vous utilisez l'agrégation inter-régions d'AWS Security Hub, vous devez utiliser cette région comme option --sh-region afin de pouvoir récupérer tous les résultats ensemble.

  • --sh-account et --sh-assume-role : L'ID du compte AWS où Security Hub est en cours d'exécution et le rôle IAM AWS à assumer dans ce compte. Ces options sont utiles lorsque vous êtes connecté à un compte AWS différent de celui où AWS Security Hub est en cours d'exécution ou lorsque vous utilisez AWS Security Hub dans une configuration multi-comptes AWS. Les deux options doivent être utilisées ensemble. Le rôle fourni doit avoir suffisamment de politiques pour obtenir et mettre à jour les résultats dans AWS Security Hub (si nécessaire). Si vous ne spécifiez pas de --sh-account, MetaHub supposera que vous utilisez celui auquel vous êtes connecté.

  • --sh-profile : Vous pouvez également fournir le nom de votre profil AWS à utiliser pour AWS Security Hub. Lorsque vous utilisez cette option, vous n'avez pas besoin de spécifier ou car MetaHub utilisera les identifiants du profil. Si vous utilisez et , ces options priment sur .

Politique IAM pour Security Hub

Il s'agit de la politique IAM minimale dont vous avez besoin pour lire et écrire depuis AWS Security Hub. Si vous ne souhaitez pas mettre à jour vos résultats avec MetaHub, vous pouvez supprimer l'action securityhub:BatchUpdateFindings.```sh { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "security hub:GetFindings", "security hub:ListFindingAggregators", "security hub:BatchUpdateFindings", "iam:ListAccountAliases" ], "Resource": [ "*" ] } ] }

root@kitploit:~
# Configuration du contexte

Si vous exécutez MetaHub pour un environnement multi-comptes AWS (AWS Security Hub regroupe les constats de plusieurs comptes AWS), vous devez fournir le rôle à assumer pour les requêtes de contexte, car les ressources concernées ne se trouvent pas dans le même compte AWS que les constats AWS Security Hub. L'option `--mh-assume-role` sera utilisée pour se connecter directement aux ressources concernées dans le compte concerné. Ce rôle doit disposer de suffisamment de politiques pour pouvoir décrire les ressources.

## Politique IAM pour le contexte

La politique minimale nécessaire pour le contexte comprend la politique gérée `arn:aws:iam::aws:policy/SecurityAudit` et les actions suivantes :

- `tag:GetResources`
- `lambda:GetFunction`
- `lambda:GetFunctionUrlConfig`
- `cloudtrail:LookupEvents`
- `account:GetAlternateContact`
- `organizations:DescribeAccount`
- `iam:ListAccountAliases`

# Entrées

MetaHub peut lire les constats de sécurité directement depuis AWS Security Hub via son API. Si vous n'utilisez pas Security Hub, vous pouvez utiliser tout scanner compatible ASFF. La plupart des scanners de sécurité cloud prennent en charge le format ASFF comme Prolwer, Steampipe, Trivy, etc.

Si vous souhaitez lire depuis un fichier ASFF d'entrée, vous devez utiliser l'option (`--inputs file-asff`) et fournir le chemin vers le fichier. Vous pouvez fournir plusieurs fichiers séparés par un espace.:```sh
./metahub.py --inputs file-asff --input-asff path/to/the/file.json.asff path/to/the/file2.json.asff

Vous pouvez également combiner les résultats d'AWS Security Hub avec des fichiers ASFF d'entrée en spécifiant les deux entrées (--inputs file-asff securityhub). MetaHub traitera tous les résultats ensemble et produira une seule sortie.:```sh ./metahub.py --inputs file-asff securityhub --input-asff path/to/the/file.json.asff

root@kitploit:~
Lors de l'utilisation d'un fichier en entrée, vous ne pouvez pas utiliser l'option `--sh-filters` pour filtrer les résultats, car cette option repose sur l'API AWS pour le filtrage. Vous ne pouvez pas utiliser les options `--update-findings` ou `--enrich-findings` car ces résultats ne se trouvent pas dans AWS Security Hub. Si vous lisez à partir des deux sources en même temps, seuls les résultats d'AWS Security Hub seront mis à jour.

MetaHub implémente également des **mécanismes de correction** pour le format ASFF, lorsqu'ils ne sont pas correctement formatés. Il s'agit d'une approche au mieux pour rendre l'ASFF aussi utile que possible, mais ce n'est pas parfait et doit être corrigé dans le scanner source.

- Si la clé `Region` est absente des ressources et du niveau racine, MetaHub calculera la région en fonction de l'ARN de la ressource concernée.
- Si le fichier ASFF ne définit pas correctement le type de ressource ASFF, MetaHub le calculera en fonction de l'ARN de la ressource concernée à l'aide de la bibliothèque [aws-arn](https://github.com/gabrielsoltz/aws-arn)
- Si tout autre champ est manquant comme `SeverityLabel`, `Workflow`, `RecordState`, `Compliance`, `Id`, `ProductArn` ou `StandardsControlArn`, MetaHub les définira sur `Unknown`.

# Sorties

**MetaHub** peut générer différentes sorties programmatiques et visuelles. Par défaut, tous les modes de sortie sont activés : `json-short`, `json-full`, `json-statistics`, `json-inventory`, `html`, `csv` et `xlsx`. Si vous souhaitez générer uniquement un mode de sortie spécifique, vous pouvez utiliser l'option `--output-modes` avec le mode de sortie souhaité. Les sorties seront enregistrées dans le dossier `outputs/` avec la date d'exécution.

Par exemple, si vous souhaitez uniquement générer la sortie `json-short`, vous pouvez utiliser :```sh
./metahub.py --output-modes json-short

Si vous souhaitez générer les sorties json-short, json-full et html, vous pouvez utiliser :```sh ./metahub.py --output-modes json-short json-full html

root@kitploit:~
**MetaHub** organise les constats de sécurité affectant la même ressource tous ensemble sous la clé `findings` pour tenter d'éviter l'Ombré (lorsque deux vérifications se réfèrent au même problème, mais l'une de manière plus générique que l'autre) et le Doublon (lorsque vous utilisez plus d'un scanner et obtenez le même problème de plus d'un.). Vous pouvez voir ce comportement clairement dans les sorties `json-short`, `json-full` et `html`.

- [JSON](#json)
- [HTML](#html)
- [CSV](#csv)
- [XLSX](#xlsx)
- [SQLite](#sqlite)

## JSON

> :info: Pour explorer une sortie JSON de manière interactive, vous pouvez utiliser l'outil [fx](https://github.com/antonmedv/fx).

### JSON-Full

Affiche la ressource affectée en utilisant son ARN comme clé et les constats l'affectant comme une liste sous la clé `findings`. En plus des constats, vous obtiendrez également les clés suivantes : `ResourceType`, `Region`, `AwsAccountId`, `associations`, `config`, `tags`, `account`, `cloudtrail` et `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
  }
}

JSON-Short

Affiche la ressource affectée en utilisant son ARN comme clé et les résultats affectant cette ressource sous forme de liste sous la clé findings. En plus des résultats, vous obtiendrez également les clés suivantes : ResourceType, Region, AwsAccountId, associations, config, tags, account, cloudtrail, et 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 } }

root@kitploit:~
### JSON-Inventory

Affiche une liste de toutes les ressources avec leur ARN.```json
[
  "arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated",
  "arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated"
]

JSON-Statistics

Affichez les statistiques pour chaque champ/valeur. Dans la sortie, vous verrez chaque champ/valeur et le nombre d'occurrences ; par exemple, la sortie suivante montre les statistiques pour six résultats.```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 } }

root@kitploit:~
## HTML

Vous pouvez créer des rapports HTML riches de vos découvertes, en y ajoutant votre contexte.

Les rapports HTML sont interactifs de plusieurs manières :

- Vous pouvez ajouter/supprimer des colonnes.
- Vous pouvez trier et filtrer par n'importe quelle colonne.
- Vous pouvez filtrer automatiquement par n'importe quelle colonne.
- Vous pouvez regrouper/dégrouper les découvertes.
- Vous pouvez également télécharger ces données au format xlsx, CSV, HTML et JSON.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/6190/21d785d2413698ed7cb3e9dc7e9b51dc6550395a598d777abc9fc358f8a23573.png" alt="html-example"/>
</p>

## CSV

Vous pouvez créer des rapports CSV de vos découvertes, en y ajoutant votre contexte.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/6190/66f15350123702e1cc317e47938401853bdcb1d86dad0ad4e48e73f15e00dd76.png" alt="csv-example"/>
</p>

## XLSX

Similaire au CSV, mais avec davantage d'options de formatage.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/6190/953a77917dc5b06e5185e6cb882ba7e711d785861e184599f10cd472efc42db9.png" alt="xlsx-example"/>
</p>

## Personnaliser les sorties HTML, CSV ou XLSX

Vous pouvez personnaliser les clés de contexte à dérouler en colonnes pour vos sorties HTML, CSV et XLSX en utilisant les options `--output-tag-columns` et `--output-config-columns` (sous forme de liste de colonnes). Si les clés que vous avez spécifiées n'existent pas pour la ressource concernée, elles seront vides. Vous pouvez également configurer ces colonnes par défaut dans le fichier de configuration (Voir [Personnalisation de la configuration](#customizing-configuration)).

Par exemple, vous pouvez générer une sortie HTML avec des Tags et ajouter « Owner » et « Environment » en tant que colonnes à votre rapport en utilisant les :```sh
./metahub --output-modes html --output-tag-columns Owner Environment

SQLite

MetaHub peut enregistrer les résultats et le contexte dans une base de données SQLite. Cette base de données peut être utilisée pour des analyses approfondies, des rapports et une intégration avec d'autres outils, comme Powerpipe. La base de données sera sauvegardée dans le dossier outputs/ avec la date d'exécution et l'extension .db.

Utilisation avec Powerpipe

Vous pouvez utiliser la base de données SQLite générée par MetaHub avec Powerpipe. Vous trouverez le mod MetaHub PowerPipe dans le dossier powerpipe/.

Pour l'utiliser, vous devez avoir Powerpipe installé sur votre système.

Une fois installé, vous pouvez exécuter la commande suivante :```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db

root@kitploit:~
### Créez vos propres tableaux de bord

La création de tableaux de bord avec Powerpipe est très simple et puissante. Vous pouvez consulter la [documentation Powerpipe](https://powerpipe.io/docs) pour plus d'informations.

Vous trouverez ci-dessous les tables disponibles dans la base de données SQLite.

#### Ressources

| Nom de la colonne               | Type de données | Description                                                                                  |
| ------------------------------- | --------------- | -------------------------------------------------------------------------------------------- |
| resource_arn                    | VARCHAR         | Le nom de ressource Amazon (ARN) de la ressource, servant de clé primaire.                   |
| resource_type                   | VARCHAR         | Le type de la ressource.                                                                     |
| resource_region                 | VARCHAR         | La région où se trouve la ressource.                                                        |
| resource_account_id             | VARCHAR         | L'ID du compte associé à la ressource. Clé étrangère référençant accounts(account_id).       |
| resource_account_alias          | VARCHAR         | L'alias du compte associé à la ressource.                                                    |
| resource_tags                   | TEXT            | Tags associés à la ressource.                                                                |
| resource_exposure               | VARCHAR         | Le niveau d'exposition de la ressource.                                                      |
| resource_access                 | VARCHAR         | Le niveau d'accès de la ressource.                                                           |
| resource_encryption             | VARCHAR         | Le statut de chiffrement de la ressource.                                                    |
| resource_status                 | VARCHAR         | Le statut actuel de la ressource.                                                            |
| resource_application            | VARCHAR         | L'application associée à la ressource.                                                       |
| resource_environment            | VARCHAR         | L'environnement (par exemple, production, préproduction) dans lequel se trouve la ressource. |
| resource_owner                  | VARCHAR         | Le propriétaire de la ressource.                                                             |
| resource_score                  | INTEGER         | Un score associé à la ressource.                                                             |
| resource_findings_score         | INTEGER         | Un score basé sur les constats associés à la ressource.                                      |
| resource_findings_critical      | INTEGER         | Le nombre de constats critiques.                                                             |
| resource_findings_high          | INTEGER         | Le nombre de constats de sévérité élevée.                                                    |
| resource_findings_medium        | INTEGER         | Le nombre de constats de sévérité moyenne.                                                   |
| resource_findings_low           | INTEGER         | Le nombre de constats de sévérité faible.                                                    |
| resource_findings_informational | INTEGER         | Le nombre de constats informatifs.                                                           |

#### Constats

| Nom de la colonne          | Type de données | Description                                                |
| -------------------------- | --------------- | ---------------------------------------------------------- |
| finding_id                 | VARCHAR         | L'identifiant unique du constat, servant de clé primaire.   |
| finding_title              | VARCHAR         | Le titre du constat.                                        |
| finding_severity           | VARCHAR         | La sévérité du constat.                                     |
| finding_workflowstatus     | VARCHAR         | Le statut du workflow du constat.                           |
| finding_recordstate        | VARCHAR         | L'état d'enregistrement du constat.                         |
| finding_compliancestatus   | VARCHAR         | Le statut de conformité du constat.                         |
| finding_productarn         | VARCHAR         | L'ARN du produit générant le constat.                       |
| finding_resource_arn       | VARCHAR         | L'ARN de la ressource associée.                             |

#### Comptes

| Nom de la colonne                   | Type de données | Description                                                                          |
| ----------------------------------- | --------------- | ------------------------------------------------------------------------------------ |
| account_id                          | INTEGER         | L'identifiant unique du compte, servant de clé primaire.                             |
| account_alias                       | VARCHAR         | L'alias du compte.                                                                   |
| account_organizations_id            | VARCHAR         | L'ID de l'organisation à laquelle le compte appartient.                              |
| account_organizations_arn           | VARCHAR         | L'ARN de l'organisation à laquelle le compte appartient.                             |
| account_master_account_id           | VARCHAR         | L'ID du compte maître, si ce compte fait partie d'une organisation AWS.              |
| account_master_account_email        | VARCHAR         | L'adresse e-mail associée au compte maître.                                          |
| account_alternate_contact_type      | VARCHAR         | Le type de contact alternatif (par exemple, facturation, sécurité).                  |
| account_alternate_contact_name      | VARCHAR         | Le nom du contact alternatif.                                                        |
| account_alternate_contact_email     | VARCHAR         | L'adresse e-mail du contact alternatif.                                              |
| account_alternate_contact_phone     | VARCHAR         | Le numéro de téléphone du contact alternatif.                                        |
| account_alternate_contact_title     | VARCHAR         | Le titre du contact alternatif.                                                      |

# Filtres

Vous pouvez filtrer les constats de sécurité et les ressources que vous obtenez de votre source de différentes manières et les combiner pour obtenir exactement ce que vous cherchez, puis réutiliser ces filtres pour créer des automatisations, des alertes, des rapports, etc.

- [Filtrage Security Hub](#security-hub-filtering)
- [Filtrage Security Hub à l'aide de modèles YAML](#security-hub-filtering-using-yaml-templates)
- [Filtres Config](#config-filters)
- [Filtres Tags](#tags-filters)
- [Filtres d'impact](#impact-filters)

## Filtrage Security Hub

MetaHub prend en charge le filtrage des constats AWS Security Hub sous la forme d'un filtrage `KEY=VALUE` pour AWS Security Hub en utilisant l'option `--sh-filters`, de la même manière que vous filtreriez avec AWS CLI mais limité à la comparaison `EQUALS`. Si vous souhaitez une autre comparaison, utilisez l'option `--sh-template` [Filtrage Security Hub à l'aide de modèles YAML](#security-hub-filtering-using-yaml-templates).

Vous pouvez consulter les filtres disponibles dans la [documentation AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/securityhub.html#SecurityHub.Client.get_findings)```sh
./metahub --sh-filters <KEY=VALUE>

Si vous ne spécifiez aucun filtre, les filtres par défaut sont appliqués : RecordState=ACTIVE WorkflowStatus=NEW

Transmettre des filtres via cette option réinitialise les filtres par défaut. Si vous souhaitez ajouter des filtres aux valeurs par défaut, vous devez les spécifier en plus de ceux par défaut. Par exemple, ajouter SeverityLabel aux filtres par défaut :```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW

root@kitploit:~
Si une valeur contient des espaces, vous devez la spécifier entre guillemets doubles : `"ProductName="Security Hub"`

Vous pouvez ajouter autant de filtres différents que nécessaire à votre requête et également ajouter la même clé de filtre avec des valeurs différentes :

Exemples :

- Filtrer par sévérité (CRITICAL) :```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
  • Filtrer par sévérité (CRITICAL and HIGH) :```sh ./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL SeverityLabel=HIGH
root@kitploit:~
- Filtrer par Sévérité et Compte AWS :```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
  • Filtrer par titre de vérification :```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW Title="EC2.22 Unused EC2 security groups should be removed"
root@kitploit:~
- Filtrer par type de ressource AWS :```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
  • Filtrer par Resource ID:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceId="arn:aws:ec2:eu-west-1:01234567890:security-group/sg-01234567890"
root@kitploit:~
- Filtrer par ID de résultat :```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"
  • Filtrer par statut de conformité :```sh ./metahub --sh-filters ComplianceStatus=FAILED
root@kitploit:~
## Filtrage du Security Hub à l'aide de modèles YAML

**MetaHub** vous permet de créer des filtres complexes à l'aide de fichiers YAML (modèles) que vous pouvez réutiliser selon vos besoins. Les modèles YAML vous permettent d'écrire des filtres en utilisant toute comparaison prise en charge par AWS Security Hub, comme "EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS". Vous pouvez appeler votre fichier YAML en utilisant l'option `--sh-template <<FILE>>`.

Vous trouverez des exemples dans le dossier [templates](https://github.com/gabrielsoltz/metahub/blob/HEAD/templates)

- Filtrage à l'aide du modèle YAML default.yml:```sh
./metaHub --sh-template templates/default.yml

Config Filters

MetaHub prend en charge les Config filters (et associations) en utilisant KEY=VALUE où la valeur ne peut être que True ou False via l'option --mh-filters-config. Vous pouvez utiliser autant de filtres que vous le souhaitez et les séparer par des espaces. Si vous spécifiez plusieurs filtres, vous obtiendrez toutes les ressources qui correspondent à tous les filtres.

Les Config filters ne prennent en charge que les valeurs True ou False :

  • Un Config filter défini sur True signifie True ou avec des données.
  • Un Config filter défini sur False signifie False ou sans données.

Les Config filters s'exécutent après les AWS Security Hub filters :

  1. MetaHub récupère les AWS Security Findings en fonction des filtres que vous avez spécifiés avec --sh-filters (ou ceux par défaut).
  2. MetaHub exécute le contexte pour les ressources AWS affectées en fonction de la liste précédente de findings.
  3. MetaHub vous montre uniquement les ressources qui correspondent à votre --mh-filters-config, donc un sous-ensemble des ressources du point 1.

Exemples :

  • Obtenez tous les Security Groups (ResourceType=AwsEc2SecurityGroup) avec les AWS Security Hub findings qui sont ACTIVE et NEW (RecordState=ACTIVE WorkflowStatus=NEW) seulement s'ils sont associés à des interfaces réseau (network_interfaces=True) :```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-config network_interfaces=True
root@kitploit:~
- Obtenir tous les compartiments S3 (`ResourceType=AwsS3Bucket`) uniquement s'ils sont publics (`public=True`):```sh
./metahub --sh-filters ResourceType=AwsS3Bucket --mh-filters-config public=False

Filtres de tags

MetaHub prend en charge les filtres de tags sous la forme KEY=VALUE où KEY est le nom du tag et value est la valeur du tag. Vous pouvez utiliser autant de filtres que vous le souhaitez et les séparer par des espaces. Spécifier plusieurs filtres vous donnera toutes les ressources qui correspondent à au moins un filtre.

Les filtres de tags s'exécutent après les filtres AWS Security Hub :

  1. MetaHub récupère les résultats de sécurité AWS en fonction des filtres que vous avez spécifiés avec --sh-filters (ou ceux par défaut).
  2. MetaHub exécute les tags pour les ressources AWS concernées sur la base de la liste précédente de résultats.
  3. MetaHub vous montre uniquement les ressources qui correspondent à votre --mh-filters-tags, il s'agit donc d'un sous-ensemble des ressources du point 1.

Exemples :

  • Obtenez tous les groupes de sécurité (ResourceType=AwsEc2SecurityGroup) avec des résultats AWS Security Hub qui sont ACTIFS et NOUVEAUX (RecordState=ACTIVE WorkflowStatus=NEW) uniquement s'ils sont tagués avec un tag Environment et la valeur Production :```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-tags Environment=Production
root@kitploit:~
## Filtres d'impact

**MetaHub** prend en charge les **filtres d'impact** : vous pouvez filtrer par les [clés d'impact](#impact) calculées par MetaHub. Vous pouvez utiliser autant de filtres que vous le souhaitez et les séparer par des espaces. Si vous spécifiez plusieurs filtres, vous obtiendrez toutes les ressources qui correspondent à **tous** les filtres.

Exemples :

- Filtrer toutes les conclusions de sécurité affectant les ressources dont l'exposition est calculée comme effectivement publique :```sh
./metahub --mh-filters-impact exposure=effectively-public
  • Filtrer tous les Security Findings affectant les ressources dont le statut calculé est not-attached :```sh ./metahub --mh-filters-impact status=not-attached
root@kitploit:~
# Actions de Security Hub

## Mise à jour du statut de workflow

Vous pouvez utiliser **MetaHub** pour mettre à jour le statut de workflow de vos findings AWS Security Hub (`NOTIFIED`, `NEW`, `RESOLVED`, `SUPPRESSED`) avec une seule commande. Vous utiliserez l'option `--update-findings` pour mettre à jour tous les findings de votre requête MetaHub. Cela signifie que vous pouvez mettre à jour un, dix ou des milliers de findings en utilisant une seule commande. L'API AWS Security Hub est limitée à 100 findings par mise à jour. MetaHub divisera vos résultats en lots de 100 éléments pour contourner cette limitation et mettre à jour vos findings quel que soit leur nombre.

Par exemple, en utilisant le filtre suivant : `./metahub --sh-filters ResourceType=AwsSageMakerNotebookInstance RecordState=ACTIVE WorkflowStatus=NEW`, j'ai trouvé deux ressources affectées avec trois findings chacune, soit six findings Security Hub au total.

L'exécution de la commande de mise à jour suivante mettra à jour le statut de workflow de ces six findings en `NOTIFIED` avec une note :```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."

update-findings

update-findings

L'option --update-findings vous demandera une confirmation avant de mettre à jour vos findings. Vous pouvez ignorer cette confirmation en utilisant l'option --no-actions-confirmation.

Enrichissement des Findings

Vous pouvez utiliser MetaHub pour enrichir vos Findings AWS Security Hub avec les sorties Context en utilisant l'option --enrich-findings. Enrichir vos findings signifie les mettre à jour directement dans AWS Security Hub. MetaHub utilise le champ UserDefinedFields pour cela.

En enrichissant vos findings directement dans AWS Security Hub, vous pouvez profiter de fonctionnalités telles que les Insights et les Filters en utilisant les informations supplémentaires qui n'étaient pas disponibles auparavant dans Security Hub.

Par exemple, vous souhaitez enrichir tous les findings AWS Security Hub avec WorkflowStatus=NEW, RecordState=ACTIVE, et ResourceType=AwsS3Bucket qui sont public=True avec les sorties Context:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsS3Bucket --mh-filters-checks public=True --enrich-findings

root@kitploit:~
<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/6190/93a45d119a712b11ae5f23ea68e3a1f7d71e0e9511df7d7dadd2b462fcde71a2.png" alt="update-findings" width="850"/>
</p>

L'option `--enrich-findings` vous demandera une confirmation avant d'enrichir vos conclusions. Vous pouvez ignorer cette confirmation en utilisant l'option `--no-actions-confirmation`.

# Contribuer

Vous pouvez suivre ce guide si vous souhaitez contribuer au module Context [guide](https://github.com/gabrielsoltz/metahub/blob/HEAD/docs/context.md).
Télécharger l’outil
Statuts possiblesValeurDescription
🔴 effectively-public100%La ressource est effectivement publique depuis Internet.
🟠 restricted-public40%La ressource est publique, mais avec une restriction telle qu'un groupe de sécurité.
🟠 unrestricted-private30%La ressource est privée mais sans restriction, comme un groupe de sécurité ouvert.
🟠 launch-public10%Ce sont des ressources qui peuvent lancer d'autres ressources en tant que publiques. Par exemple, un groupe Auto Scaling ou un sous-réseau.
🟢 restricted0%La ressource est restreinte.
🔵 unknown-La ressource n'a pas pu être vérifiée.
Statuts possiblesValeurDescription
🔴 unrestricted100%Le principal est non restreint, sans aucune condition ni restriction.
🔴 untrusted-principal70%Le principal est un compte AWS, ne faisant pas partie de vos comptes de confiance.
🟠 unrestricted-principal40%Le principal n'est pas restreint, défini avec un joker. Il pourrait y avoir des conditions le restreignant ou d'autres restrictions comme les blocs publics S3.
🟠 cross-account-principal30%Le principal provient d'un autre compte AWS.
🟠 unrestricted-actions30%Les actions sont définies à l'aide de jokers.
🟠 dangerous-actions30%Certaines actions dangereuses sont définies dans le cadre de cette politique.
🟠 unrestricted-service10%La politique autorise un service AWS en tant que principal sans restriction.
🟢 restricted0%La politique est restreinte.
🔵 unknown-La politique n'a pas pu être vérifiée.
Valeur
Description
🔴 non chiffré100%La ressource n'est pas entièrement chiffrée.
🟢 chiffré0%La ressource est entièrement chiffrée, y compris toutes ses associations.
🔵 inconnu-Le chiffrement de la ressource n'a pas pu être vérifié.
Statuts possiblesValeurDescription
🟠 attaché100%La ressource supporte le rattachement et est attachée.
🟠 en cours d'exécution100%La ressource supporte l'exécution et est en cours d'exécution.
🟠 activé100%La ressource supporte l'activation et est activée.
🟢 non attaché0%La ressource supporte le rattachement et n'est pas attachée.
🟢 pas en cours d'exécution0%La ressource supporte l'exécution et n'est pas en cours d'exécution.
🟢 non activé0%La ressource supporte l'activation et n'est pas activée.
🔵 inconnu-La ressource n'a pas pu être vérifiée pour le statut.
Statuts possiblesValeurDescription
🟠 production100%C'est une ressource de production.
🟢 staging30%C'est une ressource de staging.
🟢 development0%C'est une ressource de développement.
🔵 unknown-La ressource n'a pas pu être vérifiée pour l'environnement.
--sh-account
--sh-assume-role
--sh-account
--sh-assume-role
--sh-profile