Linux Hardening
Autor: Bernardo Maia Rodrigues
CSIRT PoP-MG (csirt@csirt.pop-mg.rnp.br)
Última modificação: 27/02/2008
Ú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
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:
Editar o arquivo /etc/ssh/sshd_config e trocar a linha:
#PROTOCOL 1,2para:
PROTOCOL 2Vamos 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_configAdicione 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 :denyA ú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
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:
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):
ServerTokens ProductOnly ServerSignature OffA 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 |
Order Deny,Allow Deny from all Allow from 200.0.0.0/16Outra dica é nunca deixar que os diretorios listem o conteúdo, caso nao haja o arquivo index.html
Options +Indexes MultiViewsO 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 statusou
mysql -u rootPara 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 eth0Localize 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:1Para 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: 6231Finalmente, 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.
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
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.
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:
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.
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:
Para o modo de Texto:
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.
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
- Ativar Logs adicionais
- Configurar host para Log remoto
- Ativar Process Accounting - http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/security-accounting.html
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