76
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

FERRAMENTA DE VERIFICAÇÃO DE INTEGRIDADE DE …nippromove.hospedagemdesites.ws/anais_simposio/arquivos_up/... · RESUMO Este trabalho tem como objetivo a implementação de uma

  • Upload
    trandan

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

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.

EPÍGRAFE "Transportai um punhado de terra todos os dias e fareis uma montanha." Confúcio

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.

53

Figura 6 – Processo de verificação – Etapa 1

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 = [email protected] addr_from = [email protected] smtp_server = servidor de email smtp_server_port = porta user_smtp = [email protected]

76

pass_smtp = senha subject = Logs verificacao ISYS #pode ser alterado

c) Executar o ISYS_exec

d) Agendar no cron

2. Verificação manual

a) Executar ISYS_compara

3. Atualização da base de dados

a) Executar o ISYS_exec