Senhas e chaveiros

Vitor Mattos

incremente sua segurança

Quem sou eu?

Desenvolvedor PHP desde 2003
Amante de opensource
Evangelista PHP
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )

CTO Lyseon Tech
Redes sociais: ( VitorMattos ou VitorMattosRJ )

Quem sou eu?

Realizador de sonhos desde 1999
Amante de opensource
Palestrante

Bacharel em: Sistemas de informações, Gestão de Cooperativas, bacharelando em Teologia.
PHPRio ( https://t.me/phprio )

CTO LibreCode coop (https://t.me/LibreCodeCoop)
Redes sociais: VitorMattos

A Lyseon Tech é uma cooperativa de trabalho com modelo de gestão democrática, segura e eficiente composta por profissionais de T.I. altamente qualificados e experientes no mercado. Prezamos por apresentar vantagens, tanto para o cooperado como para as empresas parceiras.

coperativa de TI

Cronograma

Tentarei ser breve :-D

  • Introdução / definições
  • Aplicações web
    • hash
    • oAuth
    • 2FA
  • Políticas de senhas
  • Criando senhas
  • Chaveiros de senhas
    • KeePass

O que é uma senha?

Password

*

*

*

*

*

*

*

*

O que é secreto?

Dados sensíveis

Dados sensíveis

Não versione!

Armazenamento: hash

Definição: "transformação de uma grande quantidade de dados em uma pequena quantidade de informações"

Função de mão única

Mensagem
Entrada

0101001001010101010010101010101011110010101001010010101001010100101...

função hash

10101101

Saída
Tamanho fixo

plain/text, base64, md5, sha1

INSERT INTO login (username, password)
VALUES ('admin', '123456');
mysql_query("INSERT INTO login (username, password)
   VALUES ('admin', '".base64_encode('12345678')."')");
mysql_query("INSERT INTO login (username, password)
   VALUES ('admin', '".md5('12345678')."')");
mysql_query("INSERT INTO login (username, password)
   VALUES ('admin', '".sha1('12345678')."')");

Rainbow Table

Definição: "Uma rainbow table é uma tabela de consulta de hashes pré calculados."

Evitando Rainbow Table

Evitando Rainbow Table

password_hash

php > for($i=1;$i<=3;$i++)
php > echo password_hash("Vitor Mattos", PASSWORD_DEFAULT)."\n";
$2y$10$iDT0scwr0cP28mb.J0edvOKmmHdGfonvQcnrlQnc6M0BIUoZQ/waW
$2y$10$Dmfc8Dc9ohV2lKnOjk5IxehCos6AayVx/vvgz78MuIy9KaxVKuChe
$2y$10$rVlAfjB3CX8ZmwjCT8boL.Wi8pFMsUZzTkA5XDSsTNbzBa2vvZ3xC
var_dump(password_verify(
  "Vitor Mattos",
  "$2y$10$Dmfc8Dc9ohV2lKnOjk5IxehCos6AayVx/vvgz78MuIy9KaxVKuChe"
));

Criando hash

Validando hash

true

Corrigindo o problema

if ($hash == md5($_POST['password'])) {
    $hash = password_hash(
        $_POST['password'],
        PASSWORD_DEFAULT
    );
    $db->exec(
        "UPDATE login SET password = ? WHERE user = ?"
    );
}

Bruteforce

hashcat is the world’s fastest and most advanced password recovery tool.

This version combines the previous CPU-based hashcat (now called hashcat-legacy) and GPU-based oclHashcat.

Hashcat is released as open source software under the MIT license.

Cluster GPU

25 GPUs brute force 348 billion hashes per second to crack your passwords

Cálculo de complexidade

Entropia: "média de informação transmitida por um evento, quando se considera todos os resultados possíveis"

Bruteforce

Bruteforce

Senhas complexas e pequenas só são difíceis de decorar, mas continuam sendo simples de quebrar.

oAuth

oAuth

Segurança

"Facebook hackeado: ataque atinge 50 milhões de usuários"

2018-09-28

oAuth

Privacidade

2FA, 3FA, 4FA, ..., nFA

2FA, 3FA, 4FA, ..., nFA

Quem aceita?

2FA, 3FA, 4FA, ..., nFA

Token SMS

2FA, 3FA, 4FA, ..., nFA

TOTP, o que é?

"Time-based One-Time Password algorithm (TOTP)"

2FA, 3FA, 4FA, ..., nFA

Hardware de TOTP

2FA, 3FA, 4FA, ..., nFA

Hardware de TOTP: riscos

2FA, 3FA, 4FA, ..., nFA

TOTP no celular

2FA, 3FA, 4FA, ..., nFA

TOTP no celular: riscos

Prefira sempre HTTPS

Política de senhas

Política de senhas

Desculpe, sua senha deve conter uma letra maiúscula, dois números, um símbolo, uma mensagem inspiradora, um feitiço, um sinal de gangue, um hieróglifo e o sangue de uma virgem.

Política de senhas

Limite máximo

Criando senhas

Vazamento

Criando senhas

Vazamento: senhas comuns

Criando senhas

Vazamento: toda senha deve ser forte

Criando senhas

trate sua senha como sua escova de dentes

Escolha uma boa

Nunca compartilhe

Troque com certa frequência

Criando senhas

Evite:

  • informações pessoais
  • redes sociais revelam senhas
  • observadores

Criando senhas

Evite: anotar senhas

Criando senhas

Evite: salvar em arquivos abertos

/*/senhas.txt

/*/password.txt

/*/senhas.xlsx

Criando senhas

Faça:

  • passphrase
  • senhas únicas
  • caracteres especiais e aleatórios
  • distribuição de proporcional de caracteres
  • senhas longas
  • mude se alguém criou

Senhas geradas por humanos

  • baixa entropia
  • Memória humana falha

Segurança x Conveniência

Chaveiros de senhas:

O que são?

Chaveiros de senhas:

porque usar?

Senhas grandes - entropia

Senhas únicas

Não perder senhas

Ocupar a mente com o que é importante

Onde usar?

Navegadores

Aplicações desktop

Terminal

Celular

Chaveiros de senhas:

Riscos: Salvar no navegador

  • Nem sempre se tem backup
  • Extensões maliciosas
  • Alguém pode usar seu pc

Chaveiros de senhas:

Riscos: Chaveiro na nuvem

Chaveiros de senhas:

Riscos: Terceiros guardarem suas senhas

Google e outros serviços de chaveiro online proprietários

CLOUD Act
compliance problems

  • LGPD
  • GDPR

OpenSource

4 liberdades do software livre

Liberdade nº 0: A liberdade para executar o programa, para qualquer propósito;

Liberdade nº 1: A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades. Acesso ao código-fonte é um pré-requisito para esta liberdade;

Liberdade nº 2: A liberdade de redistribuir de forma que você possa ajudar o seu próximo;

Liberdade nº 3: A liberdade de modificar o programa, e liberar estas modificações, de modo que toda a comunidade se beneficie. Acesso ao código-fonte é um pré-requisito para esta liberdade;

Chaveiros livres

  1. Passbolt
  2. Bitwarden
  3. KeePass
Passbolt Bitwarden KeePass
Web 🟢 🟢 🟢*
Compartilhar com grupos 🟢 🟢 🟢
Suporte a TOTP 🟢 🟢 🟢
Funciona offline 🔴 🟢* 🟢
Clientes plataformas populares 🔴 🟢 🟢
100% open source 🔴 🔴 🟢
Simplicidade setup 🔴 🔴 🟢
SSH Agent 🔴 🔴 🟢
Autotype 🔴 🔴 🟢
Anexar arquivos 🔴 🔴* 🟢
Tags 🔴* 🔴 🟢

Chaveiros livres: KeePass

Clientes

KeePass

Primeira versão livre

 

Escrito em .NET

 

É multiplataforma.

Funciona em sistemas Linux mas precisa do Mono, fica meio feio

Clientes

KeePassX

Como o nome já diz, cross platform.

 

Problema: projeto descontinuado

Clientes

KeePassXC

Um fork do KeePassX...

 

Só que mantido pela comunidade, este aceita PR e é um projeto bem ativo.

Clientes

Celular

Para iPhone, nunca usei, nem quero usar. 😜

Clientes

Celular

  • Interface bem amigável
  • Teclado exclusivo
    (facilita muito)
  • Aceita plugins
  • Desbloqueio biométrico
  • Pode abrir várias bases de dados simultaneamente
  • Autocomplete ( Andriod  >= 8)

Clientes

Celular

  • Interface bem amigável
  • Teclado exclusivo
    (facilita muito)
  • Aceita plugins
  • Desbloqueio biométrico
  • Pode abrir várias bases de dados simultaneamente
  • Autocomplete ( Andriod  >= 8)

Criando o primeiro chaveiro

Criando o primeiro chaveiro

Configurações de criptografia

Senha mestre

  • Troque de vez em quando
  • Esta deve ser complexa
  • Multifator
  • Bloquear chaveiro ao bloquear máquina
  • Cuidado com pessoas observando
  • Não confie em sua memória, tenha alguém de confiança para backup da senha

Senha mestre

 

Use em computadores seguros:


Keyloggers

Onde salvar?

Sincronismo

Proprietários

Criando a base de dados

Diferentes bases para diferentes fins

  • Clientes
    • Empresa A
    • Empresa B
  • Pessoais
  • Outras pessoas

Novo registro

O que salvar no chaveiro?

  • Senhas (dãããhh)
  • Dados de documentos
  • Dados de cartões
  • Anotações secretas diversas
  • Chaves de SSH
  • Outras chaves de autenticação
  • Mapa do tesouro

Novo registro

Geração de senhas

Novo registro

Campos extras

Novo registro

Importação de senhas

Autotype

Tecla de atalho

CTRL+SHIFT+V

Autotype

Tecla de atalho global

Autotype

Tecla de atalho global

Autotype

Sequência configurável

TOTP

Integrando com navegador

Integrando com navegador

Integrando com navegador

Nas configurações do navegador:

 

  • Desabilitar autocomplete
  • Desabilitar de salvar senhas

ssh-agent

1 - Criar uma senha para a chave privada e copiar

ssh-agent

2 - Gerar uma chave SSH com a senha copiada

~$ ssh-keygen -t rsa -b 4096 -o -f id_rsa -C user@email.com
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:/0AquhdSloVxKketevMFRknU+UgniQI4OxWzZOv2HHg user@email.com
The key's randomart image is:
+---[RSA 4096]----+
|   .*oo*++ o     |
|  oo.=oo* * .    |
|   ++ o* . =     |
|  o. += o . .    |
|   .++E.S..      |
|   .o++. +.      |
|     o++..o      |
|     ....  o     |
|    oo      .    |
+----[SHA256]-----+

ssh-agent

2 - Anexar o arquivo id_rsa no KeePass

ssh-agent

3 - Informar onde está a chave privada e utilizar a pública

ssh-agent

3 - Informar onde está a chave privada e utilizar a pública

~$ ssh-add -l
4096 SHA256:6hKPtN8/Kb9ZUz12rRwevxHf2qdvJ8x4b6fB3fS2oOk user@email.com (RSA)
~$ git clone git@github.com:vitormattos/crack-password-calc.git
Cloning into 'crack-password-calc'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 67 (delta 23), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (67/67), 26.59 KiB | 41.00 KiB/s, done.
Resolving deltas: 100% (23/23), done.

Temas

1 - Instalar o qt5ct

sudo apt install qt5ct

2 - Exportar a seguinte variável:
     OBS: pode colocar no arquivo ~/.profile

export QT_QPA_PLATFORMTHEME="qt5ct"

3 - Execute o programa qt5ct e escolha um tema

Referências

https://keepassxc.org/

https://keepass.info/

https://wpengine.com/unmasked/

https://en.wikipedia.org/wiki/List_of_data_breaches

https://github.com/hashcat/hashcat

https://php.net/password_hash

 

The life

Obrigado!

Redes sociais:
( VitorMattos ou VitorMattosRJ )