AppArmor

AppArmor é uma implementação do Módulo de Segurança do Linux do controle de acesso obrigatório baseado em nomes. AppArmor confina programas individuais para um grupo de arquivos e capacidade do posix 1003.1e.

O AppArmor é instalado e carregado por padrao. Ele usa perfis de uma aplicação para determinar quais arquivos e permissões a aplicaão necessita. Alguns pacotes irão instalar seus própris perfis, e perfis adicionais podem ser encontrados no pacote apparmor-profiles.

Para instalar o pacote apparmor-profiles a partir do terminal:

sudo apt-get install apparmor-profiles

Perfis do AppArmor possuem dois modos de execução:

  • Reclamando/Aprendendo: violações do perfil são permitidas e anotadas. Útil para teste e desenvolvimento de novos perfis

  • Reforçado/Confinado: reforça a política do perfil como também a anotação das violação.

Usando AppArmor

O pacote apparmor-utils contém utilitários da linha de comando que podem ser usado para mudar o modo de execução do AppArmor, encontrar o estado de um perfil, criar novos perfis, etc.

  • apparmor_status é usado para ver o estado atual dos perfis do AppArmor.

    sudo apparmor_status
    
  • aa-complain coloca um perfil no modo complain.

    sudo aa-complain /path/to/bin
    
  • aa-enforce coloca um perfil no modo enforce.

    sudo aa-enforce /path/to/bin
    
  • O diretório /etc/apparmor.d é onde os perfis do AppArmor estão localizados. Ele pode ser utilizado para manipular o modo de todos os perfis.

    Digite o seguinte para colocar todos os perfis no modo complain:

    sudo aa-complain /etc/apparmor.d/*
    

    Para colocar todos os perfis no modo enforce:

    sudo aa-enforce /etc/apparmor.d/*
    
  • apparmor_parser para carregar um perfil no kernel. Pode também ser utilizado para recarregar um perfil utilizando a opção -r. Para carregar um perfil:

    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
    

    Para recarregar um perfil:

    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r
    
  • /etc/init.d/apparmor pode ser utilizado para recarregar todos os perfis:

    sudo /etc/init.d/apparmor reload
    
  • O diretório /etc/apparmor.d/disable pode ser usado com a opção apparmor_parser -R para disabilitar um perfil.

    sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/profile.name
    

    Para habilitar novamente um perfil desabilidado, remova o link simbólico ao perfil em etc/apparmor.d/disable/. Depois carregue o perfil utilizando a opção -a.

    sudo rm /etc/apparmor.d/disable/profile.name
    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
    
  • AppArmor pode ser desabilitada, e o módulo do kernel descarregado digitando-se o seguinte:

    sudo /etc/init.d/apparmor stop
    sudo update-rc.d -f apparmor remove
    
  • Para re-habilitar o AppArmor digite:

    sudo /etc/init.d/apparmor start
    sudo update-rc.d apparmor defaults
    
[Nota]

Substitua profile.name com o nome do perfil que você quer manipular. Substitua também /path/to/bin/ com o caminho atual do arquivo executável. Por exemplo, para o comando ping use /bin/ping

Perfis

Perfis do AppArmor são simples arquivos de texto localizados em /etc/apparmor.d/. Os arquivos são nomeados com o nome do caminho do executável que ele utiliza o perfil substituindo "/" por ".". Por exemplo /etc/apparmor.d/bin.ping é o perfl do AppArmor para o comando /bin/ping.

Existem dois tipos principais de regras usadas nos perfis:

  • Path entries: detalha quais arquivos uma aplicação pode acessar no sistema de arquivo.

  • Entradas de capacidade: determina quais privilégios um processo restrito tem permissão para usar.

Como exemplo, dê uma olhada em /etc/apparmor.d/bin.ping:

#include <tunables/global>
/bin/ping flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability net_raw,
  capability setuid,
  network inet raw,
  
  /bin/ping mixr,
  /etc/modules.conf r,
}
  • #include <tunables/global>: inclui declarações dos outros arquivos. Isto permite que as declarações pertencentes a múltiplas aplicações possam ser colocadas em um arquivo comum

  • /bin/ping flags=(complain): rotea para o programa do perfil, também configurando o modo para complain.

  • capability net_raw,: permite à aplicação acessar a capacidade CAP_NET_RAW Posix.1e.

  • /bin/ping mixr,: permite à aplicação ler e executar o acesso ao arquivo.

[Nota]

Depois de editar u arquivo de perfil, o perfil deve ser recarregado. Veja “Usando AppArmor” para detalhes.

Criando um Perfil

  • Desenhe um plano de testes: Tente pensar sobre como a aplicação deve ser exercitada. O plano de testes deve ser dividido em casos de uso pequenos. Cada caso de teste deve ter uma pequena descrição e deve listar os passos a seguir.

    Alguns casos padrões de testes são:

    • Iniciando o programa.

    • Parando o programa.

    • Recarregando o programa.

    • Testando todos os comandos suportados pelo script de início (init).

  • Gere um novo perfil: Use aa-genprof para gerar um novo perfil. De um terminal:

    sudo aa-genprof executable
    

    Por exemplo:

    sudo aa-genprof slapd
    
  • Para ter seu novo perfil incluído no pacote apparmor-profiles, registre um erro em Launchpad contro a pacote AppArmor:

    • Inclua seu plano de teste e de casos de teste.

    • Atribua seu novo perfil ao erro.

Atualizando Perfis

Quando o programa não se comporta bem, mensagens de auditoria são enviadas aos arquivos de log. O programa aa-logprof pode ser usado para escanear arquivos de log para que o AppArmor examine as mensgens, revise-as e atualize os perfis. De um terminal:

sudo aa-logprof

Referências

  • Um grande lugar para pedir assistência para AppArmor e involver-se com a comunidade do Ubuntu Server é o canal IRC #ubuntu-server em freenode.