windows 2000 e linux: um estudo comparativo no...

85
Abril de 2003 Alexandre Marinho Ferreira [email protected] Windows 2000 e Linux: um estudo comparativo no contexto de segurança informática lógica Alexandre Marinho Ferreira

Upload: lytuyen

Post on 31-Aug-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Abril de 2003

Alexandre Marinho Ferreira [email protected]

Windows 2000 e Linux:

um estudo comparativo no contexto

de segurança informática lógica

Alexandre Marinho Ferreira

Abril de 2003

Windows 2000 e Linux:

um estudo comparativo no contexto de segurança informática lógica

Windows 2000 e Linux: um estudo comparativo no contexto de segurança informática lógica

Por

Alexandre Filipe da Costa Marinho de Oliveira Ferreira

Orientador

Professor Doutor Feliz Ribeiro Gouveia

Monografia apresentada à Universidade Fernando Pessoa como parte dos requisitos para

Obtenção do grau de Licenciado(a) em Engenharia da Comunicação

- I -

Resumo

Este trabalho descreve os modelos de segurança lógica dos Sistemas Operativos Windows

2000 e Linux (Red Hat 8), bem como as respectivas vulnerabilidades e medidas de protecção

associadas. É igualmente feita uma análise crítica a um sistema de detecção de intrusão, para

Linux, com a finalidade de propor uma melhoria no modelo de segurança apresentado. Não

existindo sistemas de detecção de intrusão gratuitos para o Windows 2000, optou-se por

efectuar somente o teste em Linux. No entanto, o princípio de utilização do sistema de

detecção de intrusão pode ser transposto para o Windows 2000.

É feita inicialmente uma contextualização ao tema que incide nas áreas referidas, expondo os

principais aspectos de segurança lógica existentes nestes dois sistemas operativos. Desta

forma pretende-se fornecer ao leitor uma ideia clara do modelo de segurança lógica do

Windows 2000 e do Linux. Seguidamente apresenta-se uma exposição das principais

vulnerabilidades encontradas nos dois sistemas operativos, bem como das contramedidas

propostas, permitindo ao leitor generalizar os conceitos expostos para as vulnerabilidades

lógicas de sistemas operativos em geral. De modo semelhante, ser- lhe-á possível entender que

procedimentos existem para prevenção geral de ataques à segurança lógica de sistemas

operativos, através da generalização dos métodos de prevenção enunciados.

É igualmente feita uma análise à implementação de um sistema de detecção de intrusão (IDS)

para demonstrar como a segurança lógica poderá ser melhorada. Pretende-se definir a

importância de sistemas de detecção de intrusão na segurança dos sistemas operativos em

geral, utilizando como exemplo prático um IDS para Linux.

Com este trabalho espera-se mostrar ao leitor que segurança lógica existe no Windows 2000 e

no Linux, permitindo-lhe a comparação de acordo com as suas necessidades, bem como

fornecer- lhe os passos necessários para melhorar essa segurança, generalizando os métodos e

as técnicas estudados neste trabalho, de forma a poder aplicá- los em áreas de investigação de

segurança lógica semelhantes.

- II -

Aos meus Pais

- III -

Agradecimentos

Agradeço a todos que, directa ou indirectamente, me ajudaram na realização deste trabalho.

Particularmente, agradeço aos meus pais por tudo que fizeram por mim até hoje, pelo

incentivo e ajuda que me deram e aos quais dedico esta monografia.

Ao professor Feliz Ribeiro Gouveia por todo o apoio e orientação prestadas, não só no que

concerne à execução deste trabalho, mas também durante a frequência do curso e nas

actividades realizadas no CEREM.

A todos os discentes e docentes, que pela sua ajuda, apoiaram-me todos estes anos, para

chegar até este ponto. Em especial aos professores Nuno Ribeiro e José Vasconcelos, pelos

contributos prestados na revisão desta monografia.

- IV -

Índice

1 INTRODUÇÃO.................................................................................................................6

1.1 OBJECTIVOS .................................................................................................................7 1.2 MOTIVAÇÃO ................................................................................................................7 1.3 RESTRIÇÕES .................................................................................................................7 1.4 ESTRUTURA DO DOCUMENTO .......................................................................................8

2 WINDOWS 2000 E LINUX.............................................................................................9

2.1 BREVE HISTORIAL DO WINDOWS .................................................................................9 2.2 BREVE HISTORIAL DO LINUX .....................................................................................11 2.3 SEGURANÇA LÓGICA NO WINDOWS 2000..................................................................12

2.3.1 A Active Directory ............................................................................................12 2.3.2 Contas de utilizadores ......................................................................................16 2.3.3 Acesso a recursos .............................................................................................19 2.3.4 Sistema de Ficheiros .........................................................................................22 2.3.5 Comunicações...................................................................................................27 2.3.6 Criptografia – a PKI.........................................................................................29 2.3.7 Disponibilidade e Fiabilidade ..........................................................................32

2.4 SEGURANÇA LÓGICA NO LINUX .................................................................................35 2.4.1 Arquitectura do Sistema operativo...................................................................35 2.4.2 Contas de utilizadores e acesso a recursos ......................................................37 2.4.3 Sistema de Ficheiros .........................................................................................40 2.4.4 Comunicações...................................................................................................43 2.4.5 Disponibilidade e Fiabilidade ..........................................................................47

3 VULNERABILIDADES E MEDIDAS DE PROTECÇÃO........................................49

3.1 ESTOURO DE PILHA – BUFFER OVERFLOW .................................................................51 3.2 DIVULGAÇÃO EXCESSIVA DE INFORMAÇÃO...............................................................55 3.3 VULNERABILIDADES DE REDE....................................................................................59 3.4 VULNERABILIDADES DE ELEVAÇÃO DE PRIVILÉGIOS..................................................60 3.5 CONTRAMEDIDAS PRÁTICA S PROPOSTAS ...................................................................63

4 SISTEMAS DE DETECÇÃO DE INTRUSÃO ...........................................................68

4.1 IMPLEMENTAÇÃO DE IDS ..........................................................................................71

5 CONCLUSÃO.................................................................................................................76

6 BIBLIOGRAFIA ............................................................................................................78

7 ANEXOS..........................................................................................................................81

- V -

Índice de figuras

Figura 1 – Vista geral do Windows versão 1.0 ..........................................................................9 Figura 2 – Exemplo de um GPO local (Desligar o Sistema) ...................................................15 Figura 3 – Vista geral de uma DACL com as respectivas ACEs. ...........................................20 Figura 4 – Diagrama do Modelo OSI Cliente – Servidor. .......................................................27 Figura 5 – Os componentes mais importantes do nucleo (kernel) do Linux e a sua integração no sistema (adaptado do Linux System Administrator’s Guide). .............................................36 Figura 6 – Diagrama da organização um sistema de ficheiros de uma distribuição Linux Redhat.......................................................................................................................................40 Figura 7 – Exemplo de comunicações cifradas de correio electrónico via SSH. ....................47 Figura 8 – Arquitectura do LIDS (adaptado do Security at Kernel Level)..............................73

Introdução

- 6 -

1 Introdução

A segurança informática tem um papel vital na actualidade da gestão dos Sistemas de

Informação, pois a informação é frequentemente um bem de valor inestimável nas

organizações. Portanto, por diversas razões de natureza económica, de vantagem competitiva,

de estratégia e de planeamento, existe uma necessidade de assegurar a segurança e integridade

desse bem.

Na vertente lógica, a obscuridade de certos aspectos da segurança informática, relega-os para

segundo plano. Este trabalho, descrevendo um estudo comparativo entre dois sistemas

operativos informáticos, o Microsoft Windows 2000 e o Linux (Red Hat 8), no contexto de

segurança informática, analisa os aspectos da segurança informática, nomeadamente as áreas

de controlo de utilizadores, sistema de ficheiros, comunicações, criptografia, fiabilidade e

disponibilidade. O trabalho enumera igualmente medidas para melhorar a segurança destes

sistemas operativos.

A escolha destes dois sistemas operativos é motivada pelo facto de representarem, por si só,

mais de 50% do mercado de sistemas operativos de rede, com especial incidência nos

servidores ligados à Internet (Netcraft, 2002).

Para efectuar a pesquisa necessária, e expor e fundamentar os conceitos mais relevantes, são

igualmente analisadas publicações de entidades com reconhecida competência e

independência na área de Segurança Informática, tais como o Computer Emergency Response

Team / Coordination Center (CERT/CC)1, publicações da Microsoft e publicações de autores

da comunidade Linux.

É igualmente executada a implementação simples de um IDS num ambiente simulado e feita

uma descrição crítica das suas funcionalidades. Tendo em conta as limitações de dimensão

deste trabalho, e o facto da bibliografia pesquisada demonstrar que esta tecnologia se encontra

mais madura no mundo UNIX, aliado ao facto de não existirem IDS gratuitos para Windows

2000, não foi realizada nenhuma implementação de IDS para este sistema.

1 Disponível em http://www.cert.org/

Introdução

- 7 -

1.1 Objectivos

O objectivo principal deste trabalho é fornecer ao leitor uma indicação clara sobre os modelos

e medidas de segurança dos dois sistemas operativos (SOs), de forma a auxiliar a escolha, e

permitir selecionar o SO que melhor se adapte às suas necessidades de segurança informática.

Adicionalmente, pretende-se fazer uma introdução aos sistemas de detecção de intrusão (IDS)

como medidas fundamentais para melhorar a segurança lógica destes sistemas operativos, e

analisar a implementação de um IDS para Linux.

1.2 Motivação

As motivações do autor deste trabalho prendem-se com o facto de utilizar e administrar estes

dois sistemas operativos no Centro de Estudos e Recursos Multimediáticos da Universidade

Fernando Pessoa, centro de investigação ao qual está ligado. Possui também um interesse a

nível profissional e académico desde há vários anos pela Segurança Informática, e

administração de sistemas operativos, particularmente do Linux, tendo vindo a adquirir deste

modo conhecimento útil para as funções que desempenha, e que venha a desempenhar no

futuro.

1.3 Restrições

As tarefas relacionadas com o projecto desta monografia foram desenvolvidas ao longo de um

ano pelo autor, e não devem, de forma alguma, ser consideradas como um exame exaustivo

ou completo a todas as funcionalidades de segurança oferecidas pelos dois operativos, bem

como a todas as vulnerabilidades encontradas, pois a área de pesquisa não só é mais vasta do

que área abrangida pelo autor, como se encontra também em constante evolução. No entanto,

esta investigação focalizou-se nos aspectos mais relevantes encontrados durante o período de

realização do trabalho, em termos dos modelos de segurança analisados, de vulnerabilidades e

de medidas de protecção.

A utilização de produtos de segurança (o IDS analisado) limitou-se aos produtos disponíveis

gratuitamente, devido a restrições de ordem económica, razão pela qual não foi testado

nenhum IDS para Windows 2000.

Introdução

- 8 -

1.4 Estrutura do documento

No segundo capítulo faz-se uma contextualização do tema. Descreve-se o historial dos dois

sistemas operativos cronologicamente e de forma sucinta, após o que se identifica e descreve

áreas e tópicos de estudo na segurança informática dos dois sistemas operativos. De seguida

estabelece-se uma relação entre os tópicos de estudo definidos e os modelos de segurança dos

dois sistemas operativos estudados.

No terceiro capítulo estuda-se as principais vulnerabilidades que afectam estes sistemas

operativos, sendo descrito um conjunto de medidas especificas para os prevenir. Este capítulo

é concluído com um resumo de medidas específicas de segurança a implementar nos dois

sistemas operativos.

No quarto capítulo descreve-se a implementação de um sistema de detecção de intrusões no

sistema operativo Linux. Faz-se igualmente uma análise crítica das funcionalidades e da

utilização deste sistema.

Finalmente no quinto capítulo tece-se um conjunto de conclusões do trabalho realizado.

Windows 2000 e Linux

- 9 -

2 Windows 2000 e Linux

Nas seguintes secções é descrito o historial dos dois sistemas operativos, e é feita a descrição

do modelo de segurança lógica do Windows 2000 e a descrição do modelo de segurança

lógica do Linux.

2.1 Breve historial do Windows

A Microsoft iniciou o desenvolvimento do Interface Manager (mais tarde formalmente

conhecido como Windows) em Setembro de 1981. Os primeiros protótipos usavam apenas

menus no fundo do ecrã, mas em 1982 a interface foi modificada para passar a usar menus e

caixas de diálogo.

A Microsoft anunciou finalmente este Sistema Operativo em Novembro de 1983, tendo sido

lançado oficialmente em Novembro de 1985. A figura 1 mostra o aspecto inicial do primeiro

Windows.

Figura 1 – Vista geral do Windows versão 1.0

Windows 2000 e Linux

- 10 -

Posteriormente seguiram-se outras versões do Windows. No entanto, no contexto deste

trabalho, os antecessores do Windows 2000 têm origem no Windows NT (New Technology)

3.1, lançado em Julho de 1993, cujo projecto de desenvolvimento foi iniciado em 1988.

Os objectivos principais deste sistema operativo eram a robustez, a fiabilidade e a segurança.

Este último aspecto consistia basicamente na autenticação dos utilizadores, e num novo

sistema de ficheiros que permitia o acesso controlado aos mesmos, o NTFS (NT File System).

Na versão seguinte (Windows NT 3.5), lançada em Setembro de 1994, foi adicio nado o

suporte nativo para redes TCP/IP. No ano seguinte, a versão 3.51 adiciona o suporte para

aplicações Windows 95. Estas versões suportam igualmente a portabilidade multiplataformas:

funcionam não apenas em plataformas Intel, mas também em Alpha, MIPS e PowerPC. Esta

estratégia de portabilidade foi abandonada posteriormente em detrimento da plataforma Intel.

Em 1996 a versão 4.0 surge no mercado, e apresenta um suporte para a Internet através do seu

servidor Web (IIS – Internet Information Server).

Finalmente, em Fevereiro de 2000 surge o sistema operativo que é objecto de estudo deste

trabalho, o Windows 2000, também conhecido como Windows NT 5.0. No âmbito da

segurança, as principais características deste sistema operativo são:

? cifragem de dados nas partições NTFS (EFS- Encrypted File System, a analisar

posteriormente),

? suporte para processamento distribuído (clustering),

? e a mais importante, a Active Directory, um serviço de directórios de rede (distribuído

e orientado a objectos) que contém o registo de software, hardware e utilizadores do

sistema, que será igualmente analisado neste trabalho.

Windows 2000 e Linux

- 11 -

O Windows 2000 teve no ano seguinte uma nova versão, o Windows XP. Trata-se

basicamente do Windows 2000, versão cliente (chamada Professional), com um novo

interface do utilizador completamente redesenhado.

2.2 Breve historial do Linux

O Linux2 surgiu em 1991, por iniciativa individual de Linus Torvalds, um estudante de

Ciências de Computação da Universidade de Helsínquia. Tratava-se de um sistema operativo

clone UNIX (semelhante à norma POSIX) gratuito, derivado de MINIX, um outro UNIX

gratuito da época, usado essencialmente para fins didácticos e académicos (Mourani, 2001, p.

18).

Sendo inicialmente um passatempo pessoal (as expectativas do autor sobre o projecto eram

limitadas), o Linux tornou-se gradualmente num projecto cooperativo de software que

actualmente envolve milhares de pessoas espalhadas pelo globo.

A nível comercial, o Linux foi distribuído em conjuntos de software por empresas ligadas a

esse tipo de vendas, tais como a RedHat3, Suse ou a Debian, que obtiveram respostas bastante

positivas junto dos utilizadores.

Com o advento da Internet e das empresas em linha, na segunda metade da década de 90, o

meio empresarial descobriu o Linux, tendo-o utilizado em estratégias de implementação de

soluções de hardware de custo reduzido4.

Actualmente o desenvolvimento do Linux mantém a orientação original, com contribuições

individuais dos utilizadores, grupos de utilizadores e mais recentemente com o suporte

empresarial [9].

Em 1999 a Red Hat torna-se a primeira companhia com produtos baseados em Linux a ser

comercialmente bem sucedida. Em Dezembro desse ano, a Linuxcare, uma empresa pioneira

2 Disponível em http://www.linux.org 3 Disponível em http://www.redhat.com/ 4 Ver, por exemplo http://www.hp.com/wwsolutions/linux/

Windows 2000 e Linux

- 12 -

em serviços Linux, anuncia alianças com gigantes do sector informático, tais como a IBM, a

Dell, a Motorola e a Informix.

A tabela apresentada em anexo contém uma lista ordenada cronologicamente de versões de

sistemas operativos directa ou indirectamente relacionados com o Windows 2000 e com o

Linux, incluindo os acontecimentos históricos mais relevantes em relação a estes dois

sistemas operativos.

2.3 Segurança Lógica no Windows 2000

A segurança lógica no Windows 2000 é implementada a vários níveis, incluindo controlo de

utilizadores, sistema de ficheiros, comunicações, criptografia e fiabilidade/disponibilidade.

As secções que se seguem analisam as diferentes características do modelo de segurança

lógica deste sistema operativo.

2.3.1 A Active Directory

O modelo de segurança lógica do Windows 2000 baseia-se na Active Directory. A Active

Directory (AD) é um serviço de directórios de rede orientado a objectos (utilizadores,

hardware e software) que permite o registo e controlo dos mesmos (Sweet et al., 2000). A AD

permite:

? Manter um registo dos elementos que o sistema possui.

? Especificar quais são as permissões de acesso aos elementos, as permissões que esses

elementos têm sobre outros, e o controlo de comunicações entre eles.

? Realizar o controlo dos sistemas de autenticação e comunicação no sistema.

? Efectuar o controlo da optimização do sistema.

Windows 2000 e Linux

- 13 -

Todas as outras características de segurança do Windows 2000 utilizam, directa ou

indirectamente, a Active Directory.

Do ponto de vista lógico, é feita uma abordagem completamente orientada a objectos sobre o

sistema a implementar. O sistema implementado é constituído por domínios, organizados

hierarquicamente em árvores. Esta hierarquia tem influência sob a forma como a segurança é

implementada. Um domínio é constituído por um conjunto de objectos que partilham

necessidades de segurança semelhantes ou iguais. Um domínio pode ainda ser dividido em

unidades organizacionais (OUs). As OUs são subconjuntos de objectos com as mesmas

necessidades administrativas (grupos administrativos).

Considerando o exemplo prático de uma multinacional com sede nos Estados Unidos, e filiais

na Europa e Japão, poderemos ter uma árvore de 3 domínios diferentes, correspondentes às

regiões em causa, um conjunto de OUs correspondentes às cidades europeias em que a

empresa esta implantada, ou ainda outro conjunto de OUs correspondentes aos departamentos

da filial de Tóquio (por exemplo, contabilidade, marketing, recursos humanos e I&D).

Se a multinacional for um grupo de empresas com actividades, investimentos e objectivos

diferentes, poderemos ter ainda um agrupamento de árvores de domínios, em que cada árvore

corresponde a uma empresa diferente. Este agrupamento hierárquico de árvores é designado

por floresta. As florestas têm grande importância na concepção e implementação físicas de

sistemas complexos, pois tratam-se de estruturas que ainda fazendo parte da mesma

organização, possuem necessidades de segurança completamente diferentes e cuja

organização interna é igualmente diferente. Contudo, nem todas as organizações têm a

necessidade destas estruturas lógicas complexas.

De uma forma geral quanto maior for o grau de complexidade estrutural da organização,

maior será a complexidade lógica da AD a implementar e maior será a necessidade de

existência de árvores de domínios e florestas.

A AD é muito flexível do ponto de vista de concepção lógica do sistema, pois permite realizar

a organização lógica do sistema do modo desejado. Para o exemplo prático da multinacional

existe uma variedade enorme de concepções, consoante a perspectiva do engenheiro de

Windows 2000 e Linux

- 14 -

sistemas que a executa. A abordagem geral usada consiste numa análise descendente

semelhante à utilizada em análise de sistemas, com a diferença que neste caso já nos

encontramos na fase da concepção lógica, sendo as características mais relevantes do sistema

já conhecidas.

Do ponto de vista físico, a AD é uma base de dados armazenada por todos os controladores de

domínio do sistema que é replicada de forma regular entre si (com regras de replicação pré-

estabelecidas). Um controlador de domínio é um computador que desenvolve um conjunto de

actividades especiais do sistema, das quais se destaca o controlo de acesso a recursos e

privilégios de utilizadores.

Na fase de concepção física do sistema, a AD permite definir a um nível mais específico as

relações entre os objectos, que incluem, por exemplo, permissões, autenticação e cifragem

inter máquinas, entre outros aspectos.

Em muitos casos, as tarefas da concepção física são de facto, auxiliadas pela AD. Por

exemplo, a localização dos diferentes tipos de servidores, e as inter relações existentes são

críticas nos aspectos de segurança lógica. Estas características podem ser directamente

definidas pela AD. Estas definições (ver figura 2) são conhecidas por políticas de grupo

(Group Policies). Quando são aplicadas a utilizadores ou computadores, são elas próprias

objectos da AD, conhecidos por objectos de políticas de grupo (Group Policy Objects -

GPOs) (Sweet et al., 2000).

Os GPOs são os objectos mais importantes do ponto de vista de segurança lógica no Windows

2000, pois permitem definir todos os aspectos a nível de permissões que cada utilizador pode

ter, desde o acesso a recursos do sistema operativo até recursos de software ou hardware

presentes no sistema.

Windows 2000 e Linux

- 15 -

Figura 2 – Exemplo de um GPO local (Desligar o Sistema)

Os perfis de configuração de segurança (Security Configuration Templates) (Deupree Jr. et

al., 2000, mod. 5) estão intimamente relacionados com os GPOs. Os perfis consistem numa

representação, em forma de ficheiro, de uma configuração de segurança a ser aplicada a um

computador local, ou a ser importada para um GPO.

Os perfis incluem as configurações de:

? políticas de contas (parâmetros associados às contas de utilizadores),

? grupos restritos (forçar a inclusão de certos utilizadores em determinados grupos),

? sistema de ficheiros (controle da segurança e controle da auditoria de segurança de

ficheiros e directórios),

Windows 2000 e Linux

- 16 -

? registo do sistema (controle da segurança e da auditoria de segurança de chaves de

registo e respectivas subarvores),

? serviços do sistema,

? politicas de chave pública (gestão de certificados),

? politicas IPsec na AD (de cliente, servidor e servidor seguro),

? gestão do registo de eventos, e

? políticas locais.

De seguida vão ser descritas algumas destas configurações.

2.3.2 Contas de utilizadores

O Windows 2000 é um sistema operativo multi-utilizador. Isto significa que vários

utilizadores podem usar o sistema e respectivos recursos em simultâneo, pelo menos de forma

aparente do ponto de vista dos utilizadores. A utilização simultânea de recursos só é realmente

possíve l recorrendo a soluções mais avançadas de hardware, e da sua gestão, como por

exemplo, a utilização de sistemas multiprocessador que permitem de facto a existência de um

ambiente real multitarefa (ou seja, a distribuição de tarefas pelos diferentes processadores

simultaneamente).

Para a implementação a nível de segurança lógica do conceito de multi-utilizadores, o

Windows 2000 utiliza a noção de contas de utilizadores e as funcionalidades de gestão que lhe

estão associadas.

Uma conta de utilizador é caracterizada por um registo numa base de dados, que pode residir

localmente no próprio computador (também conhecida por SAM - Security Accounts

Manager). Se a conta é local, reside na própria máquina e estamos perante um grupo de

Windows 2000 e Linux

- 17 -

trabalho. Uma conta pode, em alternativa, fazer parte da Active Directory (descrita na secção

seguinte) desde que a conta pertença a um domínio.

No Windows 2000 é possível escolher entre dois modelos de rede alternativos: O modelo de

grupo de trabalho (Workgroup) ou o modelo de domínio.

Um grupo de trabalho é um modelo simples de rede no qual os utilizadores, nas suas próprias

estações de trabalho, participam num grupo com outros utilizadores para partilharem recursos.

O utilizador com privilégios suficientes de administração de cada computador é responsável

pela atribuição de permissões de acesso ao seu computador, pelos restantes participantes do

grupo (Sheldon, 1997).

Um domínio é um agrupamento lógico de computadores ligados em rede, que partilham uma

área em comum para armazenar informação, usando permissões de segurança semelhantes.

Tem as vantagens de possuir um método de identificação único para validar todos os

utilizadores, uma única conta para cada utilizador aceder aos recursos, gestão centralizada do

sistema e fácil escalabidade (Johnston et al., 2000).

Mais especificamente um domínio permite uma organização lógica do sistema mais adequada

às necessidades do gestor do sistema. O domínio permite a organização fácil de recursos, a

localização mais fácil da informação (uma consequência directa da vantagem anterior), e a

delegação da gestão de tarefas, ou de áreas específicas do domínio, em outros utilizadores,

para além do administrador do domínio (Johnston et al., 2000). O modelo de domínio é, na

realidade, um modelo avançado de grupo de trabalho.

Existem ainda as contas predefinidas que são criadas durante a instalação do Windows 2000

ou da Active Directory. São exemplos a conta de administrador e a conta de convidado

(guest). Estas contas podem ser locais ou de domínio.

Independentemente do tipo de conta, existe um conjunto de atributos que são comuns a todas

as contas. O username, a palavra-chave, a descrição da conta e o nome completo do utilizador

são alguns desses atributos.

Windows 2000 e Linux

- 18 -

As contas fazem ainda parte de um ou mais grupos. Os grupos de utilizadores (ou grupos de

contas) são importantes quando se quer atribuir o mesmo conjunto de permissões a um

conjunto de utilizadores, que podem nada ter em comum, excepto uma utilização semelhante

dos mesmos recursos. Assim, os grupos existem nomeadamente para facilitar as tarefas de

gestão de utilizadores especialmente quando o número de utilizadores e a dimensão do

sistema são consideráveis.

De forma análoga às contas, existem vários tipos de grupos de utilizadores. Os grupos podem

ser locais, específicos a uma máquina, ou podem ser de domínio. Os grupos locais existem

apenas no computador em que são criados. Os grupos de domínio, pertencem a um ou mais

domínios, dependo esse aspecto do âmbito que lhes é atribuído na sua criação.

O âmbito de um grupo de domínio pode ser um dos seguintes:

? Global: este âmbito é usado para os utilizadores que possuam requisitos de acesso à

rede semelhantes. Os recursos a aceder podem estar localizados em qualquer domínio,

mas as contas de utilizadores e os próprios grupos globais, só podem pertencer ao

domínio onde foram criados. Grupos globais podem ser adicionados a outros grupos

globais que pertençam ao mesmo domínio. Os grupos globais podem ser ainda

adicionados a grupos de domínio local ou grupos universais residentes noutros

domínios.

? Domínio Local: neste âmbito as permissões de acesso a recursos são usadas para

recursos que pertençam ao mesmo domínio onde foi criado o grupo. O recurso não

necessita de estar num controlador de domínio. Qualquer grupo ou conta de utilizador,

residente em qualquer domínio, pode ser adicionada sem restrições a grupos deste

âmbito, mas grupos com este âmbito não podem ser adicionados a outros grupos.

? Universal: este âmbito só está disponível quando o domínio está em modo nativo, ou

seja, sempre que todos os controladores de domínio existentes usam o sistema

operativo Windows 2000. É usado para dar permissões a recursos localizados em

qualquer domínio. Qualquer grupo de utilizadores ou contas de utilizador podem ser

Windows 2000 e Linux

- 19 -

membros e os grupos de âmbito universal podem ser adicionados a grupos com âmbito

de Domínio Local ou Universal residentes em qualquer domínio.

Os grupos podem ainda ser englobados em diferentes sites, domínios ou OUs, consoante a

organização lógica desejada pelo administrador, ou administradores, do sistema. Este

procedimento é importante numa perspectiva de aplicação de políticas de grupo, pois a

aplicação do GPO dependerá da localização lógica do grupo (local, site, domínio ou OU).

Em primeiro lugar, serão aplicados os GPOs ligados a grupos locais (ver figura 2), depois os

GPOs ligados a sites, seguidos por GPOs ligados a domínios, e finalmente GPOs ligados a

OUs. Em caso de conflito, a ultima política aplicada é a que prevalece. Por exemplo, se os

utilizadores normais têm no computador local uma política para se retirar a opção “run” do

menu “start”, mas esses utilizadores estão igualmente contidos numa OU que liga a mesma

opção “run”, então a opção “run” ficará em efeito (Deupree Jr. et al., 2000, mod. 4).

Quanto estamos perante uma hierarquia lógica de múltiplas OUs é ainda possível aplicar

bloqueio de herança de GPOs. Isto significa que, quando em efeito, um bloqueio impede que

um GPO, aplicado a uma OU pai na hierarquia, seja propagado (herdado) para as OUs filhas.

O bloqueio não tem qualquer efeito, quando na OU pai o GPO é aplicado com a opção de “No

override”. Nesse caso, o GPO é propagado da OU pai para todas as OUs filhas,

independentemente da opção de bloqueio de herança nas OUs filhas estar ligada ou não.

2.3.3 Acesso a recursos

No Windows 2000, o controlo do acesso a recursos (objectos) é feito primariamente através

de (Deupree Jr. et al., 2000, mod. 2):

? Identificadores de segurança (SIDs).

? Listas de controlo de acesso (DACLs) dos objectos a aceder.

Windows 2000 e Linux

- 20 -

? Definição de grupos de segurança entre os âmbitos já referidos (domínio local, global

e universal).

Os SIDs são números únicos de tamanho variável que identificam um grupo, utilizador ou

computador. Os mecanismos de controlo de acesso utilizam sempre os SIDs, em detrimento

dos nomes, para gerir o acesso a recursos de rede. É, de facto, do ponto de vista de bases de

dados, a chave primária que é usada na AD para registar os recursos. Os SIDs são sempre

criados quando se adicionam novos objectos à AD, e identificam de forma única utilizadores,

grupos ou computadores.

As listas de controlo de acesso, podem-se subdividir em dois tipos: as Discretionary Access

Control Lists (DACLs) e as System Access Control Lists (SACLs). Todos os objectos da AD

têm uma DACL e uma SACL ligadas a eles.

Figura 3 – Vista geral de uma DACL com as respectivas ACEs.

A DACL (ver figura 3) contém a lista de utilizadores, grupos ou computadores que têm

acesso a esse objecto. Uma DACL é constituída por um conjunto limitado de Access Control

Windows 2000 e Linux

- 21 -

Entries (ACEs). Cada ACE liga um tipo de permissão específico a um utilizador ou grupo

específicos. Existem tipos de permissões diferentes nas ACEs, que variam conforme o tipo de

objecto ao qual a DACL está ligada. Por exemplo, para acesso a ficheiros, existem permissões

NTFS (NT file system) nas ACEs da DACL de cada ficheiro. Estas permissões serão descritas

mais pormenorizadamente na secção 2.3.4 onde se faz a análise deste sistema de ficheiros.

Tomando como outro exemplo as impressoras (Deupree Jr. et al., 2000, mod. 6), existem as

ACEs de permissões de impressão, gestão de documentos e a gestão de impressoras.

Por sua vez, as SACLs são usadas para auditar (registar) o acesso ao objecto. Também são

constituídas por um conjunto de ACEs, mas com um significado diferente. Cada ACE indica

em que caso (sucesso, falha ou ambos) é que a tentativa de acesso ao objecto por parte do

utilizador ou grupo deve ser registada. Quando um evento é auditado, é adicionado um registo

do evento ao registo de segurança do sistema. Os seguintes eventos podem ser auditados

(Deupree Jr. et al., 2000, mod. 4):

? Validação de conta de utilizador: este evento é despoletado quando um utilizador se

valida no computador local ou na rede (domínio).

? Gestão de contas: este evento acontece quando um administrador cria, muda ou apaga

uma conta de utilizador ou um grupo.

? Acesso à AD: acontece quando um utilizador acede a um objecto da AD. Para que seja

possível auditar este tipo de evento, é necessário especificar que objectos da AD se

pretendem auditar.

? Logon: acontece quando um utilizador acede a um computador localmente ou via rede,

independentemente de usar uma conta local ou de domínio.

? Acesso a objectos: acontece quando um utilizador acede a um ficheiro, directório ou

impressora. O administrador deve configurar quais os ficheiros, directórios ou

impressoras específicas a auditar.

Windows 2000 e Linux

- 22 -

? Mudança de politicas: este evento surge sempre que é efectuada uma mudança às

opções de segurança do utilizador (opções de palavra-chave ou parâmetros de logon),

direitos do utilizador ou politicas de auditoria.

? Uso de privilégios: este evento acontece quando um utilizador exerce um direito,

como por exemplo a mudança do tempo do sistema.

? Monitorização de processos: acontece quando uma aplicação desencadeia uma acção.

? Sistema: este evento é despoletado quando um utilizador reinicia ou desliga o sistema,

ou quando acontece um evento que afecta a segurança no Windows ou o registo de

segurança.

Finalmente, como já foi descrito podem usar-se grupos de segurança com âmbitos de domínio

? Local, Global ou Universal (ou combinações dos três) ? para controlar o acesso aos

objectos.

2.3.4 Sistema de Ficheiros

O Windows 2000 suporta 3 tipos de sistemas de ficheiros (Selby et al., 2000, mod. 1):

? O FAT (File Allocation Table) usado em discos com capacidades inferiores a 2GB.

? O FAT 32, sucessor do FAT, usado em discos com capacidades superiores a 2GB.

? O NTFS (NT File System) usado na família de sistemas operativos NT.

Para este trabalho será apenas analisado o NTFS, pois é o único dos três sistemas de ficheiros

a possuir características de segurança. De facto, algumas das características principais do

NTFS estão intimamente relacionadas com a segurança lógica do sistema (Selby et al., 2000,

mod. 1):

Windows 2000 e Linux

- 23 -

? Suporte de permissões de segurança a nível de ficheiros e directórios usando ACLs.

? Compressão opcional de ficheiros.

? Sistema de quotas de disco (quantidade de espaço ocupada em disco) a nível de

utilizador.

? Cifragem opcional de ficheiros. Esta opção é incompatível com a opção de

compressão, ou seja, não podem existir ficheiros comprimidos e cifrados

simultaneamente.

Neste contexto, como já foi referido, existe uma ACL para cada ficheiro ou directório numa

partição NTFS, que normalmente é constituída por um conjunto de ACEs. Se esse conjunto

não existir (ACL vazia), o Windows 2000 nega o acesso ao recurso.

Para ACEs de NTFS temos as seguintes permissões possíveis para directórios (Selby et al.,

2000, mod. 6):

? Leitura: é permitido o acesso de leitura (inclui a leitura de propriedades e permissões)

a todos os ficheiros e subdirectórios que esse directório contiver.

? Escrita: permite criar ficheiros e subdirectórios, modificar as suas permissões e

propriedades respectivas.

? Listar conteúdo: permite unicamente listar o conteúdo do directório. Não permite o

acesso de leitura aos ficheiros e subdirectórios que o directório possui.

? Ler e executar: permite executar ficheiros dentro desse directório e ter as demais

permissões concedidas pela permissão de leitura.

? Modificar: permite apagar o directório e ter as permissões de escrever, ler e executar.

Windows 2000 e Linux

- 24 -

? Controlo total: permite a mudança de permissões, de propriedade e todas as operações

anteriores.

Temos ainda as seguintes permissões NTFS para ficheiros (Selby et al., 2000, mod. 6):

? Leitura: permite o acesso de leitura (inclui a leitura de propriedades e permissões) ao

ficheiro.

? Escrita: permite a escrita, mudança de atributos do ficheiro, e a visualização da

propriedade e das permissões.

? Ler e executar: permite correr aplicações e desempenhar as acções permitidas pela

permissão de leitura.

? Modificar: permite modificar e apagar o ficheiro e ter todas as permissões concedidas

pela permissão de ler e executar.

? Controlo total: permite mudar as permissões, mudar a propriedade e todas as

operações anteriores.

As permissões NTFS são cumulativas. Isto significa que as permissões que o utilizador de

facto tem, são a forma mais restritiva da soma das permissões do utilizador (da sua conta) e

do grupo ou grupos a que pertence. Por outro lado as permissões de ficheiros têm sempre

prioridade sobre as permissões de directórios.

Por exemplo, se existir um utilizador com acesso de leitura e escrita a um ficheiro e se esse

utilizador pertencer a um grupo que só possui acesso de leitura a esse ficheiro, a permissão de

facto do utilizador será unicamente de acesso de leitura ao ficheiro. Se esse ficheiro estiver

num directório para o qual o utilizador possua a permissão de controlo total, a única

permissão de acesso ao ficheiro continuará a ser de leitura exclusivamente.

Finalmente, a permissão de negação de acesso sobrepõe-se a qualquer outra permissão.

Windows 2000 e Linux

- 25 -

As permissões podem ainda ser, por defeito, herdadas: Isto significa que as ACEs atribuídas a

um directório são por defeito copiadas para todas os subdirectórios e ficheiros que esse

directório contiver. No entanto, é possível bloquear a herança de permissões, escolhendo

explicitamente essa opção no directório pai.

Na Windows, o NTFS suporta sistema de quotas por utilizador (Selby et al., 2000, mod. 6).

Isto significa que o cálculo de utilização de disco é baseado no tamanho de cada ficheiro e

directório pertencentes (através dos atributos de propriedade) ao utilizador sujeito à quota.

Para realizar este cálculo, ignora-se o tamanho comprimido do ficheiro, se existirem ficheiros

comprimidos.

As quotas são dependentes das partições. Para cada partição, mesmo que estejam no mesmo

disco, existem quotas monitorizadas independentemente, supondo que essas partições

possuem quotas. Podem ainda aplicar-se as mesmas quotas numa partição a todos os

utilizadores indiferenciadamente.

Adicionalmente ao sistema de quotas, a nova versão de NTFS que foi incluída no Windows

2000, possui um sistema de cifragem de ficheiros conhecido por Encrypted File System (EFS)

(Selby et al., 2000, mod. 6). Este sistema tem as seguintes características principais:

? Opera ao nível do sistema operativo de forma transparente para utilizadores e

aplicações.

? Utiliza um sistema de 3 chaves públicas (Deupree Jr. et al., 2000, mod. 6): a chave do

ficheiro (que cifra os dados), a chave pública do utilizador, que cifra a chave do

ficheiro e a guarda numa área própria no cabeçalho do ficheiro (DDF), e a chave

pública do agente de recuperação, que executa o mesmo processo anterior, mas guarda

a chave do ficheiro numa outra área independente da anterior, mas contida no

cabeçalho do ficheiro (DRF).

? Permite que apenas utilizadores devidamente autenticados possam ganhar acesso ao

ficheiro. O EFS decifra automaticamente os ficheiros assim que forem acedidos por

Windows 2000 e Linux

- 26 -

um utilizador válido (com a chave privada respectiva). Quando os ficheiros são

gravados ou modificados, estes são novamente cifrados de forma transparente.

? Possui um sistema de recuperação de dados cifrados (Deupree Jr. et al., 2000, mod. 6).

Se o utilizador original dos fiche iros já não existe (ou seja, a sua chave privada está

indisponível), é possível recuperar os seus dados usando utilizadores com privilégios

para tal operação, conhecidos por agentes de recuperação (recovery agents). Existe

sempre pelo menos um agente de recuperação no sistema que tem a sua própria chave

privada a ser usada na área que contém a chave do ficheiro cifrada pela chave pública

do agente de recuperação (DRF). Cada agente de recuperação requer um certificado

digital.

Os ficheiros são cifrados através da escolha da respectiva opção nas suas propriedades.

É possível existirem ainda directórios partilhados em rede (partilhas) (Selby et al., 2000, mod.

7). Estes directórios não podem conter ficheiros cifrados, têm nomes usados em rede (nomes

de partilhas) associados, e um conjunto de utilizadores (ligações) máximos simultâneos a essa

partilha. No caso de este ultimo parâmetro não estar definido, o número de utilizadores

máximos simultâneos é ilimitado. Uma partilha pode ter as seguintes permissões:

? Leitura: permite a leitura de todo o conteúdo da partilha bem como a respectiva

execução (quando as permissões NTFS individuais dos ficheiros o permitirem).

? Mudança: permite a criação, remoção e alteração de ficheiros e subdirectórios dentro

da partilha, bem como todas as permissões garantidas pela permissão de leitura.

? Controlo total: permite a alteração das permissões do conteúdo da partilha, bem como

a mudança da propriedade dos respectivos ficheiros e todas as permissões descritas

nas alíneas anteriores.

Windows 2000 e Linux

- 27 -

Quando se combinam permissões de partilha com permissões NTFS, ou seja quando a partilha

está localizada numa partição NTFS, as permissões de utilizador resultantes serão a

combinação mais restritiva das permissões NTFS e as permissões de partilha.

2.3.5 Comunicações

A segurança de comunicações é obtida através de protocolos de cifragem do transporte de

dados e respectiva autenticação. Considerando o modelo OSI (Open Systems Interconnection)

(ISO, 1994), representado na figura 4, a cifragem de dados pode ser obtida na camada da

aplicação do modelo OSI, ou na camada de transporte de dados (Deupree Jr. et al., 2000, mod.

7).

Figura 4 – Diagrama do Modelo OSI Cliente – Servidor.

Na camada da aplicação podem ser aplicados os seguintes métodos de segurança:

? Assinatura de pacotes SMB (Server Message Block). O SMB (também conhecido por

CIFS – Common Internet File System) é usado para transferir ficheiros numa rede

Windows. A assinatura de pacotes SMB autentica mutuamente um cliente e um

servidor Windows 2000 para uma sessão de comunicação, colocando uma assinatura

digital em cada pacote transferido. Este método certifica que o cliente está ligado ao

servidor autêntico, e não a um falso servidor que se faça passar pelo servidor original.

Windows 2000 e Linux

- 28 -

É suportado numa rede nativa Windows 2000 ou numa rede mista com Windows NT

4.0, service pack 3 ou posterior.

? Os métodos Secure Sockets Layer (SSL), Transport Layer Security (TLS), Secure

Multipurpose Internet Mail Extensions (S/MIME) e Pretty Good Privacy (PGP) são

métodos de segurança que podem ser usados a nível aplicacional, mas que não

dependem do sistema operativo. Isto significa que podem ser usados noutros sistemas

operativos para além do Windows 2000, desde que esses sistemas operativos possuam

suporte aplicacional para estes métodos.

Na camada de transporte de dados, qualquer protocolo de segurança é independente das

aplicações, isto é, pode cifrar dados para qualquer aplicação. O Windows 2000 inclui suporte

para segurança de comunicações ao nível de transporte de dados através do IPSec5, um

protocolo de segurança proposto para esse efeito pela Internet Engeneering Task Force

(IETF).

O IPsec é implementado através do uso de um de dois protocolos, o Authentication Headers

(AH) ou o Encapsulating Security Payloads (ESP). O AH assina digitalmente o pacote

TCP/IP (o seu cabeçalho não é considerado na assinatura), enquanto que o ESP cifra o pacote

original e inclui-o num novo pacote que é assinado digitalmente (o cabeçalho do novo pacote

não é considerado na assinatura).

O IPsec pode actuar ainda de um de dois modos possíveis, modo de transporte e modo de

túnel. No modo de transporte, qualquer tráfego que esteja sujeito a um filtro IPsec é cifrado

entre os computadores cliente e servidor. As situações mais apropriadas de utilização deste

modo serão na comunicação entre máquinas na mesma subrede ou através de redes que não

atravessem dispositivos de tradução de endereços de rede (Network Address Translation –

NAT).

No modo de túnel não há filtros IPsec. Qualquer tráfego entre dois terminais IPsec (não

necessariamente o cliente ou servidor que originam a transmissão) é cifrado. A comunicação

entre o cliente ou servidor e o terminal respectivamente mais próximo, não é cifrada. Este 5 Para mais informação consultar http://www.ietf.org/html.charters/ipsec-charter.html

Windows 2000 e Linux

- 29 -

modo é mais apropriado quando é necessário cifrar comunicações entre uma parte insegura da

rede. Por exemplo, duas organizações que queiram cifrar todo o tráfego FTP entre si pela

Internet.

A autenticação IPsec no Windows 2000 pode ser feita através do protocolo Kerberos versão 5

(por defeito), através de certificados digitais (para computadores que não suportem Kerberos

V5), ou através de uma chave secreta pré-partilhada entre dois utilizadores (o que não requer

nem certificados digitais nem o Kerberos V5).

No acesso remoto a redes Windows 2000 temos ainda considerações de autenticação. O

Windows 2000 suporta o Challenge Authentication Protocol (CHAP), o MS-CHAP versão 1

e 2 (versão do protocolo CHAP da Microsoft), o Extensible Authentication Protocol (EAP) e

o Password Authentication Protocol (PAP – sem cifragem de senhas).

Por outro lado, quando se fala em acesso remoto, pode igualmente abordar-se as Redes

Privadas Virtuais (Virtual Private Networks – VPNs) (Deupree Jr. et al., 2000, mod. 9), que

permitem que clientes de acesso remoto se liguem de forma segura a uma rede, já que

proporcionam autenticação segura e cifragem de dados. Quando uma ligação VPN é criada, é

estabelecido um túnel (ligação de dados ponto-a-ponto cifrada) entre o cliente de acesso

remoto e o respectivo servidor.

O Windows 2000 suporta dois protocolos de túnel: o Point to Point Tunneling Protocol

(PPTP) e o Layer 2 Tunneling Protocol (L2TP). O PPTP possui algoritmos de cifragem

associados que são considerados mais fracos (McClure, 2000, pp. 284-285) do que o L2TP

(com suporte IPsec), mas é mais compatível, pois funciona com Windows 98 e NT 4.0,

suportando igualmente ligações NAT na rede (o L2TP é incompatível com mecanismos de

tradução de endereços: NAT).

2.3.6 Criptografia – a PKI

A Infra-estrutura de Chave Pública (Public Key Infrastructure – PKI) é uma combinação de

software, tecnologias de criptografia e serviços que permitem às organizações proteger a

segurança das suas comunicações. Uma PKI depende da troca de certificados digitais entre

Windows 2000 e Linux

- 30 -

utilizadores autenticados e recursos a confiar. São usados certificados digitais numa PKI para

garantir a segurança de dados e gerir as identificações dos utilizadores de dentro e de fora da

organização. A PKI é constituída por (Deupree Jr. et al., 2000, mod. 14):

? Um certificado digital: uma credencial electrónica que consiste numa chave publica e

uma chave privada, para autenticar utilizadores. São a base da PKI.

? Ferramentas de gestão de chaves e de certificados.

? Autoridade de Certificação (Certification Authority – CA): uma entidade de confiança

que pode emitir certificados digitais. As CAs podem ser configuradas como CAs de

organização ou CAs individuais. As CAs de organização dependem da AD para

autenticar os utilizadores, enquanto que as CAs individuais não.

? Ponto de publicação de certificados: no Windows 2000 a AD é o ponto de publicação

de certificados, ou seja o serviço onde os certificados são armazenados e publicados.

? Aplicações e serviços com suporte de chave pública que necessitem a transferência

segura de informação. Por exemplo, o Microsoft Internet Explorer, o EFS ou ainda o

IPsec.

? Uma lista de certificados cancelados (Certificate Revocation List - CRL). Esta lista

contém certificados que foram invalidados antes de atingirem a data de expiração

prevista. Os certificados podem ser inva lidados nos seguintes casos: se a segurança da

CA foi comprometida, se o nível de competências dos utilizadores muda

significativamente, se a chave privada do certificado foi comprometida (por exemplo,

perda de um cartão inteligente), se o certificado foi obtido de forma fraudulenta, ou se

o certificado foi emitido a um individuo que já não é um membro de confiança.

Quando a CRL está indisponível, o certificado não pode ser validado e o acesso ao

recurso certificado é negado.

Windows 2000 e Linux

- 31 -

Os certificados podem ser usados para uma variedade de aplicações e serviços que incluem o

correio electrónico seguro, a assinatura do código de software, o SSL/TLS, a autenticação de

cartões inteligentes, a autenticação do cliente Ipsec, e o EFS.

Para participarem na PKI, utilizadores e computadores devem requisitar e receber certificados

de uma CA (Certification Authority). Tipicamente um utilizador inicia este processo

fornecendo informação única e uma chave pública gerada. A CA utiliza esta informação para

autenticar o utilizador antes de emitir o certificado. Esta fase é dividida em seis passos

(Deupree Jr. et al., 2000, mod. 14):

1. Geração do par de chaves: o utilizador gera uma chave pública e privada, ou uma

entidade na organização desempenha essa tarefa para ele.

2. Fornecimento da informação: o utilizador dá a informação que a CA necessita para

gerar o certificado. Esta informação poderá ser, por exemplo, o nome do utilizador e o

seu endereço de correio electrónico ou impressões digitais e documentos autenticados

que a CA necessite para confirmar a identidade do utilizador.

3. Requisição do certificado: o utilizador envia o pedido de certificado, que consiste na

chave pública do utilizador e a informação adicional necessária, requisitada no passo

anterior. O pedido é cifrado usando a chave pública da CA. O pedido cifrado é então

enviado para a CA.

4. Verificação da informação: a CA aplica um conjunto de regras que necessita para

determinar se pode ou não emitir o certificado ao utilizador. Numa CA individual este

passo é manualmente feito por um administrador respectivo. Por outro lado, numa CA

de organização este passo é automático, pois as CAs de organização dependem

directamente da AD para validarem os utilizadores.

5. Geração do certificado: a CA cria e assina um documento digital contendo a chave

pública do utilizador e outra informação adicional que ache apropriada. A assinatura

da CA autentica a ligação entre o nome do utilizador e a sua chave pública. Este

documento assinado é o certificado.

Windows 2000 e Linux

- 32 -

6. Envio ou afixação do certificado: A CA envia o certificado ao utilizador ou afixa-o na

AD, conforme for mais apropriado para o certificado em questão.

Todos os certificados têm um prazo de validade (no máximo de 6 meses) e são renovados

pelas CAs. Estas operações e as anteriormente descritas sobre certificados podem ser

auditadas recorrendo aos registos dos Serviços de Certificados do Windows 2000.

No que respeita às CAs, é ainda possível escolher entre utilizar CAs comerciais ou criar as

próprias CAs (CAs privadas). As CAs comerciais são geridas por companhias terceiras e

devem ser usadas quando há necessidade de transmitir confiança aos clientes na segurança de

uma transacção comercial. Estas CAs são usadas tipicamente para fins comerciais. CAs

privadas são usadas quando há necessidade de usar certificados internamente na organização,

ou externamente com parceiros ou organizações de confiança (por exemplo, duas empresas

pertencentes ao mesmo grupo económico).

As CAs podem ser hierarquizadas. Ao nível mais alto na hierarquia lógica existem CAs (root

CAs) que emitem certificados para CAs suas subordinadas, que por sua vez emitem

certificados para utilizadores ou computadores. Todo este procedimento é por vezes

necessário para distribuir a carga computacional por diferentes CAs, para delegação

administrativa dos certificados, e para uma maior coerência lógica entre as CAs e a estrutura

organizacional.

2.3.7 Disponibilidade e Fiabilidade

A disponibilidade e fiabilidade no Windows são conseguidas à custa do conceito de protecção

de desastre. Este conceito é subdividido em duas partes: a tolerância a falhas e a recuperação

de desastres. A tolerância a falhas é a capacidade de um computador ou sistema operativo

responder a um evento catastrófico (por exemplo, uma falha de hardware). A recuperação de

desastres consiste no processo de restaurar o estado de um sistema após um desastre, na

condição em que se encontrava antes desse evento catastrófico (Selby et al., 2000, mod. 13).

Uma medida para garantir a tolerância a falhas é o suporte de unidades de alimentação

ininterrupta (UPS), que permitem que o sistema funcione durante interrupções do

Windows 2000 e Linux

- 33 -

fornecimento de energia eléctrica ao sistema, pelo menos durante o tempo suficiente para

gravar os dados e terminar os programas em funcionamento. O Windows 2000 suporta um

conjunto de UPS variado.

Outra falha muito comum no hardware dos computadores está relacionada com as falhas de

discos. Para prevenir a perda de dados durante a perda de um disco, o Windows 2000 usa a

implementação por software do Redundant Array of Independent Disks (RAID). Os sistemas

RAID também podem ser implementados via hardware próprio para o efeito, tendo um

desempenho melhor e características adicionais, tais com por exemplo o hot swap, a troca de

discos com o sistema ligado. Contudo são mais dispendiosos do que sistemas equivalentes

implementados por software. No Windows 2000 estão implementadas por software as

abordagens de RAID 0, 1 e 5.

A RAID 0 (também conhecida por disk striping) é uma matriz de discos associados para

formar um único disco lógico cuja capacidade total é a soma de todos os discos juntos. Não

obstante o nome, esta associação lógica não é tolerante a falhas, mas oferece um desempenho

maior do que qualquer um dos discos individuais a funcionarem de forma independente (sem

RAID), bem como um desempenho maior do que qualquer outro sistema RAID.

A RAID 1 (também conhecida por disk mirroring) é uma matriz de 2 discos associados em

que um é a imagem (mirror) do outro, isto é, os dados são escritos simultaneamente para

ambos os discos. Se um disco fa lhar o sistema continua a usar o outro para manter-se em

funcionamento. Como é usado o dobro do espaço total para escrever a quantidade de dados

equivalente à de um sistema sem RAID, esta implementação só pode usar 50% do espaço

total disponível, tendo pois um elevado custo por Mb. No entanto, a RAID 1 em Windows

2000 pode ser implementada em qualquer tipo de partição, incluindo as partições do sistema

ou de arranque (boot), podendo o sistema de ficheiros ser FAT ou NTFS. A RAID 1 possui

bom desempenho de escrita e leitura e usa menos memória que a RAID 5.

A RAID 5 é semelhante à RAID 0, mas adiciona paridade às partições de discos incluídas na

RAID. A paridade é um conjunto de informação redundante que está associada a um bloco de

informação. Na RAID 5 do Windows 2000, a paridade é usada em cálculos para reconstruir as

partições após uma falha de disco. Devido a esta operação, a escrita nesta RAID é mais lenta

Windows 2000 e Linux

- 34 -

que nas outras. A leitura é mais rápida do que na RAID 1, pois os dados estão distribuídos por

diferentes discos. No entanto, após uma falha, a RAID 5 pode-se tornar muito mais lenta na

leitura que as outras implementações, devido aos cálculos de reconstrução das partições que

tem de efectuar. A RAID 5 não pode proteger as partições de arranque ou de sistema e

necessita pelo menos de 3 discos e mais memória que a RAID 1.

No entanto se os sistemas RAID não estão implementados no sistema, ou se as perdas são

irrecuperáveis por RAID, a recuperação de desastres é assegurada por sistemas de salvaguarda

e restauro. No Windows 2000 o sistema de salvaguarda e restauro (backup) permite criar

cópias de segurança de ficheiros e directórios, bem como dos dados do sistema, calendarizar a

salvaguarda e restaurar ficheiros e directórios.

No contexto das permissões, qualquer utilizador pode fazer cópias de segurança dos seus

próprios ficheiros e directórios, bem como ficheiros para os quais possuem permissões de

leitura. Todos os utilizadores podem restaurar ficheiros e directórios para os quais têm

permissões de escrita. Os administradores podem fazer cópias de segurança de quaisquer

ficheiros e directórios, e respectivo restauro, independentemente das permissões que esses

ficheiros ou directórios tiverem.

Os tipos de cópias de salvaguarda que se podem fazer são:

? Normais: copia todos os ficheiros e directórios seleccionados e apaga os atributos de

arquivo (+a) respectivos.

? Cópia: copia todos os ficheiros e directórios seleccionados e ignora os atributos de

arquivo (+a) respectivos.

? Diferencial: copia todos os ficheiros e directórios seleccionados que têm os atributos

de arquivos (+a) ligados.

? Incremental: copia todos os ficheiros e directórios seleccionados que têm os atributos

de arquivos (+a) ligados e apaga-os.

Windows 2000 e Linux

- 35 -

? Diário: copia todos os ficheiros e directórios seleccionados que mudarão durante o dia

e ignora os atributos de arquivos (+a).

Quando se realiza uma cópia de salvaguarda dos dados do sistema, está-se a fazer uma cópia

do registo, dos ficheiros de arranque do sistema, da base de dados de certificados, da AD e do

directório Sysvol (apenas se o computador é um controlador de domínio).

No Windows 2000 os computadores têm ainda um sistema de opções de arranque (boot)

avançadas que inclui entre outras opções o registo do arranque, o carregamento da última

configuração funcional e o restauro da AD; no caso de um controlador de domínio, a esta

última opção acresce a gestão da AD.

Existe ainda a possibilidade de carregar uma consola de recuperação que permite ao

administrador reparar um sistema ou reconfigurar um serviço do sistema que esteja a

prejudicar o seu funcionamento.

Em alternativa, pode-se utilizar um disco de reparação de emergência que tentará reparar de

forma automática ou interactiva uma instalação do Windows 2000 danificada, actuando no

registo, ficheiros do sistema, sector de arranque e o ambiente de arranque do Windows 2000.

Este disco é criado pelo sistema de cópias de segurança, anteriormente referenciado.

2.4 Segurança Lógica no Linux

As seguintes secções analisam o modelo de segurança lógica do Linux no contexto da

arquitectura do sistema operativo, do controlo de utilizadores, do sistema de ficheiros, das

comunicações e da fiabilidade/disponibilidade.

2.4.1 Arquitectura do Sistema operativo

O sistema operativo Linux é constituído fundamentalmente por duas partes: o núcleo (kernel)

e a camada de programas que se executam no sistema à custa do núcleo, conhecida pelo termo

de “espaço do utilizador” (user space ou user level) (Wirzenius et al., 2001). O núcleo gere

Windows 2000 e Linux

- 36 -

um conjunto de tarefas tais como a gestão de ficheiros e respectivo sistema, a gestão de

programas (processos), a gestão de memória e a gestão de rede.

O núcleo desempenha basicamente tarefas muito simples, mas proporciona as ferramentas

para a execução de programas e serviços no espaço do utilizador. Impede que o hardware seja

usado directamente, forçando que se use as suas ferramentas para esse efeito (conceito de

modo protegido). Deste modo é providenciada segurança entre os utilizadores e os programas

que executam (Bovet, 2001, p.8). Estas ferramentas estão disponíveis através das chamadas

ao sistema (System Calls) (Bovet, 2001, p.19). A figura 5 representa de forma simplificada a

organização do núcleo e a sua integração no sistema.

Figura 5 – Os componentes mais importantes do nucleo (kernel) do Linux e a sua integração no sistema (adaptado do Linux System Administrator’s Guide).

O serviço mais importante do Linux (e qualquer outro sistema UNIX) é o Init. O Init é o

primeiro processo a ser executado num sis tema UNIX e o último a terminar quando o sistema

é desligado. Como o próprio nome indica, o Init inicia (ou termina) o processo de

inicialização num UNIX e respectivos serviços. A lista exacta desses serviços e a ordem pela

qual são iniciados ou terminados, depende do Unix em questão, e no Linux depende

inclusivamente da distribuição em questão.

Windows 2000 e Linux

- 37 -

Normalmente o Init subdivide a execução de serviços e programas em 5 a 10 camadas

conhecidas por runlevels, nos quais o runlevel 0 corresponde ao próprio Init (e para o sistema)

e o mais altos, geralmente o 5 e 6 correspondem respectivamente ao modo multiutilizador

com X-Windows e rede e ao modo reboot (reinicia o sistema).

2.4.2 Contas de utilizadores e acesso a recursos

Cada utilizador tem um username e palavra-chave para aceder ao sistema. Quando os

utilizadores entram no sistema são atribuídos números inteiros únicos de identificação aos

seus usernames (UIDs – user ids) e aos grupos aos quais pertencem (GIDs – group ids). O

UID 0 está reservado ao administrador (superut ilizador) da máquina, vulgarmente conhecido

por root (Tobler, 2000, pp. 386-387).

Um processo é um conjunto de tarefas que partilha o mesmo espaço de execução (memória) e

os mesmos privilégios. Os processos são objectos activos em termos de segurança e podem

aceder a outros objectos, tais como objectos do sistema de ficheiros, comunicação

interprocessos (IPC) e portas de rede. Entre outros atributos, um processo tem sempre

(Mitchell, 2001):

? Um RUID (Real UID) e um RGID (Real GID) correspondentes ao utilizador que

invocou o processo e o seu respectivo grupo, e um EUID (Effective UID), e um EGID

(Effective GID) correspondentes aos utilizador e grupo com os quais o processo é

executado. Isto significa que os privilégios que são usados para executar o programa

são os privilégios que o utilizador e o grupo efectivos possuírem. Todavia há certos

programas que necessitam, por diversas razões tais como o acesso a recursos

privilegiados do sistema, de serem iniciados com determinados privilégios, e depois,

durante a execução obterem outros diferentes. Estes programas são conhecidos por

programas SUID e permitem a alteração dos seus próprios privilégios durante a

execução. Neste caso o RUID e o EUID serão diferentes após a alteração de

privilégios.

? Limites de recursos: Um processo utiliza uma determinada quantidade de recursos

num determinado instante de tempo. Os limites de recursos permitem definir

Windows 2000 e Linux

- 38 -

essencialmente os limites que um processo pode ter atribuído em termos de utilização

de memória, de ficheiros abertos, e de consumo de tempo de processador. Este

conceito também é aplicado aos utilizadores, embora ambos os limites sejam

independentes.

? Capacidades POSIX: A partir das versões 2.2 do núcleo do Linux, foi implementado o

conceito de capacidades POSIX em utilizadores e processos definidas pela norma

padrão IEEE 1003.1e (IEEE, 2001). As capacidades POSIX dividem os privilégios

normalmente atribuídos a root num conjunto mais largo de funcionalidades de

segurança mais específicas. A vantagem desta abordagem de segurança é a

possibilidade de existirem utilizadores ou processos com privilégios de segurança

específicos, apropriados para as tarefas que desempenham no sistema, ou aos recursos

que necessitam de usar, sem a necessidade de terem um acesso sem restrições à

máquina (acesso de root). Actualmente existem algumas ferramentas de segurança

(uma das quais é descrita no capítulo 4), para tirarem proveito das capacidades

POSIX.

A autenticação em Linux é feita primariamente pelos módulos de autenticação (PAM)

(Samar, 1996). O conjunto de módulos PAM é um subsistema de autenticação em Linux que

permite a utilização de algoritmos de autenticação mais avançados tais como o MD5, e a

utilização de sistemas de autenticação mais avançados tais como os cartões inteligentes, que

os sistemas tradicionais UNIX não fornecem.

A nível de arquitectura de software trata-se de uma interface (uma biblioteca partilhada de

funções) de autenticação situada entre uma aplicação e o sistema de autenticação

propriamente dito, visto que suporta nativamente a autenticação simples, por cartões

inteligentes e a autenticação em domínios Windows NT/2000 (através de SAMBA).

No entanto, no Linux, tal como em outros sistemas UNIX, existe o ficheiro geral de palavras-

chaves do sistema (o /etc/passwd) que contém todos os dados principais da conta de um

utilizador, tais como o seu username, palavra-chave, UID, e GIDs dos grupos a que pertence,

entre outra informação menos relevante.

Windows 2000 e Linux

- 39 -

Este ficheiro tem permissão de leitura concedida a todos os utilizadores, pelo que coloca

sérios problemas de segurança. Podem usar-se as palavras-chaves cifradas obtidas pela leitura

do ficheiro para se obterem as palavras-chaves originais, recorrendo a vários tipos de ataques.

Para resolver este problema de segurança, o Linux recorre à implementação de shadow

passwords (Tobler, 2000, p. 383). Nesta implementação, o ficheiro /etc/passwd continua a

conter toda a informação do utilizador, excepto os dados relativos à palavra-chave, incluindo

a própria palavra-chave. Estes dados são guardados num ficheiro à parte, apenas acessível

pelo superutilizador, o ficheiro /etc/passwd ou o /etc/shadow em algumas distribuições.

Quando um processo deseja verificar a palavra-chave de um determinado utilizador deve

correr com setuid de root (permissões de superutilizador) para que possa aceder ao ficheiro

/etc/passwd, contudo o método mais aconselhável, e actualmente o mais usado, consiste em

usar os PAM como interface para o ficheiro /etc/passwd.

Por outro lado, analisando as soluções de autenticação por rede, verifica-se que o Linux

possui meios de autenticação por rede próprios, bem como meios apropriados a ambientes de

rede heterogéneos.

O SAMBA é um sistema de integração de máquinas Linux em ambientes Windows (que

utilizam o protocolo NetBIOS). Permite diversas operações de interacção e partilha de

recursos entre sistemas que utilizem o Windows, em qualquer versão, e sistemas que corram

Linux. As operações mais notórias, em termos de autenticação, são a autenticação como

cliente num domínio NT ou 2000, emulação de um Primary ou Backup Domain Controller

(PDC e BDC) de um domínio NT ou de um member server de um domínio 2000 (Tobler,

2000, pp. 263-264).

Os Network Information Services (NIS) constituem uma alternativa UNIX aos domínios

Windows. Os NIS possibilitam a existência de um sistema de base de dados distribuída de

ficheiros de palavras-chave, de grupos e outros ficheiros de configuração num ou mais

servidores NIS, que distribuem essa informação por múltiplas máquinas assegurando, entre

outros serviços, a sincronização de contas e palavras-chaves (Tobler, 2000, p. 196).

Windows 2000 e Linux

- 40 -

2.4.3 Sistema de Ficheiros

Como qualquer outro UNIX, o Linux tem o seu sistema de ficheiros organizado numa árvore

lógica de directórios, em que a raiz da árvore é o directório raiz (/) e as folhas são directórios

terminais ou ficheiros. A figura 6 esquematiza a estrutura geral do sistema de ficheiros em

Linux, numa distribuição Redhat.

Figura 6 – Diagrama da organização um sistema de ficheiros de uma distribuição Linux Redhat.

Quando se analisa um sistema Linux do ponto de vista do sistema de ficheiros é possível

argumentar que todo o sistema Linux é um sistema de ficheiros, pois em adição aos ficheiros

propriamente ditos, os processos e dispositivos de hardware podem também ser considerados

ficheiros, já que os processos são mapeados no sistema de ficheiros através de um directório

virtual especial (/proc), e os dispositivos de hardware são mapeados através dos directórios

/proc e /dev. Estes directórios constituem uma forma alternativa de comunicar com a

memória e com o hardware, utilizando a filosofia UNIX segundo a qual “tudo é um ficheiro”.

Windows 2000 e Linux

- 41 -

Embora o Linux possa utilizar e funcionar sobre outros sistemas de ficheiros, o sistema de

ficheiros padrão usado é o Extended Filesystem versão 2 ou 3 (Ext2 ou Ext3), conforme a

configuração e a versão do núcleo usada no sistema. Tem a semântica padrão UNIX para

ficheiros, que consiste na existência nos ficheiros de (Tobler, 2000, pp. 386-387):

? O UID do dono do ficheiro e GID do grupo a que pertence o ficheiro. Só o

superutilizador pode modificar o UID do ficheiro. Na altura de criação de um ficheiro

ou directório, o UID e GID do ficheiro são correspondentes ao EUID e EGID do

processo que os cria, excepto no caso especial em que os directórios onde os ficheiros

são criados tem o bit setgid ligado (ver abaixo).

? Bits de leitura, escrita e execução para o dono, grupo e outros utilizadores. São

basicamente as permissões UNIX. Nos directórios a permissão de leitura permite ver o

conteúdo do directório, a execução permite executar ficheiros nesse directório e a

permissão de escrita permite criar, modificar, ou apagar, ficheiros nesse directório.

Qualquer uma destas permissões não é por defeito herdada para os subdirectórios e a

permissão de facto que possuímos para um ficheiro num directório, é a forma mais

restritiva da soma das permissões desse ficheiro e do directório em que se encontra.

? Bit +l de ligação (link) simbólica. Consiste numa ligação simbólica (virtual) entre dois

directórios ou dois ficheiros localizados em pontos diferentes do sistema de ficheiros.

As permissões da ligação são ignoradas e apenas são consideradas as permissões do

directório ou ficheiro alvo, para o qual a ligação aponta.

? Bits setuid e setgid. Quanto o bit setuid está ligado num ficheiro executável, o EUID

do processo resultante será mudado para o UID do ficheiro, independentemente do

EUID do utilizador que o invoca, sendo esse ficheiro executado com os privilégios do

UID que possui. Operação semelhante é feita com o setgid com os atributos que lhe

correspondem. No entanto, se o setgid for usado num directório, todos os ficheiros que

forem ai criados terão o mesmo GID do directório. Esta característica não faz parte da

semântica padrão UNIX, mas sim dos sistemas operativos do tipo System V, uma das

famílias de sistemas operativos UNIX.

Windows 2000 e Linux

- 42 -

? Datas de acesso e de modificação.

O ext2 e ext3 têm ainda as seguintes características adicionais (Card, 1994):

? Bit imutável (+i). Quanto atribuído a um ficheiro ou directório, não permite qualquer

tipo de mudanças nesse objecto. Este bit apenas pode ser modificado pelo

superutilizador.

? Bit de acrescentar apenas (+a). Este bit permite que apenas sejam acrescentados dados

ao ficheiro ou directório.

? Reserva de alguns blocos do disco para o superutilizador, da forma a prevenir

situações de uso extremo de espaço de disco, por parte dos utilizadores.

? Semântica BSD na criação de ficheiros em alternativa à do System V acima descrita.

Se esta semântica estiver em efeito, os ficheiros herdam (isto é, obtêm as mesmas

permissões) do directório em que estão contidos. Este comportamento é semelhante ao

observado no NTFS em Windows 2000.

? Verificações de consistência e optimização do sistema de ficheiros a intervalos

regulares. As verificações são ajustáveis pelo administrador.

O ext3 (Redhat Corporation, 2002) proporciona melhorias na disponibilidade pois possui um

mecanismo designado por journalling que permite a correcção rápida de erros após uma falha

no sistema e respectivo reinício. Tem igualmente algoritmos que ou melhoram a velocidade

de acesso ao disco, ou reforçam as verificações de integridade. Todavia estes dois tipos de

algoritmos interferem entre si no contexto do desempenho, pelo que o administrador deve

procurar obter um compromisso entre as verificações de integridade e a velocidade de acesso:

o ext3 permite que estas características sejam configuráveis através de 3 modos de operação

diferentes, que modificam a velocidade de acesso em detrimento das verificações de

integridade ou vice-versa. O ext3 encontra-se disponível no Linux a partir das séries 2.4 do

núcleo.

Windows 2000 e Linux

- 43 -

O suporte de quotas de utilização de disco em Linux está integrado no núcleo. É possível

atribuir quotas por partição a utilizadores individuais ou a grupos de utilizadores. As quotas

têm um limite rígido (hard limit) e um limite flexível (soft limit). O limite rígido nunca pode

ser ultrapassado, mas durante um determinado período de tempo predefinido (conhecido por

grace period) o limite flexível pode ser ultrapassado. Após o fim desse período, se o limite

flexível continuar a ser ultrapassado, será activado e será apenas desligado após o utilizador

ou grupo libertarem espaço em disco a fim de reduzirem a sua quota (Mourani, 2001, pp. 364-

366).

2.4.4 Comunicações

Tal como outros sistemas operativos, o Linux suporta, na camada de aplicação do modelo

OSI, um vasto conjunto de métodos de segurança, que dependem exclusivamente do suporte

aplicacional. Por outro lado, a um nível mais baixo, existem actualmente 3 soluções de

cifragem de pacotes, todas em estado experimental para o funcionamento de VPNs em Linux:

? IPSec: é a norma padrão da IETF.

? Crypto IP Encapsulation (CIPE): uma alternativa ao IPSec.

? Microsoft Point-to-Point Encryption (MPPE): o padrão de cifragem de dados da

Microsoft para a sua implementação de VPN, o Point to Point Tunneling Protocol

(PPTP).

O CIPE é actualmente o protocolo VPN melhor suportado pelo Linux, pois é incluído

directamente no núcleo. É um projecto open-source da comunidade Linux, que cifra pacotes

IP por túneis UDP (User Datagram Protocol), em contraponto com outros protocolos VPN

que utilizam túneis TCP (mais lentos), tornando-o portanto mais rápido. No entanto,

actualmente só possui versões para Linux e Windows NT/2000. Informação completa sobre o

CIPE pode ser encontrada no local web oficial6.

6 Disponível em http://sites.inka.de/bigred/devel/cipe.html

Windows 2000 e Linux

- 44 -

O MPPE é suportado através da adição de código extra ao núcleo, encontrado no local web

dedicado a este projecto7. Mais informação sobre este protocolo pode ser obtida na secção

2.3.5 e no documento RFC 3078 (IETF, 2001).

De igual modo, o IPSec encontra-se disponível como um componente à parte que pode ser

adicionado ao núcleo. O freeswan é uma implementação open-source de IPsec para Linux,

que adiciona todo o suporte de software necessário ao funcionamento de IPsec num sistema

Linux (Mourani, 2001, pp. 633-659). Mais informação sobre o IPsec pode ser encontrada na

secção 2.3.5.

As firewalls são dispositivos de hardware ou software (ou ambos), que controlam que dados

podem transitar entre duas ou mais redes informáticas. De uma forma geral, as firewalls

servem para proteger redes privadas de acessos não autorizados, mas podem igualmente

impedir o oposto, ou seja, acesso não autorizado a redes externas (Tobler, 2000, p. 388).

Em Linux, o suporte de firewall de filtragem de pacotes IP por software é nativo. Nestas

firewalls a filtragem dos pacotes é feita na camada de rede no modelo OSI, verificando a

informação extraída do cabeçalho do pacote IP, nomeadamente (Mourani, 2001, p. 198):

? Os endereços IP de origem e destino do pacote.

? As portas de origem e destino do pacote, se for um pacote TCP/IP ou UDP/IP.

? Tipo de mensagem ICMP, se for um pacote ICMP.

? Informação sobre o protocolo de encapsulamento, se estivermos perante um túnel

VPN (túnel TCP, UDP ou ICMP).

Conforme a versão do núcleo, é possível ter diferentes módulos de firewall. Em núcleos de

versão 2.1.102 ou inferiores existe o ipfwadm, já em núcleos superiores à versão 2.1.102

existe o ipchains e em núcleos 2.4.0 ou superiores é possível utilizar o iptables como

7 Disponível em http://www.polbox.com/h/hs001/

Windows 2000 e Linux

- 45 -

alternativa. A diferença principal entre estas três opções reside nos algoritmos usados para

analisar e gerir o tráfego, embora a mais recente iptables seja mais rápida e possua mais

funcionalidades que a mais antiga ipfwadm.

O modo de funcionamento comum a todos estes módulos consiste em comparar a informação

extraída do cabeçalho do pacote com uma tabela de regras da firewall, que é predefinida pelo

administrador (Chirillo, 2001, p. 409). Cada vez que um pacote é recebido pela firewall, a

tabela é percorrida pela ordem com que as regras foram introduzidas (a primeira regra que foi

introduzida é a primeira regra a ser verificada). Quando a informação de um pacote coincide

com uma regra da firewall, essa regra é executada. Como foi referido anteriormente, é

possível aplicar as mesmas regras, ou optar por regras diferentes ou adicionais, conforme o

módulo de firewall que for usado. As regras comuns a todos os módulos são:

? Aceitar: aceita a passagem do pacote para o endereço de destino.

? Negar (descartar em iptables): nega a passagem do pacote para o endereço de destino.

? Rejeitar: nega a passagem do pacote para o endereço de destino e transmite uma

mensagem ICMP para a origem a informar que rejeitou o pacote.

Esta abordagem de controlo de fluxo de dados entre redes pode ser feita a mais alto nível na

camada aplicacional do modelo OSI. Neste caso, já não será correcto falar em firewalls como

mecanismos de controlo de acesso, mas sim de proxies.

Um proxy também executa o controlo de acesso entre redes, mas de forma diferente de uma

firewall. Enquanto que a firewall verifica a baixo nível aquilo que deve passar e aquilo que

deve bloquear, um proxy opera a alto nível e está dependente do protocolo de apresentação

usado, tal como o HTTP ou o FTP. Para diferenciar de forma mais profunda estes dois

dispositivos, argumenta-se que uma firewall apenas filtra os dados que podem ser acedidos,

enquanto que um proxy duplica os dados que podem ser acedidos.

Windows 2000 e Linux

- 46 -

Este mecanismo de duplicação possibilita a existência de caches, isto é, espaços de

armazenamento temporário em disco dos dados, e permite um registo fácil de toda a

actividade do proxy, bem como de toda a informação processada, já que todos os dados são

duplicados. No entanto os proxies são mais lentos que as firewalls, pois necessitam de usar

mais tempo de processador, memória e disco para processar esta duplicação, ou gestão de

caches (Mourani, 2001, p. 607).

O Squid é o servidor proxy de eleição no Linux. Permite operar como proxy com os

protocolos http e ftp e oferece uma gestão de caches avançada, com diversas opções. Tem

ainda um controlo de acesso por ACLs de configuração muito flexível (Mourani, 2001, pp.

615-627).

Outra abordagem alternativa de controlo de acessos a serviços de comunicações é feita através

do mecanismo tcpwrappers. Este mecanismo, que é implementado a alto nível na pilha

TCP/IP do Linux, permite a definição de regras de acesso básicas por endereços IP (são

consideradas ACLs), a serviços em execução na máquina. Comparativamente, este

mecanismo é uma implementação de controlo de acessos a serviços mais simples que uma

firewall, permitindo unicamente associações de serviços a gamas de endereços IP.

Tradicionalmente, utilizar-se- ia o protocolo telnet para aceder remotamente a um servidor

Linux. No entanto, este protocolo provou possuir diversas vulnerabilidades, descritas na

secção 3.2 (ver sequestro de sessão). Por isso foi actualmente substituído no mundo UNIX

pelo Secure Shell (SSH). O SSH é um protocolo padrão de facto, proposto para padrão da

IETF pelos seus criadores, a SSH Communications Security Corp, para comunicações ponto a

ponto cifradas por túneis VPN SSH (IETF, 2001a).

De facto, a utilização do SSH não se limita a substituir o protocolo telnet. Futuramente, com a

normalização definitiva do protocolo pela IEFT, através de túneis SSH será possível cifrar,

por exemplo, o correio electrónico ou sessões X-Windows conforme esquematizado na figura

7.

Windows 2000 e Linux

- 47 -

Figura 7 – Exemplo de comunicações cifradas de correio electrónico via SSH.

Em Linux, o protocolo SSH é implementado pelo OpenSSH, um conjunto de software SSH

que engloba um servidor e respectivo cliente SSH e o SCP, um programa de cópia segura de

ficheiros por SSH, que pode funcionar em substituição do tradicional protocolo FTP

(Mourani, 2001, p. 286).

2.4.5 Disponibilidade e Fiabilidade

Em Linux as operações de cópias de salvaguarda e restauro devem ser feitas a intervalos

regulares, pois muitos problemas quer de hardware quer de software podem acontecer. Um

procedimento típico consiste em copiar os dados das partições para um dispositivo de

armazenamento externo, que poderá ser um CD-ROM, banda magnética ou disco removível.

Isto possibilita que o dispositivo seja independente do sistema, e possa ser guardado num

lugar seguro (Tobler, 2000, p. 403).

As tarefas de cópia de segurança básicas são desempenhadas em Linux pelos tar ou dump

(Mourani, 2001, pp. 771,777). Estas operações podem ser automatizadas recorrendo a shell

scripts e a crontabs (tabelas de execução de comandos periódica).

Os scripts permitem parametrizar as cópias de segurança e escolher os dados que se pretende

salvaguardar, e aqueles que se pretende excluir da cópia de segurança. Por sua vez as crontabs

permitem executar os scripts (e por conseguinte a cópia de segurança) de forma periódica

(Mourani, 2001, pp. 774-775).

Windows 2000 e Linux

- 48 -

Numa alternativa mais avançada, é possível utilizar soluções cliente/servidor de cópia de

segurança, tais como o Advanced Maryland Automatic Network Disk Archiver (AMANDA).

O AMANDA é um sistema de cópias de segurança que permite ao administrador de uma rede

local fazer cópias de segurança de máquinas Windows (usando SAMBA) ou UNIX, para um

servidor de cópias de segurança central, utilizando os comandos nativos do UNIX já referidos

(tar e dump) e permitindo o armazenamento posterior em banda magnética, CDROM ou

disco rígido. Mais informações podem ser encontradas no local Web oficial8.

O suporte de RAID por software em Linux é assegurado nativamente no núcleo, sendo

possível escolher as seguintes arquitecturas (Østergaard, 2002):

? Modo linear: não se trata de uma verdadeira RAID mas sim de um agrupamento

lógico de partições de um ou mais discos. Não é tolerante a falhas, pois se um dos

discos falhar, a matriz lógica também falhará.

? As RAID 0, 1 ou 5 que são basicamente equivalentes às arquitecturas descritas na

secção 2.3.7.

? RAID 4: tal como a RAID 5, a RAID 4 possui paridade de dados. No entanto, a

diferença principal entre as duas RAIDs reside no facto da RAID 5 distribuir as

paridades por todos os discos da matriz, enquanto que a RAID 4 reserva um dos discos

como disco de paridades, onde guarda somente informação de paridade de dados.

Comparativamente, a RAID 4 possui uma velocidade de leitura bastante alta, mas tem

um desempenho muito deficiente na reconstrução dos dados após uma falha de disco.

8 Disponível em http://www.amanda.org/

Vulnerabilidades e Medidas de Protecção

- 49 -

3 Vulnerabilidades e Medidas de protecção

As vulnerabilidades lógicas de um Sistema Informático são todas e quaisquer vias de acesso

lógicas que permitem que as ameaças se concretizem em ataques (agressões) (Ferreira, 1995,

p. 17).

As ameaças são acções desencadeadas por pessoas ou acontecimentos susceptíveis de

conduzir a uma alteração não desejada de um recurso de um sistema de informação, qualquer

que seja o seu tipo (Ferreira, 1995, p. 14). Portanto uma ameaça é uma agressão que ainda não

se manifestou.

Um ataque (agressão) é uma acção efectivamente desencadeada por uma pessoa ou

acontecimento real que cuja concretização na ausência de medidas de segurança adequadas,

provocará uma alteração não desejada de um recurso do sistema de informação, qualquer que

seja o seu tipo (Ferreira, 1995, p. 14).

As medidas de protecção são medidas tomadas previamente aos ataques para evitar que uma

ameaça se concretize num ataque, ou para limitar a gravidade desse ataque.

As principais vulnerabilidades observadas em Sistemas de Informação são as seguintes

(McClure, 2000, p. 456):

? Firewalls mal configuradas que permitem acessos indesejados à rede interna ou

proxies com ACLs incorrectas. As ACLs de proxies ou regras de firewall podem dar

acesso pouco restritivo à rede interna.

? Pontos de acesso remoto inseguros. Uso de acessos remotos sem a implementação de

uma VPN, o que permite potencialmente o acesso à informação em trânsito por

terceiros, entre utilizadores remotos e os pontos de acesso.

? Fuga de informação através dos serviços que estão em funcionamento nos servidores.

Esta informação pode ser usada para atacar os próprios servidores ou o sistema.

Vulnerabilidades e Medidas de Protecção

- 50 -

? Servidores a correr serviços desnecessários, mas que podem constituir potenciais

vulnerabilidades. Quer os serviços necessários quer os desnecessários podem conter

erros de programação, que induzem os servidores em situações de buffer overflow, um

ataque de negação de serviço que potencialmente pode dar acesso total ou parcial ao

sistema.

? Palavras-chave fracas. Actualmente o Windows 2000 e o Linux recorrem a algoritmos

básicos e a dicionários, para evitar que as palavras-chave sejam demasiadamente

simples, mas esta vulnerabilidade continua a ter alguma expressão nos sistemas

operativos, pois estas medidas nunca são totalmente eficientes.

? Contas de utilizador com privilégios excessivos. Deve-se seguir sempre a regra de dar

os privilégios unicamente necessários para as tarefas que o utilizador vai

desempenhar.

? Servidores Web mal configurados, em especial servidores que corram scripts de

execução remota (CGIs). CGIs deficientemente programados podem conceder acesso

total ou parcial à máquina. A utilização e configuração correcta das permissões de

execução remota de scripts no servidor Web pode minimizar este problema.

? Utilização de software sem actualizações de correcções de erros. A gravidade desta

vulnerabilidade aumenta se for encontrada em serviços proporcionados pelo sistema,

pois pode permitir situações de buffer overflow com acesso total ou parcial à máquina.

O administrador do sistema deverá estar sempre atento a avisos de deficiências, de

correcções e de actualizações proporcionados pelas entidades competentes nesta

matéria, como por exemplo o CERT9.

? Relacionamentos de confiança excessivos entre máquinas do sistema, que podem

originar ataques de falsificação de identidade: uma máquina atacante identifica-se

como uma máquina de confiança perante uma máquina atacada.

9 Local de presença Web disponível em http://www.cert.org/

Vulnerabilidades e Medidas de Protecção

- 51 -

? Recursos de registo, monitorização e detecção inadequados a nível de rede e de

máquinas.

? Falha humana de politicas de segurança mínimas estabelecidas e aceites (vulgarmente

conhecida por engenharia social).

Segue-se uma descrição mais pormenorizada destas vulnerabilidades e respectivas medidas de

protecção, considerando os dois sistemas operativos em análise neste trabalho.

3.1 Estouro de Pilha – Buffer Overflow

Os ataques explorando condições de buffer overflow exploram código inseguro em execução

numa máquina, que aceita a introdução de dados inválidos para variáveis, sem os validar,

acabando por estourar a pilha do programa e frequentemente reescrevendo-a com código

arbitrário que o atacante deseja executar na máquina (Wall, 2000, p. 644).

A gravidade da vulnerabilidade de buffer overflow depende muito do tipo de programa em

que for encontrada. Na prática, é encontrada em todos os tipos de programas.

Na sua forma mais inofensiva, esta vulnerabilidade permite interromper a execução do

programa que é atacado. Se esse programa for um serviço do sistema, está-se perante um

ataque de negação de serviço. Pode inclusivamente atingir-se o caso extremo de encontrar

esta vulnerabilidade no próprio núcleo do Linux ou do Windows 2000. Neste caso o

funcionamento de todo o sistema fica comprometido, pois o sistema operativo deixa de

funcionar.

Noutra perspectiva igualmente grave, se o atacante conseguir reescrever a pilha com código

arbitrário, poderá ganhar acesso parcial ou total à máquina atacada, pois ficará com os

mesmos privilégios do programa que atacou. É um exemplo clássico de intrusão de sistemas

descrito no código fonte em C da listagem 1.

Vulnerabilidades e Medidas de Protecção

- 52 -

#include <stdlib.h>

#include <stdio.h>

main()

{

char command[80]=”date”;

char name[20];

printf(“Por favor introduza o seu nome:“);

gets(name);

printf(“Olá %s, A data e tempo actuais são: “,name);

fflush(stdout);

system(command);

}

Listagem 1

A listagem 2 mostra o programa executado em Linux.

$./a.out

Por favor introduza o seu nome:Alex

Olá Alex , A data e tempo actuais são: Wed Mar 10 11:18:52 GMT 1999

$./a.out

Por favor introduza o seu nome:run whoami

Olá run whoami, A data e tempo actuais são:netshark

$

Listagem 2

Se for introduzido de seguida o nome “/bin/bash” (comando de invocação de consola de

comandos), é possível ganhar acesso à consola da máquina. Se este programa tivesse setuid

root (ver secção 2.4.2), ganhar-se-ia acesso a uma consola com privilégios de administração.

Não é muito difícil imaginar as possibilidades que a exploração desta vulnerabilidade oferece

em diferentes tipos de programas e sistemas operativos (Wall, 2000, pp. 645-646).

No contexto de sistemas operativos, o Linux é estatisticamente mais sujeito a esta

vulnerabilidade, pois o código do sistema operativo e os serviços que proporciona estão

livremente disponíveis para a análise por programadores, que detectam mais facilmente este

tipo de vulnerabilidade, permitindo de forma positiva a sua rápida correcção, e de forma

negativa a sua rápida exploração para ataques (Chirillo, 2001, p. 616).

Vulnerabilidades e Medidas de Protecção

- 53 -

Por outro lado, o Windows 2000 (e os serviços de sistema associados) é código proprietário

que não é revelado a terceiros, o que torna a descoberta de erros de programação uma tarefa

difícil ? existe uma maior dificuldade em explorar uma vulnerabilidade que à priori é

completamente desconhecida com finalidade de atacar a máquina vulnerável (McClure, 2000,

p. 114).

De forma geral, como contramedida, deve-se ter sempre as últimas versões dos programas

afectados. Em Windows 2000, deve-se ter sempre as últimas actualizações disponibilizadas

oficialmente através da Microsoft, no seu local Web10 ou da página específica que a Microsoft

possui para este tipo de procedimentos de actualização, a Windows update11.

Estas actualizações são normalmente pequenas correcções (patches) ou, menos

frequentemente, um conjunto geral de correcções (service packs) a todos os erros que foram

sendo encontrados nos serviços do Windows 2000.

Em Linux, as correcções são disponibilizadas por duas vias. Os editores das distribuições

possuem métodos, tais como listas de correio de aviso de erros, para informar os utilizadores

sobre problemas encontrados no software distribuído. Alternativamente, em outras ocasiões

são substituídos nesta função pelos próprios programadores do software.

No primeiro caso, as correcções são geralmente disponibilizadas em formato binário,

enquanto que no segundo as correcções são fornecidas em código fonte.

Se não for possível a actualização do programa que possui vulnerabilidades de buffer

overflow, deve-se evitar usar o programa, e se for um serviço, deverá ser desactivado, ou ter o

seu acesso restringido por firewall ou ACLs. A desactivação de serviços em Linux é feita

editando os ficheiros de configuração do processo init (descrito na secção 2.4.1). Em

Windows, é feita usando a gestão de serviços nas ferramentas administrativas.

10 Em http://www.microsoft.com 11 Em http://windowsupdate.microsoft.com/

Vulnerabilidades e Medidas de Protecção

- 54 -

Como segunda linha de defesa na protecção destas vulnerabilidades, é possível usar certas

alterações de núcleo (patches), tais como o openwall12 que protegem o sistema contra certos

tipos (mas não todos) de buffer overflows. Nomeadamente, dispõe da opção de impedir que a

pilha seja executável, embora esta característica quebre a compatibilidade com certos tipos de

programas.

Casos práticos de exploração destas vulnerabilidades apareceram recentemente na versão

2.2.18 do núcleo do Linux, na qual um atacante poderia fazer negação de serviço local,

comprometendo o funcionamento da máquina, bem como em utilitários do sistema, como o

SAMBA ou o Sendmail (um agente de transporte de correio electrónico popular em Linux).

Estes utilitários poderiam ser atacados remotamente por um intruso anónimo, através da

introdução de parâmetros inválidos, concedendo-lhe acesso de administração (ambos os

programas funcionam com privilégios de administração).

No Windows 2000, este problema surgiu no novo serviço de impressão via Web, que permitia

a introdução de parâmetros arbitrários via Web, provocando uma condição de buffer overflow

que permitia a execução remota de comandos no servidor de impressão. O suporte de

controlos Web ActiveX também possui vulnerabilidades deste tipo.

Recentemente descobriu-se que um determinado conjunto de parâmetros ActiveX embebidos

numa página Web podem terminar a execução de um browser ActiveX (tipicamente o Internet

Explorer), que aceda a essa página com o suporte ActiveX ligado. O próprio servidor Web do

Windows 2000, o Internet Information Server (IIS), possui um largo historial deste tipo de

problemas (Chirillo, 2001, pp. 558-560), estando ligado a algumas das intrusões e

modificações mais famosas de páginas Web. À data de realização deste trabalho, a

vulnerabilidade mais recente (do IIS versão 5.0) pode ser consultada no CERT no seu local

Web13.

12 Local de presença Web disponível http://www.openwall.com/linux/ 13 Disponível em http://www.cert.org/advisories/CA-2003-09.html

Vulnerabilidades e Medidas de Protecção

- 55 -

3.2 Divulgação excessiva de informação

As firewalls, proxies e serviços do sistema mal configurados são outra vulnerabilidade

comum, pois todos eles, directa ou indirectamente, permitem a um intruso a obtenção de um

conjunto de informações que individualmente podem parecer inocentes e inúteis, mas que no

seu todo podem ser vitais para uma intrusão bem sucedida (McClure, 2000, p. 5).

O Domain Name System (DNS) pode ser usado para localizar, por exemplo, um servidor de

correio electrónico de um domínio (através do registo de DNS MX), identificando um alvo

potencial. No Windows 2000, este problema é agravado com a introdução dos registos SRV

que permitem a clientes a localização dos servidores na AD pelo tipo de serviço que

fornecem. O mapeamento dos servidores e serviços que proporcionam fica assim muito mais

facilitado para intrusos, principalmente se esses servidores DNS forem acessíveis

publicamente (McClure, 2000, p. 427). Uma distribuição lógica cuidada dos servidores de

DNS na rede e com acesso restrito aos servidores mais sensíveis (em termos de informação

que disponibilizam), resolve este problema.

O Traceroute é uma ferramenta de diagnóstico que permite traçar o caminho entre duas

máquinas, auxiliando no reconhecimento de possíveis máquinas entre a máquina que faz o

traceroute e a máquina alvo. Isto permite uma forma alternativa reconhecer máquinas

próximas da máquina alvo que possam ser usadas para a atacar. Como contramedida, é

possível bloquear o tráfego ICMP, que é usado para executar os traceroutes, na firewall

próxima da máquina alvo (que fica entre a máquina de origem dos traceroutes e a máquina

alvo) (McClure, 2000, pp. 25-27). No Linux, este processo é assegurado pelos componentes

de firewall já descritos anteriormente na secção 2.4.4. No Windows 2000, não existe por

defeito componente de firewall, que é assegurado por um componente independente (parte do

Backoffice 2000), o Internet Security and Acelleration Server (ISA).

Para além disso, a falta de um componente de firewall por defeito em instalações Windows

2000, e em algumas instalações Linux de certas distribuições, pode comprometer seriamente a

segurança da máquina noutras situações. Por exemplo, numa intrusão, normalmente é feita

uma pesquisa prévia de portas abertas no servidor (scan) com as quais se obtêm informações

sobre os serviços activos e frequentemente as respectivas versões. Se analisada

Vulnerabilidades e Medidas de Protecção

- 56 -

cuidadosamente, esta informação permite inclusivamente a detecção do sistema operativo

usando ferramentas como o nmap, uma das referências em pesquisa de portas (McClure,

2000, pp. 54-57).

O Windows 2000 é muito vulnerável a este tipo de situações, pois possui inúmeros serviços,

geralmente inúteis, a funcionarem por defeito, que denunciam a identidade do sistema

operativo (McClure, 2000, p. 428). Este caso também é observado em certas distribuições de

Linux (por exemplo a Redhat), que têm serviços como o portmapper e NFS, potencialmente

inseguros, ligados por defeito. Para além dos motivos anteriormente referidos, este é mais um

motivo para se ter apenas ligados os serviços absolutamente necessários em conjunto com um

sistema de firewall bem configurado.

A nível de disponibilidade de recursos no sistema, pode observar-se que os sistemas podem

igualmente fornecer demasiada informação aos seus utilizadores. Se a segurança de uma rede

for comprometida, informação adicional pode ser obtida por meio dos recursos existentes que

esse sistema disponibiliza, tais como as contas de utilizadores, as partilhas de recursos, entre

outros.

Por exemplo, no Windows 2000 observa-se que grande parte dos privilégios excessivos que

um utilizador comum possuía em versões anteriores, foram restringidos. A utilização do

comando net é mais restrita para o utilizador comum. No entanto, a listagem de máquinas de

um grupo de trabalho ou domínio, bem como as respectivas partilhas continua a ser permitida.

Embora esta funcionalidade seja normalmente desejável, esta informação não deverá estar

disponível a máquinas que ainda fazendo parte da estrutura da rede, não sejam de confiança,

tais como máquinas de departamentos diferentes, que possuem necessidades de segurança

diferentes. Deve-se portanto bloquear o acesso Netbios (que fornece estas informações) nas

máquinas que partilham os recursos de impressão ou de disco, a máquinas não confiáveis ou a

máquinas mais expostas a ataques.

Em Linux, o SAMBA (responsável pelas partilhas Netbios) não possui este problema, pois

permite a utilização de ACLs baseadas em utilizadores e endereços IP, que bloqueiam

eficazmente o acesso a partilhas de um determinado computador, sem a necessidade de

utilização de politicas de bloqueio numa firewall.

Vulnerabilidades e Medidas de Protecção

- 57 -

No entanto, o alvo mais óbvio nesta perspectiva é a própria AD. Foi demonstrado que

utilizando um cliente LDAP simples, um utilizador sem privilégios pode aceder à listagem de

todos os nomes de contas de utilizadores, se estiver presente na rede um servidor de acesso

remoto (RAS) de Windows NT. Este servidor necessita que os controladores de domínio 2000

funcionem em modo de compatibilidade, enfraquecendo as permissões de acesso à AD, de

modo a que o servidor RAS possa aceder às informações das contas dos utilizadores, o que

por outro lado, permite consultas LDAP por utilizadores não privilegiados (McClure, 2000,

pp. 430-431). Como contramedida neste caso particular, deve executar-se a migração dos

servidores RAS para Windows 2000 Server e executar o utilitário netsh que corrige as

permissões de acesso à AD, tornando-as mais restritas.

Este exemplo demonstra perfeitamente como a segurança em Windows 2000 fica

enfraquecida perante necessidades de compatibilidade com sistemas mais antigos,

principalmente quando a AD está inserida num domínio em modo misto, no qual existem

PDCs e BDCs de Windows NT. Outro exemplo seria a impossibilidade de criação de túneis

IPsec para VPNs entre máquinas NT e 2000, tendo de recorrer a PPTP com MPPE (ver secção

2.3.5), com algoritmos de cifragem mais fracos.

No Linux, o problema de fornecer informação excessiva a utilizadores surge sob outra forma.

É por exemplo possível, com os comandos netstat e ps, entre outros, obter informações

detalhadas sobre o que outros utilizadores, incluindo o administrador, estão a desempenhar no

sistema. Estas informações são particularmente valiosas para os ataques de sequestro de

sessão (session hijacking). Estes ataques permitem que uma terceira parte se intrometa entre

uma ligação cliente servidor, substituindo um dos dois (McClure, 2000, pp. 472-474).

Entre os protocolos de alto nível, pelo menos o telnet, e o ftp conseguem ser capturados. No

entanto existe uma contramedida simples de prevenir este problema. A utilização de redes

comutadas (com switches) entre o cliente e o servidor, impede ou dificulta bastante o trabalho

de sequestro de sessão (McClure, 2000, p. 475). Adicionalmente, o Linux cria também um

número de sessão aleatório que é enviado no início de sessão quando se estabelece a ligação

TCP/IP e incrementado sequencialmente nos pacotes posteriores transmitidos. Finalmente

Vulnerabilidades e Medidas de Protecção

- 58 -

podem aplicar-se alterações (patches) ao núcleo tais como o openwall14 que bloqueiam o

acesso a informação de netstat, ps e do directório /proc a utilizadores comuns.

Informações adicionais sobre os utilizadores no sistema Linux podem ser obtidas pelos

seguintes meios:

? Comando showmount mostra as partilhas Network File System (NFS) do sistema. A

utilização do serviço NFS é desaconselhada, não só devido a fornecimento de

informação excessiva, como também devido a um histórico de diversas

vulnerabilidades de segurança, incluindo condições de buffer overflow. Por outro lado,

o protocolo NFS destina-se apenas a pequenas redes, pois a transmissão de dados NFS

sobrecarrega a rede com informação excessiva de controlo. Se for realmente

necessário usar NFS, deve-se limitar o seu uso à rede interna, e bloquear o seu acesso

na firewall.

? Ficheiros de configuração tais como o smb.conf (do serviço SAMBA) de leitura

acessível a utilizadores permitindo o inventário das partilhas do sistema ou a recolha

de outras informações relevantes. A má configuração de partilhas SAMBA pode

igualmente resultar em directórios desprotegidos.

? Serviços do sistema que propositadamente fornecem informação, tais como o finger,

rwho, e rusers. Devem ser evitados a todo o custo.

? Comandos incluídos em serviços do sistema que permitem obter informações, como

os comandos EXPN e VRFY, do serviço de transporte de correio sendmail, que

permitem respectivamente revelar o endereço de entrega real associados a um

utilizador, e verificar os usernames de utilizadores validos no sistema. Estes comandos

devem ser desactivados sempre que possível através da correcta configuração dos

serviços.

14 Disponível em http://www.openwall.com/linux/

Vulnerabilidades e Medidas de Protecção

- 59 -

? Ficheiro /etc/passwd. O modelo de segurança tradicional do Linux atribui ao

ficheiro /etc/passwd toda a informação respectiva aos utilizadores. Conforme foi

descrito na secção 2.4.2, deve bloquear-se o acesso a esta informação aos utilizadores

comuns utilizando shadow passwords.

3.3 Vulnerabilidades de rede

No Windows 2000, as vulnerabilidades de rede surgem no âmbito da autenticação de

utilizadores.

Quando existem máquinas Windows NT na rede, o Windows 2000 não pode usar o protocolo

de autenticação de utilizadores por defeito, o Kerberos versão 5, substituindo-o pelo

tradicional NTLM. Este protocolo de autenticação é vulnerável, pois as palavras-chave

cifradas (hashes) em trânsito na rede, são decifráveis utilizando ferramentas tais como o

L0phtcrack15 (McClure, 2000, pp. 120-121). Deve-se, sempre que possível, migrar as estações

de trabalho NT para Windows 2000, de forma a poderem utilizar o Kerberos.

Situação semelhante é observada em Linux utilizando o protocolo telnet para aceder

remotamente a um sistema Linux, que não possui qualquer espécie de cifragem. Deve utilizar-

se sempre em substituição o SSH (Secure Shell).

Os ataques de negação de serviço (DoS), terminam a execução de serviços proporcionados

pelo sistema, ou põem em causa o funcionamento do próprio sistema. Para além da

exploração das vulnerabilidades de software já referidas (ver buffer overflows), existem ainda

ataques que exploram vulnerabilidades de protocolos, tais como o TCP/IP, e ataques DoS

específicos a sistemas operativos.

Ataques tais como o smurf, SYN flood ou ping flood, fazem parte de vulnerabilidades dos

protocolos TCP e ICMP, que permitem, entre outras fraquezas, a falsificação de endereços de

origem dos respectivos pacotes de dados. Estas vulnerabilidades são independentes do sistema

operativo, e de forma geral uma firewall bem configurada pode minimizar ou eliminar estes

ataques. 15 Disponível em http://www.l0pht.com

Vulnerabilidades e Medidas de Protecção

- 60 -

Até à data de realização deste trabalho, os ataques de negação de serviço específicos a ambos

os sistemas operativos estudados resumem-se a ataques explorando condições de buffer

overflow, alguns dos quais já referidos anteriormente. Neste contexto, existe, por exemplo um

ataque deste tipo em Windows 2000 que impede toda e qualquer autenticação local de

utilizadores16 interrompendo a execução do serviço winlogon, que é precisamente responsável

pela autenticação de utilizadores.

No entanto, isto não significa que futuramente não venham a ser descobertas mais falhas na

implementação dos protocolos de rede, que foram no passado a principal fonte de problemas

de ataques de negação de serviço específicos à família de sistemas operativos Windows e

Linux.

3.4 Vulnerabilidades de elevação de privilégios

A elevação de privilégios consiste na possibilidade de obter privilégios superiores, ou

adicionais, àqueles que um utilizador possui.

No Linux, a elevação de privilégios surge principalmente sob uma forma de ataques buffer

overflow a processos com privilégios de superutilizador ou processos setuid. Conforme foi

referido na secção 3.1, em ataques deste tipo o atacante obtém os mesmos privilégios do

processo.

Neste caso particular, a elevação de privilégios é feita atacando processos com privilégios

superiores (de superutilizador) ou adicionais (com setuid) aos que o atacante possui. Este tipo

de ataques é normalmente feito localmente, por utilizadores do sistema aos quais foram

atribuídos privilégios básicos de acesso, ultrapassando assim os inconvenientes de um ataque

remoto. Como exemplos, pode-se apontar a necessidade da existência de um serviço

vulnerável em execução, a manutenção da ligação cliente – servidor, defesas de firewall e

obtenção de shell de comandos interactiva. A secção 3.1 apresenta um bom exemplo sobre um

ataque local explorando este tipo de vulnerabilidades.

16 Disponível em http://www.securitytracker.com/alerts/2001/Feb/1000940.html

Vulnerabilidades e Medidas de Protecção

- 61 -

Para prevenir os buffer overflows locais, para além das medidas de protecção que devem ser

tomadas para os buffer overflows genéricos, só devem existir os programas com privilégios de

superutilizador ou com setuid que sejam estritamente necessários (McClure, 2000, p. 238), ou

seja, que necessitem, por exemplo, de aceder a dispositivos especiais, ou de utilizar recursos

de rede especiais (por exemplo, portas TCP locais inferiores a 1024). Esta regra é válida para

todo e qualquer software residente num sistema Linux, incluindo aplicações, que ainda que

não sejam serviços, possam ser executadas por utilizadores normais.

As ligações simbólicas são outra hipótese de elevação ou modificação de privilégios em

Linux. Basicamente o que acontece em certos programas com erros de codificação, incluindo

programas de sistema, é que ignoram as permissões do alvo para o qual as ligações simbólicas

apontam, e consideram apenas as permissões das ligações. Se a permissão da ligação for

menos restritiva do que o alvo (e geralmente é), serão ultrapassadas permissões convencionais

e criado uma potencial falha de segurança.

As permissões do alvo não são unicamente ignoradas: o alvo pode ter o seu UID e GID,

modificados por acção na ligação simbólica (McClure, 2000, p. 239). As práticas de

programação seguras são a melhor contramedida. Idealmente, todos os programas deveriam

verificar a existência de um ficheiro antes de tentar criá- lo, já que ao fazê- lo estariam a

verificar se esse ficheiro seria uma ligação simbólica, ignorariam as suas permissões, e

considerariam apenas as permissões do alvo dessa ligação.

Os descritores de ficheiro (file descriptors) são números inteiros não negativos que o sistema

usa para fazer a gestão dos ficheiros, em lugar de usar os respectivos nomes. Por convenção,

os descritores de ficheiros 0, 1 e 2 possuem usos implícitos que correspondem

respectivamente à entrada-padrão (stdin), à saída-padrão (stdout) e ao erro-padrão (stderr).

Assim, quando o núcleo abre um ficheiro existente, ou cria um novo ficheiro, ele retorna ao

processo (programa) que requisitou essa operação um descritor de ficheiro que o programa

pode usar, para ler ou gravar naquele ficheiro. Quando um ficheiro é aberto por um processo

privilegiado, pode ser possível a um atacante gravar nesse ficheiro, modificando-o conforme

deseja. Isto acontece porque os descritores de ficheiro não foram inicializados correctamente,

permitindo alterações no ficheiro por terceiros. Tal como sucede na vulnerabilidade anterior, a

Vulnerabilidades e Medidas de Protecção

- 62 -

melhor contramedida é utilizar práticas de programação correctas que inicializem

correctamente os descritores de ficheiros (McClure, 2000, p. 241).

A gravação do núcleo (core dump) de programas é outra vulnerabilidade de programação

possível em Linux. O Linux possui a faculdade de fazer a gravação do núcleo de programas

que pararam a execução abruptamente por violações de memória (segmentation faults), cuja

causa é normalmente devida a erros de execução. Embora esta informação em disco possa ser

útil para descobrir as causas desses mesmos erros, pode facultar o acesso a informação

sensível (por exemplo palavras-chave que estariam a ser usadas pelo programa na altura da

paragem de execução) por utilizadores não autorizados. Como contramedida, pode desligar-se

a geração de ficheiros de núcleo no sistema através do comando ulimit 0 (McClure, 2000, p.

243).

As bibliotecas partilhadas permitem que processos diferentes chamem porções de código

especificas de uma biblioteca comum quando executados. As principais vantagens deste

procedimento são a economia de memória e espaço em disco do sistema, e tornar a

manutenção do código uma tarefa fácil. Ao actualizar-se uma biblioteca partilhada, actualiza-

se qualquer programa que use essa biblioteca.

No entanto, as bibliotecas partilhadas têm uma desvantagem em termos de segurança: se um

atacante for capaz de modificar uma biblioteca partilhada, ou fornecer a sua própria biblioteca

alternativa com código arbitrário por meio de uma variável do ambiente, ele será capaz de

obter elevação de privilégios (McClure, 2000, p. 244). Um exemplo dessa vulnerabilidade foi

detectada no serviço telnet, no qual, em versões mais antigas, era possível alterar a variável de

ambiente LD_PRELOAD, de forma a carregar uma biblioteca alternativa, previamente

inserida no sistema. Essa biblioteca conteria código que permitiria ao atacante obter

privilégios de superutilizador.

Em Windows 2000 a elevação de privilégios, pode também ser executada por buffer

overflows locais, embora existam menos exemplos práticos neste contexto. O serviço

winlogon permite o envio de código arbitrário para, por exemplo, adicionar um utilizador ao

Vulnerabilidades e Medidas de Protecção

- 63 -

grupo de administradores locais17. Outra fonte de problemas muito comum é a instalação de

utilitários de sistema, tais como antivírus, que possuem este tipo de vulnerabilidades. Casos

recentes são o Norton Antivírus e o serviço telnet do Windows 200018, que permitiam

igualmente a execução de código arbitrário no contexto, isto é com privilégios, de

administrador. Em Windows 2000, deve restringir-se a execução de programas no contexto de

administrador aos programas minimamente necessários, para além das contramedidas já

referidas na secção 3.1.

A decifração de senhas localmente está também dificultada pelo Windows 2000, devido à

existência do mecanismo de cifra SYSKEY. Este mecanismo criptográfico estabelece uma

chave assimétrica de 128 bits para cifrar palavras-chave. A chave privada é armazenada

localmente ou em disquete (McClure, 2000, pp. 146-147). É possível obter o conteúdo da

Security Accounts Manager (SAM), recorrendo a programas que a conseguem ler (como por

exemplo o pwdump), ou utilizando programas executados via MS-DOS (como por exemplo o

NTFSDOS) que ultrapassam as permissões NTFS para aceder ao ficheiro da SAM. No

entanto, a SAM contém apenas as palavras-chave cifradas pelo mecanismo SYSKEY. Para a

descodificação completa das palavras-chave seria igualmente necessária a chave privada do

SYSKEY (McClure, 2000, p. 434).

Todo este processo é irrelevante se a AD estiver a funcionar. Nesse caso, as palavras-chave

são guardadas na AD e o mecanismo SYSKEY é ignorado em detrimento dos certificados

digitais para autenticação contidos na PKI do Windows 2000 e respectivos mecanismos de

autenticação (Kerberos ou NTLM).

3.5 Contramedidas práticas propostas

Esta secção propõe, de forma resumida, uma série de contramedidas práticas, algumas já

referidas anteriormente, como recomendação para uma configuração segura dos dois sistemas

operativos.

17 Detalhes disponíveis em http://www.securityfocus.com/bid/5927/discussion/ 18 Descrito em http://www.securityfocus.com/bid/2849/discussion/

Vulnerabilidades e Medidas de Protecção

- 64 -

No Windows 2000 deve-se inicialmente definir uma politica de segurança, isto é, deve

definir-se a estrutura de segurança lógica da AD, especificando que OUs, domínios e sites

irão existir, e que GPOs estarão associados a estes componentes. Se o sistema já existe só se

terá esta preocupação, caso se deseje GPOs novos ou adicionais para a máquina, ou máquinas,

que se irão adicionar ao sistema.

Na instalação deve-se sempre usar o NTFS como sistema de ficheiros, pois, conforme foi

referido, proporciona características de segurança adicionais indispensáveis. Quer em

Windows 2000, quer em Linux, deve-se sempre instalar os sistemas operativos em máquinas

sem múltiplos sistemas operativos, pois esta característica pode derrotar as permissões de

segurança destes sistemas operativos.

Após a instalação, deve-se imediatamente instalar as actualizações de serviços do sistema,

bem como as correcções eventuais que poderão existir. Este processo é conduzido

frequentemente acedendo ao local web de actualizações oficiais, o Windows Update19. Este

local web tem ainda disponível uma ferramenta de notificação automática de actualizações,

que deve igualmente ser instalada.

Após este passo, devem adicionar-se as politicas de segurança desejadas, ou herdar as que já

existem no domínio. No primeiro caso, deve-se promover primeiro o computador a um

controlador de domínio com o utilitário dcpromo, e depois usar as diferentes ferramentas

administrativas, conforme os GPOs a aplicar. Em particular, devem-se estabelecer GPOs para

politicas de palavra-chave, se houver necessidade de politicas de palavra-chave mais

restritivas que as usadas por defeito.

Seguidamente deverá instalar-se um antivírus com protecção acrescida contra a execução de

scripts web perigosos, com a verificação de mensagens de correio electrónico. Este antivírus

deverá igualmente suportar pesquisas durante o processo de inicialização do sistema, bem

como a verificação de novos dados introduzidos via dispositivos removíveis (como por

exemplo, as disquetes). O Antivirus deve igualmente possuir a faculdade de actualizar a sua

base de dados de vírus periodicamente, via Web de forma automática.

19 Disponível em http://www.windowsupdate.com

Vulnerabilidades e Medidas de Protecção

- 65 -

No contexto de comunicações de rede, todos os serviços desnecessários devem ser desligados,

usando a ferramenta de gestão de serviços, disponível nas ferramentas administrativas.

Perante ligações de acesso remoto, devemos usar cifragem PTPP sempre que possível. Deve-

se ainda estabelecer (ou herdar) os GPOs correctos, através da ferramenta de administração do

servidor de acesso remoto, para permitir o acesso apenas aos utilizadores necessários.

Deve-se igualmente usar a característica de call-back sempre que possível, já que permite ser

o servidor de acesso remoto a fazer a chamada telefónica ao utilizador, ao contrário da

situação normal, implementando um mecanismo adicional de verificação de autenticidade dos

utilizadores. Deve ter-se igualmente, um cuidado adicional com as partilhas de rede

executadas, verificando as permissões atribuídas, particularmente o conjunto de permissões

NTFS e de partilha, que é o conjunto realmente válido num sistema NTFS com partilhas de

rede.

Caso se deseje configurar rapidamente a segurança geral num sistema Windows 2000, deve-se

utilizar os perfis de segurança proporcionados pelo Windows. Estes perfis são um conjunto de

definições completo que permitem configurar rapidamente a segurança numa máquina

Windows 2000. Os perfis principais são:

? estação de trabalho com segurança básica,

? estação de trabalho com segurança avançada,

? servidor com segurança básica e

? servidor com segurança avançada.

Por defeito, os perfis de segurança básica são aqueles que foram instalados numa estação de

trabalho ou servidor Windows 2000. Para configurar a segurança usando os perfis pode

utilizar-se a ferramenta snap-in da MMC (Microsoft Management Console), a Security

Configuration and Analysis. O registo de actividades do sistema também é influenciado por

estes perfis, registando uma quantidade de eventos proporcional ao nível de segurança do

perfil instalado.

Vulnerabilidades e Medidas de Protecção

- 66 -

Em Linux, deve-se seguir a politica de actualizações do sistema, semelhante à que foi

exemplificada para Windows 2000, isto é, deve-se estar atento às actualizações de software,

principalmente de serviços do sistema, proporcionados pelos autores desses serviços ou pelos

editores das distribuições. Preferencialmente, deve ser usado um sistema de gestão de pacotes

de software como o Redhat Package Manager (RPM) para gerir o software instalado no

sistema.

No superservidor inetd/xinetd, responsável por uma parte dos serviços do sistema, deve-se

desligar todos os serviços desnecessários, editando os ficheiros necessários (em

/etc/inetd.conf ou /etc/xinetd.conf). Um processo semelhante deve ser seguido para

os restantes serviços do sistema, editando os scripts de configuração do processo init. Deve-se

utilizar os tcpwrappers para associar os serviços a endereços IP, explicitando que endereços

podem usar os serviços no ficheiro /etc/hosts.allow, e negando o acesso a todos os

outros endereços através de uma regra do tipo “all:all:deny” nos ficheiros

/etc/hosts.allow ou /etc/hosts.deny em distribuições mais antigas. Como o acesso de

endereços, em particular, tem prioridade sobre a proibição de todos os endereços, este

esquema de permissões funciona na prática.

Os serviços de fingerd e serviços remotos devem ser desligados, pois frequentemente

possuem vulnerabilidades, e fornecem a terceiros, informações que podem ser valiosas para

ataques. De igual modo, deve-se desligar igualmente o portmapper e o nfsd, a menos que

sejam absolutamente necessários.

A rede deverá sempre ter um sistema de firewall instalado por defeito, podendo escolher-se

um de entre os descritos anteriormente. Deve-se seguir a regra básica de permitir tudo aquilo

que é absolutamente necessário receber pela firewall, e proibir tudo o resto. Esta semântica é

considerada segura para implementações de regras de firewall. A firewall deve ter regras

diferentes para cada protocolo de rede (pelo menos TCP, UDP e ICMP).

Deve-se ter particular atenção ao protocolo ICMP, pois é amplamente usado para diversos

ataques de negação de serviço. Preferencialmente devem diferenciar-se as regras de acesso à

rede interna das regras de acesso à rede externa, pois frequentemente são duas politicas de

acesso completamente diferentes. Deve-se bloquear sempre os endereços IP tidos como de

Vulnerabilidades e Medidas de Protecção

- 67 -

rede interna (por exemplo 10.xxx.xxx.xxx) na ligação de rede externa, pois tratam-se de

tentativas de intrusão com pacotes de informação com endereços de origem falsos

(conhecidos por ataques de ip spoofing). Por outro lado, os sistemas que não necessitam de

fazer encaminhamento de pacotes devem desactivar o encaminhamento através do comando

“echo 0 > /proc/sys/net/ipv4/ip_forward”.

Deve ainda retirar-se do sistema todos os ficheiros setuid ou setgid desnecessários, pois são

uma potencial fonte de problemas, conforme referido anteriormente. Para encontrar os

ficheiros setuid e setgid do sistema deve executar-se o comando “/bin/find / -type f \(

-perm -004000 -o -perm -002000 ) -exec ls -lg {}”.

Finalmente, deve-se considerar a utilização de um sistema de detecção de intrusões se a

segurança é um aspecto crítico da implementação do sistema Linux.

Sistemas de detecção de Intrusão

- 68 -

4 Sistemas de Detecção de Intrusão

Os sistemas de detecção de intrusão (Intrusion Detection Systems – IDS) são sistemas, ou

conjuntos de sistemas, que têm a capacidade de detectar alterações no estado de sistemas

informáticos ou em redes informáticas (Stranger et al., 2001, p. 192). Os IDS enviam alertas

aos responsáveis pelo sistema, ou realizam as acções predefinidas apropriadas para auxiliar na

ajuda da protecção da rede ou do sistema.

Um IDS pode ser um sistema tão simples como uma máquina ligada a uma rede, a utilizar

uma aplicação básica de monitorização de rede, ou um sistema mais complexo a recolher

informação e a funcionar em diversas máquinas. Geralmente um IDS é constituído pelos

seguintes elementos (Stranger et al., 2001, pp. 192-193):

? Um dispositivo de recolha de informação: o IDS deve ter a capacidade de recolha de

dados, tais como as mudanças no disco rígido, a captura de pacotes de rede (sniffing),

e a leitura de ficheiros abertos.

? Um mecanismo de monitorização de processos internos: o IDS deve ter a capacidade

de automonitorizar-se, e de conduzir autoverificações de integridade, informando o

administrador respectivo se o IDS está a funcionar correctamente.

? Um dispositivo com capacidade de armazenamento de informação: o IDS deve ser

capaz de gerir informação, isto é, deve ser capaz de organizar a informação por

critérios predefinidos, tais como o tipo de informação ou a respectiva relevância.

? Um mecanismo de controlo: o IDS deve fornecer meios simples para controlar o seu

comportamento em termos de funcionamento.

? Um mecanismo de análise: o IDS deve permitir a pesquisa da informação armazenada

usando perguntas (queries) ou aplicações.

Sistemas de detecção de Intrusão

- 69 -

Os IDS podem ainda adoptar duas estratégias distintas para detecção de intrusões (Stranger et

al., 2001, p. 194):

? Os IDS baseados em regras são o tipo mais comum de IDS, principalmente porque são

fáceis de instalar. Estes IDS comparam as regras em efeito com o ambiente em que

estão a funcionar.

? Os IDS baseados em anomalias. Estes IDS recolhem amostras de informação sobre a

actividade no sistema, filtram a informação que corresponda a actividades anormais, e

agem de acordo. Estes IDS são mais difíceis de configurar, já que por vezes é difícil

distinguir as actividades normais das actividades anormais.

Os IDS podem funcionar em tempo real (continuamente), ou periodicamente em

determinados intervalos. A vantagem de funcionar em tempo real é a geração de grande

quantidade de informação, relativa à actividade do sistema, obtendo-se um controlo superior

sobre a detecção de intrusões. Os IDS que funcionam de forma periódica têm como principal

vantagem a filtragem da informação relevante, usando menos recursos do sistema para

funcionarem.

A classificação principal para diferenciar os IDS em tipos, consiste em distinguir os IDS

baseados em rede dos IDS baseados em terminal. Os IDS baseados em rede analisam o

tráfego de rede conforme ele é transmitido. Por outro lado, os IDS baseados em terminal

analisam os registos do sistema, as ligações de rede activas ou o disco, e tomam acções

apropriadas quando ocorre um determinado evento.

Os IDS baseados em terminal residem num único terminal de rede e monitorizam a actividade

específica a esse terminal, funcionando como serviços de sistema. Estes IDS podem ser

analisadores de registo ou analisadores de media. Os analisadores de registo analisam os

registos do sistema por ligações de rede activas, e monitorizam essas ligações. Os

analisadores de media analisam principalmente os discos rígidos e outros periféricos, tais

como drives removíveis, drives de banda magnética ou impressoras, criando uma base de

dados. Esta base de dados contém o estado original em que se encontrava o sistema. Quando

os analisadores de media encontram uma mudança considerada significativa, é feito um

Sistemas de detecção de Intrusão

- 70 -

registo dessa mudança, e enviado um alerta ao responsável do sistema. Um exemplo de um

analisador de media é o Tripwire20.

Os IDS baseados em rede operam entre as camadas de aplicação e de rede do modelo OSI,

analisando o tráfego que é transmitido na rede. Embora tal não seja necessário, a utilização

simultânea de um IDS baseado em rede, em diferentes terminais, é geralmente considerada

uma politica correcta de implementação destes IDS, já que permite que a informação,

recolhida pelos diferentes terminais possa ser comparada (Stranger et al., 2001, p. 196).

De uma forma geral os serviços proporcionados por um IDS são os seguintes:

? Identificação de tráfego de rede: esta funcionalidade não está presente nos

analisadores de media.

? Melhoria nas capacidades de registo e estabelecimento de limites: praticamente todos

os IDS incluem informação relevante adicional à informação proporcionada pelos

serviços de registos do sistema operativo. Por outro lado, o estabelecimento de limites

é melhorado em Linux a partir das versões do núcleo 2.2, graças às capacidades

POSIX descritas na secção 2.4.2. As capacidades POSIX implementadas no Linux são

uma funcionalidade deste sistema operativo aproveitada por vários IDS.

? Alertas: todos os IDS devem ter a capacidade de alertar a parte responsável do sistema

(administrador).

? Reconfiguração do Sistema: esta funcionalidade, presente em muitos IDS, permite que

o sistema seja reconfigurado pelo IDS, para reagir a um evento.

? Verificação de media: normalmente esta funcionalidade está presente unicamente em

analisadores de media.

20 Disponível em http://www.tripwire.org.

Sistemas de detecção de Intrusão

- 71 -

4.1 Implementação de um IDS

Para a componente prática deste trabalho foi estudada a implementação de um IDS para

Linux. Foi escolhido o Linux Intrusion Detection System (LIDS). O critério de escolha

baseou-se nas pontuações atribuídas pelos utilizadores do conceituado portal de segurança

informática SecurityFocus21. Outros IDS recomendados são o RealSecure da Internet Security

Systems (ISS)22 e o Snort23 (McHugh, 2000, pp. 48-49). A razão de ausência de um teste de

IDS para Windows prende-se com limitações da dimensão do trabalho e com o facto de esta

tecnologia, de acordo com os autores, não estar suficiente madura em ambientes Windows

(McHugh, 2000, p. 48; Stranger et al., 2001, p. 205). Adicionalmente, esta tecnologia está em

fase de testes no núcleo 2.5 do Linux, com o propósito de ser incluída de base no futuro

núcleo 2.6, através dos Linux Security Modules (LSM), um conjunto de módulos do núcleo

que visam reforçar a segurança do Linux.

O LIDS24 é um sistema de detecção de intrusões, baseado em terminal, que é aplicado como

código adicional no núcleo do Linux, mas que será futuramente integrado no Linux, através

da sua inclusão nos LSM. O LIDS reforça a segurança e a integridade do sistema,

implementando uma politica de segurança altamente parametrizada. Este sistema permite:

? Utilizar as capacidades POSIX implementadas no núcleo do Linux para melhorar as

permissões do sistema. As capacidades POSIX são um conjunto de permissões que

permitem implementar ACLs mais especificas de acesso a recursos do que as ACLs

padrão fornecidas pelo Linux. Noutra perspectiva possível, uma ACE com as

capacidades POSIX é constituída por uma associação entre um processo (programa),

uma capacidade POSIX e uma permissão de acesso (aceitar ou rejeitar). Quando o

processo não é especificado, admite-se que essa permissão é válida para todos os

processos ou para todo o sistema (global). Por exemplo, a capacidade

CAP_NET_BIND_SERVICE, quando ligada a um processo, permite que esse

processo utilize portas de rede inferiores a 1024. Por outro lado, se a capacidade

21 Disponível em http://www.securityfocus.com 22 Disponível em http://www.iss.net 23 Disponível em http://www.snort.org 24 Disponível em http://www.lids.org

Sistemas de detecção de Intrusão

- 72 -

CAP_SYS_MODULES for desligada, impede-se a utilização de módulos num sistema

Linux.

? Proteger ficheiros e processos determinados pela sua configuração. Ninguém,

incluindo o superutilizador, pode apagar esses ficheiros ou interromper esses

processos.

? Alertar a entidade responsável pelo sistema com avisos de segurança via núcleo, que

podem ser inclusivamente enviados via rede usando o serviço de correio electrónico e

os protocolos TCP ou UDP.

? Despoletar alertas perante ataques de pesquisas de portas de rede (port scanning), já

que possui integrado um detector deste tipo de situações.

? Modelo de segurança que só permite o acesso à configuração do LIDS, mediante uma

correcta autenticação do administrador. O mecanismo de autenticação é

deliberadamente independente do modelo de segurança do Linux, por razões de

segurança. O acesso administrativo é feito por autenticação através do utilitário de

administração lidsadm. De forma alternativa, em casos de funcionamento deficiente

do sistema, é possível desligar o LIDS através da passagem de parâmetros para o

núcleo nas opções inicias de boot do LILO (Linux Loader), programa responsável por

carregar o núcleo no sistema, executando a parte inicial do processo de boot.

A figura 8 esquematiza genericamente a arquitectura do LIDS. As regras de acesso são

introduzidas pelo administrador, com o utilitário lidsadm, que as envia para o LIDS. Cada

vez que regras são introduzidas o LIDS é reiniciado pelo sistema de inicialização. O

componente mais importante do LIDS é o componente de controlo de acesso que utiliza a

ACL em efeito no sistema, para gerir o acesso à interface de system calls, referido na secção

2.4.1. Dependendo da configuração de cada ACE da ACL, o componente de controlo de

acesso poderá eventualmente fazer registo de chamadas ao sistema, que coincidam com essas

ACEs. O LIDS possui ainda um detector de pesquisa de portas que envia o registo de

tentativas de pesquisa para o registo de actividades que reencaminha toda a informação que

recebe para o serviço de registo do sistema Linux, o Syslog.

Sistemas de detecção de Intrusão

- 73 -

Figura 8 – Arquitectura do LIDS (adaptado do Security at Kernel Level)

O sistema utilizado consistia num computador com a distribuição Linux Redhat versão 8.0 e

núcleo versão 2.4.20. Os objectivos pretendidos eram o acesso externo aos serviços por http,

ftp e web.

O primeiro passo foi configurar o núcleo com as alterações do LIDS, que adicionam opções

de configuração do núcleo que permitem, por exemplo, a activação do detector de pesquisa de

portas ou do envio de alertas por correio electrónico. Ambas as opções foram ligadas.

Seguidamente as ferramentas de administração e os ficheiros de configuração do LIDS foram

instalados. Na configuração por defeito do LIDS é necessário pelo menos ter algumas ACEs

criadas, de forma a atribuir as permissões necessárias à utilização de portas de rede locais

privilegiadas (inferiores a 1024), e de proibição de escrita em certos directórios do disco. Foi

executada a seguinte configuração:

? Acesso de leitura aos directórios /bin, /sbin /lib, /usr/bin /usr/sbin

/usr/lib e /etc e /lib. Este procedimento permite que se proteja as directorios

de ficheiros do sistema, o directório dos ficheiros de configuração e o directório de

bibliotecas prevenindo a sua adulteração.

Sistemas de detecção de Intrusão

- 74 -

? A capacidade CAP_SYS_RAWIO foi desligada globalmente para impedir o acesso

aos dispositivos (via /dev), já que tal acesso quebraria a protecção anterior.

? A atribuição da capacidade CAP_NET_BIND_SERVICE aos binários dos serviços de

http, ftp e ssh, para permitir a estes serviços a utilização de portas de rede

privilegiadas.

? Acesso de adição de dados (append) a /var/log, para permitir ao serviços de

registo do sistema a escrita nos ficheiros de registo.

? Acesso de leitura a /etc/shadow por parte dos binários /bin/login, /bin/vlock,

/bin/su, para permitir a autenticação no sistema.

? Atribuição das capacidades CAP_SETUID e CAP_SETGID a processos setuid e

setgid do sistema, tais como o processo httpd. Estas capacidades permitem a mudança

de privilégios do processo (EUID) após a sua invocação.

Seguidamente foi estabelecida uma palavra-chave de administrador do LIDS e o sistema foi

reiniciado para as alterações terem efeito. Foi então feita uma verificação do funcionamento

do sistema. Os problemas principais encontrados foram os seguintes:

? A rotação de registos do sistema. Se os registos do sistema estão protegidos contra

escrita para impedir a sua adulteração, como permitir uma correcta rotação periódica

de registos? Uma alternativa pode consistir em atribuir ao programa que executa a

rotação de registos (crond), o acesso de escrita aos mesmos. No entanto, esta

alternativa não obedece ao modelo de segurança definido pelo LIDS, já que se fosse

descoberta uma vulnerabilidade do tipo buffer overflow no crond, o atacante teria

privilégios de escrita aos registos.

? De forma semelhante a mudança de palavras-chave dos utilizadores, é normalmente,

inviável no LIDS. Uma alternativa seria dar ao utilitário /usr/bin/passwd o acesso

de escrita ao ficheiro /etc/shadow, mas novamente o modelo de segurança é

Sistemas de detecção de Intrusão

- 75 -

quebrado pelas mesmas razoes definidas na alínea anterior, já que a alternativa

sugerida é do mesmo tipo.

? O funcionamento normal dos serviços é afectado de forma proporcional ao grau de

rigidez de permissões. Isto é, quanto mais restritivas forem as permissões, maiores

serão os problemas de funcionamento observados no sistema. De forma geral, deve-se

pelo menos conceder a capacidade CAP_NET_BIND_SERVICE para permitir que os

serviços do sistema utilizem as portas de rede privilegiadas, se tal for necessário.

Resumidamente, é possível concluir que a configuração ideal de segurança para cada sistema,

é uma tarefa complexa e única, pois dependerá bastante da finalidade a que esse sistema se

destina, isto é, que serviços irão funcionar, e do grau de segurança desejado. O administrador

do sistema deve procurar obter um compromisso entre as capacidades POSIX a utilizar, os

objectos a proteger e os serviços a proporcionar, isto é deve definir uma politica de segurança

adequada às necessidades do sistema que gere.

Por outro lado, a abordagem de intrusão de sistemas baseada em terminal no LIDS necessita

ainda de mais testes e desenvolvimento, com vista à resolução da maioria dos problemas

encontrados.

Conclusão

- 76 -

5 Conclusão

O Windows 2000 e o Linux proporcionam ambos um modelo de segurança credível, apto a

responder à maioria das implementações de sistemas informáticos. A quantidade de

funcionalidades apresentadas, bem como a parametrização dos modelos descritos, permitem

acreditar na validade destes sistemas operativos, como sistemas operativos de rede que

proporcionam um nível de segurança lógica aceitável.

O Windows 2000 proporciona, de base, mais funcionalidades, das quais se destaca o serviço

de directoria de rede, a Active Directory (AD), que é de facto a grande inovação em termos de

segurança neste sistema operativo. A AD permite implementar e configurar a segurança a

diversos níveis, de forma eficaz (atingindo os objectivos desejados) e eficiente (usando os

recursos minimamente necessários), com escalabilidade considerável adaptando a segurança

lógica às necessidades da organização.

A Infra-estrutura de Chave Pública (PKI) integrada no Windows 2000 é sem dúvida outra

mais-valia significativa, permitindo a implementação rápida e eficaz de um sistema de gestão

de certificados, com total compatibilidade com os outros serviços proporcionados pelo

sistema operativo, entre os quais a própria AD. De forma análoga à AD, a PKI implementada

no Windows 2000 permite a adaptação da estrutura de gestão de certificados às necessidades

das organizações.

No Linux observa-se uma especialização do modelo em determinadas áreas, tais como o

sistema de acesso a recursos, e o sistema de comunicações. Talvez a maior mais-valia do

Linux seja a parametrização do núcleo que é permitida ao administrador, que também

influencia a parametrização do modelo de segurança. A implementação de sistemas de

detecção de intrusão tais como o LIDS, e de protecções tais como o openwall, são os

melhores exemplos nesse contexto, tal como ficou demonstrado neste trabalho.

No entanto, poderiam ser atingidos melhores resultados se a tecnologia de sistemas de

detecção de intrusão estivesse já integrada nos sistemas operativos, pois isso permitiria

aumentar a eficácia em termos de segurança de todo o sistema, já que permitiria a utilização e

o aproveitamento mais eficiente do modelo de segurança do Windows 2000, ou do Linux,

Conclusão

- 77 -

reduzindo igualmente as necessidades de adaptação dos modelos existentes actualmente aos

dois sistemas operativos. A situação actual de segurança no Linux é demonstrada através dos

problemas que foram encontrados na utilização do LIDS, que pode tornar-se extremamente

complexo de configurar, caso as necessidades de segurança do sistema variarem. Por outro

lado, a situação de segurança no Windows 2000 é mais grave, não existindo ainda um IDS de

terminal que aproveite totalmente as potencialidades de segurança deste sistema operativo. A

integração de um IDS na AD usando a PKI seria uma possibilidade desejável.

Este problema no Linux, será parcialmente resolvido através da inclusão do LIDS, openwall e

outros módulos de segurança no futuro núcleo 2.6 (nos LSM), que estará publicamente

disponível em 2004.

No que respeita às vulnerabilidades descritas neste trabalho, tentou-se apresentar as

vulnerabilidades mais comuns em ambos sistemas operativos, delimitando assim o espaço de

estudo. Algumas destas vulnerabilidades, tais como as incluídas na categoria de elevação de

privilégios são relativamente raras. Outras contudo, tais como os ataques de buffer overflow,

são bem mais frequentes, tendo por isso sido analisadas mais exaustivamente. As

contramedidas apresentadas neste trabalho podem dividir-se claramente em dois níveis de

abstracção: as contramedidas mais gerais, que indicam regras gerais a serem seguidas (por

exemplo, a configuração de firewalls), e as contramedidas mais específicas que contêm

instruções explícitas sobre os procedimentos específicos a seguir, tal como ficou descrito na

secção 3.5.

Bibliografia

- 78 -

6 Bibliografia

Bovet, Daniel P. (2001). Understanding the Linux Kernel. Sebastopol, O’Reilley &

Associates, Inc.

Card, Rémy. (1994). Design and Implementation of the Second Extended Filesystem., Actas

do First Dutch International Symposium on Linux, ISBN 90-367-0385-9. Amesterdão,

Dezembro de 1994.

Chirillo, J. (2001). Hack Attacks Revealed. New York, John Wiley & Sons, Inc.

Deupree Jr., R. e outros (2000). Designing a Secure Microsoft Windows 2000 Network.

Redmond, Microsoft Corporation.

Ferreira, Jorge (1995). Segurança dos Sistemas e Tecnologias de Informação. Lisboa,

Instituto de Informática e de Autoridade Nacional de Segurança.

IEEE (2001). IEEE Standard for Information Technology---Portable Operating System

Interface (POSIX®). [em linha]. Disponivel em

http://standards.ieee.org/catalog/olis/posix.html. [consultado em 29/04/2003].

IETF (2001). Microsoft Point-To-Point Encryption (MPPE) Protocol. [em linha]. Disponível

em <http://www.ietf.org/rfc/rfc3078.txt/>. [consultado em 25/03/2003].

IETF (2001a). Secure Shell (secsh) Charter. [em linha].

<http://www.ietf.org/proceedings/01dec/206.htm>. [consultado em 25/03/2003].

ISO (1994). Information technology -- Open Systems Interconnection -- Basic Reference

Model -- Conventions for the definition of OSI services. [em linha]. Disponível em

<http://www.iso.org/>. [consultado em 25/03/2003].

Bibliografia

- 79 -

Johnston, R. e outros (2000). Windows 2000 Network and Operating System Essencials.

Redmond, Microsoft Corporation, Modulo 1.

McClure, Stuart (2000). Hackers Expostos. São Paulo, Makron Books.

McHugh, John (2000). Defending Yourself: The Role of Intrusion Detection Systems. IEEE

Software, Setembro/Outubro 2000.

Mitchell, Mark (2001). Advanced Linux Programming. Indianapolis, New Riders Publishing,

p. 205.

Mourani, G. (2001). Securing and Optimizing Linux: The Ultimate Solution. Montreal, Open

Network Architecture, Inc.

NetCraft. [em linha]. Disponível em <http://www.netcraft.com/>. [consultado em

25/04/2002].

Østergaard, Jakob (2002). The Software-RAID HOWTO. [em linha]. <

http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html>. [consultado em 25/03/2003].

Redhat Corporation (2002). The Redhat 8.0 Manual [em linha]. Disponível em <

http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/>. [consultado em 22/03/2003].

Samar, Vipin (1996). Making Login Services Independent of Authentication Technologies,

Third ACM Conference on Computer Communications and Security, Nova Deli, 14 a 16 de

Março 1996.

Selby, R. e outros (2000). Implementing Microsoft Windows 2000 Professional and Server.

Redmond, Microsoft Corporation.

Sheldon, T. (1997). Windows NT Security Handbook. Berkeley, CA, Osborne MacGraw-Hill,

p. 90.

Bibliografia

- 80 -

Stranger, J. e outros (2001). Hack Proofing Linux. Rockland, Syngress Publishing Inc.

Sweet, A. e outros (2000). Designing a Microsoft Windows 2000 Directory Services

Infrastructure. Redmond, Microsoft Corporation.

Tobler, Michael J. (2000). Inside Linux. Indianapolis, New Riders Publishing.

Wall, K. (1999). Linux Programming Unleashed. Indianapolis, SAMS.

Wirzenius, L. e outros (2001). The Linux System Administrator's Guide. [em linha].

Disponível em <http://www.tldp.org/LDP/sag/index.html>. [consultado em 26/04/2003].

Anexos

- 81 -

7 Anexos

A tabela 1 apresenta uma lista ordenada cronologicamente de versões de sistemas operativos

directa ou indirectamente relacionados com o Windows 2000 e com o Linux, incluindo os

acontecimentos históricos mais relevantes em relação a estes dois sistemas operativos.

Tabela 1 - Descrição cronológica da história do Windows 2000 e Linux

Ano Sistema operativo ou versão

Características ou acontecimentos

1971 Unix A primeira versão do Unix nasce na Bell Labs. Posteriormente, durante esta década, são criadas diversas variedades de Unix, por investigadores a quem o código fonte foi distribuído, em universidades e companhias. Surgem o Solaris da Sun Microsystems, o BSD da Universidade de Berkeley e o IRIX da Silicon Graphics.

1981 Windows Beta (protótipos internos)

É iniciado o projecto Windows e são criados os primeiros protótipos.

1983 Sucessivos protótipos.

Sob fortes pressões comerciais, a Microsoft anuncia formalmente o Windows.

1985 Windows 1.0 O Windows 1.0 é posto finalmente à venda depois de sucessivos adiamentos. As vendas são modestas.

1987 Minix Andrew S. Tanenbaum escreve o Minix, um clone gratuito do Unix.

1987 Windows 2.0, mais tarde conhecido por Windows 286

Melhorias significativas na usabilidade e no interface gráfico que permitem que o Windows seja uma plataforma viável para um suporte de aplicações mais vasto.

1987 (final de)

Windows 386 Igual ao antecessor mas com suporte para modo protegido. As aplicações correm na memória estendida paginada, com acesso indirecto ao hardware (interrupções) via Windows (sistema operativo). Este seria um dos conceitos base aplicados no Windows NT.

1988 Windows NT beta Inicia-se o projecto do Windows New Technology.

1990 Windows 3.0 Melhorias significativas no interface do utilizador e na gestão da memória. Com 10 milhões de cópias vendidas, torna-se na mais bem sucedida interface gráfica do utilizador, até aquela data, na história da computação.

1991 Linux 0.01 Linus Torvalds, cria o Linux, uma alternativa ao Minix, e igualmente gratuita. Apenas para 386 e com poucos

Anexos

- 82 -

drivers.

1993 Windows NT 3.1 A primeira versão do Windows NT a ser lançada publicamente. É destinada ao mercado profissional de servidores e clientes em rede.

1994 Windows NT 3.5 A Microsoft actualiza o NT com a versão 3.5, que melhora o desempenho e diminui os requisitos de memória.

1994 Red Hat Linux É criada uma das mais populares distribuições de Linux actuais.

1994 Linux 1.0 Primeira versão estável do Linux.

1995 Windows NT 3.51 Suporte de aplicações Windows 95.

1996 Windows NT 4.0 (“Cairo”)

Introdução do Servidor Web Internet Information Server (IIS).

1999 Linux 2.2 Actual versão estável do núcleo (kernel) do Linux. Tem centenas de drivers que suportam uma enorme variedade de hardware e várias arquitecturas de computadores.

2000 Linux 2.4 É a actual versão beta do Linux em conjunto com a versão 2.5 que foi lançada posteriormente, mas que é mais instável. Possui um suporte de gestão de rede com funcionalidades muito avançadas, como o encaminhamento avançado, quality of service (QoS) e novo sistema de firewall (iptables e ipfilter). A versão 2.5 possui funcionalidade de emulação de binários de outros sistemas operativos Unix e os módulos de segurança do Linux (LSM).

2000 Windows 2000 Orientado a objectos com a Active Directory. Suporte de rede avançado com QoS. Multiprocessamento simétrico melhorado. Clustering. Funcionalidades de segurança adicionais.

2001 Windows XP Professional e home edition

É basicamente o Windows 2000 professional com um interface do utilizador melhorado e mais apelativo. A versão home tem um suporte de rede muito mais limitado do que a versão Professional.