Standardmäßige Erkennungsregeln

Unterstützt in:

Sprache der YARA-L-Regeln

YARA-L ist eine von Google entwickelte Sprache für Erkennungsregeln. Mit YARA-L soll die Erkennung von reinen Datenabfragen zu tatsächlichen ereignisgesteuerten Untersuchungen übergehen. YARA-L basiert auf der YARA-Sprache, die häufig bei der Malware-Analyse verwendet wird. Das L steht für Logs. Mit YARA-L können Sie alle Informationen aus mehreren Quellen in Erkennungen nutzen und diese Ereignisse in verwertbare Benachrichtigungen umwandeln. Weitere Informationen finden Sie in der Übersicht über die Sprache YARA-L 2.0.

Beispielhafte Erkennungsregeln für Google Security Operations

Um die Einführung der Google SecOps Detection Engine zu beschleunigen, gibt es ein GitHub-Repository mit Beispielregeln. Dieses Repository enthält verschiedene Kategorien von Erkennungsregeln, darunter:

  • Google Cloud CloudAudit
  • Google Workspace
  • Informative Warnungen
  • Malware
  • MITRE ATT&CK
  • SOC-Hauptregeln
  • Verdächtige Ereignisse

Für jede Kategorie wird ein bestimmter Ansatz verwendet, um Datenquellen zu betrachten und anzugeben, welche Ereignisse und Abgleichsanweisungen verwendet werden sollen.

Beispielregeln und Optimierung

Mit der folgenden Regel wird die Ereignisvariable $e1 erstellt, mit der der Ereignistyp erfasst wird. Die Ereignisvariable kann ein beliebiger Wert sein, der für die auszuwertenden Daten relevant ist. Das UDM-Feld, das in diesem Ereignis ausgewertet wird, ist metadata.eventype. Daher ist es sinnvoll, es einfach e1 zu nennen. In den nächsten Zeilen wird nach bestimmten Vorkommen von Übereinstimmungen mit regulären Ausdrücken in e1 gesucht. Die Bedingung, die eine Erkennung in Google SecOps auslöst, ist jedes Mal, wenn das Ereignis $e1 eintritt. Zur Optimierung wird eine not-Bedingung bereitgestellt, um bestimmte nicht schädliche Pfade für das Befehlszeilenargument auszuschließen. Dieser Regel könnten weitere not-Bedingungen hinzugefügt werden, wenn Sie häufige Falschmeldungen von anderen bekannten Dateipfaden feststellen.

rule suspicious_unusual_location_svchost_execution

{
 meta:
   author = "Google Cloud Security"
   description = "Windows 'svchost' executed from an unusual location"
   yara_version = "YL2.0"
   rule_version = "1.0"

 events:
   $e1.metadata.event_type = "PROCESS_LAUNCH"
   re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
   not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase

condition:
   $e1
}

Mehr als eine Ereignisvariable angeben

Mit YARA-L können Sie mehr als eine Ereignisvariable in einer Regel verwenden. Im folgenden Beispiel hat die Regel die Ereignisse $e1 und $e2. Die Bedingung gibt die logische Bedingung an, die die Erkennung auslöst.

rule ExcludeZeroValues {
  meta:
    author = "noone@google.com"

  events:
    $e1.metadata.event_type = "NETWORK_DNS"
    $e1.principal.hostname = $hostname

    // $e1.principal.user.userid may be empty string.
    $e1.principal.user.userid != "Guest"

    $e2.metadata.event_type = "NETWORK_HTTP"
    $e2.principal.hostname = $hostname

    // $e2.target.asset_id cannot be empty string as explicitly specified.
    $e2.target.asset_id != ""

  match:
    // $hostname cannot be empty string.
    $hostname over 1h

  condition:
    $e1 and $e2
}

Abschnitt „Regelergebnis“

Im Ergebnisbereich können Sie Holding-Variablen in der Regelerkennung festlegen, um die Daten für die nachgelagerte Nutzung anzureichern. Sie können beispielsweise Informationen zur Schweregradbewertung hinzufügen, die auf Daten aus den analysierten Ereignissen beruhen. Bei der folgenden Erkennung werden zwei Ereignisse untersucht, um den Wert $hostname zuzuordnen. Wenn der Wert $hostnames über einen Zeitraum von 5 Minuten übereinstimmt, wird ein Schweregrad angewendet. Wenn Sie Zeiträume verwenden, werden von der Google SecOps Detection Engine nur die von Ihnen angegebenen diskreten Zeitblöcke untersucht.

rule OutcomeRuleMultiEvent {
    meta:
      author = "noone@google.com"
    events:
      $u.udm.principal.hostname = $hostname
      $asset_context.graph.entity.hostname = $hostname

      $severity = $asset_context.graph.entity.asset.vulnerabilities.severity

    match:
      $hostname over 5m

    outcome:
      $risk_score =
        max(
            100
          +   if($hostname = "my-hostname", 100, 50)
          +   if($severity = "HIGH", 10)
          +   if($severity = "MEDIUM", 5)
          +   if($severity = "LOW", 1)
        )

      $asset_id_list =
        array(
          if($u.principal.asset_id = "",
             "Empty asset id",
             $u.principal.asset_id
          )
        )

      $asset_id_distinct_list = array_distinct($u.principal.asset_id)

      $asset_id_count = count($u.principal.asset_id)

      $asset_id_distinct_count = count_distinct($u.principal.asset_id)

    condition:
      $u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}

Fazit

YARA-L ist eine flexible Erkennungssprache, mit der Sie Sicherheitsereignisse untersuchen und nicht nur eine Datenabfrage zurückgeben können. Mit der Ereignisvariablen wird erfasst, welche Feldwerte im Bedingungsabschnitt der Regel verwendet werden. Sie können ein einzelnes Ereignis oder mehrere Ereignisse im Zeitverlauf verwenden, Quellen für einen einzelnen Wert (z. B. $hostname aus verschiedenen Datenquellen) korrelieren und sogar Tools wie reguläre Ausdrücke verwenden, um Übereinstimmungen zu erzielen. Es ist wichtig, die Regeln an Ihre eigene Umgebung anzupassen. Dazu können Sie Ausschlüsse in der Logik angeben. Sie können auch Referenzlisten verwenden, um Elemente zu gruppieren und dann in der Regel auf diese Liste zu verweisen. Nicht für jede Erkennung muss eine Benachrichtigung gesendet werden. Sie können Erkennungen für verschiedene Zwecke im Blick behalten und nur Benachrichtigungen für die Erkennungen erhalten, die in Ihrer Umgebung am wichtigsten sind.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten