Skip to content

Posts tagged ‘perl’

2
set

YASG (Yet Another Security Guide)

A importância da segurança da informação

Tratar da segurança de computadores é realmente uma das situações mais complicadas possíveis. Você nunca saberá se está devidamente protegido até que alguém tente invadir sua rede e daí poderá ser tarde demais para um “puxa, eu devia ter caprichado mais no meu firewall”.

Todos sabemos que sistemas operacionais livres como GNU/Linux e *BSD’s são ideais para serem os responsáveis por tratar, filtrar e eventualmente bloquear o tráfego oriundo da Rede Mundial de Computadores antes destas passarem aos micros internos. É pensando nisto que irei tentar com algumas dicas simples, porém valiosas, conscientizá-los a como reforçar suas barreiras contra ataques.

Provavelmente você já conheça o termo Bastion Host. Este é o termo utilizado para definir a(s) máquina(s) que desempenha(m) algum papel crítico e importante na área de segurança de uma rede.

Imagine um Bastion Host como, geralmente, o gateway ou firewall de redes corporativas ou domésticas. É nele que a maior parte do serviço é feita, e ele sempre será considerado um alvo em potencial. É importante saber disso desde o início.

Considere sempre se você, como administrador do Bastion Host da sua empresa, possui os hábitos a seguir, importantes para manter a segurança em ordem:

  • Lê sempre os arquivos de log críticos do sistema, como o messages ou o syslog?
  • Removeu ou desabilitou os serviços desnecessários do(s) servidor(es): Pra que deixar um FTPd rodando se você não pretende utilizá-lo?
  • Educou os usuários internos para um mínimo possível de consciência em navegação segura, não abrindo anexos suspeitos, e cuidando com links maliciosos?
  • Possui um Firewall configurado de maneira restrita, correta e fechando todas as portas lógicas, liberando apenas as de extrema necessidade?
  • Configurou algum sistema de IDS (Intrusion Detection System) para que ataques sejam automaticamente detectados, barrados e os responsáveis, devidamente bloqueados?

Essas são algumas formas de minimizar os problemas básicos. Como sempre dizemos, não existe host que esteja plugado na internet e seja 100% seguro contra ataques, porém podemos fazer a nossa parte.

A solução começa de dentro – Como lidar com usuários

Usuários internos de grandes empresas costumam ser a pedra no sapato dos administradores e responsáveis pela segurança lógica. Os principais cuidados a serem tomados são simples:

  • Instant Messaging: Arquivos contendo instruções maliciosas são freqüentemente transmitidos por este meio. Bloquear as transferências, ou simplesmente impedir o acesso a estas tecnologias são formas de se livrar deste problema.
  • E-mail: Spam, scam, worms, spywares e muitas outras coisas chegam diariamente, aos quilos, para muitas caixas postais. Ter um bom servidor de e-mails interno configurado para trabalhar em conjunto com SpamAssassin e Clamav minimiza a ameaça. Algum aplicativo anti-vírus instalado localmente em cada estação também é recomendável. Porém, como sempre, nada melhor do que ensinar ao usuário a pensar antes de sair clicando e abrindo quaisquer sites que deseja. Mostrar a eles como conferirem uma URL real antes de clicar no link é algo simples e mais eficaz do que muitos imaginam.
  • Backup: Sim, a famosa cópia de segurança. É relativamente errado afirmarmos que jamais irá acontecer algo inesperado conosco, e para estas ocasiões, o backup é nossa fiel salvação. Ensine-os a gravar pelo menos os dados mais importantes, como aquela planilha que demorou 1 mês para ser feita…

Tenha ciência de que usuários não se importam com segurança. Eles, por natureza, nunca verificam por onde passam, não se preocupam com vírus, não pensam espontaneamente em atualizar o antivírus.
Eles sequer fazem logoff ao saírem de sites bancos ou outros serviços que requerem usuário/senha. Portanto, é seu dever ensinar o básico disso para eles. =) Num mundo ideal, onde todos os usuários-finais seriam cuidadosos, não precisaríamos de muitas precauções. Dependendo no nível de conhecimentos em informática deles, é válido inclusive “enjaulá-los” dentro de um ambiente limitado, como um usuário normal do Windows. Caso seja necessário instalar programas com nível de Administrador, faça você mesmo.

Aprofundando-se na questão: Servidor(es) de serviço(s)

Hoje em dia é raro encontrar uma rede totalmente desconectada da Internet. E nada melhor do que ter um Servidor para compartilhar a conexão entre as máquinas internas e assim economizar dinheiro, e também poder definir as políticas de acesso. Existem redes onde o Firewall, ou Bastion Host, representa vários papéis: Além de proteger a rede interna, também serve páginas na web (por meio de um apache, por exemplo), compartilha arquivos (samba), faz cache de recursos www (squid).
Nestes casos, segurança plena é algo difícil de ser alcançado. Devido a um grande número de portas lógicas e serviços abertos, o número de falhas e exploits a serem utilizados contra você é muito maior. Se este for o seu caso, considere o seguinte:

  • Uma máquina exclusiva para firewall não precisa de um hardware poderoso. Aquele Pentium 200 MMX que você tem jogado no canto, com míseros 32mb de RAM é mais do que suficiente;
  • Considerando o fator acima, chega-se a conclusão de que o investimento necessário será baixíssimo, e o ganho em segurança será enorme;
  • Um firewall stand-alone pode redirecionar os recursos solicitados para as máquinas de dentro, provendo a mesma funcionalidade que você obtinha antes com o servidor que centralizava todos os recursos;

Imagine que a máquina Firewall esteja na frente da máquina Servidor Web, ou seja, Firewall tem o link externo (Speedy, por exemplo). Na máquina Firewall, você, com ajuda do IPTables, definirá que as solicitações feitas por outros, na porta 80, sejam redirecionados para Servidor Web, porém com o devido tratamento do tráfego, e possível bloqueio de IP’s que apresentem um ataque em potencial. E assim você terá seu site na internet, da mesma forma, porém com muito mais tranquilidade.

A moral da história é: O servidor que possui um link externo (com a internet) deverá, para fins de maior segurança, ter o menor número de serviços possível rodando. Ter um sshd por exemplo é relativamente obrigatório para administração remota, e mesmo assim você pode facilmente diminuir os riscos de invasão simplesmente mudando a porta padrão de funcionamento.
Outra questão importante é desativar os serviços desnecessários. Se você não tem muita experiência em Servidores e ainda não sabe desabilitar tudo o que deveria, pergunte em fóruns, leia Howto’s e utilize nosso bom e velho amigo, o Google! Deixar um servidor de FTP, outro de Telnet, Apache, MySQL e outras coisas rodando sem que se faça utilização dos mesmos é conceder aos crackers boas chances de invasão.

Como eu monto um bom firewall para minha rede?

Chegamos à parte técnica da coisa. Irei dividir esta seção em três partes fundamentais: Snort, Guardian e Acid. A explicação de cada um dos serviços é bem simples:

  • O Snort analisa o tráfego da rede, trabalhando em conjunto com o IPTables. Caso alguma instrução maliciosa chegue ao Snort, ele dispara um “alerta”, que pode ser gravado num arquivo de textos ou bancos de dados.
  • O Guardian necessita do Snort para funcionar. Ele monitora constantemente o destino do log do Snort (arquivos de texto ou databases). Se encontrar alguma coisa que tenha sido qualificada como prejudicial, maliciosa ou suspeita, ele age de acordo com as configurações feitas, como bloquear o IP de origem do ataque.
  • O ACID é o responsável por emitir relatórios disso tudo. Se alguma tentativa de invasão, pacotes maliciosos ou coisas do gênero acontecerem, o ACID lê, interpreta e adiciona em um novo banco de dados, preparado para ser exibido de forma elegante via web.

Mãos na massa!

Instalando e configurando as dependências dos pacotes

Em primeiro lugar, certifique-se que possui os pacotes flex e bison instalados no seu sistema. Os sources para compilação podem ser encontrados aqui:

Usuários de distribuições derivadas de Debian podem instalar estas dependências via apt-get:

# apt-get install flex && apt-get install bison
Fedora e derivados:
# yum install flex && yum install bison

Agora iremos instalar a libpcap, componente necessário para o funcionamento do Snort. Baixe-a neste link: libpcap v0.8.1.
Descompacte o source e em seguida entre no diretório criado. Para compilar:

# ./configure && make && make install

E por último, iremos instalar a libpcre, também necessária para o Snort funcionar de acordo. No Debian e derivados:

# apt-get install libpcre3-dev

Não sei o nome deste pacote para Fedora e outras distribuições, porém deve ser semelhante, ou o mesmo. Pronto, chega de dependências. Vamos ao que interessa.

Compilando e configurando o Snort

Baixe o source do Snort aqui. Descompacte-o com:

# tar xzvf snort-2.6.1.1.tar.gz
Entre na pasta que será criada com os arquivos e então compile com:

# ./configure –with-mysql # make && make install
Agora vamos criar um diretório para depositarmos as regras de análise do tráfego da rede, e demais arquivos de configuração. Ainda dentro do diretório do source do Snort, digite:

# mkdir /etc/snort
# cp etc/* /etc/snort/

Prontinho. Iremos configurar agora o banco de dados aonde o Snort irá salvar os logs:

# mysql -u root -p (Você cairá no console de acesso do MySQL)

Digite:
mysql> CREATE DATABASE SNORT;
mysql> GRANT insert, select ON snort.* TO snort@localhost IDENTIFIED BY ‘senha_do_snort’;
mysql> GRANT insert, select, delete, update, create ON snort.* TO acid@localhost IDENTIFIED BY ‘senha_do_acid’;
mysql>quit;

Lembre-se de trocar a senha “senha_do_snort” por algo que você desejar. E para finalizar (lembre-se: esteja dentro do diretório do source do Snort):
# mysql -u root -p snort < schemas/create_mysql

Este comando irá importar o esquema de tabelas necessárias pro Snort gravar tudo direitinho. Agora é necessário baixar o arquivo de Regras do Snort. Estes arquivos são diretrizes que guiam o Snort na hora de analisar os pacotes, varrendo por ações maliciosas:

# cd /etc/snort/
# wget
http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz # tar xzvf snortrules-pr-2.4.tar.gz # mv rules/* . (Reparem no ponto final existente na última linha. Não esqueçam de digitá-lo) Por fim, é necessário que façamos ajustes no arquivo de configuração do Snort. Edite o arquivo /etc/snort/snort.conf e configure as seguintes variáveis com seus devidos valores:

var HOME_NET [127.0.0.0/16,192.168.100.0/24]
var EXTERNAL_NET !$HOME_NET
output database: log, mysql, user=snort password=senha_do_snort dbname=snort host=localhost

Agora o Snort está pronto para rodar. Certifique-se de que o MySQL está rodando e execute:

# /usr/local/bin/snort -d -c /etc/snort/snort.conf
Este comando irá rodar o Snort em primeiro plano. Verifique se houve conectividade com o banco de dados e se o snort.conf está correto. Caso tudo corra bem, mate o processo e crie um init script chamado “snort” dentro da pasta /etc/init.d/ com o seguinte conteúdo:

Agora é só configurar o Snort para auto-inicializar em boot-time com o comando: Para Debian:
# update-rc.d snort defaults

Instalando e configurado o Guardian

O Guardian é um perl script que interage em conjunto com o Snort e Iptables para automaticamente bloquear hosts que disparem alertas de segurança. Faça o download do script neste link. Descompacte e entre no diretório criado. Em seguida, execute os comandos:
# mv scripts/iptables_block.sh scripts/guardian_block.sh
# mv scripts/iptables_unblock.sh scripts/guardian_unblock.sh
# cp guardian.pl scripts/guardian_block.sh scripts/guardian_unblock.sh /usr/local/firewall/scripts
# cp guardian.conf /etc/

Agora temos que alterar algumas linhas dentro do arquivo /etc/guardian.conf .

HostIpAddr xxx.xxx.xxx.xxx #preencha com seu IP público
Interface ethX #substitua X pela interface de IP válido
AlertFile /var/log/snort.log #arquivo de log do snort

Pronto, agora é só tentar subir o init-script do Snort. Execute:
# /etc/init.d/snort start
Caso não haja nenhum erro, então o Snort estará logando os possíveis ataques no banco de dados MySQL, e o Guardian irá automaticamente atualizar as regras do Iptables caso seja necessário.

Botando o ACID para funcionar

Você poderá baixar o código do ACID nesta URL. O Acid é um software desenvolvido em PHP que objetiva a visualização dos relatórios gerados pelo Snort. Para começar, descompacte o arquivo baixado e mova a pasta do Acid previamente descompactada para a pasta pública do Apache com o comando:
# mv acid/ /var/www/htdocs/
# cd /var/www/htdocs/acid

Agora teremos que fazer o download do ADODB, que é um conjunto de bibliotecas de conectividade entre o PHP e o MySQL. Digite os comandos a seguir:
# wget http://ufpr.dl.sourceforge.net/sourceforge/adodb/adodb493a.tgz
# tar xzvf adodb493.tgz

Em seguida abra o seu arquivo de configurações acid_conf.php e altere as diretivas a seguir:

$DBlib_path = “./adodb”;
$alert_dbname = “snort”;
$alert_host = “localhost”;
$alert_port = “”;
$alert_user = “acid”;
$alert_password = “senha_do_acid”;
$archive_dbname = “snort”;
$archive_host = “localhost”;
$archive_port = “”;
$archive_user = “snort”;
$archive_password = “senha_do_snort”;

Agora falta uma última etapa. Abra seu navegador e navegue para http://localhost/acid e clique no botão: Create_ACID_AG Pronto! Se tudo ocorreu sem complicações, você verá a tela no Acid com informações sobre alertas adicionados ao banco de dados. Caso você não esteja instalando o Snort num link com bastante acesso, simule um “ataque”, rodando o nmap em si mesmo.

Conclusões, créditos e blá blá blá

Finalmente terminamos de montar nosso firewall um pouco mais seguro.

 

Um assunto que não abordei aqui (de propósito) foi a criação das regras no Iptables, que simplesmente são o coração disso tudo. Sem elas, o Snort, o Acid, o Guardian e todo o resto não vão segurar o tranco sozinhos. Porém, como o assunto se estende e é bem complexo, talvez eu escreva algum material acerta disso em breve.

Espero que, mais do que ensiná-los o passo-a-passo da instalação, eu (e outros guias mais) tenham alertado a todos da importância da segurança em TODOS os ambientes, desde o primo de 17 anos que acessa sites de pornografia até o chefe do setor comercial que abre e-mails contendo pishing de sites.

Como não me aprofundei completamente neste assunto, espero também que os mais interessados corram atrás, postem dicas e outros guias que possam eventualmente completar este (ou até substituí-lo =P). Este é o caminho para o conhecimento.

Gostaria de parabenizar toda a nossa comunidade. Sermos dessa forma, com essa vontade de compartilhar, de aprender, de ensinar e de guiar os outros é magnífico.

Quem quiser entrar em contato comigo para esclarecimento de dúvidas, pode usar este campo de comentários daqui mesmo, ou me mandar e-mails. Meu endereço é: jzerbini (arroooba) gmail.com

Quem quiser copiar este tutorial, fique à vontade. Manter os créditos da autoria original é sempre bom também.

Abraço a todos!

Jeremias Zerbini Filho.