Linux Hardening

sexta-feira, 11 de dezembro de 2009

Linux Hardening

Autor: Bernardo Maia Rodrigues

CSIRT PoP-MG (csirt@csirt.pop-mg.rnp.br)
Última modificação: 27/02/2008

Introdução

Recomenda-se instalar versões atuais dos sistemas operacionais, que contêm correções e patches de segurança. Instalar versões antigas e fazer o upgrade em seguida pode ser problemático, deixando o sistema temporariamente vulnerável (caso existam pacotes com falhas). Serviços críticos como o apache, imapd, bind, devem estar sempre nas versões mais atuais. Softwares desnecessários devem ser desinstalados e pacotes inseguros devem ser substituídos por alternativas mais confiáveis.

Atualizações e Patches

Todo sistema operacional deve ser atualizado com frequência, assim como seus componentes e pacotes instalados. De tempos em tempos, grupos de segurança lançam Security Advisories, alertando para possíveis falhas em softwares específicos. Algumas distruibuições possuem um sistema automático para verificar se os pacotes estão desatualizados e passíveis de falhas, corrigindo e/ou emitindo um alerta ao administrador local.
O CSIRT PoP-MG possui uma documentação detalhando os processos de atualização para a maioria dos sistemas operacionais baseados em Linux:
http://www.csirt.pop-mg.rnp.br/docs/so/atualizacao.html

SSH

Modifique as configurações do SSH para permitir acesso usando o protocolo SSHv2 somente.
Editar o arquivo /etc/ssh/sshd_config e trocar a linha:
#PROTOCOL    1,2
para:
PROTOCOL     2
Vamos criar o grupo “sshlogin” para usuários que podem acessar o servidor remoto, e desabilitar o login do root no SSH:
vi /etc/ssh/sshd_config
Adicione as seguintes linhas:
#AllowUsers root
or
PermitRootLogin no
AllowGroups sshlogin
É possível restringir os hosts/IPs que acessam o servidor remotamente. Edite o arquivo /etc/hosts.allow (Substitua x.x.x.x pelos IPs dos usuários)
sshd : 127.0.0.1 : allow
sshd : 192.168.  : allow
sshd : 10.         : allow
sshd : x.x.x.x : allow
sshd : x.x.x.x : allow
sshd : ALL         :deny
A última linha vai restringir o acesso ao SSH, liberando apenas os IPS listados acima.

Serviços desnecessários e inseguros

Os seguintes serviços devem ser desinstalados


  • rshd
  • rlogind
  • rwhod
  • telnetd - substitua pelo ssh
  • ftpd - substitua pelo scp
  • sendmail
  • identd
Estes serviços podem ser desinstalados usando o gerenciador de pacotes do sistema operacional, ou através do comando chkconfig, desativando todos os níveis (exemplo: 'chkconfig –level 123456 sendmail off'). Além disso, pode-se remover as entradas específicas dos programas no boot do sistema operacional (/etc/inetd.conf e/etc/xinetd). Versões mais novas do chconfig editam as entradas do xinetd automaticamente.

Apache

Esconder a versão dos softwares utilizandos dificulta, em parte, a ação do invasor. No Apache, para esconder esta informação, basta alterar a seguinte linha do httpd.conf:
ServerTokens ProductOnly
ServerSignature Off
A diretriz ServerTokens controla a resposta do Servidor para os clientes sobre a versão do apache e do sistema operacional, além de informações sobre os módulos pré-compilados.


ServerTokens Banner do Servidor
ProductOnly Server: Apache
Major Server: Apache/2
Minor Server: Apache/2.0
Minimal Server: Apache/2.0.55
OS Server: Apache/2.0.55 (Debian)
Full (or not specified) default Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b
Se você quiser restringir o acesso à uma página para um determinado IP ou blocos de IPs, é possível configurar o Apache da seguinte maneira (editando o httpd.conf):
Order Deny,Allow
Deny from all
Allow from 200.0.0.0/16
Outra dica é nunca deixar que os diretorios listem o conteúdo, caso nao haja o arquivo index.html
Options +Indexes MultiViews
O Apache, na sua instalação padrão, acompanha vários módulos. A documentação do Apache descreve as funcionalidades de cada módulo. Em muitos casos, os módulos são desnecessários e podem ser desativados. Para isto, basta comentar as linhas precedidas por “LoadModule” no httpd.conf. Alguns módulos que podem ser desabilitados para casos específicos: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

MySQL

O MySQL, no seu modo padrão, deixa o usuário root sem senha. Usuários podem fazer login como root (sem especificar uma senha) e acessar as bases de dados com privilégios administrativos. Para testar se o servidor está sem senha de root, digite:
mysqladmin -u root status
ou
mysql -u root
Para configurar uma senha para a conta root do MySQL (trocar 'NOVA SENHA' pela senha desejada):
mysql -u root
mysql> UPDATE mysql.user SET password=PASSWORD('NOVA SENHA') WHERE user='root';
mysql> FLUSH PRIVILEGES;

Sniffer

Todo tráfego não criptografado que entra e sai na rede pode ser interceptado por programas que capturam pacotes. Para que uma placa possa capturar tráfego, ela deve estar ativa no modo promíscuo. Para verificar se a sua rede está sujeita a sniffer:
sudo infconfig eth0
Localize e compare as seguintes linhas:
#Sem Sniffer
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
#Promíscuo - Sujeito a Sniffer
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
Para desativar o modo promíscuo para uma interface de rede determinada, basta executar o seguinte comando:
ifconfig eth0 -promisc

Portas abertas

A verificação esporádica de portas abertas na rede é uma boa prática de segurança. Usando o NMAP, pode-se identificar portas abertas, programas responsáveis e versões de sistemas operacionais. O seguinte comando vai listar todas as portas abertas da máquina:
$> nmap -A -p 1-65535 localhost
PORT      STATE SERVICE    VERSION
514/tcp   open  shell?
Em seguida, para identificar o PID responsável pela porta:
$> sudo fuser 514/tcp
514/tcp:              6231
Finalmente, para desobrir o aplicativo responsável:
$> sudo ps 6231
PID TTY      STAT   TIME COMMAND
6231 ?        Ss     0:52 /usr/sbin/syslog-ng

Desconectando usuários inativos

Rotineiramente, administradores esquecem de fazer logout após terminar seus trabalhos, deixando a conta “root” aberta na máquina. Uma pessoa com acesso físico pode facilmente comprometer a máquina, instalando scripts maliciosos e adicionando usuários indevidos.
A solução para resolver este problema é fazer com que o shell faça o logout automaticamente após um certo período de inatividade. Para fazer isto, você deve configurar a variável especial do Linux chamada “TMOUT” com o tempo de inatividade em segundos antes do logout.
Edite o seu arquivo profile (/etc/profile) e adicione a seguinte linha em algum lugar após a linha onde se lê “HISTFILESIZE=” nesse arquivo:
TMOUT=3600
O valor que entramos para a variável está em segundos e representa 1 hora (60 * 60 = 3600 segundos). É importante observar que se você decidir colocar a linha acima em seu arquivo ”/etc/profile”, então o logout automático após uma hora de inatividade entrará em vigor para todos os usuários do sistema.
Se ao invés disso você quiser controlar quais usuários receberão o logout automático e quais não o receberão, você pode configurar esta variável no arquivo .bashrc (shell bash) ou .login (shell csh) , que ficam situados no diretório pessoal de cada um.

Kernel

O kernel é o “coração” do sistema operacional, e é uma das partes do sistema que mais recebe atenção por parte dos desenvolvedores, evoluindo constantemente. A cada nova versão do kernel mais recursos são incorporados, defeitos corrigidos, e constantemente recursos existentes são aprimorados tornando-se mais eficientes. Logo o administrador do sistema, além de conhecer o kernel, deve procurar se manter informado sobre o seu desenvolvimento, e se necessário atualizar o kernel do sistema sob sua responsabilidade.
Assim como qualquer software, versões mais antigas do Kernel possuem uma série de vulnerabilidades. Existem diversas falhas locais, que permitem usuários comuns ganhar acesso de super-usuário (elevação de privilégios) ao executar um exploit. Isto pode ser perigoso em servidores com um grande número de usuários locais e remotos, como em empresas e faculdades: um usuário com senha fraca pode ter sua conta comprometida ou até mesmo um usuário legítmo pode explorar estas falhas e tornar-se root.
Referência: http://www.linorg.cirp.usp.br/Guias.Conectiva/Guias_V.9.0/entendendo/kernel.html

Bastille Unix

Introdução

O programa de Hardening Bastille Hardening protege o sistema operacional, configurando o sistema de maneira proativa para aumentar sua segurança e reduzir as chances de comprometimento. O Bastile também pode ser usado para acessorar no processo de Hardening do sistema, reportando e detalhando cada configuração de segurança usada pelo programa.

O Bastile auxilia o usuário/administrador do sistema a escolher exatamente como “fortalecer” o sistema operacional. No modo de operação/hardening padrão, ele interage com o usuário fazendo perguntas , explicando cada tópico para, então, criar uma política baseada nas respostas do usuário. Logo em seguida, aplica-se as políticas no sistema. No modo de auditoria, ele cria um relatório para ensinar o usuário sobre as configurações de segurança disponíveis, além de informar quais configurações foram definidas/ajustadas.
O Bastile é extremamente útil, pois, além de atuar no Hardening do sistema, educa os usuários sobre segurança em geral, informando sobre todas medidas adotadas. Muitas empresas usam a seção interativa do Bastile para treinar novos administradores de sistema.


Sistemas operacionais suportados

  • Debian
  • Fedora Core
  • Gentoo
  • Mandriva
  • Red Hat/Red Hat Enterprise
  • SuSE/SuSE Enterprise
  • TurboLinux
  • Mac OSX

Instalação

Red Hat, SuSE e Mandrake

O Bastille suporta um grande número de distribuições do Linux . O pacote RPM do programa suporta os seguintes sistemas operacionais: Fedora Core, Red Hat Enterprise, Red Hat Clássico (Red Hat 6 até o 9), SuSE e Mandrake. Nestes sistemas, o Bastille pode ser instalado pelo RPM ou pelo source (tarball).


Para instalar o programa você deve instalar o RPM e um módulo PERL para prover a interface gráfica ou baseada em texto.
Para instalar o RPM do Bastille, execute o seguinte comando:
rpm -ivh Bastille-3.0.9-1.0.noarch.rpm
      
Para usar o modo interativo de Hardening, deve-se instalar o perl-TK (para a interface gráfica) ou o perl-Curses (para o modo de texto/console). Estes dois pacotes não são necessários no modo de Auditoria, que apenas gera relatórios em HTML e texto puro). Os módulos para interface gráfica podem ser obtidos na página http://bastille-linux.sourceforge.net/perl_rpm_chart.htm
rpm -ivh perl-Tk-a.b-c.i386.rpm
rpm -ivh perl-Curses-d.e-f.i386.rpm

Debian

Existe um pacote do Bastille no repositório do Debian (http://packages.debian.org/bastille), que pode ser baixado e instalado com o gerenciador de pacotes aptitude:
sudo apt-get install bastille

Gentoo

O Bastille também está presente no portage do gentoo, e pode ser instalado usando o emerge:
sudo emerge app-admin/bastille

Mac OS X

A versão para Mac pode ser baixada no seguinte endereço: http://prdownloads.sourceforge.net/bastille-linux/BastilleOSX-3.0.9.tgz?download
A instalação deve ser feita manualmente, uma vez que o pacote não acompanha um instalador específico para o sistema.

Execução

Para executar o Bastille no modo de interface gráfica, execute o seguinte comando:
bastille -x



Para o modo de Texto:
bastille -c



Os comandos do Bastille são altamente intuitivos e todas configurações têm explicações detalhadas. Um comando útil do programa é o RevertBastille, que retoma todas as configurações originais do sistema anteriormente às modificações do Bastille.



Módulos

O Bastille possui os seguintes módulos e scripts:

Firewall

  • Script para filtrar Pacotes

Permissão de Arquivos

  • Restrigir permissões das ferramentas administrativas
  • Desabilitar SUID ping
  • Desabilitar SUID at
  • Desabilitar SUID traceroute
  • Desabilitar impressão com SUID

Segurança de Contas

  • Desabilitar protocolos perigosos
  • Fazer com que as senhas expirem regularmente
  • Restringir acesso ao cron
  • Restringir log-in do root no TTY1-6
  • Proteger boot do LILO com senha
  • Mudar tempo de espera do LILO para 0
  • Configurações de boot do hard-drive
  • Desabilitar reboot usando CTRL-ALT-DEL
  • Proteger modo de usuário-único com senha

Segurança do inetd

  • Restringir TCP wrappers e xinetd
  • Desativar telnet
  • Desativar FTP

Restringindo acesso a programas

  • Restringir acesso/desativar o compilador

Módulo MiscPAM

  • Limitar uso de recursos
  • Restringir acesso ao console

Log

Daemons

  • Desativar daemons de roteamento
  • Deixar o sendmail no modo daemon
  • Executar o sendmail pelo cron para mensagens externas
  • Desabilitar comandos VRFY e EXPN do sendmail

0 comentários:

Postar um comentário

 
Copyright © Masterplan
Blogger Theme by BloggerThemes Sponsored by Busy Buzz Blogging