Você está na página 1de 85

Alexandre Marinho Ferreira

netshark@cerem.ufp.pt

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

Abril de 2003
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
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.

-I-
Aos meus Pais

- II -
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.

- III -
Í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

- IV -
Í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

- V-
Introdução

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/

-6-
Introdução

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.

-7-
Introdução

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.

-8-
Windows 2000 e Linux

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

-9-
Windows 2000 e Linux

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.

- 10 -
Windows 2000 e Linux

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 reduzido 4 .

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/

- 11 -
Windows 2000 e Linux

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.

- 12 -
Windows 2000 e Linux

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

- 13 -
Windows 2000 e Linux

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.

- 14 -
Windows 2000 e Linux

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),

- 15 -
Windows 2000 e Linux

? 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

- 16 -
Windows 2000 e Linux

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 gr upo 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.

- 17 -
Windows 2000 e Linux

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

- 18 -
Windows 2000 e Linux

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.

- 19 -
Windows 2000 e Linux

? 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

- 20 -
Windows 2000 e Linux

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.

- 21 -
Windows 2000 e Linux

? 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):

- 22 -
Windows 2000 e Linux

? 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.

- 23 -
Windows 2000 e Linux

? 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.

- 24 -
Windows 2000 e Linux

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

- 25 -
Windows 2000 e Linux

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.

- 26 -
Windows 2000 e Linux

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.

- 27 -
Windows 2000 e Linux

É 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 IPSec 5 , 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

- 28 -
Windows 2000 e Linux

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

- 29 -
Windows 2000 e Linux

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.

- 30 -
Windows 2000 e Linux

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.

- 31 -
Windows 2000 e Linux

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

- 32 -
Windows 2000 e Linux

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

- 33 -
Windows 2000 e Linux

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.

- 34 -
Windows 2000 e Linux

? 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

- 35 -
Windows 2000 e Linux

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.

- 36 -
Windows 2000 e Linux

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

- 37 -
Windows 2000 e Linux

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.

- 38 -
Windows 2000 e Linux

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).

- 39 -
Windows 2000 e Linux

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”.

- 40 -
Windows 2000 e Linux

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.

- 41 -
Windows 2000 e Linux

? 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.

- 42 -
Windows 2000 e Linux

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

- 43 -
Windows 2000 e Linux

O MPPE é suportado através da adição de código extra ao núcleo, encontrado no local web
dedicado a este projecto 7 . 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/

- 44 -
Windows 2000 e Linux

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.

- 45 -
Windows 2000 e Linux

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 necessit am 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.

- 46 -
Windows 2000 e Linux

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 coma ndos 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).

- 47 -
Windows 2000 e Linux

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 deficie nte na reconstrução dos dados após uma falha de disco.

8
Disponível em http://www.amanda.org/

- 48 -
Vulnerabilidades e Medidas de Protecção

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.

- 49 -
Vulnerabilidades e Medidas de Protecção

? 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/

- 50 -
Vulnerabilidades e Medidas de Protecção

? 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.

- 51 -
Vulnerabilidades e Medidas de Protecção

#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).

- 52 -
Vulnerabilidades e Medidas de Protecção

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 Web 10 ou da página específica que a Microsoft
possui para este tipo de procedimentos de actualização, a Windows update 11 .

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/

- 53 -
Vulnerabilidades e Medidas de Protecção

Como segunda linha de defesa na protecção destas vulnerabilidades, é possível usar certas
alterações de núcleo (patches), tais como o openwall 12 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

- 54 -
Vulnerabilidades e Medidas de Protecção

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

- 55 -
Vulnerabilidades e Medidas de Protecção

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.

- 56 -
Vulnerabilidades e Medidas de Protecção

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 simple s 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

- 57 -
Vulnerabilidades e Medidas de Protecção

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/

- 58 -
Vulnerabilidades e Medidas de Protecção

? 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
L0phtcrack 15 (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

- 59 -
Vulnerabilidades e Medidas de Protecção

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

- 60 -
Vulnerabilidades e Medidas de Protecção

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

- 61 -
Vulnerabilidades e Medidas de Protecção

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

- 62 -
Vulnerabilidades e Medidas de Protecção

grupo de administradores locais 17 . 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 2000 18 , 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/

- 63 -
Vulnerabilidades e Medidas de Protecção

No Windows 2000 deve-se inicialmente definir uma politica de segurança, isto é, deve
definir-se a estrut ura 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 Update 19 . 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

- 64 -
Vulnerabilidades e Medidas de Protecção

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.

- 65 -
Vulnerabilidades e Medidas de Protecção

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

- 66 -
Vulnerabilidades e Medidas de Protecção

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.

- 67 -
Sistemas de detecção de Intrusão

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.

- 68 -
Sistemas de detecção de Intrusão

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

- 69 -
Sistemas de detecção de Intrusão

registo dessa mudança, e enviado um alerta ao responsável do sistema. Um exemplo de um


analisador de media é o Tripwire 20 .

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.

- 70 -
Sistemas de detecção de Intrusão

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 SecurityFocus 21 . Outros IDS recomendados são o RealSecure da Internet Security
Systems (ISS) 22 e o Snort 23 (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 LIDS 24 é 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

- 71 -
Sistemas de detecção de Intrusão

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.

- 72 -
Sistemas de detecção de Intrusão

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.

- 73 -
Sistemas de detecção de Intrusão

? 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 é

- 74 -
Sistemas de detecção de Intrusão

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.

- 75 -
Conclusão

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,

- 76 -
Conclusão

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.

- 77 -
Bibliografia

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].

- 78 -
Bibliografia

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.

- 79 -
Bibliografia

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].

- 80 -
Anexos

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 Características ou acontecimentos


versão

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 É iniciado o projecto Windows e são criados os primeiros
(protótipos internos) protótipos.
1983 Sucessivos Sob fortes pressões comerciais, a Microsoft anuncia
protótipos. 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 Melhorias significativas na usabilidade e no interface
tarde conhecido por gráfico que permitem que o Windows seja uma plataforma
Windows 286 viável para um suporte de aplicações mais vasto.
1987 Windows 386 Igual ao antecessor mas com suporte para modo protegido.
(final As aplicações correm na memória estendida paginada, com
de) 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

- 81 -
Anexos

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 Introdução do Servidor Web Internet Information Server


(“Cairo”) (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 É basicamente o Windows 2000 professional com um
Professional e home interface do utilizador melhorado e mais apelativo. A
edition versão home tem um suporte de rede muito mais limitado
do que a versão Professional.

- 82 -

Você também pode gostar