Professional Documents
Culture Documents
Control Kernel)
Adriano Antonio da Silva1, Felipe Amadeu Junges1, Maiquel Felipe Schroeder1
Resumo. Este artigo visa realizar uma breve análise do SMACK o qual é uma
implementação de MAC com várias melhorias. O SMACK foi desenvolvido
por Casey Schaufler, com o objetivo de modificar um sistema operacional
tornando-o seguro de acordo com os requisitos que lhe forem necessários.
1. Introdução
Visando uma maior segurança dos sistemas operacionais, Casey Schaufler desenvolveu
o Smack um módulo de segurança para sistemas Linux.
Também chamado de Linux Security Module o (LSM) é um framework
que os sistemas linux mantém no seu código para implementações de segurança o qual é
utilizado pelo Smack para incorporar-se ao kernel do sistema.
O Smack trabalha com rótulos sobre processos, arquivos e objetos do sistema,
além de implementar regras descrevendo quais tipos de acesso são permitidos por
combinações específicas de rótulos. Ao contrário do SELinux o Smack foi projetado
especificamente para a simplicidade na administração.
2. Fundamentos
Mandatory Access Control (MAC) ou Controle de Acesso Mandatório nada mais é que
uma maneira de restringir o acesso a um objeto baseado na sensibilidade da informação
contida nele próprio e nas autorizações de acesso a informações dessa sensibilidade.
(Nobre J. C., 2010).
Se comparado ao SELinux pode-se dizer que o SMACK é mais fácil de ser
implantado e configurado ao sistema, além de necessitar de um suporte menor das
aplicações. Diferente do SELinux o objeto herda o rótulo do sujeito que criá-lo, de modo
que execute o rótulo, só é relevante para determinar se o processo do sujeito está
autorizado a executá-lo. O processo que é criado tem o rótulo do sujeito que o executou
e não o rótulo associado com o arquivo executável. E esta simplicidade faz sentido para
dispositivos embarcados, que precisam implementar apenas um conjunto limitado de
funções. Nesse caso, a redução pode ser alcançada no tempo de desenvolvimento, bem
como a quantidade de memória RAM e FLASH necessárias. (Edge J., 2008).
Tarefas de Sistema tal como init e daemons de sistema são executadas com
rótulo floor. Tarefas de usuário são atribuídas com rótulos de acordo com a
especificação encontrada no arquivo de configuração /etc/smack/user. (Schaufler, C.,
2008).
Na Figura 1. O usuário Barney foi atribuído um rótulo Ruble. Este usuário pode
ler dados ou executar programas rotulados como floor(“_”). Ele também pode ler e
gravar para /dev/null, que tem o rótulo de estrela(“*”). Processos rodando com rótulo
floor não têm qualquer acesso aos dados de Barney. Um processo rodando com rótulo
hat(“^”) tem acesso de leitura dos dados dos usuários liberado, mas não tem acesso de
escrita.
Figura 2. Interação básica de rótulos.
Com essas regras básicas processos de sistema executados com o rótulo floor
são protegidos de processos que são executados com outros rótulos. A Figura 2. mostra
acesso permitido quando dois rótulos de usuários estão em uso. Neste imagem o
processo com rótulo Java pode ler e escrever em dados com rótulos Java, o processo
com rótulo mp3 tem acesso de leitura e escrita em dados com rótulo mp3, o mesmo
acontece com processos com rótulo de sistema floor, que possuem acesso a dados
rotulados como floor. Tanto processos Java quanto mp3 possuem acesso de leitura aos
dados de sistema floor. Nenhum dos dois processos de usuários tem acesso aos outros
dados.
Com o isolamento provido pelo Smack a separação de acessos é simples.
Existem muitos casos onde seria interessante limitar o acesso de sujeito para objetos
com rótulos diferentes. Um exemplo familiar é o modelo espião de sensibilidade. Uma
cientista trabalhando em projeto classificado como altamente secreto seria capaz de ler
documentos de classificação inferior, tudo que ela escrever irá ser criado como
altamente secreto. Para resolver estes casos o Smack incluiu um mecanismo para
especificar regras de permissão de acesso entre rótulos.
3.6. Privilégios
1) CAP_MAC_ADMIN – permite que um processo execute funções administrativas,
como carregar regras de acesso.
2) CAP_MAC_OVERRIDE – isenta um processo de todas as regras de controle.
3.7. Rede
O Smack reforça o controle de acesso dos protocolos de rede. Normalmente um
pacote enviado por um processo é marcado com uma tag no rótulo, no entanto pacotes
que recebem rótulo de ambiante são enviados sem a tag. Isto é aceitável porque
adicionamos uma tag CIPSO no cabeçalho do pacote IP. Quando o pacote é recebido é
checado para localizar a tag CIPSO que vai identificar o seu rótulo. Se não for possível
marcar um pacote de rede, um rótulo de rede de ambiente é assumido. Depois que o
pacote é entregue uma checagem é feita para determinar o sujeito com o rótulo no
pacote que deve ter acesso de escrita para receber o processo, mas se este não for o caso
o pacote será descartado.
3.9 Administração
O Smack suporta algumas opções de montagem como:
1) smackfsdef=label: especifica o rótulo dado a arquivos que não possuem um
rótulo atributo.
2) label = smackfsroot: especifica o rótulo para atribuir a raiz do sistema de
arquivo se ele não tem um atributo.
3) label = smackfshat: especifica um rótulo que deve ter acesso de leitura para
todos os rótulos de conjunto sobre o sistema de arquivos.
4) label = smackfsfloor: especifica um rótulo para que todos os rótulos de conjunto
do sistema de arquivos possam ter acesso de leitura.
Estas opções de montagem são aplicáveis a todos os tipos de sistema de arquivo
com a exceção do NFS.
4. Conclusão
Pode-se concluir que atualmente o Smack é um modulo complexo, porém
simples para administrar, comparando-o com o SELinux podemos dizer que ele não
perde muito na relação de segurança do sistema.
Mas ele tem suas limitações, ele é útil para o acesso de usuários e processos específicos
que acessam vários recursos, assim como a criação de um conjunto de rótulos e regras
que regem os processos do sistema, serviços de rede entre outros. Mas restringir o
acesso como SELinux seria impossível. Assim administradores que não necessitarem de
um sistema de segurança robusto, o Smack pode muito bem ser suficiente. (Edje, J.,
2007).
5. Referências
Edge, J. (2008), “ OLS: Smack for embedded devices”,
http://lwn.net/Articles/292142/,
Agosto de 2008.
Corbet, J. (2007), “SMACK meets the One True Security Module”,
http://lwn.net/Articles/252562/, outubro de 2007.
Edge, J. (2007), “Smack for simplified access control”,
http://lwn.net/Articles/244531/,
Agosto de 2007.
Schaufler, C. (2008), “The Simplified Mandatory Access Control Kernel”,
http://schaufler-ca.com/data/SmackWhitePaper.pdf, Março de 2007.
Nobre, J. C. (2010), “Mandatory Access Control e SE Linux”,
http://www.inf.unisinos.br/~jcnobre/sso/files/sso-aula16.pdf