Apparmor Admin Guide Pt Br

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Apparmor Admin Guide Pt Br as PDF for free.

More details

  • Words: 26,378
  • Pages: 130
Novell AppArmor 2.0 02/21/2006

www.novell.com Guia de Administração

Guia de Administração do Novell AppArmor 2.0 Lista de Autores: Leona Beatrice Campbell, Jana Jaeger Esta publicação é propriedade intelectual da Novell Inc. O seu conteúdo pode ser duplicado, em parte ou integralmente, desde que um rótulo de copyright esteja visivelmente localizado em cada cópia. Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. O SUSE LINUX GmbH, os autores ou os tradutores não deverão ser responsabilizados por possíveis erros ou conseqüências decorrentes. Novell, o logotipo da Novell, o logotipo N e SUSE são marcas registradas da Novell, Inc. nos Estados Unidos e em outros países. *Linux é marca registrada de Linus Torvalds. Todas as outras marcas registradas de terceiros pertencem aos seus respectivos proprietários. Envie sugestões e comentários para [email protected].

Sumário

Sobre este guia

v

1 Imunizando programas

1

2 Selecionando programas a imunizar

3

2.1 2.2

Imunizar programas que concedem privilégios . . . . . . . . . . . . . Inspecionar portas abertas para imunizar programas . . . . . . . . . . .

3 Criando perfis do Novell AppArmor 3.1 3.2 3.3 3.4 3.5 3.6 3.7

11

Componentes e sintaxe dos perfis . . . . . . . . . . . . . . . . . . 11 Criando e gerenciando perfis do Novell AppArmor . . . . . . . . . . . 14 Criando perfis do Novell AppArmor com a GUI do YaST . . . . . . . . 16 Criando perfis do Novell AppArmor usando a interface da linha de comando . 40 Dois métodos de criação de perfis . . . . . . . . . . . . . . . . . . 45 Nomes de caminhos e englobamento . . . . . . . . . . . . . . . . 65 Modos de acesso a permissões de arquivo . . . . . . . . . . . . . . 66

4 Gerenciando aplicativos em perfil 4.1 4.2 4.3 4.4 4.5

3 4

Monitorando seus aplicativos protegidos Configurando notificações de evento . Relatórios . . . . . . . . . . . . . Reagindo a eventos de segurança . . . Mantendo perfis de segurança . . . .

69 . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

69 70 73 95 96

5 Criando perfil dos aplicativos web com o ChangeHat Apache 5.1 5.2

99

Apache ChangeHat . . . . . . . . . . . . . . . . . . . . . . . . Configuração do Apache para mod-apparmor . . . . . . . . . . . .

6 Suporte 6.1 6.2 6.3 6.4 6.5

Atualizando o Novell AppArmor Usando as páginas de manual . Mais informações . . . . . . Solução de problemas . . . . Relatando erros do AppArmor .

Glossário

100 107

111 online . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

111 111 113 114 116

119

Sobre este guia O Novell® AppArmor é projetado para fornecer segurança de aplicativo fácil de usar, tanto para servidores como para estações de trabalho. Novell AppArmor é um sistema de controle de acesso que lhe permite especificar por programa os arquivos que o programa pode ler, gravar e executar. O AppArmor protege os aplicativos sem confiar em assinaturas de ataque, de maneira a impedir ataques, mesmo se eles estiverem explorando vulnerabilidades previamente desconhecidas. O Novell AppArmor consiste em: • Uma biblioteca de perfis do AppArmor para aplicativos Linux* comuns, que descreve os arquivos que o programa precisa acessar. • Uma biblioteca de classes de fundação de perfil (blocos de construção de perfil) do AppArmor necessária para atividades comuns de aplicativo, como pesquisa de DNS e autenticação de usuário. • Uma suíte de ferramentas para desenvolver e aprimorar perfis do AppArmor, de maneira que você possa mudar os perfis existentes para adequá-los às suas necessidades e criar novos perfis para os seus próprios aplicativos locais e personalizados. • Vários aplicativos especialmente modificados que são habilitados para AppArmor a fim de fornecer segurança avançada na forma de delimitação única de subprocesso, inclusive o Apache. • O módulo carregável do kernel do Novell AppArmor e scripts de controle associados para aplicar políticas do AppArmor no seu sistema SUSE® Linux. Este guia aborda os seguintes tópicos: Imunizando programas Descreve a operação do Novell AppArmor. Selecionando programas a imunizar Descreve os tipos de programas que devem ter perfis do Novell AppArmor criados em sua intenção.

Criando perfis do Novell AppArmor Descreve como usar as ferramentas do Novell AppArmor para imunizar os seus próprios programas e de terceiros que você possa ter instalado no sistema SUSE Linux. Também ajuda você a adicionar, editar ou apagar perfis que tenham sido criados para seus aplicativos. Gerenciando aplicativos em perfil Descreve como realizar manutenção de perfil do Novell AppArmor, que envolve em rastreamento de questões e problemas comuns. Criando perfil dos aplicativos web com o ChangeHat Apache Permite criar subperfis para o servidor web do Apache que lhe permite delimitar de forma compacta pequenas seções de processamento de aplicativos da Web. Suporte Indica opções de suporte para este produto. Glossário Fornece uma lista de termos e suas definições.

1 Feedback Queremos receber seus comentários e sugestões sobre este manual e sobre a documentação restante que acompanha este produto. Use a função Comentários do Usuário, situada na parte inferior de cada página da documentação online e digite seus comentários.

2 Convenções da documentação As seguintes convenções tipográficas são usadas neste manual: • /etc/passwd: nomes de arquivo e diretório • marcador: substitua marcador pelo valor real • PATH: a variável de ambiente PATH • ls, --help: comandos, opções e parâmetros

vi

Guia de Administração do Novell AppArmor 2.0

• user: usuários ou grupos •

Alt , Alt + F1 : uma tecla ou combinação de teclas para pressionar, mostradas em maiúsculas como no teclado

• Arquivo, Arquivo → Salvar Como: itens de menu, botões • Pingüins dançando (Capítulo Pingüins, ↑Referência): Referência a um capítulo em outro manual.

Sobre este guia

vii

1

Imunizando programas O Novell® AppArmor fornece tecnologias de imunização que protegem os aplicativos do SUSE Linux de suas vulnerabilidades inerentes. Após instalar o Novell AppArmor, configurar os perfis do Novell AppArmor e reinicializar o computador, o sistema é imunizado porque começa a aplicar as políticas de segurança do Novell AppArmor. A proteção de programas com o Novell AppArmor é chamada de imunização. O Novell AppArmor configura uma coleção de perfis de aplicativo padrão para proteger os serviços padrão do Linux. Para proteger outros aplicativos, use as ferramentas do Novell AppArmor para criar perfis para os aplicativos que deseja proteger. Este capítulo apresenta a filosofia de imunização de programas. Passe para o Capítulo 3, Criando perfis do Novell AppArmor (p 11) se estiver pronto para construir e gerenciar perfis do Novell AppArmor. O Novell AppArmor fornece controle de acesso otimizado para serviços de rede, especificando que arquivos cada programa pode ler, gravar e executar. Dessa forma, cada programa cumpre sua função e nada mais. O Novell AppArmor é um esquema de prevenção de invasão de host ou um controle de acesso obrigatório, que é otimizado para servidores. Anteriormente, os esquemas de controle de acesso eram centralizados em torno dos usuários porque eram criados para sistemas de maior uso ao mesmo tempo. Como alternativa, geralmente, os servidores de rede modernos não permitem que os usuários efetuem login, ao contrário, fornecem uma diversidade de serviços de rede para usuários, como Web, correio, arquivo e impressão. O Novell AppArmor controla o acesso dado aos serviços de rede e outros programas para impedir que os pontos fracos sejam explorados.

Imunizando programas

1

Selecionando programas a imunizar

2

Programas de quarentena do Novell® AppArmor para proteger o restante do sistema de danos causados por um processo comprometido. Você deve inspecionar as suas portas para ver quais programas precisam de perfis (consulte a Seção 2.2, “Inspecionar portas abertas para imunizar programas” (p 4)) e crie perfis para todos os programas que concedem privilégios (Seção 2.1, “Imunizar programas que concedem privilégios” (p 3)).

2.1 Imunizar programas que concedem privilégios Os programas para os quais devem ser criados perfis são os que mediam privilégios. Os programas a seguir têm acesso aos recursos que a pessoa a usar o programa não tem, de maneira que outorgam o privilégio para o usuário, quando usado: tarefas cron Os programas que são executados periodicamente por cron. Tais programas lêem a entrada de diversas fontes e podem ser executados com privilégios especiais, às vezes com privilégios de usuário Root. Por exemplo, cron pode executar /usr/bin/updatedb diariamente para manter o banco de dados locate atualizado com privilégios suficientes para ler o nome de todo arquivo do sistema. Para obter instruções sobre como encontrar estes tipos de programas, consulte a Seção 2.2.1, “Imunizando tarefas cron” (p 6).

Selecionando programas a imunizar

3

Aplicativos da Web Os programas que podem ser chamados por um browser da Web, incluem scripts CGI Perl, páginas PHP e aplicativos mais complexos da Web. Para obter instruções sobre como encontrar esses tipos de programas, consulte a Seção 2.2.2, “Imunizando aplicativos da Web” (p 7). Agentes de rede Programas (servidores e clientes) que têm portas de rede abertas. Clientes de usuário como clientes de e-mail e browsers da Web, surpreendentemente, mediam privilégios. Estes programas são executados com privilégios de gravar os diretórios home do usuários e processam entrada de fontes remotas potencialmente hostis, como sites da Web hostis e código de e-mail mal-intencionado. Para obter instruções sobre como encontrar esses tipos de programas, consulte a Seção 2.2.3, “Imunizando agentes de rede” (p 9). Por outro lado, programas sem privilégios não necessitam da criação de perfis. Por exemplo, um script de shell pode chamar o programa cp para copiar um arquivo. Como cp não tem seu próprio perfil, ele herda o perfil do script de shell pai, de maneira que pode copiar quaisquer arquivos que o perfil do script de shell pai possa ler e gravar.

2.2 Inspecionar portas abertas para imunizar programas Um método automatizado para encontrar daemons de servidor de rede para os quais podem ser criados perfis para uso de ferramenta não delimitada. Você também pode simplesmente exibir um relatório dessas informações na GUI (interface gráfica do usuário) do YaST (consulte “Relatório de Auditoria de Aplicativos” (p 80) para obter instruções). A ferramenta não delimitada usa o comando netstat -nlp para inspecionar as suas portas abertas de dentro do seu computador, detectar os programas associados a estas portas e inspecionar o conjunto de perfis do Novell AppArmor que você carregou. Não delimitado então relata estes programas junto com o perfil do Novell AppArmor associado a cada programa ou relata “nenhum” se o programa não for delimitado.

4

Guia de Administração do Novell AppArmor 2.0

NOTA Se criar um novo perfil, deve reiniciar o programa para o qual foi criado o perfil para não delimitado a fim de detectar e relatar o novo estado para o qual foi criado perfil. A seguir, uma amostra de saída não delimitada: 2325 /sbin/portmap not confined 3702❶ /usr/sbin/sshd❷ confined by '/usr/sbin/sshd❸ (enforce)' 4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 4505 5274 5592 7146

/usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)' /sbin/dhcpcd not confined /usr/bin/ssh not confined /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'



A primeira parte é um número. Este número é o número de ID do processo (PID) do programa de escuta.



A segunda parte é uma string que representa o caminho absoluto do programa de escuta.



A parte final indica o perfil que delimita o programa, se houver.

NOTA Não delimitado requer privilégios de Root e não deve ser executado de um shell que seja delimitado por um perfil do AppArmor. Não delimitado não distingue entre uma interface de rede e outra, por isso relata todos os processos não confinados, mesmo os que devem escutar uma interface LAN interna. Encontrar aplicativos de cliente de rede de usuário depende das suas preferências de usuário. A ferramenta não delimitada detecta e relata portas de rede abertas por aplicativos de cliente, mas apenas os aplicativos de cliente que estejam sendo executados no momento em que a análise não delimitada é realizada. Isto é um problema, porque serviços de rede tendem a ser executados o tempo todo, enquanto que aplicativos de cliente de rede tendem a ser executados apenas quando o usuário tem interesse neles. A aplicação de perfis do Novell AppArmor aos aplicativos de cliente de rede de usuário também depende das preferências do usuário, e o Novell AppArmor destina-se a Selecionando programas a imunizar

5

servidores, não a estações de trabalho. Assim, deixamos a criação de perfis dos aplicativos de cliente de rede de usuário como um exercício para o usuário. Para delimitar agressivamente os aplicativos de desktop, o comando não delimitado tem suporte para uma opção paranóica, que relata todos os processos em execução e os perfis do AppArmor correspondentes que podem ou não ser associados a cada processo. O usuário não delimitado pode então decidir se cada um destes programas precisa de um perfil do AppArmor. Se você tem perfis novos ou modificados, pode enviá-los para a lista de discussão [email protected] junto com um caso de uso para o comportamento do aplicativo utilizado. A equipe do AppArmor revisará e talvez enviará o trabalho para o openSUSE. Não podemos garantir que todos os perfis serão incluídos, mas faremos o esforço de incluir o máximo possível para que usuários finais possam contribuir para os perfis de segurança enviados no openSUSE.

2.2.1 Imunizando tarefas cron Para encontrar programas que são executados por cron, é necessário inspecionar a sua configuração cron local. Infelizmente, a configuração cron é bastante complexa, de maneira que há inúmeros arquivos a inspecionar. Tarefas cron periódicas são executadas destes arquivos: /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/*

Quanto às tarefas cron de Root, é possível editá-las com crontab -e e relacionar as tarefas cron de Root com crontab -l. Você precisa ser Root para que funcionem. Uma vez que você encontre estes programas, pode usar o Assistente para Adicionar Perfil para criar perfis para eles. Consulte a Seção 3.3.1, “Adicionando um perfil usando o assistente” (p 18).

6

Guia de Administração do Novell AppArmor 2.0

2.2.2 Imunizando aplicativos da Web Para encontrar aplicativos da Web, você deve investigar a sua configuração de servidor Web. O servidor Web do Apache é altamente configurável e os aplicativos da Web podem ser armazenados em muitos diretórios, dependendo de sua configuração local. O SUSE Linux, como padrão, armazena os aplicativos da Web em /srv/www/ cgi-bin/. Até o máximo possível, cada aplicativo da Web deve ter um perfil do Novell AppArmor. Uma vez que você encontre estes programas, pode usar o Assistente para Adicionar Perfil do AppArmor para criar perfis para eles. Consulte a Seção 3.3.1, “Adicionando um perfil usando o assistente” (p 18).

Programas CGI e delimitação de subprocessos em aplicativos da Web Como os programas CGI são executados pelo servidor Web do Apache, o próprio perfil para Apache usr.sbin.httpd2-prefork (para Apache2 no SUSE Linux) deve ser modificado para adicionar permissões de execução a cada um destes programas. Por exemplo, adicionar a linha /srv/www/cgi-bin/my_hit_counter.pl rpx concede permissão ao Apache de executar o script Perl my_hit_counter.pl e requer que haja um perfil dedicado para my_hit_counter.pl. Se my_hit _counter.pl não tiver um perfil dedicado associado a ele, a regra deve informar /srv/www/cgi-bin/my_hit_counter.pl rix para que my_hit_counter .pl herde o perfil usr.sbin.httpd2-prefork. Alguns usuários podem achar inconveniente especificar permissão de execução para todos os scripts CGI que o Apache possa chamar. Em vez disso, o administrador pode conceder acesso controlado às coleções de scripts CGI. Por exemplo, adicionar a linha /srv/www/cgi-bin/*.{pl,py,pyc} rix permite que o Apache execute todos os arquivos em /srv/www/cgi-bin/ finalizando em .pl (scripts Perl) e .py ou .pyc (scripts Python). Como acima, a parte ix da regra faz com que os scripts Python herdem o perfil do Apache, o que é adequado se você não quiser gravar perfis para cada script Python.

Selecionando programas a imunizar

7

NOTA Se quiser a funcionalidade do módulo de delimitação de subprocesso (mod-apparmor) quando os aplicativos da Web lidam com módulos Apache (mod_perl e mod_php), use os recursos ChangeHat ao adicionar um perfil no YaST ou na linha de comando. Para se beneficiar da delimitação de subprocesso, consulte a Seção 5.1, “Apache ChangeHat” (p 100). Criar perfis para aplicativos da Web que usam mod_perl e mod_php requer um tratamento ligeiramente diferente. Neste caso, o “programa” é um script interpretado diretamente pelo módulo no processo do Apache, portanto não ocorre exec. Ao contrário, a versão do Novell AppArmor do Apache chama change_hat() nomeando um subperfil (um “hat”) correspondente ao nome do URI solicitado. NOTA O nome apresentado para o script ser executado pode não ser o URI, dependendo de como o Apache foi configurado para onde procurar scripts de módulo. Se você configurou o Apache para colocar scripts em um local diferente, os diversos nomes aparecem em syslog quando o Novell AppArmor reclama sobre violações de acesso. Consulte o Capítulo 4, Gerenciando aplicativos em perfil (p 69). Para scripts mod_perl e mod_php, é este o nome do script Perl ou a página PHP solicitada. Por exemplo, adicionar este subperfil permite que a página localtime.php execute e acesse a hora do sistema local: /usr/sbin/httpd2-prefork^/cgi-bin localtime.php { /etc/localtime /srv/www/cgi-bin/localtime.php /usr/lib/locale/** }

r, r, r,

Se nenhum subperfil for definido, a versão do Novell AppArmor do Apache aplica o hat DEFAULT_URI. Este subperfil é basicamente suficiente para exibir uma página HTML. O hat DEFAULT_URI que o Novell AppArmor fornece por padrão é o seguinte: /usr/sbin/suexec2 ixr, /var/log/apache2/** rwl, /home/*/public_html/** /srv/www/htdocs/**

8

r, r,

Guia de Administração do Novell AppArmor 2.0

/srv/www/icons/*.{gif,jpg,png} /usr/share/apache2/**

r, r,

Se quiser um perfil único do Novell AppArmor para todas as páginas da Web e scripts CGI atendidos pelo Apache, um bom método é editar o subperfil DEFAULT_URI.

2.2.3 Imunizando agentes de rede Para encontrar daemons de servidor de rede para os quais devam ser criados perfis, você deve inspecionar as portas abertas da sua máquina, considerar os programas que são respondidos nessas portas e fornecer perfis para tantos destes programas quanto possível. Se você fornecer perfis a todos os programas com portas de rede abertas, um ataque não poderá chegar ao sistema de arquivo na sua máquina sem passar por uma política de perfil do Novell AppArmor. Explore o seu servidor quanto a portas de rede abertas manualmente de fora da máquina usando um scanner, como nmap, ou de dentro da máquina, usando netstat. Inspecione a máquina para determinar que programas estão respondendo às portas abertas descobertas.

Selecionando programas a imunizar

9

Criando perfis do Novell AppArmor

3

Este capítulo explica como criar e gerenciar perfis do Novell® AppArmor. Você poderá criar perfis do Novell AppArmor após selecionar os programas desejados. Para obter ajuda a esse respeito, consulte o Capítulo 2, Selecionando programas a imunizar (p 3).

3.1 Componentes e sintaxe dos perfis Esta seção mostra detalhes da sintaxe ou composição dos perfis do Novell AppArmor. Há um exemplo dessa sintaxe na Seção 3.1.1, “Decompondo um perfil do Novell AppArmor” (p 11).

3.1.1 Decompondo um perfil do Novell AppArmor Os componentes de perfil do Novell AppArmor são chamados de regras do Novell AppArmor. Atualmente há dois tipos principais de regras do Novell AppArmor: entradas de caminho e entradas de capacidade. As entradas de caminho especificam o que o processo pode acessar no sistema de arquivos, e as entradas de capacidade propiciam um controle mais minucioso daquilo que um processo delimitado pode fazer, através de outras chamadas de sistema que exigem privilégios. As inclusões são um tipo de meta-regra ou diretiva que extrai entradas de caminho e capacidade de outros arquivos.

Criando perfis do Novell AppArmor

11

A maneira mais fácil de explicar em que consiste um perfil e como criá-lo é mostrar os detalhes de uma amostra de perfil. Considere, por exemplo, o seguinte perfil do programa /sbin/klogd: # profile to confine klogd❶ /sbin/klogd ❷ {❸ #include ❹ capability sys_admin,❺ /boot/* r❻, /proc/kmsg r, /sbin/klogd r, /var/run/klogd.pid lw, }



Comentário que nomeia o programa delimitado por esse perfil. Esse tipo de comentário deve ser sempre precedido pelo sinal #.



Caminho absoluto para o programa delimitado.



As chaves {} funcionam como um container de declarações de inclusão de outros perfis, além de entradas de caminho e capacidade.



Esta diretiva extrai componentes de perfis do Novell AppArmor para simplificar os perfis.



As declarações das entradas de capacidade habilitam cada uma das 29 capacidades de rascunho do POSIX.1e.



Entrada de caminho que especifica quais áreas do sistema de arquivos o programa pode acessar. A primeira parte da entrada de caminho especifica o caminho absoluto para um arquivo (inclusive englobamento e expressões regulares), e a segunda parte indica os modos de acesso permitidos (r para leitura, w para gravação ex para execução). Um espaço em branco qualquer (espaço ou tabulação) pode tanto preceder os nomes de caminho quanto separar os nomes de caminho dos modos de acesso. O espaço em branco entre o modo de acesso e a vírgula do final é opcional.

Quando se cria um perfil para um programa, este só pode acessar os arquivos, modos e capacidades do POSIX especificados no perfil. Essas restrições se acrescem aos controles de acesso nativos do Linux. Exemplo: Para obter a capacidade CAP_CHOWN, o programa deve ter não só acesso a CAP_CHOWN sob os controles de acesso convencionais do Linux (isso significa, em geral, que deve ser um processo de Root), mas também a capacidade chown (mudar

12

Guia de Administração do Novell AppArmor 2.0

usuário) em seu perfil. Da mesma forma, para gravar no arquivo /foo/bar, o programa deve ter tanto os bits de modo e o ID de usuário correto definidos nos atributos de arquivos (consulte as páginas de manuais chmod e chown) quanto /foo/bar w em seu perfil. As tentativas de violação das regras do Novell AppArmor são registradas no syslog. Em muitos casos, as regras do Novell AppArmor impedem que os ataques funcionem porque os arquivos necessários não podem ser acessados e, em todos os casos, a delimitação pelo Novell AppArmor limita os danos que o invasor pode causar ao conjunto de arquivos permitidos pelo Novell AppArmor.

3.1.2 #include As declarações #include (de inclusão) são diretivas que extraem componentes de outros perfis do Novell AppArmor para simplificar perfis. Os arquivos de inclusão obtêm permissões de acesso para programas. Com uma inclusão, você pode fornecer ao programa acesso a arquivos ou caminhos de diretórios que são necessários também a outros programas. Além disso, pode reduzir o tamanho do perfil. Por padrão, a declaração #include (de inclusão) anexa /etc/apparmor.d/ (onde ela espera encontrar o arquivo incluído) ao início do caminho. Ao contrário de outras declarações de perfil (mas como nos programas C), as linhas de #include (inclusão) não terminam com vírgula. Para facilitar a criação de perfis de aplicativos, o Novell AppArmor dispõe de duas classes de #include (inclusões): abstrações e pacotes de programa.

Abstrações As abstrações são #includes (inclusões) agrupadas por tarefas de aplicativos comuns. Entre essas tarefas estão o acesso a mecanismos de autenticação e rotinas de serviços de nomes, requisitos comuns de imagem e a contabilização do sistema. Os arquivos relacionados nessas abstrações são específicos à tarefa nomeada; os programas que necessitam de um desses arquivos geralmente exigem algum dos demais arquivos relacionados no arquivo de abstração (dependendo não da configuração local, mas também das exigências específicas do programa). As abstrações encontram-se em /etc/apparmor.d/abstractions/.

Criando perfis do Novell AppArmor

13

Pacotes de programas Os pacotes de programas são controles de acesso a programas específicos, controlados pelo administrador do sistema com base em políticas locais. Cada pacote só é usado por um programa. Os pacotes destinam-se a facilitar as modificações locais e atualizações às políticas fornecidas pelo Novell AppArmor. Os administradores podem modificar a política desses arquivos conforme suas necessidades e deixar os perfis de programa inalterados, simplificando a tarefa de fundir as atualizações de política do Novell AppArmor em políticas de uso obrigatório em cada local. As restrições de acesso dos pacotes de programas geralmente são bastante permissivas. Elas se destinam a permitir aos usuários acesso aos arquivos com o mínimo de interferência possível, mas garantindo a proteção dos recursos do sistema. Uma exceção a essa regra é a série postfix* de pacotes de programas. Esses perfis são usados para facilitar a abstração da localização dos binários postfix. Evite reduzir as permissões da série postfix*. Os pacotes de programas encontram-se em /etc/apparmor.d/ program-chunks/.

3.1.3 Entradas de capacidade (POSIX.1e) As declarações de capacidade consistem simplesmente na palavra “capacidade” seguida do nome da capacidade do POSIX.1e definida na página de manual capabilities(7).

3.2 Criando e gerenciando perfis do Novell AppArmor Existem três formas de criar e gerenciar perfis do Novell AppArmor, dependendo do tipo de ambiente computacional que você prefere. Você pode usar a interface gráfica do YaST (GUI do YaST), o modo baseado em texto ncurses do YaST (ncurses do YaST) ou a interface da linha de comando. As três opções permitem a criação e manutenção de perfis, além de oferecerem aos usuários opções baseadas em suas necessidades. A interface da linha de comando exige conhecimento dos comandos do Linux e o uso de janelas de terminal. Os três métodos usam ferramentas especializadas do Novell

14

Guia de Administração do Novell AppArmor 2.0

AppArmor para criar os perfis. Assim, você não precisa criá-los manualmente, o que seria muito demorado.

3.2.1 Usando a GUI do YaST Para usar a GUI do YaST para criar e gerenciar perfis do Novell AppArmor, consulte a Seção 3.3, “Criando perfis do Novell AppArmor com a GUI do YaST” (p 16).

3.2.2 Usando ncurses do YaST O ncurses do YaST pode ser usado para criar e gerenciar perfis do Novell AppArmor, sendo mais indicado para usuários com limitação de largura de banda na conexão com o servidor. Acesse ncurses do YaST digitando yast enquanto está conectado a um console ou janela de terminal como Root. O ncurses do YaST tem os mesmos recursos que a GUI do YaST. Consulte as instruções da Seção 3.3, “Criando perfis do Novell AppArmor com a GUI do YaST” (p 16) para criar e gerenciar perfis do Novell AppArmor no ncurses do YaST. Lembre-se que as telas são diferentes, mas funcionam da mesma maneira.

3.2.3 Usando a interface da linha de comando A interface da linha de comando exige conhecimento dos comandos do Linux e o uso de janelas de terminal. Para usar a interface da linha de comando para criar e gerenciar perfis do Novell AppArmor, consulte a Seção 3.4, “Criando perfis do Novell AppArmor usando a interface da linha de comando” (p 40). A interface da linha de comando permite acesso a algumas ferramentas não disponíveis aos demais métodos de gerenciamento do Novell AppArmor: reclamação Coloca os perfis no modo de reclamação. Recoloque-os no modo forçado quando quiser que o sistema ponha em vigor as regras dos perfis, e não apenas registre informações. Para obter mais informações sobre essa ferramenta, consulte “Modo de aprendizagem ou reclamação” (p 49).

Criando perfis do Novell AppArmor

15

forçado Recoloca os perfis no modo forçado para que o sistema ponha em vigor as regras dos perfis, e não apenas registre informações. Para obter mais informações sobre essa ferramenta, consulte a “Modo forçado” (p 50). unconfined O comando unconfined (não delimitado) executa uma auditoria no servidor, em busca dos processos em execução dedicados a escutar conexões de rede, e informa se eles possuem perfis. autodep Gera o esqueleto de um perfil para um programa e o carrega no módulo do Novell AppArmor em modo de reclamação.

3.3 Criando perfis do Novell AppArmor com a GUI do YaST Abra a GUI do YaST iniciando YaST → Novell AppArmor a partir do menu principal. O Novell AppArmor é aberto na interface do YaST conforme mostrado abaixo: NOTA Você também pode acessar a GUI do YaST abrindo uma janela de terminal, conectando-se como Root e digitando yast2.

16

Guia de Administração do Novell AppArmor 2.0

No frame da direita, estão vários ícones de opção do Novell AppArmor. Se o Novell AppArmor não for exibido no frame esquerdo da janela do YaST ou se os ícones do Novell AppArmor não forem exibidos, reinstale o Novell AppArmor. As seguintes ações estão disponíveis através do Novell AppArmor. Clique em um dos seguintes ícones do Novell AppArmor e vá para a seção indicada abaixo: Assistente para Adicionar Perfil Para obter detalhes sobre as etapas, consulte a Seção 3.3.1, “Adicionando um perfil usando o assistente” (p 18). Adicionar Perfil Manualmente Adiciona um perfil do Novell AppArmor para um aplicativo no seu sistema sem a ajuda de um assistente. Para obter detalhes sobre as etapas, consulte a Seção 3.3.2, “Adicionar Perfil Manualmente” (p 24). Editar Perfil Edita um perfil do Novell AppArmor existente no seu sistema. Para obter detalhes sobre as etapas, consulte a Seção 3.3.3, “Editando um perfil” (p 30). Apagar Perfil Apaga um perfil do Novell AppArmor existente no sistema. Para obter detalhes sobre as etapas, consulte a Seção 3.3.4, “Apagando um perfil” (p 31). Criando perfis do Novell AppArmor

17

Assistente para Atualizar Perfil Para obter detalhes sobre as etapas, consulte a Seção 3.3.5, “Atualizando perfis a partir de entradas do Syslog” (p 32). Relatórios do AppArmor Para obter detalhes sobre as etapas, consulte a Seção 4.3, “Relatórios” (p 73). Painel de Controle do AppArmor Para obter detalhes sobre as etapas, consulte a Seção 3.3.6, “Gerenciando o status do Novell AppArmor e dos eventos de segurança” (p 37).

3.3.1 Adicionando um perfil usando o assistente O Assistente para Adicionar Perfil se destina a configurar perfis do Novell AppArmor com as ferramentas de perfil do Novell AppArmor, genprof (Gerar Perfil) e logprof (Atualizar Perfis do Arquivo de Registro do Modo de Aprendizagem). Para obter mais informações sobre essas ferramentas, consulte a Seção 3.5.3, “Resumo das ferramentas de perfil” (p 48). 1 Interrompa o aplicativo antes de criar o perfil para garantir que sua inicialização seja incluída no perfil. Para tal, verifique se o aplicativo ou daemon não está sendo executado antes de criar seu perfil. Por exemplo, digite /etc/init.d/PROGRAMA stop em uma janela de terminal quando estiver conectado como Root, substituindo PROGRAMA pelo nome do programa cujo perfil deve ser criado. 2 Se você ainda não tiver feito isso, na GUI do YaST, clique em Novell AppArmor → Assistente para Adicionar Perfil.

18

Guia de Administração do Novell AppArmor 2.0

3 Digite o nome do aplicativo ou navegue até a localização do programa. 4 Clique em Criar. Será executada uma ferramenta do Novell AppArmor chamada autodep, que realiza uma análise estática do programa selecionado e carrega um perfil aproximado no módulo do Novell AppArmor. Para obter mais informações sobre o autodep, consulte “autodep” (p 48). A janela Assistente de Criação de Perfil do AppArmor será exibida.

Criando perfis do Novell AppArmor

19

Em segundo plano, o Novell AppArmor também colocará o perfil no modo de aprendizagem. Para obter mais informações sobre o modo de aprendizagem, consulte “Modo de aprendizagem ou reclamação” (p 49). 5 Execute o aplicativo cujo perfil está sendo criado. 6 Execute o máximo possível de funções do aplicativo para que o modo de aprendizagem possa registrar os arquivos e diretórios cujo acesso o programa exige para funcionar adequadamente. 7 Clique em Explorar Entradas do Registro do Sistema para Adicionar ao Perfil para analisar os arquivos de registro do modo de aprendizagem. Isso gera uma série de perguntas que devem ser respondidas para guiar o assistente na geração do perfil de segurança. NOTA Se houver solicitações para adicionar hats, vá para o Capítulo 5, Criando perfil dos aplicativos web com o ChangeHat Apache (p 99). As perguntas enquadram-se em duas categorias: • Um programa que tem perfil requisita um recurso que não consta do perfil (consulte a Figura 3.1, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 21)). A exceção do modo de aprendizagem exige que você permita ou negue acesso a um determinado recurso. • O programa cujo perfil foi gerado executa outro programa e a transição do domínio de segurança não foi definida (consulte a Figura 3.2, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 21)). A exceção do modo de aprendizagem exige que você defina permissões de execução para uma entrada. Cada um desses casos gera uma série de perguntas que devem ser respondidas para adicionar o recurso ou o programa ao perfil. As duas figuras a seguir são um exemplo de cada caso. As etapas subseqüentes mostram as opções de resposta a essas perguntas. A janela Assistente de Criação de Perfil do AppArmor será exibida.

20

Guia de Administração do Novell AppArmor 2.0

Figura 3.1 Exceção do modo de aprendizagem: controlando o acesso a recursos específicos

Figura 3.2 Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada

Criando perfis do Novell AppArmor

21

8 O Assistente para Adicionar Perfil começa sugerindo entradas de caminho de diretório acessadas pelo aplicativo cujo perfil está sendo criado (como mostrado na Figura 3.1, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 21)) ou pedindo-lhe que defina permissões de execução para entradas (como mostrado na Figura 3.2, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 21)). a No caso da Figura 3.1, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos”: Das opções a seguir, selecione aquela que atende à solicitação de acesso, a qual pode ser uma inclusão sugerida, uma determinada versão englobada do caminho ou o nome do próprio caminho. Observe que nem todas essas opções estarão sempre disponíveis. #include É a parte de um perfil do Novell AppArmor relativa a um arquivo de inclusão. Os arquivos de inclusão obtêm permissões de acesso para programas. Com uma inclusão, você pode fornecer ao programa acesso a arquivos ou caminhos de diretórios que são necessários também a outros programas. Além disso, pode reduzir o tamanho do perfil. É recomendável selecionar inclusões quando sugerido. Versão englobada Para acessá-la, clique em Englobar, conforme descrito na próxima etapa. Para obter informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Nome do caminho O próprio caminho que o programa precisa acessar para funcionar adequadamente. b No caso da Figura 3.2, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada”: Das opções a seguir, selecione aquela que atende à solicitação de acesso. Herdar Permanecer no mesmo perfil de segurança (perfil do pai). Perfil Requer a existência de um perfil à parte para o programa executado.

22

Guia de Administração do Novell AppArmor 2.0

Não delimitado Executa o programa sem um perfil de segurança. ATENÇÃO Só execute não delimitado se absolutamente necessário. A seleção da opção Não delimitado executa o novo programa sem nenhuma proteção do AppArmor.

9 Após selecionar um caminho de diretório, você precisa processá-lo como entrada no perfil do Novell AppArmor. Para isso, clique em Permitir ou Negar. Caso não fique satisfeito com a entrada de caminho de diretório exibida, você poderá usar as opções Englobar ou Editar. As seguintes opções estão disponíveis para processar as entradas do modo de aprendizagem e criar o perfil: Permitir Concede ao programa acesso às entradas de caminho de diretório especificadas. O Assistente para Adicionar Perfil sugere acesso a permissões de arquivo. Para obter mais informações sobre isso, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66). Negar Clique em Negar para impedir o acesso do programa às entradas de caminho de diretório especificadas. Englobar Se acessada com um clique, esta opção modifica o caminho do diretório (usando curingas) para incluir todos os arquivos no diretório de entrada sugerido. Se acessada com dois cliques, ela permite acesso a todos os arquivos e subdiretórios abaixo do mostrado. Para obter mais informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Englobar c/ ext. Modifica o caminho do diretório original mantendo a extensão do arquivo. Se você clicar uma vez, /etc/apache2/arquivo.ext se tornará /etc/apache2/*.ext, com o acréscimo do curinga (asterisco) no lugar Criando perfis do Novell AppArmor

23

do nome do arquivo. Isso permite ao programa acessar todos os arquivos dos diretórios sugeridos que tiverem a extensão .ext. Se você clicar duas vezes, a opção permitirá acesso a todos os arquivos (com essa extensão) e subdiretórios abaixo do mostrado. Editar Permite a edição da linha realçada. A nova linha (editada) aparece na parte inferior da lista. Interromper Interrompe o logprof, descartando todas as mudanças de regra inseridas e deixando inalterados todos os perfis. Concluir Fecha o logprof, gravando todas as mudanças de regra inseridas e modificando todos os perfis. Clique em Permitir ou Negar para cada entrada do modo de aprendizagem. Isso contribuirá para criar o perfil do Novell AppArmor. NOTA O número de entradas do modo de aprendizagem corresponde à complexidade do aplicativo. Repita as etapas anteriores se precisar executar mais funções do aplicativo. Ao terminar, clique em Concluir. Clique em Sim no pop-up exibido para sair do Assistente de Criação de Perfis. O perfil será gravado e carregado no módulo do Novell AppArmor.

3.3.2 Adicionar Perfil Manualmente O Novell AppArmor permite-lhe criar um perfil do Novell AppArmor adicionando manualmente entradas a ele. Basta selecionar o aplicativo cujo perfil deseja criar e adicionar as entradas. 1 Para adicionar um perfil, abra YaST → Novell AppArmor. A interface do Novell AppArmor é aberta.

24

Guia de Administração do Novell AppArmor 2.0

2 No Novell AppArmor, clique em Adicionar Perfil Manualmente (consulte a Figura 3.3, “Adicionando um perfil manualmente: selecionar aplicativo” (p 25)). Figura 3.3 Adicionando um perfil manualmente: selecionar aplicativo

3 Navegue até o aplicativo cujo perfil deseja criar. 4 Quando o localizar, selecione-o e clique em Abrir. Será exibido um perfil básico, vazio, na janela Caixa de Diálogo Perfil do Novell AppArmor.

Criando perfis do Novell AppArmor

25

5 Na janela Caixa de Diálogo Perfil do AppArmor, você pode adicionar, editar ou apagar entradas de perfis do Novell AppArmor clicando nos botões correspondentes e consultando as seguintes seções: “Adicionando uma entrada” (p 26), “Editando uma entrada” (p 29) ou “Editando uma entrada” (p 29). 6 Ao terminar, clique em Concluído.

Adicionando uma entrada Esta seção explica a opção Adicionar Entrada, que pode ser encontrada na Seção 3.3.2, “Adicionar Perfil Manualmente” (p 24) ou na Seção 3.3.3, “Editando um perfil” (p 30). Quando você seleciona Adicionar Entrada, uma lista suspensa exibe os tipos de entrada que podem ser adicionados ao perfil do Novell AppArmor. • Selecione uma das seguintes opções nessa lista: Arquivo Na janela pop-up, especifique o caminho absoluto para um arquivo e o tipo de acesso permitido. Ao terminar, clique em OK. Use englobamento se necessário. Para obter informações sobre englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Para obter informações sobre permissão de acesso a arquivo, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66).

26

Guia de Administração do Novell AppArmor 2.0

Diretório Na janela pop-up, especifique o caminho absoluto para um diretório e o tipo de acesso permitido. Use englobamento se necessário. Ao terminar, clique em OK. Para obter informações sobre englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Para obter informações sobre permissão de acesso a arquivo, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66).

Capacidade Na janela pop-up, selecione as capacidades adequadas. Estas são declarações que habilitam cada uma das 32 capacidades do POSIX.1e. Consulte a Seção 3.1.1, “Decompondo um perfil do Novell AppArmor” (p 11) para obter mais informações sobre capacidades. Ao concluir o processo de seleção, clique em OK.

Criando perfis do Novell AppArmor

27

Inclusão Na janela pop-up, navegue até os arquivos a usar como inclusões. As inclusões são diretivas que extraem componentes de outros perfis do Novell AppArmor para simplificar perfis. Para obter mais informações, consulte a Seção 3.1.2, “#include” (p 13).

28

Guia de Administração do Novell AppArmor 2.0

Editando uma entrada Esta seção explica a opção Editar Entrada, que pode ser encontrada na Seção 3.3.2, “Adicionar Perfil Manualmente” (p 24) ou na Seção 3.3.3, “Editando um perfil” (p 30). Quando você seleciona Editar Entrada, a janela pop-up do explorador de arquivos é aberta. A partir daqui, você poderá editar a entrada selecionada. Na janela pop-up, especifique o caminho absoluto para um arquivo e o tipo de acesso permitido. Use englobamento se necessário. Ao terminar, clique em OK. Para obter informações sobre englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Para obter informações sobre permissão de acesso a arquivo, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66).

Apagando uma entrada Esta seção explica a opção Apagar Entrada, que pode ser encontrada na Seção 3.3.2, “Adicionar Perfil Manualmente” (p 24) ou na Seção 3.3.3, “Editando um perfil” (p 30). Se você selecionar uma entrada e, em seguida, Apagar Entrada, o Novell AppArmor a removerá.

Criando perfis do Novell AppArmor

29

3.3.3 Editando um perfil O Novell AppArmor permite-lhe editar manualmente perfis do Novell AppArmor adicionando, editando ou apagando entradas. Basta selecionar o perfil e depois adicionar, editar ou apagar as entradas desejadas. Para editar um perfil, siga estas etapas: 1 Abra YaST → Novell AppArmor. 2 Em Novell AppArmor, clique em Editar Perfil. A janela Editar Perfil — Escolher Perfil a Editar será exibida.

3 Selecione o perfil a editar na lista de programas relacionados. 4 Clique em Próximo. A janela Caixa de Diálogo Perfil do AppArmor exibirá o perfil.

30

Guia de Administração do Novell AppArmor 2.0

5 Na janela Caixa de Diálogo Perfil do AppArmor, você pode adicionar, editar ou apagar entradas de perfis do Novell AppArmor clicando nos botões correspondentes e consultando as seguintes seções: “Adicionando uma entrada” (p 26), “Editando uma entrada” (p 29) ou “Apagando uma entrada” (p 29). 6 Ao terminar, clique em Concluído. 7 Clique em Sim no pop-up exibido para confirmar as mudanças ao perfil.

3.3.4 Apagando um perfil O Novell AppArmor permite-lhe apagar um perfil do Novell AppArmor manualmente. Basta selecionar o aplicativo cujo perfil deseja apagar e seguir estas etapas: 1 Abra YaST → Novell AppArmor. A interface do Novell AppArmor é exibida. 2 Em Novell AppArmor, clique no ícone Apagar Perfil. A janela Apagar Perfil — Escolher Perfil a Apagar será aberta.

Criando perfis do Novell AppArmor

31

3 Selecione o perfil que deseja apagar. 4 Clique em Próximo. 5 Clique em Sim no pop-up exibido para apagar o perfil.

3.3.5 Atualizando perfis a partir de entradas do Syslog O assistente de perfis do Novell AppArmor usa o logprof, a ferramenta que verifica arquivos de registro e lhe permite atualizar perfis. O logprof rastreia as mensagens do módulo Novell AppArmor que representam exceções para todos os perfis em execução no sistema. Essas exceções representam o comportamento do aplicativo em questão que está fora da definição do seu perfil. Você pode adicionar o novo comportamento ao perfil relevante selecionando a entrada de perfil sugerida. 1 Abra YaST → Novell AppArmor. A interface do Novell AppArmor é exibida. 2 Em Novell AppArmor, clique em Assistente para Atualizar Perfil. A janela Assistente de Perfis do AppArmor será exibida.

32

Guia de Administração do Novell AppArmor 2.0

Com a execução do Assistente para Atualizar Perfis (logprof), os arquivos de registro do modo de aprendizagem são analisados. Isso gera uma série de perguntas que devem ser respondidas para guiar o logprof na geração do perfil de segurança. As perguntas enquadram-se em duas categorias: • Um programa que tem perfil requisita um recurso que não consta do perfil (consulte a Figura 3.4, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 34)). • O programa cujo perfil foi gerado executa outro programa e a transição do domínio de segurança não foi definida (consulte a Figura 3.5, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 34)). Cada um desses casos gera uma pergunta que deve ser respondida para que você possa adicionar o recurso ou programa ao perfil. As duas figuras a seguir são um exemplo de cada caso. As etapas subseqüentes mostram as opções de resposta a essas perguntas.

Criando perfis do Novell AppArmor

33

Figura 3.4 Exceção do modo de aprendizagem: controlando o acesso a recursos específicos

Figura 3.5 Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada

34

Guia de Administração do Novell AppArmor 2.0

3 O logprof começa sugerindo entradas de caminho de diretório acessadas pelo aplicativo cujo perfil está sendo criado (como mostrado na Figura 3.4, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 34)) ou pedindo-lhe que defina permissões de execução para entradas (como mostrado na Figura 3.5, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 34)). a No caso da Figura 3.4, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 34): Das opções a seguir, selecione aquela que atende à solicitação de acesso, a qual pode ser uma inclusão sugerida, uma determinada versão englobada do caminho ou o nome do próprio caminho. Observe que nem todas essas opções estarão sempre disponíveis. #include É a parte de um perfil do Novell AppArmor relativa a um arquivo de inclusão. Os arquivos de inclusão obtêm permissões de acesso para programas. Com uma inclusão, você pode fornecer ao programa acesso a arquivos ou caminhos de diretórios que são necessários também a outros programas. Além disso, pode reduzir o tamanho do perfil. É recomendável selecionar inclusões quando sugerido. Versão englobada Para acessá-la, clique em Englobar, conforme descrito na próxima etapa. Para obter informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Nome do caminho O próprio caminho que o programa precisa acessar para funcionar adequadamente. b No caso da Figura 3.5, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 34): Das opções a seguir, selecione aquela que atende à solicitação de acesso: Herdar permanecer no mesmo perfil de segurança (perfil do pai) Perfil requer a existência de um perfil à parte para o programa executado

Criando perfis do Novell AppArmor

35

Não delimitado o programa é executado sem um perfil de segurança ATENÇÃO Só execute não delimitado se absolutamente necessário. A seleção da opção Não delimitado executa o novo programa sem nenhuma proteção do AppArmor.

4 Após selecionar um caminho de diretório, você precisa processá-lo como entrada no perfil do Novell AppArmor. Para isso, clique em Permitir ou Negar. Caso não fique satisfeito com a entrada de caminho de diretório exibida, você poderá usar as opções Englobar ou Editar. As seguintes opções estão disponíveis para processar as entradas do modo de aprendizagem e criar o perfil: Permitir Concede ao programa acesso às entradas de caminho de diretório especificadas. O Assistente de Criação de Perfis sugere acesso a permissões de arquivo. Para obter mais informações sobre isso, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66). Negar Clique em Negar para impedir o acesso do programa às entradas de caminho de diretório especificadas. Englobar Se acessada com um clique, esta opção modifica o caminho do diretório (usando curingas) para incluir todos os arquivos no diretório de entrada sugerido. Se acessada com dois cliques, ela permite acesso a todos os arquivos e subdiretórios abaixo do mostrado. Para obter mais informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Englobar c/ ext. Modifica o caminho do diretório original mantendo a extensão do arquivo. Se você clicar uma vez, /etc/apache2/arquivo.ext se tornará /etc/apache2/*.ext, com o acréscimo do curinga (asterisco) no lugar 36

Guia de Administração do Novell AppArmor 2.0

do nome do arquivo. Isso permite ao programa acessar todos os arquivos dos diretórios sugeridos que tiverem a extensão .ext. Se você clicar duas vezes, a opção permitirá acesso a todos os arquivos (com essa extensão) e subdiretórios abaixo do mostrado. Editar Permite a edição da linha realçada. A nova linha (editada) aparece na parte inferior da lista. Interromper Interrompe o logprof, descartando todas as mudanças de regra inseridas e deixando inalterados todos os perfis. Concluir Fecha o logprof, gravando todas as mudanças de regra inseridas e modificando todos os perfis. Clique em Permitir ou Negar para cada entrada do modo de aprendizagem. Isso contribuirá para criar o perfil do Novell AppArmor. NOTA O número de entradas do modo de aprendizagem corresponde à complexidade do aplicativo. Repita as etapas anteriores se precisar executar mais funções do aplicativo. Ao terminar, clique em Concluir. Clique em Sim no pop-up exibido para sair do Assistente de Criação de Perfis. O perfil será gravado e carregado no módulo do Novell AppArmor.

3.3.6 Gerenciando o status do Novell AppArmor e dos eventos de segurança O Novell AppArmor permite-lhe mudar o status do Novell AppArmor e configurar a notificação de eventos.

Criando perfis do Novell AppArmor

37

Mudando o status do Novell AppArmor Você pode mudar o status do Novell AppArmor habilitando-o e desabilitando-o. A habilitação do Novell AppArmor protege o sistema contra potenciais explorações de programas. A desabilitação do Novell AppArmor remove a proteção do sistema, mesmo que você tenha configurado os perfis. Configurando a notificação de eventos Você pode determinar como e quando será notificado quando ocorrerem eventos de segurança do sistema. NOTA É preciso configurar no servidor SUSE Linux um servidor de correio que possa enviar correspondência usando SMTP (Simple Mail Transfer Protocol, Protocolo de Transferência de Correio Simples). Por exemplo, postfix ou exim, para que a notificação de eventos funcione. Para configurar a notificação de eventos ou mudar o status do Novell AppArmor, siga as etapas abaixo: 1 Quando você clica no Painel de Controle do Novell AppArmor, a janela Configuração do Novell AppArmor é exibida (veja abaixo):

38

Guia de Administração do Novell AppArmor 2.0

2 Na tela Configuração do AppArmor, procure a mensagem de status habilitado para saber se o Novell AppArmor e a notificação de eventos de segurança estão em execução. • Para mudar o status do Novell AppArmor, continue conforme descrito em “Mudando o status do Novell AppArmor” (p 39). • Para configurar a notificação de eventos de segurança, continue conforme descrito na Seção 4.2.2, “Configurando notificações de eventos de segurança” (p 71).

Mudando o status do Novell AppArmor Ao mudar o status do Novell AppArmor, você o define como habilitado ou desabilitado. Quando está habilitado, o Novell AppArmor está instalado, em execução e forçando as políticas de segurança do Novell AppArmor. 1 Para habilitar o Novell AppArmor, abra YaST → Novell AppArmor. O menu principal do Novell AppArmor é aberto. 2 No menu principal do Novell AppArmor, clique em Painel de Controle do AppArmor. A janela Configuração do AppArmor será exibida.

3 Na seção Habilitar Novell AppArmor da janela, clique em Configurar. A caixa de diálogo Habilitar Novell AppArmor será aberta.

Criando perfis do Novell AppArmor

39

4 Habilite o Novell AppArmor selecionando Habilitar ou desabilite-o selecionando Desabilitar. Em seguida, clique em OK. 5 Clique em Concluído na janela Configuração do AppArmor. 6 Clique em Arquivo → Sair no Centro de Controle do YaST.

3.4 Criando perfis do Novell AppArmor usando a interface da linha de comando O Novell AppArmor permite-lhe usar uma interface de linha de comando em vez da GUI para gerenciar e configurar a segurança do sistema.

3.4.1 Verificando o status do módulo AppArmor O módulo AppArmor pode ter um de três status: Descarregado O módulo AppArmor não está carregado no kernel. Em execução O módulo AppArmor está carregado no kernel e forçando políticas de programa do Novell AppArmor. Interrompido O módulo AppArmor está carregado no kernel, mas nenhuma política está sendo forçada.

40

Guia de Administração do Novell AppArmor 2.0

É possível detectar qual o status do módulo AppArmor inspecionando /sys/kernel/ security/apparmor/profiles. Se cat /sys/kernel/security/apparmor/profiles fornecer uma lista de perfis, o Novell AppArmor está em execução. Se estiver vazio e não retornar nada, o AppArmor foi interrompido. Se o arquivo não existir, o AppArmor está descarregado. O módulo AppArmor pode ser carregado e descarregado com os comandos de módulo padrão do Linux, como modprobe, insmod, lsmod e rmmod, mas isso não é recomendável. Recomendamos, em vez disso, gerenciar o Novell AppArmor através do script rcapparmor, que pode executar as seguintes operações: rcapparmor start O script tem diferentes comportamentos, dependendo do status do módulo AppArmor. Se este tiver sido descarregado, start carrega o módulo e o inicia, colocando-o em estado de execução. Se tiver sido interrompido, o script start faz o módulo pesquisar de novo os perfis do Novell AppArmor geralmente encontrados em /etc/apparmor.d e o coloca em estado de execução. Se o módulo já estiver em execução, o script start fornece um aviso e não empreende nenhuma ação. rcapparmor stop Se o módulo AppArmor estiver em execução, interrompe-o através da remoção de todos os perfis da memória do kernel, desabilitando inteiramente todos os controles de acesso e colocando o módulo em estado de interrupção. Se o módulo AppArmor estiver descarregado ou já tiver sido interrompido, o script stop tenta descarregar os perfis novamente, mas nada acontece. rcapparmor restart Faz o módulo AppArmor pesquisar de novo os perfis geralmente encontrados em /etc/apparmor.d sem deixar de delimitar os processos em execução, adicionando novos perfis e removendo os que tiverem sido apagados de /etc/ apparmor.d. rcapparmor kill Remove irreversivelmente o módulo AppArmor do kernel. Isso não é seguro, pois envolve a descarga de módulos do kernel do Linux. Esse comando destina-se apenas a depurações e emergências, quando o módulo por acaso tiver de ser removido.

Criando perfis do Novell AppArmor

41

NOTA O Novell AppArmor é um sistema de controle de acesso tão potente que pode promover o bloqueio de sua máquina até para você mesmo, a ponto de levá-lo a ter de inicializar o sistema a partir de mídia de recuperação (como o CD 1 do SUSE Linux) para reaver o controle. Para evitar esse tipo de problema, sempre efetue login não delimitado como Root na máquina que está sendo configurada quando reiniciar o módulo AppArmor. Caso o sistema se danifique a ponto de impedir o login (por exemplo, decompondo o perfil associado ao daemon SSH), você pode repará-lo usando seu prompt de Root em execução e reiniciando o módulo AppArmor.

3.4.2 Criando perfis do Novell AppArmor As definições de perfis do módulo AppArmor estão armazenadas no diretório /etc/ apparmor.d/ como arquivos de texto simples. ATENÇÃO Todos os arquivos do diretório /etc/apparmor.d/ são interpretados como perfis e carregados como tais. A renomeação dos arquivos que estão nesse diretório não constitui um meio eficaz de impedir que os perfis sejam carregados. É preciso removê-los desse diretório para gerenciá-los de forma eficaz. Use um editor de texto, como o vim, para acessar e modificar esses perfis. As opções a seguir contêm etapas detalhadas para criar perfis: Adicionando ou criando perfis do Novell AppArmor Consulte a Seção 3.4.3, “Adicionando ou criando um perfil do Novell AppArmor” (p 43). Editando perfis do Novell AppArmor Consulte a Seção 3.4.4, “Editando um perfil do Novell AppArmor” (p 43). Apagando perfis do Novell AppArmor Consulte a Seção 3.4.5, “Apagando um perfil do Novell AppArmor” (p 44). 42

Guia de Administração do Novell AppArmor 2.0

Para visualizar e editar perfis usando o vim, digite vim em uma janela de terminal. Para habilitar o colorido de sintaxe ao editar um perfil do Novell AppArmor no vim, use os comandos :syntax on e, em seguida, :set syntax=apparmor. Para obter mais informações sobre o vim e o colorido de sintaxe, consulte “apparmor.vim” (p 63). NOTA Após fazer mudanças em um perfil, use o comando rcapparmor restart, descrito na seção anterior. Ele faz o Novell AppArmor reler os perfis. Para obter uma descrição detalhada da sintaxe desses arquivos, consulte o Capítulo 3, Criando perfis do Novell AppArmor (p 11).

3.4.3 Adicionando ou criando um perfil do Novell AppArmor Para adicionar ou criar um perfil do Novell AppArmor para um aplicativo, use um método sistêmico ou independente de geração de perfis, dependendo de suas necessidades. Geração independente de perfis Presta-se à criação de perfis de aplicativos pequenos, com tempo de execução finito (por exemplo: aplicativos clientes de usuário, como os clientes de e-mail). Consulte a Seção 3.5.1, “Geração independente de perfis” (p 45). Geração sistêmica de perfis Presta-se à criação simultânea de perfis de muitos programas, bem como de aplicativos cujo tempo de execução é de dias, semanas ou contínuo ao longo de reinicializações (por exemplo: aplicativos de servidores de rede, como servidores Web e de e-mail). Consulte a Seção 3.5.2, “Geração sistêmica de perfis” (p 46).

3.4.4 Editando um perfil do Novell AppArmor As etapas a seguir descrevem o procedimento para editar um perfil do Novell AppArmor. Para entender melhor em que consiste um perfil, consulte a Seção 3.1, “Componentes e sintaxe dos perfis” (p 11).

Criando perfis do Novell AppArmor

43

1 Se não estiver conectado como Root, digite su em uma janela de terminal. 2 Digite a senha de Root quando solicitado. 3 Para ir ao diretório, digite cd /etc/apparmor.d/. 4 Digite ls para visualizar todos os perfis atualmente instalados. 5 Abra o perfil a editar em um editor de texto, como o vim. 6 Faça as correções necessárias e grave o perfil. 7 Reinicie o Novell AppArmor digitando rcapparmor restart em uma janela de terminal.

3.4.5 Apagando um perfil do Novell AppArmor As etapas a seguir descrevem o procedimento para apagar um perfil do Novell AppArmor. 1 Se não estiver conectado como Root, digite su em uma janela de terminal. 2 Digite a senha de Root quando solicitado. 3 Para ir ao diretório do Novell AppArmor, digite cd /etc/apparmor.d/. 4 Digite ls para ver todos os perfis do Novell AppArmor atualmente instalados. 5 Apague o perfil de saída com rm nome do perfil. 6 Reinicie o Novell AppArmor digitando rcapparmor restart em uma janela de terminal.

44

Guia de Administração do Novell AppArmor 2.0

3.5 Dois métodos de criação de perfis Tendo em vista a sintaxe dos perfis do Novell AppArmor (consulte a Seção 3.1, “Componentes e sintaxe dos perfis” (p 11)), você pode criá-los sem recorrer a ferramentas. Entretanto, o trabalho será muito maior. Para evitar esse inconveniente, use as ferramentas do Novell AppArmor para automatizar a criação e o aprimoramento de perfis. Há duas formas de criar perfis do Novell AppArmor e ferramentas de suporte a ambos os métodos. Geração independente de perfis Presta-se à criação de perfis de aplicativos pequenos, com tempo de execução finito (por exemplo: aplicativos clientes de usuário, como os clientes de e-mail). Para obter mais informações, consulte a Seção 3.5.1, “Geração independente de perfis” (p 45). Geração sistêmica de perfis Presta-se à criação simultânea de perfis de muitos programas, bem como de aplicativos cujo tempo de execução é de dias, semanas ou contínuo ao longo de reinicializações (por exemplo: aplicativos de servidores de rede, como servidores Web e de e-mail). Para obter mais informações, consulte a Seção 3.5.2, “Geração sistêmica de perfis” (p 46). O desenvolvimento automatizado de perfis fica mais fácil com as ferramentas do Novell AppArmor: 1 Escolha qual método de criação de perfis atende às suas necessidades. 2 Execute uma análise estática. Execute genprof ou autodep, dependendo do método de criação de perfis escolhido. 3 Habilite a aprendizagem dinâmica. Habilite o modo de aprendizagem para todos os programas cujo perfil deseja criar.

3.5.1 Geração independente de perfis A geração e o aprimoramento independentes de perfis são gerenciados por um programa chamado genprof. Trata-se de um método fácil porque o genprof cuida de tudo, mas é Criando perfis do Novell AppArmor

45

limitado porque requer que o genprof seja executado durante toda a execução do teste do programa (você não pode reinicializar a máquina enquanto estiver desenvolvendo o perfil). Para usar o genprof no método de geração independente de perfis, consulte “genprof” (p 51).

3.5.2 Geração sistêmica de perfis Este método se chama geração sistêmica de perfis porque atualiza de uma só vez todos os perfis do sistema, ao contrário do genprof ou da geração independente de perfis, que se volta apenas para um ou poucos perfis. Com a geração sistêmica, a criação e o aprimoramento de perfis são um pouco menos automatizados, porém mais flexíveis. Este método se presta à criação de perfis de aplicativos de execução longa, cujo comportamento persiste após a reinicialização, ou de grandes quantidades de programas cujos perfis devem ser criados de uma só vez. Crie um perfil do Novell AppArmor para um grupo de aplicativos da seguinte forma: 1 Crie perfis para cada programa que compõe o aplicativo. Embora esse método seja sistêmico, o Novell AppArmor ainda monitora apenas os programas que têm perfis e seus filhos. Desta forma, para que o Novell AppArmor considere um programa, é necessário que pelo menos o autodep crie um perfil aproximado para ele. Para criar esse perfil aproximado, consulte “autodep” (p 48). 2 Coloque os perfis relevantes no modo de aprendizagem ou reclamação. Habilite o modo de aprendizagem ou reclamação para todos os programas que têm perfis digitando complain /etc/apparmor.d/* em uma janela de terminal quando estiver conectado como Root. Quando o modo de aprendizagem está habilitado, não há bloqueio das solicitações de acesso mesmo que o perfil informe que elas devem ser bloqueadas. Isso lhe permite executar diversos testes (como mostra o Passo 3 (p 47)) e "aprender" as necessidades de acesso do programa para que ele funcione adequadamente. Com essas informações, você pode decidir qual o grau de segurança do perfil. Consulte “Modo de aprendizagem ou reclamação” (p 49) para obter instruções mais detalhadas sobre o uso do modo de aprendizagem ou reclamação.

46

Guia de Administração do Novell AppArmor 2.0

3 Exercite o aplicativo. Execute o aplicativo e exerça suas funções. Cabe a você decidir o quanto durará o teste do programa, mas é preciso que ele acesse todos os arquivos que representam suas necessidades de acesso. Como a execução não é supervisionada pelo genprof, esta etapa pode durar vários dias ou semanas e abranger reinicializações completas do sistema. 4 Analise o registro. Na geração sistêmica de perfis, execute o logprof diretamente, em vez de deixar que o genprof o execute (como na geração independente). A forma geral do logprof é: logprof [ -d /caminho/dos/perfis ] [ -f /caminho/do/arquivo/de/perfil ]

Consulte “logprof” (p 57) para obter mais informações sobre o uso do logprof. 5 Repita as etapas 3-4. Isso promoverá a geração de perfis ideais. A abordagem iterativa capta conjuntos de dados menores, que podem ser treinados e recarregados no mecanismo de políticas. As repetições subseqüentes geram menos mensagens e se processam mais rápido. 6 Edite os perfis. Procure examinar os perfis gerados. Abra-os e edite-os em /etc/apparmor.d/ usando o vim. Para obter informações sobre como extrair o máximo do vim, consulte “apparmor.vim” (p 63). 7 Retorne ao modo “forçado”. É neste momento que o sistema volta a forçar as regras dos perfis, em vez de apenas registrar informações. Isso pode ser feito manualmente, através da remoção do texto flags=(complain) dos perfis, ou automaticamente, através do uso do comando enforce (forçar), que funciona da mesma forma que o comando complain (reclamar), mas coloca os perfis no modo forçado. Para garantir que todos os perfis saiam do modo de reclamação e entrem no modo forçado, digite enforce /etc/apparmor.d/*. 8 Pesquise de novo todos os perfis. Para que o Novell AppArmor pesquise de novo todos os perfis e mude o modo forçado no kernel, digite /etc/init.d/apparmor restart.

Criando perfis do Novell AppArmor

47

3.5.3 Resumo das ferramentas de perfil Todos os utilitários de criação de perfis do Novell AppArmor são fornecidos no pacote RPM apparmor-utils. A maioria está armazenada em /usr/sbin. As seções a seguir apresentam cada ferramenta.

autodep Ferramenta que cria um perfil aproximado para o programa ou aplicativo que você está submetendo a autodep. Você pode gerar perfis aproximados para executáveis binários e programas de scripts interpretados. O perfil resultante é chamado de “aproximado” porque não contém necessariamente todas as entradas de perfil que o programa precisa para ser adequadamente delimitado pelo Novell AppArmor. O perfil aproximado mínimo do autodep tem pelo menos uma diretiva de inclusão básica, a qual contém as entradas de perfil essenciais à maioria dos programas. No caso de certos tipos de programa, o autodep gera um perfil mais extenso. O perfil é gerado chamando recursivamente ldd(1) nos executáveis relacionados na linha de comando. Para gerar um perfil aproximado, use o programa autodep. O argumento do programa pode ser simplesmente o nome do programa, que o autodep encontra pesquisando a variável do caminho de seu shell, ou um caminho plenamente qualificado. O programa em si pode ser de qualquer tipo (binário ELF, script de shell, script de Perl etc.), e o autodep gera um perfil aproximado que deve ser aprimorado através do procedimento dinâmico apresentado a seguir. O perfil aproximado resultante é gravado no diretório /etc/apparmor.d usando a convenção do Novell AppArmor segundo a qual o perfil é nomeado com base no caminho absoluto do programa, substituindo-se as barras (/) do caminho por pontos (.). A forma geral do autodep requer que você digite o seguinte em uma janela de terminal quando estiver conectado como Root: autodep [ -d /caminho/dos/perfis ] [programa1 programa2...]

Se você não digitar o(s) nome(s) do programa, um prompt lhe solicitará que o faça. /caminho/dos/perfis substitui a localização padrão /etc/apparmor.d. Para dar início ao processo, você deve criar perfis para o serviço de cada um dos principais executáveis que fazem parte do aplicativo (tudo que possa começar sem a condição de filho de outro programa que já tem um perfil). Se todos esses programas

48

Guia de Administração do Novell AppArmor 2.0

serão encontrados depende do aplicativo em questão. Eis aqui várias estratégias para encontrar esse tipo de programa: Diretórios Se todos os programas cujos perfis você quer criar estiverem em um diretório que não tenha nenhum outro programa, basta usar o comando autodep /caminho/dos/seus/programas/* para criar perfis nominais para todos os programas existentes nesse diretório. Comando ps Execute o aplicativo e use o comando padrão ps do Linux para detectar todos os processos em execução. Em seguida, você terá de localizar manualmente esses programas e executar o autodep para cada um. Se os programas estiverem em seu caminho, o autodep os localizará para você. Se não estiverem, o comando padrão locate (localizar) do Linux o ajudará a localizar esses programas. Se o comando locate não funcionar (ele não é instalado por padrão no SUSE Linux), use find . -name '*foo*' -print.

Modo de aprendizagem ou reclamação A ferramenta do modo de aprendizagem ou reclamação detecta violações de regras de perfis do Novell AppArmor (por exemplo, quando um programa acessa arquivos não permitidos por seu perfil). Embora sejam permitidas, as violações são também registradas. Para aprimorar perfis, habilite o modo de reclamação, execute o programa através de um conjunto de testes para gerar eventos de registro que caracterizem as necessidades de acesso do programa e façam o pós-processamento do registro com as ferramentas do Novell AppArmor, a fim de transformar os eventos de registro em perfis aprimorados. A habilitação manual do modo de reclamação (usando a linha de comando) adiciona um flag ao início do perfil, de modo que /bin/foo se torna /bin/foo flags=(complain). Para usar o modo de reclamação, abra uma janela de terminal quando estiver conectado como usuário Root e digite uma das linhas a seguir. • Se o programa de exemplo (programa1) estiver em seu caminho, use: complain [programa1 programa2 ...]

• Se o programa não estiver em seu caminho, especifique o caminho inteiro da seguinte forma:

Criando perfis do Novell AppArmor

49

complain /sbin/programa1

• Se os perfis não estiverem em /etc/apparmor.d, digite o seguinte para substituir a localização padrão: complain /caminho/dos/perfis/ programa1

• Especifique o perfil para o programa1 da seguinte forma: complain /etc/apparmor.d/sbin.programa1

Cada um dos comandos acima habilita o modo de reclamação para os perfis/programas relacionados. O comando pode relacionar tanto programas quanto perfis. Se o nome do programa não incluir seu caminho na íntegra, a ferramenta pesquisará $PATH para o programa. Então, para exemplificar, complain /usr/sbin/* localiza perfis associados a todos os programas existentes em /usr/sbin e os coloca no modo de reclamação, e complain /etc/apparmor.d/* coloca todos os perfis existentes em /etc/apparmor.d no modo de reclamação.

Modo forçado A ferramenta do modo forçado detecta violações de regras de perfis do Novell AppArmor (por exemplo, quando um programa acessa arquivos não permitidos por seu perfil). As violações são registradas e não são permitidas. Por padrão, o modo forçado está habilitado. Habilite o modo de reclamação quando quiser que os perfis do Novell AppArmor controlem o acesso de um programa que possua perfil. O modo forçado alterna com o de reclamação. A habilitação manual do modo forçado (usando a linha de comando) adiciona um flag ao início do perfil, de modo que /bin/foo se torna /bin/foo flags=(enforce). Para usar o modo forçado, abra uma janela de terminal quando estiver conectado como usuário Root e digite uma das linhas a seguir. • Se o programa de exemplo (programa1) estiver em seu caminho, use: enforce [programa1 programa2 ...]

• Se o programa não estiver em seu caminho, especifique o caminho inteiro da seguinte forma: enforce /sbin/programa1

50

Guia de Administração do Novell AppArmor 2.0

• Se os perfis não estiverem em /etc/apparmor.d, digite o seguinte para substituir a localização padrão: enforce /caminho/dos/perfis/ programa1

• Especifique o perfil para o programa1 da seguinte forma: enforce /etc/apparmor.d/sbin.programa1

Cada um dos comandos acima habilita o modo forçado para os perfis e programas relacionados. Se você não digitar o nome do programa ou perfil, um prompt lhe solicitará que o faça. /caminho/dos/perfis substitui a localização padrão /etc/apparmor.d. O argumento pode ser tanto uma lista de programas quanto uma lista de perfis. Se o nome do programa não incluir seu caminho na íntegra, a ferramenta pesquisará $PATH para o programa. Para exemplificar, enforce /usr/sbin/* localiza perfis associados a todos os programas existentes em /usr/sbin e os coloca no modo forçado, e enforce /etc/apparmor.d/* coloca todos os perfis existentes em /etc/apparmor.d no modo forçado.

genprof genprof (ou Gerar Perfil) é o utilitário de geração de perfis do Novell AppArmor. Ele executa autodep para o programa especificado, criando um perfil aproximado (caso o programa ainda não tenha perfil), coloca-o no modo de reclamação, recarrega-o no Novell AppArmor, marca o syslog e solicita ao usuário que execute o programa e exerça suas funções. Sua sintaxe é a seguinte: genprof [ -d /caminho/dos/perfis ]programa

Caso desejasse criar um perfil para o programa httpd2-prefork do servidor Web do Apache, você teria de fazer o seguinte no shell do Root: 1 Digitar rcapache2 stop. 2 Em seguida, digitar genprof httpd2-prefork. Então o genprof faria o seguinte:

Criando perfis do Novell AppArmor

51

• Resolveria o caminho inteiro do httpd2-prefork com base nas variáveis do caminho de seu shell. Você também poderia especificar um caminho inteiro. No SUSE Linux, o caminho completo seria /usr/sbin/ httpd2-prefork. • Verificaria se já havia algum perfil para httpd2-prefork. Se houvesse, ele o atualizaria. Se não, ele criaria um usando o programa autodep, descrito na Seção 3.5.3, “Resumo das ferramentas de perfil” (p 48). NOTA Existe uma convenção de nomeação que relaciona o caminho completo de um programa ao nome de arquivo de seu perfil, de forma que as várias ferramentas de perfil do Novell AppArmor possam manipulá-lo com consistência. A convenção é substituir a barra (/) pelo ponto (.), de modo que o perfil do /usr/sbin/ httpd2-prefork seja armazenado em /etc/apparmor.d/usr .sbin.httpd2-prefork. • Colocaria o perfil desse programa no modo de aprendizagem ou reclamação para que as violações de perfis fossem registradas, porém permitidas. O evento de registro teria a seguinte aparência: Oct 9 15:40:31 AppArmor: PERMITTING r access to /etc/apache2/httpd.conf (httpd2-prefork(6068) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork)

• Marcaria o syslog com um sinalizador de início de eventos de registro para consideração. Exemplo: Sep 13 17:48:52 h2o root: GenProf: e2ff78636296f16d0b5301209a04430d

3 Quando a ferramenta solicitar, execute o aplicativo cujo perfil deve ser criado em outra janela de terminal e use o máximo possível de funções do aplicativo para que o modo de aprendizagem possa registrar os arquivos e diretórios cujo acesso o programa exige para funcionar adequadamente. Por exemplo, digite rcapache2 start em outra janela de terminal. 4 Selecione uma das seguintes opções quando concluir a execução das funções do programa:

52

Guia de Administração do Novell AppArmor 2.0



S executa o logprof com base no registro do sistema a partir do ponto em que foi marcado quando o genprof foi iniciado e recarrega o perfil.

Se houver eventos de sistema no registro, o Novell AppArmor analisará os arquivos de registro do modo de aprendizagem. Isso gera uma série de perguntas que devem ser respondidas para guiar o genprof na geração do perfil de segurança. •

F

sai da ferramenta e retorna ao menu principal.

NOTA Se houver solicitações para adicionar hats, vá para o Capítulo 5, Criando perfil dos aplicativos web com o ChangeHat Apache (p 99). 5 Você deve responder a dois tipos de perguntas: • Um programa que tem perfil requisita um recurso que não consta do perfil (consulte o Exemplo 3.1, “Exceção do modo de aprendizagem: controlando o acesso a recursos específicos” (p 53)). • O programa cujo perfil foi gerado executa outro programa e a transição do domínio de segurança não foi definida (consulte o Exemplo 3.2, “Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada” (p 54)). Cada um desses casos gera uma série de perguntas que devem ser respondidas para adicionar o recurso ou o programa ao perfil. As duas figuras a seguir são um exemplo de cada caso. As etapas subseqüentes mostram as opções de resposta a essas perguntas. Exemplo 3.1 Exceção do modo de aprendizagem: controlando o acesso a recursos específicos Lendo entradas de registro de /var/log/messages. Atualizando perfis do apparmor em /etc/apparmor.d. Perfil: /usr/sbin/xinetd Executar: /usr/sbin/vsftpd [(I)nherit] (Herdar)/ (P)rofile (Perfil) / (U)nconfined (Não delimitado) / (D)eny (Negar) / Abo(r)t (Interromper) / (F)inish) (Concluir)

Criando perfis do Novell AppArmor

53

Não é fácil lidar com acessos de execução. Você deve decidir qual dos três tipos de permissões de execução deve conceder ao programa: herdar (ix) O filho herda o perfil do pai, sendo executado com os mesmos controles de acesso que ele. Esse modo é útil quando um programa delimitado precisa chamar outro programa delimitado sem ganhar as permissões do perfil de destino nem perder as permissões do perfil atual. Ele é usado muitas vezes quando o programa filho é um aplicativo ajudante, como quando o cliente de /usr/bin/mail usa o programa inferior como pager ou o navegador Mozilla usa o programa Acrobat para exibir arquivos PDF. perfil (px) O filho é executado usando seu próprio perfil, que deve ser carregado no kernel. Se o perfil não estiver presente, as tentativas de execução do filho serão malsucedidas (permissão negada). Isso tudo é mais útil quando o programa pai está invocando um serviço global, como as pesquisas DNS, ou enviando e-mail através do MTA do sistema. não delimitado (ux) O filho é executado sem nenhuma delimitação e sem a aplicação de nenhum perfil do Novell AppArmor ao recurso em execução. Exemplo 3.2 Exceção do modo de aprendizagem: definindo permissões de execução para uma entrada Adicionando /bin/ps ix ao perfil. Perfil:

/usr/sbin/xinetd Caminho:

/etc/hosts.allow Novo Modo: r

[1 - /etc/hosts.allow] [(A)llow] (Permitir) / (D)eny (Negar) / (N)ew (Novo) / (G)lob (Englobar) / Glob w/(E)xt (Englobar c/ Ext) / Abo(r)t (Interromper) / (F)inish (Concluir)

O menu acima mostra o Novell AppArmor sugerindo entradas de caminho de diretório que foram acessadas pelo aplicativo cujo perfil você está criando. Talvez ele exigisse que você definisse permissões de execução para entradas. O Novell AppArmor fornece um ou mais nomes de caminho ou inclusões. Clique no número da opção para selecionar dentre uma ou mais das seguintes opções e vá para a próxima etapa.

54

Guia de Administração do Novell AppArmor 2.0

NOTA Nem sempre essas opções são apresentadas no menu do Novell AppArmor. #include É a parte de um perfil do Novell AppArmor relativa a um arquivo de inclusão (arquivo que obtém permissões de acesso para programas). Com uma inclusão, você pode fornecer ao programa acesso a arquivos ou caminhos de diretórios que são necessários também a outros programas. Além disso, pode reduzir o tamanho do perfil. É recomendável selecionar inclusões quando sugerido. Versão englobada Para acessá-la, clique em Englobar, conforme descrito na próxima etapa. Para obter informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Nome do caminho O próprio caminho que o programa precisa acessar para funcionar adequadamente. 6 Após selecionar o nome do caminho ou inclusão, você pode processá-lo como entrada no perfil do Novell AppArmor. Para isso, clique em Permitir ou Negar. Caso não fique satisfeito com a entrada de caminho de diretório exibida, você poderá usar as opções Englobar ou Editar. As seguintes opções estão disponíveis para processar as entradas do modo de aprendizagem e criar o perfil: Pressionar Enter Permite acesso ao caminho de diretório selecionado. Permitir Permite acesso às entradas de caminho de diretório especificadas. O Novell AppArmor sugere acesso a permissão de arquivo. Para obter mais informações, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66).

Criando perfis do Novell AppArmor

55

Negar Impede que o programa acesse as entradas de caminho de diretório especificadas. O Novell AppArmor então passa para o próximo evento. Nova Solicita-lhe que forneça sua própria regra para esse evento, permitindo que você especifique a forma da expressão regular que quiser. Se a expressão fornecida não satisfizer ao evento que deu origem à solicitação, o Novell AppArmor pedirá confirmação e solicitará que você redigite a expressão. Englobar Se acessada com um clique, esta opção modifica o caminho do diretório (usando curingas) para incluir todos os arquivos no diretório de entrada sugerido. Se acessada com dois cliques, ela permite acesso a todos os arquivos e subdiretórios abaixo do mostrado. Para obter mais informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Englobar c/ ext. Quando selecionada, esta opção modifica o caminho do diretório original mantendo a extensão do arquivo. Por exemplo, /etc/apache2/arquivo .ext se tornará /etc/apache2/*.ext, com o acréscimo do curinga (asterisco) no lugar do nome do arquivo. Isso permite ao programa acessar todos os arquivos do diretório sugerido que tiverem a extensão .ext. Se acessada com dois cliques, a opção permite acesso a todos os arquivos (que tiverem a extensão indicada) e subdiretórios abaixo do mostrado. Editar Permite a edição da linha selecionada. A nova linha (editada) aparece na parte inferior da lista. Interromper Interrompe o logprof, descartando todas as mudanças de regra inseridas e deixando inalterados todos os perfis. Concluir Fecha o logprof, gravando todas as mudanças de regra inseridas e modificando todos os perfis.

56

Guia de Administração do Novell AppArmor 2.0

7 Para visualizar e editar um perfil usando o vim, digite vim /etc/apparmor.d/nome do perfil em uma janela de terminal. Para habilitar o colorido de sintaxe ao editar um perfil do Novell AppArmor no vim, use os comandos :syntax on e, em seguida, :set syntax=apparmor. Para obter mais informações sobre o vim e o colorido de sintaxe, consulte “apparmor.vim” (p 63).

logprof O logprof é uma ferramenta interativa usada para examinar a saída dos modos de aprendizagem ou reclamação encontrada nas entradas do syslog e depois gerar novas entradas nos perfis de segurança do Novell AppArmor. Quando é executado, o logprof começa a verificar os arquivos de registro produzidos no modo de aprendizagem ou reclamação. Se houver novos eventos de segurança que não estejam cobertos pelo conjunto de perfis existentes, ele sugere modificações para o perfil. O modo de aprendizagem ou reclamação rastreia o comportamento dos programas e o registra no syslog. O logprof usa essas informações para observar o comportamento dos programas. Quando um programa delimitado bifurca e executa outro programa, o logprof percebe isso e pergunta ao usuário qual modo de execução deve ser usado ao iniciar o processo filho. Os seguintes modos de execução são opções para iniciar o processo filho: ix, px e ux. Se o processo filho possui um perfil à parte, a seleção padrão é px. Caso contrário, o padrão do perfil é ix. Os processos filhos que possuem perfil à parte são submetidos à execução do autodep e carregados no Novell AppArmor, caso este esteja em execução. Quando o logprof é encerrado, os perfis são atualizados com as mudanças. Se o módulo AppArmor estiver em execução, os perfis atualizados serão recarregados. Se algum processo que tenha gerado eventos de segurança ainda estiver em execução no nullcomplain-profile, ele passará a ser executado com base em seu próprio perfil. Para executar o logprof, digite logprof em uma janela de terminal quando estiver conectado como Root. As opções a seguir também podem ser usadas com o logprof: logprof -d /caminho/do/diretório/do/perfil/ Especifica o caminho completo da localização dos perfis se eles não estiverem armazenados no diretório padrão, /etc/apparmor.d/.

Criando perfis do Novell AppArmor

57

logprof -f /caminho/do/arquivo/de/perfil/ Especifica o caminho inteiro para a localização do arquivo de registro se este não estiver armazenado no diretório padrão, /var/log/messages. logprof -m "string marker in logfile" Marca o ponto em que o logprof deve iniciar a pesquisa do registro do sistema. O logprof ignora todos os eventos do registro que estiverem antes da marca especificada. Se essa marca contiver espaços, deve estar entre aspas para funcionar corretamente. Exemplo: logprof -m e2ff78636296f16d0b5301209a04430d O logprof verifica o registro, perguntando como lidar com cada evento registrado. Cada pergunta contém uma lista numerada de regras do Novell AppArmor, as quais podem ser adicionadas pressionando-se o número correspondente. Por padrão, o logprof busca perfis em /etc/apparmor.d/ e verifica o registro de /var/log/messages. Portanto, em muitos casos, basta executar logprof como Root para criar o perfil. Contudo, às vezes é preciso pesquisar arquivos de registro arquivados, como é o caso quando o período de exercício do programa excede janela de rotação do registro (quando o arquivo de registro é arquivado e um novo arquivo de registro é iniciado). Nesse caso, digite zcat -f `ls -1tr /var/log/messages*` | logprof -f -.

Exemplo 1 do logprof A seguir, é apresentado um exemplo de como o logprof lida com o acesso do httpd2prefork ao arquivo /etc/group. O exemplo usa [] para indicar a opção padrão. Nesse exemplo, o acesso a /etc/group é parte do acesso do httpd2-prefork a serviços de nomes. A resposta adequada é 1, a qual extrai um conjunto predefinido de regras do Novell AppArmor. Ao selecionar 1 para #include, o pacote de serviços de nomes resolve todas as perguntas futuras relativas às pesquisas DNS, além de tornar o perfil menos frágil, pois qualquer mudança na configuração DNS e no respectivo pacote de perfis de serviços de nomes só precisará ser feita uma vez, em vez de exigir a revisão de muitos perfis. Perfil: /usr/sbin/httpd2-prefork Caminho: /etc/group Novo Modo: r [1 - #include ]

58

Guia de Administração do Novell AppArmor 2.0

2 - /etc/group [(A)llow] (Permitir) / (D)eny (Negar) / (N)ew (Novo) / (G)lob (Englobar) / Glob w/(E)xt (Englobar c/ Ext) / Abo(r)t (Interromper) / (F)inish (Concluir)

Selecione uma das seguintes respostas: Pressionar Enter Permite acesso ao caminho de diretório selecionado. Permitir Permite acesso às entradas de caminho de diretório especificadas. O Novell AppArmor sugere acesso a permissão de arquivo. Para obter mais informações sobre isso, consulte a Seção 3.7, “Modos de acesso a permissões de arquivo” (p 66). Negar Impede que o programa acesse as entradas de caminho de diretório especificadas. O Novell AppArmor então move para o próximo evento. Nova Solicita-lhe que forneça sua própria regra para esse evento, permitindo que você especifique a forma da expressão regular que quiser. Se a expressão fornecida não atender ao evento que deu origem à solicitação, o Novell AppArmor pedirá confirmação e solicitará que você redigite a expressão. Englobar Se acessada com um clique, esta opção modifica o caminho do diretório (usando curingas) para incluir todos os arquivos no diretório de entrada sugerido. Se acessada com dois cliques, ela permite acesso a todos os arquivos e subdiretórios abaixo do mostrado. Para obter mais informações sobre a sintaxe de englobamento, consulte a Seção 3.6, “Nomes de caminhos e englobamento” (p 65). Englobar c/ ext. Quando selecionada, esta opção modifica o caminho do diretório original mantendo a extensão do arquivo. Por exemplo, /etc/apache2/arquivo.ext se tornará /etc/apache2/*.ext, com o acréscimo do curinga (asterisco) no lugar do nome do arquivo. Isso permite ao programa acessar todos os arquivos do diretório sugerido que tiverem a extensão .ext. Se acessada com dois cliques, a opção permite acesso a todos os arquivos (que tiverem a extensão indicada) e subdiretórios abaixo do mostrado.

Criando perfis do Novell AppArmor

59

Editar Permite a edição da linha selecionada. A nova linha (editada) aparece na parte inferior da lista. Interromper Interrompe o logprof, descartando todas as mudanças de regra inseridas e deixando inalterados todos os perfis. Concluir Fecha o logprof, gravando todas as mudanças de regra inseridas e modificando todos os perfis.

Exemplo 2 do logprof Ao criar o perfil de vsftpd, vemos a seguinte pergunta: Perfil: /usr/sbin/vsftpd Caminho: /y2k.jpg Novo Modo: r [1 - /y2k.jpg] (A)llow (Permitir) / [(D)eny] (Negar) / (N)ew (Novo) / (G)lob (Englobar) / Glob w/(E)xt (Englobar c/ Ext) / Abo(r)t (Interromper) / (F)inish (Concluir)

A pergunta traz à tona várias coisas interessantes. Em primeiro lugar, observe que o vsftpd está solicitando uma entrada de caminho no topo da árvore, embora no SUSE Linux por padrão ele atenda arquivos de FTP de /srv/ftp. Isso é porque o httpd2prefork usa chroot e, na parte de código dentro da cadeia chroot, o Novell AppArmor vê os acessos a arquivos em termos do ambiente chroot, em vez do caminho absoluto global. O segundo ponto de interesse é que, caso se queira conceder acesso de leitura no FTP a todos os arquivos JPEG do diretório, é possível usar Englobar c/ Ext e o caminho sugerido (/*.jpg). Isso derrubaria todas as regras que antes concediam acesso individualmente a cada arquivo .jpg e evitaria todas as futuras perguntas relativas ao acesso a arquivos .jpg. Por fim, pode ser que o objetivo seja conceder mais acesso geral a arquivos de FTP. Se você selecionasse Englobar na última entrada, o logprof substituiria o caminho sugerido (/y2k.jpg) por /*. Ou, se você quisesse conceder ainda mais acesso a toda a árvore do diretório, poderia usar a opção de caminho Nova e digitar /**.jpg (o que

60

Guia de Administração do Novell AppArmor 2.0

concederia acesso a todos os arquivos .jpg de toda a árvore do diretório) ou /** (o que concederia acesso a todos os arquivos da árvore do diretório). O exemplo acima diz respeito a acessos de leitura. Os acessos de gravação são similares. Mas é recomendável mais cautela no emprego de expressões regulares para esse tipo de acesso. Os acessos de execução são mais complexos. Você deve decidir qual dos três tipos de permissões de execução deve conceder: Herdar (ix) O filho herda o perfil do pai, sendo executado com os mesmos controles de acesso que ele. Esse modo é útil quando um programa delimitado precisa chamar outro programa delimitado sem ganhar as permissões do perfil de destino nem perder as permissões do perfil atual. Ele é usado muitas vezes quando o programa filho é um aplicativo ajudante, como quando o cliente de /usr/bin/mail usa o programa inferior como pager ou o navegador Mozilla usa o programa Acrobat para exibir arquivos PDF. perfil (px) O filho é executado usando seu próprio perfil, que deve ser carregado no kernel. Se o perfil não estiver presente, as tentativas de execução do filho serão malsucedidas (permissão negada). Isso tudo é mais útil quando o programa pai está invocando um serviço global, como as pesquisas DNS, ou enviando e-mail através do MTA do sistema. não delimitado (ux) O filho é executado sem nenhuma delimitação e sem a aplicação de nenhum perfil do Novell AppArmor ao recurso em execução. No exemplo seguinte, está sendo criado o perfil do /usr/bin/mail, um cliente de e-mail, e o logprof descobriu que o /usr/bin/mail executa o /usr/bin/less como aplicativo ajudante para fazer a “paginação” de mensagens de e-mail longas. Conseqüentemente, ele apresenta este prompt: /usr/bin/nail -> /usr/bin/less (I)nherit (Herdar) / (P)rofile (Perfil) / (U)nconstrained (Não delimitado) / (D)eny (Negar)

Criando perfis do Novell AppArmor

61

DICA Ocorre que o arquivo executável real do /usr/bin/mail é o /usr/bin/ nail, o que não é um erro tipográfico. Aparentemente, o /usr/bin/less é um programa simples para rolagem de texto mais longo que a tela e, com efeito, é para isso que o /usr/bin/mail o utiliza. Porém, na verdade, o less é um programa grande e potente que usa muitos outros aplicativos ajudantes, como tar e rpm. DICA Execute o less em um arquivo tarball ou RPM para exibir o inventário desses containers. Não se deve executar o rpm automaticamente ao ler mensagens de e-mail (isso promoveria ataques de vírus do tipo Microsoft* Outlook, pois o rpm pode instalar e modificar programas do sistema). Nesse caso, a melhor opção é usar Herdar. Isso fará o programa less ser executado nesse contexto com o perfil de /usr/bin/mail, o que terá dois efeitos: • Você terá de adicionar todos os acessos de arquivo básicos de /usr/bin/less ao perfil do /usr/bin/mail. • Você poderá evitar adicionar os aplicativos ajudantes, como tar e rpm, ao perfil do /usr/bin/mail, de modo que quando o /usr/bin/mail executar o /usr/ bin/mail/less nesse contexto, o programa less se torne bem menos perigoso do que seria sem a proteção do Novell AppArmor. Em outras circunstâncias, você poderia usar a opção Perfil. Isso teria dois efeitos sobre o logprof: • A regra gravada no perfil seria px, o que forçaria a transição para o perfil do próprio filho. • O logprof interpretaria um perfil para o filho e começaria a criá-lo da mesma forma que havia criado o perfil do pai: atribuindo eventos do processo do filho ao perfil do filho e fazendo ao usuário perguntas como as acima.

62

Guia de Administração do Novell AppArmor 2.0

Finalmente, você poderia conceder ao processo filho um acesso muito amplo especificando Não delimitado, o que gravaria ux no perfil do pai. Desse modo, quando fosse executado, o filho não estaria aplicando nenhum perfil do Novell AppArmor. Isso significa execução sem proteção e só deve ser feito quando absolutamente necessário.

apparmor.vim Para realçar com cores as várias características de um perfil do Novell AppArmor, use um arquivo de colorido de sintaxe do editor de texto vim. Usando o vim e o modo de sintaxe que o Novell AppArmor tem para ele, você pode visualizar as implicações semânticas de seus perfis realçadas em diferentes cores. Para visualizar e editar perfis usando o vim, digite vim em uma janela de terminal. Para habilitar o colorido de sintaxe ao editar um perfil do Novell AppArmor no vim, use os comandos :syntax on e, em seguida, :set syntax=apparmor. Outra opção é colocar as seguintes linhas em seu arquivo ~/.vimrc: syntax on set modeline set modelines=5

Quando esse recurso é habilitado, o vim colore as linhas do perfil da seguinte forma: Azul Linhas #include que extraem outras regras e comentários do Novell AppArmor que começam com # Branco Linhas de acesso de leitura normais Marrom Declarações de capacidade e flags de reclamação Amarelo Linhas que concedem acesso para gravação Verde Linhas que concedem permissão de execução (ix ou px) Vermelho Linhas que concedem acesso não delimitado (ux)

Criando perfis do Novell AppArmor

63

Fundo vermelho Erros de sintaxe que não estão sendo adequadamente carregados nos módulos AppArmor NOTA Existe um risco de segurança quando se usam essas linhas no arquivo .vimrc, pois assim o vim passa a confiar no modo de sintaxe apresentado nos arquivos que estão sendo editados. Isso poderia permitir a um invasor que lhe enviasse um arquivo perigoso para abertura no vim. Use as páginas de manual apparmor.vim e vim e a sintaxe :help a partir do editor vim para obter ajuda do próprio vim quanto a realce de sintaxe. A sintaxe do Novell AppArmor está armazenada em /usr/share/vim/current/syntax/apparmor .vim.

Não delimitado O comando unconfined (não delimitado) examina as portas de rede abertas no sistema, compara-as ao conjunto de perfis carregados no sistema e informa os serviços de rede que não possuem perfis do Novell AppArmor. Ele requer privilégio de Root e ausência de delimitação por um perfil do Novell AppArmor. O comando unconfined deve ser executado como Root para recuperar o link executável do sistema de arquivos do processo. Esse programa é suscetível às seguintes condições de race (falhas): • Um executável não vinculado será mal gerenciado • Um executável iniciado antes que um perfil do Novell AppArmor seja carregado não aparecerá na saída, apesar de ser executado sem delimitação • Um processo terminado entre netstat(8) e verificações subseqüentes será mal gerenciado

64

Guia de Administração do Novell AppArmor 2.0

NOTA Esse programa só lista processos usando TCP e UDP. Em resumo, ele não se presta a investigações, sendo fornecido apenas para auxiliar na criação dos perfis dos processos disponíveis em rede no laboratório. Para obter mais informações sobre a tecnologia e a segurança do Novell AppArmor, consulte os seguintes documentos: SubDomain: Parsimonious Server Security, de Crispin Cowan, Steve Beattie, Greg Kroah-Hartman, Calton Pu, Perry Wagle e Virgil Gligor Descreve o design e a implementação inicial do Novell AppArmor. Publicado nos anais da USENIX LISA Conference, dezembro de 2000, Nova Orleans, LA. Esse documento agora está desatualizado, descrevendo recursos e sintaxe diferentes do atual Novell AppArmor. Ele deve ser usado apenas como base científica, e não como documentação técnica. Defcon Capture the Flag: Defending Vulnerable Code from Intense Attack, de Crispin Cowan, Seth Arnold, Steve Beattie, Chris Wright e John Viega Um bom guia para uso estratégico e tático do Novell AppArmor na solução a curto prazo de problemas graves de segurança. Publicado nos anais da DARPA Information Survivability Conference and Expo (DISCEX III), abril de 2003, Washington, DC.

3.6 Nomes de caminhos e englobamento O englobamento (ou correspondência de expressões regulares) consiste em modificar o caminho do diretório com curingas para inclusão de um grupo de arquivos ou subdiretórios. Os recursos dos arquivos podem ser especificados com uma sintaxe de englobamento semelhante à usada por shells comuns, como csh, bash e zsh. *

Substitui qualquer número de caracteres, exceto /.

Criando perfis do Novell AppArmor

65

Exemplo: Um número arbitrário de elementos de caminho, inclusive diretórios inteiros. **

Substitui qualquer número de caracteres, inclusive /. Exemplo: Um número arbitrário de elementos de caminho, inclusive diretórios inteiros.

?

Substitui qualquer caractere, exceto /.

[abc]

Substitui o caractere a, b ou c. Exemplo: Uma regra que corresponda a /home[01]/*/.plan permite a um programa acessar arquivos .plan, estejam os usuários em /home0 ou /home1.

[a-c]

Substitui o caractere a, b ou c.

{ab,cd}

Expande para uma regra que corresponda a ab e uma regra que corresponda a cd. Exemplo: Uma regra que corresponda a /{usr,www}/pages/** que conceda acesso a páginas da Web tanto em /usr/pages quanto em /www/pages.

3.7 Modos de acesso a permissões de arquivo Os modos de acesso a permissões de arquivo consistem em combinações dos seis seguintes modos: r

66

modo de leitura

Guia de Administração do Novell AppArmor 2.0

w

modo de gravação

px

modo de execução de perfil distinto

ux

modo de execução irrestrito

ix

modo de execução herdar

l

modo de link

3.7.1 Modo de leitura Permite que o programa tenha acesso de leitura ao recurso. O acesso de leitura é necessário a scripts de shell e outros conteúdos interpretados e determina se um processo executor pode ter dump de memória ou ser anexado a ptrace(2) (ptrace(2) é usado por utilitários como strace(1), ltrace(1) e gdb(1)).

3.7.2 Modo de gravação Permite que o programa tenha acesso de gravação ao recurso. Os arquivos que devem ser desvinculados (removidos) precisam ter essa permissão.

3.7.3 Modo de execução de perfil distinto Este modo requer a definição de um perfil de segurança distinto para os recursos executados em uma transição de domínio do Novell AppArmor. Se não houver nenhum perfil definido, o acesso é negado. Incompatível com as entradas de execução inherit (herdar) e unconstrained (irrestrito).

3.7.4 Modo de execução irrestrito Permite ao programa executar o recurso sem a aplicação de nenhum perfil do Novell AppArmor. Requer listagem do modo de execução. Incompatível com as entradas de execução inherit (herdar) e discrete profile (perfil distinto).

Criando perfis do Novell AppArmor

67

Esse modo é útil quando um programa delimitado precisa executar uma operação que requer privilégios, como a reinicialização da máquina. Colocando a parte privilegiada em outro executável e concedendo direitos irrestritos de execução, é possível evitar as restrições mandatórias impostas a todos os processos delimitados. Para obter mais informações acerca do que está sujeito a restrições, consulte a página de manual apparmor(7).

3.7.5 Modo de execução herdar Evita a transição de domínio normal do Novell AppArmor em execve(2) quando um programa que tem perfil executa o recurso. Nesse caso, o recurso executado herda o perfil atual. Incompatível com as entradas de execução unconstrained (irrestrito) e discrete profile (perfil distinto). Esse modo é útil quando um programa delimitado precisa chamar outro programa delimitado sem ganhar as permissões do perfil de destino nem perder as permissões do perfil atual. Esse modo normalmente não é usado.

3.7.6 Modo de link O modo de link negocia acesso a symlinks e hardlinks, além do privilégio de desvincular (ou apagar) arquivos. Quando se cria um link, o arquivo vinculado deve ter as mesmas permissões de acesso que o link criado (com a exceção de que o destino não precisa ter acesso de link).

68

Guia de Administração do Novell AppArmor 2.0

Gerenciando aplicativos em perfil

4

Após criar perfis e imunizar os seus aplicativos, o SUSE Linux se torna mais eficiente e melhor protegido se você realizar manutenção de perfil do Novell AppArmor, o que envolve o rastreamento de problemas comuns. Você pode tratar as questões e assuntos comuns antes que se tornem um problema, configurando notificação de evento por email, executando relatórios periódicos, atualizando perfis de entradas de registro de sistema (basicamente com a execução da ferramenta logprof pelo YaST), e tratando as questões de manutenção. As instruções para realizar estas tarefas estão disponíveis em: • Seção 4.1, “Monitorando seus aplicativos protegidos” (p 69) • Seção 4.5, “Mantendo perfis de segurança” (p 96).

4.1 Monitorando seus aplicativos protegidos Os aplicativos delimitados por perfis de segurança do Novell AppArmor geram mensagens quando os aplicativos são executados de maneiras inesperadas ou fora do perfil especificado. Estas mensagens podem ser monitoradas por notificação de evento, geração de relatórios periódicos ou integração em um mecanismo de relatório de terceiros. As seções a seguir fornecem detalhes sobre o uso destes recursos e localização de recursos adicionais. • Seção 4.2, “Configurando notificações de evento” (p 70)

Gerenciando aplicativos em perfil

69

• Seção 4.3, “Relatórios” (p 73) • Seção 4.4, “Reagindo a eventos de segurança” (p 95)

4.2 Configurando notificações de evento A notificação de eventos de segurança é um recurso do Novell AppArmor que informa um destinatário específico de e-mail da ocorrência de uma atividade sistêmica no Novell AppArmor. Esse recurso está disponível atualmente através do YaST. Quando você digita um endereço de e-mail, é notificado por e-mail quando ocorrem eventos de segurança no Novell AppArmor. É possível habilitar três tipos de notificações, que são: Conciso Notificações concisas resumem o número total de eventos do sistema sem fornecer detalhes. Por exemplo: dhcp-101.up.wirex.com has had 10 security events since Tue Oct 12 11:10:00 2004

Notificação resumida A notificação resumida exibe os eventos de segurança do Novell AppArmor registrados e relaciona o número de ocorrências individuais, incluindo a data da última ocorrência. Por exemplo: AppArmor: PERMITTING access to capability ’setgid’ (httpd2-prefork(6347) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork) 2 times, the latest at Sat Oct 9 16:05:54 2004.

Notificação prolixa A notificação prolixa exibe eventos de segurança do Novell AppArmor registrados e não modificados. Informa toda vez que ocorre um evento e grava uma nova linha no registro prolixo. Esses eventos de segurança incluem a data e a hora de ocorrência do evento, quando o perfil do aplicativo permite e rejeita o acesso e o tipo de acesso da permissão de arquivo que é permitido ou rejeitado. A notificação prolixa também relata várias mensagens que a ferramenta logprof (consulte “logprof” (p 57)) usa para interpretar perfis. Por exemplo:

70

Guia de Administração do Novell AppArmor 2.0

Oct 9 15:40:31 AppArmor: PERMITTING r access to /etc/apache2/httpd.conf (httpd2-prefork(6068) profile /usr/sbin/httpd2-prefork active /usr/sbin/httpd2-prefork)

NOTA Para configurar notificações de evento, consulte a Seção 4.2.2, “Configurando notificações de eventos de segurança” (p 71). Após configurar a notificação do evento de segurança, leia os relatórios e determine se os eventos exigem acompanhamento. O acompanhamento pode incluir os procedimentos apresentados na Seção 4.4.1, “Recebendo uma rejeição de evento de segurança” (p 95).

4.2.1 Notificação de nível de gravidade É possível configurar o Novell AppArmor para lhe enviar mensagens de eventos sobre fatos que estão no banco de dados de gravidade e acima do nível selecionado. Eles são numerados de um a dez, dez sendo o incidente de segurança mais grave. O arquivo severity.db define o nível de gravidade dos eventos de segurança potenciais. Os níveis de segurança são determinados pela importância dos diversos eventos de segurança, como determinados recursos acessados ou serviços negados.

4.2.2 Configurando notificações de eventos de segurança A notificação de eventos de segurança é um recurso do Novell AppArmor que informa quando ocorrem atividades sistêmicas no Novell AppArmor. Ao selecionar uma freqüência de notificação (recebimento de notificação diária, por exemplo), você ativa a notificação. Você é solicitado a digitar um endereço de e-mail, de maneira que possa ser notificado por e-mail quando ocorrerem eventos de segurança no Novell AppArmor. NOTA É preciso configurar um servidor de correio no SUSE Linux que possa enviar mensagens de saída usando o protocolo SMTP (por exemplo, postfix ou exim) para garantir o funcionamento correto da notificação de eventos.

Gerenciando aplicativos em perfil

71

1 Na seção Habilitar Notificação de Evento de Segurança da janela Configuração do AppArmor, clique em Configurar.

2 Na janela Notificação de Evento de Segurança, você tem a opção de habilitar notificação de evento Concisa, Resumida ou Prolixa, que são definidas na Seção 4.2.1, “Notificação de nível de gravidade” (p 71). Para receber uma mensagem de notificação apresentando os eventos de segurança do Novell AppArmor recentes, determine a sua preferência de tipo de notificação. 3 Em cada seção de tipo de notificação aplicável, digite os endereços de e-mail de quem deve receber a notificação no campo fornecido. Se a notificação estiver habilitada, você deve digitar um endereço de e-mail. Caso contrário, você recebe uma mensagem de erro. Separe vários endereços de e-mail com vírgulas. 4 Para cada tipo de notificação que deseja habilitar, selecione a freqüência da notificação. Selecione uma freqüência de notificação entre as seguintes opções: • Desabilitado • 1 minuto

72

Guia de Administração do Novell AppArmor 2.0

• 5 minutos • 10 minutos • 15 minutos • 30 minutos • 1 hora • 1 dia • 1 semana 5 Para cada tipo de notificação selecionado, selecione o nível de gravidade mais baixo para o qual uma notificação deve ser enviada. Os eventos de segurança são registrados e as notificações são enviadas no momento indicado pelo intervalo em que os eventos forem iguais ou superiores ao nível de gravidade selecionado. Se o intervalo for de 1 dia, a notificação será enviada diariamente, caso ocorram eventos de segurança. Consulte a Seção 4.2.1, “Notificação de nível de gravidade” (p 71) para obter mais informações sobre os níveis de gravidade. 6 Clique em OK. 7 Clique em Concluído na janela Configuração do AppArmor. 8 Clique em Arquivo → Sair no Centro de Controle do YaST.

4.3 Relatórios O recurso de geração de relatório do Novell AppArmor confere flexibilidade, o que aprimora a maneira como os usuários podem ver os dados de evento de segurança. A ferramenta de relatório executa o seguinte: • Cria relatórios sob demanda • Exporta relatórios • Programa relatórios periódicos para arquivamento

Gerenciando aplicativos em perfil

73

• Envia relatórios periódicos por e-mail • Filtra dados de relatório por data • Filtra dados de relatório por outras opções, como nome de programa Usando relatórios, é possível ler eventos de segurança importantes do Novell AppArmor relatados nos arquivos de registro sem precisar peneirar manualmente as mensagens pesadas, úteis apenas para a ferramenta logprof. É possível restringir o tamanho do relatório, filtrando por faixa de datas ou nome de programa. Também é possível exportar um arquivo html ou csv . Os três tipos de relatórios disponíveis no Novell AppArmor são: Resumo de Segurança Executivo Um relatório combinado, que consiste em um ou mais relatórios de incidente de segurança em uma ou mais máquinas. Este relatório pode fornecer uma visão única dos eventos de segurança em várias máquinas. Para obter mais detalhes, consulte “Resumo de Segurança Executivo” (p 83). Relatório de Auditoria de Aplicativos Uma ferramenta de auditoria que informa quais servidores de aplicativos estão em execução e se os aplicativos são delimitados pelo AppArmor. Os servidores de aplicativos são aplicativos que aceitam conexões de entrada de rede. Para obter mais detalhes, consulte “Relatório de Auditoria de Aplicativos” (p 80). Relatório de Incidentes de Segurança Um relatório que exibe a segurança de aplicativo de um único host. Ele relata as violações de política para aplicativos delimitados localmente durante um período de tempo específico. Você pode editar e personalizar este relatório ou adicionar novas versões. Para obter mais detalhes, consulte “Relatório de Incidentes de Segurança” (p 81). Para usar os recursos de relatório do Novell AppArmor, prossiga com as seguintes etapas: 1 Para executar relatórios, abra YaST → Novell AppArmor. A interface do Novell AppArmor é aberta.

74

Guia de Administração do Novell AppArmor 2.0

2 Em Novell AppArmor, clique em Relatórios do AppArmor. A janela Relatório de Eventos de Segurança do AppArmor será exibida. Na janela Relatórios, selecione uma opção e prossiga para a seção para obter instruções:

Visualizar Arquivo Exibe todos os relatórios que foram executados e armazenados em /var/ log/apparmor/reports-archived/. Selecione o relatório que deseja

Gerenciando aplicativos em perfil

75

ver detalhadamente e clique em Exibir. Para obter instruções sobre Visualizar Arquivo, vá para a Seção 4.3.1, “Visualizando relatórios arquivados” (p 76). Executar Agora Produz uma versão instantânea do tipo de relatório selecionado. Se você selecionar um relatório de incidente de segurança, ele pode ser filtrado ainda mais de várias maneiras. Para obter instruções sobre Executar Agora, vá para a Seção 4.3.2, “Executar Agora: executando relatórios sob demanda” (p 85). Adicionar Cria um relatório de incidente de segurança programado. Para obter instruções sobre Adicionar, vá para a Seção 4.3.3, “Adicionando novos relatórios” (p 88). Editar Edita um relatório de incidente de segurança programado. Apagar Apaga um relatório de incidente de segurança programado. Todos os relatórios de ações ou padronizados não podem ser apagados. Voltar Retorna à tela principal do Novell AppArmor. Interromper Retorna à tela principal do Novell AppArmor. Próximo Executa a mesma função do botão Executar Agora.

4.3.1 Visualizando relatórios arquivados Visualizar Relatórios permite que você especifique a localização de um acúmulo de relatórios de um ou mais sistemas, incluindo a capacidade de filtrar por data ou nomes de programas acessados e exibi-los juntos em um relatório. 1 Na janela Relatório de Eventos de Segurança do AppArmor, selecione Visualizar Arquivo.

76

Guia de Administração do Novell AppArmor 2.0

2 Selecione o tipo de relatório a ser visualizado. Alterne entre os diversos tipos (SIR, App Aud e ESS (Relatório de Incidente de Segurança - Auditoria de Aplicativos - Resumo de Segurança Executivo). 3 Você pode alterar a localização do diretório dos relatórios arquivados em Localização dos Relatórios Arquivados. Selecione Aceitar para usar o diretório atual ou selecione Pesquisar para encontrar uma nova localização de relatório. O diretório padrão é /var/log/apparmor/reports-archived/. 4 Para visualizar todos os relatórios no arquivo, selecione Visualizar Tudo. Para visualizar um relatório específico, selecione um arquivo de relatório indicado no campo Relatório, e selecione Visualizar. 5 Para os relatórios Auditoria de Aplicativos e Resumo de Segurança Executivo, prossiga para o Passo 9 (p 79). 6 A Caixa de Diálogo Configuração de Relatório abre para relatórios de Incidentes de Segurança.

Gerenciando aplicativos em perfil

77

7 A Caixa de Diálogo Configuração de Relatório permite filtrar os relatórios selecionados na tela anterior. Digite os detalhes de filtro desejados. Os campos são: Faixa de Data Para exibir relatórios para um determinado período de tempo, selecione Filtrar por Faixa de Data. Digite as datas de início e término que definem o escopo do relatório. Nome do Programa Ao digitar um padrão ou nome de programa que corresponda ao nome do arquivo binário executável do programa de interesse, o relatório exibirá eventos de segurança que ocorreram para um programa específico. Nome do Perfil Ao digitar o nome do perfil, o relatório exibirá os eventos de segurança gerados para o perfil especificado. Use isso para ver o que está sendo delimitado por um perfil específico. Número do PID O Número do PID identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo).

78

Guia de Administração do Novell AppArmor 2.0

Nível de Gravidade Selecione o nível de gravidade mais baixo para os eventos de segurança que deseja incluir no relatório. O nível de gravidade selecionado e acima serão incluídos nos relatórios. Detalhe Uma fonte à qual o perfil negou acesso. Isso inclui recursos e arquivos. Use esse campo para relatar os recursos aos quais os perfis impedem acesso. Tipo de Acesso O tipo de acesso descreve o que está realmente acontecendo com o evento de segurança. As opções são: PERMITTING, REJECTING ou AUDITING. Modo O Modo é a permissão concedida pelo perfil ao programa ou processo ao qual ele é aplicado. As opções são: r (ler) w (gravar) l (vincular) x (executar). Tipo de Exportação Permite que você exporte um arquivo CSV (valores separados por vírgula) ou HTML. O arquivo CSV usa vírgulas para separar partes de dados nas entradas de registro, usando um formato de dados padrão para importar para aplicativos orientados a tabelas. Você pode digitar um nome de caminho completo para seu relatório exportado no campo fornecido. Localização para Armazenar Registro Permite mudar a localização de armazenamento do relatório exportado. A localização padrão é /var/log/apparmor/reports-exported. Ao mudar esta localização, selecione Aceitar. Selecione Pesquisar para pesquisar o sistema de arquivos. 8 Para ver o relatório, filtrado como desejado, selecione Próximo. É exibido um dos três relatórios. 9 Consulte as seções a seguir para obter informações detalhadas sobre cada tipo de relatório. • Para o relatório de auditoria de aplicativos, consulte “Relatório de Auditoria de Aplicativos” (p 80).

Gerenciando aplicativos em perfil

79

• Para o relatório de incidentes de segurança, consulte “Relatório de Incidentes de Segurança” (p 81). • Para o relatório de resumo executivo, consulte “Resumo de Segurança Executivo” (p 83).

Relatório de Auditoria de Aplicativos Uma ferramenta de auditoria que informa quais servidores de aplicativos estão em execução e se os aplicativos são delimitados pelo AppArmor. Os servidores de aplicativos são aplicativos que aceitam conexões de entrada de rede. Esse relatório fornece o endereço IP da máquina de host, a data de execução do Relatório de Auditoria de Aplicativos, o nome e caminho do servidor de aplicativos ou programa não delimitado, o perfil sugerido ou um marcador para um perfil de um programa não delimitado, o número de ID do processo, o estado do programa (delimitado ou não) e o tipo de delimitação que o perfil está executando (forçado/reclamação). A tela a seguir representa um relatório de auditoria de aplicativos:

Veja abaixo as definições para os campos do relatório de auditoria de aplicativos:

80

Guia de Administração do Novell AppArmor 2.0

Host A máquina protegida pelo AppArmor para a qual os eventos de segurança são relatados. Data A data em que ocorreram os eventos de segurança. Programa O nome do processo em execução. Perfil O nome absoluto do perfil de segurança aplicado ao processo. PID O número de ID do processo identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo). Estado Este campo revela se o programa indicado no campo de programa é delimitado. Se não for delimitado, é possível criar um perfil para ele. Tipo O campo revela o tipo de delimitação que o evento de segurança representa. Diz se é reclamação ou aplicação. Se o aplicativo não for delimitado (estado), nenhum tipo de delimitação é relatado.

Relatório de Incidentes de Segurança Um relatório que exibe eventos de segurança de interesse para o administrador. Ele relata as violações de política para aplicativos delimitados localmente durante um período de tempo específico. O estado do mecanismo de política e as exceções de política dos relatórios SIR mudam. Esses dois tipos de eventos de segurança são definidos da seguinte forma: Exceções de Política Quando um aplicativo solicita um recurso não definido em seu perfil, um evento de segurança é gerado. É gerado um relatório que exibe eventos de segurança de interesse para o administrador. Ele relata as violações de política para aplicativos

Gerenciando aplicativos em perfil

81

delimitados localmente durante um período de tempo específico. O estado do mecanismo de política e as exceções de política dos relatórios SIR mudam. Mudanças do Estado de Mecanismo de Política Aplica a política nos aplicativos e mantém seu próprio estado, inclusive quando o mecanismo inicia ou pára, quando a política é recarregada e quando o recurso de segurança global é habilitado ou desabilitado. A tela a seguir representa um relatório SIR:

Veja abaixo as definições para os campos do relatório SIR: Host A máquina protegida pelo AppArmor para a qual os eventos de segurança são relatados. Data A data em que ocorreram os eventos de segurança. Programa O nome do processo em execução.

82

Guia de Administração do Novell AppArmor 2.0

Perfil O nome absoluto do perfil de segurança aplicado ao processo. PID O número de ID do processo identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo). Gravidade Os níveis de gravidade dos eventos são relatados do banco de dados de gravidade. O banco de dados de gravidade define a importância dos eventos de segurança potenciais e numera-os de um a dez, dez sendo o incidente de segurança mais grave. Os níveis de segurança são determinados pela ameaça ou importância dos diversos eventos de segurança, como determinados recursos acessados ou serviços negados. Modo O modo é a permissão concedida pelo perfil ao programa ou processo ao qual ele é aplicado. As opções são r (ler) w (gravar) l (vincular) x (executar). Detalhe Uma fonte à qual o perfil negou acesso. Isso inclui recursos e arquivos. Use esse campo para relatar os recursos aos quais os perfis impedem acesso. Tipo de Acesso O tipo de acesso descreve o que está realmente acontecendo com o evento de segurança. As opções são PERMITTING, REJECTING ou AUDITING.

Resumo de Segurança Executivo Um relatório combinado que consiste em um ou mais relatórios de alto nível de uma ou mais máquinas. Esse relatório poderá fornecer uma visão única dos eventos de segurança em várias máquinas, se os dados de cada máquina forem copiados para o diretório de relatórios arquivados: /var/log/apparmor/reports-archived. Esse relatório fornece o endereço IP da máquina de host, as datas de início e término dos eventos em poll, número total de rejeições, número total de eventos, média dos níveis de gravidade relatados e o nível mais alto de gravidade relatado. Uma linha do relatório ESS representa uma faixa dos relatórios SIR. A tela a seguir representa um Resumo de Segurança Executivo:

Gerenciando aplicativos em perfil

83

Veja abaixo as definições para os campos do resumo de segurança executivo: Host A máquina protegida pelo AppArmor para a qual os eventos de segurança são relatados. Data inicial A primeira data em uma faixa de datas durante as quais eventos de segurança são relatados. Data de término A última data em uma faixa de datas durante as quais eventos de segurança são relatados. Nº de Rejeições Na faixa de datas determinada, o número total de eventos de segurança que são tentativas de acesso negadas. Nº de Eventos Na faixa de datas determinada, o número total de eventos de segurança.

84

Guia de Administração do Novell AppArmor 2.0

Média de Gravidade É a média dos níveis de gravidade relatados na faixa de datas dada. Gravidades desconhecidas são desconsideradas neste número. Gravidade Alta É a gravidade do evento de gravidade mais alta relatada na faixa de datas determinada.

4.3.2 Executar Agora: executando relatórios sob demanda O recurso de relatório Executar Agora permite que você extraia informações de relatório instantaneamente dos registros de evento do Novell AppArmor sem esperar pelos eventos programados. Retorne ao início desta seção se precisar de ajuda para navegar para a tela de relatório principal (consulte a Seção 4.3, “Relatórios” (p 73)). Execute as seguintes etapas para executar um relatório da lista de relatórios: 1 Selecione o relatório a executar instantaneamente da lista de relatórios na janela Relatórios de Programação. 2 Selecione Executar Agora ou Próximo. A tela seguinte depende do relatório selecionado na etapa anterior. Para os relatórios Auditoria de Aplicativos e Resumo de Segurança Executivo, prossiga para o Passo 6 (p 87). 3 A Caixa de Diálogo Configuração de Relatório é exibida para relatórios de incidente de segurança.

Gerenciando aplicativos em perfil

85

4 A Caixa de Diálogo Configuração de Relatório permite que você filtre os relatórios selecionados na tela anterior. Digite os detalhes de filtro desejados. As seguintes opções de filtro estão disponíveis: Faixa de Data Para limitar relatórios a um determinado período de tempo, selecione Filtrar por Faixa de Data. Digite as datas de início e término que definem o escopo do relatório. Nome do Programa Ao digitar um padrão ou nome de programa que corresponda ao nome do arquivo binário executável do programa de interesse, o relatório exibirá eventos de segurança que ocorreram para um programa específico. Nome do Perfil Ao digitar o nome do perfil, o relatório exibirá os eventos de segurança gerados para o perfil especificado. Use isso para ver o que está sendo delimitado por um perfil específico. Número do PID O número de ID do processo identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo).

86

Guia de Administração do Novell AppArmor 2.0

Nível de Gravidade Selecione o nível de gravidade mais baixo para os eventos de segurança que deseja incluir no relatório. O nível de gravidade selecionado e acima serão incluídos nos relatórios. Detalhe Uma fonte à qual o perfil negou acesso. Isso inclui recursos e arquivos. Use esse campo para relatar os recursos aos quais os perfis impedem acesso. Tipo de Acesso O tipo de acesso descreve o que está realmente acontecendo com o evento de segurança. As opções são PERMITTING, REJECTING ou AUDITING. Modo O modo é a permissão concedida pelo perfil ao programa ou processo ao qual ele é aplicado. As opções são r (ler) w (gravar) l (vincular) x (executar). Tipo de Exportação Permite que você exporte um arquivo CSV (valores separados por vírgula) ou HTML. O arquivo CSV usa vírgulas para separar partes de dados nas entradas de registro, usando um formato de dados padrão para importar para aplicativos orientados a tabelas. Você pode digitar um nome de caminho completo para seu relatório exportado no campo fornecido. Localização para Armazenar Registro Permite que você mude a localização de armazenamento do relatório exportado. A localização padrão é /var/log/apparmor/ reports-exported. Ao mudar esta localização, selecione Aceitar. Selecione Pesquisar para pesquisar o sistema de arquivos. 5 Para ver o relatório, filtrado como desejado, selecione Próximo. É exibido um dos três relatórios. 6 Consulte as seções a seguir para obter informações detalhadas sobre cada tipo de relatório. • Para o relatório de auditoria de aplicativos, consulte “Relatório de Auditoria de Aplicativos” (p 80). • Para o relatório de incidente de segurança, consulte “Relatório de Incidentes de Segurança” (p 81).

Gerenciando aplicativos em perfil

87

• Para o relatório de resumo executivo, consulte “Resumo de Segurança Executivo” (p 83).

4.3.3 Adicionando novos relatórios Adicionar novos relatórios permite que você crie um relatório de incidente de segurança programado que exibe eventos de segurança do Novell AppArmor de acordo com filtros predefinidos. Quando um relatório é configurado em Relatórios de Programação, ele inicia periodicamente um relatório de eventos de segurança do Novell AppArmor que ocorreram no sistema. Você pode configurar relatórios para serem executados em um período especificado a cada mês, semana, dia ou hora. Você pode configurar o relatório para exibir rejeições para determinados níveis de gravidade ou para filtrar por nome de programa, nome de perfil, nível de gravidade ou recursos negados. Este relatório pode ser exportado para um formato de arquivo HTML (Hypertext Markup Language) ou CSV (Comma Separated Values). NOTA Retorne ao início desta seção se precisar de ajuda para navegar para a tela de relatório principal (consulte a Seção 4.3, “Relatórios” (p 73)). Para adicionar um novo relatório de incidente de segurança programado: 1 Clique em Adicionar para criar um novo relatório de incidente de segurança. A primeira página de Adicionar SIR Programado é aberta.

88

Guia de Administração do Novell AppArmor 2.0

2 Preencha os campos com as seguintes informações sobre filtro, conforme a necessidade: Nome de Relatório Especifique o nome do relatório. Use nomes que diferenciem facilmente um relatório do próximo. Dia do Mês Selecione um dia do mês para ativar a filtragem mensal nos relatórios. Se você selecionar Todos, a filtragem mensal não será realizada. Dia da Semana Selecione o dia da semana para programar relatórios semanais, se desejado. Se você selecionar Todos, a filtragem semanal não é realizada. Se for selecionado relatório mensal, este campo assume como padrão Todos. Hora e Minuto Selecione a hora. Especifica a hora e o minuto em que deseja executar os relatórios. Se não mudar a hora, os relatórios selecionados são executados à meia-noite. Se nem mês ou dia da semana forem selecionados, o relatório é executado diariamente na hora especificada. Enviar por E-mail ao Destino Você tem a capacidade de enviar o relatório de incidente de segurança programado por e-mail a até três destinatários. Basta inserir os endereços de e-mail de quem solicita informações de incidentes de segurança.

Gerenciando aplicativos em perfil

89

Tipo de Exportação Permite que você exporte um arquivo CSV (valores separados por vírgula) ou HTML. O arquivo CSV usa vírgulas para separar partes de dados nas entradas de registro, usando um formato de dados padrão para importar para aplicativos orientados a tabelas. Você pode digitar um nome de caminho completo para seu relatório exportado no campo fornecido. Localização para Armazenar Registro Permite que você mude a localização de armazenamento do relatório exportado. A localização padrão é /var/log/apparmor/ reports-exported. Ao mudar esta localização, selecione Aceitar. Selecione Pesquisar para pesquisar o sistema de arquivos. 3 Clique em Próximo para ir até a segunda página de Adicionar SIR Programado.

4 Preencha os campos com as seguintes informações sobre filtro, conforme a necessidade: Nome do Programa Você pode especificar um padrão ou nome de programa que corresponda ao nome do arquivo binário executável do programa de interesse. O relatório exibe eventos de segurança que ocorreram apenas para o programa especificado.

90

Guia de Administração do Novell AppArmor 2.0

Nome do Perfil Você pode especificar o nome do perfil para o qual o relatório deve exibir eventos de segurança. Use isso para ver o que está sendo delimitado por um perfil específico. Número do PID O número de ID do processo identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo). Detalhe Uma fonte à qual o perfil negou acesso. Isso inclui recursos e arquivos. Use esse campo para criar um relatório dos recursos aos quais os perfis impedem acesso. Gravidade Selecione o nível de gravidade mais baixo para os eventos de segurança a incluir no relatório. O nível de gravidade selecionado e acima serão incluídos nos relatórios. Tipo de Acesso O tipo de acesso descreve o que está realmente acontecendo com o evento de segurança. As opções são PERMITTING, REJECTING ou AUDITING. Modo O modo é a permissão concedida pelo perfil ao programa ou processo ao qual ele é aplicado. As opções são r (ler) w (gravar) l (vincular) x (executar). 5 Clique em Salvar para gravar este relatório. O Novell AppArmor retorna para a janela principal Relatórios Programados, onde o relatório recém-programado aparece na lista de relatórios.

4.3.4 Editando relatórios Na tela Relatórios do AppArmor, você pode selecionar e editar um relatório. Os relatórios de ações não podem ser editados nem apagados.

Gerenciando aplicativos em perfil

91

NOTA Retorne ao início desta seção se precisar de ajuda para navegar para a tela de relatório principal (consulte a Seção 4.3, “Relatórios” (p 73)). Execute as seguintes etapas para executar um relatório da lista de relatórios: 1 Na lista de relatórios da janela Relatórios Programados, selecione o relatório a editar. 2 Clique em Editar para editar o relatório de incidente de segurança. A primeira página de Adicionar SIR Programado é aberta.

3 Digite as seguintes informações de filtragem, conforme a necessidade: Dia do Mês Selecione um dia do mês para ativar a filtragem mensal nos relatórios. Se você selecionar Todos, a filtragem mensal não será realizada. Dia da Semana Selecione o dia da semana para programar relatórios semanais, se desejado. Se você selecionar Todos, a filtragem semanal não será realizada. Se for selecionado relatório mensal, este campo assume como padrão Todos. Hora e Minuto Selecione a hora. Especifica a hora e o minuto em que deseja executar os relatórios. Se você não mudar a hora, os relatórios selecionados serão executados à meia-noite. Se nem dia do mês ou dia da semana forem selecionados, o relatório será executado diariamente na hora especificada.

92

Guia de Administração do Novell AppArmor 2.0

Enviar por E-mail ao Destino Você tem a capacidade de enviar o relatório de incidente de segurança programado por e-mail a até três destinatários. Basta inserir os endereços de e-mail de quem solicita informações de incidentes de segurança. Tipo de Exportação Permite que você exporte um arquivo CSV (valores separados por vírgula) ou HTML. O arquivo CSV usa vírgulas para separar partes de dados nas entradas de registro, usando um formato de dados padrão para importar para aplicativos orientados a tabelas. Você pode digitar um nome de caminho completo para seu relatório exportado no campo fornecido. Localização para Armazenar Registro Permite que você mude a localização de armazenamento do relatório exportado. A localização padrão é /var/log/apparmor/ reports-exported. Ao mudar esta localização, selecione Aceitar. Selecione Pesquisar para pesquisar o sistema de arquivos. 4 Clique em Próximo para ir até a página seguinte de Editar SIR Programado. A segunda página de Editar Relatórios Programados é aberta.

5 Preencha os campos com as seguintes informações sobre filtro, conforme a necessidade: Nome do Programa Você pode especificar um padrão ou nome de programa que corresponda ao nome do arquivo binário executável do programa de interesse. O relatório

Gerenciando aplicativos em perfil

93

exibe eventos de segurança que ocorreram apenas para o programa especificado. Nome do Perfil Você pode especificar o nome do perfil para o qual o relatório deve exibir eventos de segurança. Use isso para ver o que está sendo delimitado por um perfil específico. Número do PID O número de ID do processo identifica exclusivamente um processo ou programa em execução específico (esse número é válido somente durante o tempo de vida desse processo). Detalhe Uma fonte à qual o perfil negou acesso. Isso inclui recursos e arquivos. Use esse campo para criar um relatório dos recursos aos quais os perfis impedem acesso. Gravidade Selecione o nível de gravidade mais baixo para os eventos de segurança que deseja incluir no relatório. O nível de gravidade selecionado e acima serão incluídos nos relatórios. Tipo de Acesso O tipo de acesso descreve o que está realmente acontecendo com o evento de segurança. As opções são PERMITTING, REJECTING ou AUDITING. Modo O modo é a permissão concedida pelo perfil ao programa ou processo ao qual ele é aplicado. As opções são r (ler) w (gravar) l (vincular) x (executar). 6 Selecione Salvar para gravar as mudanças a este relatório. O Novell AppArmor retorna para a janela principal Relatórios Programados, onde o relatório programado aparece na lista de relatórios.

4.3.5 Apagando relatórios Apagar um Relatório permite que você remova permanentemente um relatório da lista de relatórios programados do Novell AppArmor. Para apagar um relatório, siga estas instruções: 94

Guia de Administração do Novell AppArmor 2.0

1 Para remover um relatório da lista de relatórios, destaque o relatório e clique em Apagar. 2 No pop-up de confirmação, selecione Cancelar se não quiser apagar o relatório selecionado. Se tem certeza de que deseja remover o relatório permanentemente da lista de relatórios, selecione Apagar.

4.4 Reagindo a eventos de segurança Há poucos problemas de manutenção comuns que você deve inspecionar e com os quais lidar de acordo com as regras estabelecidas. Alguns dos problemas de manutenção comuns que você pode encontrar são: • Seção 4.4.1, “Recebendo uma rejeição de evento de segurança” (p 95). • Seção 4.5.2, “Mudando perfis de segurança” (p 97).

4.4.1 Recebendo uma rejeição de evento de segurança Quando você receber uma rejeição, examine a violação de acesso e determine se aquele evento indicou uma ameaça ou foi parte de um comportamento normal do aplicativo. É necessário conhecimento específico sobre o aplicativo para julgar. Se a rejeição representa um comportamento normal de aplicativo, executar logprof na linha de comando de Assistente para Atualizar Perfil do Novell AppArmor permite que você repita todas as mensagens rejeitadas. Ao selecionar a que corresponde com a rejeição específica, é possível atualizar automaticamente o seu perfil. Se a rejeição não for parte do comportamento normal do aplicativo, este acesso deve ser considerado como uma possível tentativa de invasão (que foi impedida) e esta notificação deve ser transmitida à pessoa responsável pela segurança na sua organização.

4.4.2 Mudando a segurança do aplicativo Os usuários podem sempre editar manualmente o perfil, usando vim na linha de comando ou Editar Perfil no YaST.

Gerenciando aplicativos em perfil

95

4.5 Mantendo perfis de segurança Em um ambiente de produção, você deve planejar ou manter perfis para todos os aplicativos distribuídos. As políticas de segurança são parte integral da sua distribuição. Você deve planejar ou providenciar para fazer backup e restaurar os arquivos de política de segurança, planejar mudanças de software e permitir qualquer modificação necessária das políticas de segurança ditado pelo ambiente. Estes itens são abordados nas seguintes seções: • Seção 4.5.1, “Fazendo backup dos perfis de segurança” (p 96). • Seção 4.5.2, “Mudando perfis de segurança” (p 97). • Seção 4.5.3, “Instalando novos programas de software no ambiente” (p 97).

4.5.1 Fazendo backup dos perfis de segurança Como leva tempo para fazer os perfis, é sensato fazer backup. Fazer backup dos perfis pode evitar que você tenha que refazer o perfil de todos os seus programas após uma falha no disco. Da mesma maneira, se os perfis mudam, você pode restaurar facilmente as configurações anteriores usando os arquivos de backup. Faça backup dos perfis copiando os arquivos de perfil em um diretório especificado. 1 Primeiro, arquive os arquivos em um único arquivo. Para isso, abra uma janela de terminal e digite o seguinte como Root: tar zclpf profiles.tgz /etc/apparmor.d

O método mais simples de garantir que seus arquivos de política de segurança têm backup regularmente é incluir o diretório /etc/apparmor.d na lista de diretórios arquivados pelo seu sistema de backup. 2 Também é possível usar scp ou um gerenciador de arquivos do tipo Konqueror ou Nautilus para armazenar os arquivos em algum tipo de mídia de armazenamento, na rede ou em outro computador.

96

Guia de Administração do Novell AppArmor 2.0

4.5.2 Mudando perfis de segurança A manutenção dos perfis de segurança inclui mudá-los se decidir que o sistema requer mais ou menos segurança para seus aplicativos. Para mudar seus perfis no Novell AppArmor, consulte a Seção 3.3.3, “Editando um perfil” (p 30).

4.5.3 Instalando novos programas de software no ambiente Quando você adiciona uma nova versão de aplicativo ou patch ao seu sistema, atualize sempre o perfil para atender às suas necessidades. Há várias opções que dependem da estratégia de distribuição de software da sua empresa. Você pode distribuir os seus patches e atualizar em um ambiente de teste ou produção. Veja como fazer isso com cada método. Se pretende distribuir um patch ou atualização em um ambiente de teste, o melhor método para atualizar os seus perfis é um dos seguintes: • Selecione Assistente para Adicionar Perfil no YaST para executar o assistente de perfil. Isso atualiza a sua configuração de perfil de aplicativo com a produção atual usando esforços mínimos. Para obter instruções passo a passo, consulte a Seção 3.3.1, “Adicionando um perfil usando o assistente” (p 18). • Conectado como Root, digite genprof em um terminal para executar genprof. Para obter informações detalhadas, consulte “genprof” (p 51). Se pretende distribuir um patch ou atualização em um ambiente de teste, o melhor método de atualizar os seus perfis é um dos seguintes: • Monitore o sistema com freqüência para determinar se quaisquer novas rejeições devem ser adicionadas ao perfil e atualize conforme a necessidade usando logprof. Para obter informações detalhadas, consulte “logprof” (p 57). • Execute as ferramentas de perfil para aprender o novo comportamento (risco de segurança alto porque todos os acessos são aceitos e efetuados, não rejeitados). Para obter instruções passo a passo, consulte a Seção 3.3.5, “Atualizando perfis a partir de entradas do Syslog” (p 32).

Gerenciando aplicativos em perfil

97

Criando perfil dos aplicativos web com o ChangeHat Apache

5

Um perfil do Novell® AppArmor representa política de segurança para uma instância de programa ou processo individual. Aplica-se a um programa executável, mas se uma parte do programa precisar de permissões de acesso diferentes de outras partes, o programa poderá “mudar hats” para usar um contexto de segurança diferente, distinto do acesso do programa principal. É conhecido como hat ou subperfil. O ChangeHat permite que programas mudem para ou de um hat dentro de um perfil do Novell AppArmor. Ele permite que você defina segurança em um nível mais refinado que o processo. Este recurso exige que cada aplicativo “reconheça changehats”, ou seja, ele é modificado para fazer uma solicitação ao módulo do Novell AppArmor para alternar domínios de segurança em horas arbitrárias durante a execução do aplicativo. Um perfil pode ter um número arbitrário de subperfis, mas há apenas dois níveis: um subperfil não pode ter outros sub-subperfis. Um subperfil é escrito como um perfil separado e nomeado como o perfil que contém, seguido do nome do subperfil, separado por um ^. Os subperfis devem ser armazenados no mesmo arquivo do perfil do pai. NOTA Para obter mais informações, consulte a página de manual change_hat.

Criando perfil dos aplicativos web com o ChangeHat Apache

99

5.1 Apache ChangeHat O Novell AppArmor fornece um módulo mod-apparmor para o programa Apache. O módulo mod-apparmor funciona no seu SUSE Linux para fazer com que o servidor web do Apache “reconheça ChangeHats”. Ele é instalado se o Apache estiver no seu sistema. Quando o Apache reconhece ChangeHats, ele verifica os seguintes perfis de segurança personalizados do Novell AppArmor na ordem dada para toda solicitação de URI recebida. • Hat específico de URI (por exemplo, ^phpsysinfo-dev/templates/ classic/images/bar_left.gif) • DEFAULT_URI • HANDLING_UNTRUSTED_INPUT Se você tiver o Apache 2 exigido no sistema, o módulo mod-apparmor será instalado automaticamente com o Novell AppArmor assim como adicionado à configuração do Apache. Não há suporte para o Apache 1.3. NOTA Se você instalar o mod-apparmor sem o Novell AppArmor, será necessário verificar se o módulo para carregar o Apache tem um comando no arquivo de configuração que carrega o módulo mod-apparmor adicionando a seguinte linha ao arquivo de configuração do Apache: LoadModule change_hat_module modules/mod_change_hat.so

5.1.1 Ferramentas para gerenciar aplicativos que reconheçam ChangeHats Como na maioria das ferramentas do Novell AppArmor, você pode usar dois métodos para gerenciar ChangeHat, YaST ou a interface da linha de comando. O gerenciamento de aplicativos que reconheçam ChangeHats é muito mais flexível na linha de comando,

100

Guia de Administração do Novell AppArmor 2.0

mas o processo também é mais complicado. Ambos os métodos permitem que você gerencie os hats do aplicativo e os preencha com entradas de perfil. Nas etapas a seguir, uma demonstração o orientará a adicionar hats a um perfil Apache usando o YaST. No Assistente para Adicionar Perfil, os utilitários de perfil do Novell AppArmor solicitarão que você crie novos hats para solicitações de URI distintas. Escolher criar um novo hat permite que você crie perfis individuais para cada URI. Isto permite criar regras muito rígidas para cada solicitação. Se o URI em processamento não representar um processamento importante ou não representar um risco de segurança importante, você poderá selecionar com segurança Usar Hat Padrão para processar este URI no hat padrão, que é o perfil de segurança padrão. Na demonstração, criamos um novo hat para o URI phpsysinfo-dev e seus acessos subseqüentes. Usando os utilitários de perfil, delegamos o que é adicionado a este novo hat. O hat resultante se torna um container de segurança rígida que abrange todo o processamento no servidor que ocorre quando o URI phpsysinfo-dev é passado para o servidor web do Apache. Nesta demonstração, geramos um perfil para o aplicativo phpsysinfo (para obter mais informações, consulte http://phpsysinfo.sourceforge.net). Assume-se que o pacote phpsysinfo-dev esteja instalado em /srv/www/htdocs/ phpsysinfo-dev/ em uma instalação limpa (nova) do Novell AppArmor. 1 Com phpsysinfo-dev instalado, você está pronto para adicionar hats ao perfil do Apache. Na interface de usuário do Novell AppArmor, selecione Assistente para Adicionar Perfil.

Criando perfil dos aplicativos web com o ChangeHat Apache

101

2 Em Perfil para Adicionar, digite httpd2-prefork. 3 Clique em Criar Perfil. A janela Assistente de Perfil do AppArmor será exibida.

4 Reinicie o Apache digitando rcapache2 restart em uma janela de terminal.

102

Guia de Administração do Novell AppArmor 2.0

NOTA Reinicie qualquer programa para o qual esteja criando perfis neste ponto. 5 Abra http://localhost/phpsysinfo-dev/ em uma janela de browser da web. A janela de browser deve exibir o uso da rede e informações do sistema. NOTA Para garantir que a solicitação será processada pelo servidor e você não analisará os dados em cache no seu browser, é necessário atualizar a página. Para isso, clique no botão Atualizar do browser para ter certeza que o Apache processará a solicitação para o URI phpsysinfo-dev. 6 Clique em Explorar Entradas no Registro do Sistema para Adicionar a Perfis. O Novell AppArmor inicia a ferramenta logprof, que explora todas as informações aprendidas na etapa anterior. Começa a solicitar as perguntas sobre perfil. 7 Na nossa demonstração, primeiro o logprof exibe Adicionar Hat Solicitado ou Usar Hat Padrão porque observou que um URI foi acessado phpsysinfo-dev. Selecione Adicionar Hat Selecionado.

Criando perfil dos aplicativos web com o ChangeHat Apache

103

8 Clique em Permitir. Escolher Adicionar Hat Solicitado na etapa anterior cria um novo hat no perfil e especifica que as perguntas subseqüentes sobre as ações do script são adicionadas ao hat recentemente criado em vez do hat padrão deste aplicativo. Na tela seguinte, o Novell AppArmor exibe um programa externo que foi executado pelo script. Você pode especificar que o programa deve ser executado delimitado pelo phpsysinfo-dev hat (escolha Herdar), delimitado por um perfil separado (escolha Perfil), ou que deve ser executado não delimitado ou sem qualquer perfil de segurança (escolha Não delimitado). Para o caso da opção Perfil, um novo perfil é criado para o programa se ainda não existir nenhum. NOTA Selecionar Não delimitado pode criar uma brecha de segurança importante e deve ser feito com cautela.

a Selecione Herdar para o caminho /bin/bash. Isto adiciona /bin/bash/ (acessado pelo Apache) ao perfil de hat phpsysinfo-dev com as permissões necessárias. b Clique em Permitir.

104

Guia de Administração do Novell AppArmor 2.0

9 As questões restantes solicitam que você gere novos hats e adicione entradas para o perfil e seus hats. O processo de adicionar entradas aos perfis é abordado em detalhes na Seção 3.3.1, “Adicionando um perfil usando o assistente” (p 18). Quando todas as questões de perfil são respondidas, clique em Concluir para gravar as suas mudanças e sair do assistente. A seguir um exemplo da aparência do phpsyinfo-dev hat. Exemplo 5.1 Exemplo de phpsysinfo-dev Hat ^phpsysinfo { #include <program-chunks/base-files> /bin/df /bin/bash /dev/tty /etc/SuSE-release /etc/fstab /etc/hosts /etc/mtab /proc/** /sbin/lspci /srv/www/htdocs/sysinfo/** /sys/bus/pci/devices /sys/devices/** /usr/bin/who /usr/share/pci.ids /var/log/apache2/{access,error}_log /var/run/utmp }

ix, ix, rw, r, r, r, r, r, ix, r, r, r, ix, r, w, r,

NOTA O perfil, ^phpsysinfo-dev, só é válido no contexto de um processo sendo executado sob o perfil do pai httpd2-prefork.

5.1.2 Adicionando hats e entradas a hats Quando usar a caixa de diálogo Editar Perfil (para obter instruções, consulte a Seção 3.3.3, “Editando um perfil” (p 30)) ou quando adicionar um novo perfil usando Adicionar Manualmente Perfil do Novell AppArmor (para obter instruções, consulte a Seção 3.3.2, “Adicionar Perfil Manualmente” (p 24)), você receberá a opção de adicionar hats (subperfis) aos seus perfis do Novell AppArmor.

Criando perfil dos aplicativos web com o ChangeHat Apache

105

É possível adicionar um subperfil do ChangeHat da janela Caixa de Diálogo Perfil do AppArmor.

1 Na janela Caixa de Diálogo Perfil do AppArmor, clique em Adicionar Entrada e selecione Hat. A caixa de diálogo Digitar Nome do Hat é aberta:

2 Digite o nome do hat a adicionar ao perfil do Novell AppArmor. O nome é o URI que, quando acessado, recebe as permissões configuradas no hat. 3 Clique em Criar Hat. Você retornará à tela Caixa de Diálogo Perfil do AppArmor. 4 Após adicionar o novo hat, clique em Concluído.

106

Guia de Administração do Novell AppArmor 2.0

NOTA Para obter um exemplo de um perfil do Novell AppArmor, consulte o Exemplo 5.1, “Exemplo de phpsysinfo-dev Hat” (p 105).

5.2 Configuração do Apache para mod-apparmor O Apache é configurado pela colocação de diretivas nos arquivos de configuração de texto simples. O principal arquivo de configuração normalmente é httpd.conf. Quando você compila o Apache, pode indicar a localização deste arquivo. As diretivas podem ser colocadas em quaisquer destes arquivos de configuração para alterar o comportamento do Apache. Quando você efetua mudanças nos arquivos de configuração principais, precisa iniciar ou reiniciar o Apache para que as mudanças sejam reconhecidas.

5.2.1 Diretivas de hosts virtuais As diretivas de hosts virtuais controlam se as solicitações que contêm informações de nome de caminho à direita, após um nome de arquivo real (ou arquivo não existente em um diretório existente), são aceitas ou rejeitadas. Para obter a documentação do Apache sobre diretivas de hosts virtuais, consulte http://httpd.apache.org/ docs-2.0/mod/core.html#virtualhost A tecla de configuração específica de change_hat é ImmDefaultHatName e é usada da mesma maneira que ImmHatName, por exemplo, ImmDefaultHatName My_Funky_Default_Hat. A opção de configuração é na realidade baseada em uma diretiva de servidor, que lhe permite usar a palavra-chave para outras opções, desta maneira configurando-a para o servidor padrão. Hosts virtuais são considerados internamente no Apache como “servidores” separados, de maneira que você pode configurar um nome de hat padrão para o servidor padrão, assim como um para cada host virtual, se desejar. Quando chega uma solicitação, as seguintes etapas refletem a seqüência em que mod-apparmor tenta aplicar hats.

Criando perfil dos aplicativos web com o ChangeHat Apache

107

1.

Um hat de localização ou diretório conforme especificado pela palavra-chave ImmHatName.

2.

Um hat nomeado por todo o caminho do URI.

3.

Um hat de servidor padrão conforme especificado pela palavra-chave ImmDefaultHatName.

4.

DEFAULT_URI (e se não existir nenhum, volta para o hat “pai” do Apache).

5.2.2 Diretivas de localização e diretório Diretivas de localização e diretório especificam nomes de hat no arquivo de configuração de programa, de maneira que o programa chama o hat relativo à sua segurança. Para o Apache, é possível encontrar documentações sobre diretivas de localização e diretório em http://httpd.apache.org/docs-2.0/sections.html. O exemplo de diretiva de localização abaixo especifica que, para um determinado local, mod-apparmor deve usar um hat específico: ImmHatName MY_HAT_NAME

Tenta usar MY_HAT_NAME para qualquer URI iniciando com /foo/ (/foo/, /foo/ bar, /foo/cgi/path/blah_blah/blah, etc.). A diretiva de diretório funciona da mesma maneira que a diretiva de localização, salvo que se refere a um nome de caminho no sistema de arquivos, no exemplo a seguir: # Note lack of trailing slash ImmHatName immunix.com

Exemplo: O programa phpsysinfo é usado para ilustrar uma diretiva de localização no exemplo a seguir. O tarball pode ser descarregado de http://phpsysinfo .sourceforge.com. 1 Após descarregar o tarball, instale-o em /srv/www/htdocs/sysinfo/. 2 Crie /etc/apache2/conf.d/sysinfo.conf e adicione o texto a seguir a ele:

108

Guia de Administração do Novell AppArmor 2.0

ImmHatName sysinfo

O hat a seguir deve, então, funcionar para phpsyinfo: ^sysinfo { #include <program-chunks/base-files> /bin/df /bin/bash /dev/tty /etc/SuSE-release /etc/fstab /etc/hosts /etc/mtab /proc/** /sbin/lspci /srv/www/htdocs/sysinfo/** /sys/bus/pci/devices /sys/devices/** /usr/bin/who /usr/share/pci.ids /var/log/apache2/{access,error}_log /var/run/utmp }

ix, ix, rw, r, r, r, r, r, ix, r, r, r, ix, r, w, r,

3 Recarregue perfis do Novell AppArmor digitando rcapparmor restart na janela de terminal como Root. 4 Conectado como Root, reinicie o Apache digitando rcapache2 restart na janela de terminal. 5 Digite http://hostname/sysinfo/ em um browser para receber as informações do sistema enviadas por phpsysinfo. 6 Para rastrear os erros de configuração, vá para /var/log/syslog ou execute dmesg e procure quaisquer rejeições na saída.

Criando perfil dos aplicativos web com o ChangeHat Apache

109

6

Suporte Este capítulo resume as tarefas relativas à manutenção. Aprenda como atualizar o Novell® AppArmor e obtenha a lista das páginas do manual disponíveis que oferecem ajuda básica sobre o uso das ferramentas de linha de comando fornecidas pelo Novell AppArmor. Use a seção de solução de problemas para aprender sobre os problemas comuns encontrados no Novell AppArmor e suas soluções. Finalmente, tenha uma visão geral das opções de suporte fornecidas com a cópia do SUSE Linux.

6.1 Atualizando o Novell AppArmor online Atualizações para pacotes do Novell AppArmor serão fornecidas da mesma forma que qualquer outra atualização para produtos baseados no SUSE Linux. Recupere-os e aplique-os exatamente como qualquer outro pacote que seja fornecido como parte do produto SUSE Linux.

6.2 Usando as páginas de manual Há páginas de manual disponíveis para seu uso. Em um terminal, digite man apparmor para abrir a página de manual do apparmor. As páginas do manual são distribuídas em seções numeradas de 1 a 8. Cada seção é específica para uma categoria de documentação:

Suporte

111

Tabela 6.1

Páginas de manual: Seções e categorias

Seção

Categoria

1

Comandos do usuário

2

Chamadas do sistema

3

Funções de biblioteca

4

Informações de driver do dispositivo

5

Formatos de arquivo de configuração

6

Jogos

7

Conceitos de alto nível

8

Comandos do administrador

Os números da seção são usados para diferenciar as páginas de manual entre si. Por exemplo, exit(2) descreve uma chamada do sistema de saída, enquanto exit(3) descreve a função de biblioteca exit C. As páginas de manual do Novell AppArmor são: • unconfined(8) • autodep(1) • complain(1) • enforce(1) • genprof(1) • logprof(1) • change_hat(2) • logprof.conf(5)

112

Guia de Administração do Novell AppArmor 2.0

• apparmor.conf(5) • apparmor.d(5) • apparmor.vim(5) • apparmor(7) • apparmor_parser(8)

6.3 Mais informações Mais informações sobre o produto AppArmor podem ser encontradas na página do produto Novell AppArmor: http://www.novell.com/products/apparmor/ . A documentação do produto para o Novell AppArmor, incluindo este documento, pode ser encontrada em http://www.novell.com/documentation/apparmor/ ou no sistema instalado em /usr/share/doc/packages/apparmor-docs/. Há listas de discussão específicas para o AppArmor que os usuários podem usar para se comunicar com desenvolvedores. [email protected] Esta é uma lista de discussão para usuários finais do AppArmor. Um bom local para perguntas sobre como usar o AppArmor para proteger seus aplicativos. [email protected] Esta é uma lista de discussão para desenvolvedores do AppArmor e membros da comunidade. Ela é destinada questões sobre o desenvolvimento de recursos principais do AppArmor — o módulo de kernel, as ferramentas de criação de perfis. Se você estiver interessado em revisar o código para o AppArmor e contribuir com revisões ou patches, essa é a lista ideal. [email protected] Esta é uma lista de baixo tráfego que anuncia a disponibilidade de novos recursos ou versões.

Suporte

113

6.4 Solução de problemas A seção a seguir lista os problemas e as mensagens de erro mais comuns que podem ocorrer no uso do Novell AppArmor. O SUSE Linux está instalado, mas o AppArmor não aparece no menu do YaST O AppArmor é instalado como padrão se a área de trabalho do KDE ou GNOME for escolhida no momento da instalação. Se você escolher Sistema Gráfico Mínimo ou Modo de Texto, o AppArmor não será incluído como padrão. Nestes casos, use o YaST para instalar os pacotes que faltam. Para obter mais informações, consulte o Guia de Instalação e Inicialização Rápida do Novell AppArmor 2.0. Comportamento anormal de aplicativo Se você observar um comportamento anormal do aplicativo ou qualquer outro tipo de problema, primeiro verifique as mensagens rejeitadas nos arquivos de registro para verificar se o AppArmor está limitando demais o seu aplicativo. Para verificar mensagens rejeitadas, inicie o YaST → Novell AppArmor e vá para Relatórios do AppArmor. Selecione Visualizar Arquivo e App Aud para obter o relatório de auditoria de aplicativos. Você pode filtrar datas e horas para restringir os períodos específicos em que teve início o comportamento do aplicativo. Problemas com o Apache O Apache não está iniciando adequadamente, ou não está atendendo as páginas da Web e você acabou de instalar um novo módulo ou mudou a configuração. Quando instalar módulos adicionais do Apache (como mod-apparmor) ou mudar a configuração no Apache, execute a criação de perfis no Apache novamente para capturar quaisquer regras adicionais que devam ser incluídas ao perfil. Os relatórios não estão sendo enviados via e-mail Quando o recurso de relatório gera um arquivo HTML ou CSV que exceda o tamanho padrão, o arquivo não é enviado. Os servidores de correio têm um limite fixo padrão de tamanhos de e-mail. Esta limitação pode impedir a capacidade do AppArmor de enviar e-mails que sejam gerados para fins de relatório. Se o seu correio não estiver chegando, pode ser esta a razão. Os usuários devem estar cientes dos limites de tamanho do correio e devem verificar seus arquivos se os e-mails não forem recebidos.

114

Guia de Administração do Novell AppArmor 2.0

Apagar certos perfis da lista de perfis usados O AppArmor sempre carrega e aplica todos os perfis disponíveis em seu diretório de perfis (/etc/apparmor.d/). Se decidir não aplicar um perfil a um determinado aplicativo, apague o perfil adequado ou mova-o para outro local onde o AppArmor não o verificaria. A operação do AppArmor pode gerar vários erros. A seguir, uma lista dos erros possíveis e como resolvê-los. Can’t find apparmor_parser Se você executar logprof como usuário não-raiz, como tux, é provável que veja este erro: tux@localhost:~> /usr/sbin/logprof Can’t find apparmor_parser.

NOTA Você deve executar logprof apenas como root. /usr/sbin/genprof deve ser executado como root Executar genprof como um usuário que não seja root produz um resultado semelhante: tux@localhost:~> /usr/sbin/genprof /usr/sbin/genprof must be run as root.

Unloading AppArmor profiles..failed Você deve executar scripts de início e interrupção de apparmor como root. Executálos como um usuário que não seja root resulta no seguinte: tux@localhost:~> /etc/init.d/apparmor stop /sbin/apparmor_parser: Sorry. You need root priveleges to run this program. Unloading AppArmor profiles..failed

AppArmor parser error O exemplo abaixo mostra a sintaxe de todo o erro do analisador. Editar manualmente os perfis do Novell AppArmor pode gerar erros de sintaxe. Se você tentar iniciar ou reiniciar o AppArmor com erros de sintaxe nos perfis, verá resultados de erro como este: localhost:~ # /etc/init.d/apparmor start Loading AppArmor profiles AppArmor parser error, line 2: Found unexpected character: ’h’

Suporte

115

Profile /etc/apparmor.d/usr.sbin.squid failed to load failed

6.5 Relatando erros do AppArmor Os desenvolvedores do AppArmor e do SUSE Linux estão ansiosos para distribuir produtos da maior qualidade. O seu feedback e relatórios de erro nos ajudam a garantir a qualidade do nosso trabalho. Assim, sempre que encontrar um erro em AppArmor, arquive um relatório de erros para este produto: 1 Use o browser da Web para ir para https://bugzilla.novell.com/ index.cgi. 2 Digite os dados da sua conta da Novell e clique em Login ou Crie uma nova conta Novell da seguinte maneira: a Clique em Create New Account (Criar Nova Conta) na página Login to Continue (Login para Continuar). b Forneça um nome de usuário e senha e dados de endereço adicional e clique em Create Login (Criar Login) para fazer imediatamente a criação do login. ou Forneça dados de outras contas Novell que você mantém para sincronizar todas elas em uma conta. 3 Para verificar se um problema semelhante ao seu já foi relatado, clique em Search Reports (Pesquisar Relatórios) Faça uma busca rápida contra um determinado produto e palavra-chave ou use Advanced Search (Pesquisa Avançada). 4 Se o seu problema já tiver sido relatado, verifique o relatório de erro e adicione informações extras a ele, se necessário.

116

Guia de Administração do Novell AppArmor 2.0

5 Se o seu problema ainda não tiver sido relatado, selecione New (Novo) na parte superior da barra de navegação e passe para a página Enter Bug (Inserir Erro) 6 Selecione o produto para o qual deseja arquivar o erro. No seu caso, seria a sua versão do SUSE Linux. Clique em Submit (Submeter). 7 Selecione a versão do produto, componente (AppArmor, neste caso), plataforma de hardware e gravidade. 8 Digite um título curto descrevendo o seu problema e adicione uma descrição mais elaborada incluindo os arquivos de registro abaixo. Você pode criar anexos ao seu relatório de erro com capturas de tela, arquivos de registro ou casos de teste. 9 Clique em Submit (Submeter) após ter digitado todos os detalhes para enviar o relatório aos desenvolvedores.

Suporte

117

Glossário Apache O Apache é um servidor Web baseado em UNIX disponível gratuitamente. Atualmente é o servidor Web mais usado na Internet. Mais informações sobre o Apache são encontradas no site da Web do Apache em http://www.apache .org. assinatura de ataque Padrão em um sistema ou atividade de rede que indica a possibilidade de vírus ou ataque de hackers. Sistemas de detecção de invasões podem usar assinaturas de ataque para distinguir entre atividades legítimas das potencialmente malintencionadas. Por não confiar nas assinaturas de ataque, o Novell AppArmor oferece defesa "proativa" em vez de "reativa" aos ataques. É melhor, porque não há janela de vulnerabilidade onde a assinatura de ataque possa ser definida para o Novell AppArmor como há nos produtos que usam assinaturas de ataque para proteger suas redes. classes de fundação de perfil Blocos de construção de perfil necessários para atividades comuns de aplicativos, como pesquisa de DNS e autenticação de usuário. controle de acesso obrigatório Um meio de restringir acesso a objetos baseado em atributos de segurança fixos atribuídos a usuários, arquivos e outros objetos. Os controles são obrigatórios no sentido de que não podem ser modificados pelos usuários ou seus programas. controle de acesso otimizado O Novell AppArmor fornece controle de acesso otimizado para serviços de rede, especificando que arquivos cada programa pode ler, gravar e executar. Dessa forma, cada programa cumpre sua função e nada mais. firewall de aplicativos O Novell AppArmor contém aplicativos e restringe as ações que são permitidas. Utiliza a delimitação de privilégios para impedir ataques de programas malintencionados no servidor protegido e até mesmo o uso de aplicativos confiáveis de maneiras não desejadas.

HIP Host Intrusion Prevention. Funciona com o kernel do sistema operacional para bloquear comportamentos anormais de aplicativos considerando que o comportamento anormal represente um ataque desconhecido. Bloqueia pacotes mal-intencionados no host no nível de rede antes que possam “agredir” o aplicativo a que se destinam. Interface gráfica do usuário (GUI) Interface gráfica do usuário. Refere-se a um front end de software destinado a fornecer uma interface atrativa e fácil de usar entre um usuário de computador e o aplicativo. Seus elementos incluem janelas, ícones, botões, cursores e barras de rolagem. RPM Gerenciador de pacotes RPM. Um sistema de pacotes abertos disponível para uso de todos. Funciona no Red Hat Linux, SUSE Linux e em outros sistemas Linux e UNIX. É capaz de instalar, desinstalar, verificar, consultar e atualizar pacotes de software de computador. Consulte http://www.rpm.org/ para obter mais informações. SSH Secure Shell. Este serviço permite que você acesse seu servidor de um computador remoto e emita comandos de texto através de uma conexão segura. URI Universal Resource Identifiers. Termo genérico para todos os tipos de nomes e endereços que se referem a objetos na Web. Um URL é um tipo de URI. URL Uniform Resource Locator. Endereço global de documentos e outros recursos na Web. A primeira parte do endereço indica que protocolo usar e a segunda parte especifica o endereço IP ou o nome de domínio onde o recurso está localizado. Por exemplo, em http://www.immuix.com/index.html, http é o protocolo a ser usado. vulnerabilidades Aspecto de um sistema ou rede que o deixa aberto a ataques. Características de sistemas de computador pelos quais um indivíduo não o mantém funcionando

120

Guia de Administração do Novell AppArmor 2.0

corretamente ou que permite a usuários não autorizados assumirem o controle do sistema. Pontos fracos de design, administrativo ou de implementação ou falhas no hardware, firmware ou software. Se explorada, uma vulnerabilidade pode provocar um impacto inaceitável sob a forma de acesso não autorizado a informações ou interrupção de processamentos críticos.

Glossário

121

Related Documents

Apparmor Admin Guide Pt Br
November 2019 2
Pt-br
November 2019 26
Admin Guide
November 2019 41
Admin-guide
June 2020 26