44 Security Analytics

Moderne Sicherheitsanalysen erfordern die Verarbeitung großer Mengen an Sicherheitsdaten in Echtzeit, während Bedrohungen schnell erkannt und darauf reagiert werden muss. OpenSearch bietet leistungsfähige Funktionen für Security Information and Event Management (SIEM) und ermöglicht es Organisationen, Sicherheitsereignisse in ihrer gesamten Infrastruktur zu sammeln, zu analysieren und darauf zu reagieren. In diesem Kapitel erfahren Sie, wie Sie umfassende Sicherheitsanalysen mit OpenSearch implementieren können.

44.1 Sicherheitsdatenquellen verstehen

Sicherheitsdaten stammen aus vielen verschiedenen Quellen, die jeweils einzigartige Einblicke in potenzielle Sicherheitsbedrohungen bieten. Diese Daten müssen strukturiert und korreliert werden, um aussagekräftige Sicherheitserkenntnisse zu gewinnen. Beginnen wir mit der Einrichtung unserer Sicherheitsdaten-Pipeline.

44.1.1 Template für Sicherheitsereignisse

Zunächst erstellen wir ein Index-Template, das verschiedene Arten von Sicherheitsereignissen aufnehmen kann:

PUT _index_template/security_events
{
  "index_patterns": ["security-events-*"],
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.mapping.total_fields.limit": 10000,
      "index.lifecycle.name": "security_events_policy"
    },
    "mappings": {
      "properties": {
        "@timestamp": { "type": "date" },
        "event": {
          "properties": {
            "category": { "type": "keyword" },
            "type": { "type": "keyword" },
            "severity": { "type": "keyword" },
            "action": { "type": "keyword" }
          }
        },
        "source": {
          "properties": {
            "ip": { "type": "ip" },
            "port": { "type": "long" },
            "geo": {
              "properties": {
                "country_iso_code": { "type": "keyword" },
                "city_name": { "type": "keyword" },
                "location": { "type": "geo_point" }
              }
            }
          }
        },
        "destination": {
          "properties": {
            "ip": { "type": "ip" },
            "port": { "type": "long" },
            "geo": {
              "properties": {
                "country_iso_code": { "type": "keyword" },
                "city_name": { "type": "keyword" },
                "location": { "type": "geo_point" }
              }
            }
          }
        },
        "user": {
          "properties": {
            "name": { "type": "keyword" },
            "domain": { "type": "keyword" },
            "roles": { "type": "keyword" }
          }
        },
        "process": {
          "properties": {
            "name": { "type": "keyword" },
            "pid": { "type": "long" },
            "command_line": { "type": "keyword" }
          }
        }
      }
    }
  }
}

Dieses Template bietet eine strukturierte Möglichkeit, verschiedene Sicherheitsereignisse zu speichern und bewahrt dabei die Flexibilität für unterschiedliche Ereignistypen. Das Mapping enthält wesentliche Felder für die Sicherheitsanalyse, wie Quell- und Zielinformationen, Benutzerdetails und Prozessdaten.

44.2 SIEM-Funktionalität implementieren

Security Information and Event Management (SIEM) kombiniert Sicherheitsinformationsmanagement (SIM) mit Sicherheitsereignismanagement (SEM). Implementieren wir die wichtigsten SIEM-Funktionalitäten in OpenSearch.

44.2.1 Detection Rules Engine

Zunächst erstellen wir eine Engine für Erkennungsregeln, die Sicherheitsbedrohungen identifizieren kann:

PUT _plugins/_security_analytics/rules/suspicious_login_attempts
{
  "name": "Verdächtige Login-Versuche",
  "risk_score": 75,
  "severity": "high",
  "description": "Erkennt mehrere fehlgeschlagene Login-Versuche von derselben Quell-IP",
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "event.category": "authentication"
          }
        },
        {
          "match": {
            "event.type": "failure"
          }
        }
      ]
    }
  },
  "threshold": {
    "field": "source.ip",
    "value": 5,
    "timeframe": "5m"
  },
  "tags": ["authentication", "brute-force"]
}

44.2.2 Korrelationsregeln

Wir können Korrelationsregeln erstellen, um komplexe Angriffsmuster zu erkennen:

PUT _plugins/_security_analytics/correlations/lateral_movement
{
  "name": "Mögliche Laterale Bewegung",
  "description": "Erkennt erfolgreiche Authentifizierung nach mehreren Fehlversuchen von verschiedenen Standorten",
  "rules": [
    {
      "id": "auth_failures",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "event.category": "authentication"
              }
            },
            {
              "match": {
                "event.type": "failure"
              }
            }
          ]
        }
      },
      "threshold": {
        "field": "source.ip",
        "value": 3,
        "timeframe": "10m"
      }
    },
    {
      "id": "auth_success",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "event.category": "authentication"
              }
            },
            {
              "match": {
                "event.type": "success"
              }
            }
          ]
        }
      }
    }
  ],
  "sequence": ["auth_failures", "auth_success"],
  "timeframe": "15m"
}

44.3 Bedrohungserkennung und -reaktion

Effektive Bedrohungserkennung erfordert sowohl Echtzeitüberwachung als auch historische Analyse. Implementieren wir ein umfassendes Bedrohungserkennungssystem.

44.3.1 Echtzeit-Bedrohungserkennung

Wir erstellen einen Monitor, der kontinuierlich Sicherheitsereignisse analysiert:

PUT _plugins/_alerting/monitors/real_time_threats
{
  "type": "monitor",
  "name": "Echtzeit-Bedrohungserkennung",
  "enabled": true,
  "schedule": {
    "period": {
      "interval": 1,
      "unit": "MINUTES"
    }
  },
  "inputs": [
    {
      "search": {
        "indices": ["security-events-*"],
        "query": {
          "bool": {
            "should": [
              {
                "range": {
                  "risk_score": {
                    "gte": 80
                  }
                }
              },
              {
                "terms": {
                  "event.type": ["malware", "intrusion"]
                }
              }
            ],
            "filter": [
              {
                "range": {
                  "@timestamp": {
                    "gte": "now-5m",
                    "lte": "now"
                  }
                }
              }
            ]
          }
        }
      }
    }
  ],
  "triggers": [
    {
      "name": "Bedrohung mit hohem Risiko",
      "severity": "High",
      "condition": {
        "script": {
          "source": "ctx.results[0].hits.total.value > 0"
        }
      },
      "actions": [
        {
          "name": "Security-Team benachrichtigen",
          "destination_id": "security_slack",
          "message_template": {
            "source": "Bedrohung mit hohem Risiko erkannt:\n{{#ctx.results.0.hits.hits}}* {{_source.event.type}} von {{_source.source.ip}}\n{{/ctx.results.0.hits.hits}}"
          }
        }
      ]
    }
  ]
}

44.3.2 Integration von Threat Intelligence

Wir können unsere Bedrohungserkennung durch die Integration von Threat Intelligence Feeds verbessern:

PUT _ingest/pipeline/threat_intel_enrichment
{
  "description": "Reichert Sicherheitsereignisse mit Threat Intelligence Daten an",
  "processors": [
    {
      "script": {
        "lang": "painless",
        "source": """
          if (ctx.containsKey('source') && ctx.source.containsKey('ip')) {
            def ip = ctx.source.ip;
            def threat_info = ThreatIntel.lookup(ip);
            if (threat_info != null) {
              ctx.threat = new HashMap();
              ctx.threat.indicator = ip;
              ctx.threat.type = threat_info.type;
              ctx.threat.confidence = threat_info.confidence;
              ctx.threat.last_seen = threat_info.last_seen;
            }
          }
        """
      }
    }
  ]
}

44.4 Compliance Monitoring und Reporting

Compliance-Überwachung erfordert die Verfolgung spezifischer Ereignisse und die Generierung von Berichten. Implementieren wir entsprechende Funktionen.

44.4.1 Compliance-Regelwerke

Zunächst definieren wir Regelwerke für gängige Standards:

PUT _plugins/_security_analytics/compliance/pci_dss
{
  "name": "PCI DSS Compliance",
  "rules": [
    {
      "id": "pci_10.2.4",
      "name": "Ungültige Zugriffsversuche",
      "description": "Überwacht und protokolliert alle ungültigen Zugriffsversuche",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "event.category": "authentication"
              }
            },
            {
              "match": {
                "event.type": "failure"
              }
            }
          ]
        }
      }
    },
    {
      "id": "pci_10.2.5",
      "name": "Administrator-Aktivität",
      "description": "Überwacht und protokolliert alle Administrator-Aktivitäten",
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "user.roles": ["admin", "administrator"]
              }
            }
          ]
        }
      }
    }
  ]
}

44.4.2 Compliance-Berichterstattung

Erstellen wir ein Berichtssystem für Compliance-Anforderungen:

PUT _plugins/_reporting/definition/compliance_report
{
  "report_params": {
    "report_name": "Monatlicher Compliance-Bericht",
    "report_source": "compliance_dashboard",
    "description": "Monatlicher Compliance-Status-Bericht",
    "report_format": "pdf"
  },
  "trigger": {
    "trigger_type": "schedule",
    "schedule": {
      "interval": "1M"
    }
  },
  "delivery": {
    "recipients": ["security@example.com"],
    "channel": "email",
    "condition": {
      "script": "true"
    }
  }
}

44.5 Security Analytics Dashboard

Die Erstellung effektiver Sicherheits-Dashboards ist entscheidend für Überwachung und Reaktion. Hier ein Beispiel für eine Dashboard-Konfiguration:

POST _plugins/_dashboards/api/saved_objects/dashboard/security_overview
{
  "attributes": {
    "title": "Sicherheitsübersicht",
    "panels": [
      {
        "type": "visualization",
        "name": "Bedrohungskarte",
        "params": {
          "type": "region_map",
          "source": {
            "index": "security-events-*",
            "aggs": {
              "countries": {
                "terms": {
                  "field": "source.geo.country_iso_code",
                  "size": 100
                }
              }
            }
          }
        }
      },
      {
        "type": "visualization",
        "name": "Top-Bedrohungen",
        "params": {
          "type": "metric",
          "source": {
            "index": "security-events-*",
            "aggs": {
              "threat_types": {
                "terms": {
                  "field": "event.type",
                  "size": 5
                }
              }
            }
          }
        }
      }
    ]
  }
}

44.6 Best Practices für Security Analytics

Bei der Implementierung von Security Analytics in OpenSearch sollten Sie folgende wichtige Praktiken beachten:

Datenaufbewahrung: Implementieren Sie angemessene Datenaufbewahrungsrichtlinien basierend auf Compliance-Anforderungen und Untersuchungsbedürfnissen. Nutzen Sie Index Lifecycle Management (ILM) zur Automatisierung dieses Prozesses.

Performance-Optimierung: Sicherheitsanalysen erfordern oft die Verarbeitung großer Datenmengen. Verwenden Sie geeignete Shard-Einstellungen und optimieren Sie Ihre Abfragen für bessere Performance.

Alert-Tuning: Beginnen Sie mit konservativen Schwellenwerten und passen Sie diese basierend auf Ihrer Umgebung schrittweise an, um Fehlalarme zu reduzieren und gleichzeitig eine effektive Bedrohungserkennung zu gewährleisten.

Datenanreicherung: Erweitern Sie Ihre Sicherheitsereignisse mit zusätzlichem Kontext wie Asset-Informationen, Benutzerdetails und Threat Intelligence, um die Analysekapazitäten zu verbessern.