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 Seção 4.3.1.1, “Relatório de Auditoria de Aplicativos” (↑Guia de Administração do Novell AppArmor 2.0) 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.

[Note]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 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

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

2

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

3

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

[Note]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 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 apparmor-general@forge.novell.com 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” (↑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” (↑Guia de Administração do Novell AppArmor 2.0).

2.2.2.1. 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.

[Note]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” (↑Guia de Administração do Novell AppArmor 2.0).

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.

[Note]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 (↑Guia de Administração do Novell AppArmor 2.0).

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                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    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/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              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.