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:
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! :-)