Pages: [1]   Go Down
Author Topic: [tutorial] detector de intrusão snort: 2º parte  (Read 3834 times)
kodo no kami
RegMem
*

Karma: +0/-0
Offline Offline

Posts: 44


« on: February 15, 2016, 07:40:01 AM »

e ae galera continuando o tutorial anterior de snort nesse vamos criar regras especificas para ele detectar algum ataque especificos, lembrado o snort é um ids passivo que detectar padrões de ataques sobre regras pre-definidas ou seja se voce conhece o ataque voce consegue detectar ele, as regras que ja vem por default no snort fica no diretorio /etc/snort/rules onde tem diversas regras onde podemos abrir em um editor de texto e estuda-las



por padrao o snort nao carrega essas regras direto daquela diretorio e sim de um arquivo snort.conf que fica em

Code:
/etc/snort/snort.conf

sendo essas regras incluídas atraves da diretiva include seguido do local da regra no arquivo snort.conf



no caso a gente pode criar nosso arquivo com a nossa regra colocar la nos diretorios rules e depois incluir dentro do arquivo snort.conf ou entao podemos criar um novo snort.conf podendo ser outro nome tambem nao necessariamente snort.conf, porem criar um arquivo snort.conf novo pode gerar varios problemas principalmente se a gente usar uma regra ja existente que use variaveis que foram definidas no arquivo snort.conf original, para a gente chamar o arquivo de configuração com as regras basta usar o argumento -c seguido do local do arquivo, tambem precisamos definir o local onde sera armazenado os logs com o argumento -l seguido do diretorio

Code:
snort -c /etc/snort/snort.conf -l /home/kodo/Desktop



sera gerado dois arquivos o arquivo normal de dump dos pacotes e o arquivo alert onde sera armazenado logs de invasão que vamos ver mais para frente, como dito antes a gente pode criar o nosso arquivo de configuração novo tambem (no caso vamos usar um arquivo novo e nao o snort.conf)

Code:
snort -c /home/kodo/Desktop/kodosnort.conf -l /home/kodo/Desktop

agora que a gente ja sabe como carregar arquivos de configuração vamos entender como as regras funciona, as regras se dividem em varias partes a primeira define o tipo de regra existe varios tipos porem vamos nos focar nesse tutorial no tipo alert que gera um alerta quando uma regra é detectada no pacote e com isso armazenado no arquivo alert, depois do tipo de regra temos o tipo protocolo que pode ser tcp ou udp, depois temos o IP da fonte no pacote seguido da porta da fonte, logo em seguida IP de destino seguido da porta destino, e por fim entre parenteses as opções

Code:
[Tipo] [Protocolo] [IP SRC] [Porta SRC] -> [IP DST] [Porta DST] (Opçao)

um exemplo basico seria isso, onde ele detecta apenas se o pacote estiver setado com o IP da fonte 192.168.1.1 e a porta da fonte for 10000 sendo enviado para o IP de destino 192.168.1.2 para porta 80 usando protocolo tcp

Code:
alert tcp 192.168.1.1 10000 -> 192.168.1.2 80 (sid: 1000001)

quando a gente precisa definir qualquer porta ou qualquer IP onde nao conhecemos podemos usar a palavra any, diferente do exemplo anterior que para detectar ele deveria detectar tudo no exemplo abaixo ele detecta qualquer pacote que tenha como destino o IP 192.168.1.1 na porta 80

Code:
alert tcp any any -> 192.168.1.1 80 (sid: 1000001)

o mesmo vale para o oposto que detecta o pacote que saiu daquela maquina

Code:
alert tcp 192.168.1.1 80 -> any any (sid: 1000001)

podemos criar varias regras uma em baixo da outra

Code:
alert tcp 192.168.1.1 80 -> any any (sid: 1000001)
alert tcp any any -> 192.168.1.1 80 (sid: 1000002)

o exemplo anterior tambem poderia ser feito dessa forma que indica que comunicação pode ser de ambos os lados

Code:
alert tcp 192.168.1.1 80 <> any any (sid: 1000001)

a gente pode definir uma rede ao inves de um IP bastando colocar o IP da rede e mascara de rede

Code:
alert tcp 192.168.1.0/24 any -> any any (sid: 1000001)

podemos definir varios IPs colocando entre colchetes e separados por virgula (o mesmo pode ser feito com portas)

Code:
alert tcp [192.168.1.1,192.168.1.2] any -> any any (sid: 1000001)

é possivel usar negação com o exclamação para inverter a logica, por exemplo para definir qualquer pacote que sera enviado para fora da rede (que nao seja aquela rede)

Code:
alert tcp 192.168.1.0/24 any -> !192.168.1.0/24 any (sid: 1000001)

agora vamos da uma analisada no log alert para entender ele, para isso vou usar a seguinte regra aqui qualquer pacote que for para o IP 192.168.1.1 que é essa maquina na porta 21 ou seja quero detectar ftp

Code:
alert tcp any any -> 192.168.1.1 21 (sid: 1000001)



na maquina ubuntu (192.168.1.2) eu vou fazer a conexao ftp na maquina debian (192.168.1.1)



com isso gero nosso alert porem gero varios alertas isso por que ouve varios pacotes de comunicação entre as duas maquinas, no arquivo existe na primeira linha [**] Snort Alert! [**] que é nada mais nada menos mensagem (podemos customizar a mensagem na opção da regra),  o segundo é prioridade que por padrao é 0 tambem é possivel mudar ela na opção da regra, depois temos o tempo 02/15-07:28:56.632123 que é data e a hora que foi gerado o alerta, seguido do IP e porta da fonte e o IP e porta de destino 192.168.1.2:48950 -> 192.168.1.1:21, na linha de baixo temos o procotolo que nesse caso é o TCP, o TTL que é o tempo de vida do pacote em uma rede para evitar loops infinito, e algumas outras informações que nao é importante por enquanto como tamanho do pacote entre outras coisa, na linha de baixo temos as flags que sao extremamente importantes ja que por elas a gente pode detectar se um pacote esta iniciando uma comunicação ou a finalizando nesse caso a flag do primeiro pacote é S (syn) entao a comunicação esta sendo iniciada ******S*, depois disso temos mais algumas informações referente ao pacote (caso tenha duvida ou interesse em se aprofundar recomendo estudar rede para ser mais especifico a pilha de protocolo tcp/ip)



a opção que temos que setar para criar um alerta que nao pode faltar é o sid (Snort ID), essa é unica opção que nao pode faltar em nenhum alerte se nao o snort nem roda e cada novo alerta a sid deve ser diferente da outra, é recomendado colocar sid acima de 1000000 ja que sid baixa pode ser que esteja em alguma regra especifica, para usar a sid basta digitar ela dentro da opção seguido de dois pontos e o numero

Code:
alert tcp 192.168.1.1 21 -> any any (sid: 1000001)
alert tcp any any -> 192.168.1.1 21 (sid: 1000002)
alert udp any any -> any 53 (sid: 1000003)

as vezes voce faz revisão da sua regra e com isso voce pode usar a opção rev seguido do numero da revisao (quando existe duas ou mais opções deve ser separado por ponto e virgula e tambem nao importa a ordem)

Code:
alert tcp any any -> any 3306 (sid: 1000001 ; rev: 10)

com a opção msg podemos definir a mensagem

Code:
alert tcp any any -> 192.168.1.1 21 (msg: conexao ftp ; sid: 1000001)
alert tcp any any -> 192.168.1.1 22 (msg: conexao ssh ; sid: 1000002)
alert tcp any any -> 192.168.1.1 80 (msg: conexao http ; sid: 1000003)



para especificar uma flag usamos a opção flags seguido das letras que representa ela, o bom da flag é que podemos diminuir a quantidade de pacotes capturados principalmente quando queremos apenas detectar a conexao e nao todo pacote referente a conexao

Code:
alert tcp any any -> 192.168.1.1 80 (msg: conexao http; flags: S; sid: 1000001)

tambem podemos especificar a prioridade com priority seguido do numero

Code:
alert tcp any any -> 192.168.1.1 80 (msg: conexao http; priority: 3; sid: 1000001)

podemos checar o conteudo dentro do pacote com content, veja um exemplo de uma falha LFI

Code:
alert tcp any any -> 192.168.1.1 80 (msg: ataque LFI; content: "../../../"; sid: 1000001)



no log foi detectado a tentativa de invasao pela falha LFI



podemos usar bytes especifico no lugar de carecteres usando duas vezes o pipe e o codigo dos bytes no meio em hexadecimal, por exemplo a exploração de uma falha SQL Injection (sqli) onde se coloca aspas no final para ver se retornar erro do banco de dados sendo esse aspas convertido para urlencode %27 pelo proprio navegador e passado como o metodo

Code:
alert tcp any any -> 192.168.1.1 80 (msg: ataque SQLI; content: "|253237|" ; sid: 1000001)



no log foi detectado a tentativa de invasão por SQL Injection



entao galera eu ate pensei em construir um sisteminha vuneravel para esse exemplo (so que a preguiça nao deixo kkk ). e mesmo assim o intuito aqui nao é mostrar as falhas em si mais sim que a ferramenta pode detectar a tentativa de exploração dela, no caso do snort basta conhecer o padrao da falha que voce consegue criar uma regra para ele detectar ela, bom galera esse tutorial esta fincando um pouco grande entao vou continuar em uma 3º parte ja que esse assunto é bem extenso e ainda tem muita coisa para falar \o

by kodo no kami
Logged

Pages: [1]   Go Up
Print
Jump to: