Mecanismos de Segurança Sistemas Linux Bruno Loureiro bruno.loureiro@fe.up.pt 1
Sumário Conceitos introdutórios Técnicas de Controlo de Acesso Modelo Bell-LaPadula Mecanismos de segurança Linux Abordagem DAC Vs MAC Conclusões Bibliografia 2
3
4
Você Você não não pode pode entrar entrar nesta nesta área, área, não não está estáautorizado. 5
Conceitos Introdutórios Controle de Acesso: Método utilizado para conceder ou proibir acesso (leitura, escrita, etc.) a determinados recursos de um sistema. Modelos Clássicos de Controle de Acesso: Bell-LaPadula; Biba; Clark-Wilson; Chinese Wall. 6
Técnicas de Controlo de Acesso DAC (Discretionary Access Control Controle de Acesso Discricionário) Este modelo é baseado na ideia que utilizadores são donos dos objectos e portanto controlam quem pode aceder a estes. O dono do objecto pode conceder permissão para outro acederr, podendo revogar tal permissão posteriormente. Ex: Permissões ficheiros e directorias Windows e Linux MAC (Mandatory Access Control Controle de Acesso Mandatório) O utilizador não tem escolha a que objecto ele pode acessar ou a que permissão ele possui, o administrador é quem dá as permissões. EX: SELinux, AppArmor, GRSecurity, RBAC e Smack etc 7
Modelo Bell-LaPadula Histórico Desenvolvido por David Elliott Bell e Len LaPadula; Projetado entre 1972 e 1975; Cumpre o modelo Multilevel Security (MLS): Segurança de Multiníveis (trabalha com relação entre recursos, utilizadores e aplicações). Foi uma resposta às necessidades de protecção da Força Aérea Americana em 1973, que naqueles momentos estava preocupada com a segurança do acesso a sistemas de grande porte 8
Mecanismos de segurança Linux DAC Tipos de Utilizadores (Normal e Root) Comandos Su e Sudo Permissões acesso especiais (suid, guid, stickbit) MAC SELinux (modelo Bell Lapadula) 9
Tipos de Utilizadores Utilizador normal Tem privilégios limitados, o que limita as hipóteses de cometer erros de sistema. Super-utilizador, administrador ou root o Utilizador cujo ID é, por norma, 0 (zero) o Pode executar qualquer operação sobre o sistema o Tem acesso a todos os ficheiros de todo o sistema o É ele quem cria os outros utilizadores 10
Tipos de Utilizadores Root Perigos Imagine, por exemplo, que você está trabalhando com o utilizador como root. Necessitou de sair da frente do computador e não fez o bloqueio. Alguém mal-intencionado percebe isso e vai até seu computador, apaga directórios importantes do sistema e "sai de mansinho". Se estivesse utilizando um utilizador comum, isto é, um utilizador sem permissões para mexer nesses directórios, o invasor não teria conseguido apagá-los. 11
Root Recomendações Tipos de Utilizadores Deve-se evitar a utilização sistemática de um utilizador com privilégios root. É recomendável que a senha de root tenha ao menos 8 caracteres e que misture letras, números e símbolos. Além disso, é recomendável mudar essa senha a determinados intervalos de tempo (por exemplo: em cada 3 meses) 12
Comandos Su e Sudo Comandos Su e Sudo Estou a trabalhar com uma conta utilizador normal o que posso fazer para ter privilégios de root. Posso usar os comandos Su e Sudo. ( Quais as diferenças) 13
Mecanismos de Segurança Comando Su Comando Sudo Comando su (substitute user). É um recurso mais poderoso que o su. Permite a troca para outro utilizador (root ou outro) Uma maneira rápida e segura de fazer troca utilizador. Modo funcionamento Escreve su o sistema pedirá a senha root. Em seguida, você poderá fazer a modificação necessária. Ao concluir, basta digitar exit ou fechar o terminal e os privilégios de root estarão desabilitados novamente. su utilizador su (para utilizar como root) O uso do sudo é interessante porque o utilizador não precisa saber a senha do root, apenas terá que ter permissão para usar determinados comandos pelo sudo. É possível definir quem pode utilizá-lo e quais comandos podem ser executados por esses utilizadores (/etc/sudoers). Além disso, o sudo permite registrar em um arquivo de log todas as actividades efetuadas, algo que é bem limitado no su. sudo [-u utilizador] comando 14
Permissões Especiais O controle de acesso em ficheiros e directórios é a segurança fundamental para qualquer sistema multi-utilizador. Os sistemas de ficheiros nativos do Linux implementam controle de acesso utilizando algumas propriedades dos ficheiros/directórios. No Linux há três modelos de controlo de acesso básicos: Read, Write e Execution. 15
Permissões Especiais No Linux há três modelos de controlo de acesso básicos: Read, Write e Execution. Vejamos um exemplo de permissão básica na figura abaixo: Tipo de Objecto d => diretório b => bloco c => arquivo especial de caractere p => canal s => socket - => ficheiro normal r => significa permissão de leitura (read); w => significa permissão de gravação (write); x => significa permissão de execução (execution); - => significa permissão desabilitada. 16
Permissões Especiais Mas somente as três permissões básicas (rwx), não dão toda flexibilidade para controlar acesso aos ficheiros e directórios. Por isso o Linux tem mais três modelos especiais para controle de acesso, chamados suid (set user id), sgid (set group id) e sticky (Sticky bit). 17
Permissões Especiais (Suid) A propriedade SUID é somente para ficheiros executáveis e não tem efeito em directórios. No ficheiro executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do ficheiro, não com o ID do utilizador que executou o programa. Normalmente o utilizador dono do programa executável é também dono do processo sendo executado. A permissão de acesso especial SUID aparece no campo Dono. 18
Permissões Especiais (Suid) Comandos: Aplicando a propriedade SUID em um ficheiro executável utilizando formato simbólico (s): # chmod u+s programa.sh # ls -lah programa.sh -rwsr-xr-x 1 root roberto 0 2006-09-26 22:57 programa.sh 19
Permissões Especiais (Suid) - Retirando SUID: # chmod u-s programa.sh # ls -lah programa.sh -rwxr-x--- 1 root roberto 0 2006-09-26 22:57 programa.sh - Procurando SUID: Procurando a propriedade SUID em um arquivo executável utilizando formato simbólico (s): # find /home/roberto -perm u=s /home/roberto/programa.sh 20
Permissões Especiais (SGID) SGID ( Set Group ID ): A propriedade SGID funciona com directórios. Quando SGID é aplicado em um directório, os novos ficheiros que são criados dentro do directório assumem o mesmo ID de Grupo do directório com a propriedade SGID aplicado. A permissão de acesso especial SGID aparece no campo Grupo. 21
Permissões Especiais (SGID) Comandos: - Aplicando SGID: Aplicando a propriedade SGID em um directório utilizando formato simbólico (s): # chmod g+s /home/equipa # ls -lah /home/equipa drwxr-sr-x 2 roberto equipa 48 2006-09-26 23:21. - Retirando SGID: # chmod g-s /home/equipa # ls -lah /home/equipa drwxr-xr-x 2 roberto equipa 48 2006-09-26 23:21 22
Permissões Especiais (SGID) Procurando SGID: Procurando a propriedade SGID em um directório utilizando formato simbólico (s): # find /home -perm /g=s /home/equipa 23
Permissões Especiais (Sticky bit) Sticky ( Sticky bit): Em ficheiros executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar. Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória, e da próxima vez que ele for executado, será carregado mais rápido. Evita que os utilizadores eliminem ficheiros dos quais não são donos, sendo só o dono a poder elimina-lo. A permissão especial Sticky, pode ser especificada somente no campo outros utilizadores permissões de acesso. 24
Permissões Especiais (Sticky bit) Aplicando a propriedade Sticky em um ficheiro executável utilizando formato simbólico(t): # chmod o+t programa_pesado.sh # ls -lah programa_pesado.sh -rwxr-x--t 1 root root 2,9M 2006-09-26 23:51 programa_pesado.sh 25
SELinux O SELinux ("Security-Enhanced Linux") é uma implementação de uma flexível e refinada arquitetura MAC("Mandatory Access Control"). O SELinux foi originalmente um projecto de desenvolvimento da NSA ("National Security Agency") e outros. Ele foi integrado no Kernel do Linux usando o "framework" LSM ("Linux Security Modules"). As funcionalidades desenvolvidas no SELinux podem ser aplicadas em várias distribuições, como Debian, Ubuntu, Fedora, etc. 26
SELinux - Funcionamento SELinux provê uma política de segurança sobre todos os processos e objectos do sistema baseando suas decisões em etiquetas contendo 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. 27
SELinux Baseado em três elementos: sujeitos, objectos e acções/permissões: Sujeitos: Sujeitos são os intervenientes num sistema computacional (utilizadores, processos) Objectos: Objectos são as potenciais coisas que queremos proteger. Podem ser: ficheiros, directórios, processos, etc. (classes). Acções/Permissões: As ações que sujeitos SELinux realizam em objectos variam de acordo com a classe do objecto. Podem ser: criar, executar, ler, renomear, escrever, etc. 28
SELinux Contexto de Segurança O SELinux aplica a política que é baseada na relação de atributos de um sujeito para atributos de um objecto. Essa relação entre os atributos do sujeito e os atributos dos objectos são referenciados como contextos de segurança. Contextos de segurança são um conjunto de propriedades que são associados à objectos e sujeitos. Essas propriedades são: utilizador, papel, tipo e nível/categoria de segurança. A combinação desses campos forma o contexto de segurança. 29
SELinux Contextos de Segurança Modelo Bell La-Padula (Revisão) Níveis de Segurança 30
Contexto de Segurança - Exemplo S3-Top Secret S2- Secret S1- Confidential S0 Unclassified Nesse exemplo, o arquivo /usr/bin/passwd mostra que seu contexto de segurança é do utilizador SELinux system_u, com o papel object_r, do tipo passwd_exec_t e nível de segurança s0. 31
DAC VS MAC Um utilizador pode expor ficheiros ou directórios à brechas de segurança utilizando incorrectamente o comando chmod. Com DAC existem apenas dois tipos de utilizadores: Administradores e Não-administradores. Para alguns serviços e programas rodarem com nível elevado de privilégio basta fazer um simples comando su. 32
DAC Vs MAC O MAC permite que seja definido permissões de como os processos irão interagir com outras partes do sistema tais como: ficheiros, dispositivos e outros processos. Com este modelo os processos podem garantir apenas permissões necessárias pela funcionalidade pretendida. 33
Conclusão Conhecimento das diferenças entre o comando su e sudo. Ficamos a conhecer algumas permissões especiais dos ficheiros do Linux. Verificamos a utilidade do SELinux de forma a poder trabalhar com vários níveis (modelo de Bell-Lapadula). Comparação entre a abordagem MAC Vs DAC. 34
Questões 35
Bibliografia e Referências Bibliografia Slides de Politicas de Segurança de SSI - J. Magalhães Cruz;FEUP; Permissões de acesso especiais SUID, SGID e Sticky - http://www.skiva.com.br/educ/artigos/50.pdf Modelo de Segurança SELinux - http://jczucco.googlepages.com/node14.html Redhat Documentation - Multi-Level Security (MLS) - https://listman.redhat.com/docs/en- US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/sec-mls-ov.html - Links - http://pt.wikipedia.org/wiki/sudo - http://pt.wikipedia.org/wiki/su - http://pt.wikipedia.org/wiki/selinux 36