Armazenamento de senhas no Linux
Você sabe como são armazenadas as senhas no Linux? O que é e para que serve o salt number? O que é MD5? Este artigo não pretende ir muito a fundo no mundo da criptografia, mas sim explicar os conceitos necessários para entender o arquivo de senhas, os reais ataques. Quem programa para a WEB poderá achar este artigo além de curioso, muito útil!
Parte 5: Armazenando senhas com segurança
A solução é óbvia: ao invés de armazenar uma senha eu armazeno o HASH dela.
Jamais armazeno a senha.
As vantagens são muitas pois nem mesmo o root sabe a senha de um usuário. Ele tem poderes para sobrescrevê-la mas não para saber qual era.
Para exemplificar e antes de falar como isto realmente fora implementado no Linux, vou dar novamente um exemplo hipotético usando MD5 que todos podem reproduzir em seus Linux, em uma shell.
Meu arquivo de senhas é:
login:HASH:Nome:HOME:BASH
Usuário Elgio está cadastrado e vai cadastrar a sua senha:
Changing password for elgio
(current) UNIX password:
Elgio digita como senha "Ola345". O Sistema Operacional calcula o hash de “Ola345”. Vamos calcular assim:
$ echo "Ola345"|md5sum
2d3956215ec2d09484165c0d5261303c
Está ai o hash. O sistema armazena:
elgio:2d3956215ec2d09484165c0d5261303c:Elgio Schlemer:/home/elgio:/bin/bash
Em algum momento o Elgio vai se autenticar e fornecer a sua senha. Veja que nem o Linux sabe qual é a senha. A única coisa que ele sabe é que seja lá qual for a senha, o hash dela é 2d3956215ec2d09484165c0d5261303c!
Se elgio digitar como senha "Ola346" (senha ERRADA), o sistema calcula o HASH do que o usuário digitou:
$ echo "Ola346"|md5sum
23d863d17e7b64552104747ad3c30522
Veja que não é e nem passou perto do hash armazenado. Usuário errou a senha.
Este simples método já é muito bom e pode ser usado nos sistemas de autenticações de páginas WEB com muita facilidade. Qualquer um tem implementação de MD5. 128 bits lhe parecem pouco? Use o SHA1 então.
O Windows usava (desconheço o que usa o Vista) o fraco algoritmo RC4 para cifrar suas senhas e ainda com o agravante de não diferenciar letras minúsculas de maiúsculas no lampasswd (lam pode bem lembrar "lambança". Eu realmente não falo mal da Microsoft mas neste ponto eles realmente pisaram na bola. Quem administra Windows DESATIVE URGENTEMENTE senhas no formato lampasswd).
No NTpassword melhorou muito com o uso do MD4 armazenando-as em formato HEXA decimal. Trata-se de um HASH da senha em Unicode feita várias vezes (tive que implementar em PHP isto!! tsctsctsc)
Mas o Linux vai ainda além disto...
Antes de mostrar como o Linux trata suas senhas, vamos ver os possíveis ataques que este sistema pode sofrer.
Jamais armazeno a senha.
As vantagens são muitas pois nem mesmo o root sabe a senha de um usuário. Ele tem poderes para sobrescrevê-la mas não para saber qual era.
Para exemplificar e antes de falar como isto realmente fora implementado no Linux, vou dar novamente um exemplo hipotético usando MD5 que todos podem reproduzir em seus Linux, em uma shell.
Meu arquivo de senhas é:
login:HASH:Nome:HOME:BASH
Usuário Elgio está cadastrado e vai cadastrar a sua senha:
Changing password for elgio
(current) UNIX password:
Elgio digita como senha "Ola345". O Sistema Operacional calcula o hash de “Ola345”. Vamos calcular assim:
$ echo "Ola345"|md5sum
2d3956215ec2d09484165c0d5261303c
Está ai o hash. O sistema armazena:
elgio:2d3956215ec2d09484165c0d5261303c:Elgio Schlemer:/home/elgio:/bin/bash
Em algum momento o Elgio vai se autenticar e fornecer a sua senha. Veja que nem o Linux sabe qual é a senha. A única coisa que ele sabe é que seja lá qual for a senha, o hash dela é 2d3956215ec2d09484165c0d5261303c!
Se elgio digitar como senha "Ola346" (senha ERRADA), o sistema calcula o HASH do que o usuário digitou:
$ echo "Ola346"|md5sum
23d863d17e7b64552104747ad3c30522
Veja que não é e nem passou perto do hash armazenado. Usuário errou a senha.
Este simples método já é muito bom e pode ser usado nos sistemas de autenticações de páginas WEB com muita facilidade. Qualquer um tem implementação de MD5. 128 bits lhe parecem pouco? Use o SHA1 então.
O Windows usava (desconheço o que usa o Vista) o fraco algoritmo RC4 para cifrar suas senhas e ainda com o agravante de não diferenciar letras minúsculas de maiúsculas no lampasswd (lam pode bem lembrar "lambança". Eu realmente não falo mal da Microsoft mas neste ponto eles realmente pisaram na bola. Quem administra Windows DESATIVE URGENTEMENTE senhas no formato lampasswd).
No NTpassword melhorou muito com o uso do MD4 armazenando-as em formato HEXA decimal. Trata-se de um HASH da senha em Unicode feita várias vezes (tive que implementar em PHP isto!! tsctsctsc)
Mas o Linux vai ainda além disto...
Antes de mostrar como o Linux trata suas senhas, vamos ver os possíveis ataques que este sistema pode sofrer.