SELinux - Segurança em Servidores GNU/Linux

Neste artigo demonstrarei um pouco, do conceito e prática, da tão poderosa ferramenta SELinux. Utilizei o CentOS 6 como base para meus testes. Lembrando que é um artigo mínimo, em relação a todas as opções existentes no SELinux.

[ Hits: 108.108 ]

Por: Bruno Rocha da Silva em 13/08/2012 | Blog: http://about.me/brunorochadasilva


Auditoria e logs



Com relação à auditoria e depuração de Logs, o SELinux lida muito bem com isso, a começar pelo pacote Setroubleshoot, a junção de diversos aplicativos é uma "Mãe" para qualquer administrador SELinux. A ferramenta demonstra os alertas de AVC do SELinux, e ainda diz qual comando pode corrigir o mesmo.

Falando em AVC, sigla para Access Vector Cache (e não para Acidente Vascular Cerebral), que nada mais é do que alertas de acessos bloqueados sejam elas de aplicação ou usuários do sistema.

Primeiramente, vamos instalar o pacote "Setroubleshoot".

Obs.: Caso tenha interface gráfica no servidor, o mesmo irá instalar um pequeno utilitário, que alerta toda vez que um AVC acontecer.

# yum install setroubleshoot

Antes de qualquer coisa, vamos gerar o nosso próprio AVC.

- Pergunta: Mas como assim, o nosso próprio AVC?
- Resposta: Bom, esta é uma tarefa fácil, uma simples alteração de porta padrão de um determinado serviço, como o HTTP, por exemplo, deve gerar um Alerta de Access Denied.

Vamos aos testes:

Instale o serviço HTTP no Servidor:

# yum install –y httpd

Abra o arquivo de configuração:

# vim /etc/httpd/conf/httpd.conf Altere a seguinte linha do arquivo: Listen 80

Para:

Listen 8888


Logo, reinicie o serviço HTTP:

# service httpd restart

Pronto, nosso AVC foi gerado com êxito. =)

O primeiro comando para verificação de AVC's, é o ausearch:

# ausearch –m avc | grep httpd

Onde: -m = message

Saída do comando (resumida):

type=AVC msg=audit(1344678620.633:26191): avc: denied { name_bind } for pid=9429 comm="httpd" src=8888 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0
tclass=tcp_socket


Perceba que a saída do comando demonstra claramente, o motivo dele ter alarmado tal AVC.

- Pergunta: (Bruno, beleza!) Eu "já sei" o que aconteceu pela saída do log, mas agora eu quero que a porta 8888 seja padrão do serviço HTTP, irá continuar gerando AVC's?
- Resposta: Não, não, porém para que isso aconteça, é necessário informar ao SELinux, que a porta padrão do serviço HTTP mudou.

Existem duas maneiras de se fazer isso, uma é utilizar o comando semanage com a opção "port", a outra é o que iremos ver abaixo.

Primeiro, vamos utilizar o comando selatert para analisar os logs:

# sealert –a /var/log/audit/audit.log | grep httpd

Onde:
  • -a = Analyze File
  • /var/log/audit/audit.log = O arquivo que será analisado

Saída do comando (resumida):
SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket.
If you want to allow /usr/sbin/httpd to bind to network port 8888
    where PORT_TYPE is one of the following: ntop_port_t, http_cache_port_t, http_port_t, puppet_port_t, jboss_messaging_port_t, jboss_management_port_t.
If you believe that httpd should be allowed name_bind access on the tcp_socket by default.
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol


Analisando a saída, perceba que além de detalhar a possível causa do AVC, ele sugere (caso você realmente queira), indicar a alteração de porta padrão do serviço HTTPD para 8888 ao SELinux.

Vamos utilizar o comando que ele sugeriu:

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol

Onde:
  • grep httpd /var/log/audit/audit.log = Indica que iremos filtrar a palavra httpd, mediante o arquivo de logs.
  • audit2allow = Utilizado para Gerar políticas do SELinux para permitir regras, a partir de logs negados.
  • -M = Cria um arquivo de Módulo, com a saída do audit2allow
  • mypol = Nome do arquivo de Módulo, podendo ter qualquer nome.

Saída do comando:
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i mypol.pp


Perceba que a saída do comando deixa bem claro que, caso você queira tornar tal módulo ativo, é necessário que você o instale via semodule.

Porém, caso você liste o diretório corrente, irá perceber que existem 2 arquivos mypol:

# ls

Saída do comando:
mypol.te mypol.pp


O arquivo "mypol.te" indica um tipo de arquivo de execução (Type Enforcement), ou seja, ele tem toda instrução do que será executado/alterado no sistema através do arquivo "mypol.pp".

Já o arquivo "mypol.pp", nada mais é o que o pacote de politicas (Package Policy), ou o módulo propriamente dito.

Agora que sabemos qual arquivo instalar, vamos utilizar o semodule para isso:

# semodule -i mypol.pp

Depois de alguns segundos, o arquivo foi instalado com êxito. Será?

Liste os módulos, e veja você mesmo:

# semodule –l | grep ^m

Saída do comando:

mailman	1.7.2
matahari	1.0.0
mediawiki	1.0.0
memcached	1.1.2
milter	1.1.1
modemmanager	1.0.1
mono	1.6.1
mozilla	2.1.1
mpd	1.0.0
mplayer	2.1.0
mrtg	1.8.0
munin	1.7.0
mypol	1.0
mysql	1.11.3


Olha só, o nosso modulo "mypol" instalado e habilitado no sistema. Ou seja, funcionou! =D

Vale reforçar que, a criação de módulos com o "audit2allow", só é aconselhada caso você saiba realmente o que esteja fazendo, utilizar o "audit2allow" apenas para resolver os alertas de AVC do SELinux, estará causando um grande furo de segurança ao sistema.


Bom galera, é isso.

O artigo foi básico, em relação à complexidade do SELinux, porém, espero que tenha sido útil para aqueles que estão começando com esta tão poderosa ferramenta.

Meu muito obrigado, e até a próxima! =D

Página anterior    

Páginas do artigo
   1. O SELinux
   2. Contextos de segurança
   3. O comando Semanage
   4. Os comandos Chcon e Restorecon
   5. Variáveis booleanas
   6. O comando Semodule
   7. Auditoria e logs
Outros artigos deste autor

Atirando o pau no gato com Metasploit

Leitura recomendada

Configuração de um servidor com clamav

Ferramentas de administração remota

Como saber se houve uma invasão

Vazamento de informações vitais via "HP Operations Manager Perfd"

HoneyPots em Linux

  
Comentários
[1] Comentário enviado por removido em 13/08/2012 - 11:40h

Ótimo artigo! Valeu pela contribuição!

[2] Comentário enviado por removido em 13/08/2012 - 23:50h

É mínimo, mas explica bem. Está bem organizada a explicação do funcionamento.
Inclusive fica fácil saber pelo que procurar caso seja necessitado aprofundar-se.
Existe livro de iptables em português, mas de selinux desconheço. Aqui está uma referência valiosa.

Parabéns.

[3] Comentário enviado por cromado em 14/08/2012 - 15:58h

Good.
Ótima referência.

[4] Comentário enviado por danniel-lara em 16/08/2012 - 16:07h

Ótimo artigo , parabéns

[5] Comentário enviado por mantovany em 29/09/2013 - 04:12h

tem como fazer usando debian?

[6] Comentário enviado por premoli em 01/11/2013 - 09:31h

Meus filhin tão sem SELinux:

root@server_seguro:~# sestatus
-bash: sestatus: comando não encontrado
root@server_seguro:~# find / -iname selinux
/selinux
^C
root@server_seguro:~# semodule -l
-bash: semodule: comando não encontrado
root@server_seguro:~# cd /selinux
root@server_seguro:/selinux# ls
root@server_seguro:/selinux# ls -a
. ..

[7] Comentário enviado por smallboy em 23/11/2013 - 15:22h

Eu tenho esse pacote aqui no meu Fedora 19 para ser instalado, no caso SElinux. Não instalei posso instalar ele sem medo algum, o que ele vai me trazer de beneficio e de maleficio no uso do dia a dia. SElinux está disponível no EasyLife para ser instalado.


[8] Comentário enviado por rogeriosilverio em 23/01/2014 - 11:44h

Ótimo Artigo! agora compreendi o SELINUX...Parabéns!

[9] Comentário enviado por fndiaz em 24/11/2014 - 09:26h

Muito bom o artigo!

[10] Comentário enviado por eniorm em 18/02/2017 - 11:55h

Muito bom. Venho do FreeBSD que também possui sua própria implementação MAC, e falta material em português e até mesmo inglês. Gostei muito desse artigo. Espero que os comentários de agradecimento sirvam de incentivo para que o autor possa continuar escrevendo mais sobre SELinux. Att

[11] Comentário enviado por removido em 02/03/2017 - 13:44h

Quando alguém fala em selinux eu lembro de NSA.

http://www.ibm.com/developerworks/br/library/l-secure-linux-ru/
https://caminhandolivre.wordpress.com/2013/01/04/introducao-ao-selinux/


Sera que o selinux vem com códigos maliciosos tipo:


Backdoor
https://pt.wikipedia.org/wiki/Backdoor

keyloggers
https://pt.wikipedia.org/wiki/Keylogger

botnet
https://pt.wikipedia.org/wiki/Botnet

Exploit (Elevação de privilégio)
https://pt.wikipedia.org/wiki/Exploit_%28seguran%C3%A7a_de_computadores%29


Sempre identifique as vulnerabilidades do seu sistema e os riscos.

http://blog.infolink.com.br/analise-de-vulnerabilidades-em-ti/


-----------------------------------------------------
Conhecimento é poder - Thomas Hobbes


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts