Connection Information

To perform the requested action, WordPress needs to access your web server. Please enter your FTP credentials to proceed. If you do not your credentials, you should your web host.

Connection Type

Connection Information

To perform the requested action, WordPress needs to access your web server. Please enter your FTP credentials to proceed. If you do not your credentials, you should your web host.

Connection Type

▷ Como escrever regras YARA para melhorar sua segurança e detecção de malware

Como escrever regras YARA para melhorar sua segurança e detecção de malware

Nota: O seguinte artigo irá ajudá-lo com: Como escrever regras YARA para melhorar sua segurança e detecção de malware

Em nosso primeiro artigo sobre o YARA, definimos que tipo de ferramenta era e em que contexto poderia ser usada: detectar malware na rede ou em endpoints, ajudar na resposta e monitoramento de incidentes, classificar arquivos ou até detectar vazamentos de dados confidenciais. Também mostramos como instalá-lo. Agora é hora de escrever regras para tirar o melhor proveito disso.

VEJO: Google Chrome: dicas de segurança e interface do usuário que você precisa saber (TechRepublic )

Use um modelo vazio para começar

As regras YARA são arquivos de texto, que seguem uma sintaxe muito básica, mas poderosa.

As regras YARA sempre contêm três partes:

  • A parte meta: Esta parte contém informações gerais ou específicas que não são processadas, mas servem para que o usuário entenda do que se trata.
  • A parte das cordas: Esta parte contém todas as strings que precisam ser pesquisadas nos arquivos.
  • A parte da condição: Esta parte define a condição para correspondência. Pode corresponder apenas a uma ou várias strings, mas também pode ser mais complexo, como veremos mais adiante neste artigo.

Pela minha experiência, é altamente recomendável criar um modelo vazio que você sempre usará para começar a escrever uma nova regra. Dessa forma, você só precisa preencher alguns conteúdos de variáveis ​​e adicionar as condições desejadas.

rule samplerule
{
meta:
author="Cedric Pernet"
version="0.1"
date="2021/05/12"
reference="any useful reference"
strings:
condition:
}

Usando este modelo, você pode editar rapidamente os metadados e o nome da regra (em nosso exemplo, é chamado samplerule). Os metadados podem ser qualquer coisa que o usuário queira colocar lá. Quanto a mim, sempre uso um número de versão, uma data, uma referência que pode ser um hash de malware ou um relatório de blog que menciona o que quero detectar e um campo de autor.

Agora que os metadados estão escritos, vamos começar a escrever a primeira regra.

Uma primeira regra

As regras YARA são uma combinação de elementos e condições de strings. As strings podem ser strings de texto, strings hexadecimais ou expressões regulares.

As condições são expressões booleanas, assim como em outras linguagens de programação. Os mais conhecidos são E, OU, NÃO. Operadores relacionais, aritméticos e bit a bit também podem ser usados.

Aqui está uma primeira regra:

rule netcat_detection
{
meta:
author="Cedric Pernet"
version="0.1"
date="2021/05/12"
reference="netcat is a free tool available freely online"
strings:
$str1="gethostpoop fuxored" // this is very specific to the netcat tool
$str2="nc -l -p port [options]"
condition:
$str1 or $str2
}

Então vamos explicar esta regra intitulada netcat_detection.

Após nossos metadados usuais, a divisão de strings contém duas variáveis, str1 e str2, que obviamente podem ser nomeadas da maneira que quisermos. Além disso, para ilustrar como adicionar comentários, a primeira variável contém um comentário no final.

A parte de condição contém a seguinte condição: Deve corresponder a str1 ou str2.

Isso poderia ter sido escrito de uma maneira mais confortável:

condition:
any of ($str*)

Isso pode ser útil se tivermos muitas variáveis ​​diferentes e quisermos apenas corresponder a qualquer uma delas.

Executando a primeira regra

Vamos agora executar nossa regra, que salvamos como um arquivo chamado rule1.yar. Queremos executá-lo em uma pasta contendo vários arquivos diferentes, sendo dois deles as versões de 32 e 64 bits do software netcat (Figura A). Nosso sistema para teste é uma distribuição Ubuntu Linux, mas isso não importa, pois o Yara pode ser instalado facilmente em sistemas operacionais Linux, Mac ou Windows.

Figura A

Como esperado, YARA executa e retorna os nomes de todos os arquivos que correspondem à regra.

Claro, pode-se colocar quantas regras YARA quiser em um único arquivo, o que o torna mais confortável do que ter muitos arquivos de regras diferentes.

A execução do YARA com a opção -s mostra as strings exatas que corresponderam a esses arquivos (Figura B):

Figura B

Em uma nota lateral, encontrar ferramentas como o netcat em algum lugar em sua rede corporativa pode realmente valer a pena investigar: Essa ferramenta básica não deve ser encontrada no computador do usuário comum, pois permite que os computadores se conectem e troquem dados em portas específicas e podem ser usadas por atacantes. Ele também pode, é claro, ser usado por pessoal de TI ou equipe vermelha, daí a investigação para determinar por que foi encontrado em uma máquina da rede corporativa.

Sequências mais complexas

A correspondência de uma string básica pode ser suficiente para localizar arquivos nos sistemas. No entanto, as strings podem ser codificadas de maneira diferente em sistemas diferentes ou podem ter sido levemente acionadas por invasores. Uma pequena mudança, por exemplo, pode ser mudar o caso de strings usando letras maiúsculas e minúsculas aleatórias. Felizmente, a YARA pode lidar com isso facilmente.

Na parte de strings YARA a seguir, uma string corresponderá independentemente do caso usado:

strings:
$str1="thisisit" nocase

A condição $str1 agora corresponderá a qualquer caso usado: “ThisIsIt”, “THISISIT”, “thisisit”, “ThIsIsiT”, etc.

Se as strings são codificadas usando dois bytes por caractere, o modificador “wide” pode ser usado e, claro, pode ser combinado com outro:

 strings:
$str1="thisisit" nocase wide

Para pesquisar strings no formato ASCII e wide, o modificador “ascii” pode ser usado em conjunto com wide.

strings:
$str1="thisisit" ascii wide

Strings hexadecimais

Strings hexadecimais podem ser usadas facilmente:

strings:
$str1={ 75 72 65 6C 6E 20 }
$str2={ 75 72 65 6C ?? 20 }
$str3={ 75 72 [2-4] 65 6C }

Aqui estão três variáveis ​​hexadecimais diferentes. O primeiro procura uma sequência exata em strings hexadecimais. O segundo usa um curinga expresso com dois ? caracteres e pesquisará strings com qualquer valor hexadecimal onde o ?? fica.

VEJO: Violação de senha: por que cultura pop e senhas não se misturam (PDF grátis) (TechRepublic)

A terceira string procura os dois primeiros bytes, depois um salto de dois para quatro caracteres e depois os dois últimos bytes. Isso é muito útil quando algumas sequências variam em arquivos diferentes, mas mostram um número previsível de bytes aleatórios entre dois conhecidos.

Expressões regulares

Expressões regulares, assim como em qualquer linguagem de programação, são muito úteis para detectar um conteúdo específico que pode ser escrito de diferentes maneiras. No YARA, eles são definidos usando uma string que começa e termina com o caractere de barra (/).

Vamos dar um exemplo que faz sentido.

Em um binário de malware, o desenvolvedor deixou informações de depuração, em particular a famosa string PDB.

Ele lê:

Agora a ideia seria não apenas criar uma regra que correspondesse a esse malware, mas todas as diferentes versões dele caso o número da versão mude. Além disso, decidimos excluir a unidade “D” da regra, pois o desenvolvedor também poderia tê-la em outra unidade.

Chegamos à expressão regular (Figura C):

Figura C

Para fins de demonstração, criamos um arquivo chamado newmalwareversion.exe que contém três strings PDB diferentes, cada uma com um número de versão diferente. Nossa regra combina com todos eles.

Observe que os caracteres de nossas strings foram duplicados, pois é um caractere especial que precisa ser escapado, como na linguagem C.

Condições mais complexas

As condições podem ser mais inteligentes do que apenas combinar uma ou várias strings. Você pode usar condições para contar strings, especificar um deslocamento no qual deseja encontrar uma string, corresponder a um tamanho de arquivo ou até mesmo usar loops.

Aqui estão alguns exemplos que eu comentei para explicação:

condition:
2 of ($str*) // will match on 2 of several strings named str followed by a number
($str1 or $str2) and ($text1 or $text2) // example of Boolean operators
#a == 4 and #b > 6 // string a needs to be found exactly four times and string b needs to be found strictly more than six times
$str at 100 // string str needs to be located within the file at offset 100
$str in (500..filesize) // string str needs to be located between offset 500 and end of file.
filesize > 500KB // Only files which are more than 500KB big will be considered

Conclusão

Este artigo mostra os recursos mais básicos do YARA. Não conseguimos documentar tudo, é claro, já que é realmente um tipo de linguagem de programação. As possibilidades oferecidas pela YARA para arquivos correspondentes são infinitas. Quanto mais o analista se sentir confortável com a YARA, mais ele ou ela terá a sensação e melhorará suas habilidades para escrever regras mais eficientes.

Como a linguagem é tão fácil de escrever e usar, é mais uma questão de saber o que realmente se quer detectar. Tornou-se cada vez mais comum nos últimos anos ver pesquisadores de segurança publicarem as regras da YARA em apêndices de seus artigos de pesquisa e postagens em blogs, a fim de ajudar todos a combinar conteúdo malicioso em seus computadores ou servidores. As regras YARA também permitem combinar conteúdo que não é malicioso, mas precisa ser monitorado cuidadosamente, como documentos internos, por exemplo, tornando o YARA uma ferramenta de detecção de perda de dados, bem como um detector de conteúdo malicioso. Não se deve hesitar em consultar a documentação YARA para ver todas as possibilidades oferecidas pela ferramenta.