Configurando o FWKnop com criptografia assimétrica

A utilização de criptografia simétrica permite que o nível de segurança seja normalmente maior do que ao utilizarmos a forma tradicional de port knocking. Conforme exposto anteriormente, caso um individuo (atacante) esteja
realizando o sniffing na rede, obter a knock sequence seria uma tarefa muito simples.

Entretanto, o ponto vulnerável no uso de SPA refere-se ao uso da senha, que caso descoberta permitiria ao atacante ter que se preocupar em descobrir a porta de batida (se diferente da padrão), e claro, descriptografar o pacote enviado pelo cliente para
descobrir também a porta que desejamos abrir no servidor.

Para reforçar ainda mais o nível de segurança, iremos realizar a implementação do uso de criptografia assimétrica através do GNU PGP. O uso de criptografia assimétrica permite que um par de chaves (pública e privada) sejam utilizadas na
criptografia/descriptografia do pacote SPA.

A implementação que iremos realizar a seguir utilizará dois pares de chaves, sendo um par gerado no servidor e o outro no cliente. O servidor irá fornecer sua chave pública ao cliente, e o cliente irá fornecer sua chave pública ao servidor.

Deste modo, quando o cliente enviar informações ao servidor durante o processo de port knocking, o cliente irá criptografar os dados com a chave pública do servidor, e o servidor, realizará o processo de descriptografia utilizando sua chave privada.

Gerando as chaves pública e privada no servidor

Através do comando abaixo iremos gerar o par de chaves no servidor:

# gpg –gen-key

Escolha a opção (1) e pressione ENTER. Em seguida pressione ENTER novamente para que o tamanho da chave seja de 2048 bits. Outrossim, pressione ENTER novamente para que a opção (0) seja escolhida, e a nossa chave não expire. Em seguida digite “y” e
pressione ENTER para confirmar as opções escolhidas. A seguir será solicitado o “Real name”, podemos preenche-lo com o valor “server”.

Os próximos campos: “Email address” e “Comment” podemos deixar de preencher. A próxima etapa será a confirmação das informações preenchidas, deste modo, digite “o” e pressione ENTER. Outrossim, seremos questionados sobre a senha que será utilizada como
proteção a nossa chave privada, sendo extremamente recomendável utiliza-la. Neste tutorial, uso como exemplo a senha “skynet1234”.

Em seguida iremos listar informações referente a chave gerada. Será necessário verificarmos o ID da chave (gerado com base na fingerprint da chave).

# gpg –list-keys

Supondo que o comando anterior tenha gerado o seguinte resultado:

pub 1024D/XYZK9999 2009-11-27
uid server
sub 2048g/XXXX7777 2009-11-27

A informação em negrito ( XYZK9999 ) é o ID da chave, que será utilizada para exporta-la em um arquivo com codificação ASCII.

# gpg -a –export XYZK9999 > server.pub

Copiando a chave pública para o Cliente

# scp server.pub fulano@10.10.20.2:~

Gerando as chaves pública e privada no cliente

$ gpg –gen-key

Assim como no servidor o processo é idêntico, mas apenas iremos escolher um valor diferente para o Real name, e uma nova senha para a chave privada do cliente. Escolha a opção (1) e pressione ENTER. Em seguida pressione ENTER novamente para que o tamanho
da chave seja de 2048 bits. Outrossim, pressione ENTER novamente para que a opção (0) seja escolhida, e a nossa chave não expire.

Em seguida digite “y” e pressione ENTER para confirmar as opções escolhidas. A seguir será solicitado o “Real name”, podemos preenche-lo com o valor “client“. Os próximos campos: “Email address” e “Comment” podemos deixar de preencher. A
próxima etapa será a confirmação das informações preenchidas, deste modo, digite “o” e pressione ENTER.

Em relação a senha que será utilizada como proteção a nossa chave privada, irei considerar que a senha será “skynet5678“. Verificaremos a seguir o ID da chave para exporta no chave pública para ser utilizada pelo servidor.

$ gpg –list-keys

pub 1024D/TXKM0000 2009-11-27
uid client
sub 2048g/YYYY1111 2009-11-27

Utilize agora o ID da chave pública ( TXKM0000 ) para exportar a chave.

# gpg -a –export TXKM0000 > client.pub

Copiando a chave pública para o Servidor

# scp client.pub root@10.10.20.10:~

Importando e assinando a chave pública

Com os arquivos copiados no servidor e cliente, procederemos agora com a importação e assinatura da chave pública.

No servidor realize o seguinte procedimento:

# gpg –import client.pub
# gpg –edit-key TXKM0000

Salientando que, o ID ( TXKM0000 ) refere-se a chave pública do cliente. Em seguida ao exibir o prompt do GPG, informe o comando “sign” e seguida pressione “y” para confirmar a assinatura da chave.

Como criamos nosso par de chaves (no servidor e no cliente) e a chave privada foi protegida por uma senha, neste momento, deveremos informar a senha da chave privada do servidor, no caso skynet1234.

Para finalizar o uso do shell do GPG digite “quit” e informe “y” para salvar as alterações realizadas.

Da mesma forma que realizamos no servidor, no cliente:

$ gpg –import server.pub
$ gpg –edit-key XYZK9999

Realize a assinatura através do comando “sign”, informe a senha da chave privada do cliente (skynet5678), finalize o shell e confirme as alterações.

Com o processo de geração, importação e assinatura realizado no servidor e cliente, iremos efetuar algumas alterações no arquivo /etc/fwknop/access.conf para adequa-lo ao uso do PGP.

# cp /etc/fknop/access.conf /etc/fwknop/access.conf.old
# vi /etc/fknop/access.conf

O arquivo deverá possuir as seguintes informações:

SOURCE: ANY;
OPEN_PORTS: tcp/22;
# ID da chave pública do Cliente
GPG_REMOTE_ID: TXKM0000;
# ID da chave privada do Servidor
GPG_DECRYPT_ID: XYZK9999;
# Senha para uso da chave privada do Servidor
GPG_DECRYPT_PW: skynet1234;
GPG_HOME_DIR: /root/.gnupg;

É importante lembrar que toda e qualquer alteração realizada nos arquivos de configuração do FWKnop implica no reinicio dos seus daemons, sendo este realizado através do chamada ao script fwknop com o parâmetro restart.

# /etc/init.d/fwkop restart

Para o acompanhamento durante os testes, por exemplo, utilize a ferramenta tail.

# tail -f /var/log/messages

No cliente iremos realizar o envio do SPA utilizando criptografia assimétrica.

$ fwknop -A ‘tcp/22’ -a 10.10.20.2 -D 10.10.20.10 –Server-port 64003 –gpg-recip XYZK9999 –gpg-sign TXKM0000

O comando terá apenas alguns parâmetros adicionais referentes ao PGP.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X