Sintaxe para assinaturas da prevenção contra intrusões personalizada

Sobre sintaxe e convenções das assinaturas

Ao criar o conteúdo de cada assinatura IPS, você deve usar esta sintaxe:
rule protocol-type, [protocol-options,] [ip-protocol options,] "msg", "content"...
É necessário iniciar cada assinatura com a palavra-chave
regra
, seguida do argumento do tipo de protocolo, opções do protocolo, opções do protocolo IP, argumentos msg e argumentos de conteúdo. Os argumentos opcionais são colocados entre colchetes. Digite somente as informações dentro de colchetes, não insira os colchetes. Os argumentos seguidos por reticências podem ser repetidos. Forneça as informações dos argumentos usando operadores suportados e expressões regulares.

Argumentos do tipo de protocolo

Essa parte da assinatura define o tipo de protocolo usando esta sintaxe:
tipo de protocolo
onde
tipo de protocolo
é um destes parâmetros:
  • tcp
  • udp
  • icmp
O tipo do protocolo deve vir imediatamente após a palavra
regra
.
Por exemplo:
regra udp
Cada tipo de protocolo
tcp
,
udp
e
icmp
é compatível com seu próprio conjunto de argumentos opcionais.

Argumentos do protocolo TCP

Para obter detalhes adicionais sobre o protocolo TCP, consulte RFC 793.
Argumentos do protocolo TCP
Atributo
Descrição
Sintaxe
origem
Porta TCP de origem
operador de origem (valor)
em que
valor
é um número de 16 bits não assinado de 0 a 65535.
Exemplo:
origem=(180,2100)
O valor deve estar entre parênteses. O valor 0 (zero) indica todas as portas.
Você pode especificar um intervalo de portas usando um hífen entre dois valores de portas (por exemplo 3-5 inclui as portas 3, 4 e 5). Várias portas podem ser especificadas, separadas por vírgulas.
dest
Porta TCP de destino
operador dest (valor)
em que valor é um número de 16 bits não assinado de 0 a 65535.
Por exemplo:
dest=(120.125)
O valor deve estar entre parênteses. O valor 0 (zero) indica todas as portas.
Um intervalo de portas pode ser especificado usando um traço entre dois valores de portas (por exemplo 3-5 inclui as portas 3, 4 e 5). Várias portas podem ser especificadas, separadas por vírgulas.
tcp_flag
Indicadores de TCP presentes no pacote
tcp_flag operator flag|[flag]...
em que
flag
é um destes parâmetros:
  • fin: fim dos dados
  • syn: sincronizar números da sequência
  • rst: redefinir conexão
  • psh: função enviar
  • ack: significativo do campo de confirmação
  • urg: significativo do campo de ponteiro urgente
  • 0: corresponder todos os indicadores
Por exemplo:
tcp_flag&ack|ps
A maioria dos testes de tcp_flag usa o operador & (lógica binária e) como máscara (que significa que um pacote deve ter os indicadores especificados, mas que também podem ter outros indicadores definidos).
É possível especificar vários indicadores em um teste inserindo uma barra vertical (|) entre os indicadores.
Editar local
Tamanho da janela TCP
tamanho do operador janela
em que
tamanho do operador
é um número de 16 bits não assinado de 0 a 65535.
Por exemplo:
janela=16384

Argumentos do protocolo UDP

Para obter detalhes adicionais sobre o protocolo UDP, consulte RFC 768.
Argumentos do protocolo UDP
Atributo
Descrição
Sintaxe
origem
Porta UDP de origem
operador de origem (valor)
em que
valor
é um número de 16 bits não assinado de 0 a 65535.
Por exemplo:
origem=(180,2100)
O valor deve estar entre parênteses. O valor 0 (zero) indica todas as portas.
Um intervalo de portas pode ser especificado usando um traço entre dois valores de portas (por exemplo 3-5 inclui as portas 3, 4 e 5). Várias portas podem ser especificadas, separadas por vírgulas.
dest
Porta UDP de destino
operador dest (valor)
em que
valor
é um número de 16 bits não assinado de 0 a 65535.
Por exemplo:
dest=(120)
O valor deve estar entre parênteses. O valor 0 (zero) indica todas as portas.
Um intervalo de portas pode ser especificado usando um traço entre dois valores de portas (por exemplo 3-5 inclui as portas 3, 4 e 5). Várias portas podem ser especificadas, separadas por vírgulas.

Argumentos do protocolo ICMP

Consulte os RFCs 792 e 1256 para obter descrições detalhadas de tipos de protocolos ICMP válidos e combinações de códigos:
ICMPv4 e ICMPv6 são suportados para regras ICMP.
ICMPv6 é suportado a partir da versão 14.2.
Argumentos do protocolo ICMP
Atributo
Descrição
Sintaxe
tipo
Tipo do protocolo ICMP
valor do operador tipo
em que
valor
é um número de 8 bits não assinado de 0 a 255.
Por exemplo:
type=0
código
Tipo do protocolo ICMP
valor do operador código
em que
valor
é um número de 8 bits não assinado de 0 a 255.
Por exemplo:
código<=10

Argumentos do protocolo IP

Os argumentos do protocolo IP são independentes dos argumentos do tipo do protocolo e são válidos para os protocolos TCP, UDP e ICMP.
Para obter detalhes adicionais sobre o protocolo IP, consulte RFC 791.
Argumentos do protocolo IP
Atributo
Descrição
Sintaxe
saddr
Endereço IP de origem
saddr=(value/CIDR)
onde:
  • valor
    é um endereço IPv4 ou IPv6 que especifica o endereço IP do computador que executa o cliente ou a variável $LOCALHOST.
    IPv6 é suportado a partir da versão 14.2.
  • CIDR
    é uma representação de roteamento entre domínios sem classe que indica quantos bits serão usados para o prefixo da rede.
Por exemplo:
saddr=(127.0.0.0/25)
Aqui, 25 bits do endereço IPv4 são usados para identificar a rede exclusiva e os bits restantes que identificam o host.
saddr=(2001:0db8::0001/32)
Aqui, 32 bits do endereço IPv6 são usados para identificar a rede exclusiva e os bits restantes que identificam o host.
daddr
Endereço IP de destino
daddr=(value/CIDR)
onde:
  • valor
    é um endereço IPv4 ou IPv6 que especifica o endereço IP do computador que executa o cliente ou a variável $LOCALHOST.
    IPv6 é suportado a partir da versão 14.2.
  • CIDR
    é uma representação de roteamento entre domínios sem classe que indica quantos bits serão usados para o prefixo da rede.
Por exemplo:
daddr=(128.0.0.0/4)
Aqui, quatro bits de IPv4 são usados para identificar a rede exclusiva e os bits restantes que identificam o host.
daddr=(2001:0db8::0002/120)
Aqui, 120 bits do endereço IPv6 são usados para identificar a rede exclusiva e os bits restantes que identificam o host.
tos
Tipo de indicador de serviço presente no pacote
Este atributo aplica-se somente aos endereços IPv4.
valor do operador tos
em que
valor
é uma constante numérica no formato decimal, hexadecimal ou octal.
Por exemplo:
tos=0x4
Para exibir valores ToS de IP válidos, consulte:
Para testar vários valores tos de IP em um pacote, o argumento tos deve ser a soma dos valores a serem testados. Geralmente, o operador é = ou &. Você não pode combinar esses indicadores usando a barra vertical (|).
tot_len
Tamanho total do pacote
Este atributo aplica-se somente aos endereços IPv4.
valor do operador tot_len
em que
valor
é um número de 16 bits de 0 a 65535 que especifica o tamanho total do pacote.
Por exemplo:
tot_len>1445
Ao especificar o valor, o tipo de protocolo da regra deve ser considerado para calcular corretamente o tamanho a ser testado. Para auxiliar no cálculo de tot_len de cada tipo de protocolo suportado, o tamanho dos cabeçalhos são assim:
TCP: De 20 a 60 bytes
UDP: 8 bytes
ICMP: De 8 a 20 bytes
ttl
Tempo de vida (TTL) do pacote
Este atributo aplica-se somente aos endereços IPv4.
valor do operador ttl
em que
valor
é um valor de 8 bits de 0 a 255 que especifica o tempo de vida característico do pacote.
ip_flag
Valor de deslocamento da fragmentação do pacote
Este atributo aplica-se somente aos endereços IPv4.
valor do operador ip_flag
em que
valor
é um valor de 13 bits que especifica o valor de deslocamento fragmentado no pacote.
Os deslocamentos de fragmentação de IP ocorrem em limites de 8 bytes; portanto, cada valor de bit no deslocamento de fragmentação representa três bits.
Valores tos do IP
Dez.
Hex
Opção
2
0x2
Minimizar custos
4
0x4
Maximizar confiabilidade
8
0x8
Maximizar taxa de transferência
24
0x18
Minimizar atrasos

Argumentos de Msg

Quando uma assinatura IPS corresponde com êxito o conteúdo do pacote às condições de teste da regra, a mensagem é especificada no argumento msg. O argumento msg aparece no log de segurança no cliente e no servidor. Somente um argumento msg pode ser incluído em cada assinatura IPS.
Sintaxe:
msg="mensagem de alerta"
A mensagem de alerta deve estar entre aspas duplas e não pode conter pontuação. Aspas únicas não são permitidas. O objetivo da mensagem de alerta é permitir a identificação fácil de um evento na rede por meio da verificação do registro de segurança. Portanto, todas as assinaturas IPS devem conter mensagens de alerta concisas, mas descritivas no argumento msg.
Exemplo:
msg="Vulnerabilidade transversal unicode do IIS"

Argumentos de conteúdo

O argumento do conteúdo especifica um padrão a ser procurado em um pacote. O argumento de conteúdo pode aparecer várias vezes em uma assinatura IPS. O valor do conteúdo deve ser colocado entre aspas duplas (” "). Aspas únicas (' ') não são permitidas.
Sintaxe:
content="value"
em que
value
é um padrão especificado como literal de string ou literal binário que deve estar entre aspas.
Um literal de string é um grupo de caracteres consecutivos, incluindo espaços. Uma string pode conter quaisquer caracteres, exceto aspas ("), barra invertida (\) ou sequência de escape de caractere de linha nova (\n). Exemplo:
content="system32"
Um literal binário é um grupo de bytes consecutivos expressos no formato hexadecimal onde a sequência de escape \x precede cada byte. Exemplo:
content="\x04\x20\x20\x20\xBF"
Este exemplo especifica o conteúdo como o literal binário "\x04\x20\x20\x20\xBF".
Os literais de sequência podem ser combinados com os literais binários para criar padrões complexos. Exemplo:
content="\x0DLocation\x3A"

Argumentos de conteúdo opcionais

É possível usar argumentos de conteúdo adicionais e opcionais para melhor qualificar o conteúdo destas maneiras:
  • Diferenciação entre maiúsculas e minúsculas
  • Decodificação HTTP
  • Profundidade e deslocamento

Diferenciação entre maiúsculas e minúsculas

Você pode especificar um sinalizador opcional da distinção entre maiúsculas/minúsculas de C em cada argumento de conteúdo. Quando você usar esse sinalizador, a string de teste padrão do argumento de conteúdo corresponderá somente se os seus caracteres corresponderem exatamente aos dos dados no pacote.
Por exemplo, é possível usar esta sintaxe:
content="value"C
content="\x0DLocation\x3A"C

Decodificação HTTP

É possível usar o indicador de decodificação opcional HTTP H em cada argumento de conteúdo. Se você usar o indicador de decodificação HTTP H, os caracteres codificados serão convertidos em literais binários antes de tentarem uma correspondência de padrões. Também é possível usar o indicador HTTP H após o indicador de diferenciação entre maiúsculas e minúsculas. As URIs de HTTP usam caracteres codificados. Quando a correspondência de padrões é tentada e normalizada, os dados normalizados são comparados aos literais binários ou de string no argumento de conteúdo. Na maioria das circunstâncias, o indicador H é usado somente para as regras de TCP relacionadas a aplicativos que usem o protocolo HTTP.
Por exemplo, é possível usar esta sintaxe:
content="value"H
content="\x6f\x6e\x4c\x6f\x61\x64\x3d\x22\x61\x6c\x65\x72\x74\x28"H

Deslocamento e profundidade

É possível usar os valores de deslocamento e profundidade como argumentos opcionais no conteúdo. O valor de deslocamento é especificado primeiro, seguido pelo valor de profundidade.
Por exemplo, é possível usar esta sintaxe:
content="value"(deslocamento,profundidade)
Sintaxe
Descrição
valor
Um padrão que é especificado como literal da string ou literal binário que deve estar entre aspas.
deslocamento
Um número inteiro positivo em representação decimal.
O deslocamento especifica um local alternativo para iniciar uma correspondência de padrão. O deslocamento também especifica quantos bytes serão ignorados antes que a assinatura tente padronizar a correspondência.
Quando um argumento de deslocamento não está presente ou tem valor 0, o padrão do argumento de conteúdo tenta encontrar uma correspondência. O padrão tenta corresponder a um dos seguintes:
  • O conteúdo no início da atividade do pacote
  • A parte do pacote que segue o cabeçalho de protocolo para o primeiro argumento de conteúdo
Cada argumento de conteúdo sucessivo automaticamente inicia o teste de correspondências de padrão que segue o fim da correspondência do padrão com êxito anterior.
profundidade
Um número inteiro positivo em representação decimal. A profundidade especifica o número máximo de bytes a ser pesquisado durante a tentativa de correspondência de um padrão em um argumento de conteúdo.
Quando um argumento de profundidade tem valor 0, o padrão contido no argumento de conteúdo tenta encontrar uma correspondência do deslocamento até o fim do pacote. O valor especificado para o argumento de profundidade não pode ser inferior ao número de bytes especificado como padrão para corresponder ao argumento de conteúdo.
content="\x04\x20\x20\x20\xBF"(4,5)
Esse exemplo ignora quatro bytes adiante a partir do padrão de correspondência precedente ou desde o início da atividade do pacote. Ele compara então os cinco bytes seguintes com o literal binário contido no argumento de conteúdo.

Argumentos Streamdepth

Você pode usar o argumento Streamdepth para limitar o comprimento do fluxo no qual a regra da prevenção contra intrusões procura uma assinatura. Convém usar o Streamdepth para melhorar o desempenho de suas regras da prevenção contra intrusões personalizada. O argumento Streamdepth é opcional.
Sintaxe:
streamdepth=
valor
Por exemplo, você pode suspeitar que uma assinatura existe nos primeiros 10 KB de um fluxo de 1 MB. Você pode usar a seguinte sintaxe:
streamdepth=10240
No arquivo de download, a regra da prevenção contra intrusões com este valor de Streamdepth interromperá a busca pela assinatura após 10 KB. Limitando a verificação, o desempenho do download é melhorado.
Se você definir o Streamdepth como 0, a prevenção contra intrusões aplicará a regra ao fluxo inteiro.

Operadores suportados

Muitos argumentos na sintaxe da assinatura requerem um operador que indique o tipo de teste a ser executado para verificar esse tipo de tentativa.
A tabela a seguir descreve os operadores suportados.
Operadores compatíveis usados nas assinaturas IPS
Operador
Descrição
<
Menor que
>
Maior que
=
Igual a
&
Lógica binária E
Na biblioteca de assinaturas, o caractere E comercial, &, algumas vezes é representado pelo seu equivalente em HTML, &
<=
Menor ou igual a
>=
Maior ou igual a

Exemplo de sintaxe personalizada da assinatura IPS

Você pode criar exemplos de assinaturas IPS personalizados para detectar uma tentativa de acessar e fazer o download de arquivos MP3 com um navegador da Web ou FTP.
O formato de um arquivo MP3 dificulta a detecção de um arquivo MP3 no tráfego na rede. Porém, é possível exibir os pacotes TCP para encontrar os comandos e protocolos usado para recuperar os arquivos MP3. Você pode em seguida usar estas informações para criar a sintaxe de uma assinatura IPS personalizada.
Para detectar um arquivo MP3 e bloquear o acesso a ele, você grava duas assinaturas. Uma assinatura detecta um arquivo MP3 através do serviço HTTP. A segunda assinatura detecta arquivos MP3 através do serviço FTP.
Quando você criar uma assinatura IPS personalizada, será necessário digitar o conteúdo da assinatura usando o seguinte formato:
rule
protocol-type
, [
protocol-options,
] [
ip-protocol option,
] msg, content...
Durante uma sessão de HTTP ou FTP, o servidor e o cliente trocam informações. As informações são contida nos pacotes TCP destinados para o serviço apropriado no servidor. O serviço HTTP usa a porta 80 e o serviço FTP usa a porta 21. Os pacotes TCP contêm as informações necessárias de um componente da atividade.
Os navegadores da Web usam o comando HTTP GET para fazer o download de arquivos MP3. O cliente FTP usa o comando FTP RETR para fazer o download de arquivos. O comando FTP será usado também quando vários arquivos forem recuperados usando o comando MGET. O nome de arquivo e a respectiva extensão mp3 estão presentes em ambos os pedidos. Ambos os protocolos inserem caracteres [CR] [LF] para marcar o final da solicitação
A sintaxe da assinatura também deve conter vários parâmetros, incluindo uma expressão regular que identifique os comandos específicos que devem ser bloqueados. As expressões regulares são padrões dos caracteres comparados ao conteúdo do pacote. Os comandos que deseja bloquear são contidos nestes pacotes. Se você não souber o nome de um arquivo específico, poderá usar o caractere curinga (*) para corresponder ao número desconhecido de caracteres entre o comando e o nome de arquivo. O comando deve estar em minúsculas, mas a extensão do arquivo pode estar em maiúsculas ou minúsculas.
Para obter mais informações, consulte:
O conteúdo da assinatura de HTTP contém a seguinte sintaxe:
rule tcp, dest=(80,443), saddr=$LOCALHOST, msg="MP3 GET in HTTP detected", regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
O conteúdo da assinatura de FTP contém a seguinte sintaxe:
rule tcp, dest=(21), tcp_flag&ack, saddr=$LOCALHOST, msg="MP3 GET in FTP detected", regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
A tabela a seguir explica a sintaxe para a assinatura HTTP e a assinatura FTP.
Sintaxe da assinatura de HTTP e de FTP
Use a seguinte sintaxe:
Para executar a seguinte tarefa
Para a assinatura de HTTP:
rule tcp dest=(80,443)
Para a assinatura de FTP:
rule tcp dest=(21)
Diz ao mecanismo com base no pacote qual tráfego pesquisar. Dessa maneira, o mecanismo não procura tráfego desnecessário e não esgota os recursos do sistema. Quanto mais informações detalhadas você fornecer, melhor o desempenho do mecanismo com base no pacote.
Este argumento limita as portas de destino para 80 e 443 para o serviço de HTTP e 21 para o serviço de FTP.
Para a assinatura de FTP:
tcp_flag&ack
Reduz os falsos positivos.
saddr=$LOCALHOST
Garante que a solicitação origine-se no host.
Para a assinatura de HTTP:
msg="MP3 GET in HTTP"
Para a assinatura de FTP:
msg="MP3 GET in FTP"
O nome da assinatura será exibido quando a assinatura for acionada. O nome aparece no log de segurança. Use uma string descritiva de modo que possa facilmente identificar a assinatura acionada no log.
Para a assinatura de HTTP:
regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
Para a assinatura de FTP:
regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
Corresponde a esta string no tráfego de HTTP ou no tráfego de FTP à atividade nos pacotes de TCP. Para reduzir falsos positivos, use este argumento com cuidado.
A string corresponde ao texto ASCII do pacote de TCP, que é “GET [.*].mp3[CR][LF]” para a assinatura de HTTP e “RETR [. *] .mp3 [CR] [LF]” para a assinatura de FTP.
A string é gravada de modo que o texto não diferencie maiúsculas e minúsculas.
Mais informações