MShield:Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR
como requisito parcial para obtenção do título de Tecnólogo
em Informática.
Curitiba2007
Rodrigo Polesso
MShield:Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR
como requisito parcial para obtenção do título de Tecnólogo
em Informática.
Orientadora:Professora MSc. Ana Cristina Barreiras Kochem Vendramin
Curitiba2007
MShield:Sistema de Segurança Linux para Usuário Final
Trabalho de Conclusão de Curso apresentado à UTFPR como requisito parcial para obtenção do título de Tecnólogo em Informática.
Data de Aprovação:____/____/______
Banca Examinadora:
___________________Profª MSc. Ana Cristina Barreiras Kochem Vendramin(Orientadora)UTFPR-DAINF
___________________Prof. Paulo Bordin UTFPR-DAINF
___________________Prof. Christian Carlos Souza MendesUTFPR-DAINF
___________________Profª Drª Gilda Maria Souza Friedlaender(Coordenadora de Trabalho de Conclusão de Curso)UTFPR-DAINF
Curitiba2007
"A potência intelectual de um homem
se mede pela dose de humor que ele
é capaz de usar."
(Nietzsche)
AGRADECIMENTOS
Agradeço a todos que contribuíram direta ou indiretamente para que este trabalho
fosse desenvolvido. Especial agradecimento a minha família pelo apoio em todos
momentos da minha vida, a professora Ana Cristina Kochem Vendramin pela orientação,
contribuição, cobrança e correção do trabalho, ao Tiago Almeida Barboza de Souza pelas
dicas de openoffice e ao Tiago Salem Herrmann pela ajuda de sempre em Bash, etc.
Agradeço também a comunidade do Software Livre pelo desenvolvimento das
ferramentas usadas como base para este trabalho.
SUMÁRIO
1 INTRODUÇÃO...................................................................................................................................121.1 Objetivo.........................................................................................................................................141.2 Trabalhos Relacionados................................................................................................................141.3 Estrutura do documento................................................................................................................15
2 ANÁLISE DO SISTEMA....................................................................................................................162.1 Diagrama de Contexto..................................................................................................................162.2 Diagrama de fluxo de dados - Nível 1..........................................................................................162.3 Diagrama de fluxo de dados - Nível 2..........................................................................................17
3 FERRAMENTAS................................................................................................................................183.1 Iptables .........................................................................................................................................183.2 Snort..............................................................................................................................................183.3 Snort_inline...................................................................................................................................193.4 Oinkmaster....................................................................................................................................203.5 Rrdtools.........................................................................................................................................203.6 Pmgraph........................................................................................................................................203.7 Ipqueue..........................................................................................................................................21
4 O SISTEMA DE SEGURANÇA MSHIELD.....................................................................................224.1 Instalação e Configuração............................................................................................................224.3 Integração......................................................................................................................................264.4 Funcionamento.............................................................................................................................274.5 Relatório........................................................................................................................................294.6 Telas do sistema............................................................................................................................30
5 ANÁLISE DE DESEMPENHO...........................................................................................................415.1 Memória........................................................................................................................................415.2 Processador...................................................................................................................................42
6 CONCLUSÃO E TRABALHOS FUTUROS......................................................................................44REFERÊNCIAS......................................................................................................................................45APÊNDICE A – Script de Instalação (Instala).......................................................................................47APÊNDICE B – Script de Biblioteca (library).......................................................................................53APÊNDICE C – Script do Oinkmaster (oinkmaster_update).................................................................64APÊNDICE D – Script de Utilização (mshield).....................................................................................66APÊNDICE E – Script de Inicialização (rc.mshield).............................................................................75APÊNDICE F – Script auxiliar de relatório (report)..............................................................................77
LISTA DE FIGURAS
Figura 1. Diagrama de Contexto.............................................................................................................16Figura 2. Diagrama de fluxo de dados nível 1........................................................................................17Figura 3. Diagrama de fluxo de dados nível 2........................................................................................17Figura 4. Script de download de pacotes (parte 1)..................................................................................23Figura 5. Script de download de pacotes (parte 2)..................................................................................24Figura 6. Script de download de pacotes (parte 3)..................................................................................25Figura 7. Script de download de pacotes (parte 4)..................................................................................26Figura 8. Script de download de pacotes (parte 5)..................................................................................26Figura 9. Funcionamento geral do sistema.............................................................................................28Figura 10. Tela inicial do relatório..........................................................................................................29Figura 11. Segunda tela do relatório.......................................................................................................30Figura 12. Apresentação..........................................................................................................................31Figura 13. Instalação Seleção..................................................................................................................32Figura 14. Lista de pacotes .....................................................................................................................32Figura 15. Progresso de Download.........................................................................................................33Figura 16. Download de pacote concluído..............................................................................................33Figura 17. Finalização de download.......................................................................................................34Figura 18. Descompactação concluída....................................................................................................34Figura 19. Compilação de pacotes..........................................................................................................35Figura 20. Compilação concluída............................................................................................................35Figura 21. Download de regras...............................................................................................................36Figura 22. Tela final de instalação..........................................................................................................37Figura 23. Menu principal mshield.........................................................................................................38Figura 24. Tela de personalização...........................................................................................................38Figura 25. Tela de bloqueio de porta.......................................................................................................39Figura 26. Tela de parar...........................................................................................................................39Figura 27. Tela de parada de execução automática................................................................................40Figura 28. Consumo de memória............................................................................................................41Figura 29. Gráfico de processamento 1...................................................................................................42Figura 30. Gráfico de processamento 2...................................................................................................42
LISTA DE SIGLAS
API Application Programming Interface
BASH Bourne Again Shell
BSD Berkeley Software Distribution
HTML Hypertext Markup Language
IDS Intrusion Detection System
IP Internet Protocol
IPS Intrusion Protection System
MSHIELD Mighty Shield
NAT Net Address Translate
QoS Quality of Service
TCP Transmission Control Protocol
UDP User Datagram Protocol
RESUMO
A popularização do computador pessoal não é mais novidade nos dias de hoje.
Esta popularização trouxe consigo também a difusão de novas alternativas para o uso do
micro-computador, a exemplo podemos citar o sistema operacional Linux. Em uma
espécie de simbiose cibernética os computadores e os hackers sempre estiveram e estão
juntos, logo, o problema da segurança em computadores é um problema que atinge todo
tipo de usuário A solução apresentada neste trabalho visa beneficiar o usuário final Linux
com um sistema completo de segurança baseado nas mais atuais tecnologias de
proteção e de fácil instalação e funcionamento. Na área de segurança em redes de
computadores já é difundido o termo IDS (Intrusion Detection System). O que este
trabalha apresenta é uma solução pró-ativa, um IPS (Intrusion Protection System) que
não só detecta uma tentativa de intrusão como também a bloqueia trazendo, desta forma,
uma verdadeira proteção contra hackers e ataques remotos.
Palavras-chave: Segurança em computadores, IDS, IPS, iptables, snort.
ABSTRACT
The popularization of the personal computer is not any news nowadays. This
popularization brought within new alternatives for the use of the computer, as an example:
the Operational System Linux. In a kind of cybernetic symbiosis the computers and the
hackers always have been together, thus the security matter in computers systems
reaches all users. The solution presented in this project aims to benefit the Linux user with
a complete security system based on a set of cutting edge technologies available and that
is easy install and get running. The Intrusion Detection System (IDS) is a well known but
this project presents a pro-active solution: an Intrusion Protection System (IPS), a system
that detects and avoid an intrusion attempt, so we can have a real protection against
hackers and remote attacks.
keywords: Computer Security , IDS, IPS, iptables, snort.
12
1 INTRODUÇÃO
O nascimento da Internet se deu no ano de 1969 com a ARPANET,
rede de propósitos militares (WIKIPEDIA, 2007). Com o passar de poucos
anos a comunicação entre computadores veio se tornando cada vez mais
popular, começando com as universidades e depois se estendendo a
empresas até chegar ao usuário final.
Junto com a popularização da comunicação remota entre
computadores, assim como a Internet, cresceu também o número de
pessoas especialistas e entusiastas desse sistema. A Internet, ainda em sua
idade tenra, funcionava sobre sistemas que não tinham como prioridade a
segurança dos mesmos, mas sim a funcionalidade. Neste contexto foram
surgindo os, hoje tão conhecidos, hackers, crackers e afins. Pessoas
experientes e de bom conhecimento nesses sistemas que faziam uso destes
explorando-os de forma a obter benefício próprio, seja roubo de informações,
diversão, etc.
O problema de segurança então se torna algo real e preocupante. As
empresas e usuários começaram a atentar para o fato e a tomar atitudes a
fim de se proteger.
Uma série de ferramentas e estratégias de proteção começam a ser
desenvolvidas e difundidas, muitas destas vigentes até hoje. Dentre elas, as
mais conhecidas, podemos citar:
• Firewall: Tem como objetivo bloquear acessos remotos
indevidos a máquina local ou rede. Bastante eficiente. É uma
solução indispensável a qualquer sistema de segurança de
computadores;
• Proxy: Simplificadamente pode ser entendido como um sistema
que restringe acessos internos para a rede externa, como
bloquear o acesso a alguns determinados sites da Internet;
• IDS: Sistema que fica atento a tentativas remotas de invasão ao
sistema de computadores local. Este sistema armazena em
disco todas as tentativas em questão, com hora do incidente,
13
tipo do incidente, etc. É uma maneira eficaz de analisar o que
acontece na rede e tentar se proteger mais adequadamente;
• Anti-Vírus: Talvez o mais famoso no âmbito do usuário final.
Programa que protege a máquina contra outros programas
maliciosos que possam causar danos a máquina;
• Anti-Spyware: Este mais atual que os outros tem como objetivo
proteger a máquina de programas que se instalam e roubam
informações.
Todas estas ferramentas focam em uma área de segurança e provêem
um método para se aumentar a segurança. O firewall pode ser considerado a
forma mais eficiente e, de alguma forma, drástica de proteção. Um firewall
em sua forma tradicional é eficiente por que realmente bloqueia o tráfego
antes mesmo que este chegue de fato ao Sistema Operacional, por outro
lado, drástico porque bloqueia o pacote independente do conteúdo do
mesmo.
Podemos selecionar o IDS como um ótimo detector de tentativas de
intrusão. Isto é algo bastante útil para se conhecer as ameaças que estão de
fato cercando os usuários.
Este trabalho trata de oferecer uma ferramenta integrada que ao
mesmo tempo possui função de firewall e IDS. Desta forma se juntam as
duas melhores tecnologias de proteção em apenas um sistema. Um sistema
que protege de fato o usuário de forma personalizável e gera relatórios de
atividades do sistema, de forma que o usuário fique a par da situação de sua
segurança.
O MShield, devido a sua facilidade de instalação e operação, é a
melhor escolha para um sistema de segurança completo, trazendo o que
antes exigia um conhecimento avançado em Linux e Redes de computadores
ao mundo do usuário. Este sistema é resultado da integração das mais
avançadas tecnologias de segurança em um só sistema utilizável por
qualquer usuário com conhecimentos mínimos de Linux.
14
1.1 Objetivo
Este projeto, dentro do contexto anterior, propõe o desenvolvimento de
uma solução de segurança conhecida como IPS (Intrusion Protection
System). Um IPS é formado por um conjunto de ferramentas que objetivam
ter um comportamento pró-ativo na segurança, ou seja, detectar uma
tentativa de intrusão e no mesmo momento bloqueá-la. Esta é uma solução
bastante recente, com ferramentas ainda em suas versões de
desenvolvimento, portanto, não concluídas totalmente. Também é uma
solução de difícil implementação e funcionamento inicial, porque envolve um
conhecimento avançado de rede de computadores, Linux e programação.
Um IPS envolve um firewall, um IDS e várias ferramentas complementares.
Todas estas ferramentas trabalhando integradas para o propósito final.
O objetivo deste projeto é desenvolver uma solução integrada de um
IPS que possa ser instalado, utilizado e monitorado facilmente por um
usuário leigo de computadores, contornando todas as dificuldades e
particularidades de configuração, instalação e funcionamento e ainda
adicionando personalização de firewall de uma maneira extremamente fácil.
Depois de instalado no computador do usuário, o Mshield proporcionará uma
verdadeira barreira de segurança para a máquina ou rede local.
1.2 Trabalhos Relacionados
Dentre os principais trabalhos relacionados, pode-se citar:
• Guardian: programa de segurança que funciona junto com o
Snort, software com funcionalidade de detector de intrusão,
automaticamente atualizando as regras de firewall baseando-se
nos alertas do Snort. As regras de firewall atualizadas
bloqueiam todo tráfego vindo do IP (Internet Protocol) da
máquina atacante (a máquina que causou os alertas)
(STEVENS, 2007). A desvantagem dessa solução é o fato de
ela bloquear todo tráfego da máquina atacante alem de
atualizar as regras de firewall, ou seja, alterar a tabela de
regras, isso após o pacote intrusivo já ter entrado na rede.
15
Desta forma é possível perceber que a segurança ainda não é
totalmente satisfatória e organizada;
• Fwsnort: funciona em conjunto com o Snort. Lê as regras do
Snort e constrói regras de firewall (iptables) equivalentes a
estas regras (RASH, 2007);
• Snortsam: funciona com base em um plug-in de saída do Snort
e também interage diretamente com o firewall através de um
agente próprio (KNOBBE, 2007);
• Blockit: monitora os alertas do Snort e com base neles cria
regras de firewall (SAMAYOA, 2007).
1.3 Estrutura do documento
O presente documento está organizado em uma estrutura progressiva,
ou seja, primeiro é mostrada a base para o projeto, bem como os conceitos e
ferramentas utilizadas, logo após, mais detalhes sobre o funcionamento e
integração do sistema de modo geral e por fim descrições técnicas
detalhadas do funcionamento dos scripts do MShield.
16
2 ANÁLISE DO SISTEMA
Este capítulo trata de diagramar a estrutura e funcionamento do
MShield. São apresentados os diagramas de Contexto, Fluxo de dados nível
1 e Fluxo de dados nível 2.
2.1 Diagrama de Contexto
A Figura 1 mostra o Diagrama de Contexto do sistema. Uma visão de
seu funcionamento. Os dados provindos da Internet, tanto tráfego TCP
(Transmission Control Protocol) quanto UDP (User Datagram Protocol),
passam através do MShield, portanto, sendo filtrados e seguindo em frente
até o computador, caso satisfaçam as restrições (regras) do sistema.
Figura 1. Diagrama de Contexto
2.2 Diagrama de fluxo de dados - Nível 1
A Figura 2 mostra o Diagrama de Fluxo de Dados nível 1. Os dados
provindos da Internet passam pelo primeiro processo que os filtra (iptables),
ou seja, estes dados vão para a fila criada pelo módulo ip_queue onde
esperam para serem processados. O próximo processo trata efetivamente de
processar os dados de entrada, verificando se satisfazem as restrições, ou
seja, se não apresentam características de possíveis ataques e dados
maliciosos. O processamento dos dados gera outros dados que são usados
para a criação posterior do relatório de atividades.
17
Figura 2. Diagrama de fluxo de dados nível 1
2.3 Diagrama de fluxo de dados - Nível 2
A Figura 3 mostra o Diagrama de Fluxo de Dados nível 2. Após os
dados passarem pelo iptables e em seguida serem enfileirados no ip_queue,
o snort_inline busca nesta fila os dados a serem avaliados (permitidos ou
não). Os que satisfazem as restrições serão direcionados ao computador, os
que não satisfazem serão bloqueados. Toda atividade de bloqueio, entre
outras, são registradas em log. O log serve de base para o pmgraph gerar
relatórios.
Figura 3. Diagrama de fluxo de dados nível 2
18
3 FERRAMENTAS
O presente capítulo fornece uma descrição das ferramentas que
servem como base para o desenvolvimento do MShield.
3.1 Iptables
Netfilter é um módulo que fornece ao sistema operacional Linux, entre
outras, as funções de firewall de rede de computadores. Netfilter é formado
por uma série de ganchos dentro do kernel Linux que permite aos módulos
do kernel registrar funções próprias dentro da pilha de rede do sistema
operacional.
Iptables é o nome da ferramenta que permite a criação de regras de
firewall. Iptables é formado por uma tabela genérica para a definição dos
conjuntos de regras. Cada regra, em conjunto com uma tabela de IP's, forma
um número de classificadores que são ativados executando uma
determinada ação.
Apesar de, tecnicamente, o iptables ser apenas uma ferramenta que
controla o módulo netfilter, o nome "iptables" é frequentemente utilizado
como referência ao conjunto completo de funcionalidades do netfilter. O
iptables é parte de todas as distribuições modernas do Linux (WELTE, 2007).
As principais características do iptables são:
• Todos os tipos de tradução de endereços de rede, exemplo
NAT (Network Address Translation);
• Infra-estrutura flexível e extensível;
• Várias camadas de API's para extensões;
• Grande quantidade de plug-ins e módulos.
O que é possível com o iptables:
• Construir firewalls para internet;
• Utilizar NAT e mascaramento para compartilhar acesso a
internet;
• Controle de QoS (Quality of Service);
• Fazer modificação nos pacotes.
19
3.2 Snort
Snort é o IDS mais conhecido e reconhecido no mundo da informática.
Sua função principal é fazer detecção de intrusão e registrar todas as suas
atividades.
Abaixo alguns conceitos básicos sobre o Snort:
• Sniffer mode, snort lê os pacotes que trafegam na rede e os
mostra na tela do computador em que está instalado;
• Logger mode, arquiva em disco todas as suas atividades;
• NIDS (Network Intrusion Detection System), modo mais
complexo e configurável, permite que o Snort analise o tráfego
da rede procurando por padrões estabelecidos em uma série de
regras pré-definidas e desempenhe várias ações baseado no
que vê;
• Inline mode, obtém pacotes do iptables ao invés de obter da
libpcap (biblioteca para captura de pacotes, na qual o snort se
baseia) e então faz com que o iptables bloqueie ou deixe
passar os pacotes com base nas regras específicas do modo
inline (CASWELL, 2007).
De uma forma geral o Snort funciona da seguinte maneira:
• Quando ativado ele liga o Sniffer mode para que, desta
forma, possa ver todos os pacotes que trafegam na rede sem
intervir na comunicação em si;
• O Snort possui um conjunto de arquivos que contém regras
específicas, regras estas que identificam padrões de ataques
remotos conhecidos. A medida que o Snort analisa o tráfego
da rede, ele verifica se o pacote que está atualmente sendo
analisado bate com alguma regra de seus arquivos. Caso
isso aconteça o Snort lança um alerta e o grava em disco no
arquivo de log. Caso não identifique o pacote atual com
algum padrão, então o próximo pacote é analisado.
Este projeto tira proveito principalmente do Inline mode do Snort
(METACALF, 2007) que será visto a seguir.
20
3.3 Snort_inline
O Snort_inline é basicamente uma versão modificada do Snort que
aceita pacotes vindos do iptables via libipq (biblioteca de funções do módulo
ip_queue do iptables) ao invés da libpcap. Então usa uma série de regras
específicas (drop, sdrop, reject) para dizer ao iptables quais pacotes devem
ser bloqueados, rejeitados, modificados ou permitidos. Simplificadamente é
possível entender o Snort_inline como um IPS que usa as assinaturas
(regras) de um IDS existente para decidir quais pacotes irão passar por ele e
quais não irão (METACALF, 2007).
3.4 Oinkmaster
Oinkmaster é um script que irá ajudar a gerenciar e atualizar as regras
do Snort. O snort disponibiliza para download regras comunitárias
atualizadas de tempos em tempos. Neste projeto o oinkmaster é utilizado
para fazer o download destas regras atualizadas periodicamente.
Para que funcione com o Snort_inline são necessárias algumas
modificações no funcionamento do oinkmaster, as quais, são implementadas
neste projeto (STLING, 2007).
3.5 Rrdtools
As rrdtools são algumas ferramentas auxiliares neste projeto.
Basicamente elas coletam dados e os organizam de forma a facilitar uma
montagem gráfica da situação.
O MShield gera periodicamente dados estatísticos sobre suas
atividades, estes dados posteriormente irão servir de entrada para as rrdtools
e para o pmgraph, o qual será explicado a seguir. Desta forma pode-se, com
alguns ajustes, proporcionar ao usuário final uma forma fácil e prática de
monitorar as atividades de seu novo sistema de segurança. No caso do
presente projeto este monitoramento será feito através de uma página HTML
(Hypertext Markup Language) comum com gráficos (OETIKER, 2007).
21
3.6 Pmgraph
Pmgraph é um script feito em Perl que gera uma página HTML com
gráficos do pré-processador Snort perfmonitor, o qual não é ativado por
padrão na instalação , porém, é ativado pelo MShield. Usa como fonte de
entrada a saída das rrdtools (STLING, 2006).
3.7 Ipqueue
Ipqueue é um modulo específico do iptables, o qual, permite direcionar
dados de entrada do iptables para nível de usuário. Desta forma os dados
capturados pelo iptables são direcionados para uma espécie de fila, a qual,
está disponível para acesso a nível de usuário de sistema. Isso é
fundamental para o funcionamento do MShield. É nesta fila que o MShield irá
verificar os pacotes e decidir se serão permitidos ou se são suspeitos e serão
bloqueados. A libipq possibilita este funcionamento (TOREN, 2007).
22
4 O SISTEMA DE SEGURANÇA MSHIELD
O MShield por sua natureza possibilita uma proteção a máquina local
ou a uma rede inteira. Quando instalado em uma máquina local o MShield irá
funcionar monitorando toda a entrada externa da placa de rede local,
funcionando desta maneira como uma camada posicionada anteriormente à
própria máquina. Todos os dados provenientes da rede externa (por
exemplo, Internet) passarão pelo filtro do MShield antes de serem liberados,
o que garante uma grande segurança ao usuário. Os detalhes de
funcionamento serão tratados na próxima seção
O MShield também pode ser instalado em uma máquina que tem o
papel de gateway de uma rede inteira. Desta forma a rede toda estará atrás
do filtro do MShield, garantindo, portanto, uma barreira de proteção não
somente para a máquina em que esta instalada, mas sim para todas as
máquinas que estão atrás dela.
4.1 Instalação e Configuração
O script principal do sistema é o Instala. Sua versão completa esta
disponível no apêndice A.
Este script é encarregado de instalar, configurar e ajustar o sistema
para uso. Junto com o script Instala existe um outro chamado library. Este
segundo possui as funções usadas no primeiro, para facilitar a organização e
o entendimento.
De modo geral, as seguintes etapas são executadas:
• Download dos pacotes necessários (caso seja selecionada
esta opção);
• Compilação e linkagem dos pacotes;
• Descompactação dos pacotes;
• Ajustes finos como por exemplo, montagem de arquivos de
configuração, diretórios, etc.
Abaixo estão explicadas algumas das principais partes dos scripts
acima mencionados.
A Figura 4 ilustra a função de download dos pacotes, a exemplo, o
23
snort. O download é feito através do wget, o qual é um aplicativo bastante
conhecido de download de arquivos. O código toma o cuidado de fazer este
download de forma limpa e transparente para o usuário. O trecho de codigo li
faz com que hajam duas tentativas de download do pacote. O wget fica
tentando estabelecer uma conexão durante vinte segundos antes de acusar
uma falha de uma tentativa. Durante todo o tempo de download o trecho
verifica quantos bytes do pacote já foram baixados para o disco local e
mostra um status gráfico para o usuário. Em caso de download concluído
uma mensagem é mostrada. Em caso de erro, será mostrada uma
mensagem explicando o erro ocorrido.
wget -q --tries=2 -T 20 http://heanet.dl.sourceforge.net/sourceforge/snort-
inline/$SNORT.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na funcao Rodando
Aguarda_inicio_download $SNORT.tar.gz
Download $SNORT.tar.gz 2905172
Erro "Não foi possível fazer download do Snort, verificar o link de download no arquivo
./Instala"
Figura 4. Script de download de pacotes (parte 1)
A Figura 5 ilustra a parte do script referente à compilação dos pacotes
recém baixados ou dos pacotes locais, dependendo da opção escolhida pelo
usuário na instalação. Os pacotes referentes ao pcre, libdnet, pmgraph e
rrdtools podem ser compilados sem necessidade de nenhum ajuste fino. O
trecho de codigo acima toma cuidado de criar, para cada pacote, um arquivo
de log que registra o status de cada etapa da compilação. Ao final, este
arquivo é verificado e em caso de algum indício de erro na compilação, o
script automaticamente avisa o usuário a respeito do ocorrido.
24
function Faz_compilacao {
for i in $LIBDNET $PCRE $LIBPCAP $PMGRAPH $RRDTOOLS
do
dialog \
--title "Compilando $i" \
--infobox \
"Por favor aguarde\n" 0 0
cd $i
./configure > $i.log 2>&1 ; make >> $i.log 2>&1 ; make install >> $i.log 2>&1
cat $i.log | egrep -i "\berror\b" 2>&1
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $i"
fi
cd ..
done
Figura 5. Script de download de pacotes (parte 2)
A Figura 6 ilustra a linha de compilação do snort_inline. Ele é
compilado separadamente por precisar de um ajuste fino. É necessário ativar
o parâmetro –enable-perfmon antes da compilação. Este parâmetro ativa um
pré-processador do snort que possibilita fazer log, em um arquivo específico,
de todas as suas atividades, desta forma é possível utilizar este arquivo
criado como fonte para a geração do relatório.
O iptables também necessita de ajustes finos. Sua linha de compilação
difere um pouco do tradicional por ser da forma: make install-devel. Esta
diretiva proporciona uma instalação mais completa do mesmo. Outros ajustes
menores também foram necessários.
Ajustes também são necessários para o pmgraph. É necessário
adicionar o caminho correto para o Perl dentro do diretório em que foi
instalado o rrdtools. Por se tratar de um script Perl, o pmgraph não precisa
ser compilado. Este script foi modificado e encontra-se dentro da pasta
./contrib. Todos os ajustes mencionados e outros estão contidos e indicados
nos scripts de instalação (ver apêndice A).
25
./configure --enable-perfmon > $SNORT.log 2>&1 ; make >> $SNORT.log 2>&1 ; make install
>> $SNORT.log 2>&1
Figura 6. Script de download de pacotes (parte 3)
A Figura 7 ilustra uma parte do script que faz mais ajustes ao
snort_inline, de maneira a configurá-lo de forma necessária. Primeiramente, é
criado o diretório de relatório, onde estarão contidos os relatórios gerados
pelo MShield. Logo após, são copiados alguns arquivos essenciais para o
funcionamento correto do snort_inline. Em seguida é incluída uma linha
específica de pré-processador ao arquivo de configuração do snort_inline.
Essa linha é essencial para o funcionamento do pré-processador perfmonitor,
o qual, possibilitará a geração dos relatórios. Dando continuidade, é criado
um arquivo de regras local.rules dentro do diretório de regras. Este arquivo
irá conter todas as regras personalizadas pelo usuário Por fim uma linha
inserindo a definição da variável DNS_SERVERS dentro do arquivo de
configuração, esta modificação é essencial para o funcionamento do
snort_inline.
O oinkmaster necessita também de ajustes finos, estes estão
indicados nos scripts. A Figura 8 mostra o trecho do script encarregado do
download das regras mais atualizadas disponíveis no web-site oficial do
Snort, desta forma populando o diretório de regras. Uma série de ajustes
especiais são necessários para tornar estas regras compatíveis com o
MShield e com as atualizações automáticas. Todas estas modificações estão
indicados nos scripts dos apêndices A e D.
26
# Prepara Snort_inline
mkdir -p /etc/snort_inline/drop-rules
mkdir -p /var/log/snort_inline
mkdir -p /etc/snort_inline/relatório
cp ./$SNORT/etc/clas* /etc/snort_inline/drop-rules
cp ./$SNORT/etc/refe* /etc/snort_inline/drop-rules
cp ./$SNORT/etc/unicode.map /etc/snort_inline/unicode.map
cp ./contrib/oinkmaster_update /etc/snort_inline/
# Ajusta snort para que comece a fazer log de atividades no arquivo perfmon.txt, para
que possa ser
# gerado o relatório posteriormente
if [ -f /etc/snort_inline/snort_inline.conf ]; then
rm /etc/snort_inline/snort_inline.conf
fi
echo 'preprocessor perfmonitor: flow max events time 30 file
/etc/snort_inline/perfmon.txt pktcnt 300' >> /etc/snort_inline/snort_inline.conf
cat ./$SNORT/etc/snort_inline.conf >> /etc/snort_inline/snort_inline.conf
# Cria o arquivo de regras personalizadas
touch $RULE_PATH/local.rules
# Inclui variavel DNS_SERVERS, necessaria para algumas rules
echo 'var DNS_SERVERS any' >> /etc/snort_inline/snort_inline.conf
Figura 7. Script de download de pacotes (parte 4)
Oinkmaster.pl -o /etc/snort_inline/drop-rules > /dev/null 2>&1
Figura 8. Script de download de pacotes (parte 5)
4.3 Integração
Em linhas gerais o funcionamento e integração das ferramentas
empregadas neste projeto se dão da seguinte forma:
O iptables terá configurado uma regra específica, a qual, terá a função
de direcionar todos os dados provindos da rede externa e direcioná-los à fila
(provida pelo ipqueue). O snort_inline, por sua vez, irá coletar e analisar
todos os pacotes de dados que estão nesta fila. Com base em suas regras
de reconhecimento de ataques, o snort_inline irá decidir se certo pacote será
bloqueado ou será permitido passar adiante. Durante toda sua atividade o
snort_inline segue gerando em disco dados estatísticos, estes provindos do
pré-processador perfmon (ativado em tempo de compilação). Este arquivo, o
qual contém estes dados, serve de fonte de entrada para o pmgraph que
27
utiliza-se de meios providos pelas rrdtools para manipulação dos mesmos e
geração de gráficos em uma página HTML, a qual poderá ser analisada pelo
usuário.
Este processo todo possui diversas particularidades que possibilitam a
sintonia dos processos. Todos estes detalhes serão tratados na seção
seguinte onde será analisado o funcionamento interno do script de
instalação.
4.4 Funcionamento
O objetivo do MShield é trazer para o usuário um sistema de
segurança integrado e moderno que seja de fácil instalação e manuseio.
Para tornar isso possível é necessário fazer todas as configurações,
compilações, instalações e alterações de modo automático e transparente,
trazendo uma interface amigável onde o usuário possa prosseguir com o
processo de instalação e manuseio do sistema.
Neste contexto estão inseridos os scripts de instalação e de
gerenciamento que serão tratados com mais detalhes na próxima seção. Os
scripts do MShield são todos desenvolvidos em BASH, portanto, compatíveis
com a absoluta maioria dos sistemas Linux existentes.
Recém descompactado, o diretório do MShield contém:
• Um script de instalação (Instala), um script de utilização
(mshield) e um script de biblioteca de funções library;
• Um diretório ./contrib, no qual, estão contidos quatro scripts, um
deles será para auxiliar no agendamento de atualização das
regras (oinkmaster_update), outro auxiliar para iniciar e parar o
sistema (rc.mshield). O próximo script auxiliar para geração de
relatórios (report) e finalmente o pmgraph.pl, script para criação
de relatórios efetivamente;
• Um arquivo README que contém instruções básicas sobre a
instalação e funcionamento do MShield;
Os scripts oinkmaster_update, rc.mshield, Instala, library e report estão
disponíveis integralmente nos apêndices C, E, A, B, F respectivamente.
28
Tudo que o usuário precisa fazer para instalar e configurar e sistema é
executar o script de instalação. Este script irá automatizar todo o processo de
download das bibliotecas e softwares necessários, compilação fina de todos
os pacotes, instalação dos mesmo e ajustes pós instalação. O usuário irá
acompanhar todo o processo através de uma interface gráfica de fácil
entendimento.
Após o término do script de instalação o usuário poderá fazer uso do
script de funcionamento (mshield). Este script quando executado traz uma
interface gráfica intuitiva que permite ao usuário personalizar as regras do
MShield de maneira muito simplificada, por exemplo: bloquear uma porta
específica e desbloqueá-la. Também permite ao usuário gerar o relatório de
atividades do sistema, este que pode ser visualizado no navegador, por se
tratar de uma pagina HTML normal contendo gráficos ilustrativos e
estatísticos que demonstram o comportamento e atividades do sistema nos
últimos dias de funcionamento.
A Figura 9 ilustra em uma visão generalista onde se encontra o
MShield em uma visão global de funcionamento. O iptables faz parte da
solução MShield. Na figura esta separado apenas para efeito de melhor
entendimento. Os dados passam primeiramente pelo iptables, logo após,
este direciona todos dados para uma fila que serve de entrada para o
MShield.
Figura 9. Funcionamento geral do sistema
29
4.5 Relatório
O MShield gera um relatório HTML periódico contendo informações
úteis sobre sua atividade. Para gerar o relatório das últimas doze horas de
atividade basta o usuário executar o comando "mshield" (script disponível
integralmente no apêndice D) e selecionar a opção “Relatório”. Com base
nele, o usuário pode verificar as atividades do sistema, bem como saber se
esta sendo alvo de hackers ou não
A Figura 10 apresenta o formato de relatório gráfico gerado pelo
Mshield.
Figura 10. Tela inicial do relatório
A primeira página do relatório é bastante direta e mostra o número de
bloqueios efetuados pelo MShield. Com esta informação o usuário sabe sua
exposição ao risco de ataques externos.
Para um relatório mais completo, com mais detalhes que possam ser
úteis a usuários mais avançados, é possível clicar no link indicado logo
abaixo do número de bloqueios. A Figura 11 ilustra um exemplo de tela que
irá aparecer neste caso.
30
Figura 11. Segunda tela do relatório
Na tela acima foram mostrados apenas três campos de análise.
• Alerts per second: número de alertas por segundo, emitidos pelo
snort_inline;
• Mbit per second: mostra a intensidade do tráfego em Mbits na
rede;
• Kpackets per second: quantidade de pacotes que trafegam na
rede em Kpackets.
Na tela acima ainda é possível clicar sobre cada campo para obter
uma imagem com zoom, ou seja, cobrindo um intervalo menor de tempo.
Os gráficos apresentados dependem muito da quantidade de dados
recolhidos pelo sistema, ou seja, do tráfego na rede, quantidade de
computadores, tempo de análise, etc.
4.6 Telas do sistema
O MShield é composto por dois scripts principais e dois scripts
auxiliares. Abaixo as principais telas do script de instalação do sistema.
A Figura 12 mostra a primeira tela de instalação e uma listagem dos
passos gerais que devem ser seguidos.
31
Figura 12. Apresentação
A Figura 13 permite ao usuário escolher entre uma instalação local ou
via Internet. No caso da instalação via Internet o instalador irá fazer o
download de todos pacotes necessários para o sistema e, em seguida,
prosseguirá normalmente. Esta opção é bastante vantajosa, uma vez que o
tamanho dos arquivos de instalação são bastante reduzidos. Caso a opção
de instalação local seja selecionada, o usuário precisará possuir no diretório
local todos os pacotes necessários para a instalação. Esta forma garante um
processo mais rápido, porém, o tamanho do arquivo de instalação do sistema
será bastante grande.
32
Figura 13. Instalação Seleção
A Figura 14 é mostrada caso o método de instalação selecionado
tenha sido via Internet. Esta tela mostra uma listagem de todos os pacotes
que serão feito download.
Figura 14. Lista de pacotes
A Figura 15 mostra a etapa de download dos pacotes. Este conjunto
de telas mantém o usuário informado sobre o progresso do download dos
pacotes.
33
Figura 15. Progresso de Download
A Figura 16 mostra um exemplo de tela que indica o termino do
download de cada pacote.
Figura 16. Download de pacote concluído
A Figura 17 mostra a indicação de finalização do processo de
download de todos os pacotes necessários. Caso o usuário queira prosseguir
com a instalação do sistema ele irá selecionar Yes, caso contrário, No. A
34
próxima etapa será a de descompactação e compilação de todos os pacotes.
Figura 17. Finalização de download
A Figura 18 mostra que o processo de descompactação dos pacotes
no diretório local foi concluído com sucesso.
Figura 18. Descompactação concluída
A Figura 19 mantém o usuário informado sobre o processo de
compilação de cada pacote. Esta etapa pode ser a mais demorada de todo
35
processo. É importante citar que alguns pacotes precisam de ajustes
especiais para sua compilação. Estes detalhes serão tratados na explicação
detalhada dos scripts nos apêndices A e D.
Figura 19. Compilação de pacotes
A Figura 20 indica o término do processo de compilação dos pacotes.
A seguir será executada uma série de ajustes bastante importantes para o
funcionamento do sistema.
Figura 20. Compilação concluída
36
A Figura 21 mostra a etapa de download das regras de proteção mais
atualizadas. Esta é uma forma de manter o Mshield sempre atualizado com o
conjunto mais atual de regras oficiais do Snort. Todo o mês o Mshield agenda
uma atualização destas regras para ser executada automaticamente.
Figura 21. Download de regras
A Figura 22 mostra a tela final do processo de instalação. Todo o
sistema foi instalado e configurado automaticamente. Para a operação do
mesmo, basta agora o usuário executar o comando “mshield”, o qual, já foi
automaticamente adicionado ao PATH do sistema.
37
Figura 22. Tela final de instalação
Abaixo são mostradas telas principais do script de utilização do
MShield (o comando, “mshield”).
A Figura 23 mostra o menu principal de utilização do MShield. Nele é
possível selecionar a função “Personalizar”, onde o usuário pode bloquear e
desbloquear portas específicas para aumentar sua segurança de acordo com
a necessidade. Pode também selecionar a opção “Relatório”, onde será
gerado imediatamente um relatório HTML que contém informações sobre as
atividades do MShield. Selecionar “Parar” para efetivamente terminar o
MShield e voltar o sistema a sua configuração normal, sem esta camada
adicional de proteção. Selecionar “Inicia” para efetivamente colocar o
MShield em funcionamento. “Sair”, como o nome já diz, apenas sai do
assistente.
38
Figura 23. Menu principal mshield
A Figura 24 mostra a tela apresentada ao usuário quando a opção
“Personalizar” do menu principal é selecionada. Nesta parte é possível
selecionar BloquearIN, desta forma o usuário bloqueia acesso externo a
alguma porta específica no computador ou na rede local. BloquearOUT
permite bloquear acesso de qualquer computador interno ou o computador
local a alguma porta externa específica. Selecionar “Desbloquear” para, de
fato, desbloquear portas anteriormente bloqueadas pelo usuário.
Figura 24. Tela de personalização
39
Abaixo a Figura 25 apenas mostra a tela onde o usuário digitará a
porta que será bloqueada pelo sistema.
Figura 25. Tela de bloqueio de porta
A Figura 26 mostra a tela apresentada quando a opção “Parar” é
selecionada no menu principal. É apenas uma tela de confirmação.
Figura 26. Tela de parar
40
A Figura 27 mostra a mensagem apresentada após a confirmação de
parada do sistema. É possível também fazer com que o sistema pare de ser
executado automaticamente ao iniciar-se a máquina. Uma tela semelhante é
apresentada quando o inicio do MShield é confirmado, possibilitando habilitar
sua execução automática junto com boot da máquina.
Figura 27. Tela de parada de execução automática
41
5 ANÁLISE DE DESEMPENHO
Neste capítulo serão apresentados alguns testes de desempenho
executados com o MShield. Será demonstrado o impacto do uso do MShield
na performance da máquina, bem como, no consumo de recursos da mesma.
Os testes foram executados com o MShield instalado em uma máquina
gateway de uma outra máquina da rede interna.
O sistema de teste possui a seguinte configuração básica:
• Processador Intel Pentium 4 2.53 Ghz;
• 512 MB de memoria RAM DDR 266.
5.1 Memória
Durante os testes de processamento, o consumo de memória também
foi analisado. O MShield manteve um consumo considerado praticamente
constante.
No caso da máquina de teste, o consumo de memoria sempre esteve
dentro da faixa de 2.7% a 3% da memória física total, o que equivale a faixa
de 13824 KB a 15360 KB de memória RAM. A Figura 28 ilustra o consumo
de memória.
Figura 28. Consumo de memória
0 5 10 15 20 25 30 35 40 45 50 55 60
0
0.25
0.5
0.75
1
1.25
1.5
1.75
2
2.25
2.5
2.75
3
segundos
% d
e us
o d
e m
emór
ia
42
5.2 Processador
A Figura 29 e a Figura 30 mostram o processamento do MShield.
A Figura 29 mostra o desempenho (em porcentagem) do MShield
durante o carregamento de seis páginas web simultaneamente durante o
período de um minuto.
Figura 29. Gráfico de processamento 1
O gráfico mostra que o MShield exige muito pouco do processador
para funcionar, portanto, não impacta o desempenho do computador em que
está instalado.
A Figura 30 mostra o desempenho do MShield durante o download de
um arquivo de testes a uma velocidade de 300 KB/s, durante um minuto.
Figura 30. Gráfico de processamento 2
43
Um download a uma velocidade considerável foi feito (300 KB/s) e de
mesma forma, como mostra o gráfico, o MShield não consome significante
poder de processamento da máquina.
Com base nas análises feitas fica evidente que o uso do MShield em
um único computador ou até mesmo em uma rede local não prejudica em
nada o uso normal da máquina.
44
6 CONCLUSÃO E TRABALHOS FUTUROS
Com o MShield, um novo conceito de segurança é trazido ao alcance
do usuário final Linux. O sistema foi desenvolvido com sucesso. Foi possível
tornar todo o processo de instalação e uso bastante intuitivo, de acordo com
o propósito original.
As maiores dificuldades no desenvolvimento do sistema consistiram no
uso do snort_inline, pois, necessitou de vários testes e várias configurações
extras que, muitas vezes, não estavam nem mesmo documentadas. A
integração dos softwares empregados na solução também se configurou um
desafio para que funcionassem em harmonia.
O MShield está, portanto, disponível e seu uso proporciona segurança
tanto a uma única máquina como, de mesma forma, para uma rede local
inteira que esteja subordinada a um servidor que tenha o sistema instalado.
Como trabalho futuro se propõe estender a compatibilidade para
outras distribuições Linux e até mesmo para sistemas BSD's (Berkeley
Software Distribution) (freeBSD, openBSD, etc). Também sugere-se o
aumento de personalizações do sistema, feitas pelo usuário. Para tanto seria
necessário um estudo de campo abordando os maiores anseios desses
usuários no que se diz respeito a um sistema de segurança computacional.
45
REFERÊNCIAS
CASWELL, Brian; HEWLETT, Jeremy. Snort User Manual. Disponível em
<www.snort.org/docs>. Acesso em 28 jan 2007.
KNOBBE, Frank. Snortsam. Disponível em <http://www.snortsam.net/>.
Acesso em 08 fev 2007.
METCALF, William; JULIEN, Victor. Snort_inline. Disponível em
<http://snort-inline.sourceforge.net/>. Acesso em 28 jan 2007.
OETIKER, Tobias. RRDtools. Disponível em <http://oss.oetiker.ch/rrdtool/>.
Acesso em 28 jan. 2007.
RASH, Michael. Fwsnort. Disponível em
<http://www.cipherdyne.com/fwsnort/>. Acesso em 08 fev 2007
SAMAYOA, Hugo. Block it. Disponível em <http://www.teknofx.com/>.
Acesso em 08 fev 2007.
STEVENS, Anthony. Guardian. Disponível em
<http://www.chaotic.org/guardian/>. Acesso em 27 jan. 2007.
STLING, Andreas. Oinkmaster. Disponível em
<http://oinkmaster.sourceforge.net/>. Acesso em 08 fev 2007.
STLING, Andreas. Pmgraph. Disponível em
<http://people.su.se/~andreaso/perfmon-graph/>. Acesso em 28 nov 2006.
TOREN, Michael C. Ip_queue. Disponível em
<http://michael.toren.net/slides/ipqueue/slide001.html>. Acesso em 28 jan
2007.
46
WELTE, Harald. Iptables. Disponível em <http://www.iptables.org/>. Acesso
em 27 jan. 2007.
WIKIPEDIA. Internet. Disponível em <http://pt.wikipedia.org/wiki/Internet>.
Acesso em 27 jan. 2007.
47
APÊNDICE A – Script de Instalação (Instala)
#!/bin/bash
# Caso utilize PROXY na rede, setar a variavel http_proxy
# exemple= export http_proxy=endereco.do.proxy:porta
IPTABLES="iptables-1.3.5"
LIBDNET="libdnet-1.11"
PCRE="pcre-6.3"
SNORT="snort_inline-2.4.4-final"
LIBPCAP="libpcap-0.9.4"
OINKMASTER="oinkmaster-2.0"
PMGRAPH="pmgraph-0.2"
RRDTOOLS="rrdtool-1.2.16"
clear
##
## inclui as funcoes que serao usadas neste arquivo.
##
source library
##
## Mensagem de apresentacao do sistema (Msg inicial do instalador)
##
dialog \
--title 'MShield (Mighty Shield) 1.0'
\
--msgbox \
'\n
Este assistente irá instalar o MShield em seu computador.\n\n
MShield é um IPS (Intrusion Prevetion System) de fácil
configuração e manuseio, o qual,
possibilita proteção total contra centenas de ataques externos e
48
controle de acesso personalizado
pelo usuário.\n
\n
As seguintes etapas serao seguidas automaticamente:\n
\n
1. Download dos pacotes ou instalacao apartir de pacotes
locais.\n
2. Compilação automática dos pacotes.\n
3. Ajustes finos dos pacotes.\n
4. Limpeza da instalação.\n' \
25 80
##
## Observacoes iniciais no instalador
##
dialog \
--yesno \
--backtitle "MShield" \
'\n
### Observacoes ###\n
\n
- Caso a conexão de internet seja feita através de proxy e seja
optado por se fazer download dos pacotes necessarios para o MShield,
será necessário setar a variável de ambiente chamada http_proxy.
Exemplo: export http_proxy=endereco.do.proxy:porta_do_proxy\n
\n
- É necessário que o linux atual tenha kernel igual ou superior à
versão 2.4.4.\n
\n
- É necessário que o wget esteja instalado. As distribuições linux já
o trazem como padrão.\n
\n
- É necessário que os pacotes de desenvolvimento estejam instalados
no sistema (gcc). Geralmente as distribuições mais conhecidas
incluem-os na instalação padrão.\n
\n
Caso esteja tudo certo, escolha YES para continuar a instalação,
49
caso contrário escolha NO para sair.'\
25 80
## Testa se a resposta foi NO, logo, finaliza o instalador
if [ $? = 1 ]; then
clear
exit 1
fi
## Como sera necessario compilar pacotes, os pacotes de
desenvolvimento da distribuicao atual
## precisam estar instalados (gcc, etc).
which gcc 2&>1 /dev/null
Erro "É necessário possuir os pacotes de desenvolvimento instalados
na máquina"
## Verifica se existe o Wget instalado.
## Wget será usado para fazer o download de todos arquivos
## necessarios pelo MShield.
which wget 2&>1 /dev/null
Erro "É necessário possuir o wget instalado no sistema"
##
## Questiona o usuario: Deve-se fazer o download de todos pacotes
necessarios? Esta forma eh mais
## pratica pois o usuario soh precisa ter o script instalador que tem
tamanho bastante reduzido.
## Deve-se instalar o sistema com base nos pacotes do disco? Caso o
usuario possua o instalador do
## MShield na versao que contenha os pacotes no disco (tamanho maior)
tem-se entao uma instalacao
## mais rapida.
##
escolha=$( dialog \
50
--stdout \
--backtitle "MShield" \
--title 'MShield' \
--menu 'Metodo de Instalacao' \
0 0 0 \
Internet 'Faz o download de todos pacotes necessarios para a
instalacaos' \
Local 'Instala apartir dos pacotes disponiveis no diretorio local
de instalacao do MShield')
## Caso for apertado o botao cancelar
[ $? -eq 1 ] && exit 1
if [ $escolha = "Internet" ]; then
##
## Etapa de download dos pacotes necessarios para o sistema
##
dialog \
--title ' ETAPA 1 - DOWNLOADS '\
--infobox '\n 1. iptables\n
2. libdnet\n
3. pcre\n
4. snort_inline\n
5. libpcap\n
6. oinkmaster\n
7. pmgraph\n
8. rrdtools\n'\
13 40
sleep 1
## Chama a funcao que fara o download dos pacotes
Faz_download;
dialog \
--yesno \
'Etapa de Download dos pacotes concluida com sucesso!\n
51
\n
Clique YES para continuar, agora com a compilacao de pacotes.
\n
Clique NO para sair.\n
' \
0 0
## Testa se a resposta foi NO, logo, finaliza o instalador
if [ $? = 1 ]; then
clear
exit 1
fi
fi
## Chama a funcao que descompacta os pacotes necessarios para o
MShield
Faz_descompactacao;
## Chama a funcao que compila os pacotes
Faz_compilacao;
# Termino da compilacao
dialog \
--title 'Concluido' \
--infobox \
'Compilacao de pacotes concluida com sucesso.\n
A seguir alguns ajustes finais serao feitos.\n' 0 0
sleep 4
## Ajustes finais
## Chama a funcao que faz os ajustes e configuracoes finais.
Faz_ajustes;
##
52
## Mensagem final. Instalacao e configuracao concluida
##
dialog \
--backtitle 'MShield' \
--title 'Instalacao Concluida' \
--msgbox \
'\n
O MShield foi instalado e configurado com sucesso!.\n\n
Execute o comando "mshield" para ter acesso ao menu de utilizacao do
sistema.\n
\n' 0 0
53
APÊNDICE B – Script de Biblioteca (library)
#!/bin/bash
# Funcao que verifica a saida de um comando anterior, caso este tenha
# apresentado erro, sai do programa imprimindo a mensagem passada por
parametro.
function Erro {
if [ $? != 0 -a $? != 2 ]; then
if [ "x$1" != 'x' ]; then
dialog \
--title '<<< Erro >>>' \
--msgbox "\n$1 :(" \
15 60
fi
exit 1
fi
}
# Funcao que retorna verdadeiro caso o pid do programa passado como
parametro esteja em execucao e falso caso
# contrario.
function Rodando {
ps $1 | grep $1 >/dev/null;
}
# Funcao utilizada antes do inicio do download de um arquivo. Serve
para aguardar ate que o arquivo esteja
# efetivamente sendo baixando (jah tenha passado do processo de
conexao, etc).
function Aguarda_inicio_download {
while [ ! -f $1 ]; do
54
sleep 1;
done
}
# Funcao que mostra uma barra de progresso seguinte o processo de
download do pacote.
# Recebe como primeiro parametro o nome do pacote e como segundo
parametro o tamanho do mesmo.
function Download {
(
while Rodando $PIDRODANDO ; do
TAMANHO=$2
COPIADO=$(du -b $1 | cut -f1)
PORCENTAGEM=$((COPIADO*100/TAMANHO))
echo $PORCENTAGEM
sleep 1; # intervalo
done
) | dialog --title "$1" --gauge "Downloading..." 8 40 0
dialog --title "$1" --infobox 'Download concluido!' 0 0
sleep 2
}
##
##
## Funcao que faz o download de todos pacotes necessarios para o
sistema
##
##
function Faz_download(){
## Download do iptables
wget -q --tries=2 -T 20
55
http://www.netfilter.org/projects/iptables/files/$IPTABLES.tar.bz2 &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $IPTABLES.tar.bz2
Download $IPTABLES.tar.bz2 1096
Erro "Não foi possível fazer download do Iptables, verificar o link
de download no arquivo ./Instala"
## Download do Snort_Inline
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/snort-
inline/$SNORT.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $SNORT.tar.gz
Download $SNORT.tar.gz 2905172
Erro "Não foi possível fazer download do Snort, verificar o link de
download no arquivo ./Instala"
## Download da libdnet
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/libdnet/$LIBDNET.tar.gz
&
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $LIBDNET.tar.gz
Download $LIBDNET.tar.gz 446233
Erro "Não foi possível fazer download da libdnet, verificar o link de
download no arquivo ./Instala"
56
## Download da libpcap
wget -q --tries=2 -T 20
http://public.planetmirror.com/pub/tcpdump/release/$LIBPCAP.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $LIBPCAP.tar.gz
Download $LIBPCAP.tar.gz 425887
Erro "Não foi possível fazer download da libpcap, verificar o link de
download no arquivo ./Instala"
## Download da pcre
wget -q --tries=2 -T 20
http://heanet.dl.sourceforge.net/sourceforge/pcre/$PCRE.tar.bz2 &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $PCRE.tar.bz2
Download $PCRE.tar.bz2 565852
Erro "Não foi possível fazer download da Pcre, verificar o link de
download no arquivo ./Instala"
## Download do Oinkmaster
wget -q --tries=2 -T 20
http://easynews.dl.sourceforge.net/sourceforge/oinkmaster/$OINKMASTER
.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $OINKMASTER.tar.gz
57
Download $OINKMASTER.tar.gz 80111
Erro "Não foi possível fazer download do Oinkmaster, verificar o link
de download no arquivo ./Instala"
## Download das RRDtools
wget -q --tries=2 -T 20
http://oss.oetiker.ch/rrdtool/pub/$RRDTOOLS.tar.gz &
PIDRODANDO=$!; # guarda o PID do programa recem executado. Usado na
funcao Rodando
Aguarda_inicio_download $RRDTOOLS.tar.gz
Download $RRDTOOLS.tar.gz 1059902
Erro "Não foi possível fazer download das RRDtools, verificar o link
de download no arquivo ./Instala"
}
##
## Funcao que descompacta todos pacotes necessarios para o MShield
##
function Faz_descompactacao {
dialog \
--title 'Descompactando...' \
--infobox \
'\nAguarde enquanto os pacotes sao descompactados no diretorio
local.\n' \
0 0
for i in $(ls *.tar.bz2); do
tar jxf $i 2>&1
done
Erro "Espaco insuficiente em disco ou problema de permissao na pasta
58
local"
for i in $(ls *.tar.gz); do
tar zxf $i 2>&1
done
Erro "Espaco insuficiente em disco ou problema de permissao na pasta
local"
dialog \
--title 'Descompactacao concluida!' \
--infobox \
'Inicializando etapa de compilacao dos pacotes\n
Esta etapa pode demorar varios minutos. Por favor aguarde.\n'\
0 0
sleep 4
}
##
##
## Funcao que compila todos os pacotes necessarios para o sistema
## Faz tambem a instalacao dos mesmos
##
##
## Compilando pacotes
## Laco de compilacao
# Compila todos pacotes, ao termino do make install eh verificado a
incidencia de erro no log de compilacao.
# Caso exista erro, o programa eh abortado.
function Faz_compilacao {
for i in $LIBDNET $PCRE $LIBPCAP $PMGRAPH $RRDTOOLS
do
dialog \
--title "Compilando $i" \
59
--infobox \
"Por favor aguarde\n" 0 0
cd $i
./configure > $i.log 2>&1 ; make >> $i.log 2>&1 ; make install >>
$i.log 2>&1
cat $i.log | egrep -i "\berror\b" 2>&1
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $i"
fi
cd ..
done
# Compilacao especifica para Snort_inline
# Eh ativado o Perfmonitor para podermos gerar os graficos de
estatisticas
cd $SNORT
./configure --enable-perfmon > $SNORT.log 2>&1 ; make >> $SNORT.log
2>&1 ; make install >> $SNORT.log 2>&1
cat $SNORT.log | egrep -i "\berror\b" 2>&1
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $SNORT"
fi
cd ..
# Ajustando iptables para compilacao, precisa de ajustes.
# Remove da compilacao o modulo string, nao utilizado.
dialog \
--title "Compilando $IPTABLES" \
--infobox \
"Por favor aguarde\n" 0 0
rm ./$IPTABLES/extensions/libipt_stri*
rm ./$IPTABLES/extensions/.stri*
cd $IPTABLES
make install-devel > $IPTABLES.log 2>&1
cat $IPTABLES.log | egrep -i "\berror\b" 2>&1
60
if [ $? = 0 ]; then
Erro "Problemas na compilacao do pacote $IPTABLES"
fi
cd ..
}
##
##
## Funcao usada para fazer os ajustes finais de configuracao e
instalacao dos aplicativos
##
##
function Faz_ajustes {
# Ajuste pmgraph
cd ./contrib/ && echo '#!/usr/bin/perl -w -I /usr/local/rrdtool-
1.2.16/lib/perl/5.8.8/' > temp && cat pmgraph.pl | grep -v
'#!/usr/bin/perl' >> temp
mv temp pmgraph.pl
chmod +x pmgraph.pl
cd ..
cp ./contrib/pmgraph.pl /usr/bin
# Ajuste Snort_inline
dialog \
--title 'Ajustando Snort_inline' \
--infobox \
'Criando diretorios e copiando regras.\n' 0 0
sleep 3
# Prepara Snort_inline
mkdir -p /etc/snort_inline/drop-rules
mkdir -p /var/log/snort_inline
61
mkdir -p /etc/snort_inline/relatorio
cp ./$SNORT/etc/clas* /etc/snort_inline/drop-rules
cp ./$SNORT/etc/refe* /etc/snort_inline/drop-rules
cp ./$SNORT/etc/unicode.map /etc/snort_inline/unicode.map
cp ./contrib/oinkmaster_update /etc/snort_inline/
# Ajusta snort para que comece a fazer log de atividades no arquivo
perfmon.txt, para que possa ser
# gerado o relatorio posteriormente
if [ -f /etc/snort_inline/snort_inline.conf ]; then
rm /etc/snort_inline/snort_inline.conf
fi
echo 'preprocessor perfmonitor: flow max events time 30 file
/etc/snort_inline/perfmon.txt pktcnt 300' >>
/etc/snort_inline/snort_inline.conf
cat ./$SNORT/etc/snort_inline.conf >>
/etc/snort_inline/snort_inline.conf
# Cria o arquivo de regras personalizadas
touch $RULE_PATH/local.rules
# Inclui variavel DNS_SERVERS, necessaria para algumas rules
echo 'var DNS_SERVERS any' >> /etc/snort_inline/snort_inline.conf
# Ajuste Oinkmaster
dialog \
--title 'Ajustando Oinkmaster' \
--infobox \
'Ajustando e copiando arquivos necessarios.\n' 0 0
sleep 3
# Configura a url do oinkmaster no arquivo de configuracao e
substitui os alerts por drops nas rules
# atualizadas
cd ./$OINKMASTER/ && echo "url = http://www.snort.org/pub-
bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz" >
temp && echo 'modifysid * "^alert" | "drop"' >> temp && cat
oinkmaster.conf >> temp
62
mv temp oinkmaster.conf
cd ..
cp ./$OINKMASTER/oinkmaster.conf /etc/
cp ./$OINKMASTER/oinkmaster.pl /usr/bin
dialog \
--title 'Atualizando rules' \
--infobox \
'Fazendo download das rules mais atualizadas disponiveis.\n' 0 0
sleep 3
# faz download de todas as rules comunitarias oficiais mais
atualizadas
oinkmaster.pl -o /etc/snort_inline/drop-rules > /dev/null 2>&1
# Devido ao fato de as rules comunitarias virem com o prefixo
community- no nome de cada uma
# abaixo retiramos este prefixo para deixarmos as rules no padrao do
snort_inline.conf
for i in $(ls /etc/snort_inline/drop-rules/*.rules)
do
i=$(basename $i)
j=$(echo $i | sed 's/community-//g')
mv /etc/snort_inline/drop-rules/$i /etc/snort_inline/drop-
rules/$j > /dev/null 2>&1
done
# Retira do arquivo snort_inline.conf padrao de instacao todos
includes de regras.
# e coloca os novos includes de acordo com as regras atualmente
disponiveis no diretorio correspondente
cat /etc/snort_inline/snort_inline.conf | grep -v 'include $RULE*' >
/etc/snort_inline/tmp
cp /etc/snort_inline/tmp /etc/snort_inline/snort_inline.conf ; rm
/etc/snort_inline/tmp
63
echo 'include $RULE_PATH/classification.config' >>
/etc/snort_inline/snort_inline.conf
echo 'include $RULE_PATH/reference.config' >>
/etc/snort_inline/snort_inline.conf
for i in $(ls /etc/snort_inline/drop-rules/*.rules)
do
i=$(basename $i)
echo "include \$RULE_PATH/$i" >> /etc/snort_inline/snort_inline.conf
done
# Faz com que o snort_inline olhe tambem para um novo arquivo de
regras que nao eh padrao.
# Neste arquivos serao postas as regras criadas pelo usuario.
echo 'include $RULE_PATH/local.rules' >>
/etc/snort_inline/snort_inline.conf
# Copia arquivo de inicializacao do MShield (rc.mshield) para a pasta
padrao do slack /etc/rc.d
cp ./contrib/rc.mshield /etc/rc.d/ ; chmod -rx /etc/rc.d/rc.mshield
# Agenda execucao do oinkmaster para atualizar as rules todo dia
primeiro de cada mes as 10 horas
crontab -l -u root > /etc/snort_inline/cron
echo "00 10 1 * * /etc/snort_inline/oinkmaster_update 2>&1" >>
/etc/snort_inline/cron
crontab /etc/snort_inline/cron -u root
# Copia o arquivo mshield para um diretorio visivel ao path
cp mshield /usr/bin
}
64
APÊNDICE C – Script do Oinkmaster (oinkmaster_update)
#!/bin/bash
## Adiciona o prefixo community- no nome de cada arquivo de regra,
para que assim o oinkmaster possa
## comparar as regras e atualizar o necessario
for i in $(ls /etc/snort_inline/drop-rules)
do
i=$(basename $i);
mv /etc/snort_inline/drop-rules/$i /etc/snort_inline/drop-
rules/community-$i
done
## Atualiza regras baixando a versao mais recente
oinkmaster.pl -o /etc/snort_inline/drop-rules
## Retira-se o prefixo community- do nome dos arquivos de regra para
assim se adequar ao padrao do snort
for i in $(ls /etc/snort_inline/drop-rules/)
do
i=$(basename $i);
j=$(echo $i | sed 's/community-//g')
mv /etc/snort_inline/drop-rules/$i /etc/snort_inline/drop-
rules/community-$i
done
A função deste script, no contexto do projeto, é de atualizar
periodicamente as regras do snort_inline.
Na primeira parte do script existe um laço de repetição for, o qual, tem
a função de adicionar a todas regras já existentes, o prefixo "community-".
Isto é feito por que as regras recém baixadas pelo oinkmaster contém este
prefixo, por outro lado, este prefixo não é padrão do snort_inline, portanto, é
65
retirado no final do script pelo último laço for. A linha do script, a qual executa
o arquivo, oinkmaster.pl é a principal. A execução do oinkmaster.pl irá fazer o
download das mais novas regras comunitárias disponíveis no site do snort. O
oinkmaster, durante sua execução, compara as novas regras com as atuais,
de forma a atualizá-las. São adicionadas às atuais, as regras que faltam e
retiradas as regras que não existem mais na versão atual por algum motivo.
Existe uma configuração fina feita no script de instalação do MShield, a qual,
se encarrega de evitar que o oinkmaster considere o arquivo local.rules, o
qual contém regras personalizadas do usuário, portanto, estas não devem
ser alteradas.
Este script é agendado para execução periódica, todo dia primeiro de
cada mês às dez horas da manhã. Este agendamento é feito também no
script de instalação do MShield.
67
Este script tem a finalidade de fornecer ao usuário uma interface de
operação bastante simples para o Mshield. Através dele é possível Ativar,
Desativar, Gerar relatório e Personalizar o sistema.
#!/bin/bash
##
## Mensagem de apresentacao do sistema
##
dialog \
--title 'MShield (Mighty Shield) 1.0'
\
--msgbox \
'\n
Bem vindo ao MShield. \n\n\n\n\n\n
Aqui voce pode:\n\n
- Personalizar regras de protecao\n\n
- Gerar relatorios\n\n
- Parar e iniciar o MShield.\n\n
Tudo de maneira muito simples e intuitiva.
\n' \
25 80
comeca() {
escolha=$( dialog \
--stdout \
--backtitle "MShield" \
--title 'MShield' \
--menu 'O que deseja fazer?' \
0 0 0 \
Personalizar 'Bloquear/Desbloquear portas' \
68
Relatorio 'Gerar relatorio' \
Parar 'Desabilita o MShield' \
Inicia 'Ativa o MShield' \
Sair 'Sai do MShield' )
## Caso for apertado o botao cancelar
[ $? -eq 1 ] && exit 1
### MENU DE PERSONALIZACAO ##
if [ $escolha = "Personalizar" ]; then
escolha_person=$( dialog \
--stdout \
--title 'MShield' \
--menu 'O que deseja fazer?' \
0 0 0 \
BloquearIN 'Bloquear acesso externo a alguma porta local
especifica' \
BloquearOUT 'Bloquear acesso interno a alguma porta externa
especifica' \
Desbloquear 'Desbloquear acesso interno a alguma porta externa
especifica' )
## Caso for apertado o botao cancelar
[ $? -eq 1 ] && comeca
if [ $escolha_person = "BloquearIN" ]; then
porta=$( dialog \
--stdout \
--title 'Bloquear' \
--inputbox 'Digite a porta a ser bloqueada:' \
0 0 )
## Caso for apertado o botao cancelar
[ $? -eq 1 ] && comeca
echo "drop tcp any any -> any $porta (classtype:attempted-user;
69
msg:\"Port $porta connection initiated\";)" >>
/etc/snort_inline/drop-rules/local.rules
dialog \
--title 'Sucesso' \
--msgbox "A porta $porta foi bloqueada com sucesso! Para e
inicie o MShield novamente." \
6 70
comeca # volta ao inicio
fi
if [ $escolha_person = "BloquearOUT" ]; then
porta=$( dialog \
--stdout \
--title 'Bloquear' \
--inputbox 'Digite a porta a ser bloqueada:' \
0 0 )
## Caso for apertado o botao cancelar
[ $? -eq 1 ] && comeca
echo "drop tcp any $porta -> any any (classtype:attempted-user;
msg:\"Port $porta connection initiated\";)" >>
/etc/snort_inline/drop-rules/local.rules
dialog \
--title 'Sucesso' \
--msgbox "A porta $porta foi bloqueada com sucesso! Pare e
inicie o MShield novamente." \
6 70
comeca # volta ao inicio
fi
70
if [ $escolha_person = "Desbloquear" ]; then
porta=$( dialog \
--stdout \
--title 'Desbloquear' \
--inputbox 'Digite a porta a ser desbloqueada:' \
0 0 )
## desbloqueando (retirar a regra de bloqueio de local.rules)
grep -v "Port $porta" /etc/snort_inline/drop-rules/local.rules | tee
/etc/snort_inline/drop-rules/local.rules
dialog \
--title 'Sucesso' \
--msgbox "A porta $porta foi desbloqueada com sucesso!" \
6 40
comeca # volta ao inicio
fi
fi
##############################
### MENU DE RELATORIO ###
if [ $escolha = "Relatorio" ]; then
dialog \
--title 'Confirmacao' \
--yesno '\nDeseja realmente gerar o relatorio de atividades do
MShield?\n\n' \
0 0
if [ $? = 0 ]; then
pmgraph.pl /etc/snort_inline/relatorio/
/etc/snort_inline/perfmon.txt 1
sleep 3
71
dialog \
--title 'Sucesso' \
--msgbox "O Relatorio foi gerado com sucesso. Faca sua
visualizacao atraves do navegador no endereco:
/etc/snort_inline/relatorio/relatorio.html.\n" \
0 0
comeca
else
comeca
fi
fi
##########################
### MENU DE PARAR ###
if [ $escolha = "Parar" ]; then
dialog \
--title 'Confirmacao' \
--yesno '\nTem certeza que deseja desativar o MShield?\n\n' \
0 0
if [ $? = 0 ]; then
if [ ! -x /etc/rc.d/rc.mshield ]; then
chmod +rx /etc/rc.d/rc.mshield
fi
/etc/rc.d/rc.mshield stop
/etc/snort_inline/relatorio/report
dialog \
--title 'Sucesso' \
--msgbox "MShield foi desativado com sucesso. Para reativa-lo
escolha a opcao Iniciar \
no menu inicial." \
0 0
72
dialog \
--title 'Confirmacao' \
--yesno '\nDeseja que o MShield pare de ser executado
automaticamente durante o boot do sistema?\n\n' \
0 0
if [ $? = 0 ]; then
chmod -xr /etc/rc.d/rc.mshield
else
chmod -xr /etc/rc.d/rc.mshield
fi
comeca
else
comeca
fi
fi
#####################
### MENU DE INICIA ###
if [ $escolha = "Inicia" ]; then
dialog \
--title 'Confirmacao' \
--yesno '\nTem certeza que deseja ativar o MShield?\n\n' \
0 0
if [ $? = 0 ]; then
if [ ! -x /etc/rc.d/rc.mshield ]; then
chmod +xr /etc/rc.d/rc.mshield
fi
/etc/rc.d/rc.mshield start
dialog \
--title 'Sucesso' \
73
--msgbox "MShield foi ativado com sucesso. Para desativa-lo
escolha a opcao Parar \
no menu inicial." \
0 0
dialog \
--title 'Confirmacao' \
--yesno '\nDeseja que o MShield seja executado automaticamente
durante o boot do sistema?\n\n' \
0 0
if [ $? = 0 ]; then
chmod +xr /etc/rc.d/rc.mshield
echo "if [ -x /etc/rc.d/rc.mshield ]; then
. /etc/rc.d/rc.mshield
fi" >> /etc/rc.d/rc.M
else
chmod -xr /etc/rc.d/rc.mshield
fi
comeca
else
comeca
fi
fi
#####################
### MENU DE SAIR ###
if [ $escolha = "Sair" ]; then
clear
exit 0
fi
####################
exit 0
}
75
APÊNDICE E – Script de Inicialização (rc.mshield)
O script abaixo é utilizado pelo script de utilização “mshield” para
inicializar e parar o MShield de maneira correta.
#!/bin/sh
# Start/stop MShield:
mshield_start() {
# Inicia o MShield
modprobe ip_queue
iptables -I INPUT -p udp -j QUEUE
iptables -I INPUT -p tcp -j QUEUE
snort_inline -c /etc/snort_inline/snort_inline.conf -Q -N -l
/var/log/snort_inline/ \
-t /var/log/snort_inline/ -v -D > /dev/null 2>&1
}
mshield_stop() {
# Para o MShield
rmmod ip_queue
iptables -D INPUT -p tcp -j QUEUE
iptables -D INPUT -p udp -j QUEUE
killall snort_inline
sleep 2
}
case "$1" in
'start')
mshield_start
;;
'stop')
mshield_stop
77
APÊNDICE F – Script auxiliar de relatório (report)
#!/bin/bash
echo '<html>
<body>
<h1> <div align="center">
*********************************************** </div></h1>
<h1> <div align="center"> Relatorio MSHIELD </div></h1>
<h1> <div align="center">
*********************************************** </div></h1>
<br>
<br>
<h2><div align="center"><font color="blue"> Numero de bloqueios
efetuados: </font><font color="red">' >
/etc/snort_inline/relatório/relatório.html
# quantidade de pacotes bloqueados eh o mesmo numero de linhas do
arquivo de log
count=$(wc -l /var/log/snort_inline/snort_inline-fast | cut -d ' '
-f1)
echo $count >> /etc/snort_inline/relatório/relatório.html
echo '</font></a></div></h2><br>
<h2><div align="center"><a href="teste.txt"> Clique aqui para
Informacoes Extras de atividades </a></div></h2>
</body>
</html>' >> /etc/snort_inline/relatório/relatório.html
78
AUTORIZAÇÃO
Autorizo a reprodução e/ou divulgação total ou parcial da presente obra,
por qualquer meio convencional ou eletrônico, desde que citada a fonte.
Nome do autor: Rodrigo Polesso
Assinatura do autor: __________________________
Instituição: Universidade Tecnológica Federal do Paraná
Local: Curitiba, Paraná
E-mail: [email protected]
Top Related