Bom escudo não teme espada: o módulo pam_cracklib

Os administradores buscam, continuamente, novos meios para reforçar a proteção das comunicações e a manutenção da privacidade. A infraestrutura PAM-Linux provê meios para a proteção dos dados e para o reforço da privacidade. Utilizando o módulo pam_cracklib, podemos reforçar uma política de segurança.

[ Hits: 25.218 ]

Por: lourival araujo da silva em 09/08/2010


Palavras comprometedoras



O módulo cracklib tem suporte para uso de mais de trinta dicionários, que podem ser instalados e servir de referência para análise e bloqueio de senhas a serem utilizadas na rede (por serem dedutíveis). Iniciaremos pela instalação e configuração do módulo cracklib, com as especificações de padrões mínimos de segurança nas senhas dos usuários.

# apt-cache search cracklib
cracklib-runtime - runtime support for password checker library cracklib2
cracklib2 - pro-active password checker library
cracklib2-dev - pro-active password checker library - development
libpam-cracklib - PAM module to enable cracklib support

# apt-get install libpam-cracklib cracklib2 cracklib2-dev cracklib-runtime

A instalação inicial permite algumas verificações básicas, que podem ser estendidas por meio de ajustes, os quais veremos em seguida. Comecemos pelas verificações básicas habilitadas pelo módulo, que são as seguintes:
  1. Impede o uso de senha reversa: password => drowssap;
  2. Não autoriza atualização de senha que comporte somente mudança no case da senha anterior: password => Password; e,
  3. Define a quantidade aceitável de diferença mínima entre os caracteres da senha anterior e da senha atual. Definida na variável 'difok=n';

Essas configurações mínimas podem ser estendidas por meio do incremento de funcionalidades, tais como: dicionário de senhas não-autorizadas, histórico de senhas anteriores, tamanho mínimo/máximo de cada senha, e prazo de expiração de senhas. Dessa forma, conforme o nível de paranoia estabelecido, poderemos estabelecer uma política de uso aceitável referente à utilização de senhas na nossa rede interna.

A habilitação do uso do módulo cracklib se dá por meio dos arquivos de gerenciamento de mudança senhas, existente no diretório de administração dos módulos PAM (/etc/pam.d), e ajustamos as configurações de mudanças de senha nos arquivos 'common-password' ou 'system-auth', conforme estejamos em distribuições baseadas no Debian ou no Red Hat.

Contudo, essas alterações poderão ser efetuadas diretamente no arquivo de gerenciamento do programa login (/etc/pam.d/login) ou no arquivo de gerenciamento do ambiente gráfico (/etc/pam.d/kdm ou /etc/pam.d/gdm), se não desejarmos habilitá-las para outros programas do sistema (ssh, mysql, vsftp, postfix).

Por isso, se alterarmos os arquivos 'common-password'ou 'system-auth', as modificações aplicam-se a todos os programas e usuários, e se alterarmos nos arquivos 'login', 'kdm' ou 'gdm', as modificações aplicam-se somente a estes programas.

Utilizaremos o modelo de alteração geral, a fim de reforçar a política de segurança em todas as aplicações e usuários, e por isso, editaremos o arquivo correspondente ao gerenciamento geral de trocas de senhas, em distribuição debian-like (/etc/pam.d/common-password):

# vi /etc/pam.d/common-password

password required pam_cracklib.so retry=3 minlen=6 difok=3
password required pam_unix.so md5 remember=10 use_authtok

As linhas estabelecem os critérios a serem utilizados, quando for solicitada a modificação da senha pelos usuários, ou aplicações com suporte ao PAM, da seguinte forma:
  • retry=3 # admite-se somente três tentativas de login incorretas antes de impedir o acesso ao terminal
  • minlen=6 # somente senhas com tamanho mínimo de seis caracteres serão aceitas
  • difok=3 # tem que haver, pelo menos, três caracteres de diferença entre a senha anterior e a senha atual
  • md5 # hash utilizado pelas senhas em /etc/shadow
  • remember=10 # quantidade de senhas memorizadas, e que não podem ser reutilizadas
  • use_authtok # utiliza a senha digitada anteriormente, desde que não tenha havido falha na autenticação

Assim, poderemos ter a autenticação concentrada no arquivo comum e herdada pelos demais aplicativos, e editarmos o arquivo de login, a fim de que herde essas configurações:

# vi /etc/pam.d/login

@include common-auth
@include common-session
@include common-account
@include common-password

Habilitaremos a memorização de senhas através de operações complementares, destinadas criar o arquivo para histórico das mesmas:

# touch /etc/security/opasswd
# chown root.root /etc/security/opasswd
# chmod 600 /etc/security/opasswd


# passwd
Changing password for aquaman
(current) UNIX password:
New UNIX password:
BAD PASSWORD: has been already used
New UNIX password:

A ferramenta 'chage' nos permite verificar e alterar as configurações de contas do sistema. Utilizaremos essa ferramenta para definir a expiração de contas, mantendo a consistência da nossa política de uso aceitável:

# chage -h
Uso: chage [opções] usuário

  -d, --lastday ÚLTIMO_DIA # define última mudança de senha para ULTIMO_DIA
  -E, --expiredate DATA_EXPIRAÇÃO # define data de expiração de senha para DATA_EXPIRAÇÃO
  -h, --help # exibe esta mensagem de ajuda e finaliza
  -I, --inactive INATIVO # define senha inativa após expiração para INATIVO
  -l, --list # exibe informação sobre idade da conta
  -m, --mindays MIN_DIAS # define números mínimo de dias antes da troca de senha para MIN_DIAS
  -M, --maxdays MAX_DIAS # define números máximo de dias antes da troca de senha para MAX_DIAS
  -W, --warndays AVISO_DIAS # define dias para aviso de expiração para AVISO_DIAS

# chage -l aquaman
Última mudança de senha	: Out 04, 2009
Senha expira em		: Nov 03, 2009
Senha inativa		: nunca
Conta expira em		: nunca
Número mínimo de dias entre a mudança de senhas	: 8
Número máximo de dias entre a mudança de senha	: 30
Número de dias de aviso antes da senha expirar	: 7

Definiremos 90 dias como o tempo de vida da conta, 30 dias como o tempo de renovação de senha e 7 dias como o tempo para aviso de vencimento da senha:

# chage -E 12/24/2009 -I 12/24/2009 -M 30 -W 7 aquaman
# chage -l aquaman
Última mudança de senha	: Out 04, 2009
Senha expira em		: Nov 03, 2009
Senha inativa		: Nov 15, 2009
Conta expira em		: Dez 24, 2009
Número mínimo de dias entre a mudança de senhas	: 8
Número máximo de dias entre a mudança de senha	: 30
Número de dias de aviso antes da senha expirar	: 7

Temos portanto um sistema gerenciável de contas. Podemos agora gerenciar o uso das senhas.

Página anterior     Próxima página

Páginas do artigo
   1. O tempo da criação
   2. Palavras comprometedoras
   3. Sanatório geral
   4. Partículas elementares
Outros artigos deste autor

Autenticação via hardware: o módulo pam_blue

Configuração "automágica" de servidor Linux PDC Samba

Autenticação via hardware: o módulo pam_usb

Cliente Linux no servidor LDAP

Mudança de hábito: autenticando usuários em base de dados MySQL

Leitura recomendada

Configurando o IDS - Snort / Honeypot (parte 2)

Como saber se houve uma invasão

Tratamento de dados fornecidos pelo usuário: projetando sistemas com mais segurança

Tornando seu Apache mais seguro com o ModSecurity

Melhorando a segurança do seus servidores em FreeBSD

  
Comentários
[1] Comentário enviado por leandromoreirati em 12/08/2010 - 11:11h

Excelente artigo hoje em dia e muito importante esse ajustes finos de acesso e de senha dos usuários, me tira uma duvida qual distro vc usou pois no debian nao tem o pacote cracklib2 ele e virtual ou se usou o debian, usou algum repositórios específico.

Att.

Leandro Moreira.

[2] Comentário enviado por araujo_silva em 12/08/2010 - 23:38h

Oi Leandro

Usei em momentos diferentes do trabalho o debian e o ubuntu 8.10. O pacote cracklib2 é do ubuntu, mas o debian possui o libcrack2, libcrack2-dev, cracklib-runtime e libpam-cracklib.

Obrigado pelas considerações e forte abraço

Att

Lourival Araújo

[3] Comentário enviado por leandromoreirati em 13/08/2010 - 09:59h

Araujo,
Que espetaculo essas confiogurações, já defini como polica padrao no em meus servidores, so preciso encontra um repositorio com as wordlists que no debian nao tem caso possa me indicar algum fico agrdecido.
Mais uma duvida as wordlist sao para o caracklib2 ou para o pam, pois se for para o cracklib torna-se desnecessário o repositorio.

Att.

Leandro Moreira

[4] Comentário enviado por araujo_silva em 13/08/2010 - 13:20h

Prezado Leandro

Apresento as seguintes sugestões:

1. O debian dispõe das bibliotecas cracklib (libcrack2, libcrack2-dev, cracklib-rutime) as quais instalam o arquivo de configuração dos dicionários de pesquisa do módulo (/etc/cracklib/cracklib.conf), no qual está definido o caminho de pesquisa dos dicionários a serem pesquisados;
Essas pesquisas devem ser agendadas via cron, e novos dicionários devem ser instalados (/var/cache/cracklib, no debian), e anunciados via comando (update-cracklib);

2. Novos diconários podem ser encontrados nos endereços sugeridos no artigo e em http://sourceforge.net e

3. A criação de dicionários customizados pode ser realizada por meio da aplicação mkdict (http://www.math.utah.edu/~beebe/unix/m/mkdict.html), que transforma listas de palavras ascii em dicionários. A distribuição Ubuntu dispõe de forma adaptada da aplicação, separada em comandos distintos para formatar, compactar e descompactar dicionários customizados (crack_mkdict, crack_packer e crack_unpacker). O código-fonte dessas aplicações pode ser localizado e reempacotado, pois trata-se de sequencias de comandos de formatação. Como no exemplo abaixo:
http://www.opensource.apple.com/source/CrackLib/CrackLib-36064/cracklib27/util/mkdict
###########################################################################################
mkdict
#!/bin/sh

###
# This program is copyright Alec Muffett 1993. The author disclaims all
# responsibility or liability with respect to it's usage or its effect
# upon hardware or computer systems, and maintains copyright as set out
# in the "LICENCE" document which accompanies distributions of Crack v4.0
# and upwards.
###

### in case of explosion, invoke "sort" with "-T" option pointing to a lot
### of free space in a directory somewhere.

SORT="sort"
###SORT="sort -T /tmp"

cat $* |
tr '[A-Z]' '[a-z]' |
tr -cd '{COMENTARIO}12[a-z][0-9]' |
$SORT |
uniq |
grep -v '^#' |
grep -v '^$'
###########################################################################################

4. Caso seja sua intenção reforçar de forma radical a segurança do seu sistema talvez seja uma idéia interessante contratar um segurança pessoal.

atenciosamente

Lourival Araujo

[5] Comentário enviado por leandromoreirati em 14/08/2010 - 14:32h

Araujo,
Cometi um grande erro, ao procurar as wordlist com aptitude ele nao as encontrou mas com o apt-cache encontrou numa boa.

Att.

Leandro Moreira.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts