[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ próximo ]
Este capítulo traz explicações e comandos úteis para o gerenciamento de contas
e proteção de senhas de usuários em sistemas Linux
. Também
explica os principais métodos usados para quebra de senha usando diversos
métodos como engenharia social, brute force, etc., bem como dicas de como
escolher boas senhas para você e seus usuários e métodos automatizados de
checagem de senhas vulneráveis.
Estes métodos são explicados para que você entenda, se previna destes tipos de ataques além de entender a importância de políticas de proteção de senhas.
A criação de uma conta em uma máquina Linux
pode expor seu sistema
(ou todas suas redes) a crackers simplesmente com a falta de treinamento e
políticas de segurança. Uma invasor com um simples acesso a uma conta de
usuário pode conseguir acesso a áreas que contém dados importantes expondo seu
sistema a ataques ou roubo de dados.
Um firewall não pode fazer muito em uma situação dessas, um acesso através de
uma conta de sistema válida é difícil de ser auditado e descoberto, a não ser
que o usuário monitore seus acesso via lastlog
e o administrador
conheça os hábitos de seus usuários para notar o uso estranho de contas em
determinados dias/horários. Evitar situações como esta depende mais de
conscientização e treinamento tanto do administrador como dos usuários das
contas para não expor o sistema a um ataque direto. Este capítulo do guia
explicará as situações mais comuns e alguns exemplos de como tais ataques
acontecem.
ATENÇÃO: - Os dados aqui disponibilizados são puramente para fins didáticos e compreensão de como tais situações funcionam para se criar mecanismos de defesa personalizados de acordo com o que deseja proteger.
Para adicionar uma conta de usuário ao sistema é simples, basta um comando
adduser [usuário] e alguns poucos segundos para responder as
questões do programa. Quando criamos contas para outros usuários temos 2
alternativas: deixarmos a senha em branco ou escolher uma senha que será
passada ao usuário para que ele possa fazer a troca mais tarde. A primeira
alternativa é muito perigosa, pois uma pessoa com acesso a
/etc/passwd
poderá facilmente descobrir sua lista de usuários
(principalmente em uma grande empresa quando conhecemos as políticas de criação
de novas contas). Um funcionário notaria a presença do novato e poderia
aproveitar esta oportunidade para tentar incriminar este usando a conta recém
criada ou tentar outras coisas para obter benefício próprio através do descuido
de outros.
O segundo método de senha inicial é um pouco mais seguro e de preferência a senha deve ser escolhida pelo usuário para que pessoas que conhecem o estilo de senhas iniciais escolhidas pelo administrador não possam deduzir a nova senha criada. É comum vermos senhas como "novo1234", "123456", "abcdef", "a1b3c3", o "nome do usuário" como senhas iniciais, pois é fácil de lembrar. Senhas deste tipo são as primeiras a ser tentadas por crackers e programas específicos para este fim. Mas se o o usuário esquecer de trocar sua senha provisória?
O programa chage
e passwd
possui recursos que
permitem definir limites mínimos e máximo do tempo para troca de senha de
acesso, número máximo de dias após expirar o tempo de troca da senha em que a
conta será permanentemente desabilitada (até que o administrador a reative) e o
período mínimo entre troca de senhas. Alguns exemplos:
passwd -x 10 -w 3 teste
A senha do usuário teste expirará após 10 dias (-x 10) e ele será avisado com 3 dias de antecedência (-w 3) para trocar sua senha. Após o período máximo o usuário será obrigado a trocar a senha.
Quando o usuário efetuar o login receberá a seguinte mensagem: Warning: your password will expire in 3 days.
passwd -x 10 -w 3 -i 2 teste
A senha do usuário teste expirará após 10 dias (-x 10) e ele será avisado com 3 dias de antecedência (-w 3) para trocar sua senha, após a expiração da senha, o usuário tem 2 dias antes da conta ser desativada (-i 2). Se o período expirar e o usuário tentar um novo login será mostrada a mensagem:
Your account has expired: Please contact your system administrator
Para reativar a conta acima, remova totalmente o bloqueio da conta do usuário teste com passwd -x 0 teste, passwd -x 99999 -w 7 -i 0 teste ou especifique um período de dias maior em adição àqueles especificados para que ele possa trocar a senha.
Por exemplo, caso tenha passado 3 dias desde que a conta acima expirou e deseje dar mais 2 dias para o usuário trocar a conta: passwd -x 17 -i 0 teste A conta será reativada por mais 2 dias dando a oportunidade do usuário trocar a senha. Preste atenção neste exemplo para entender bem a situação e prazos.
passwd -x 90 -n 60 -w 15 -i 0 teste
A senha do usuário teste expirará após 90 dias (-x 90), ele será avisado para trocar sua senha com 15 dias antes do prazo final (-w 15) e a conta será imediatamente desativada caso o prazo máximo para troca da senha expire (-i 0). O usuário também não poderá trocar sua senha durante os primeiros 60 dias desde a última troca de senha (-n 60).
Em sistemas onde precisa adicionar restrições a muitos usuários na criação da conta, é recomendável seguir os métodos descritos em Definindo valores padrões de restrição, Seção 11.2.1.
OBS1: Em sistemas com senhas ocultas ativadas (veja Shadow Passwords, Seção 11.4.1) as
restrições acima serão especificadas no arquivo /etc/shadow
, isto
garante que só o usuário root tenha acesso aos detalhes fornecidos
neste arquivo.
OBS2: A -d do passwd
serve para remover
a senha do usuário especificado ou seja somente será necessário fornecer o nome
de usuário para ter acesso ao sistema.
OBS3: Leve em consideração que o uso do recursos de senhas de grupo é um risco de segurança, pois a mesma senha será compartilhada entre diversas pessoas.
OBS4: O programa useradd
combina as funções do
adduser
e passwd
para garantir que a conta seja
criada com as restrições apropriadas. O único inconveniente é que o
useradd
quebra o Debian Policy e precisa de todos todos
os parâmetros para a criação correta da conta (como o diretório home, senha
criptografada, e UID numérico). Seu uso é indicado em shell scripts que cuidam
automaticamente da tarefa de adicionar usuários ao sistema.
Isto é muito útil quando precisa criar diversos usuários com as mesmas
restrições de contas, isto tornará o gerenciamento do sistema muito mais
prático (tudo em Unix é feito para ser mais prático, só devemos saber onde
mexer). O arquivo /etc/defaults/useradd
contém valores padrões
que serão usados pelo useradd
e adduser
para definir
valores de restrições de contas. Estes valores são gerados usando a opção
-D em combinação com as seguintes opções do useradd
:
-b [home] - Especificar o diretório home de usuário. O padrão é
/home
.
-e [data] - Data padrão de expiração de contas, especificada no formato AnoMesDia. Por exemplo, 20010920.
-f [dias] - Número máximo de dias que a conta permanece válida após a data de expiração até ser desativada.
-g [gid/grupo] - ID do grupo ou nome do grupo que o usuário pertencerá inicialmente.
-s [shell] - Shell do usuário. O padrão é /bin/bash
.
OBS: Note que nem todas as opções acima terão efeito com o
adduser
(principalmente as opções -f, -g e
-s que são especificadas no seu arquivo de configuração
/etc/adduser.conf
).
A senha lhe identifica como o verdadeiro dono de uma conta em um sistema para garantir acesso a seus recursos. A senha de um sistema é tão importante quanto uma senha de sua conta bancária, caso caia em mãos erradas as conseqüências poderão ser catastróficas, todo cuidado é pouco na hora de escolher uma senha.
Senhas fáceis de adivinhar são o primeiro motivo de sucesso de crackers no acesso a sistemas de computadores (veja Dedução, Seção 11.3.1 e Engenharia Social, Seção 11.3.2), o administrador pode forçar o usuário a fazer trocas periódicas de senhas através dos recursos citados em Criação, monitoramento e segurança de contas, Seção 11.2, mas quem vai garantir que ele esteja escolhendo boas senhas para que ninguém as descubra com facilidade? Abaixo uma lista de senhas ruins (que deverá evitar a todo custo usa-las) e boas:
Senhas Ruins
O uso da palavra senha como senha! Isto parece idiota mais existe...
Senhas com o mesmo nome do login (joao/joao).
Compostas por letras ou números em seqüencia crescente ou decrescente (abcdef, 123456, 654321, etc, etc). Este tipo de senha pode ser adivinhada por dedução e são uma das primeiras combinações que crackers usam para acertar senhas.
palavras relacionadas com o gosto pessoal. Por exemplo "escort", "vectra", "subaru" se a pessoa é amante de carros.
Nome da esposa, filhos, familiares, animal de estimação, time de futebol, ídolo da TV/filmes ou qualquer coisa relacionada a familiares ou indiretamente ao usuário.
Idade, data de aniversário, data de casamento, número de identidade, título de eleitor, placa de carro ou qualquer coisa que seja característica do usuário.
Palavras existentes. Um ataque de dicionário poderá descobrir facilmente sua senha.
Senhas com menos de 8 letras
Senhas apenas em minúsculas ou MAIÚSCULAS.
Senhas Boas
Uma boa senha nunca deverá ser lida mas fácil de lembrar. Por exemplo pense em uma frase importante para você "meu sistema operacional preferido é o Linux" e pegue a primeira letra de cada palavra: "msopeol". PRONTO esta escolhida uma boa senha que é fácil de se lembrar e difícil de ser quebrada por ataques de dicionário!
Uma boa senha deve conter números e letras. A senha acima poderia ser modificada para "msopeol1"
Conter letras maiúsculas e minúsculas. "msopeoL1".
Conter 8 caracteres sempre que possível. Isto aumenta bastante o número de combinações necessárias para se quebrar uma senha em um ataque brute force (veja Brute Force, Seção 11.3.4). Mesmo que a senha escolhida não chegue a 8 caracteres mínimos, você poderá combina-la com números.
Com as dicas acima, a possibilidade de alguém conseguir quebrar uma senha
criptografada em seu sistema usando os ataques descritos em Tipos de ataques mais comuns para se conseguir uma
senha., Seção 11.3 é praticamente nula! Para os paranóicos de plantão, o
utilitário makepasswd
pode criar uma senha com caracteres
completamente aleatórios:
makepasswd --chars 8 4y0sBdwM
Este comando retorna uma string com 8 caracteres (--chars 8) "4y0sBdwM". Se você entendeu boa parte deste guia tenho certeza que 1 ou 2 dias de treino e se acostuma com uma senha como esta ;-)
OBS: NUNCA NUNCA dê pistas sobre sua senha! Para você isto pode ser um desafio lançado a outras pessoas quase impossível de ser resolvido, mas não se esqueça que muita gente é especializada neste tipo de dedução.
O programa chpasswd
é usado para tal operação. Deve ser
especificado um arquivo que contém os campos usuário:senha por
linha. Caso as senhas estejam encriptadas deverá ser especificada a opção
-e ao programa.
chpasswd -e /localadmin/contas/contas.db
O comando acima atualiza a senha de todos os usuários especificados no arquivo
contas.db
de uma só vez.
Esta seção foi retirada do Manual de Instalação da Debian.
A conta root é também chamada de super usuário, este é um login que não possui restrições de segurança. A conta root somente deve ser usada para fazer a administração do sistema, e usada o menor tempo possível.
Qualquer senha que criar deverá conter de 6 a 8 caracteres, e também poderá conter letras maiúsculas e minúsculas, e também caracteres de pontuação. Tenha um cuidado especial quando escolher sua senha root, porque ela é a conta mais poderosa. Evite palavras de dicionário ou o uso de qualquer outros dados pessoais que podem ser adivinhados.
Se qualquer um lhe pedir senha root, seja extremamente cuidadoso. Você normalmente nunca deve distribuir sua conta root, a não ser que esteja administrando um computador com mais de um administrador do sistema.
Utilize uma conta de usuário normal ao invés da conta root para operar seu sistema. Porque não usar a conta root? Bem, uma razão para evitar usar privilégios root é por causa da facilidade de se cometer danos irreparáveis como root. Outra razão é que você pode ser enganado e rodar um programa Cavalo de Tróia -- que é um programa que obtém poderes do super usuário para comprometer a segurança do seu sistema sem que você saiba.
O cracker se aproveita da ingenuidade de usuários que deixam senhas em branco, usam senhas simples como o próprio nome, "abcdef", "asdfg", "123456", e outros tipos de senhas comuns para tentar obter acesso ao sistema. Senhas deduzidas são geralmente senhas muito simples e muito usadas... Uma situação comum para a escolha de uma senha deste tipo é o medo de esquecer a senha (quando não se consegue pensar em algo mais difícil e ao mesmo tempo que seja fácil de lembrar) e quando o usuário é pego desprevenido e não se sabe o que usar como senha (como na assinatura de um provedor Internet, muito comum essa situação).
Geralmente é muito rápido e muito eficaz dependendo das habilidades do atacante dispõe.
Ataques por engenharia social são feitos através de pesquisa de dados pessoais e outras características relacionadas ao usuário (time de futebol, data de nascimento dele, da esposa, filhos, nome da atriz predileta, etc) e usando estes dados coletados para auxiliar na descoberta da senha. Este ataque requer uma pesquisa sobre os hábitos, gostos, etc. Mas existem outros tipos de ataque baseados em engenharia social, inclusive com o cracker passando-se pelo usuário. Para diminuir as possibilidades deste tipo de ataque entenda e siga os procedimentos da parte "Senhas Boas" na Senhas fáceis de adivinhar e escolha de boas senhas, Seção 11.2.2 e continue lendo esta seção.
Outro detalhe importante para diminuir as possibilidades de um ataque deste
tipo bem sucedido é permitir somente o acesso do serviço de finger
a redes confiáveis (locais onde uns conhecem os outros). Os detalhes
fornecidos pelo finger podem ser suficientes para garantir sucesso deste tipo
de ataque:
#finger joao Login: joao Name: Joao P. M. Directory: /home/joao Shell: /bin/bash Office: Sala 400 Andar 2, 123-4567 Home: 123-7654 Last login Fri Aug 25 21:20 (AMT) on tty3 No mail. Grupo de cadastramento.
As últimas linhas da saída do finger são os dados contidos nos arquivos
.plan
e .project
do diretório de usuário. O cracker
com base nos dados fornecidos acima pelo finger poderia inventar uma situação
em que necessitaria de troca de senha por algum motivo. Abaixo uma situação
onde o cracker sabe que não existe identificador de chamadas na empresa e
conhece as fragilidades:
Cracker: Disca para o CPD?
Vitima: CPD?
Cracker: Oi, eu sou o Joao P. M. do grupo de cadastramento aqui do segundo andar, estou tentando entrar no sistema mas por algum motivo ele não aceita minha senha (fazendo-se de ignorante no assunto).
Vitima: Por favor Sr. verifique se o Caps Lock do seu teclado está ativado, letras em maiúsculas/minúsculas fazem diferença em nossos sistemas.
Cracker: Ok vou checar (espera um tempo). Não, esta tudo Ok, você poderia agilizar isto de alguma maneira, preciso lançar algumas fichas no sistema.
Vitima: Posso modificar sua senha para um nome qualquer, depois você poderá trocar por si próprio.
Cracker: Ok, por mim tudo bem.
Vitima: Humm, modifiquei para "cad1234", basta você usa-la e terá acesso ao sistema. Após isso execute o utilitário passwd para troca-la para algo que desejar.
Cracker: Ok, muito obrigado. Tenha um bom dia.
Este é um exemplo simples de ataque por engenharia social. Dependendo do objetivo, este tipo de ataque pode levar semanas e as vezes requer contatos com diversas empresas criando diversas situações para obter detalhes necessários para atingir o objetivo.
As políticas de segurança de senhas minimizam riscos deste tipo. Como este é um caso que o requisitante é um funcionário próximo do departamento de informática, o mais adequado seria o administrador se deslocar ao setor (ou enviar um técnico do setor treinado para tal situação) para saber se quem diz ser quem é está realmente no local enfrentando aquela situação. O contato com o responsável do setor (conhecido do técnico) também pode ser uma alternativa antes de entregar uma senha a um desconhecido.
Para casos externos (principalmente para empresas que mantém determinados
serviços em funcionamento em nosso servidor, como servidores de páginas), o
procedimento correto seria passar uma nova senha por e-mail (de preferência
criptografado com pgp
) ao invés de telefone. Isto garantirá que a
senha não caia nas mãos erradas.
OBS1: Qualquer detalhe sobre a política de criação de senhas, trocas de senhas, etc. poderá ter muito valor para um cracker obter acesso ao seu sistema.
OBS2: Dificulte as maneiras para se obter acesso root ao sistema via conta de usuário comum. É de extrema importância utilizar conexões de dados criptografadas quando for necessário acesso externo ao seu sistema.
OBS3: Nunca use uma mesma senha para fazer tudo (banco, acessar seu sistema, conectar-se ao seu provedor, senha de root). Você estará em sérios apuros caso alguém tenha acesso a esta senha. É difícil lembrar de várias senhas, mas você pode aditar uma senha e criar modificações a partir dela para utilização em outros locais, por exemplo: "wekpdm" => "Bwekpdm1" => "3wekpdmS", etc.
De posse do arquivo de senhas /etc/passwd
, o cracker utiliza um
arquivo que contém diversas palavras que serão tentadas como senha. Este
trabalho é feito automaticamente por ferramentas dedicadas a este tipo de
tarefa e pode levar dias dependendo da lista de senhas do cracker e quantidades
de usuários existentes no arquivo de senha.
Note que o uso de criptografia md5 e senhas ocultas dificultam bastante ao arquivo de senhas e o sucesso de um ataque bem sucedido (veja Shadow Passwords, Seção 11.4.1 e Senhas MD5, Seção 11.4.2).
De posse do arquivo de senhas /etc/passwd
o cracker utiliza uma
ferramenta que tenta diversas combinações de letras seqüencialmente na
tentativa de descobrir uma senha. Este ataque geralmente é usado como último
recurso após um ataque por dicionário, e leva muito tempo para descobrir uma
senha.
Dependendo se uma senha conter caracteres aleatórios, combinação de letras maiúsculas/minúsculas, números, a senha será praticamente impossível de ser descoberta. Note que o uso de criptografia md5 e senhas ocultas aumentam bastante a proteção das senhas (veja Shadow Passwords, Seção 11.4.1 e Senhas MD5, Seção 11.4.2).
Este ataque é muito comum em sistemas DOS e Windows, um programa é instalado sem o conhecimento do usuário que grava todos os toques do teclado em um arquivo escondido pelo cracker. Após certo tempo o cracker obtém acesso ao arquivo e aos dados que ele contém. Este tipo de ataque é muito perigoso e pode capturar senhas não só do sistema como números de cartão de crédito digitados (caso o usuário tenha feito compras on-line), conta bancária+senha e tudo mais que for digitado pelo teclado.
Esta é uma forma rápida de se conseguir acesso a um sistema. É criada uma tela de login idêntica a original do sistema, só que ao digitar nome e senha, estes são gravados em um arquivo (que será mais tarde recuperado pelo cracker para obter acesso ao sistema) e uma mensagem de erro será exibida pelo sistema.
Naturalmente o usuário pensará que digitou o nome/senha incorretamente e fará uma nova tentativa, a segunda ocorrerá com sucesso (fazendo este pensar que errou *mesmo* a senha).
Sua atenção é muito importante para evitar este tipo de ataque, caso desconfie de algo errado, entra no sistema e dê um find --type f -cmin -3 para localizar os arquivos modificados nos últimos 3 minutos e localizar possíveis bancos de dados de senhas.
Outra alternativa é realmente digitar uma senha inválida intencionalmente (e diferente da correta) e na segunda tentativa lançar a senha válida (normalmente sistemas deste tipo bem elaborados chamam o verdadeiro sistema de login na segunda tentativa).
Senhas Ocultas (shadow passwords) aumentam consideravelmente a senha do seu
sistema pois as senhas serão armazenadas em um arquivo separado:
/etc/shadow
para senhas de usuários e /etc/gshadow
para senhas de grupos. Estes dois arquivos poderão ser acessados somente pelo
usuário root. O armazenamento de senhas no arquivo /etc/passwd
e
/etc/groups
não é seguro, estes arquivos devem ser lidos por todos
os usuários porque muitos programas mapeiam a UID do usuário com seu nome e
vice versa.
O utilitário shadowconfig
é usado para ativar/desativar o suporte
a senhas ocultas (de usuários e grupos) em seu sistema. Adicionalmente os
utilitários pwconv
/grpconv
podem ser usados
separadamente para ativar o suporte a senhas ocultas de usuários/grupos e
pwunconv
/grpunconv
para desativar este suporte.
ATENÇÃO: Caso você inclua usuários em grupos manualmente no
arquivo /etc/passwd
, também precisará fazer isto no arquivo
/etc/shadow
para que não tenha problemas. Esta tarefa é feita
automaticamente com o comando adduser usuário grupo. O programa
vipw
e vigr
também podem ser usados com a opção
-s para editar os arquivos /etc/shadow
e
/etc/gshadow
respectivamente.
O sistema de criptografia usado pelas senhas MD5 é mais seguro que o padrão Crypto e permitem o uso de senhas maiores do que 8 caracteres.
O uso de senhas MD5 é recomendado para aumentar o nível de proteção da senha.
Não use caso estiver executando um serviço de NIS. OBS: Caso
utilize senhas MD5 em um sistema com PAM, inclua a palavra md5 na
linha de configuração do método de autenticação password do módulo
pam_unix.so
:
password required pam_unix.so md5
[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ próximo ]
Guia Foca GNU/Linux
Versão 6.43 - domingo, 05 de setembro de 2010gleydson@guiafoca.org