0Pricing
Cyber Security Academy · Aula

Sintaxe de regras YARA

Strings, condições e metadados.

Sintaxe de regras YARA é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.

As três seções

Uma regra YARA tem um nome e até três seções: meta, strings e condition. A condição é a única seção obrigatória, mas as regras reais usam as três.

rule Example_Malware
{
  meta:
    author = "analyst"
    description = "Detects Example family"
  strings:
    $a = "EvilConfig"
    $b = { 6A 40 68 00 30 00 00 }
  condition:
    $a and $b
}

A seção meta

meta contém metadados descritivos que não afetam a correspondência, mas são essenciais para a triagem e a manutenção.

  • author, date, description
  • reference — link de relatório ou aviso
  • hash — amostra(s) a partir da(s) qual(is) a regra foi criada
  • tlp — classificação de compartilhamento

Os valores são cadeias de texto, inteiros ou valores booleanos. Trate meta como documentação: a próxima pessoa responsável pela resposta dependerá dela.

Cadeias de texto

A seção strings define identificadores (que começam com $) associados a padrões. A forma mais simples é uma cadeia de texto entre aspas.

Os modificadores refinam a correspondência:

  • nocase — não diferencia maiúsculas de minúsculas
  • wide — UTF-16 (dois bytes por caractere, comum no Windows)
  • ascii — ASCII (padrão; combine com wide para corresponder a ambos)
  • fullword — corresponde apenas a uma palavra inteira
strings:
  $s1 = "cmd.exe /c" nocase
  $s2 = "InjectDll" wide ascii
  $s3 = "admin" fullword

Cadeias hexadecimais

Para padrões binários, use uma cadeia hexadecimal entre chaves. Elas correspondem a bytes brutos, ideais para códigos de operação, números mágicos e estruturas.

As cadeias hexadecimais oferecem flexibilidade:

  • ?? — curinga para meio byte ou byte
  • [n-m] — um salto de n a m bytes arbitrários
  • ( A | B ) — alternativas
strings:
  $h1 = { 4D 5A 90 00 }
  $h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
  $h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
  $h4 = { ( B8 | B9 ) 00 00 00 00 }

Expressões regulares

YARA é compatível com padrões de expressões regulares delimitados por barras, com os mesmos modificadores das cadeias de texto. Use expressões regulares quando um padrão variar, mas seguir uma estrutura, como um marcador de configuração ou um nome de objeto de exclusão mútua gerado.

Expressões regulares são poderosas, mas custosas; prefira cadeias fixas ou hexadecimais quando possível e delimite bem as expressões regulares para evitar varrer o arquivo inteiro.

strings:
  $re1 = /mutex_[a-f0-9]{8}/ nocase
  $re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// ascii

A seção de condição

condition é uma expressão booleana que decide uma correspondência. Faça referência diretamente aos identificadores de cadeias de texto; um $a isolado é verdadeiro se a cadeia de texto tiver sido encontrada.

Combine com and, or, not e parênteses. É aqui que você codifica a lógica que separa uma detecção real da família de uma coincidência.

condition:
  $a and ($b or $c) and not $benign

Contagem e conjuntos

YARA oferece quantificadores expressivos para conjuntos de cadeias de texto:

  • any of them / all of them
  • 2 of ($s*) — pelo menos duas de um grupo
  • #a > 3 — a contagem de correspondências de $a excede 3

Isso permite exigir, por exemplo, três de cinco marcadores da família, equilibrando a sensibilidade e os falsos positivos.

condition:
  3 of ($str*) and #marker >= 2

Deslocamentos e tamanho do arquivo

As condições podem fazer referência a onde uma correspondência ocorre e ao tamanho do arquivo:

  • $a at 0 — a correspondência deve estar no deslocamento 0
  • $a in (0..1024) — dentro de um intervalo de bytes
  • filesize — tamanho total, por exemplo, filesize < 200KB
  • uint16(0) == 0x5A4D — lê um inteiro em um deslocamento (aqui, o cabeçalho MZ)

Ancorar as correspondências a uma posição reduz drasticamente os falsos positivos e acelera a varredura.

condition:
  uint16(0) == 0x5A4D and filesize < 500KB and $payload

Módulos

Os módulos de YARA expõem dados estruturados e específicos do formato, permitindo que as condições analisem campos processados em vez de bytes brutos.

  • pe — imports de PE, seções, ponto de entrada, assinaturas, imphash
  • hash — calcula md5/sha256 de regiões
  • math — entropy e estatísticas
  • elf, dotnet, magic

Importar pe, por exemplo, permite fazer correspondências com funções importadas ou com um imphash específico, de forma muito mais robusta do que usando uma cadeia literal.

import "pe"
condition:
  pe.imphash() == "a1b2c3d4e5f6..." and
  pe.imports("kernel32.dll", "VirtualAllocEx")

Iteração sobre conjuntos

Para obter uma lógica mais rica, YARA oferece laços sobre coleções com for. Você pode expressar condições como pelo menos dois desses deslocamentos satisfazem uma propriedade ou qualquer nome de seção corresponde a um padrão.

Isso é essencial ao trabalhar com dados de módulos, como seções de PE ou imports, quando é necessário inspecionar uma lista de tamanho variável em vez de um único valor.

import "pe"
condition:
  for any i in (0..pe.number_of_sections - 1) : (
    pe.sections[i].name == ".evil"
  )

Globais, privadas e etiquetas

As palavras-chave no nível da regra organizam um conjunto de regras:

  • global rule — sua condição controla todas as outras regras no arquivo (por exemplo, verifica apenas arquivos PE)
  • private rule — bloco reutilizável, não é reportado por si só, mas pode ser referenciado por outras regras
  • etiquetas após o nome da regra classificam as detecções (por exemplo, para filtrar a saída)
global private rule IsPE { condition: uint16(0) == 0x5A4D }

rule Dropper : trojan dropper {
  strings: $a = "drop_payload"
  condition: $a
}

Verificação rápida

Analise a robustez de uma condição.

Recapitulação

A sintaxe de regras YARA em uma visão geral:

  • Uma regra = meta + strings + condition
  • Cadeias de texto com os modificadores sem distinção entre maiúsculas e minúsculas, formato amplo, ASCII e palavra inteira
  • Cadeias hexadecimais com curingas ??, saltos [n-m] e alternativas
  • Expressões regulares para padrões variáveis estruturados (use com moderação)
  • condition combina cadeias de texto com e/ou/não
  • Quantificadores: qualquer/todos/N de, além da contagem #a
  • Ancoragem: at, in, tamanho do arquivo e leituras de uint
  • Módulos (PE, resumos e matemática) fazem correspondências com dados estruturados e imphash
  • global, private e etiquetas organizam conjuntos de regras

A seguir: busca prática com cadeias de texto e hexadecimal.

Perguntas Frequentes

A aula “Sintaxe de regras YARA” é grátis?

Sim — o texto completo de “Sintaxe de regras YARA” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.

O que vou aprender em “Sintaxe de regras YARA”?

Strings, condições e metadados. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cyber Security Academy?

Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Sintaxe de regras YARA”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cyber Security Academy?

Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Para que serve YARA
  2. Sintaxe de regras YARA
  3. Investigação com strings e hexadecimal
  4. Dimensionando e automatizando varreduras
← Voltar para Cyber Security Academy