Segurança no SSH via plugins da PAM

Neste artigo veremos como proteger nossos servidores Unix utilizando console de administração via SSH contra ataques de brute-force usando o plugin pam_abl para PAM (Pluggable Authentication Module).

[ Hits: 47.399 ]

Por: Anderson L Tamborim em 14/06/2007 | Blog: http://y2h4ck.wordpress.com


pam_abl: principais características



O projeto pam_abl consiste em um plugin da PAM (Pluggable Authentication Module), o qual interage com o sistema de autenticação de usuários remotos, em nosso caso SSH, fazendo um front-end de segurança, evitando que abusos sejam cometidos a partir de hosts remotos realizando ataques de brute-force baseados em dicionários.

Um servidor mal configurado pode permitir que estes hosts maliciosos realizem estes ataques por tempo indefinido, o que pode causar um grande problema de segurança, pois como sabemos, em um golpe de sorte, o atacante pode realmente descobrir a senha de acesso remoto.

A pam_abl (Auto Blocking List) efetua uma blacklist de hosts que efetuem logins mal-sucedidos no sistema de acordo com a política configurada e evita que um ataque remoto seja realizado, indisponibilizando o acesso ao serviço para o atacante, removendo então o perigo de acesso remoto.

Este artigo é simples e visa mostrar um panorama de melhoria para o SSH, sendo assim, espero que possa aproveitar algo desta simples contribuição.

Instalação & Configuração

A princípio a idéia de Utilizar o PAM (Puggable Authentication Modules) para bloquear ataques de Brute-force attack parece ser muito boa. Praticamente utilizamos hoje em dia a PAM para quase todos os mecanismos de autenticação, sendo assim adicionando um módulo para checar diversas falhas durante um processo de login seria algo fantástico.

Para minha surpresa, apesar deste fator parecer ser algo totalmente normal devido a pro-eficiência do sistema PAM, encontrei apenas um módulo que foi escrito para esta finalidade específica. Este módulo é conhecido como pam_abl (auto blacklist) e você pode encontrá-lo aqui:
A fim de utilizar o pam_abl, primeiramente devemos instalá-lo em nosso sistema. Ao que parece não existem ainda pacotes pré-compilados para distribuições conhecidas, sendo assim deveremos baixar o arquivo com o código fonte para compilarmos.

1. Baixando e instalando

Para o bom funcionamento dos módulos do pam_abl devemos instalar algumas dependências. A instalação a seguir foi feita no Debian 4, porém pode ser realizada sem problemas em qualquer Linux que utilize-se do pam como forma de autenticação.

As dependências são as seguintes:
  • Libpam-dev
  • Libdb-dev

Para instalar as dependências no Debian utilize-se do apt-get:

# apt-get install libpam0g-dev libdb4.4-dev

---

OBS: Para utilizar esta solução no Ubuntu, contamos com um pacote .deb para ser instalado via apt-get. Basta adicionar o seguinte repositório no seu sources.list:

deb http://ubuntu.tolero.org/ dapper main #(para Dapper)
deb http://ubuntu.tolero.org/ edgy main #(para Edgy)

# apt-get update
# apt-get install libpam-abl
# /etc/init.d/ssh restart


---

Uma vez concluída a instalação destes pacotes, estamos prontos para baixar e compilar o pam_abl. Primeiramente baixe o source em:

# wget http://ufpr.dl.sourceforge.net/sourceforge/pam-abl/pam_abl-0.2.3.tar.gz

Vamos baixá-lo numa pasta temporária em /tmp/pam-abl. Agora vamos descompactá-lo:

# make
cc -Wall -fPIC -c -o pam_abl.o pam_abl.c
cc -Wall -fPIC -c -o log.o log.c
cc -Wall -fPIC -c -o config.o config.c
cc -Wall -fPIC -c -o rule.o rule.c
ld -x --shared -ldb -lpthread -o pam_abl.so pam_abl.o log.o config.o rule.o
for d in tools ; do cd $d && make all && cd .. ; done
make[1]: Entering directory `/tmp/pam_abl/tools'
cc -Wall -c -o log.o log.c
cc -Wall -c -o config.o config.c
cc -Wall -c -o rule.o rule.c
cc -Wall -c -o pam_abl.o pam_abl.c
cc -ldb -lpthread -o pam_abl log.o config.o rule.o pam_abl.o
make[1]: Leaving directory `/tmp/pam_abl/tools'

Pronto já está compilado, agora vamos instalá-lo e iniciar a configuração:

# make install
install --mode=755 --strip pam_abl.so /lib/security
#install --mode=644 conf/pam_abl.conf /etc/security
install -d --mode=755 /var/lib/abl
for d in t tools ; do cd $d && make install && cd .. ; done
/bin/sh: line 0: cd: t: No such file or directory
make[1]: Entering directory `/tmp/pam_abl/tools'
install --mode=755 --strip pam_abl /usr/bin
make[1]: Leaving directory `/tmp/pam_abl/tools'

Como podem ver a linha que faria o install do pam_abl.conf está comentada. Vamos copiar então manualmente:

# cp src/pam_abl.conf /etc/security

Pronto, vamos agora configurar o sistema.

2. Configurando

A configuração é relativamente simples de ser realizada. A pam_abl deve ser adicionada no Stack da auth como sendo um módulo requerido para autenticação de usuários, sendo assim sempre que um usuário tentar se logar no sistema a pam_abl vai ser carregada e irá realizar os procedimentos de validação e irá checar se o host é um host ofensivo.

Abaixo segue um fragmento da configuração. No Debian você deve editar o arquivo /etc/pam.d/common-auth, já no Fedora / Red Hat deve alterar o arquivo /etc/pam.d/system-auth, em ambos os casos o procedimento será o mesmo:

Recomendo fazer um backup deste arquivo de configuração, evitando assim que você comprometa o sistema com uma configuração mal-sucedida. Caso ocorra algum problema decorrente do procedimento abaixo, basta restaurar o arquivo.

auth	required	/lib/security/pam_env.so
auth	required	/lib/security/pam_abl.so config=/etc/security/pam_abl.conf
auth	sufficient	/lib/security/pam_unix.so likeauth nullok
auth	required	/lib/security/pam_deny.so

O arquivo de configuração pode obter qualquer argumento de que preciso através do PAM config. No arquivo de configuração, alguns argumentos serão colocados em linhas individuais. Caso queria adicionar uma linha de comentário, use o caractere "#" no início da linha. Abaixo segue um exemplo de configuração que pode ser feita através do pam_abl.conf:

# /etc/security/pam_abl.conf
debug
host_db=/var/lib/abl/hosts.db
host_purge=2d
host_rule=*:10/1h,30/1d
user_db=/var/lib/abl/users.db
user_purge=2d
user_rule=!root:10/1h,30/1d

Nas linhas 2 e 5 vemos onde está a database onde os hosts e usuários banidos estão salva. A terceira e sexta linhas definem o período de tempo para o banimento, ambas as regras, para host-ban e para user-ban, serão removidas em 2 dias.

Na quarta e sétima linhas estão as regras para host e usuários.

Recomendo utilizar somente as regras para host, evitando um DoS no acesso ao serviço, caso usuários válidos sejam bloqueados durante um ataque de força-bruta randômico, que por acaso pode bloquear vários usuários do sistema.

Após as modificações para tal, a configuração ficará desta forma:

# /etc/security/pam_abl.conf:
host_db=/var/lib/abl/hosts.db
host_purge=1d
host_rule=*:3/1h

Basicamente isto já servirá para barrarmos qualquer host (*) que realize mais de 3 erros de autenticação no sistema em menos de uma hora. Este host ficará banido por 1 dia. Salve a configuração, estamos prontos para testar a segurança do ambiente.

Recomendo que leiam a documentação detalhada do autor da pam_abl. Ela contém uma rica fonte de informações sobre as features que o mesmo suporta. O link segue em anexo na seção "Prólogo".

Vamos então colocar o Projeto sob-fogo! :-)

Página anterior     Próxima página

Páginas do artigo
   1. Prólogo
   2. Introdução - Segurança no acesso remoto
   3. pam_abl: principais características
   4. Projeto sob-fogo: testando a segurança
   5. Melhores práticas: uso de serviço SSH
   6. Conclusão
Outros artigos deste autor

SECtool - Análise Local para Linux

OpenVZ: Virtualização para servidores Linux

Segurança extrema com LIDS: novos recursos

Libsafe: Protegendo Linux contra Smashing Overflow

PSAD: Port Scan Attack Detector

Leitura recomendada

Knockd (bate, bate, bate na porta do céu)

Suporte TCP Wrapper - Serviços stand-alone no Debian 6

Alta disponibilidade com CARP

VPN com openVPN no Slackware 11

PacketFence em Debian 6

  
Comentários
[1] Comentário enviado por powerd0wn em 14/06/2007 - 13:36h

Ae, mano... show de bola seu artigo hein?! =)
Achei interessante seus agradecimentos! ahaahauahu

Valeu!

[]'s

Rodrigo Martins

[2] Comentário enviado por peregrino em 14/06/2007 - 14:20h

tinha que ser um tutorial do y2h4ck mesmo rss

e aee tava sumido en

at+

[3] Comentário enviado por removido em 14/06/2007 - 14:52h

Belo artigo, apesar de alguns módulos do PAM apresentarem vulnerabilidades.

[4] Comentário enviado por y2h4ck em 14/06/2007 - 15:01h

Bom, oque vc disse ai é o mesmo que dizer assim :

"Legal seu artigo sobre Network, pena que o TCP/IP apresenta vulnerabilidades."
Bom, pesquisando no SecurityFocus, não encontrei nenhuma para pam_abl :)

Abraços amigo.

[5] Comentário enviado por everton_ht em 14/06/2007 - 15:07h

ótimo artigo!! congratz
logo me será útil :D

[6] Comentário enviado por removido em 14/06/2007 - 15:44h

Também não encontrei, mas é uma pena para o pacote do PAM ter uns módulos com vulnerabilidades. Sempre é bom dar uma pesquisada nesses módulos do PAM para ver se tem alguma vulnerabilidade. Que bom que o módulo pam_abl não tem.

Abraços, Leonardo.

[7] Comentário enviado por fernoliv em 15/06/2007 - 00:21h

Anderson, meus parabéns!

Seus artigos são muito bem escritos e oferecem uma grande ajuda aos seus leitores.

Com estas dicas podemos melhorar muito o nível de segurança dos nossos servidores Linux.

Abraços,

Fernando.

[8] Comentário enviado por Journeyman em 15/06/2007 - 10:48h

Realmente muito bom o artigo.

Eu pessoalmente estava sofrendo ataques por força bruta na porta 22, isso aocntecia principalmente quando eu estava baixando torrents de coisas pra linux. Quando eu estava baixando a última versão do debian, por exemplo, o arquivo de logs "enlouqueceu" de tantas tentativas de acesso na base da tentativa e erro!

Nunca mais tive esse problema depois que troquei a porta de acesso (na realidade fiz um redirect de porta no roteador pra n ter que alterar os arquivos de configuração, o que auxilia no caso de reinstalações) e limitei o número máximo de tentativas pra 3.

Abraços.

[9] Comentário enviado por rndasi em 03/11/2007 - 11:17h

Bom dia a todos.

Parabéns pelo artigo.

Segui o artigo a risca no Debian 4.0 Etch R0 e no R1 e em nenhum dos 2 ele bloqueava o host.
Pesquisando na net, achei o seguinte patch : http://www.jikos.cz/~jbohac/goodies/pam_abl.patch

Fiz as alterações necessárias para que ele instalasse no diretório correto, apliquei o Patch e fiz a instalação seguindo todos os passos daqui.

Depois disso começou a funcionar.

Espero que ajude quem enfrenta o mesmo problema que eu.

Abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts