Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
metahub — Automatisiertes Tool zur Anreicherung und Bewertung der Auswirkungen von Sicherheitsergebnissen für AWS. Reichert Schwachstellendaten mit Ressourcenkontext, Verknüpfungen und Tags an, um kontextbezogene Auswirkungsbewertungen für eine priorisierte Behebung zu berechnen. | Kitploit
Tools/GitHubGitHub/gabrielsoltz/metahub
SchwachstellenscannerSchwachstellenanalyseKonfigurationsprüfungCloud-SicherheitBedrohungsanalyseIncident Response
GitHubgabrielsoltz/metahub

metahub

Automatisiertes Tool zur Anreicherung und Bewertung der Auswirkungen von Sicherheitsergebnissen für AWS. Reichert Schwachstellendaten mit Ressourcenkontext, Verknüpfungen und Tags an, um kontextbezogene Auswirkungsbewertungen für eine priorisierte Behebung zu berechnen.

Repository anzeigen
177193vor 6 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

MetaHub

MetaHub ist ein automatisiertes Tool zur kontextualisierten Anreicherung und Auswirkungsbewertung von Sicherheitsergebnissen für das Schwachstellenmanagement. Sie können es mit AWS Security Hub oder jedem ASFF-kompatiblen Sicherheitsscanner verwenden. Hören Sie auf, sich auf nutzlose Schweregrade zu verlassen, und wechseln Sie zu Auswirkungsbewertungsdefinitionen, die auf IHREM Kontext basieren.

AWS ECR Gallery

Inhaltsverzeichnis

  • Description
  • Quick Run
  • Context
  • Impact
  • High Level Architecture
  • Use Cases
  • Configuration
  • Run with Python
  • Run with Docker
  • Run with Lambda
  • Run with Security Hub Custom Action
  • AWS Authentication
  • Configuring Security Hub
  • Configuring Context
  • Inputs
  • Output
  • Filters
  • Security Hub Actions
  • Contributing

Beschreibung

MetaHub ist ein Open-Source-Sicherheitstool für auswirkungskontextuelles Schwachstellenmanagement. Es kann den Prozess der Kontextualisierung von Sicherheitsergebnissen basierend auf Ihrer Umgebung und Ihren Anforderungen automatisieren, IHREM Kontext, die Eigentümerschaft identifizieren und eine Auswirkungsbewertung berechnen, die Sie zur Priorisierung (wo sollten Sie anfangen?) und für Automatisierungen wie Behebungen, Warnungen oder Tickets verwenden können. Das Tool ist für AWS-Umgebungen und kann mit AWS Security Hub oder jedem ASFF-kompatiblen Scanner (wie Prowler) verwendet werden.

ℹ️ Entdecken und erweitern Sie die neuen MetaHub Dashboards mit Powerpipe!

MetaHub beschreibt Ihren Kontext, indem es eine Verbindung zu Ihren betroffenen Ressourcen in Ihren betroffenen Konten herstellt. Es kann Informationen über Ihr AWS-Konto und Ihre Organisation, die Tags der betroffenen Ressourcen, zugehörige CloudTrail-Ereignisse, die Konfigurationen Ihrer betroffenen Ressourcen und alle ihre Verknüpfungen beschreiben: Wenn Sie einen Sicherheitsbefund kontextualisieren, der eine EC2-Instanz betrifft, stellt MetaHub nicht nur eine Verbindung zu dieser Instanz selbst her, sondern auch zu ihren IAM-Rollen; von dort aus stellt es eine Verbindung zu den mit diesen Rollen verknüpften IAM-Richtlinien her. Es stellt eine Verbindung zu den Sicherheitsgruppen her und analysiert alle ihre Regeln, das VPC und die Subnetze, in denen die Instanz läuft, die Volumes, die Auto Scaling Groups und mehr. Sie können Filter anwenden, um die Erkennung anderer Ressourcen mit denselben Eigenschaften zu automatisieren und tiefergehende Untersuchungen durchzuführen.

Nachdem alle Informationen aus Ihrem Kontext abgerufen wurden, bewertet MetaHub die Auswirkungs-Bedingungen für alle Ihre Ressourcen: Exposition, Zugriff, Verschlüsselung, Status, Umgebung, Anwendung und Eigentümer und basierend auf diesen Berechnungen und zusätzlich zu den Informationen über die Befunde, die die Ressource betreffen, alle zusammen, generiert MetaHub einen Score für jedes Ergebnis und jede betroffene Ressource.

Sehen Sie sich das folgende von MetaHub generierte Dashboard an. Sie haben die betroffenen Ressourcen, die alle Sicherheitsergebnisse, die sie betreffen, zusammenfassen, sowie die ursprüngliche Schwere jedes Ergebnisses. Danach haben Sie den Score und alle Kriterien, die MetaHub zur Erstellung dieses Scores bewertet hat. Alle diese Informationen sind filterbar, sortierbar, gruppierbar, herunterladbar und anpassbar.

Das Folgende ist die JSON-Ausgabe für eine EC2-Instanz; sehen Sie, wie MetaHub alle Informationen zu seinem Kontext unter Verknüpfungen, Konfiguration, Tags, Konto und CloudTrail und schließlich dem Auswirkungs-Schlüssel mit dem Score und allen Kriterien organisiert, die zur Erstellung dieses Scores bewertet wurden.

Diagram

MetaHub bietet eine Reihe von Möglichkeiten, Ihre Sicherheitsergebnisse für Untersuchungen, Unterdrückung, Aktualisierung und Integration mit anderen Tools aufzulisten, zu verwalten und auszugeben. Es ist für die Verwendung als CLI-Tool oder in automatisierten Workflows wie AWS Lambda-Funktionen konzipiert. Es unterstützt verschiedene Ausgaben, einige davon programmatisches JSON, aber auch leistungsstarke HTML, XLSX und CSV, die Sie anpassen.

Wenn Sie AWS Security Hub verwenden, integriert sich MetaHub nahtlos und erweitert dessen Funktionalitäten. Es kann als Security Hub Custom Action verwendet werden, es unterstützt AWS Security Hub Filter, Sie können den Workflow-Status Ihrer Ergebnisse verwalten und Sie können sogar Ihre Ergebnisse direkt in AWS Security Hub anreichern.

MetaHub ist für die Verwendung mit AWS konzipiert und unterstützt Multi-Account-Setups. Sie können das Tool aus jeder Umgebung ausführen, indem Sie Rollen in Ihrem AWS Security Hub master und Ihren child/service-Konten übernehmen. Dadurch können Sie aggregierte Daten aus mehreren Konten mithilfe Ihrer AWS Security Hub Multi-Account-Implementierung abrufen und gleichzeitig diese Ergebnisse mit Daten aus den Konten anreichern, in denen Ihre betroffenen Ressourcen ausgeführt werden. Weitere Informationen finden Sie unter Konfiguration von Security Hub.

Schnellstart

Lesen Sie Ihre Sicherheitsergebnisse aus AWS Security Hub mit den Standardfiltern und führen Sie die Standardkontextoptionen aus:```bash ./metahub

root@kitploit:~
Liest ein spezifisches (nach ID gefiltertes) Sicherheitsergebnis aus AWS Security Hub und führt die Standardkontextoptionen aus:```bash
./metahub --sh-filters Id=arn:aws:securityhub:us-east-1:123456789012:security-control/CloudFront.1/finding/8bd4d049-dcbc-445b-a5d1-595d8274b4c1

Liest alle aktiven Sicherheitsergebnisse, die eine Ressource betreffen (gefiltert nach ResourceId und RecordState), aus AWS Security Hub und führt die Standardkontextoptionen aus:```bash ./metahub --sh-filters RecordState=ACTIVE ResourceId=arn:aws:ec2:eu-west-1:123456789012:subnet/subnet-0b7d243ff90ebc03e

root@kitploit:~
Liest alle Sicherheitsergebnisse, die ein AWS-Konto betreffen und AKTIV sind (gefiltert nach AwsAccountId und RecordState), für Ressourcen mit einem Tag `Environment` und dem Wert `stg` und führt die Kontextoptionen `config` und `tags` aus:```bash
./metahub --sh-filters RecordState=ACTIVE AwsAccountId=123456789012 --mh-filters-tags Environment=stg --context config tags

Quick Run (Reading findings from a input ASFF file)

Lesen Sie Ihre Sicherheitsergebnisse aus Prowler als Eingabedatei und führt die Standard-Kontextoptionen aus:```bash python3 prowler.py aws -M json-asff -q ./metahub --inputs file-asff --input-asff /path/to/prowler-findings.json.asff

root@kitploit:~
Liest Ihre Sicherheitsergebnisse aus Powerpipe als Eingabedatei und führt die Standard-Kontextoptionen aus:```bash
powerpipe benchmark run aws_compliance.benchmark.all_controls --export asff
./metahub --inputs file-asff --input-asff /path/to/powerpipe-findings.json.asff

Liest Ihre Sicherheitsergebnisse von Trivy als Eingabedatei und führt die Standardkontextoptionen aus:```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:~
# Context

In **MetaHub** bezieht sich **context** auf Informationen über die betroffenen Ressourcen wie deren **Konfiguration**, **Assoziationen**, **Logs**, **Tags** und **Account**.

MetaHub bleibt nicht bei der betroffenen Ressource stehen, sondern analysiert auch alle damit verbundenen oder angehängten Ressourcen. Wenn beispielsweise ein Sicherheitsbefund zu einer Security Group vorliegt, analysiert **MetaHub** die Security Group und alles, was damit verbunden ist, wie die EC2-Instanzen, die sie verwenden. Für jede zugehörige Ressource ruft **MetaHub** deren Kontext ab. Ist die Security Group an eine EC2-Instance angehängt, analysiert **MetaHub** die Instanz und alle ihre Assoziationen, wie die IAM-Rollen und -Richtlinien. Ausgehend von einem einzigen Sicherheitsbefund zu einer Security Group ruft **MetaHub** den Kontext der Security Group, der EC2-Instance, der IAM-Rollen und der IAM-Richtlinien ab. Dies ist entscheidend, um die Auswirkungen Ihrer Sicherheitsbefunde zu verstehen.

Das **context**-Modul besteht aus fünf Hauptteilen: [**config**](#config) (welches [**associations**](#associations) einschließt), [**tags**](#tags), [**cloudtrail**](#cloudtrail) und [**account**](#account). Standardmäßig sind nur **config**, **tags** und **account** aktiviert, aber Sie können dieses Verhalten mit der Option `--context` ändern (z. B. `--context config tags cloudtrail account` verwenden, um alle Kontext-Schlüssel zu aktivieren, oder `--context config`, um nur den Config- und Associations-Schlüssel zu aktivieren):

## Config

Unter dem Schlüssel `config` finden Sie wichtige Konfigurationen der betroffenen Ressource. Wenn es sich bei der betroffenen Ressource beispielsweise um einen S3-Bucket handelt, finden Sie Informationen über dessen Bucket-Richtlinie, ACLs, Verschlüsselungskonfiguration und mehr. Handelt es sich um eine EC2-Instance, finden Sie Informationen über ihren Schlüssel, ihre öffentliche und private IP, Metadaten und mehr. Die von **MetaHub** abgerufenen Konfigurationsinformationen sind nach Ressourcentyp definiert. Wenn Sie weitere Konfigurationsinformationen hinzufügen möchten, siehe [contributing](#contributing).

Sie können Ihre Ergebnisse basierend auf Config-Ausgaben mit der Option `--mh-filters-config <key> {True/False}` filtern (siehe [config filters](#config-filters)).

<details>
  <summary>Beispiel für einen S3-Bucket-Config-Key</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
    }
  ]
},

Assoziationen

Unter dem Schlüssel associations finden Sie alle zugehörigen Ressourcen der betroffenen Ressource. Zum Beispiel, wenn die betroffene Ressource eine EC2-Instanz ist, finden Sie Ressourcen wie: Security Groups, IAM Roles, Volumes, VPC, Subnets, Auto Scaling Groups. Wenn die betroffene Ressource eine IAM-Rolle ist, finden Sie Ressourcen wie IAM Policies, IAM Users, IAM Groups und mehr. Jedes Mal, wenn MetaHub eine Assoziation findet, verbindet es sich erneut mit der zugehörigen Ressource und ruft deren eigenen Kontext ab. Assoziationen sind entscheidend, um den Kontext und die Auswirkungen Ihrer Sicherheitsergebnisse zu verstehen.

Sie können Ihre Ergebnisse basierend auf Assoziationsausgaben mit der Option filtern: --mh-filters-config <key> {True/False} (siehe Konfigurationsfilter).

Beispiel für einen EC2-Instanz assocations key```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 } } }, } ```

Tags

Unter dem tags-Schlüssel finden Sie alle mit der betroffenen Ressource verknüpften Tags. MetaHub nutzt die AWS Resource Groups Tagging API, um die mit Ihren Ressourcen verbundenen Tags abzufragen. Beachten Sie, dass nicht alle AWS-Ressourcentypen diese API unterstützen. Sie können die unterstützten Dienste überprüfen.

Tags sind ein entscheidender Bestandteil zum Verständnis Ihres Kontextes. Tagging-Strategien umfassen oft:

  • Umgebung (wie Production, Staging, Development usw.)
  • Datenklassifizierung (wie Confidential, Restricted usw.)
  • Eigentümer (wie ein Team, ein Squad, eine Geschäftseinheit usw.)
  • Compliance (wie PCI, SOX usw.)

Wenn Sie eine geeignete Tagging-Strategie verfolgen, können Sie interessante Ausgaben filtern und generieren. Beispielsweise könnten Sie alle Ergebnisse auflisten, die ein bestimmtes Team betreffen, und diese Daten direkt an dieses Team weitergeben.

Sie können Ihre Ergebnisse basierend auf Tag-Ausgaben mit der Option --mh-filters-tags TAG=VALUE filtern (siehe Tags-Filter).

Beispiel für einen EC2-Instanz-Tag-Schlüssel```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

Unter dem Schlüssel cloudtrail finden Sie kritische CloudTrail-Ereignisse im Zusammenhang mit der betroffenen Ressource, z. B. Erstellungsereignisse. Die von uns überprüften CloudTrail-Ereignisse werden nach Ressourcentyp definiert, und Sie können sie durch Bearbeiten der Konfigurationsdatei resources.py hinzufügen, entfernen oder ändern. Beispielsweise sucht MetaHub für eine betroffene Ressource vom Typ Security Group nach den folgenden Ereignissen: CreateSecurityGroup (Security Group Creation Event) und AuthorizeSecurityGroupIngress (Security Group Rule Authorization Event).

Beispiel für einen EC2-Instance-CloudTrail-Schlüssel```json "cloudtrail": { "RunInstances": { "Username": "root", "EventTime": "2023-11-15 06:10:07+01:00", "EventId": "4f122d76-812d-4438-bc33-3585a9e863cf" } } ```
Beispiel für einen DynamoDB-Tabellen-CloudTrail-Key```json "cloudtrail": { "CreateTable": { "Username": "gabriel.soltz", "EventTime": "2023-12-05 14:34:25+01:00", "EventId": "7110e3ae-09a3-44b9-929a-1775e0fbedcf" } } ```

Konto

Unter dem Schlüssel account finden Sie Informationen über das Konto, auf dem die betroffene Ressource läuft, wie z.B. ob es Teil einer AWS Organizations ist, Informationen über deren Kontakte und mehr.

Beispiel für den account-Schlüssel```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

Das Impact-Modul in MetaHub konzentriert sich auf das Verständnis der 7 Schlüsseleigenschaften der betroffenen Ressource: Exposure, Access, Encryption, Status, Environment, Application und Owner und kombiniert deren Werte mit den Werten aller Sicherheits-Findings, die dieselbe Ressource betreffen, sowie deren Schweregraden, um einen Score zu generieren. Der Impact-Score ist eine Zahl zwischen 0 und 100, wobei 100 die höchste Auswirkung darstellt.


Exposure

Exposure bewertet, wie die betroffene Ressource gegenüber anderen Netzwerken exponiert ist. Beispielsweise, ob die betroffene Ressource effektiv öffentlich oder nur öffentlich ist, ob sie Teil eines VPC ist, ob sie eine öffentliche IP hat oder ob sie durch eine Firewall oder eine Sicherheitsgruppe geschützt ist.

Mögliche StatusWertBeschreibung
🔴 effectively-public100%Die Ressource ist effektiv öffentlich aus dem Internet.
🟠 restricted-public40%Die Ressource ist öffentlich, aber es gibt eine Einschränkung wie eine Sicherheitsgruppe.
🟠 unrestricted-private30%Die Ressource ist privat, aber uneingeschränkt, wie eine offene Sicherheitsgruppe.
🟠 launch-public10%Dies sind Ressourcen, die andere Ressourcen als öffentlich starten können. Zum Beispiel eine Auto-Scaling-Gruppe oder ein Subnet.
🟢 restricted0%Die Ressource ist eingeschränkt.
🔵 unknown-Die Ressource konnte nicht überprüft werden.
Beispiel für eine effectively-public Ressource```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 } } ```

Zugriff

Zugriff bewertet die Ressourcen-Richtlinienebene. MetaHub überprüft jede verfügbare Richtlinie, einschließlich: IAM-verwaltete Richtlinien, IAM-Inline-Richtlinien, Ressourcenrichtlinien, Bucket-ACLs und alle Verknüpfungen mit anderen Ressourcen wie IAM-Rollen, deren Richtlinien ebenfalls analysiert werden. Eine uneingeschränkte Richtlinie ist nicht nur ein Problem für sich selbst, sie wirkt sich auch auf jede andere Ressource aus, die sie verwendet.

Mögliche StatusWertBeschreibung
🔴 unrestricted100%Der Prinzipal ist uneingeschränkt, ohne Bedingung oder Einschränkung.
🔴 untrusted-principal70%Der Prinzipal ist ein AWS-Konto, das nicht zu Ihren vertrauenswürdigen Konten gehört.
🟠 unrestricted-principal40%Der Prinzipal ist nicht eingeschränkt, mit einem Platzhalter definiert. Es könnte Bedingungen geben, die ihn einschränken, oder andere Einschränkungen wie s3 public blocks.
🟠 cross-account-principal30%Der Prinzipal stammt von einem anderen AWS-Konto.
🟠 unrestricted-actions30%Die Aktionen sind mit Platzhaltern definiert.
🟠 dangerous-actions30%Einige gefährliche Aktionen sind als Teil dieser Richtlinie definiert.
🟠 unrestricted-service10%Die Richtlinie erlaubt einen AWS-Dienst als Prinzipal ohne Einschränkung.
🟢 restricted0%Die Richtlinie ist eingeschränkt.
🔵 unknown-Die Richtlinie konnte nicht überprüft werden.
Beispiel für eine unrestricted-actions-Ressource```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", ] } ], } } ```

Verschlüsselung

Verschlüsselung bewertet die verschiedenen Verschlüsselungsebenen basierend auf jedem Ressourcentyp. Beispielsweise wird für einige Ressourcen bewertet, ob sowohl die Verschlüsselung at_rest als auch in_transit aktiviert sind.

Mögliche StatusWertBeschreibung
🔴 unverschlüsselt100%Die Ressource ist nicht vollständig verschlüsselt.
🟢 verschlüsselt0%Die Ressource ist vollständig verschlüsselt, einschließlich aller ihrer Verbindungen.
🔵 unbekannt-Die Verschlüsselung der Ressource konnte nicht überprüft werden.
Beispiel für eine unverschlüsselte Ressource```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 } } ```

Status

Status bewertet den Status der betroffenen Ressource hinsichtlich Anbindung oder Funktion. Zum Beispiel für eine EC2-Instanz bewerten wir, ob die Ressource läuft, gestoppt oder beendet ist, aber für Ressourcen wie EBS-Volumes und Sicherheitsgruppen bewerten wir, ob diese Ressourcen an eine andere Ressource angebunden sind.

Mögliche StatuswerteWertBeschreibung
🟠 angebunden100%Die Ressource unterstützt Anbindung und ist angebunden.
🟠 laufend100%Die Ressource unterstützt Laufbetrieb und läuft.
🟠 aktiviert100%Die Ressource unterstützt Aktivierung und ist aktiviert.
🟢 nicht angebunden0%Die Ressource unterstützt Anbindung und ist nicht angebunden.
🟢 nicht laufend0%Die Ressource unterstützt Laufbetrieb und läuft nicht.
🟢 nicht aktiviert0%Die Ressource unterstützt Aktivierung und ist nicht aktiviert.
🔵 unbekannt-Die Ressource konnte nicht auf den Status überprüft werden.
Beispiel für eine laufende Ressource```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 } } ```

Umgebung

Umgebung bewertet die Umgebung, in der die betroffene Ressource ausgeführt wird. Standardmäßig definiert MetaHub 3 Umgebungen: production, staging und development, Sie können diese jedoch nach Bedarf hinzufügen, entfernen oder ändern. MetaHub bewertet die Umgebung anhand der Tags der betroffenen Ressource, der Konto-ID oder des Konto-Alias. Sie können Ihre eigenen Umgebungsdefinitionen und -strategien in der Konfigurationsdatei festlegen (Siehe Konfiguration anpassen).

Mögliche StatusWertBeschreibung
🟠 Produktion100%Es handelt sich um eine Produktionsressource.
🟢 Staging30%Es handelt sich um eine Staging-Ressource.
🟢 Entwicklung0%Es handelt sich um eine Entwicklungsressource.
🔵 Unbekannt-Die Ressource konnte nicht auf die Umgebung überprüft werden.
Beispiel für eine Produktionsressource, die durch Tags identifiziert wurde```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 bewertet die Anwendung, zu der die betroffene Ressource gehört. MetaHub nutzt die AWS myApplications-Funktion, die auf dem Tag awsApplication basiert. Sie können diese Funktionalität jedoch basierend auf Ihrem Kontext erweitern, z. B. durch die Definition anderer Tags, die Sie zur Kennzeichnung von Anwendungen oder Diensten verwenden (wie Service oder andere), oder durch die Verwendung von Konto-ID oder Alias. Sie können Ihre Anwendungsdefinitionen und -strategie in der Konfigurationsdatei festlegen (Siehe Anpassen der Konfiguration).

Mögliche StatusWertBeschreibung
🔵 unknown-Die Ressource konnte nicht auf Anwendung überprüft werden.
Beispiel für eine Ressource, die durch das myApplication-Tag zugeordnet wurde```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 } } } ```

Owner

Owner konzentriert sich auf die Besitzererkennung. Es kann den Besitzer der betroffenen Ressource auf verschiedene Weise ermitteln. Diese Informationen können verwendet werden, um einen Sicherheitsfund automatisch dem richtigen Besitzer zuzuweisen, ihn zu eskalieren oder Entscheidungen auf dieser Grundlage zu treffen. Eine automatisierte Möglichkeit, den Besitzer einer Ressource zu ermitteln, ist für Sicherheitsteams von entscheidender Bedeutung. Sie ermöglicht es ihnen, sich auf die kritischsten Probleme zu konzentrieren und diese so schnell wie möglich den richtigen Personen in automatisierten Arbeitsabläufen zuzuweisen. Sie können Ihre Besitzerdefinitionen und -strategie in der Konfigurationsdatei festlegen (siehe Anpassen der Konfiguration).

Mögliche StatusWertBeschreibung
🔵 unbekannt-Die Ressource konnte nicht auf Besitzer überprüft werden.
Beispiel für eine Ressource, die über eine Konto-ID zugeordnet wurde```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": [], }, } } ```

Ergebnisse

Im Rahmen der Berechnung des Auswirkungs-Scores bewerten wir auch die Gesamtzahl der Sicherheitsergebnisse und deren Schweregrade, die die Ressource betreffen. Wir verwenden die folgende Formel, um diese Metrik zu berechnen:```sh (SUM of all (Finding Severity / Highest Severity) with a maximum of 1)

root@kitploit:~
Zum Beispiel, wenn die betroffene Ressource zwei Ergebnisse hat, die sie betreffen, eines mit `HIGH` und ein weiteres mit `LOW` Schweregrad, wird der **Impact Findings Score** wie folgt sein:```sh
SUM(HIGH (3) / CRITICAL (4) + LOW (0.5) / CRITICAL (4)) = 0.875

Hochrangige Architektur

MetaHub liest Ihre Sicherheitsergebnisse aus AWS Security Hub oder einem beliebigen ASFF-kompatiblen Sicherheitsscanner. Anschließend fragt es die betroffenen Ressourcen direkt im betroffenen Konto ab, um zusätzlichen Kontext zu liefern. Basierend auf diesem Kontext berechnet es seine Auswirkungen. Schließlich generiert es verschiedene Ausgaben basierend auf Ihren Anforderungen.

Diagram

Anwendungsfälle

Einige Anwendungsfälle für MetaHub sind:

  • MetaHub-Integration mit Prowler als lokaler Scanner zur Kontextanreicherung
  • Automatisierung der Unterdrückung von Security-Hub-Ergebnissen basierend auf Tagging
  • MetaHub direkt als benutzerdefinierte Aktion in Security Hub integrieren, um es direkt aus der AWS-Konsole zu verwenden
  • Erstellen angereicherter HTML-Berichte für Ihre Ergebnisse, die Sie filtern, sortieren, gruppieren und herunterladen können
  • Security-Hub-Insights basierend auf MetaHub-Kontext erstellen

Anpassen der Konfiguration

MetaHub verwendet Konfigurationsdateien, mit denen Sie das Verhalten einiger Prüfungen, Standardfilter und mehr anpassen können. Die Konfigurationsdateien befinden sich in lib/config/.

Dinge, die Sie anpassen können:

  • lib/config/configuration.py: Diese Datei enthält die Standardkonfiguration für MetaHub. Sie können die Standardfilter, die Standardausgabemodi, die Umgebungsdefinitionen und mehr ändern.

  • lib/config/impact.py: Diese Datei enthält die Werte und ihre Gewichtungen für die Kriterien der Auswirkungsformel. Sie können die Werte und Gewichtungen nach Ihren Bedürfnissen anpassen.

  • lib/config/reources.py: Diese Datei enthält Definitionen für jeden Ressourcentyp, z. B. welche CloudTrail-Ereignisse zu suchen sind.

Ausführen mit Python

MetaHub ist ein Python3-Programm. Sie müssen Python3 auf Ihrem System installiert haben und die erforderlichen Python-Module, die in der Datei requirements.txt beschrieben sind.

Die Anforderungen können manuell (mit pip3) oder unter Verwendung einer virtuellen Python-Umgebung (empfohlene Methode) auf Ihrem System installiert werden.

Ausführen mit einer virtuellen Python-Umgebung

  1. Klonen Sie das Repository: git clone [email protected]:gabrielsoltz/metahub.git
  2. Wechseln Sie in das Repository-Verzeichnis: cd metahub
  3. Erstellen Sie eine virtuelle Umgebung für dieses Projekt: python3 -m venv venv/metahub
  4. Aktivieren Sie die soeben erstellte virtuelle Umgebung: source venv/metahub/bin/activate
  5. Installieren Sie die Metahub-Anforderungen: pip3 install -r requirements.txt
  6. Ausführen: ./metahub -h
  7. Deaktivieren Sie Ihre virtuelle Umgebung nach dem Beenden mit: deactivate

Beim nächsten Mal benötigen Sie nur die Schritte 4 und 6, um das Programm zu verwenden.

Alternativ können Sie dieses Tool mit Docker ausführen.

Ausführen mit Docker

MetaHub ist auch als Docker-Image verfügbar. Sie können es direkt aus dem öffentlichen Docker-Image ausführen oder lokal erstellen.

Die verfügbaren Tags für MetaHub-Container sind die folgenden:

  • latest: synchron mit dem Master-Branch
  • <x.y.z>: Die Releases finden Sie hier
  • stable: Dieser Tag zeigt immer auf die neueste Version.

Um aus der öffentlichen Registry zu laufen, können Sie den folgenden Befehl ausführen:```sh docker run -ti public.ecr.aws/n2p8q5p4/metahub:latest ./metahub -h

root@kitploit:~
## AWS-Anmeldeinformationen und Docker

Wenn Sie bereits auf der AWS-Hostmaschine angemeldet sind, können Sie dieselben Anmeldeinformationen nahtlos in einem Docker-Container verwenden. Dies erreichen Sie, indem Sie entweder die erforderlichen Umgebungsvariablen an den Container übergeben oder die Anmeldeinformationsdatei einbinden.

Zum Beispiel können Sie den folgenden Befehl ausführen:```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

Andererseits, wenn Sie auf dem Host-Rechner nicht angemeldet sind, müssen Sie sich innerhalb des Containers erneut anmelden.

Docker lokal bauen und ausführen

Oder Sie können es auch lokal bauen:```sh git clone [email protected]:gabrielsoltz/metahub.git cd metahub docker build -t metahub . docker run -ti metahub ./metahub -h

root@kitploit:~
# Mit Lambda ausführen

**MetaHub** ist Lambda/Serverless bereit! Sie können MetaHub direkt auf einer AWS Lambda-Funktion ausführen, ohne dass zusätzliche Infrastruktur erforderlich ist.

Die Ausführung von MetaHub in einer Lambda-Funktion ermöglicht es Ihnen, die Ausführung basierend auf Ihren definierten Triggern zu automatisieren. Beispielsweise können Sie:

- Die MetaHub Lambda-Funktion jedes Mal auslösen, wenn ein neuer Sicherheitsbefund vorliegt, um diesen Befund in AWS Security Hub anzureichern.
- Die MetaHub Lambda-Funktion jedes Mal auslösen, wenn ein neuer Sicherheitsbefund zur Unterdrückung basierend auf Kontext vorliegt.
- Die MetaHub Lambda-Funktion auslösen, um den betroffenen Eigentümer eines Sicherheitsbefunds basierend auf Kontext zu identifizieren und ihn mit Ihren internen Systemen zuzuweisen.
- Die MetaHub Lambda-Funktion auslösen, um ein Ticket mit angereichertem Kontext zu erstellen.

## Lambda bereitstellen

Der Terraform-Code für die Bereitstellung der Lambda-Funktion ist im Ordner `terraform/` enthalten.

Führen Sie einfach die folgenden Befehle aus:```sh
cd terraform
terraform init
terraform apply

Der Code erstellt eine Zip-Datei für den Lambda-Code und eine Zip-Datei für die Python-Abhängigkeiten, die wir als Lambda-Layer verwenden werden. Außerdem werden die Lambda-Funktion und alle erforderlichen Ressourcen erstellt.

Der Terraform-Code erstellt außerdem eine benutzerdefinierte Security Hub-Aktion und eine EventBridge-Regel, um die Lambda-Funktion auszulösen, wenn die benutzerdefinierte Aktion ausgeführt wird. Siehe unten.

Lambda-Verhalten anpassen

Sie können die MetaHub-Optionen für Ihre Lambda-Funktion anpassen, indem Sie die Datei lib/lambda.py bearbeiten. Sie können die Standardoptionen für MetaHub ändern, wie z. B. die Filter, die Meta*-Optionen und mehr.

Lambda-Berechtigungen

Terraform erstellt die minimal erforderlichen Berechtigungen, damit die Lambda-Funktion lokal (im selben Konto) ausgeführt werden kann. Wenn Ihre Lambda-Funktion eine Rolle in anderen Konten annehmen soll (z. B. benötigen Sie dies, wenn Sie die Lambda-Funktion im Security Hub-Masterkonto ausführen, das Erkenntnisse aus anderen Konten aggregiert), müssen Sie die anzunehmende Rolle angeben, indem Sie die Option --mh-assume-role in der Lambda-Funktionskonfiguration hinzufügen (siehe vorheriger Schritt) und die entsprechende Richtlinie hinzufügen, damit die Lambda-Funktion diese Rolle in der Lambda-Rolle annehmen kann.

Ausführung mit benutzerdefinierter Security Hub-Aktion

MetaHub kann als benutzerdefinierte Security Hub-Aktion ausgeführt werden. Dadurch können Sie MetaHub direkt aus der Security Hub-Konsole für einen ausgewählten Befund oder für eine ausgewählte Gruppe von Befunden ausführen.

custom_action

Die benutzerdefinierte Aktion löst dann eine Lambda-Funktion aus, die MetaHub für die ausgewählten Befunde ausführt.

Wenn Sie die Lambda-Funktion über die benutzerdefinierte Security Hub-Aktion auslösen, liest die Lambda-Funktion die ausgewählten Befunde für ihren Kontext und wird für jeden Befund einmal ausgeführt. Standardmäßig werden keine Maßnahmen an den Befunden ergriffen, aber Sie können dieses Verhalten ändern. Siehe Lambda-Verhalten anpassen.

Die benutzerdefinierte Security Hub-Aktion wird als Teil des Terraform-Codes bereitgestellt. Weitere Informationen finden Sie unter Bereitstellen der Lambda-Funktion.

Wenn Sie es manuell bereitstellen möchten, können Sie die folgenden Schritte ausführen:
  1. Wählen Sie in Security Hub die Option Settings und dann Custom Actions.
  2. Wählen Sie Create custom action.
  3. Geben Sie einen Namen, eine Beschreibung und eine Custom Action ID für die Aktion an.
  4. Wählen Sie Create custom action. (Notieren Sie sich die Custom Action ARN. Sie benötigen die ARN, wenn Sie eine Regel erstellen, um diese Aktion in EventBridge zuzuordnen.)
  5. Wählen Sie in EventBridge die Option Rules und dann Create rule.
  6. Geben Sie einen Namen und eine Beschreibung für die Regel ein.
  7. Für den Event Bus wählen Sie den Event Bus aus, den Sie mit dieser Regel verknüpfen möchten. Wenn diese Regel mit Ereignissen aus Ihrem Konto übereinstimmen soll, wählen Sie default. Wenn ein AWS-Service in Ihrem Konto ein Ereignis ausgibt, geht es immer zum standardmäßigen Event Bus Ihres Kontos.
  8. Wählen Sie als Regeltyp eine Regel mit einem Ereignismuster und drücken Sie dann auf Next.
  9. Wählen Sie als Ereignisquelle AWS events.
  10. Wählen Sie als Erstellungsmethode Use pattern form.
  11. Wählen Sie als Ereignisquelle AWS services.
  12. Wählen Sie als AWS-Service Security Hub.
  13. Wählen Sie als Ereignistyp Security Hub Findings - Custom Action.
  14. Wählen Sie Specific custom action ARNs und fügen Sie eine Custom Action ARN hinzu.
  15. Wählen Sie Next.
  16. Wählen Sie unter Select targets die Lambda-Funktion
  17. Wählen Sie die Lambda-Funktion aus, die Sie für MetaHub erstellt haben.

AWS-Authentifizierung

Stellen Sie sicher, dass Sie AWS-Anmeldeinformationen auf Ihrem lokalen Rechner (oder von wo aus Sie MetaHub ausführen werden) eingerichtet haben.

Sie können zum Beispiel die Option aws configure verwenden.```sh aws configure

root@kitploit:~
Oder Sie können Ihre Anmeldeinformationen in die Umgebung exportieren.```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"

Konfiguration von Security Hub

  • Wenn Sie MetaHub für ein einzelnes AWS-Kontoszenario ausführen (AWS Security Hub aggregiert keine Erkenntnisse aus verschiedenen Konten), benötigen Sie keine zusätzlichen Optionen; MetaHub verwendet die Anmeldeinformationen aus Ihrer Umgebung. Falls Ihr IAM-Design dies erfordert, ist es dennoch möglich, sich anzumelden und eine Rolle in demselben Konto zu übernehmen, in dem Sie angemeldet sind. Verwenden Sie einfach die Optionen --sh-assume-role, um die Rolle anzugeben, und --sh-account mit derselben AWS-Konto-ID, in der Sie angemeldet sind.

  • --sh-region: Die AWS-Region, in der Security Hub ausgeführt wird. Wenn Sie keine Region angeben, wird die in Ihrer Umgebung konfigurierte verwendet. Wenn Sie die AWS Security Hub Cross-Region-Aggregation verwenden, sollten Sie diese Region als --sh-region-Option angeben, um alle Erkenntnisse gemeinsam abrufen zu können.

  • --sh-account und --sh-assume-role: Die AWS-Konto-ID, in der Security Hub ausgeführt wird, und die AWS-IAM-Rolle, die in diesem Konto übernommen werden soll. Diese Optionen sind hilfreich, wenn Sie in einem anderen AWS-Konto angemeldet sind als dem, in dem AWS Security Hub ausgeführt wird, oder wenn AWS Security Hub in einer Umgebung mit mehreren AWS-Konten betrieben wird. Beide Optionen müssen zusammen verwendet werden. Die angegebene Rolle muss über ausreichende Berechtigungen verfügen, um Erkenntnisse in AWS Security Hub abzurufen und zu aktualisieren (falls erforderlich). Wenn Sie keine --sh-account angeben, nimmt MetaHub das Konto an, in dem Sie angemeldet sind.

  • --sh-profile: Sie können auch Ihren AWS-Profilnamen angeben, der für AWS Security Hub verwendet werden soll. Bei Verwendung dieser Option müssen Sie --sh-account oder --sh-assume-role nicht angeben, da MetaHub die Anmeldeinformationen aus dem Profil verwendet. Wenn Sie --sh-account und --sh-assume-role verwenden, haben diese Optionen Vorrang vor --sh-profile.

IAM-Richtlinie für Security Hub

Dies ist die minimale IAM-Richtlinie, die Sie benötigen, um aus AWS Security Hub zu lesen und zu schreiben. Wenn Sie Ihre Erkenntnisse nicht mit MetaHub aktualisieren möchten, können Sie die Aktion securityhub:BatchUpdateFindings entfernen.```sh { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "security hub:GetFindings", "security hub:ListFindingAggregators", "security hub:BatchUpdateFindings", "iam:ListAccountAliases" ], "Resource": [ "*" ] } ] }

root@kitploit:~
# Konfiguration des Kontexts

Wenn Sie MetaHub für ein Multi-AWS-Account-Setup ausführen (AWS Security Hub aggregiert Erkenntnisse aus mehreren AWS-Konten), müssen Sie die Rolle angeben, die für Kontextabfragen übernommen werden soll, da sich die betroffenen Ressourcen nicht in demselben AWS-Konto befinden wie die AWS Security Hub-Erkenntnisse. Die Option `--mh-assume-role` wird verwendet, um direkt mit den betroffenen Ressourcen im betroffenen Konto zu verbinden. Diese Rolle muss über ausreichende Berechtigungen verfügen, um Ressourcen beschreiben zu können.

## IAM-Richtlinie für den Kontext

Die für den Kontext erforderliche Mindestrichtlinie umfasst die verwaltete Richtlinie `arn:aws:iam::aws:policy/SecurityAudit` und die folgenden Aktionen:

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

# Eingaben

MetaHub kann Sicherheitserkenntnisse mithilfe seiner API direkt aus AWS Security Hub lesen. Wenn Sie Security Hub nicht verwenden, können Sie jeden ASFF-kompatiblen Scanner nutzen. Die meisten Cloud-Sicherheitsscanner unterstützen das ASFF-Format wie Prolwer, Steampipe, Trivy und weitere.

Wenn Sie aus einer ASFF-Eingabedatei lesen möchten, müssen Sie die Option (`--inputs file-asff`) verwenden und den Pfad zur Datei angeben. Sie können mehrere Dateien durch ein Leerzeichen getrennt angeben:```sh
./metahub.py --inputs file-asff --input-asff path/to/the/file.json.asff path/to/the/file2.json.asff

Sie können auch AWS Security Hub-Funde mit ASFF-Eingabedateien kombinieren, indem Sie beide Eingaben angeben (--inputs file-asff securityhub). MetaHub verarbeitet alle Funde zusammen und liefert eine einzige Ausgabe.:```sh ./metahub.py --inputs file-asff securityhub --input-asff path/to/the/file.json.asff

root@kitploit:~
Wenn Sie eine Datei als Eingabe verwenden, können Sie die Option `--sh-filters` nicht zum Filtern von Ergebnissen verwenden, da diese Option die AWS API zum Filtern benötigt. Sie können die Optionen `--update-findings` oder `--enrich-findings` nicht verwenden, da diese Ergebnisse nicht im AWS Security Hub vorhanden sind. Wenn Sie gleichzeitig aus beiden Quellen lesen, werden nur die Ergebnisse aus dem AWS Security Hub aktualisiert.

MetaHub implementiert auch einige **Reparaturmechanismen** für das ASFF-Format, wenn es nicht korrekt formatiert ist. Dies ist ein Ansatz nach bestem Bemühen, das ASFF so nützlich wie möglich zu machen, aber es ist nicht perfekt und muss im Quellscanner behoben werden.

- Wenn der Schlüssel `Region` in den Ressourcen und auf der Root-Ebene fehlt, berechnet MetaHub die Region auf Basis der ARN der betroffenen Ressource.
- Wenn die ASFF-Datei den ASFF-Ressourcentyp nicht korrekt setzt, berechnet MetaHub ihn anhand der ARN der betroffenen Ressource mithilfe der Bibliothek [aws-arn](https://github.com/gabrielsoltz/aws-arn)
- Wenn ein anderes Feld wie `SeverityLabel`, `Workflow`, `RecordState`, `Compliance`, `Id`, `ProductArn` oder `StandardsControlArn` fehlt, setzt MetaHub diese auf `Unknown`.

# Ausgaben

**MetaHub** kann verschiedene programmatische und visuelle Ausgaben generieren. Standardmäßig sind alle Ausgabemodi aktiviert: `json-short`, `json-full`, `json-statistics`, `json-inventory`, `html`, `csv` und `xlsx`. Wenn Sie nur einen bestimmten Ausgabemodus generieren möchten, können Sie die Option `--output-modes` mit dem gewünschten Ausgabemodus verwenden. Die Ausgaben werden im Ordner `outputs/` mit dem Ausführungsdatum gespeichert.

Zum Beispiel, wenn Sie nur die Ausgabe `json-short` generieren möchten, können Sie:```sh
./metahub.py --output-modes json-short

Wenn Sie json-short, json-full und html-Ausgaben generieren möchten, können Sie Folgendes verwenden:```sh ./metahub.py --output-modes json-short json-full html

root@kitploit:~
**MetaHub** organisiert die Sicherheitsergebnisse, die dieselbe Ressource betreffen, alle zusammen unter dem Schlüssel `findings`, um Schattenbildung (wenn zwei Überprüfungen auf dasselbe Problem verweisen, aber eine allgemeiner als die andere) und Duplizierung (wenn Sie mehr als einen Scanner verwenden und dasselbe Problem von mehr als einem erhalten) zu vermeiden. Sie können dieses Verhalten klar in den Ausgaben `json-short`, `json-full` und `html` sehen.

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

## JSON

> :info: Um eine JSON-Ausgabe interaktiv zu erkunden, können Sie das Tool [fx](https://github.com/antonmedv/fx) verwenden.

### JSON-Full

Zeigt die betroffene Ressource anhand ihrer ARN als Schlüssel und die Ergebnisse, die sie betreffen, als Liste unter dem Schlüssel `findings`. Zusätzlich zu den Ergebnissen erhalten Sie auch die folgenden Schlüssel: `ResourceType`, `Region`, `AwsAccountId`, `associations`, `config`, `tags`, `account`, `cloudtrail` und `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

Zeigt die betroffene Ressource unter Verwendung ihrer ARN als Schlüssel und die sie betreffenden Erkenntnisse als Liste unter dem Schlüssel findings. Zusätzlich zu den Erkenntnissen erhalten Sie auch die folgenden Schlüssel: ResourceType, Region, AwsAccountId, associations, config, tags, account, cloudtrail und 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

Zeigt eine Liste aller Ressourcen mit ihrer ARN.```json
[
  "arn:aws:sagemaker:us-east-1:ofuscated:notebook-instance/obfuscated",
  "arn:aws:sagemaker:eu-west-1:ofuscated:notebook-instance/obfuscated"
]

JSON-Statistics

Zeigt Statistiken für jedes Feld/jeden Wert. In der Ausgabe sehen Sie jedes Feld/jeden Wert und die Anzahl der Vorkommen; zum Beispiel zeigt die folgende Ausgabe Statistiken für sechs Funde.```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

Sie können umfangreiche HTML-Berichte Ihrer Ergebnisse erstellen und dabei Ihren Kontext einfließen lassen.

HTML-Berichte sind auf vielfältige Weise interaktiv:

- Sie können Spalten hinzufügen/entfernen.
- Sie können nach beliebigen Spalten sortieren und filtern.
- Sie können nach beliebigen Spalten automatisch filtern.
- Sie können Ergebnisse gruppieren/entgruppieren.
- Sie können diese Daten auch als xlsx, CSV, HTML und JSON herunterladen.

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

## CSV

Sie können CSV-Berichte Ihrer Ergebnisse erstellen und dabei Ihren Kontext einfließen lassen.

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

## XLSX

Ähnlich wie CSV, aber mit mehr Formatierungsoptionen.

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

## Anpassung von HTML-, CSV- oder XLSX-Ausgaben

Sie können festlegen, welche Kontextschlüssel als Spalten für Ihre HTML-, CSV- und XLSX-Ausgaben aufgeschlüsselt werden sollen, indem Sie die Optionen `--output-tag-columns` und `--output-config-columns` (als Liste von Spalten) verwenden. Wenn die von Ihnen angegebenen Schlüssel für die betroffene Ressource nicht vorhanden sind, bleiben sie leer. Sie können diese Spalten auch standardmäßig in der Konfigurationsdatei konfigurieren (Siehe [Anpassung der Konfiguration](#customizing-configuration)).

Beispielsweise können Sie eine HTML-Ausgabe mit Tags generieren und Ihrem Bericht die Spalten „Owner“ und „Environment“ hinzufügen, indem Sie die folgenden Optionen verwenden:```sh
./metahub --output-modes html --output-tag-columns Owner Environment

SQLite

MetaHub kann die Ergebnisse und den Kontext in einer SQLite-Datenbank speichern. Diese Datenbank kann für weitere Analysen, Berichte und die Integration mit anderen Tools wie Powerpipe verwendet werden. Die Datenbank wird im Ordner outputs/ mit dem Ausführungsdatum und der Erweiterung .db gespeichert.

Verwendung mit Powerpipe

Sie können die von MetaHub generierte SQLite-Datenbank mit Powerpipe verwenden. Sie finden das MetaHub PowerPipe-Modul im Ordner powerpipe/.

Um es zu verwenden, müssen Sie Powerpipe auf Ihrem System installiert haben.

Nach der Installation können Sie den folgenden Befehl ausführen:```sh powerpipe server --database sqlite:../outputs/metahub-20240331-182942.db

root@kitploit:~
### Erstellen Sie Ihre eigenen Dashboards

Das Erstellen von Dashboards mit Powerpipe ist sehr einfach und leistungsstark. Weitere Informationen finden Sie in der [Powerpipe-Dokumentation](https://powerpipe.io/docs).

Im Folgenden finden Sie die in der SQLite-Datenbank verfügbaren Tabellen.

#### Resources

| Column Name                     | Data Type | Description                                                                                    |
| ------------------------------- | --------- | ---------------------------------------------------------------------------------------------- |
| resource_arn                    | VARCHAR   | Der Amazon-Ressourcenname (ARN) der Ressource, der als Primärschlüssel dient.                  |
| resource_type                   | VARCHAR   | Der Typ der Ressource.                                                                         |
| resource_region                 | VARCHAR   | Die Region, in der sich die Ressource befindet.                                                |
| resource_account_id             | VARCHAR   | Die mit der Ressource verknüpfte Konto-ID. Fremdschlüssel, der auf accounts(account_id) verweist. |
| resource_account_alias          | VARCHAR   | Der Alias des mit der Ressource verknüpften Kontos.                                             |
| resource_tags                   | TEXT      | Mit der Ressource verknüpfte Tags.                                                             |
| resource_exposure               | VARCHAR   | Die Expositionsstufe der Ressource.                                                            |
| resource_access                 | VARCHAR   | Die Zugriffsstufe der Ressource.                                                               |
| resource_encryption             | VARCHAR   | Der Verschlüsselungsstatus der Ressource.                                                      |
| resource_status                 | VARCHAR   | Der aktuelle Status der Ressource.                                                             |
| resource_application            | VARCHAR   | Die mit der Ressource verknüpfte Anwendung.                                                    |
| resource_environment            | VARCHAR   | Die Umgebung (z. B. Produktion, Staging), in der sich die Ressource befindet.                  |
| resource_owner                  | VARCHAR   | Der Eigentümer der Ressource.                                                                  |
| resource_score                  | INTEGER   | Eine mit der Ressource verknüpfte Bewertung.                                                   |
| resource_findings_score         | INTEGER   | Eine Bewertung basierend auf mit der Ressource verknüpften Ergebnissen.                         |
| resource_findings_critical      | INTEGER   | Die Anzahl kritischer Ergebnisse.                                                              |
| resource_findings_high          | INTEGER   | Die Anzahl der Ergebnisse mit hoher Schwere.                                                   |
| resource_findings_medium        | INTEGER   | Die Anzahl der Ergebnisse mit mittlerer Schwere.                                               |
| resource_findings_low           | INTEGER   | Die Anzahl der Ergebnisse mit niedriger Schwere.                                               |
| resource_findings_informational | INTEGER   | Die Anzahl der informativen Ergebnisse.                                                        |

#### Findings

| Column Name              | Data Type | Description                                                        |
| ------------------------ | --------- | ------------------------------------------------------------------ |
| finding_id               | VARCHAR   | Die eindeutige Kennung für den Befund, die als Primärschlüssel dient. |
| finding_title            | VARCHAR   | Der Titel des Befunds.                                             |
| finding_severity         | VARCHAR   | Die Schwere des Befunds.                                           |
| finding_workflowstatus   | VARCHAR   | Der Workflow-Status des Befunds.                                   |
| finding_recordstate      | VARCHAR   | Der Datensatzstatus des Befunds.                                   |
| finding_compliancestatus | VARCHAR   | Der Compliance-Status des Befunds.                                 |
| finding_productarn       | VARCHAR   | Die ARN des Produkts, das den Befund generiert.                    |
| finding_resource_arn     | VARCHAR   | Die ARN der verknüpften Ressource.                                 |

#### Accounts

| Column Name                     | Data Type | Description                                                                   |
| ------------------------------- | --------- | ----------------------------------------------------------------------------- |
| account_id                      | INTEGER   | Die eindeutige Kennung für das Konto, die als Primärschlüssel dient.          |
| account_alias                   | VARCHAR   | Der Alias des Kontos.                                                         |
| account_organizations_id        | VARCHAR   | Die ID der Organisation, zu der das Konto gehört.                             |
| account_organizations_arn       | VARCHAR   | Die ARN der Organisation, zu der das Konto gehört.                            |
| account_master_account_id       | VARCHAR   | Die ID des Master-Kontos, falls dieses Konto Teil einer AWS-Organisation ist. |
| account_master_account_email    | VARCHAR   | Die mit dem Master-Konto verknüpfte E-Mail-Adresse.                           |
| account_alternate_contact_type  | VARCHAR   | Die Art des alternativen Kontakts (z. B. Abrechnung, Sicherheit).             |
| account_alternate_contact_name  | VARCHAR   | Der Name des alternativen Kontakts.                                           |
| account_alternate_contact_email | VARCHAR   | Die E-Mail-Adresse des alternativen Kontakts.                                 |
| account_alternate_contact_phone | VARCHAR   | Die Telefonnummer des alternativen Kontakts.                                  |
| account_alternate_contact_title | VARCHAR   | Der Titel des alternativen Kontakts.                                          |

# Filters

Sie können die Sicherheitsergebnisse und Ressourcen, die Sie aus Ihrer Quelle erhalten, auf verschiedene Weise filtern und alle kombinieren, um genau das zu erhalten, wonach Sie suchen. Anschließend können Sie diese Filter wiederverwenden, um Automatisierungen, Warnungen, Berichte und mehr zu erstellen.

- [Security Hub Filtering](#security-hub-filtering)
- [Security Hub Filtering using YAML templates](#security-hub-filtering-using-yaml-templates)
- [Config Filters](#config-filters)
- [Tags Filters](#tags-filters)
- [Impact Filters](#impact-filters)

## Security Hub Filtering

MetaHub unterstützt das Filtern von AWS Security Hub-Ergebnissen in Form von `KEY=VALUE`-Filtern für AWS Security Hub über die Option `--sh-filters`, genauso wie Sie es mit der AWS CLI filtern würden, jedoch beschränkt auf den Vergleich `EQUALS`. Wenn Sie einen anderen Vergleich wünschen, verwenden Sie die Option `--sh-template` [Security Hub Filtering using YAML templates](#security-hub-filtering-using-yaml-templates).

Sie finden verfügbare Filter in der [AWS-Dokumentation](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/securityhub.html#SecurityHub.Client.get_findings)```sh
./metahub --sh-filters <KEY=VALUE>

Wenn Sie keine Filter angeben, werden Standardfilter angewendet: RecordState=ACTIVE WorkflowStatus=NEW

Durch die Übergabe von Filtern mit dieser Option werden die Standardfilter zurückgesetzt. Wenn Sie den Standardfiltern Filter hinzufügen möchten, müssen Sie diese zusätzlich zu den Standardfiltern angeben. Beispielsweise das Hinzufügen von SeverityLabel zu den Standardfiltern:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW

root@kitploit:~
Wenn ein Wert Leerzeichen enthält, sollten Sie ihn in doppelten Anführungszeichen angeben: `"ProductName="Security Hub"`

Sie können Ihrer Abfrage so viele verschiedene Filter hinzufügen, wie Sie benötigen, und auch denselben Filtersuchschlüssel mit unterschiedlichen Werten verwenden:

Beispiele:

- Nach Schweregrad filtern (CRITICAL):```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL
  • Nach Schweregrad filtern (CRITICAL and HIGH):```sh ./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL SeverityLabel=HIGH
root@kitploit:~
- Filter nach Schweregrad und AWS-Konto:```sh
./metaHub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW SeverityLabel=CRITICAL AwsAccountId=1234567890
  • Nach Prüftitel filtern:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW Title="EC2.22 Unused EC2 security groups should be removed"
root@kitploit:~
- Nach AWS-Ressourcentyp filtern:```sh
./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup
  • Nach Resource ID filtern:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceId="arn:aws:ec2:eu-west-1:01234567890:security-group/sg-01234567890"
root@kitploit:~
- Filtern nach 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"
  • Filtern nach Compliance-Status:```sh ./metahub --sh-filters ComplianceStatus=FAILED
root@kitploit:~
## Security Hub-Filterung mit YAML-Vorlagen

**MetaHub** ermöglicht es Ihnen, komplexe Filter mit YAML-Dateien (Vorlagen) zu erstellen, die Sie bei Bedarf wiederverwenden können. YAML-Vorlagen lassen Sie Filter mit jedem von AWS Security Hub unterstützten Vergleichsoperator schreiben, wie "EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS". Sie können Ihre YAML-Datei mit der Option `--sh-template <<FILE>>` aufrufen.

Beispiele finden Sie im Ordner [templates](https://github.com/gabrielsoltz/metahub/blob/main/templates)

- Filter mit der YAML-Vorlage default.yml:```sh
./metaHub --sh-template templates/default.yml

Config-Filter

MetaHub unterstützt Config-Filter (und Assoziationen) mit KEY=VALUE, wobei der Wert nur True oder False sein kann, unter Verwendung der Option --mh-filters-config. Sie können beliebig viele Filter verwenden und diese durch Leerzeichen trennen. Wenn Sie mehr als einen Filter angeben, erhalten Sie alle Ressourcen, die allen Filtern entsprechen.

Config-Filter unterstützen nur True oder False Werte:

  • Ein Config-Filter auf True gesetzt bedeutet True oder mit Daten.
  • Ein Config-Filter auf False gesetzt bedeutet False oder ohne Daten.

Config-Filter werden nach AWS Security Hub Filtern ausgeführt:

  1. MetaHub ruft AWS Security Findings basierend auf den von Ihnen angegebenen Filtern mit --sh-filters (oder den Standard-Filtern) ab.
  2. MetaHub führt Kontext für die von AWS betroffenen Ressourcen basierend auf der vorherigen Liste von Findings aus.
  3. MetaHub zeigt Ihnen nur die Ressourcen an, die Ihrem --mh-filters-config entsprechen, also eine Teilmenge der Ressourcen aus Punkt 1.

Beispiele:

  • Alle Sicherheitsgruppen (ResourceType=AwsEc2SecurityGroup) mit AWS Security Hub Findings, die ACTIVE und NEW sind (RecordState=ACTIVE WorkflowStatus=NEW), nur wenn sie mit Netzwerkschnittstellen (network_interfaces=True) verknüpft sind:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-config network_interfaces=True
root@kitploit:~
- Hole alle S3 Buckets (`ResourceType=AwsS3Bucket`) nur wenn sie öffentlich sind (`public=True`):```sh
./metahub --sh-filters ResourceType=AwsS3Bucket --mh-filters-config public=False

Tags-Filter

MetaHub unterstützt Tags-Filter in der Form von KEY=VALUE, wobei KEY der Tag-Name und VALUE der Tag-Wert ist. Sie können beliebig viele Filter verwenden und diese durch Leerzeichen trennen. Die Angabe mehrerer Filter gibt Ihnen alle Ressourcen, die mindestens einem Filter entsprechen.

Tags-Filter werden nach den AWS Security Hub-Filtern ausgeführt:

  1. MetaHub ruft AWS Security Hub-Ergebnisse basierend auf den von Ihnen mit --sh-filters angegebenen Filtern (oder den Standardfiltern) ab.
  2. MetaHub führt Tags für die AWS-betroffenen Ressourcen basierend auf der vorherigen Liste von Ergebnissen aus.
  3. MetaHub zeigt Ihnen nur die Ressourcen an, die Ihren --mh-filters-tags entsprechen, also eine Teilmenge der Ressourcen aus Punkt 1.

Beispiele:

  • Alle Sicherheitsgruppen (ResourceType=AwsEc2SecurityGroup) mit AWS Security Hub-Ergebnissen, die AKTIV und NEU sind (RecordState=ACTIVE WorkflowStatus=NEW), nur wenn sie mit einem Tag Environment und dem Wert Production getaggt sind:```sh ./metahub --sh-filters RecordState=ACTIVE WorkflowStatus=NEW ResourceType=AwsEc2SecurityGroup --mh-filters-tags Environment=Production
root@kitploit:~
## Impact-Filter

**MetaHub** unterstützt **Impact-Filter**, mit denen Sie nach den von MetaHub berechneten [Impact-Schlüsseln](#impact) filtern können. Sie können beliebig viele Filter verwenden und sie durch Leerzeichen trennen. Wenn Sie mehr als einen Filter angeben, erhalten Sie alle Ressourcen, die **allen** Filtern entsprechen.

Beispiele:

- Filtern Sie alle Sicherheitsergebnisse, die Ressourcen mit einer als effectively-public berechneten Exposition betreffen:```sh
./metahub --mh-filters-impact exposure=effectively-public
  • Filtere alle Security Findings, die Ressourcen mit dem Status „nicht angehängt“ betreffen:```sh ./metahub --mh-filters-impact status=not-attached
root@kitploit:~
# Security Hub Aktionen

## Aktualisieren des Workflow-Status

Sie können mit **MetaHub** den Workflow-Status Ihrer AWS Security Hub Findings (`NOTIFIED,` `NEW,` `RESOLVED,` `SUPPRESSED`) mit einem einzigen Befehl aktualisieren. Sie verwenden die Option `--update-findings`, um alle Findings aus Ihrer MetaHub-Abfrage zu aktualisieren. Das bedeutet, Sie können ein, zehn oder tausende Findings mit nur einem Befehl aktualisieren. Die AWS Security Hub API ist auf 100 Findings pro Aktualisierung begrenzt. Metahub teilt Ihre Ergebnisse in Blöcke von 100 Elementen auf, um diese Einschränkung zu umgehen und Ihre Findings unabhängig von der Anzahl zu aktualisieren.

Zum Beispiel habe ich mit dem folgenden Filter: `./metahub --sh-filters ResourceType=AwsSageMakerNotebookInstance RecordState=ACTIVE WorkflowStatus=NEW` zwei betroffene Ressourcen mit jeweils drei Findings gefunden, insgesamt also sechs Security Hub Findings.

Die Ausführung des folgenden Aktualisierungsbefehls wird den Workflow-Status dieser sechs Findings auf `NOTIFIED` mit einer Notiz setzen:```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

Die Option --update-findings fragt vor dem Aktualisieren Ihrer Erkenntnisse nach einer Bestätigung. Sie können diese Bestätigung überspringen, indem Sie die Option --no-actions-confirmation verwenden.

Anreichern von Erkenntnissen

Sie können MetaHub verwenden, um Ihre AWS Security Hub Erkenntnisse mit Kontextausgaben unter Verwendung der Option --enrich-findings anzureichern. Das Anreichern Ihrer Erkenntnisse bedeutet, sie direkt in AWS Security Hub zu aktualisieren. MetaHub verwendet dafür das Feld UserDefinedFields.

Durch das direkte Anreichern Ihrer Erkenntnisse in AWS Security Hub können Sie Funktionen wie Insights und Filter nutzen, indem Sie die zusätzlichen Informationen verwenden, die zuvor in Security Hub nicht verfügbar waren.

Beispielsweise möchten Sie alle AWS Security Hub Erkenntnisse mit WorkflowStatus=NEW, RecordState=ACTIVE und ResourceType=AwsS3Bucket, die public=True sind, mit Kontextausgaben anreichern:```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>

Die Option `--enrich-findings` wird Sie um eine Bestätigung bitten, bevor sie Ihre Funde anreichert. Sie können diese Bestätigung überspringen, indem Sie die Option `--no-actions-confirmation` verwenden.

# Mitwirken

Sie können diesem Leitfaden folgen, wenn Sie zum Context-Modul beitragen möchten [Leitfaden](https://github.com/gabrielsoltz/metahub/blob/main/docs/context.md).
Tool herunterladen