Panoramica delle regole di rilevamento

Supportato in:

Linguaggio delle regole YARA-L

YARA-L è un linguaggio per le regole di rilevamento sviluppato da Google. Lo scopo di YARA-L è quello di passare dalle rilevazioni come semplici query di dati a indagini effettive basate sugli eventi. YARA-L deriva dal linguaggio YARA di uso comune nell'analisi dei malware. La L sta per log. YARA-L ti consente di sfruttare tutte le informazioni provenienti da più fonti all'interno dei rilevamenti e di correlare questi eventi in avvisi azionabili. Per saperne di più, consulta la Panoramica del linguaggio YARA-L 2.0.

Regole di rilevamento di esempio di Google Security Operations

Per contribuire ad accelerare l'adozione del motore di rilevamento di Google SecOps, è disponibile un repository GitHub con regole di esempio. Questo repository contiene diverse categorie di regole di rilevamento, tra cui:

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

Ogni categoria adotta un approccio specifico per la visualizzazione delle origini dati e specifica quali eventi e istruzioni di corrispondenza utilizzare.

Esempi di regole e ottimizzazione

La seguente regola crea una variabile evento $e1 che viene utilizzata per monitorare il tipo di evento. La variabile evento può essere qualsiasi valore significativo per i dati in fase di valutazione. Il campo UDM 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 SecOps è ogni volta che si verifica l'evento $e1. A scopo di ottimizzazione, viene fornita una condizione not per escludere determinati percorsi non dannosi per l'argomento della riga di comando. A questa regola possono essere aggiunte ulteriori condizioni not se identifichi falsi positivi frequenti 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
}

Specificare più di una variabile evento

YARA-L consente di avere più di una variabile evento in una regola. Nell'esempio seguente, la regola ha 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 Risultato delle regole

Utilizza la sezione Risultato per impostare le variabili di attesa all'interno del rilevamento delle regole per fornire l'arricchimento per il consumo a valle. 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 a un periodo di 5 minuti, viene applicato un punteggio di gravità. Quando utilizzi periodi di tempo, il motore di rilevamento di Google SecOps esamina solo i blocchi di tempo discreti che specifichi.

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 solo di 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 per il tuo ambiente e questo può essere fatto specificando le esclusioni all'interno della logica. Puoi anche utilizzare gli elenchi di riferimento per raggruppare gli elementi e poi fare riferimento a questo elenco nella regola. Non dimenticare che Google SecOps non ha bisogno di ricevere avvisi per ogni rilevamento. Puoi monitorare i rilevamenti per più scopi e inviare avvisi solo per quelli che ritieni più critici nel tuo ambiente.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.