Você está na página 1de 55

SELinux

Vinicius Uriel

O Que é SELinux?

SELinux

Security Enhaced Linux

A ag ência de seguran ç a nacional dos Estados Unidos (NSA) desenvolveu um projeto de pesquisa que resultou na Flask Security Architecture.

O SELinux é uma implementa çã o dessa arquitetura.

SELinux

Os sistemas de controle de acesso disponí veis na maior parte dos sistemas operacionais se restringe a um controle de acesso discricion á rio.

A arquitetura Flask (Flux Advanced Security Kernel) se coloca como uma alternativa, implementando controle baseado em pap éis e mandat ó rio.

SELinux

DAC: Discretionary Access Control

Controle de acesso baseado na posse do objeto, o dono do objeto tem acesso total ao seu objeto e define que tipos de acesso dar aos demais sujeitos do sistema.

SELinux

MAC: Mandatory Access Control

O controle é baseado na permiss ão de acesso a uma classe de sigilo espec í fica. As classes de sigilo s ã o imut á veis, pr é­estabelecidas e fixadas pelo sistema operacional.

Ex: MLS/MCS, implementa modelo mandat ó rio descrito por Bell e LaPadula.

SELinux

RBAC: Role Based Access System

Cada papel no sistema possui um conjunto de

permiss

õ es.

Um usu á rio real pode desempenhar diversos pap é is.

SELinux

Flask Architecture:

Controle sobre propaga ção de privil é gios.

A cada a çã o as permiss õ es sã o verificadas.

Permissõ es de acesso bastante configur áveis.

Anula çã o de permiss õ es.

Histó ria

Motiva çõ es:

SELinux

Aumento da Complexidade dos softwares.

Aumento contí nuo na quantidades de incidentes de segurança em TI.

Interconectividade. (Internet)

Patch versus 0­day Attacks

SELinux

Sistemas Unix disponibilizam uma s é rie de mecanismos de prote çã o:

ACLs

Proteçõ es de memó ria

SandBoxing

Controle de acesso discricionário

SELinux

Diante desse contexto a NSA (Ag ê ncia Nacional de Seguranca, Estados Unidos), realizou uma sé rie de projetos de pesquisa, um deles resultou na arquitetura Flask.

SELinux

Lanç ado em 2000

Desenvolvido sobre a licensa GPL, j á que foi desenvolvido pela comunidade open­source em colabora çã o com a NSA.

Inicialmente foi desenvolvido como um patch ao kernel 2.2 e em seguida para o 2.4

SELinux

Posteriormente foi criada uma API no kernel 2.5 do Linux, LSM (Linux Security Modules).

Esta API d á suporte a modulos de seguran ç a externos ao Kernel do Linux.

Essa API foi projetada para atender as necessidades do SELinux. Pois este foi a motiva ção de sua cria çã o.

SELinux

Sugest ã o do pr ó prio Linus Torvalds, que preferia essa abordagem à inser çã o do SELinux diretamente no Kernel.

Hoje, diversas distribui çõ es d ã o suporte ao SELinux.

SELinux

SELinux

Funcionamento

SELinux

O SELinux toma sua decis ão com base em tr ê s elementos b á sicos:

Sujeitos (Processos)

Açõ es

Objetos (Arquivos ou Processos)

SELinux

SELinux

SELinux

Quando um sujeito tenta realizar uma a çã o sobre um objeto, os Contextos de Seguran ç a do ator e do objeto s ã o enviados ao Servidor de Seguran ç a que ir á tomar a decis ão baseada nas sua Polí ticas.

SELinux

O SELinux associa informa çõ es, chamadas de atributos de seguran ç a, aos sujeitos e objetos.

User identity

Role

Type (Domain)

User Identity

SELinux

Identidades no SELinux, não é necess áriamente associado a um usu ário do sistema. A relação é de n para n.

Para processos, indica o conta sob a qual o processo est á rodando

No caso de objetos, determina as contas de usuário que s ão donas do objeto

Role

SELinux

Um usu ário SELinux pode estar associado a um ou mais pap éis.

Os pap éis (roles) definem um conjunto de permissõ es dados ao usu ário.

Todo objeto (arquivos) são do tipo object_r, e em geral est ão associados a alguma classe.

As classes agrupam permiss õ es relativas a um determinado objeto.

Type

SELinux

Divide Sujeitos e Objetos em grupos relacionados.

Estabelecem SandBoxes onde um processo fica confinado.

Em SELinux é chamado de Domí nio quando se refere a um processo.

SELinux

Contexto de Seguran ç a:

A tupla formada pelos três atributos de seguran ça do SELinux é chamada de contexto de segurança.

Com base nos contextos de seguran ça é que s ão tomadas as decisõ es de acesso ou de transi ção.

SELinux

Tipos de Decis ã o:

Decis õ es de Acesso

Decide se um sujeito pode realizar determinada opera çã o em determinado objeto.

Decis õ es de Transi ção

Determina o tipo que ser á associado a objetos rec é m criados: Arquivos ou Processos.

SELinux

Decis õ es de Acesso

Decis õ es tomadas com relação aos contextos de segurança do sujeito e do objeto.

O servidor de segurança retorna 3 vetores

Allow

Audit To Allow

Dont Audit

SELinux

Decis õ es de Acesso

Verificam se um sujeito de um determinado domí nio tem determinada permissão a um objeto de uma determinada classe de outro domí nio .

SELinux

Decis ã o de Transi çã o

Processos

Quando um processo é criado ele é associado ao mesmo dom í nio do processo pai.

Alguns processos sã o definidos como ponto de entradas em novos domí nios, quando eles s ã o postos em execução transicionam para o novo dom í nio.

SELinux

Decis ã o de Transi çã o

Arquivos

Por padr ã o sempre que um novo arquivo é criado ele recebe o tipo do diret ó rio em que est á contido.

Podem ser definidas regras que atribuam tipos espec í ficos para arquivos criados por determinados processos em determinados domí nios.

SELinux

Modos de Funcionamento

Toda vez que uma decisão é tomada, os vetores de acesso retornados são guardados em uma cache chamado AVC, para melhorar a performance.

AVC : Access Vector Cache

SELinux

Modos de Funcionamento

O SELinux pode ser configurado para funcionar de 2 maneiras:

Enforcing

As regras s ão aplicadas e s ã o gravados os logs

Permissive

Os logs s ã o gravados mas n ã o impede nenhuma a çã o

Utilizando SELinux

SELinux

Um usu á rio é definido em SELinux por um nome seguido do sufixo u. Ex: user_u

Um papel é definido por um nome seguido de _r. Ex: sysadm_r

Um tipo/dom í nio é definido por um sufixo t. Ex: sysadm_t

SELinux

Um contexto de seguran ç a:

system_u:system_r:sendmail_t

Usuá rio: system_u

Papel: system_r

Tipo: sendmail_t

Ferramentas:

SELinux

Há diversas ferramentas que auxiliam na administração do SELinux.

Algumas ferramentas de sistema foram modificadas para melhorar a intergração com o SELinux (opção Z)

Exemplos:

SELinux

id ­Z

ps auxZ

ls ­ ­context

getenforce, setenforce

semanage

sestatus

Mais Exemplos:

audit2allow

semodule

seinfo

SELinux

Polí ticas

SELinux

As pol í ticas definem as interaçõ es entre os objetos papéis e domí nios.

As distribuiçõ es j á vem com uma s érie de pol í ticas implementadas.

As pol í ticas s ão có digos binários compilados carregados no SELinux.

Sintaxes b á sicas

SELinux

Politicas de Transição:

type_transition <tipo(s) fonte> <tipo do objeto>:

<classe(s)> <novo tipo>

Os argumentos no plural podem ser agrupados entre {} caso haja mais de um

Trasi ções de dom í nio sempre tem process no lugar da classe.

SELinux

Exemplo:

type_transition tipo1_t

tipo3_t

tipo2_t: {dir file}

Quando um processo no domí nio tipo1_t criar um arquivo ou um diretó rio dentro de um diretó rio do tipo tipo2_t esse objeto passará a ser do tipo

tipo3_t

SELinux

Polí ticas de permiss ã o:

<tipo_av> <tipo(s) fonte> <tipo(s) alvo(s)>:<classe(s)> <permissõ es>

tipo_av : Tipo do vetor de acesso, Allow, AuditAllow, DontAudit

Os argumentos no plural podem ser agrupados entre {} caso haja mais de um

Exemplo

SELinux

Allow tipo1_t tipo2_t:file {read append}

Permite que um processo do tipo1_t leia ou acrescente dados ao final de um arquivo do tipo2_t

SELinux

Um pol í tica é composta basicamente por 3 arquivos:

Um arquivo que contem as regras da polí tica com extensão .te (type enforcement)

Um arquivo que contem o contexto dos arquivos utilizados na regra com extens ão .fc (file context)

Um arquivo com uma descri ção do seu m ó dulo com extensão .if (interface)

SELinux

Dos 3 arquivos, apenas o .te é obrigat ó rio.

Ao compilar a pol í tica ser á gerado um arquivo bin á rio .pp (policy package).

SELinux

Para escrever uma polí tica é necess ário conhecer bem os tipos, os usu á rios e os pap é is definidos em seu sistema, alé m de conhecer as classes de objetos e as permissõ es associadas a cada classe.

:'(

SELinux

Para facilitar a escrita de pol í ticas o SELinux usa uma sé rie de macros, que ser ão processadas pelo processador de macros M4, muito popular em unix.

Essas macros ecapsulam v árias opera çõ es e agrupam permissõ es comumente utilizadas.

SELinux

Apesar de serem um pouco melhor documentadas, as macros ainda exigem que se conhe ç a bem um n ú mero muito grande delas.

O problema inicial n ão foi resolvido por completo.

:'(

SELinux

Existe um esfor ç o por parte dos desenvolvedores do SELinux e por parte da distribuiçõ es em prover ferramentas que facilitem as rotinas de administra çã o de pol íticas do SELinux.

Algumas ferramentas grá ficas sã o iniciativas da propria equipe de desenvolvimento do SELinux e independem da distribui çã o.

SELinux

Quando uma opera çã o é negada pelo Servidor de Seguran ç a, ela é gravada em um log, (Exceto no caso do vetor dontaudit ser retornado).

Essa mensagem é conhecida como avc:denied

Podem ser gravada em /var/log/messages ou em log pró prio. Ex: Fedora 9, localizados em:

/var/log/setroubleshoot

SELinux

Essa mensagem pode ser utilizada para gerar uma regra que permita determinada opera çã o.

Utilizando o comando audit2allow é poss í vel gerar a regra que permita determinada opera çã o a partir da mensagem de nega çã o.

SELinux

Tamb é m n ão é ideal.

Pode estar abrindo uma brecha maior do que a esperada.

Performance:

SELinux

Apesar do artigo sobre a arquitetura de frasco afirmar que a arquitetura teria modestos impactos sobre o desempenho do sistema, em sua primeira implementação real (o pró prio SELinux), foi constatada uma perda de desempenho de cerca de

7%.

Demonstra çõ es:

SELinux

Obrigado!

Fontes:

SELinux

http://jczucco.googlepages.com/node2.html

http://www.nsa.gov/selinux/papers/flask­abs.cfm

http://www.centos.org/docs/5/html/Deployment_Guide­en­US/

Cap ítulos 8, 43 e44

http://www.redhat.com/docs/manuals/enterprise/RHEL­4­

Manual/pdf/rhel­selg­en.pdf McCarty, Bill. SELinux. O'Reilly. October 2004

Vinicius Uriel