domingo, 15 de fevereiro de 2009

Curso SELinux - Parte I

Olá este é a primeira parte do curso SELinux, que iremos apordar neste momento.
Este curso foi tirado do portal: http://comunidade.cdtc.org.br/


SELinux - Parte I
Introdução

O SELinux ("Security-Enhanced Linux") foi desenvolvido pela agência nacional de segurança dos EUA, a NSA (National Security Agency), e toma como base o princípio do mínimo privilégio ao extremo, restringindo até o usuário root.

SELinux foi implementado usando uma flexível e refinada arquitetura MAC ("Mandatory Access Control"). Desta forma, ele provê uma política de segurança sobre todos os processos e objetos do sistema. Suas decisões são baseadas em labels, e contém uma variedade de informações relevantes à segurança. A lógica da política de tomada de decisões é encapsulada dentro de um simples componente conhecido como servidor de segurança ("security server") com uma interface geral de segurança.

Ele foi integrado ao Kernel do Linux usando o "framework" LSM ("Linux Security Modules").

Inicialmente sua implementação utilizou os identificadores (IDs ou PSIDs) armazenados nos inodes livres do sistema de arquivos ext2. Tal representação numérica era mapeada pelo SELinux como um label do contexto de segurança. Porém, isso necessitaria de uma modificação em cada sistema de arquivo para suportar os PSIDs, o que não é uma solução escalável.

Assim, a próxima etapa da evolução do SELinux foi um módulo carregável no Kernel 2.4 que armazenava os PSIDs em um arquivo normal fazendo com que suportasse mais sistemas de arquivos.

Entretanto, essa solução não possibilitava a ideal perfomance do sistema.

Então o código do SELinux finalmente foi integrado ao kernel 2.6.x com total suporte por LSM e contendo atributos (xattrs) no sistema de arquivos ext3. E o SELinux foi alterado para usar xattrs como forma de armazenamento da informação do contexto de segurança.

Atualmente, vem sendo realizado um extenso trabalho com o objetivo de deixar o kernel pronto para o SELinux bem como seu subseqüente desenvolvimento em esforços conjuntos da NSA, Red Hat, IBM e a comunidade de desenvolvedores do SELinux.

O MAC mostra-se bem superior ao tradicional DAC ("Discretionary Access Control"), pois este possui diversas limitações.

Caso utilize somente o DAC, o dono de um arquivo/objeto provê um potencial risco de corrompê-lo. Um usuário pode expor arquivos ou diretórios à brechas de segurança utilizando incorretamente o comando chmod e uma não esperada propagação dos direitos de acesso. Um processo inicializado pelo usuário como um script CGI pode fazer tudo que quiser com quaisquer arquivos possuídos por este usuário. Por exemplo um Servidor HTTP pode realizar qualquer operação sobre arquivos que estão no grupo web ou softwares maliciosos podem conquistar nível root de acesso rodando como processo de root ou utilizando setuid ou setgid.

 

O DAC prevê apenas duas grandes categorias de usuários: Administradores e Não-administradores. Para alguns serviços e programas rodarem com nível elevado de privilégio as escolhas são poucas e tipicamente resolvidas dando completo acesso de administrador.

 

O MAC permite que sejam definidas permissões de como os processos irão interagir com outras partes do sistema como arquivos, devices, sockets, portas e outros processos (todos chamados de objetos para o SELinux).

 

Isso é feito através de uma política de segurança definida administrativamente sobre todos os processos e objetos. Estes processos e objetos são controlados pelo Kernel e a decisão de segurança é tomada com todas as informações disponíveis ao invés de utilizar somente a identidade do usuário. Com este modelo os processos podem garantir apenas permissões necessárias pela funcionalidade seguindo um princípio de poucos privilégios.

 

Sobre MAC, por exemplo, usuários que expõem seus dados utilizando chmod estão protegidos pelo fato de seus dados têm um tipo único associado com seu diretório "home" e outros processos não podem tocar nestes dados sem devida permissão dentro da política.


É muito importante ter habilidade de aprender termos técnicos e colocá-los em prática. Também é importante que já tenha uma idéia do que pretende fazer, como administrar configurações de serviços básicos, satisfazer o usuário /home/servidor via Apache HTTP, manipular o policiamento da aplicação web PHP, ou realizar um policiamento que permita que certa aplicação seja protegida pelo SELinux.

Para isso, é necessário ter:

  • Elevado conhecimento em Linux
  • Se pretende administrar serviços, manipular ou analisar policiamento, conhecimento em nível de administrador e a experiência necessária.
  • Conhecimento em segurança no sistema Linux/UNIX
  • Conhecimento sobre como o sistema Linux/UNIX opera em baixo-nível, tal como são realizadas as chamadas ao Kernel para operações (entrada, saída, ler, escrever, etc.)
  • Conhecimento de programação e da teoria do sistema que é usado no policiamento.
  • Familiaridade com a linguagem M4, o que ajudaria a entender algumas partes do policiamento SELinux
  • Privilégios de administrador no sistema
Algum local para examinar e testar o policiamento.Pode ser uma máquina de teste ou desenvolvimento, ou uma estação de trabalho.



Bem pessoal, por enquanto é só! Na segunda parte falaremos sobre sistemas de arquivos e instalação de pacotes adicionais.


Abs.


Jamildo