Tráfego Suspeito
O Snort é uma ferramenta Open Source indispensável na implementação da segurança de um servidor ou servidores em uma rede (e da própria rede em si). Ele é classificado como ferramenta NIDS (Network Intrusion Detection System) que, de forma simples, é um sistema que analisa pacotes que trafegam em uma rede de pequeno ou médio porte a partir de um host/node dessa rede, comparando tais pacotes com um banco de dados baseado em regras pré estabelecidas (ruleset), que geralmente são assinaturas de comportamento ou ação de diversos tipos de ataques conhecidos, gerando alertas a cada vez que um é detectado... Mas o que são essas assinaturas? Assinaturas (abrasileirado de fingerprints ou ainda impressões digitais), nesse caso das regras do Snort, são peculiaridades fortes de um certo ataque ou ação suspeita que a identificam, como na vida real sua assinatura ou impressão digital identificam a sua pessoa.
Mas por que motivo nós necessitaríamos de um sistema NIDS em nossa simples conexão caseira? Quem haveria de se interessar por informações sem valor de um mero usuário? Digo com toda certeza que hoje, principalmente após o ~SBOOM~T da conexão banda larga, as conexões caseiras ou SOHO são as mais visadas por usuários maliciosos, justamente por não possuírem em sua maioria um grande sistema de segurança, por seus mantenedores raramente acreditarem serem alvos em potencial de incidentes de segurança, representando além de alvos mais fáceis, excelentes pontos de partida ou pontes para ataques a outros servidores (principalmente no que tange ao anonimato), assim como excelentes nodes para ataques DoS/DDoS.
Nota
|
Vale lembrar que, dependendo da configuração de seu sistema, você precisará fornecer ao script configure a localização exata da biblioteca libpcap utilizando as opções --with-libpcap-includes e --with-libpcap - libraries.
|
Apesar de sua tarefa, o Snort é considerado uma ferramenta de fácil instalação e utilização até mesmo para o usuário caseiro, porém ao mesmo tempo, possuindo diversas formas de configuração e adaptação às mais variadas situações e tipos de rede.
Compilação e Instalação
Para que o Snort possa adequadamente analisar pacotes que trafegam pela interface de rede de seu servidor, ele necessita que a biblioteca Libpcap esteja instalada corretamente. Essa biblioteca oferece um API independente do sistema operacional que permite a aplicações capturarem pacotes de uma rede para posteriormente manipulá-los da forma mais adequada.
Caso você não a tenha instalada em seu sistema ainda, ela pode ser encontrada em nosso CD da edição de Aniversário em /Pacotes_Linux/dependencias/libpcap.tar.Z ou através do site tcpdump.org/ . Tenha a certeza de ler o README e a documentação para correta instalação da libpcapp em seu sistema, porém o trio ./configure; make; make install deverá realizar a sua compilação e instalação sem maiores problemas. No momento em que escrevemos este artigo, a última versão estável disponível do Snort é a 1.8.3-RELEASE.
Copie o código fonte compactado para um diretório temporário qualquer e o descompacte, utilizando nosso trio maravilha (./configure, make, make install) para a correta compilação e instalação do Snort em seu sistema.
Se tudo correu bem durante a compilação, você deverá ter o binário do snort já instalado em seu sistema. Em uma instalação padrão o caminho completo para o binário é /usr/local/bin/snort.
Configuração Básica
Precisamos de imediato gerar ou obter um arquivo de regras que o snort utilizará como base para suas ações. Procure em: whitehats.comwhitehats.com/ids/index.html.
Você deverá copiar as regras escolhidas para um diretório de sua preferência em seu sistema (no caso de nosso exemplo, escolhemos o /etc/snort).
Agora, editamos o arquivo snort.conf para adequá-lo à nossa rede. Nele, várias configurações podem ser implementadas. No caso de nossa instalação, iremos configurar as variáveis referentes ao nosso ambiente de rede: HOME_NET
Esta variável indica qual será a rede, interface ou IP sob o qual o Snort estará sendo executado, e é de grande importância para definir como ele analisará os pacotes de rede capturados: var HOME_NET REDE/mascara
Pode-se incluir mais de uma rede/subnets separando-as por vírgulas. Nas últimas versões do Snort também foi introduzida a opção $interface_ADDRESS (var HOME_NET $eth0_ADDRESS ou var HOME_NET $ppp0_ADDRESS, por exemplo) que fará com que, no momento de sua execução, o Snort utilize o IP corrente de sua interface escolhida, o que é excelente no caso de conexões cable modem que não possuam IP fixo ou dial-up.
Caso nosso servidor estivesse em uma rede imaginária 192.168.1.0/255.255.255.0, poderíamos utilizar, por exemplo, o CIDR:
var HOME_NET 192.168.1.0/24
SMTP / HTTP_SERVERS / SQL_SERVERS / DNS_SERVERS:
Essas variáveis são muito importantes para evitar alarmes falsos provenientes de acessos legítimos de servidores da sua própria rede, e são configuradas da mesma forma da HOME_NET. Como padrão o snort.conf as possui configuradas para sua rede local ($HOME_NET), portanto você só precisará alterá-las caso os servidores desses serviços estejam em máquinas fora da rede que você definiu através da variável HOME_NET.
Após nossa configuração básica, recomenda-se manter o diretório de regras e seus arquivos imutáveis para evitarmos possíveis alterações indevidas ou erros:
chattr -R +i /etc/snort
Ao precisarmos alterar alguma regra/configuração ou adicionar novas, basta permitirmos tais alterações através de:
chattr -R -i /etc/snort
Utilização Básica
De forma semelhante à de sua configuração, as formas de utilização do Snort são muitas. Repassaremos aqui sua utilização padrão. Primeiramente, criamos um diretório qualquer onde serão armazenados os logs referentes à nossa ferramenta:
mkdir /var/log/snort
Agora executamos nossa ferramenta instalada e configurada:
/usr/local/bin/snort -D -c /etc/snort/snort.conf -l /var/log/snort -i eth0 -y
As opções utilizadas foram -D (para executar o Snort no modo daemon), -c (para definir qual será o arquivo de configuração principal do Snort), -1 (para definir o diretório onde serão armazenados os logs gerados. Caso deseje, os alertas poderão também ser registrados através do syslogd ou ainda armazenados em seu banco de dados local - consulte a documentação para maiores informações), -i (definindo a interface cujos pacotes o Snort deverá analisar)... Mais opções podem ser obtidas através do comando:
/usr/local/bin/snort -?
A partir do momento de sua primeira execução, o Snort criará no diretório de logs escolhido (em nosso caso /var/log/snort) os arquivos alert, onde registrará seus alertas e portscans, onde serão registradas informações de pacotes provenientes de portscans detectados, além de (no caso de nossa configuração) criar diretórios com o nome de cada host ou IP agressor com informações sobre o que foi detectado para facilitar o processo de auditoria.
Um exemplo ilustrativo de alerta registrado a partir de uma requisição de versão de um servidor de nomes (DNS) direcionado ao nosso Host_Destino:
[**] [1:257:1] DNS named version attempt [**]
[Classification: Attempted Information Leak] [Priority: 3]
10/17/01-14:42:39.566730 origem.com.br:4022 -> destino.com.br:53
UDP TTL:51 TOS:0x0 ID:39358 IpLen:20 DgmLen:58
Len: 38
[Xref => www.whitehats.com/info/IDS278]
|
Como pode ser visto, o alerta registrado contém sempre a referência ao que foi detectado. Neste caso, uma tentativa de obtenção da versão de meu servidor de nomes vinda do host origem.com.br, porta 4022 em direção ao meu host destino.com.br, porta 53, além de muitas informações a respeito do próprio pacote capturado como protocolo, tamanho do pacote, Time To Live. Muitas vezes o alerta também inclui uma URL para consultas a respeito do que foi registrado (Xref).
Além disso, devemos ter em mente que, devido ao número de regras e o número de pacotes analisados, e dependendo das conexões efetuadas a seu servidor, muitas vezes poderão ser gerados alertas falsos ou incertos, principalmente referentes a portscans e pacotes ICMP. Portanto os logs comuns do próprio servidor também devem ser levados em conta durante a análise de um possível incidente.
Para Saber Mais
Renato Murilo Langona - renato@linuxsecurity.com.br
|