Standarderkennungsregeln

YARA-L-Regelsprache

YARA-L ist eine von Google entwickelte Sprache für Erkennungsregeln. Der Zweck von YARA-L besteht darin, nicht nur Datenabfragen, sondern auch ereignisgesteuerte Prüfungen zu erfassen. YARA-L ist von der YARA-Sprache abgeleitet, die häufig in der Malware-Analyse verwendet wird. L steht für Logs. Mit YARA-L können Sie alle Informationen aus mehreren Quellen innerhalb von Erkennungen nutzen und diese Ereignisse in umsetzbare Benachrichtigungen korrelieren. Weitere Informationen finden Sie in der Übersicht über die Sprache YARA-L 2.0.

Beispielerkennungsregeln für Google Security Operations

Damit Sie die Einführung der Google Security Operations Detection Engine beschleunigen können, steht ein GitHub-Repository mit Beispielregeln zur Verfügung. Dieses Repository enthält verschiedene Kategorien von Erkennungsregeln, darunter:

  • Google Cloud-Audit
  • Google Workspace
  • Warnungen zu Informationszwecken
  • Malware
  • MITRE ATT&CK
  • SOC-Prime-Regeln
  • Verdächtige Ereignisse

Jede Kategorie verfolgt einen bestimmten Ansatz, wie Datenquellen angezeigt werden, und gibt an, welche Ereignisse und übereinstimmenden Anweisungen verwendet werden sollen.

Beispielregeln und Abstimmung

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 eine Bedeutung hat. Das UDM-Feld, das bei diesem Ereignis ausgewertet wird, ist metadata.eventype. Es ist also 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 Security Operations erzeugt, ist jedes Mal, wenn das Ereignis $e1 eintritt. Zur Abstimmung wird die Bedingung not angegeben, um bestimmte nicht schädliche Pfade für das Befehlszeilenargument auszuschließen. Dieser Regel können weitere not-Bedingungen hinzugefügt werden, wenn Sie häufige falsch positive Ergebnisse von anderen bekannten Dateipfaden identifizieren.

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
}

Mehrere Ereignisvariablen angeben

Mit YARA-L können Sie mehrere Ereignisvariablen 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
}

Bereich für Regelergebnisse

Verwenden Sie den Ergebnisbereich, um Holding-Variablen innerhalb der Regelerkennung festzulegen, um eine Anreicherung für die nachgelagerte Nutzung zu ermöglichen. Sie können beispielsweise Informationen zum Schweregrad 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 innerhalb von 5 Minuten übereinstimmt, wird ein Schweregrad angewendet. Wenn Sie Zeiträume verwenden, überprüft die Google Security Operations Detection Engine nur die von Ihnen angegebenen diskreten Zeitblöcke.

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 einfach nur eine Datenabfrage zurückgeben können. Mit der Ereignisvariable wird erfasst, welche Feldwerte im Bedingungsbereich der Regel verwendet werden. Sie können ein einzelnes Ereignis oder mehrere Ereignisse im Zeitverlauf verwenden, Quellen für einen einzelnen Wert korrelieren (z. B. $hostname aus verschiedenen Datenquellen) und sogar Tools wie reguläre Ausdrücke verwenden, um Übereinstimmungen zu liefern. Es ist wichtig, die Regeln auf Ihre eigene Umgebung abzustimmen. Dazu können Sie Ausschlüsse in der Logik festlegen. Sie können auch Referenzlisten verwenden, um Elemente zu gruppieren und dann in der Regel auf diese Liste zu verweisen. Denken Sie daran, dass für Google Security Operations nicht jede Erkennung erforderlich ist. Sie können die Erkennungen für mehrere Zwecke verfolgen und sich nur auf diejenigen benachrichtigen lassen, die in Ihrer Umgebung für Ihre Umgebung am wichtigsten sind.