NIDS (Network Intrusion Detection System ou Sistema de Detecção de Intrusão de Rede) é um sistema que tem por objetivo principal a detecção de intrusos. Além disso, são sistemas que:
Analisam tráfego de rede;
Procuram por assinaturas de ataques;
Fazem o registro dos ataques e opcionalmente avisam um operador (realtime);
Trabalham com sensores; vários pontos da rede podem ser monitorados.
Nessa seção serão mostradas duas ferramentas presentes no Conectiva Linux que estão relacionadas com NIDS: Snort e ACID.
O Snort é um aplicativo NIDS utilizado para detectar incidentes de segurança na sua rede. Ele pode analisar protocolos, procurar/casar conteúdos de pacotes, pode ser utilizado para detectar vários tipos de ataque, como, por exemplo, buffer overflow, portscan, ataques CGI e muitos outros. O Snort utiliza uma linguagem de regras muito flexível para descrever o tráfego que ele deve analisar ou deixar passar, e também um mecanismo de detecção que utiliza uma arquitetura modular de plugins, que registram os ataques de diversas maneiras, dentre elas SQL (MySQL, PostgreSQL, Oracle, unixOdbc), arquivo no formato tcpdump (binário), arquivo texto e syslog.
O Snort pode ser considerado um sensor, podendo monitorar diferentes pontos da rede ao mesmo tempo. A seguir, veja algumas das funcionalidades do Snort:
Normalizar requisições HTTP;
detectar ataques do tipo Unicode;
detectar portscan (por taxa e por flags);
remontar os segmentos TCP;
ativar regras dinamicamente (regras podem ser ativadas por outras regras).
Será visto aqui como instalar e configurar as opções básicas do Snort, utilizando-o em conjunto com o ACID[60], que é uma ferramenta utilizada para analisar os logs de incidentes do Snort, armazenados em um banco de dados.
Para utilizar o Snort você precisa ter sua rede instalada e configurada. Deve-se também ter o Apache habilitado e configurado para trabalhar com PHP na máquina onde será configurado o ACID.
Será instalado, neste exemplo, o Snort com suporte ao banco de dados MySQL, para ser possível utilizar o Snort juntamente com o ACID.
Para instalar o Snort e o ACID, selecione os seguintes pacotes no Synaptic:
snort
mysql
php4-mysql
acid
É possível instalar o Snort utilizando o apt-get, digitando o seguinte comando em um terminal:
# apt-get install snort acid mysql php4-mysql |
A instalação do Snort neste manual será feita em localhost apenas a título de exemplo. Na Figura 15.5. Exemplo de Instalação Distribuída pode-se ver um exemplo de instalação distribuída em três máquinas diferentes; uma possui o Snort instalado, a outra possui o banco de dados (MySQL) e a terceira executa o ACID.
Inicialmente é preciso configurar o banco de dados que será utilizado para o Snort registrar as ocorrências detectadas. Aqui será utilizado o MySQL, instalado no passo anterior. Para iniciar a configuração do MySQL execute o seguinte comando num terminal:
# /usr/bin/mysql_install_db |
![]() | Atenção |
|---|---|
Cuidado com a execução do comando a seguir. Execute-o somente se o MySQL nunca tiver sido utilizado antes, caso contrário você poderá perder seus dados. | |
A seguir, o comando pedirá a senha do usuário root do MySQL; note que essa senha não é a senha do superusuário do seu sistema e sim do usuário root do banco de dados.
Agora que já foi definida a senha do usuário root do banco, o serviço MySQL deve ser iniciado. Continue no terminal e digite:
# service mysql start |
Surgirá então uma mensagem indicando que o daemon do banco de dados foi iniciado.
O próximo passo é criar a base de dados na qual o Snort irá armazenar as ocorrências. Veja a seguir quais comandos utilizar.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.15-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> create database snort;
Query OK, 1 row affected (0.01 sec)
mysql> grant insert,select,update on snort.* to snort@localhost \
identified by 'senha123';
Query OK, 0 rows affected (0.02 sec)
mysql> grant insert,select,delete,update,create on snort.* to \
acid@localhost identified by
-> 'acid_senha';
Query OK, 0 rows affected (0.01 sec)
mysql> quit |
Na primeira linha de comando informa-se ao MySQL que deve-se iniciá-lo como usuário root e que ele deve pedir a senha do usuário. Na segunda e terceira linha cria-se a base de dados e o usuário que o Snort irá utilizar para registrar as ocorrências. Observe que o usuário snort não tem permissão de apagar nada, e nem precisa. A única operação que o Snort irá executar será inserir incidências na base de dados.
Na quarta linha, é criado o usuário acid com permissão de inserir, selecionar, apagar, atualizar e criar tabelas na base de dados. A permissão de criação é dada para o usuário acid somente enquanto não instala-se e configura-se esse aplicativo. Assim que a configuração do ACID estiver terminada, essa permissão deve ser retirada, pois abre uma brecha potencial na segurança.
Criada a base de dados e os usuários necessários, deve-se ir até o diretório /usr/share/doc/snort-[versão]; lá está contido um script para criar as tabelas e demais estruturas que o Snort irá utilizar. Estando nesse diretório, execute o seguinte comando:
# mysql -u root -p snort < create_mysql |
O comando irá informar ao MySQL para, como usuário root (do MySQL), executar na base de dados snort os comandos que estão no arquivo create_mysql. Você deverá informar a senha do usuário root do banco de dados para que o comando seja bem-sucedido.
Em seguida, execute o comando para terminar de criar as estruturas necessárias para o Snort. A sua execução pode demorar alguns minutos, dependendo da sua máquina:
# bzcat snortdb-extra.bz2 | mysql -u root -p snort |
Terminada a criação da estrutura da base de dados necessária para a utilização do Snort, deve-se agora editar o arquivo de configuração que fica em /etc/snort/snort.conf, modificando os valores de acordo com a necessidade. Edite-o e verifique as seguintes linhas:
#var HOME_NET $eth0_ADDRESS var HOME_NET [127.0.0.1,10.0.0.0/16] # Set up the external network addresses as well. A good start # may be "any"... var EXTERNAL_NET any # pode-se colocar !$HOME_NET para excluir a rede interna o # HOME_NET # Define the addresses of DNS servers and other hosts if # you want to ignore portscan false alarms from them... var DNS_SERVERS [10.0.0.12/32] |
![]() | Nota |
|---|---|
O arquivo /etc/snort/snort.conf possui permissão de leitura apenas para o administrador do sistema, uma vez que pode conter as senhas da acesso à base de dados utilizada pelo Snort. | |
Em HOME_NET você pode especificar uma máquina, interface ou rede na qual o Snort irá "escutar", ou ainda especificar uma lista dos itens acima mencionados, como especificado no exemplo. Em EXTERNAL_NET você irá configurar o que o Snort deve considerar como sendo uma rede externa; no exemplo, o parâmetro any indica qualquer rede. A terceira variável desse primeiro passo (DNS_SERVERS) é especificada para que o Snort não considere as tentativas de acesso provenientes do servidor DNS como sendo tentativas de portscan. Seguindo mais para o final do arquivo de configuração pode-se verificar o seguinte trecho:
# database: log to a variety of databases # --------------------------------------- # See the README.database file for more information about # configuring and using this plugin. output database:log, mysql, user=snort dbname=snort \ host=localhost password=senha123 # output database: log, postgresql, user=snort dbname=snort # output database: log, unixodbc, user=snort dbname=snort |
Observe que a linha output database foi descomentada; ela refere-se ao banco de dados que é utilizado (MySQL). Foi inserido ao final da linha o parâmetro password=senha123, que indica ao Snort qual senha utilizar para efetuar o login no banco de dados.
Ao final do arquivo de configuração do Snort, são incluídos os arquivos que contêm as regras de filtragem que ele irá utilizar. O exemplo a seguir ilustra alguns arquivos de regras que podem ser incluídos (geralmente já estão descomentados por padrão):
include $RULE_PATH/local.rules include $RULE_PATH/bad-traffic.rules include $RULE_PATH/exploit.rules include $RULE_PATH/scan.rules include $RULE_PATH/finger.rules include $RULE_PATH/ftp.rules include $RULE_PATH/telnet.rules include $RULE_PATH/rpc.rules include $RULE_PATH/rservices.rules include $RULE_PATH/dos.rules include $RULE_PATH/ddos.rules include $RULE_PATH/dns.rules include $RULE_PATH/tftp.rules include $RULE_PATH/smtp.rules include $RULE_PATH/imap.rules include $RULE_PATH/pop3.rules include $RULE_PATH/pop2.rules include $RULE_PATH/nntp.rules include $RULE_PATH/other-ids.rules |
$RULE_PATH é a variável, definida neste mesmo arquivo, que contém o caminho para os arquivos de regras.
Cada arquivo desses contém regras e assinaturas específicas para reconhecer um tipo de ataque. Você pode encontrar mais arquivos com regras e assinaturas em: WhiteHats e no site do Snort.
O último passo para a configuração do Snort é editar o arquivo /etc/sysconfig/snort. A seguir são mostradas as opções a serem configuradas:
INTERFACE=eth0
AUTO=no
ACTIVATE=no
A variável INTERFACE indica em qual interface o Snort irá escutar[61], a variável AUTO=no indica que o Snort deverá pegar o endereço IP fornecido no arquivo de configuração; caso seja especificada essa opção como yes, o Snort irá pegar o valor IP diretamente da interface especificada, ignorando o valor presente no arquivo de configuração. A variável ACTIVATE indica se o Snort deverá ser executado sempre que a interface "subir", pois quando a interface "cai", o Snort "cai" junto.
Inicie o serviço do Snort digitando o seguinte comando:
# service snort start |
Para configurar o ACID, deve-se primeiramente fazer com que o servidor web possua suporte ao PHP4, para que seja possível executar o ACID, (consulte o Capítulo 10. Servidor Internet).
Em seguida, inicie o seu servidor web, pois o ACID será executado localmente.
# service http start |
![]() | Nota |
|---|---|
Se você desejar acessar o ACID de qualquer local da rede para visualizar consultas, o que é bem provável, deve configurar o Apache para isso, mais especificamente no arquivo /etc/apache/conf/conf.d/acid.conf. | |
A seguir, modifique as seguintes variáveis contidas no arquivo /srv/www/default/html/acid/config/acid_conf.php:
$alert_dbname = "snort"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "acid"; $alert_password = "acid_senha"; |
A variável $alert_dbname indica o nome da base de dados a ser utilizada, as variáveis a seguir indicam: máquina onde se localiza a base de dados[62], porta, nome do usuário que o ACID irá utilizar para efetuar o login na base de dados e a senha a ser utilizada.
O resto da configuração do ACID se faz através do navegador. Inicie um navegador e digite o endereço local; Utilize o link Setup page para iniciar a configuração da base de dados.
Na próxima página você verá um botão chamado ; clique nesse botão. Em seguida, serão mostradas as mensagens de criação das bases de dados:
Sucessfully created `acid_ag` Sucessfully created `acid_ag_alert` Sucessfully created `acid_ip_cache` Sucessfully created 'acid_event' |
A próxima janela informa o estado do processo de criação das tabelas e índices e conduz à pagina principal do ACID, indicando que a sua configuração já foi finalizada e está pronto para ser utilizado.
Falta apenas retirar a permissão de criação de tabelas do usuário acid da base de dados. Voltando ao terminal modo texto, digite:
# mysql -u root -p ... mysql> revoke create on snort.* from acid@localhost; Query OK, 0 rows affected (0.22 sec) mysql> quit Bye |
Para testar a configuração, será simulado um ataque. Inicialmente, verifique se o Snort está executando na máquina a ser atacada:
# service snort status |
Com ele executando, efetue o login como usuário root em outra máquina da sua rede e utilize o comando nmap ip_da_maquina_a_ser_atacada. Caso não tenha o nmap instalado, instale-o utilizando o Synaptic, ou através do apt-get.
Após executar o nmap, vá até à máquina onde o Snort está instalado e inicie o navegador na página inicial do ACID. A Figura 15.6. Visualização de Ataques Feitos à Rede mostra a janela que surgirá, mostrando os detalhes que foram varridos.
Você pode explorar muitas das opções do ACID a partir da página inicial, onde encontrará os mais diversos tipos de gráficos e pesquisas que possam ser feitas no banco de dados. As opções mais comuns de pesquisa você encontra nos links da página principal, porém, caso esses tipos de pesquisa não satisfaçam as suas necessidades, clique no link Search e você será levado a uma página de pesquisa avançada, onde poderá especificar exatamente quais opções deseja.
Dentro das páginas de pesquisa você poderá optar por executar algumas ações com os registros obtidos. Entre elas estão:
Adicioná-los a um grupo de Alerta (por nome ou ID);
enviá-los por e-mail (uma simples lista com os registros, ou então uma descrição completa dos registros);
apagá-los (somente se o usuário acid tiver permissão delete na base de dados);
arquivar os alertas.
Estando numa página de pesquisa, você pode clicar sobre o nome de alguns ataques (por exemplo, IDS027 - SCAN-FIN), que o navegador abrirá uma nova janela com o site que contém a descrição desse tipo de ataque.