Regole di rilevamento predefinite

Linguaggio delle regole YARA-L

YARA-L è un linguaggio di regole di rilevamento sviluppato da Google. Lo scopo dello strumento YARA-L è passare dai rilevamenti come semplici query sui dati alle effettiva indagini basate su eventi. YARA-L deriva dal linguaggio YARA comunemente utilizzato nell'analisi dei malware. La L indica i log. YARA-L consente di sfruttare tutte le informazioni provenienti da più origini all'interno dei rilevamenti e di correlare questi eventi in avvisi strategici. Per ulteriori informazioni, consulta la Panoramica del linguaggio YARA-L 2.0.

Esempi di regole di rilevamento di Google Security Operations

Per accelerare l'adozione di Google Security Operations Detection Engine, è disponibile un repository GitHub con regole di esempio. Questo repository contiene diverse categorie di regole di rilevamento, tra cui:

  • Audit di Google Cloud
  • Google Workspace
  • Avvisi informativi
  • Malware
  • MITRE ATT&CK
  • Regole prime SOC
  • Eventi sospetti

Ogni categoria adotta un approccio specifico per quanto riguarda la visualizzazione delle origini dati e specifica quali eventi e istruzioni corrispondenti utilizzare.

Regole di esempio e ottimizzazione

La seguente regola crea una variabile evento $e1 utilizzata per monitorare il tipo di evento. La variabile evento può essere qualsiasi valore che abbia significato per i dati da valutare. Il campo UDM che viene valutato in questo evento è metadata.eventype, quindi ha senso chiamarlo semplicemente e1. Le righe successive cercano occorrenze specifiche di corrispondenze di espressioni regolari all'interno di e1. La condizione che crea un rilevamento in Google Security Operations è ogni volta che si verifica l'evento $e1. Ai fini dell'ottimizzazione, viene fornita una condizione not per escludere determinati percorsi non dannosi per l'argomento della riga di comando. Ulteriori condizioni not potrebbero essere aggiunte a questa regola se identifichi frequenti falsi positivi provenienti da altri percorsi di file noti.

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
}

Specifica più di una variabile evento

YARA-L consente di avere più di una variabile evento in una regola. Nell'esempio riportato di seguito, la regola include gli eventi $e1 e $e2. La condizione indica la condizione logica che attiva il rilevamento.

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
}

Sezione dei risultati delle regole

Utilizza la sezione dei risultati per impostare le variabili di conservazione all'interno del rilevamento delle regole al fine di fornire un arricchimento per il consumo downstream. Ad esempio, puoi aggiungere informazioni sul punteggio di gravità che si basano sui dati degli eventi analizzati. Il seguente rilevamento esamina due eventi per attribuire il valore $hostname. Se il valore $hostnames corrisponde in un periodo di 5 minuti, viene applicato un punteggio di gravità. Quando utilizzi i periodi di tempo, Google Security Operations Detection Engine esamina solo i blocchi discreti specificati.

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")
}

Conclusione

YARA-L è un linguaggio di rilevamento flessibile che consente di esaminare gli eventi di sicurezza e non semplicemente restituire una query di dati. La variabile evento viene utilizzata per monitorare i valori dei campi utilizzati nella sezione delle condizioni della regola. Puoi utilizzare un singolo evento, più eventi nel tempo, correlare le origini per un singolo valore (ad esempio $hostname da origini dati diverse) e persino utilizzare strumenti come le espressioni regolari per fornire corrispondenze. È essenziale ottimizzare le regole in base al tuo ambiente e questo può essere fatto specificando esclusioni all'interno della logica. Puoi anche utilizzare gli elenchi di riferimento per raggruppare gli elementi e poi fare riferimento all'elenco nella regola. Non dimenticare che Google Security Operations non ha bisogno di ogni rilevamento per cui ricevere avvisi. Puoi tenere traccia dei rilevamenti per vari scopi e inviare avvisi solo su quelli che ritieni più importanti nel tuo ambiente.