Políticas simples de segurança dentro da empresa
Muitas pessoas podem estar numa situação como esta que irei descrever aqui:
- Trabalham numa empresa onde o número de funcionários é relativamente alto (> 5 utilizadores de internet já é um bom número) e todos tem endereços de e-mail, recebem e enviam mensagens o dia todo.
- Tem algumas unidades de Windows espalhados pela rede toda, vulneráveis _sempre_ às praguinhas virtuais.
- São administradores, técnicos ou analistas, preocupados com a segurança e integridade dos dados de sua rede.
Para essas pessoas, aqui vão minhas recomendações:
1) Bloquear todos os webmails conhecidos do mercado. Ou pelo menos certificar-se de que o webmail que o funcionário tenha acesso possua anti-vírus e anti-spam.
Isto pode ser feito facilmente com “ACL’s” no Squid. Se você usar um proxy transparente, tem também a opção de cortar a conexão com os webmails logo no iptables.
Aqui vai uma ACL fácil de se fazer no Squid:
acl webmails url_regex hotmail webmail mail
// Cuidado ! Esta acl irá bloquear todos os endereços que tenham as expressões citadas, como “hotmail”.. isso pode gerar efeitos colaterais desagradáveis. Este é apenas um exemplo para ilustrar o poder das ACL’s.
Se você não puder, ou não quiser bloquear webmails, temos a opção de instalar o viralator no Squid, para ele checar com o antivirus instalado no seu servidor local, todos os arquivos .exe .zip (entre outros) antes de permitir que o usuário os baixe. Mais detalhes sobre o Viralator em uma próxima matéria.
2) Usar o fetchmail para buscar nos webmails dos funcionários as mensagens, e servi-las a eles pelo POP local.
Esta saída tem o lado negativo deles terem de fornecer o login e senha deles, para o fetchmail conseguir baixar as mensagens.
Na verdade cada usuário pode ter seu arquivo .fetchmail, que fica em seu home directory, e dessa forma você não precisaria saber da senha dele, anulando o lado negativo que citei acima. De qualquer forma, você como root vai poder ler o arquivo depois. Mas é só não contar a eles que você tem essa possibilidade, ou não fazer isto de fato. Infringir os direitos à privacidade alheia é feio
Se você quiser fazer um único arquivo para todas as contas POP dos funcionários, crie um arquivo .fetchmailrc que contenha todas as informações de exemplo:
poll pop3.gmail.com with protocol pop3:
user ‘xxxxx’ there with password ‘xxxx’ is ‘xxxx’ here
Explicação : O comando “poll” significa algo como “ir buscar as mensagens”, seguido pelo endereço do servidor e o protocolo.
Logo a seguir temos “user xxxxx”, que representa o usuário no servidor de webmails. “with password xxxx” representa a senha da conta do usuário, e o “xxxx here”, nome LOCAL do usuario, no seu servidor Linux..
Feito isso, execute o comando :
/usr/bin/fetchmail -f /root/.fetchmailrc -a -s -K -F
Ou coloque-o em sua crontab (altamente recomendado), e assim você sempre terá as mensagens baixadas para o seu servidor.
O fetchmail precisa de um MTA (Mail Transport Agent) que pode ser o Sendmail, Postfix, QMAIL ou outros. No meu caso, estou usando o Postfix + MailScanner, que é uma combinação que deu muito certo no meu caso, apesar de ser meio pesada.
Quando seu servidor baixar as mensagens do POP remoto, ele irá colocá-las dentro da mailbox (ou maildir) do usuário, inicializando uma conexão SMTP de dentro para dentro, ou seja, de uma interface ethX para outra, e nessa hora a mensagem seria escaneada pelo seu ClamAV, já pré-configurado.
Um esboço de como a coisa toda funciona:
O usuario foo tem uma conta no Gmail, e o meu servidor local (Debian) irá, pelo fetchmail. buscar as mensagens no servidor pop3 deles.
Quando ele terminar de baixar, antes do conteúdo ir para a mailbox local do foo, meu servidor escanearia tudo em busca de conteúdo malicioso (por intermédio do MailScanner / ClamAV) e só entregaria de fato as mensagens que estiverem limpas.
Leia a segunda parte deste mini-tutorial clicando no link a seguir:
http://www.lsmod.net/2008/09/clamav-mailscanner-e-o-mta/
Da estagnação do conhecimento
Vivemos num mundo dinâmico, onde o conhecimento de hoje é substituído rapidamente por novos, amanhã.
De certa forma, é natural que assim seja. Temos novidades a todo instante, e para inventá-las, suportá-las e até mesmo usá-las, precisamos aprender e aprender.
Com a aparição de máquinas em empresas, o mundo foi forçado a se melhor qualificar, pois a mão de obra responsável por tarefas mecânicas e simples foi rapidamente substituída pelas primeiras. Continuaria empregado quem pudesse agir noutro setor ainda não invadido por robôs que nunca param, não reclamam nem comem, e não exigem décimo terceiro salário.
Esta é mais uma razão para a humanidade buscar o conhecimento contínuo, um aprendizado sem fim. Cursos de especialização, horas e horas de leitura e exercício de novas atividades mais complexas, tudo para sempre estar afiado e no topo de uma cadeia intelectual injusta, que favorece quem tem tempo e dinheiro para se manter por lá.
É aí que começa nosso problema: Quando finalmente nos encontramos com razoável proficiência em algum conhecimento, quase sempre objetivando um emprego para poder sustentar a si mesmo e a família, somos chamados para iniciar as atividades em diversos tipos de empresa.
O primeiro tipo, comum no Brasil, é o de empresa pequena, onde todos precisam se virar muito pois o time é pequeno, assim como a verba. A copeira acaba limpando a pia, o vendedor quebra o galho comprando e o analista de sistemas administra a passagem do cabeamento novo pra sala do chefe. Ruim ? Nem tanto.
Existe um ponto forte nesse modelo de trabalho, que é justamente oposto ao problema citado no título desta mensagem. A estagnação do conhecimento.
Pensando agora num outro modelo, de empresas multinacionais, geralmente inchadas e estáticas. Muita gente fazendo bastante serviço, áreas específicas para suprir necessidades específicas. Dezenas de funcionários por setor, quase ninguém se conhece muito bem pois a distância e o volume de trabalho atrapalham.
Neste modelo existe o que chamei de estagnação de conhecimento.
Todo o trabalho de certificar-se em diversas tecnologias vai por água abaixo nessa hora. Em sua admissão você negocia um bom salário graças a elas, mas em seguida acontece a regressão contínua e você simplesmente deixa de utilizar seus conhecimentos porque foi contratado para limpar vasos sanitários, não para lavar louça.
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.




