Post on 09-Dec-2018
FACULDADES INTEGRADAS PROMOVE DE BRASÍLIA CURSO DE TECNOLOGIA EM SEGURANÇA DA INFORMAÇÃO
TRABALHO DE CONCLUSÃO DE CURSO
FERRAMENTA DE VERIFICAÇÃO DE INTEGRIDADE DE ARQUIVOS BINÁRIOS EM SISTEMAS OPERACIONAIS BASEADOS EM LINUX
KELY REJANE DE A. ROMÃO GONZAGA
Brasília - DF 2014
KELY REJANE DE A. ROMÃO GONZAGA
FERRAMENTA DE VERIFICAÇÃO DE INTEGRIDADE DE ARQUIVOS BINÁRIOS EM SISTEMAS OPERACIONAIS BASEADOS EM LINUX
Trabalho de conclusão de curso apresentado às Faculdades Integradas Promove de Brasília como requisito parcial para obtenção do título de Tecnólogo em Segurança da Informação no curso de Segurança da Informação Prof. Esp. Dirceu Silva da Silva Junior
Brasília - DF 2014
KELY REJANE DE A. ROMÃO GONZAGA
FERRAMENTA DE VERIFICAÇÃO DE INTEGRIDADE DE ARQUIVOS BINÁRIOS EM SISTEMAS OPERACIONAIS BASEADOS EM LINUX
Trabalho de conclusão de curso apresentado às Faculdades Integradas Promove de Brasília como requisito parcial para obtenção do título de Tecnólogo em Segurança da Informação no curso de Segurança da Informação
APROVADO EM: ______ DE____________________DE__________:
___________________________________________________________________
Orientador (a): Profº. Esp. Dirceu Silva da Silva Junior
Faculdade Integradas Promove de Brasília
___________________________________________________________________
Avaliador (a): Profº. MsC. Cid Bendahan Coelho Cintra
Faculdade Integradas Promove de Brasília
___________________________________________________________________
Avaliador (a): Profº. MsC Hamilton Iwamoto da Silva
Faculdade Integradas Promove de Brasília
Brasília - DF 2014
DEDICATÓRIA Dedico este trabalho ao meu querido pai, Volú Romão Borges Filho, que foi recolhido para os braços de Deus, durante sua confecção.
AGRADECIMENTOS Agradeço primeiramente à Deus que me capacitou para concluir mais esta etapa da minha vida. Ao meu pai, que agora se encontra na Glória e às minhas mães Maria Helena de Almeida Nagashima e Magda Maria Damásio, que tanto me inspiraram e ajudaram nesta jornada. À minha amada família Luciano Gonzaga da Silva, meu esposo, e Guilherme Romão Gonzaga, Victor Hugo Romão Gonzaga e Arthur Romão Gonzaça, meus filhos, que me suportaram e ajudaram nesses dias tão difíceis. Aos colegas que caminharam junto comigo nesses anos. Vocês foram essenciais para que isto fosse possível. Aos professores Drº Joacil Basílio Rael, MSc. Cid Bendahan Coelho Cintra, Fernando Dias, Drª Maria José de Oliveira e todos os demais professores que muito me inspiraram e contribuíram com seus conhecimentos. E por fim, agradeço imensamente ao meu orientador, Prof. Dirceu Silva da Silva Junior, que me desafiou a ultrapassar meus limites e a alçar novos voos, me conduzindo com paciência e sabedoria no desenvolvimento deste trabalho.
RESUMO
Este trabalho tem como objetivo a implementação de uma ferramenta de
auxílio na detecção de ataques e intrusões efetuados por malwares, em sistemas
operacionais baseados em LINUX, através da verificação da integridade dos arquivos
binários do sistema de arquivos e da análise das alterações dos metadados destes
arquivos. Para isso, realizou-se uma revisão teórica sobre a Segurança da
Informação, os sistemas operacionais, especialmente GNU/Linux, criptografia e
hashs, além das linguagens Python e SQL, que foram escolhidas para o
desenvolvimento da ferramenta. Na descrição do sistema incluiu-se sua
aplicabilidade, objetivos, levantamento de requisitos, apresentação dos processos, e
documentação. Conclui-se, neste trabalho, que a implementação do aplicativo ISYS,
garante a integridade e autenticidade do sistema de arquivos e, por conseguinte, que
muito contribui para a garantia e manutenção da segurança da informação nas
organizações e usuários de sistemas Linux em geral.
Palavres chave: integridade, detecção de intrusão, malwares, Linux,
criptografia
ABSTRACT
The aim of this work is the implementation of a tool to support the detection of attacks
and intrusions made by malwares in LINUX based operational systems, via integrity checks in
system files binary files and analyzes of changes in metadata of these files. Thereunto, we
made a theoretical revision on Information Security, Operational Systems, specially
GNU/Linux, cryptography and hashes, Python and SQL languages as well, chosen for this
tool’s development. In the system’s description, we included its applicability, objects,
requirements gathering, presentation process and documentation. We concluded from this
work, the implementation in ISYS system, which guarantees the files system integrity and
authentication, therefore, contributes to guarantee and maintain information security safeguard
to organizations and general Linux’s System users.
Keywords: integrity, intrusions detection, malwares, Linux, cryptography.
LISTA DE FIGURAS
Figura 1 - Gráfico do total de incidentes reportados ao CERT.br por ano ................ 21
Figura 2 - Visão abstrata dos componentes de um sistema computacional ............. 24
Figura 3 - Tipos de sistemas operacionais ............................................................... 27
Figura 4 - Organização de disco do sistema de arquivos ext2 do Linux .................. 38
Figura 5 - Processo de instalação do aplicativo ISYS ............................................. 51
Figura 6 - Processo de verificação – Etapa 1 ........................................................... 53
Figura 7 - Processo de verificação – Etapa 2 ........................................................... 54
Figura 8 - Processo de verificação – Etapa 3 ............................................................ 55
Figura 9 - Envio de relatório – Etapa 4 ..................................................................... 55
Figura 10 - Diagrama de caso de uso UC01 - Instalar_Sistema .............................. 58
Quadro 1 - Fluxo de Eventos do Use Case [Instalar_Sistema] ................................ 58
Figura 11 - Diagrama de caso de uso UC02 - Verificar_Manual .............................. 59
Quadro 2 - Fluxo de Eventos do Use Case [Verificar_Manual] ................................ 59
Figura 12 - Diagrama de caso de uso UC03 - Atualizar_Database ......................... 60
Quadro 3 - Fluxo de Eventos do Use Case [Atualizar_Database] ............................ 60
Figura 13 - Diagrama de sequência do caso de uso UC 01 ..................................... 61
Figura 14 - Diagrama de sequência do caso de uso UC 02 ...................................... 62
Figura 15 - Diagrama de sequência do caso de uso UC 03 ...................................... 63
Figura 16 - Diagrama de atividades Verificar_Automatica ....................................... 64
Figura 17 - Diagrama de componentes Aplicativo_ISYS .......................................... 65
Figura 18 - Tela do conteúdo do pacote do aplicativo ISYS ..................................... 66
Figura 19 - Tela de instalação do aplicarivo ISYS ..................................................... 66
Figura 20 - Tela da execução da primeira carga ...................................................... 66
Figura 21 - Tela da execução da verificação manual ................................................ 67
Figura 22 - Tela do arquivo de configuração ............................................................ 67
Figura 23 - Tela de log enviado por e-mail ao administrador .................................... 68
Figura 24 - Tela do banco de dados origem ............................................................. 68
LISTA DE ABREVIATURAS E SIGLAS
ABNT Associação Brasileira de Normas Técnicas
CPU Central Processing Unit
DDL Data Definition Language
DES Data Encryption Standard
DML Data Manipulation Language
ER Especificação de Requisitos
E/S Entrada/Saída
Ext Sistema de arquivos estendido
FHS Filesystem Hierarchy Standard
FSF Free Software Foundation
GNU GNU’s Not Unix
GID Número de identificação do Grupo
HIDS Host-Based Intrusion Detection System
HTML HiperText Markup Language
ID Número de identificação
JVM Java Virtual Machine
NIST National Institute of Standards and Technology
PDA Personal Digital Assistant
RAM Random Access Memory
SGBD Sistema Gerenciador de Banco de Dados
SHA Secure Hash Algorithm
SMTP Simple Mail Transfer Protocol
SQL Structured Query Language
THE Technische Hogeschool Eindhoven
UC Use Case
UCP Unidade Central de Processamento
UID Número de identificação do usuário
VM Virtual Machine
VFS Virtual File System
SUMÁRIO
CAPÍTULO I ............................................................................................................. 15
1. Apresentação ...................................................................................................... 15
1.1 Introdução ....................................................................................................... 15
1.2 Justificativa ...................................................................................................... 17
1.3 Objetivos ......................................................................................................... 17
1.3.1 Geral ........................................................................................................ 17
1.3.2 Específicos............................................................................................... 17
1.4 Metodologia ..................................................................................................... 18
CAPÍTULO II ............................................................................................................ 19
2. Referencial teórico .............................................................................................. 19
2.1 Conceitos e princípios da segurança da informação ....................................... 19
2.1.1 Ativo de informação ................................................................................. 20
2.1.2 Incidente .................................................................................................. 20
2.1.3 Ataque ..................................................................................................... 21
2.1.4 Vulnerabilidade ........................................................................................ 21
2.1.5 Ameaça .................................................................................................... 22
2.1.6 Risco ........................................................................................................ 23
2.2 Sistemas operacionais .................................................................................... 23
2.2.1 Definição .................................................................................................. 24
2.2.2 Funções e objetivos ................................................................................. 25
2.2.3 Tipos ........................................................................................................ 26
2.2.3.1 Sistemas operacionais de computadores de grande porte ............... 28
2.2.3.2 Sistemas operacionais de servidores ............................................... 28
2.2.3.3 Sistemas operacionais de multiprocessadores ................................. 28
2.2.3.4 Sistemas operacionais de computadores pessoais .......................... 29
2.2.3.5 Sistemas operacionais de computadores portáteis .......................... 29
2.2.3.6 Sistemas operacionais embarcados ................................................. 29
2.2.3.7 Sistemas operacionais de nós sensores (sensor node) ................... 30
2.2.3.8 Sistemas operacionais de tempo real ............................................... 30
2.2.3.9 Sistemas operacionais de cartões inteligentes ................................. 30
2.2.4 Estrutura .................................................................................................. 30
2.2.4.1 Sistemas monolíticos ........................................................................ 30
2.2.4.2 Sistemas de camadas ...................................................................... 31
2.2.4.3 Microkernel ....................................................................................... 31
2.2.4.4 Máquina virtual ................................................................................. 32
2.3 O sistema GNU/Linux ..................................................................................... 33
2.3.1 Histórico ................................................................................................... 33
2.3.2 Distribuições GNU/Linux .......................................................................... 34
2.3.3 Debian GNU/Linux ................................................................................... 34
2.3.4 Sistema de arquivos ................................................................................ 36
2.3.4.1 Estrutura básica ................................................................................ 37
2.3.4.2 Segurança no Linux - Permissões .................................................... 38
2.3.5 Estrutura de diretórios .............................................................................. 40
2.4 Criptografia ...................................................................................................... 41
2.4.1 Criptografia simétrica ............................................................................... 41
2.4.2 Criptografia assimétrica ........................................................................... 42
2.4.3 Funções hash .......................................................................................... 43
2.4.3.1 O algoritmo MD5 ............................................................................... 43
2.4.3.1 O algoritmo SHA (Secure Hash Algorithm) ....................................... 43
2.5 Python ............................................................................................................. 44
2.6 O padrão SQL ................................................................................................. 44
CAPÍTULO III ........................................................................................................... 45
3. O aplicativo “ISYS” .............................................................................................. 45
3.1 Posicionamento ............................................................................................... 46
3.1.1 Oportunidade de negócio ......................................................................... 46
3.1.2 Descrição do problema ............................................................................ 46
3.1.3 Principais características do produto ....................................................... 46
3.1.4 Principais envolvidos ............................................................................... 47
3.1.4.1 Usuários do sistema ......................................................................... 47
3.1.4.2 Desenvolvedores .............................................................................. 47
3.1.4.3 Alternativas e concorrência............................................................... 47
3.1.5 Restrições ................................................................................................ 47
3.1.6 Dependências .......................................................................................... 48
3.2 Requisitos do sistema ..................................................................................... 48
3.2.1 Requisitos funcionais ............................................................................... 48
3.2.2 Requisitos não-funcionais ........................................................................ 49
3.3 Processos ....................................................................................................... 49
3.3.1 Processo de instalação da ferramenta ..................................................... 49
3.3.2 Processo de verificação automática do sistema ...................................... 52
3.3.2.1 Verificação de arquivos novos .......................................................... 52
3.3.2.2 Verificação de arquivos alterados ..................................................... 54
3.3.2.3 Verificação de arquivos deletados .................................................... 54
3.3.2.4 Envio de relatório ao administrador .................................................. 55
3.3.3 Processo de verificação manual do sistema ............................................ 56
3.3.4 Processo de atualização da base de dados ............................................ 56
3.4 Documentação ................................................................................................ 57
3.4.1 Diagramas de casos de uso..................................................................... 57
3.4.2 Descrição dos atores ............................................................................... 57
3.4.2.1 Administrador do sistema ................................................................. 57
3.4.3 Detalhamento dos casos de uso .............................................................. 58
3.4.3.1 [UC01] – [Instalar_Sistema] .............................................................. 58
3.4.3.2 [UC02] – [Verificar_Manual] .............................................................. 59
3.4.3.3 [UC03] – [Atualizar_Database] ......................................................... 60
3.4.4 Diagramas de sequência ......................................................................... 61
3.4.4.1 Diagrama de sequência do caso de uso UC01 ................................. 61
3.4.4.2 Diagrama de sequência do caso de uso UC02 ................................. 62
3.4.4.3 Diagrama de sequência do caso de uso UC03 ................................. 63
3.4.5 Diagramas de atividades ......................................................................... 64
3.4.5.1 Diagrama de atividades Verificar_Automática .................................. 64
3.4.6 Diagramas de componentes .................................................................... 65
3.4.6.1 Diagrama de componentes Aplicativo_ISYS .................................... 65
3.5 Prova de conceitos .......................................................................................... 65
3.5.1 Tela do conteúdo do pacote do aplicativo ISYS ....................................... 65
3.5.2 Tela de execução da instalação ............................................................... 66
3.5.3 Tela de execução da primeira carga da base de dados .......................... 66
3.5.4 Tela de execução da verificação manual do sistema ............................... 67
3.5.5 Tela do preenchimento do arquivo de configuração ................................ 67
3.5.6 Tela de logs enviados por e-mail ............................................................. 68
3.5.7 Tela do banco de dados origem ............................................................... 68
CAPÍTULO IV ........................................................................................................... 69
4. Conclusão ........................................................................................................... 69
REFERÊNCIAS ........................................................................................................ 71
GLOSSÁRIO ............................................................................................................ 74
APÊNDICE A – MANUAL DO USUÁRIO ................................................................. 75
15
CAPÍTULO I
1. APRESENTAÇÃO
1.1 INTRODUÇÃO
Com o avanço das tecnologias computacionais e, por conseguinte, o avanço
do uso dessas tecnologias em organizações, empresas e população em geral,
diversas novas técnicas de ataque e intrusão são desenvolvidas diariamente em todo
o mundo.
As tecnologias fazem parte do cotidiano de todos, desde pessoas comuns à
governos e organizações. Transações bancárias, e-commerce, ensino à distância,
redes sociais, aplicativos em smartphones e tablets, dentre outros, carregam diversas
informações confidenciais que enchem os olhos de criminosos digitais em todo o
mundo. Milhares de novos malwares são desenvolvidos diariamente com a intenção
de extrair informações, que são ativos de valor, para benefícios próprios.
Com isso, o desenvolvimento e o aprimoramento da segurança da informação
tornaram-se primordiais para todos. Os profissionais de segurança precisam estar
sempre um passo à frente em relação à proteção da informação, sempre buscando o
conhecimento das novas técnicas de ataques, novos malwares, aprimorando técnicas
de prevenção, e desenvolvendo novas ferramentas que auxiliem na detecção e no
bloqueio de ataques e intrusões.
Atualmente, detectar intrusões em sistemas operacionais tornou-se uma
tarefa muito difícil, devido ao fato dos atacantes conseguirem ocultar quase que
completamente seus rastros dentro de um sistema. Malwares, como rootkits,
aproveitam vulnerabilidades encontradas nos sistemas e instalam-se alterando
arquivos de configuração, datas e permissões de forma a passarem despercebidos
até pelo administrador mais atento.
Dessa forma, analisar periodicamente os comportamentos e alterações de
cada arquivo à procura de algo suspeito, seria a única forma de minimizar os riscos
16
de ataques e intrusões. Mas como analisar manualmente milhares de arquivos
diariamente em busca de anormalidades? Esta tarefa seria praticamente impossível.
Por isso, diversas ferramentas de detecção de intrusão vêm sendo
desenvolvidas atualmente. Ferramentas que automatizam o processo de verificação
da integridade dos arquivos, análise de comportamentos, análise de metadados,
análise de tráfegos de redes e etc. que, somadas a outras técnicas e dispositivos de
segurança, auxiliam na garantia da confidencialidade, integridade, disponibilidade e
autenticidade das informações.
Pensando nisso é que o aplicativo “ISYS” foi desenvolvido. Um aplicativo que
automatiza o processo de análise das informações e integridade dos arquivos. O
aplicativo ISYS é uma ferramenta que verifica a integridade dos arquivos comparando
os hashs e metadados desses arquivos periodicamente, identificando alterações e
alertando aos administradores dos sistemas sobre possíveis ataques.
O aplicativo “ISYS” foi desenvolvido para sistemas operacionais baseados em
UNIX, sendo a linguagem utilizada, o Python.
Este trabalho foi desenvolvido em quatro partes mais o apêndice:
a) Introdução, com justificativa e objetivos;
b) Referencial teórico, apresentando todas as bases para a compreensão
do trabalho;
c) Apresentação, documentação e implantação do aplicativo “ISYS”;
d) Conclusão.
17
1.2 JUSTIFICATIVA
O desenvolvimento dessa e de outras ferramentas que auxiliem no processo
de detecção e bloqueios de invasões é hoje uma necessidade real de mercado, se
justificando pela quantidade e diversidade de métodos de ataques e intrusão de
sistemas e a necessidade de aprimoramento das técnicas de detecção e bloqueio
dessas invasões, a fim de proteger os sistemas computacionais e as informações
contidas nos mesmos.
Os atacantes, ao invadirem um sistema, utilizam-se de malwares que
conseguem ocultar-se de maneira a prosseguir abrindo brechas para novos ataques
e invasões, deixando o sistema cada vez mais vulnerável, atingindo assim, todos os
pilares da segurança da informação. Esse fato, além de afetar as organizações,
tornando-se um perigo potencial para o sucesso e a continuidade dos negócios das
mesmas, também afeta os usuários finais, que podem ser lesados em suas
privacidades e finanças.
Por isso, criar ferramentas que garantam um sistema íntegro e confiável ou
que possam detectar, o quanto antes, o comprometimento desse sistema, tornou-se
indispensável para a garantia da segurança da informação.
1.3 OBJETIVOS
1.3.1 Geral
Desenvolver um aplicativo que verifique a integridade dos arquivos binários
de sistemas operacionais baseados em LINUX, que detecte alterações ilegítimas
nesses arquivos possibilitando a detecção de possíveis intrusões.
1.3.2 Específicos
Pesquisar sobre os métodos e técnicas de detecções de intrusões
existentes;
18
Levantar os requisitos necessários para o desenvolvimento da ferramenta;
Elaborar a documentação referente ao aplicativo;
Implementar o aplicativo;
Realizar os testes das funcionalidades do aplicativo;
Descrever os passos para a instalação e utilização do aplicativo.
1.4 METODOLOGIA
A metodologia utilizada baseou-se no processo de desenvolvimento de
software. Iniciou-se com uma pesquisa, onde levantou-se uma problemática e as
possíveis soluções para a mesma, bem como as bases teóricas necessárias para o
entendimento da problemática.
Num segundo momento, levantou-se os requisitos para o desenvolvimento do
aplicativo e desenhou-se as fases desse desenvolvimento. A seguir, foi elaborada
toda a documentação do aplicativo, contendo: uma análise, os processos envolvidos,
os requisitos e os diagramas de casos de uso, sequência e atividades.
Após essa fase, passou-se para o momento da implementação do aplicativo,
seguindo os passos dos levantamentos de requisitos e desenhos elaborados
anteriormente. Para o desenvolvimento, utilizou-se a metodologia ágil conhecida
como extreme programm (XP); a qual objetiva a realização de testes durante o
desenvolvimento e uma documentação mais flexível. E para finalizar, realizou-se os
testes do aplicativo.
19
CAPÍTULO II
2. REFERENCIAL TEÓRICO
2.1 Conceitos e princípios da segurança da informação
A segurança da informação significa, basicamente, a proteção da informação
visando garantir a preservação da confidencialidade, integridade e disponibilidade da
mesma. Segundo Ferreira (2003, p.1) “a segurança da informação protege a
informação de diversos tipos de ameaças garantindo a continuidade de negócios,
minimizando os danos e maximizando o retorno dos investimentos e oportunidades”.
Quando se fala em segurança da informação faz-se necessário o
entendimento dos princípios básicos da mesma, além de alguns aspectos importantes
que a envolvem. Segundo Ferreira (2003) são eles:
a) Confidencialidade: garantia de que somente pessoas autorizadas terão
acesso à informação;
b) Integridade: garantia de que a informação é verdadeira e não corrompida;
c) Disponibilidade: garantia de que a informação estará acessível sempre
que desejada;
d) Autenticação: garantia da identidade do usuário;
e) Legalidade: garantia da aderência à legislação;
f) Não-repúdio: prova de que o usuário realizou determinada ação;
g) Privacidade: garantia do anonimato do usuário; e
h) Auditoria: capacidade de se auditar todas as ações dos usuários.
20
Ferreira (2003, p. 4) aponta que a “confidencialidade, integridade e
disponibilidade da informação podem ser essenciais para preservar a competitividade,
o faturamento, a lucratividade, o atendimento aos requisitos e a imagem da sua
organização perante o mercado e os clientes”. Sendo assim, fica claro a necessidade
da segurança da informação como parte ativa no processo de negócio.
2.1.1 Ativo de informação
A informação pode ser definida como “todo e qualquer conteúdo ou dado que
tenha valor para alguma organização ou pessoa” (VESICA, 2007, p.121), enquanto
ativo pode ser entendido como “tudo que representa valor para o negócio da
instituição. Exemplos: Humanos (Pessoas); Tecnológicos (Software, hardware);
Físicos (Escritórios, CPD)” (ALVES, 2006, p.3).
A informação, portanto, é um ativo de valor para a organização, mas não
somente ela. Deve-se também levar em conta tudo que está relacionado a essa
informação. Segundo Lyra (2008, p. 5), “ativo da informação é composto pela
informação e tudo aquilo que a suporta ou se utiliza dela”.
2.1.2 Incidente
Segundo Shirey (2000 apud Marciano, 2006, p. 50), incidente pode ser
definido como sendo “um evento que envolve a violação da segurança”. Um conceito
mais abrangente foi descrito por Lyra (2008), onde incidente é a ocorrência de um
evento que causa interrupções nos processos de negócio em consequência da
violação dos princípios de segurança.
Incidentes geram impactos negativos aos negócios, por conseguinte, é
necessário gerir processos e pessoas a fim de evitá-los (SÊMOLA, 2003).
Na figura 1 pode-se notar o avanço do número de incidentes nas últimas
décadas.
21
Figura 1 – Gráfico do total de incidentes reportados ao CERT.br por ano
Fonte: CERT.br (2014)
2.1.3 Ataque
Um ataque ocorre quando um agente explora uma vulnerabilidade a fim de
atingir um ativo de valor. Marciano (2006, p. 51) afirma que “um ataque corresponde
a uma ameaça concretizada, não necessariamente bem-sucedida (do ponto de vista
do atacante)”.
Um ataque pode ser de origem interna ou externa, sendo que, Schultz (2002
apud Marciano, 2006) aponta que esses tipos de ataques possuem motivações e
padrões diferenciados, necessitando, portanto, de análises e prevenções também
diferenciadas.
2.1.4 Vulnerabilidade
Entende-se por vulnerabilidade, uma falha ou defeito que pode vir a ser
explorado por uma ameaça. A vulnerabilidade é a fraqueza do ativo (LYRA, 2008).
22
As vulnerabilidades são passivas, por conseguinte, sozinhas não podem ser
consideradas ameaças. Para isso, se faz necessário somá-las a um agente causador
(SÊMOLA, 2003). As vulnerabilidades podem ser de hardwares, softwares, físicas,
naturais, humanas, etc. Abaixo tabela 1 listando as quantidades de vulnerabilidades
levantadas pelo Cert.br.
Tabela 1 – Estatística de Vulnerabilidades divulgadas pelo CERT
Ano 2000 2001 2002 2003 2004 1Q-2Q, 2005
Vulnerabilidade 1,090 2,437 4,129 3,784 3,780 2,874
Fonte: Alves (2006, p.3)
2.1.5 Ameaça
Ameaça é a junção da tríade maléfica: agente, vulnerabilidade e ativo; com o
poder de atingir um ou mais princípios da segurança da informação. A ABNT NBR
ISO/IEC 27002 (2005, p. 3) define ameaça como sendo “a causa potencial de um
incidente indesejado, que pode resultar em dano para um sistema ou organização”.
Outra interessante definição para ameaça é “evento ou atitude indesejável
(roubo, incêndio, vírus, etc.) que potencialmente remove, desabilita, danifica ou destrói
um recurso” (DIAS, 2000 apud Marciano, 2006, p. 47).
Souza (2007) classifica as ameaças como sendo:
a) Naturais: chuvas, incêndios, terremotos, etc.;
b) Intencionais: roubo, vírus, fraudes, etc.; e
c) Involuntárias: erros por falta de conhecimento de usuários, acidentes, etc.
23
2.1.6 Risco
O conceito básico de risco, segundo a ABNT NBR ISO/IEC 27002 (2005, p.
2) é a “combinação da probabilidade de um evento e de suas consequências”, ou seja,
é a probabilidade de uma ameaça ser concretizada gerando danos para a
organização.
Para que o processo de segurança da informação seja eficaz, é necessário
que as organizações façam uma abordagem sistemática de gestão de riscos
adequada ao seu ambiente. Esse processo deve ser contínuo, definindo contextos,
avaliando e tratando riscos, analisando os possíveis acontecimentos e consequências
antes das tomadas de decisões, a fim de que esses riscos sejam reduzidos à níveis
aceitáveis (ABNT NBR ISO/IEC 27005, 2008).
“A avaliação dos riscos permite identificar as ameaças dos ativos, as vulnerabilidades e a sua probabilidade de ocorrência, além de seus impactos sobre a organização. Quanto maior for o conhecimento sobre os riscos, mais fácil será decidir como tratá-los”. (ALVES, 2006, p. 4)
Portanto, a implementação de gestão de riscos com processos adequados à
realidade da organização é imprescindível para garantir à mesma a continuidade do
negócio e consequentemente sua eficácia (ALVES, 2006).
2.2 Sistemas operacionais
Os sistemas computacionais atuais, em sua maioria, são divididos em dois
níveis: hardware e software. O nível de software, por sua vez, é subdividido em modo
núcleo, que é o sistema operacional, e em modo usuário onde estão os programas de
interface com o usuário e os aplicativos (TANENBAUM, 2009).
Alguns autores, subdividem o sistema computacional em quatro partes:
hardware, sistema operacional, programas aplicativos e usuário (SILBERSCHATZ;
GALVIN; GAGNE, 2013).
24
Figura 2 – Visão abstrata dos componentes de um sistema computacional
Fonte: Silberschatz, Galvin e Gagne (2013, p.3)
Conforme pode-se verificar na figura 2, o sistema operacional é a interface
entre o hardware e os programas aplicativos executados pelos usuários. É a camada
de software entre o hardware e os programas (OLIVEIRA, 2010).
Sendo o suporte para os demais softwares, o sistema operacional “controla o
hardware e coordena seu uso pelos diversos programas aplicativos de vários
usuários” (SILBERSCHATZ; GALVIN; GAGNE, 2013, p. 4)
2.2.1 Definição
Diversos autores são unânimes em admitir a dificuldade de se formar uma
definição aceita e padronizada de sistemas operacionais. Em sua maioria, as
definições se confundem em suas funções e objetivos, e quando excluídas, percebe-
se definições bem simplistas e resumidas como a de Tanenbaum (2009, p. 1) que
afirma que o sistema operacional é “a peça mais básica de software e opera em modo
núcleo”. Resumindo mais ainda, o mesmo autor o define como “software que executa
25
em modo núcleo” (TANENBAUM, 2009, p. 2), admitindo, entretanto, que esta
definição nem sempre é verdadeira.
Segundo Silberschatz, Galvin e Gagne (2013, p. 1) “o sistema operacional é
um software que gerencia o hardware do computador” e ainda, “o programa que
permanece em execução no computador durante todo o tempo – geralmente chamado
de kernel” (SILBERSCHATZ; GALVIN; GAGNE, 2013, p. 5).
Uma outra definição escrita por Machado e Maia (2013, p. 3) seria que um
sistema operacional “é apenas um conjunto de rotinas executado pelo processador”.
Mediante a presente dificuldade de definições mais completas, parte-se
portanto, para as funções e objetivos, a fim de se alcançar maior compreensão à cerca
dos sistemas operacionais.
2.2.2 Funções e objetivos
Uma das funções principais dos sistemas operacionais é servir de
intermediário entre o usuário e o hardware, além de fornecer a base para os demais
softwares como os programas aplicativos (SILBERSCHATZ; GALVIN; GAGNE, 2013).
Ele é o gerenciador do hardware, um alocador de recursos, enfim, é quem controla o
funcionamento do computador.
O sistema operacional é responsável pelo acesso aos periféricos; sempre que um programa necessita de algum tipo de operação de entrada e saída, ele a solicita ao sistema operacional. Dessa forma, o programador não precisa conhecer os detalhes do hardware. Informações do tipo “como enviar um caractere a uma impressora” ficam escondidas dentro do sistema operacional. Ao mesmo tempo, como todos os acessos aos periféricos são feitos através do sistema operacional, ele pode controlar qual programa está acessando qual recurso. É possível, então, obter uma distribuição justa e eficiente dos recursos. Por exemplo, a divisão do espaço em disco entre os usuários é feita pelo sistema operacional. Ela pode ser feita considerando-se dois aspectos: e eficiência no acesso ao disco e a ocupação equilibrada do disco pelos usuários. (OLIVEIRA, 2010, p. 22-23)
No entendimento de Silberschatz, Galvin e Gagne (2013, p. 1) “a finalidade
do sistema operacional é fornecer um ambiente em que o usuário possa executar
programas de maneira conveniente e eficiente”.
26
Pode-se então afirmar que, apesar de um sistema operacional possuir
inúmeras funções secundárias, segundo Machado e Maia (2013), são duas as
principais e básicas:
a) Facilidade de acesso aos recursos de sistema; e
b) Compartilhamento de recursos de forma organizada e protegida.
2.2.3 Tipos
Após décadas de evolução dos sistemas operacionais, vários tipos deles
foram desenvolvidos. Muitos dos quais surgiram a partir de melhorias de outros.
Machado e Maia (2013) divide-os em três grupos, em ordem de evolução (figura 3):
a) Sistemas monoprogramáveis/monotarefa: permitem que o processador,
memória e periféricos sejam dedicados exclusivamente a execução de um
único programa;
b) Sistemas multiprogramáveis/multitarefa: permitem que os recursos
computacionais sejam compartilhados entre diversos usuários e
aplicações. São a evolução dos sistemas monoprogramáveis. Dentre eles
podemos destacar os sistemas batch, os sistemas de tempo compartilhado
e os sistemas de tempo real.
c) Sistemas com múltiplos processadores: possuem duas ou mais unidades
centrais de processamento (UCP) interligadas e trabalhando em conjunto.
Permitem que vários programas sejam executados simultaneamente ou
que um único programa seja executado por dois ou mais processadores
ao mesmo tempo. Foram divididos em sistemas fortemente acoplados, que
é caracterizado por possuir vários processadores compartilhando uma
única memória física e dispositivos de entrada e saída sendo gerenciados
por um único sistema operacional, e os fracamente acoplados que
caracterizam-se por possuir dois ou mais sistemas computacionais
conectados, mas cada uma com seu sistema operacional, gerenciando
27
seus próprios recursos e dispositivos e funcionando de maneira
independente.
Figura 3 – Tipos de sistemas operacionais
Fonte: Tanenbaum (2009, p. 15)
Tanenbaum (2009), por sua vez, cita 9 tipos de sistemas operacionais, onde
encontramos, dentre eles, os tipos relacionados anteriormente. São eles:
1) Sistemas operacionais de computadores de grande porte;
2) Sistemas operacionais de servidores;
3) Sistemas operacionais de multiprocessadores;
4) Sistemas operacionais de computadores pessoais;
5) Sistemas operacionais de computadores portáteis;
6) Sistemas operacionais embarcados;
7) Sistemas operacionais de nós sensores;
8) Sistemas operacionais de tempo real; e
9) Sistemas operacionais de cartões inteligentes.
Tipos deSistemas Operacionais
SistemasMonoprogramáveis/
Monotarefa
Sistemascom MúltiplosProcessadores
SistemasMultiprogramáveis/
Multitarefa
28
2.2.3.1 Sistemas operacionais de computadores de grande porte
Estes são os sistemas operacionais que estão no topo; são utilizados em
computadores de centros de dados de grandes corporações que realizam o
processamento simultâneo de muitas tarefas como enormes quantidades de
processos de entrada e saída (TANENBAUM, 2009).
Esses sistemas operacionais, normalmente, oferecem três tipos de serviços: em lote (batch), processamento de transações e tempo compartilhado. Um sistema em lote processa tarefas de rotina sem a presença interativa do usuário. [...] Sistemas de processamento de transações administram grandes quantidades de pequenas transações. [...] Sistemas de tempo compartilhado permitem que múltiplos usuários remotos executem suas tarefas simultaneamente no computador. (TANENBAUM, 2009, p. 20)
Ex.: OS/390, e, atualmente, o Linux.
2.2.3.2 Sistemas operacionais de servidores
Segundo Tanenbaum (2009, p. 21), estes sistemas estão um nível abaixo dos
sistemas de computadores de grande porte, e muitas vezes, também são utilizados
em computadores de grande porte. São comumente utilizados em computadores
pessoais muito grandes e servem múltiplos usuários de uma vez em uma rede,
compartilhando recursos e serviços de hardware e software.
Ex.: Solaris, Linux, FreeBSD e Windows Server 200x.
2.2.3.3 Sistemas operacionais de multiprocessadores
Também conhecido como sistemas paralelos ou sistemas fortemente
acoplados, esse sistema caracteriza-se por ser conectado a múltiplas unidades
centrais de processamento (UCP), trabalhando em conjunto e em perfeita
comunicação (SILBERSCHATZ; GALVIN; GAGNE, 2013).
Segundo Silberschatz, Galvin e Gagne (2013) este tipo de sistema tem três
vantagens principais: aumento da vazão, economia de escala e maior confiabilidade.
29
Devido ao crescimento dos computadores pessoais com chips multinúcleo, o
uso dos sistemas operacionais de multiprocessadores têm a tendência a continuar
crescendo (TANENBAUM, 2009).
Ex.: Windows e Linux.
2.2.3.4 Sistemas operacionais de computadores pessoais
Sistemas amplamente usados e conhecidos, esses sistemas utilizam a
multiprogramação que “permite que vários jobs estejam na memória ao mesmo tempo,
assegurando assim que a CPU sempre tenha um job para executar” (silber, 2013, p.
26).
Ex.: Linux, Vista, IOS
2.2.3.5 Sistemas operacionais de computadores portáteis
São sistemas operacionais para pequenos computadores chamados de
PDA’s (personal digital assistant), e executam funções como telefonia, agenda,
fotografia dentre outros (TANENBAUM, 2009).
Ex.: Symbian, Palm OS.
2.2.3.6 Sistemas operacionais embarcados
Segundo Tanenbaum (2009, p. 21), “sistemas embarcados são executados
em computadores que controlam dispositivos que geralmente não são considerados
computadores e que não aceitam softwares instalados por usuários”, como por
exemplo MP3, celulares, micro-ondas, carros e etc.
Ex: QNX e VxWorks.
30
2.2.3.7 Sistemas operacionais de nós sensores (sensor node)
“Nós” são computadores minúsculos conectados entre si e com uma estação-
base, usados para diversas finalidades como detecção de incêndios, previsão do
tempo, guardar fronteiras, e etc. Cada nó executa se sistema operacional próprio
dirigido por eventos. O sistema é simples e reduzido pois os nós têm pouca RAM
(TANEMBAUM, 2009).
Ex.: TinyOS
2.2.3.8 Sistemas operacionais de tempo real
São sistemas onde suas ações precisam ocorrer em um tempo determinado.
O tempo é o seu parâmetro fundamental. São utilizados em processos industriais, em
linha de montagem de carros, e etc. (TANEMBAUM, 2009).
2.2.3.9 Sistemas operacionais de cartões inteligentes (smart cards)
Estes são os menores sistemas operacionais e são utilizados em cartões
inteligentes. Podem utilizar a multiprogramação se o cartão possuir vários applets
Java para suas funções (TANENBAUM, 2009).
2.2.4 Estrutura
A arquitetura interna de um sistema operacional se dá pela forma com que o
código é organizado e o inter-relacionamento entre seus componentes (Machado,
2013). As principais estruturas abordadas serão: sistemas monolíticos, sistemas de
camadas e microkernel e máquina virtual.
2.2.4.1 Sistemas monolíticos
Esta é a estrutura mais comum onde o “sistema operacional inteiro é
executado como um único programa” (TANENBAUM, 2009, p. 38). O sistema é
formado como um conjunto de rotinas, cada uma com uma interface definida quanto
31
aos parâmetros e resultados, que pode chamar qualquer uma das outras. Essas
rotinas são compiladas separadamente e individualmente e depois linkadas em um
único programa executável (TANENBAUM, 2009).
De acordo com Tanenbaum (2009), as chamadas de sistema geradas pelo
sistema operacional são requisitadas colocando os parâmetros em local bem
definidos, e então executando a instrução de chamada de núcleo (trap), que troca a
máquina de modo usuário para modo núcleo e transfere o controle para o sistema
operacional para que ele determine qual chamada irá executar.
2.2.4.2 Sistemas de camadas
Estrutura na qual o sistema possui camadas sobrepostas, onde os níveis mais
internos são privilegiados. Cada camada oferece um conjunto de instruções que só
podem ser utilizadas pelas camadas superiores (MACHADO; MAIA, 2013).
Machado e Maia (2013) explica que a vantagem dessa estrutura é a
manutenção e a depuração, pois as funções do sistema operacional são isoladas,
além de hierarquizar os níveis de acesso, protegendo as camadas internas. Já a
desvantagem é o seu desempenho.
O sistema THE (Technische Hogeschool Eindhoven) foi o primeiro modelo a
ser criado, vindo posteriormente o MULTICS e o OpenVMS. Atualmente a maioria das
versões do UNIX e Windows são baseados em duas camadas: o modo de acesso
usuário (não privilegiado) e o kernel (privilegiado) (MACHADO; MAIA, 2013).
2.2.4.3 Microkernel
Nesta abordagem, todos os componentes não essenciais do kernel são
removidos do sistema operacional e implementados como programas de sistema de
nível de usuário (SILBERSCHATZ; GALVIN; GAGNE, 2013). O primeiro sistema
operacional desenvolvido a partir desse modelo de arquitetura foi o Mach, que oferecia
basicamente serviços de gerência de processo, gerência de memória, comunicação
32
por troca de mensagens e operações de entrada/saída (E/S), todos em modo usuário
(MACHADO; MAIA, 2013).
A ideia é que a comunicação entre o programa cliente e os diversos serviços
sejam executadas a nível usuário. Essa comunicação é realizada através de
transmissão de mensagens, realizada indiretamente através do microkernel
(SILBERSCHATZ; GALVIN; GAGNE, 2013).
Segundo Machado e Maia (2013), esse modelo de arquitetura permite que as
funções do sistema operacional sejam isoladas por diversos processos servidores
pequenos dedicados a serviços específicos, facilitando a depuração, a extensão,
tornando o núcleo menor e mais confiável. Como a maioria dos serviços são
executados em modo usuário, o sistema se torna mais fácil de dar manutenção, mais
flexível e com maior portabilidade.
Ambos os autores Machado e Maia (2013) e Silberschatz, Galvin e Gagne
(2013) apontam como desvantagem dessa arquitetura o seu desempenho, devido ao
aumento do overhead de funções do sistema. Entretanto, Machado (2013) explica que
este problema usualmente é resolvido combinando a arquitetura de camadas com a
microkernel.
2.2.4.4 Máquina virtual
De acordo com Machado e Maia (2013, p. 55), “o modelo de máquina virtual,
ou virtual machine (VM), cria um nível intermediário entre o hardware e o sistema
operacional, denominado gerência de máquinas virtuais”, onde são criadas várias
máquinas virtuais independentes compartilhando o mesmo hardware disponibilizando
uma cópia virtual do mesmo. Assim, este sistema pode executar diversos sistemas
operacionais concorrentemente, cada um em sua VM, com isolamento total entre eles.
Este modelo surgiu em 1972, com a IBM, e continua sendo utilizado nos dias
atuais, a exemplo do JVM (Java Virtual Machine) (SILBERSCHATZ; GALVIN;
GAGNE, 2013) (MACHADO, 2013).
33
2.3 O sistema GNU/Linux
O sistema GNU/Linux, onde GNU significa GNU’s Not Unix, é um software
livre, multitarefa e multiusuário. Atualmente, a maioria dos usuários referem-se,
erroneamente, ao Linux como sendo o sistema operacional completo, quando na
verdade Linux é somente o kernel (núcleo) do sistema. Quando nos referimos ao
conjunto completo do sistema, o correto é dizer GNU/Linux, que é a combinação dos
programas de sistema e aplicativos (software) que é o GNU, com o kernel que é o
Linux (OLIVEIRA, 2010).
2.3.1 Histórico
O sistema GNU (GNU’s Not Unix), baseado no sistema UNIX, começou a ser
desenvolvido em 1983 por Richard Stallman, fundador da Free Software Foundation
(FSF), em oposição ao obstáculo à cooperação impostos pelos sistemas proprietários
da época, sendo batizado de Projeto GNU (FREE SOFTWARE FOUNDATION, 2014).
O kernel Linux, por sua vez, foi desenvolvido em 1991 pelo estudante
finlandês Linus Torvalds, motivado por uma decepção pessoal com o sistema
operacional MINIX, um sistema pequeno e simples baseado em UNIX, desenvolvido
para fins de estudo por Andrew S. Tanenbaum (OLIVEIRA, 2010).
Em uma entrevista foi perguntado a Linus: “O que o levou a escrever o Linux?”. A resposta foi a seguinte: "Bem, como eu disse, queria um determinado desempenho em casa e o DOS (e o Windows) não me ofereciam isso. Comecei tentando um pequeno clone do Unix, chamado Minix. Eu era capaz de entender algo sobre as coisas que pretendia com ele. Por outro lado, faltava-me a plena funcionalidade do Unix. A simplicidade do Minix (e os problemas de performance do Minix) levaram-me a desejar algo melhor. No entanto, o Unix custava muito e não seria fácil encontrar algo bom sem dinheiro (que eu definitivamente não tinha). Uma versão de Unix razoavelmente boa, com ferramentas de desenvolvimento etc., custava alguns milhares de dólares. Como eu era um estudante pobre e havia usado todo o meu dinheiro para comprar um computador, eu realmente não tinha opção... Mas, como eu conhecia computadores, comecei a fazer um sistema para mim mesmo, e o resto da história todos conhecem" (MOTA FILHO, 2012, p. 72)
O sistema GNU começou seu desenvolvimento pelos aplicativos e não
terminou o kernel (Hurd). No entanto, para o Linux, que é somente o kernel, não foram
34
desenvolvidos os aplicativos para que o sistema pudesse funcionar. Sendo assim, a
união das necessidades dos dois sistemas tornou possível a implementação de um
sistema operacional completo, o GNU/Linux, totalmente difundido e utilizado por todo
o mundo (MOTA FILHO, 2012).
Atualmente, milhares de programadores ajudam no desenvolvimento do
Linux, sendo que Linus Torvald ainda coordena os projetos relacionados ao núcleo,
como uma espécie de gerente geral (OLIVEIRA, 2010).
2.3.2 Distribuições GNU/Linux
Segundo Araújo (2011, p. 5), distribuição GNU/Linux, também chamadas
distros, “são variações do sistema operacional composto pelo núcleo Linux (kernel) e
milhares de aplicativos, cuja base foi desenvolvida pelo projeto GNU”. São conjuntos
de pacotes pré-compilados, que além do sistema básico Linux, também incluem
utilitários de instalação e gerenciamento de sistema, utilizados para facilitar a
instalação. Essas coleções também incluem pacotes pré-compilados de ferramentas
do UNIX, como navegadores web, ferramentas de edição de texto e outros, prontos
para serem instalados (SILBERSCHATZ; GALVIN; GAGNE, 2013).
Atualmente existem centenas de distros, comerciais e não comerciais,
disponibilizadas. Podemos citar dentre elas: o Slackware, umas das primeiras a serem
lançadas, representou grande avanço na qualidade geral das distribuições; o Debian,
distribuição bastante popular que vem da comunidade Linux de software livre; o Red
Hat que também é muito popular e vem de uma empresa de suporte comercial ao
Linux; e o Caldera que também é uma versão Linux suportada comercialmente
(SILBERSCHATZ; GALVIN; GAGNE, 2013).
2.3.3 Debian GNU/Linux
De acordo com Mitre e Solva (2009), o Debian GNU/Linux é uma das mais
antigas distribuições de GNU/Linux (surgiu dois anos depois da criação do kernel
Linux) e foi exclusivamente desenvolvida por programadores voluntários, sendo,
portanto, totalmente não comercial. Mitre e Silva (2009) o descreve como sendo o
35
porto seguro das distros, devido a dois fatores: o primeiro porque o Debian é
administrado por uma fundação não comercial que garante a existência do sistema; e
segundo porque sua versão estável é a que requer mais testes contra falhas e leva
cerca de três anos de uma versão para outra, sendo considerada, portanto, umas das
distribuições mais seguras.
De acordo com o sitio da organização Debian, disponível na internet, o projeto
Debian foi criado em 1993 por Ian Murdock, incialmente patrocinado pela FSF e
influenciados pela filosofia GNU. Contava apenas com um pequeno grupo de
desenvolvedores. Hoje a organização conta com quase mil Debian Developers
envolvidos nas mais diversas áreas de atuação como documentação, manutenção de
pacotes de softwares, administração web, licenças de softwares, design gráficos,
entre outros (DEBIAN, 2013).
Na opinião de Gomes Júnior (2007), a estabilidade, a segurança e a qualidade
do Debian, explica o porquê dessa distro ter sido uma base para o desenvolvimento
de novas distribuições, como por exemplo, o Ubuntu e o Kurumin.
O sitio da organização Debian atribui seu sucesso ao fato de que:
A atenção de Debian para os detalhes permite-nos produzir uma distribuição de alta qualidade, estável e escalável. As instalações podem ser facilmente configuradas para servirem vários papéis, desde firewalls dedicadas a ambientes de trabalho de estações de trabalho científico e até servidores de rede de elevada gama. Debian é especialmente popular entre utilizadores mais avançados devido à sua excelência técnica e ao seu profundo compromisso com as necessidades e expectativas da comunidade Linux. Debian também introduziu muitas funcionalidades a Linux que agora são lugar-comum. Por exemplo, Debian foi a primeira distribuição a incluir um sistema de gestão de pacotes para fácil instalação e remoção de software. Foi também a primeira distribuição de Linux a poder ser substituída por uma versão mais recente sem necessitar de reinstalação. Debian continua a ser líder no desenvolvimento de Linux. O seu processo de desenvolvimento é um exemplo de como pode o modelo de desenvolvimento Open Source funcionar bem — mesmo para tarefas muito complexas tais como construir e manter um sistema operativo completo. A funcionalidade que mais distingue Debian de outras distribuições de Linux é o sistema de gestão de pacotes. Estas ferramentas dão ao administrador de um sistema Debian o controle completo sobre os pacotes instalados nesse sistema, incluindo a possibilidade de instalar um único pacote ou atualizar automaticamente todo o sistema operativo. Pacotes individuais podem também ser protegidos para não serem atualizados. (DEBIAN, 2013)
36
Segundo Mitre e Silva (2009), o Debian GNU/Linux possui três versões de
desenvolvimento, sendo certamente bem mais rigorosas do que seus nomes indicam
ser. São elas:
a) Unstable: versão considerada instável que, mesmo com programas
estáveis, passará por uma série de testes até ser considerada apta para
passar para o próximo nível;
b) Testing: versão posterior à unstable, que é considerara estável pela
grande maioria de pessoas, mas que ainda passará por mais uma série de
testes e certificação de qualidade para passar ao próximo nível;
c) Stable: versão considerada estável pela fundação responsável, que leva
de 1 a 3 anos para ser alcançada.
2.3.4 Sistema de arquivos
Pode-se dizer que o sistema de arquivos é a parte visível do sistema
operacional. Segundo Silberschatz, Galvin e Gagne (2013, p. 231), “ele fornece o
mecanismo de armazenamento e acesso on-line tanto de dados quanto dos
programas de sistema operacional e de todos os usuários do sistema de computação”.
O modelo de organização do sistema de arquivos do Linux é uma árvore
hierarquizada com uma estrutura única contendo todas as informações relativas ao
sistema de arquivos, onde cada nó dessa árvore pode representar um arquivo,
diretório, ou um dispositivo de entrada/saída (OLIVEIRA, 2010).
Outra característica importante é que para haver interação entre as aplicações
e os diferentes sistemas de arquivos, o Linux trabalha com uma camada de software
que oculta os detalhes de implementação dos arquivos, isolando o sistema de
arquivos real e criando uma interface de um sistema de arquivos genérico, que seria
o que o usuário “enxerga”. Essa é uma abordagem utilizada por outros sistemas UNIX
e é denominada VFS (Virtual File System) (TANENBAUM, 2009) (OLIVEIRA, 2010).
37
Tanenbaum (2009, p. 486) explica que o VFS “define um conjunto de
abstrações básicas do sistema de arquivos e as operações que são permitidas nessas
abstrações”, e ainda que o VFS suporta quatro estruturas principais de sistemas de
arquivos:
1) Superbloco: sistema de arquivos inteiro; contém as informações críticas
sobre a organização do sistema de arquivos;
2) I-nodes: arquivo individual; descreve exatamente um arquivo;
3) Dentry: representa uma entrada de diretório; componente único de um
caminho;
4) Arquivo: arquivo aberto associado a um processo.
Para cada um desses quatro objetos, o VFS define conjuntos de operações,
e cada um deles contêm um ponteiro para funções no sistema de arquivos real que
está implementado abaixo do VFS (TANENBAUM, 2009).
2.3.4.1 Estrutura básica
O primeiro sistema de arquivo do Linux foi o MINIX 1, que devido às limitações
relacionadas ao nome dos arquivos (podiam ter somente 14 caracteres), e ao tamanho
máximo do arquivo (64Mb) evoluiu para o ext (sistema de arquivos estendido) que
permitia nomes e tamanhos de arquivos maiores. Esse sistema de arquivo logo foi
substituído pelo ext2 (segundo sistema de arquivos estendido), o qual foi amplamente
utilizado e é o mais popular atualmente, segundo Tanenbaum (2009).
A estrutura básica do ext2 é o bloco. Quando se inicializa uma partição com o
ext2, esta é dividida em grupos de blocos que poderão conter os dados ou
informações de controle do próprio sistema de arquivos. O número total de grupos de
blocos em uma partição ext2 depende do tamanho definido para cada bloco e do
tamanho da partição (TANENBAUM, 2009) (OLIVEIRA, 2010).
38
Figura 4 – Organização de disco do sistema de arquivos ext2 do Linux
Fonte: Tanenbaum (2009, p. 487)
Os i-nodes são a parte da estrutura do sistema de arquivo que é alvo de nosso
interesse para esse trabalho, pois nele estão contidas as informações sobre
contabilidade, que são as informações retornadas pela chamada de sistema stat
(TANENBAUM, 2009).
Alguns dos campos do i-node estão demonstradas na tabela 2 a seguir:
Tabela 2 – Alguns campos na estrutura de i-nodes do Linux
Campo Bytes Descrição
Mode 2 Tipo do arquivo, bits de proteção, setuid, bits setgid
Nlinks 2 Número de entradas no diretório apontando para esse i-node
Uid 2 UID (número de identificação do proprietário do arquivo)
Gid 2 GID (número de identificação do grupo do arquivo)
Size 4 Tamanho do arquivo em bytes
Atime 4 Hora do último acesso ao arquivo
Mtime 4 Hora da última modificação do arquivo
Ctime 4 Hora da última alteração do i-node (exceto as outras vezes)
Fonte: Tanenbaum (2009, p. 489)
2.3.4.2 Segurança no Linux – Permissões
Cada usuário registrado no sistema Linux possui um número de identificação
(ID) único denominado UID, um inteiro entre 0 e 65.535. Além do UID, os usuários
também podem possuir um ID de um ou mais grupos de usuários ao qual está
39
associado, o GID, que também são inteiros de 16 bits. Esta associação é feita pelo
administrador do sistema (TANENBAUM, 2009).
Cada arquivo ao ser criado é marcado pelo UID e o GID do seu proprietário.
Além disso, esse arquivo carrega as permissões que determinam quais os tipos de
acesso que o proprietário, o grupo e os demais usuários têm sobre ele. Cada uma
dessas três categorias de usuários possui três tipos de acesso, leitura (r), escrita (w)
e execução (x), que são representados por 3 bits por categoria. Sendo assim, cada
arquivo possui 9 bits que representam os direitos de acesso das categorias de
usuários (TANENBAUM, 2009).
Os 3 primeiros bits da cadeia de 9 bits representam os direitos do proprietário,
os 3 segundos do grupo e os últimos para os demais usuários. O bit 1 é usado para
permitir o acesso e o 0 para negar. Sendo assim, se o proprietário do arquivo possui
permissão para ler, escrever e executar (rwx) um arquivo, os três primeiros bits da
cadeia serão 111. Mas se tiver permissão somente para ler (r) a representação dos
bits será 100.
Para melhor compreensão das permissões, Tanenbaum os exemplificou na
tabela 3, apresentada a seguir.
Tabela 3 – Alguns exemplos de modos de proteção de arquivos
Binário Simbólico Acessos permitidos ao arquivo
111000000 rwx------ O proprietário pode ler, escrever e executar
111111000 rwxrwx--- O proprietário e o grupo podem ler, escrever e executar
110100000 rw-r----- O proprietário pode ler e escrever; o grupo pode ler
110100100 rw-r--r-- O proprietário pode ler e escrever; todos os outros podem ler
111101101 rwxr-xr-x O proprietário pode fazer qualquer coisa; os demais podem ler e
executar
000000000 --------- Ninguém tem nenhum tipo de acesso
000000111 ------rwx Somente usuários de fora têm acesso (estranho, mas possível)
Fonte: Tanenbaum (2009, p. 496)
40
Como no Linux os diretórios e os dispositivos de entrada e saída (E/S) também
são considerados arquivos, também possuem os mesmos mecanismos de proteção,
diferenciando apenas os diretórios, onde o x refere-se à permissão de busca e não de
execução (TANENBAUM, 2009).
Segundo Tanenbaum (2009, p. 496), “o usuário com o UID igual a 0 é
especial, chamado de superusuário (ou root). O superusuário tem o poder de ler e
escrever todos os arquivos do sistema, não importando quem sejam os proprietários”.
2.3.5 Estrutura de diretórios
Como foi visto anteriormente, o sistema de arquivos do Linux é hierárquico,
portanto, os arquivos são agrupados em diretórios e cada diretório pode possuir
subdiretórios (TANENBAUM, 2009). Os diretórios do GNU/Linux são estruturados de
acordo com as definições do Filesystem Hierarchy Standard (FHS), onde o diretório
raiz é chamado “/”. De acordo com Russel (2004), na tabela 4 pode-se verificar os
principais diretórios do GNU/Linux.
Tabela 4 – Principais diretórios do GNU/Linux
Diretório Conteúdo
/bin Arquivos binários essenciais usados com frequência pelo usuário
/boot Arquivos de inicialização do sistema
/dev Arquivos dos dispositivos de hardware
/etc Arquivos de configuração do sistema
/lib Bibliotecas compartilhadas e módulos kernel
/media Ponto de montagem para mídia removível
/mnt Ponto de montagem temporário para o sistema de arquivos
/opt Pacotes de aplicativos adicionais
/sbin Binários essenciais utilizados pelo superusuário
/srv Dados dos serviços providos pelo sistema
/tmp Arquivos temporários
/usr Hierarquia secundária
/var Dados variáveis
41
/home Diretórios e arquivos de usuário
/root Diretórios e arquivos do superusuário
Fonte: Russel (2004)
2.4 Criptografia
A criptografia consiste em converter um texto claro em um texto ininteligível
(cifrado), utilizando, para isso, um algoritmo criptográfico e uma chave. A intenção é
que somente o destinatário da mensagem, de posse dessa chave, possa retorná-lo
novamente ao texto em claro. Segundo Stallings (2008), a criptografia é um dos
mecanismos mais importantes na segurança das redes e comunicações atualmente,
sendo utilizada em assinaturas digitais, certificações, autenticações, verificações de
integridade de dados, na garantia da confidencialidade das informações e etc.
Stallings (2008) explica que os sistemas criptográficos são caracterizados por
três pontos:
a) O tipo de operação usada para cifrar o texto: por substituição, onde cada
elemento do texto é substituído, ou por transposição, onde o texto é
reorganizado;
b) O número de chaves usadas na cifragem e decifragem: simétrica, onde
uma única chave é utilizada para cifrar e decifrar, e assimétrica, onde é
utilizada uma chave para cifrar e outra para decifrar;
c) O modo como o texto é processado: de bloco, onde o processamento é
feito em blocos de entrada e saída, ou de fluxo, que é processado
continuamente elemento a elemento.
2.4.1 Criptografia simétrica
A criptografia simétrica caracteriza-se pela utilização de uma chave única para
cifrar e decifrar uma mensagem.
42
Segundo Tanenbaum (2009), o algoritmo simétrico amplamente utilizado em
aplicações civis nos Estados Unidos atualmente é o Data Encryption Standard (DES)
que, devido a este já ser considerado inseguro por ser possível descobrir a chave com
recursos computacionais modernos, foi modificado para o Triple-DES, que é o DES
aplicado três vezes. Dentre outros algoritmos utilizados atualmente pode-se destacar
o AES e o Blowfish.
Esse tipo de criptografia é utilizado para garantir a confidencialidade das
informações, tendo como vantagem o desempenho e como principal desvantagem a
insegurança na distribuição das chaves.
2.4.2 Criptografia assimétrica
A criptografia assimétrica, diferente da simétrica, utiliza duas chaves no
processo de cifragem e decifragem: uma chave pública para cifrar e uma chave
privada para decifrar a mensagem.
Além de garantir a confidencialidade, atualmente a criptografia assimétrica é
bastante utilizada para garantir a autenticidade e o não-repúdio, sendo aplicada em
assinaturas digitais e certificações. Outra aplicação para a criptografia assimétrica é
na distribuição de chaves simétricas, onde a chave utilizada para cifrar a mensagem
é cifrada assimetricamente, garantindo assim uma maior segurança na troca de
mensagens.
Apesar desse método resolver o problema da distribuição de chaves da
criptografia simétrica, tem como desvantagem o desempenho, devido ao fato de
aumentar consideravelmente o tamanho da mensagem ao cifrá-la. Por isso as
aplicações mais utilizadas são as citadas anteriormente e não a de cifrar a mensagem
propriamente dita (STALLINGS, 2008).
Os algoritmos mais utilizados atualmente são o RSA, o Diffie-Hellman e o El
Gamal.
43
2.4.3 Funções hash
Funções hash são algoritmos que aplicam diferentes entradas a uma função
matemática unidirecional, gerando uma saída única para cada entrada, de formatos e
tamanhos sempre iguais, denominada hash (STALLINGS, 2008)..
As funções hash são normalmente utilizadas para verificar a integridade das
informações, sendo que em segurança de sistemas operacionais Linux, é utilizada na
detecção de intrusão ao verificar a integridade dos arquivos binários.
Os algoritmos hash mais conhecidos são o MD5 e o SHA, com suas variações
SHA-1, SHA-256, SHA-384 e SHA-512.
2.4.3.1 O algoritmo MD5
O algoritmo MD5 (message digest), é uma função de hashing que recebe
como entrada em bloco de mensagem de 512 bits e produz um valor de saída de 128
bits. Este algoritmo foi desenvolvido por Ron Rivest em 1991, em resposta às
vulnerabilidades reportadas em relação ao seu antecessor, o MD4 (OLIVEIRA, 2011).
2.4.3.2 O algoritmo SHA
O algoritmo de hash seguro, mais conhecido como Secure Hash Algorithm
(SHA), foi desenvolvido em 1994 pelo NIST (National Institute of Standards and
Technology) nos Estados Unidos. Este algoritmo, que também foi baseado na função
de hash MD4(Message Digest), retorna um valor de hash de 160 bits, que por ser
considerado um valor de saída relativamente pequeno e, por conseguinte, inseguro,
foram criadas novas versões com saídas de valores maiores, como o SHA-256, SHA-
384 e SHA-512 com tamanho de valor de hash de 256, 384 e 512 bits,
respectivamente (STALLINGS, 2008).
O SHA-256, assim como o MD5, que são os algoritmos utilizados neste
trabalho, recebe como entrada um bloco de mensagem de 512 bits e produz uma
saída de 256 bits, o que a torna mais segura contra colisões.
44
2.5 Python
A linguagem Python, que foi desenvolvida a partir de 1990 pelo holandês
Guido Van Rossum, é uma linguagem de alto nível, interpretada e orientada à objetos,
de sintaxe simples, clara e concisa, que possui “uma vasta coleção de módulos
prontos para uso, além de frameworks de terceiros que podem ser adicionados”.
(BORGES, 2010).
Python apresenta semântica dinâmica, um moderno mecanismo de tratamento de erros e exceções, e flexibilidade no tratamento de argumentos. Possui uma forma eficiente de acesso, e reutilização de código com o uso dos chamados “módulos”, coleta de lixo automática, recursos avançados de manipulação de textos, listas e dicionários. Em Python, diferentemente de C++ ou Java, as funções são tratadas como objetos, característica de linguagens de programação funcional como o Lisp. Por ser programado em C, ser livremente distribuído e ter código aberto, Python oferece grande portabilidade. (SILVA, p. 5, 2003)
Atualmente, a linguagem Python vem crescendo bastante, sendo utilizadas
em indústrias de alta tecnologia, como a Google, Yahoo, Microsoft, e outras. Por esse
fato, esta foi a linguagem escolhida para o desenvolvimento deste trabalho.
2.6 O padrão SQL
SQL (Structured Query Language) é uma linguagem de acesso para Sistemas
Gerenciadores de Banco de Dados (SGBD) Relacionais, desenvolvida em 1986, a
partir da necessidade de se especificar padrões para as linguagens de acesso
(COSTA, 2006).
Esta linguagem de acesso à SGBD pode ser dividida em duas sub-linguagens:
a DML (Data Manipulation Language) que trata dos comandos ligados à manipulação
de dados, como inserir, alterar, excluir e selecionar; e a DDL (Data Definition
Language), que trata dos comandos de criação e estruturas de banco de dados, como
tabelas, índices e etc. (COSTA, 2006)
Para este trabalho, foi utilizado o SQLite, uma ferramenta que utiliza os
comandos da linguagem SQL para a manipulação e armazenamento de dados sem a
necessidade de um SGDB.
45
CAPÍTULO III
3. O APLICATIVO “ISYS”
Com o surgimento diário de novas técnicas de ataque e intrusão que buscam
sistematicamente encontrar vulnerabilidades em sistemas computacionais, a fim de
explorá-las, tornou-se imprescindível a confecção de ferramentas capazes de
monitorar e identificar possíveis rastros dessas intrusões. São programas como este
que possibilitarão a eficácia no processo de garantia da segurança da informação.
Em sistemas baseados em UNIX, umas das técnicas muito utilizadas
atualmente pelos atacantes é a instalação de rootkits, que nada mais são do que
versões modificadas de comandos, como o netstat, ls, crontab, e etc., que substituem
as versões originais. Eles conseguem omitir processos e logs para manter o invasor
oculto no sistema, de modo que possa agir sem ser identificado pelo administrador
(STEDING-JESSEN; MURILO, 2001).
Como para se instalar em um sistema UNIX um invasor necessita alterar
alguns binários desse sistema, umas das formas de auxiliar na detecção de invasores
e malwares é fazer a análise de metadados e verificar a integridade do sistema de
arquivos.
O aplicativo ISYS foi projetado exatamente para isso. É uma ferramenta HIDS
(Host-Based Intrusion Detection System) que verifica a integridade dos binários dos
sistemas UNIX, através da comparação de hashs do sistema de arquivos, e da análise
de alterações efetuadas nos metadados desses arquivos, tais como, alterações nas
permissões, datas de criação, último acesso e modificações, inodes, dentre outros.
Além disso, o aplicativo ISYS oferece suporte à perícia forense
computacional, ao armazenar, em base de dados, os logs das alterações ocorridas
nos binários do sistema de arquivos, gerando, portanto, material para possíveis
auditorias.
46
3.1 Posicionamento
3.1.1 Oportunidade de negócio
O sistema é uma ferramenta útil para organizações civis, militares e
governamentais, empresas e usuários finais, porque auxilia na detecção de ataques
e intrusões, permitindo assim, a garantia da segurança da informação e,
consequentemente, a continuidade do negócio.
3.1.2 Descrição do problema
A dificuldade de detectar intrusões e malwares, como por exemplo os rootkits,
é um dos problemas enfrentados atualmente pelos administradores de sistemas e
security officers. Essa dificuldade atinge os pilares da segurança da informação como
a confidencialidade, integridade, disponibilidade, autenticidade, privacidade, dentre
outros.
A solução proposta é o desenvolvimento de uma ferramenta que auxilie na
detecção mais rápida daqueles ataques, de forma a reagir com eficácia a esses,
garantindo a segurança e a continuidade do negócio.
3.1.3 Principais características do produto
O aplicativo ISYS é uma ferramenta HIDS que verifica a integridade de
sistemas de arquivos baseados em Linux. O produto contém:
a) Verificação de integridade dos arquivos através da análise de hash;
b) Análise de modificações nos metadados dos arquivos;
c) Geração de logs de alterações no sistema de arquivos; e
d) Envio de relatórios por e-mail para o administrador.
47
3.1.4 Principais envolvidos
3.1.4.1 Usuários do sistema
Os usuários do sistema serão os administradores que utilizem sistemas
baseados em Linux e security officers que possuam conhecimento avançado do
sistema operacional. Eles farão a instalação do sistema através de linhas de comando
e receberão os logs de alterações efetuadas no sistema operacional. Também
poderão efetuar a verificação da integridade do sistema manualmente.
3.1.4.2 Desenvolvedores
Os desenvolvedores devem ser programadores com conhecimento da
linguagem Python, SQL e conhecimento do sistema operacional Linux. Os
desenvolvedores farão a coleta dos requisitos necessários para o desenvolvimento da
ferramenta e para a sua documentação.
3.1.4.3 Alternativas e concorrências
Já existem algumas ferramentas de verificação de integridade atualmente.
Algumas delas são comerciais e outras são softwares livres. As mais conhecidas são:
Tripwire, AIDE, OSSEC e o Samhain.
3.1.5 Restrições
O sistema deverá armazenar um grande volume de informações em bases de
dados e efetuar periodicamente a verificação da integridade dos arquivos, o que
acarretará perda de desempenho momentâneo do sistema operacional, sendo
necessária a sua instalação em hardware compatível.
Sempre que houver uma alteração legítima nos binários do sistema, será
necessário gerar uma nova base de dados para posterior comparação.
48
A base de dados deverá ser gerada a partir de um sistema operacional íntegro
e não comprometido, pois uma base de dados já comprometida acarretaria em
resultados falsos e não confiáveis.
3.1.6 Dependências
A máquina onde será instalado o aplicativo ISYS deverá possuir um sistema
operacional GNU/LINUX, além de possuir a instalação do Python e do SQLite.
3.2 Requisitos do sistema
Os requisitos do sistema definem suas principais ações, funcionalidades e
características.
3.2.1 Requisitos funcionais
1) ER a. F. 01 - No ato da instalação, gerar os dados de origem do sistema e
armazenar em uma base de dados;
2) ER a. F. 02 - Garantir a autenticidade da base de dados;
3) ER a. F. 03 - Verificar a integridade dos arquivos binários do sistema,
periodicamente;
4) ER a. F. 04 - Armazenar os logs das verificações;
5) ER a. F. 05 - Enviar os relatórios das verificações para o administrador do
sistema por e-mail;
6) ER a. F. 06 - Atualizar a base de dados sempre que houver alteração
legítima do sistema de arquivos;
7) ER a. F. 07 - Permitir a verificação manual da integridade dos arquivos.
49
3.2.2 Requisitos não-funcionais
a) A instalação, configuração e verificações manuais do sistema será por
linhas de comando efetuados no shell do sistema;
b) A base de dados e os arquivos de consulta deverão estar com permissão
somente de leitura;
c) O sistema deverá ser instalado em hardware com boa capacidade de
armazenamento e processamento;
d) A base de dados deverá ser assinada digitalmente;
e) A base de dados deverá ser tirada de um sistema íntegro e confiável.
3.3 Processos
Os processos do aplicativo ISYS estão divididos em quatro, sendo cada um
deles subdivididos em mais etapas. São eles:
a) Instalação da ferramenta;
b) Verificação automática do sistema de arquivos;
c) Verificação manual do sistema de arquivos;
d) Atualização da base de dados.
3.3.1 Processo de instalação da ferramenta
No processo de instalação, o primeiro passo é rodar o arquivo de instalação
que irá gerar os bancos de dados, as chaves assimétricas e o arquivo de configuração.
Após esse passo deverá ser alterado no arquivo de configuração os campos onde
50
contém o servidor SMTP, os e-mails de origem e destino, o nome dos bancos de
dados e a lista de diretórios que serão protegidos.
A base de dados é gerada a partir dos arquivos importantes do sistema de
arquivos, tais como, os arquivos de configuração, os executáveis, bibliotecas, arquivos
dos dispositivos de hardware e etc. Por default a lista de diretórios são: /etc, /bin, /sbin,
/lib, /usr/bin, /usr/sbin e /usr/lib.
As informações (metadados) desses arquivos são coletadas através da
função stat(), e são elas: tamanho do arquivo (size), as permissões (mode), o inode,
endereço do inode (dev), número de ligações do inode (nlinks), ID do usuário (uid), ID
do grupo do usuário (gid), data da última modificação (mtime), data do último acesso
(atime) e data da última modificação dos metadados (ctime). Além destas
informações, o sistema gera um hash para cada arquivo e o armazena para futuras
comparações.
Após a configuração, o administrador deverá seguir os seguintes passos:
1. Gerar a base de dados origem;
2. Colocar o banco de dados origem em modo leitura;
3. Colocar o arquivo com as chaves em modo leitura; e
4. Colocar o arquivo com a assinatura em modo leitura.
A garantia da base de dados confiável é um ponto crucial para a eficácia do
sistema. Por isso, o ideal é que ele seja instalado em um sistema operacional novo,
pois é difícil afirmar, com total segurança, que um sistema já em funcionamento está
totalmente íntegro e confiável. O sistema ainda gera uma assinatura digital para a
base de dados, onde o hash da base de dados é gerado com o algoritmo SHA-256 e
criptografado utilizando o algoritmo assimétrico RSA (2048 bits), de modo a reforçar a
autenticidade e a integridade do mesmo quando na verificação.
51
A base de dados, chaves e assinatura, devem ser armazenados com
segurança, de modo a não ser corrompida pelo atacante. Por isso, os passos de
passá-los para o modo leitura são de extrema importância e não devem ser
negligenciados. Uma opção, também, seria armazená-los em uma mídia removível.
Após aqueles passos, o administrador deverá agendar a execução da
verificação automática com o cron, para que a verificação seja periódica e diária.
Na figura 5, pode-se visualizar as etapas desse processo.
Figura 5 – Processo de instalação do aplicativo ISYS
52
3.3.2 Processo de verificação automática do sistema
O processo de verificação automática é realizado periodicamente, conforme
agendado pelo administrador.
Esse processo passa por quatro etapas: verificação de arquivos novos;
verificação de arquivos alterados; verificação de arquivos deletados; e envio de
relatório ao administrador.
As quatro etapas estão descritas a seguir.
3.3.2.1 Verificação de arquivos novos
Esse processo inicia-se com a criação de uma cópia da base de dados origem
para comparação. Essa cópia, denominada “tabela compara”, é criada com um campo
a mais onde os arquivos serão marcados como processados. Esse campo será útil
para a verificação de arquivos deletados.
Após esse passo, o sistema faz a verificação da assinatura digital da base de
dados. Caso o mesmo esteja comprometido, a verificação é encerrada, caso esteja
íntegro, o sistema faz a coleta dos dados atuais do sistema de arquivos para o início
da comparação.
A cada arquivo coletado, o sistema faz uma busca na “tabela compara” para
verificar se o arquivo existe na base de dados. Caso o encontre, o sistema prossegue
para a próxima etapa. Caso não, o sistema gera um log de arquivo novo na tabela
relatório contendo todas as informações do arquivo, com data e horário da verificação.
A figura 6 descreve esta etapa.
54
3.3.2.2 Verificação de arquivos alterados
Após a confirmação de que o arquivo existe na base de dados, o sistema
passa para a comparação dos metadados e dos hashs. As informações que não
coincidirem serão armazenadas nos logs com o nome do arquivo, local, a informação
anterior, a informação atual e a data e horário da verificação.
Segue a figura 7 que demonstra essa verificação.
Figura 7 – Processo de verificação – Etapa 2
3.3.2.3 Verificação de arquivos deletados
Nesta etapa, o sistema busca na “tabela compara” os arquivos que não foram
processados, e ao detectá-los, armazena como arquivo deletado, todas as
informações desses arquivos, juntamente com a data e horário, na tabela de logs
(figura 8).
55
Figura 8 – Processo de verificação – Etapa 3
3.3.2.4 Envio de relatório ao administrador
Após a conclusão das etapas anteriores, o sistema encerra o processo, e
busca na tabela de logs todos os registros inseridos na última verificação e os envia,
em formato HTML, para o e-mail do administrador configurado inicialmente (figura 9).
Figura 9 – Envio de relatório – Etapa 4
56
3.3.3 Processo de verificação manual do sistema
Este processo é idêntico ao anterior, diferindo somente no fato de que o
administrador do sistema é quem realiza o início da verificação através da linha de
comando digitada no shell do sistema.
Ao digitar este comando, o sistema inicia a verificação seguindo todas as
etapas definidas no processo de verificação automática do sistema:
1. Verificação de arquivos novos;
2. Verificação de arquivos alterados;
3. Verificação de arquivos deletados; e
4. Envio de relatório ao administrador.
3.3.4 Processo de atualização da base de dados
Este processo será necessário todas as vezes que forem efetuadas
alterações legítimas no sistema de arquivo, para que o processo de verificação seja
bem-sucedido. Caso contrário o sistema perderá a confiabilidade gerando falsos-
positivos.
Para iniciá-lo, o administrador irá digitar a linha de comando correta no shell
do sistema operacional, onde o sistema gerará uma nova base de dados com uma
nova assinatura digital. Ambos, novamente deverão ser armazenados em modo leitura
ou em mídia removível.
Para este processo não será necessária a geração de novas chaves, caso
este que deverá ser realizado somente no possível comprometimento das mesmas.
Nesse caso, o aconselhável é proceder a recuperação de todo o sistema de arquivos
e a reinstalação total do aplicativo.
57
3.4 Documentação
3.4.1 Diagramas de casos de uso
O aplicatico “ISYS” não opera com entrada e saída de dados, portanto tem
somente três casos de uso:
a) Caso de uso Instalar_Aplicativo;
b) Caso de uso Verificar_Manual.
c) Caso de uso Atualizar_Database
O caso de uso Instalar_Aplicativo refere-se à instalação da ferramenta na
estação e o ator envolvido neste caso de uso é o administrador do sistema.
O caso de uso Verificar_Manual refere-se à verificação da integridade do
sistema de arquivos efetuada manualmente. Neste caso, bem como no anterior, o ator
envolvido também é o administrador do sistema. Também neste caso de uso, o único
ator envolvido é o administrador do sistema.
O caso de uso Atualizar_Database refere-se à atualização da base de dados,
sempre que ocorrer alterações legítimas no sistema de arquivos.
3.4.2 Descrição dos atores
3.4.2.1 [Administrador do sistema]
Este ator é uma pessoa que atua no sistema na instalação e configuração do
mesmo, e na verificação manual da integridade do sistema de arquivos. Ele também
atuará na atualização da base de dados em caso de alterações legítimas no sistema
de arquivos.
58
3.4.3 Detalhamento dos casos de uso
3.4.3.1 UC[01] – [Instalar_Aplicativo]
Figura 10 – Diagrama de caso de uso UC01 - Instalar_Aplicativo
Nome da Use Case Instalar_Aplicativo
Descrição Trata da instalação do aplicativo na estação e envolve as principais etapas que são o preenchimento dos arquivos de configuração, cópia dos binários para as pastas específicas e criação da base de dados.
Requisitos Associados
ER a. F. 01, ER a. F. 02
Pré Condições A estação deve possuir o programa Python e o SQLite instalados, e o sistema de arquivos deve estar confiável.
Pós Condições O sistema deve retornar em tela as etapas concluídas
Atores Administrador do sistema
Fluxo Principal
Ações Recebidas Ações Realizadas (Sistema)
1. O administrador inicia a instalação.
4. O administrador preenche o arquivo de configuração.
5. O administrador inicia a geração da base de dados origem
2. O aplicativo gera os bancos de dados e o arquivo de configuração.
3. O aplicativo retorna as etapas concluídas.
6. O aplicativo gera a base de dados, cria as chaves assimétricas e assina a base de dados.
7. O sistema retorna em tela que a instalação foi efetuada.
Fluxo Exceção
Ações Recebidas Ações Realizadas
1. O administrador inicia a instalação. 2. O aplicativo retorna mensagem de erro na instalação e encerra.
Quadro 01 - Fluxo de Eventos do Use Case [Instalar_Aplicativo]
59
3.4.3.2 UC[02] – Verificar_Manual
Figura 11 – Diagrama de caso de uso UC02 - Verificar_Manual
Nome da Use Case Verificar_Manual
Descrição Trata da verificação manual da integridade do sistema de arquivos, onde envolve a ação de inicializar a verificação
Requisitos Associados
ER a. F. 04, ER a. F. 05, ER a. F. 07
Pré Condições O aplicativo deve estar instalado corretamente.
Pós Condições O aplicativo deve gerar os logs da verificação.
Atores Administrador do sistema
Fluxo Principal
Ações Recebidas Ações Realizadas (Sistema)
1. O administrador inicia a verificação 2. O aplicativo gera uma cópia da base de dados origem e verifica se está integra.
3. O aplicativo começa a leitura do sistema de arquivos atual e as comparações.
4. O aplicativo verifica se há arquivos novos e gera os logs da verificação.
5. O aplicativo verifica se os arquivos existentes foram alterados e gera os logs.
6. O aplicativo verifica se existem arquivos que foram deletados e gera os logs.
7. O aplicativo envia os logs ao administrador
Fluxo Exceção
Ações Recebidas Ações Realizadas
1. O administrador inicia a verificação 2. O aplicativo retorna mensagem de erro na verificação e encerra o processo
Quadro 02 - Fluxo de Eventos do Use Case [Verificar_Manual]
60
3.4.3.3 UC[03] – Atualizar_Database
Figura 12 – Diagrama de caso de uso UC03 - Atualizar_Database
Nome da Use Case Atualizar_Database
Descrição Trata da atualização da base de dados, das chaves e assinatura em caso de alterações legítimas no sistema de arquivos
Requisitos Associados
ER a. F. 06
Pré Condições O aplicativo deve estar instalado corretamente.
Pós Condições O aplicativo retorna mensagem de etapas concluídas
Atores Administrador do sistema
Fluxo Principal
Ações Recebidas Ações Realizadas (Sistema)
1. O administrador inicia a atualização
2. O aplicativo executa gera nova base de dados.
3. O aplicativo cria novas chaves assimétricas e assina a base de dados.
4. O aplicativo retorna em tela que a atualização foi efetuada.
Fluxo Exceção
Ações Recebidas Ações Realizadas
1. O administrador inicia a atualização
2. O aplicativo retorna mensagem de erro na atualização e encerra o processo
Quadro 03 - Fluxo de Eventos do Use Case [Atualizar_Database]
61
3.4.4 Diagramas de sequência
3.4.4.1 Diagrama de sequência do caso de uso UC 01 – Instalar_Sistema
Figura 13 – Diagrama de sequência do caso de uso UC 01
62
3.4.4.2 Diagrama de sequência do caso de uso UC 02 – Verificar_Manual
Figura 14 – Diagrama de sequência do caso de uso UC 02
63
3.4.4.3 Diagrama de sequência do caso de uso UC 03 – Atualizar_Database
Figura 15 – Diagrama de sequência do caso de uso UC 03
64
3.4.5 Diagrama de atividades
3.4.5.1 Diagrama de atividades Verificar_Automatica
Figura 16 – Diagrama de atividades Verificar_Automatica
65
3.4.6 Diagramas de componentes
3.4.6.1 Diagrama de componentes Aplicativo_ISYS
Figura 17 – Diagrama de componentes Aplicativo_ISYS
3.5 Prova de conceitos
3.5.1 Tela do conteúdo do pacote do aplicativo ISYS
Nesta tela é apresentado o conteúdo do pacote do aplicativo, como os
arquivos e pastas do software.
66
Figura 18 – Tela do conteúdo do pacote do aplicativo ISYS
3.5.2 Tela de execução da instalação
Nesta tela é apresentado a execução do arquivo de instalação, onde são
gerados as chaves, o arquivo de configuração e os bancos de dados origem e de
comparação.
Figura 19 – Tela de instalação do sistema ISYS
3.5.3 Tela de execução da primeira carga da base de dados
Nesta tela é apresentada a execução da primeira carga da base de dados, o
armazenamento no banco origem e a assinatura digital do banco origem.
Figura 20 – Tela da execução da primeira carga
67
3.5.4 Tela de execução da verificação manual do sistema
Nesta tela é apresentada a execução da verificação acionada manualmente
pelo administrador, onde o sistema verifica que a base de dados está íntegra e inicia
a comparação.
Figura 21 – Tela da execução da verificação manual
3.5.5 Tela de preenchimento do arquivo de configuração
Nesta tela são apresentados os campos para preenchimento do arquivo de
configuração. Os campos já estão preenchidos como exemplo.
Figura 22 – Tela do arquivo de configuração
68
3.5.6 Tela de logs enviados por e-mail
Nesta tela são apresentados os logs gerados pelo aplicativo e enviado por e-
mail ao administrador.
Figura 23 – Tela de log enviado por e-mail ao administrador
3.5.7 Tela do banco de dados origem
Nesta tela são apresentados os dados armazenados na primeira carga, no
banco de dados origem.
Figura 24 – Tela do banco de dados origem
69
CAPÍTULO IV
4 CONCLUSÃO
Diversas impressões puderam ser retiradas ao final deste projeto. De início
pôde-se perceber a fragilidade da segurança da informação frente aos avanços no
desenvolvimento de ferramentas de ataque aos sistemas computacionais. Como o
crescimento desenfreado de novas tecnologias, produtos, sistemas e aplicações que
mantêm a todos conectados a uma única rede global tem feito com que, a cada dia,
mais usuários com menos conhecimentos e interesse em protegerem-se sejam
adeptos a elas, expondo suas informações pessoais e compartilhando-as a quem tiver
interesse, tornando-as vítimas do ciberataque.
Constatou-se que, mesmo com o desenvolvimento das mais seguras técnicas
de detecção e combate a ataques e intrusões de malwares em sistemas, e o
investimento diário na produção de novas ferramentas de auxílio à segurança,
contudo elas sozinhas não serão suficientes para manter as pessoas e as
organizações seguras contra o cibercrime. A segurança da informação envolve
softwares, hardwares, documentação (leis, regulamentos e políticas de segurança), e
pessoas conscientizadas da sua necessidade. Cada um desses pontos, tem seu papel
fundamental e primordial na gestão da segurança.
Como apenas uma parte no processo de segurança da informação, uma
proposta de ferramenta de apoio a este processo foi apresentada neste trabalho, mas
conclui-se que ainda há muito a se trabalhar para alcançar resultados mais efetivos.
A melhoria nos processos criptográficos da ferramenta é uma das áreas a
serem trabalhadas. Outra importante evolução na ferramenta será a sua adaptação
para a arquitetura cliente-servidor, sendo sua aplicação para múltiplos hosts, e sua
base de dados criptografadas e armazenadas em estações servidoras.
Outra medida a ser tomada é a implantação de bibliotecas com informações
sobre os malwares que possivelmente estarão invadindo o sistema, onde a ferramenta
70
poderá detectar o tipo de malware que o está atingindo e, consequentemente,
melhorará a capacidade de reação ao ataque.
Pretende-se ainda adicionar à ferramenta a capacidade de restauração do
sistema de arquivos ao ponto anterior ao seu comprometimento, tornando-a, não
somente uma ferramenta de detecção, mas também de bloqueio e combate às
intrusões.
Estas são as pretensões para os trabalhos futuros. Contudo, para hoje, fica a
conclusão da etapa pretendida, que é a implementação de uma ferramenta útil e
eficaz.
Fica também, a satisfação do aprendizado e do crescimento do conhecimento.
Fica a certeza de que um degrau a mais foi alcançado no quesito saber. Fica o
despertar de uma nova visão à respeito dos sistemas computacionais e da
necessidade da sua segurança. E fica ainda, o desafio na continuidade deste
processo.
71
REFERÊNCIAS BIBLIOGRÁFICAS
ALVES, Gustavo Alberto. Segurança da Informação – Uma Visão Inovadora da
Gestão. Rio de Janeiro: Ciência Moderna, 2006.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR ISO/IEC 27002. ABNT
NBR ISO/IEC 27002:2005. “Tecnologia da Informação – Técnicas de Segurança –
Código de prática para a gestão da segurança da informação”. Primeira edição. Rio
de Janeiro: ABNT, 2005.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR ISO/IEC 27005. ABNT
NBR ISO/IEC 27005:2008. “Tecnologia da Informação – Técnicas de Segurança –
Gestão de riscos de segurança da informação”. Primeira edição. Rio de Janeiro:
ABNT, 2008.
BORGES, Luiz Eduardo. Python para desenvolvedores. 2 ed. Rio de Janeiro:
Edição do autor, 2010.
CENTRO DE ESTUDOS, RESPOSTA E TRATAMENTO DE INCIDENTES DE
SEGURANÇA NO BRASIL. Site oficial. Brasília: 2014. Disponível em
<http://www.cert.br>. Acesso em: 06 nov. 2014.
COSTA, Rogério Luis de C. SQL: guia prático. 2 ed. Rio de Janeiro: Brasport, 2006.
DEBIAN. Guia de Instalação Debian GNU/Linux. Disponível em:
<https://www.debian.org/releases/stable/amd64/index.html.pt >. Acesso em: 11 nov.
2014.
FERREIRA, Fernando Nicolau Freitas. Segurança da Informação. Rio de Janeiro:
Ciência Moderna, 2003.
FREE SOFTWARE FOUNDATION, Inc. O sistema operacional GNU. Disponível em:
<https://www.gnu.org/gnu/gnu-history.html>. Acesso em: 10 nov. 2014.
72
GOMES JUNIOR, Antonio. A computação pessoal e o sistema operacional Linux:
utilizando Debian GNU/Linux 4.0. Guariba: 2007.
LYRA, Maurício Rocha. Segurança e Auditoria em Sistemas de Informação. Rio
de Janeiro: Ciência Moderna, 2008.
MACHADO, Francis Berenger; MAIA, Luiz Paulo. Arquitetura de sistemas
operacionais. Rio de Janeiro: LTC: 2013.
MARCIANO, João Luiz Pereira. Segurança da informação – Uma abordagem
social. Brasília: UNB, 2006.
MITRE, João Felipe; SILVA, Luiz Fernando Lopes Rodrigues. Introdução ao
GNU/Linux. Disponível em: <https://code.google.com/p/introducaoaognulinux>.
Acesso em: 10 nov. 2014.
MOTA FILHO, João Eriberto. Descobrindo o Linux: entenda o sistema operacional
GNU/Linux. São Paulo: Novatec Editora, 2012.
OLIVEIRA, Rômulo Silva de. Sistemas Operacionais. 4 ed. Porto Alegre: Bookman:
Instituto de Informática da UFRGS, 2010.
OLIVEIRA, Thomaz Eduardo de Figueiredo. Implementação em software de
algoritmos de resumo criptográfico. Disponível em: <
http://www.bibliotecadigital.unicamp.br/document/?code=000802943> Acesso em: 05
dez. 2014
RUSSEL, Rusty; QUINLAN, Daniel; YEOH, Christopher. Filesystem Hierarchy
Standard. Disponível em: <https://www.debian.org/doc/packaging-manuals/fhs/fhs-
2.3.html>. Acesso em: 11 nov. 2014.
SÊMOLA, Marcos. Gestão da Segurança da Informação: visão executiva da
segurança da informação. Rio de Janeiro: Campus Editora, 2003.
73
SILBERSCHATZ, Abraham; GALVIN, Peter Baer; GAGNE, Greg. Fundamentos de
sistemas operacionais: princípios básicos. Rio de Janeiro: LTC, 2013.
SILVA, Alexandre Gonçalves. Ambiente de suporte ao ensino de processamento
de imagens usando a linguagem Python. Disponível em:
<http://www.bibliotecadigital.unicamp.br/document/?code=vtls000290727>. Acesso
em: 06 dez. 2014.
SOUZA, Ranieri Marinho de. Implantação de ferramentas e técnicas de segurança
da informação em conformidade com as normas ISO 27001 e ISO 17799.
Campinas: PUC-Campinas, 2007.
STALLINGS, William. Criptografia e segurança de redes. 4 ed. São Paulo: Pearson
Prentice Hall, 2008.
STEDING-JESSEN, Klaus; MURILO, Nelson. Métodos para Detecção Local de
Rootkits e Módulos de Kernel Maliciosos em Sistemas Unix. In: Simpósio sobre
Segurança em Informática (SSI'2001), 3., 2001, São José dos Campos. Anais... São
José dos Campos, SP, 2001. p. 133-139. Disponível em:
<http://www.chkrootkit.org/papers/chkrootkit-ssi2001.pdf >. Acesso em: 05 dez. 2014
TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3 ed. São Paulo:
Pearson Prentice Hall, 2009.
VESICA, Fabricio. Desvendando o universo H4CK3R. São Paulo: Digerati Books,
2007.
74
GLOSSÁRIO
CPU: Unidade central de processamento ou processador. Componente de um sistema
computacional que executa as instruções de um programa de computador.
Cron: Recurso do Linux que permite o agendamento de tarefas
GNU: Sistema Operacional padrão UNIX.
Hardware: Componente físico de um sistema computacional.
Inode: Número de nó i exclusivo de um arquivo, que é uma estrutura de dados que
contém informações sobre ele.
Job: Tarefa executada pelo sistema operacional
Kernel: Núcleo central de um sistema operacional.
Malware: Programa malicioso com o intuito de roubar informações ou prejudicar os
sistemas computacionais.
Metadados: São os dados ou informações que descrevem um arquivo, tais como
permissões, datas de acesso e modificação, inode, etc.
Rootkit: Tipo de malware que esconde sua presença ou a presença de outro malware
no sistema tornando-se difícil de detectar.
Shell: Intérprete de linhas de comando dos sistemas operacionais.
Software: Componente lógico de um sistema computacional.
Trap: Uma interrupção síncrona no processamento em função da instrução que está
sendo executada.
75
APÊNDICE A
Manual do administrador
1. Instalação
O sistema ISYS deverá ser instalado em sistemas operacionais GNU/Linux.
Antes da instalação do sistema o administrador deverá instalar o Python e o SQLite.
Passos para instalação:
a) Executar ISYS_instala
b) Realizar a configuração do arquivo de configuração:
[Diretorios] #exemplos de preenchimento binarios = /bin, /etc, /lib binarios administrativos = /sbin binarios da Árvore secundária = /usr/bin , /usr/sbin binarios administrativos da Árvore secundária = /usr/sbin [Arquivos de banco] #poderão ser alterados origem = var/db/ISYS_origem.db temporario = var/db/ISYS_temp.db [Conta de mail] #deverão ser alterados addr_to = emailderecebimento@servidor.com addr_from = emaildeenvio@servidor.com smtp_server = servidor de email smtp_server_port = porta user_smtp = emaildeenvio@servidor.com