Regole di rilevamento predefinite

Supportato in:

Linguaggio delle regole YARA-L

YARA-L è un linguaggio di regole di rilevamento sviluppato da Google. Lo scopo di YARA-L è passare dai rilevamenti come semplici query sui dati a indagini effettive basate su eventi. YARA-L deriva dal linguaggio YARA comunemente utilizzato nell'analisi del malware. L'L sta per log. YARA-L ti 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.

Regole di rilevamento di esempio di Google Security Operations

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

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

Ogni categoria adotta un approccio specifico per la visualizzazione delle origini dati e specifica quali eventi e istruzioni di corrispondenza 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 un significato 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 Security Operations si verifica 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. Altre condizioni not potrebbero essere aggiunte a questa regola se identifichi frequenti falsi positivi provenienti da altri percorsi 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 ti consente di avere più di una variabile evento in una regola. Nel seguente esempio, 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 regole

Utilizza la sezione relativa al risultato per impostare le variabili di attesa all'interno del rilevamento delle regole al fine di fornire un arricchimento per il consumo a valle. Ad esempio, puoi aggiungere informazioni sul punteggio della 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 per un periodo di 5 minuti, viene applicato un punteggio di gravità. Quando utilizzi periodi di tempo, il motore di rilevamento di Google Security Operations esamina solo i blocchi di tempo 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 ti consente di esaminare gli eventi di sicurezza e non solo restituire una query sui dati. La variabile evento viene utilizzata per monitorare i valori di campo utilizzati nella sezione delle condizioni della regola. Puoi utilizzare un singolo evento, più eventi nel tempo, origini correlate 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. Per farlo, puoi specificare le esclusioni all'interno della logica. Puoi anche utilizzare gli elenchi di riferimento per raggruppare gli elementi e poi fare riferimento a quell'elenco nella regola. Non dimenticare che Google Security Operations non ha bisogno di ricevere un avviso per ogni rilevamento. Puoi tenere traccia dei rilevamenti per diversi scopi e inviare avvisi solo per quelli che ritieni più critici nel tuo ambiente.