umgeher's changelog

Crypto

SSH

Secure Shell (SSH) e’ um protocolo de rede cryptografado. Usamos SSH para ter acesso a outro computador de forma segura em um ambiente nao seguro.

“A little bit of math can accomplish what all the guns and barbed wire can’t: a little bit of math can keep a secret.”

– Edward Snowden

Historia

Tatu Ylönen, pesquisador na Teknillinen korkeakoulu, em Helsinki, Finlandia, criou o SSH em 1995. A primeira versao do protocolo leva o nome de SSH-1. O objetivo do protocolo e' subtistuir os protocolos telnet, ftp, rlogin e rsh. Fornecendo autenticacao e seguranca na comunicao entre as maquinas.

Em 1999, desenvolvedores do OpenBSD fizeram um fork da ultima versao open-source do SSH (1.2.12), e esse fork ganhou o nome de OpenSSH.

O OpenSSH se tornou a implementacao mais popular e usada no ano de 2005. Ele e’ o servidor default de varios sistemas operacionais e distribuicoes.

OpenSSH

OpenSSH

Existem varias implementacoes de servidores SSH. Porem a mais usada, conhecida e (na minha opiniao) melhor versao e’ do OpenBSD, chamado de OpenSSH. Deste ponto para frente, irei tratar OpenSSH apenas como SSH.

Instalacao

SSHD (servidor do SSH) ja’ deve estar instalado em seu sistema operacional. Caso nao, recomendo voce trocar de sistema operacional.

Configuracao

Normalmente o arquivo de configuracao do SSHD esta’ localizado em /etc/ssh/sshd_config.

Algumas opcoes que eu gosto de deixar configurado:

AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes

AuthorizedKeysFile

Local onde as chaves publicas sao colocadas para serem usadas/aceitas como authentication para um usuario. Recomendo deixar no default (.ssh/authorized_keys .ssh/authorized_keys2).

ChallengeResponseAuthentication

Diz se o usuario pode logar usando o teclado… =) Eu sempre deixo como no.

Detalhe, ChallengeResponseAuthentication e’ um alias hoje, o nome da opcao agora e’ KbdInteractiveAuthentication.

PasswordAuthentication

Diz se o usuario pode usar password para authentication. Nunca deixe yes aqui… sempre no.

PermitEmptyPasswords

Configura se um usuario pode ser logar sem password. Deixe como no.

PermitRootLogin

Configura se o servidor vai aceitar o root fazer login. Recomendo deixar sempre em no.

PubkeyAuthentication

Especifica se usuario pode entrar usando chaves primarias contra chaves publicas. Deixe como yes.

Client

Novamente, seu sistema ja’ deve vir com OpenSSH Client instalado. Caso nao, recomendo mudar de sistema operacional!

Gerar Chaves

Devemos usar sempre chaves para fazer authentication. Para gerar um par de chaves, use o comando:

ssh-keygen -t ed25519

Segue um screen-shot mostrando o ssh-keygen.

sshkeygen

Eu setei o destino da chave criada para /tmp/ssh-demo so’ para nao re-escrever a minha chave atual. Se for a primeira vez que esta' criando a chave, apenas aceite o default.

Use uma senha forte, que voce nao vai esquecer!

E nao use RSA! Use ed25519.

Authentication

Para voce configurar um user conseguir logar usando a chave privada dele. Coloque a chave publica do user no ~/.ssh/authorized_keys.

sshauth

Nesse exemplo, eu usei minha chave publica, localizada em ~/.ssh/id_ed25519.pub no arquivo ~/.ssh/authorized_keys.

Conectar

Para conectar a um SSHD, simplemente use o comando:

ssh seuUserNaMaquinDestino@maquinaDestino

Exemplo:

ssh umgeher@umgeher.org

Tunnel SSH

Com SSH podemos criar um tunnel de uma forma muito simples.

Vamos usar o seguinte senario.

Eu estou na minha workstation, chamada raven. Vou conectar em uma maquina remota, chamada, tyr. A maquina tyr esta’ dentro de uma rede que existe varios servicos la’ dentro, porem quero conectar na maquina lunna que tem um HTTPd servido uma intranet. Eu via SSH consigo fazer com que meu browser local, na maquina raven, consiga conectar na intranet na maquina remota lunna.

Um simples comando:

ssh -L 8080:192.168.20.245:80 umgeher@tyr

No caso, lunna tem um ip fixo dentro da rede, onde tyr tem acesso, 192.168.20.245. No meu browser eu vou acessar a intranet via localhost:8080. Essa porta esta’ ligada a porta 80 da maquina lunna via a minha connection ssh da maquina tyr.

Explicando o argumento -L, Porta Local : IP Destino : Porta Destino.

PGP

“Cryptography is the ultimate form of non-violent direct action.”

– Julian Assange

PGP (Pretty Good Privacy) e’ um conjunto de software desenvolvido pelo Philip R. Zimmermann para assinar, encriptar e descriptar arquivos.

Hoje normalmente usamos o OpenPGP e o GnuPG, duas versoes open-source do PGP. Sendo o mais comum, e tratado aqui como default, o GnuPG.

Como funciona

O PGP gera um par de chaves, uma privada e uma publica. Cada chave e' uma longa string de chars gerados randomicamente e de forma unica para voce. Sua chave publica e’ ligada a sua chave privada usando uma funcao matematica especial.

A chave publica pode e deve ser distribuida para quem voce quiser. A chave publica que e’ usada para criptografar os arquivos para voce. Existem servidores de chaves publicas, que chamamos de keyserver. Neles e’ possivel enviar sua chave publica, facilitando a quem quiser enviar uma msg, arquivo ou qualquer outra coisa de forma criptografado para voce.

Ja’ a sua chave privada nao deve ser distribuida e nem compartilhada para ninguem. Repito, sua chave privada nao deve ser compartilhada ou distribuida para ninguem de forma nenhuma. A sua chave privada e’ usada para descriptar os arquivos e msgs que voce vai receber.

Ilustracao

Para efeito de ilustracao, imagine que voce e seu amigo querem trocar presentes e nao querem que ninguem saiba o que e’. Cada um de voces tem uma chave e um cadeado. Voces trocam os seus cadeados. Cada um coloca o presente em uma caixa e tranca com o cadeado. Depois de trancado, so’ quem tem a chave do cadeado pode abrir a caixa e pegar o presente.

O cadeado no caso e’ a sua chave publica. E a chave para abrir o cadeado e’ a chave privada.

Install

OpenBSD, meu OS do dia dia, ja’ vem com o GnuPG, se voce usa alguma distro Linux, bem provavel que ja’ venha com ele instalado, caso nao, procure a documentacao da sua distro.

Gerar par de chaves

Execute…

gpg --full-generate-key

Use a opcao 1 RSA and RSA. Coloque o maior keysize possivel, sempre. O recomendado e’ colocar uma data de expiracao da chave, no meu exemplo eu nao coloquei. Mas e’ recomendado 2 anos. Coloque suas informacoes, caso queira e digite uma senha forte e segura para essa chave.

gpg-full-generate-key

Upload da public key

Agora voce pode fazer o upload da sua public key para um KeyServer.

Primeiro, copie o seu keyID. Para saber seu keyID, digite gpg -k [seu@email].

gpg-list-keys

No meu caso e’ A2CF45BE990C0E05F3FB31809647DB206B51315F.

Agora voce pode fazer o upload da sua public key.

gpg --send-key [keyID]

Exportar public key

Uma opcao1 e’ exportar sua public key para voce copiar e colcar ou em um arquivo. Para isso digite…

gpg --export -a [seu@email]

Isso vai exportar sua chave para o console.

gpg-export

Caso queira para um arquivo apenas direcione para um arquivo.

gpg --export -a [seu@email] > publickey.asc

gpg-export

Fingerprint

Para ver seu fingerprint da sua chave, execute:

gpg --fingerprint [seu@email]

Cryptografar um arquivo

Para cryptografar um arquivo digite…

gpg -e -r [keyID/email] [arquivo]

gpg-e

Nesse exemplo, eu compactei o conteudo do diretorio keeper2 usando o comando tar -zcvf k.tar.gz keeper. Depois eu cryptografei ele (para mim mesmo3) usando o comando gpg -e -r me@umgeher.org.

Descryptografar um aqruivo

Quando voce receber um arquivo cryptografado deve executar…

gpg -d [arquivo]

gpg-d

Nesse exemplo eu descryptografo o aqruivo que acabei de cryptografar e descompacto para mostrar que os mesmos artefatos estao la'.

Importar chave publica

Voce pode importar qualquer chave publica utilizando o comando…

gpg --import [arquivo-chave-publica]

Exemplo, para importar minha chave publica voce pode executar…

curl -sL https://umgeher.org/umgeher-public-key.asc | gpg --import

Agora voce pode cryptografar qualquer arquivo usando minha chave publica…

gpg -e -r me@umgeher.org [arquivo]

  1. O uso de keyservers e’ otimo, porem eu recomendo voce deixar sua chave publica em um local que todos confiem que e’ realmente voce. No meu caso, eu deixo no meu site, meu main mastodon, no sr.ht e no keyoxide↩︎

  2. Nemeth’s Quake map… Mandei um email perguntando se ele deixou esse map public, caso sim, vou deixar o link aqui depois. ↩︎

  3. Antigamente eu deixava meu backup de coisas sensiveis cryptografado com pgp. Hoje eu uso outra ferramenta. Vou escrever sobre ela quando sugir a oportunidade. ↩︎