AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 478433
Accepted
confetti
confetti
Asked: 2018-10-30 05:01:27 +0800 CST2018-10-30 05:01:27 +0800 CST 2018-10-30 05:01:27 +0800 CST

Quão seguro é o SSH quando usado para tunelamento?

  • 772

Cenário: Desejo conectar do Cliente A ao Cliente B usando SSH/SFTP. Não consigo abrir portas em nenhum dos clientes. Para resolver esse problema, consegui um VPS barato para usar como servidor de retransmissão.

No Client BI, conecte-se ao VPS com encaminhamento de porta remoto conforme a seguir:

ssh -4 -N -f -R 18822:localhost:22 <user>@<vps-ip>

No VPS, configurei o encaminhamento de porta local usando -g(global) assim:

ssh -g -f -N -L 0.0.0.0:18888:localhost:18822 <user>@localhost

Dessa forma, posso me conectar do Cliente A diretamente ao Cliente B em <vps-ip>:18888. Funciona bem.

Agora minha pergunta é, quão seguro é isso? Até onde eu sei, as conexões SSH/SFTP são totalmente criptografadas, mas há alguma chance de torná-las menos seguras usando o VPS no meio?

Vamos supor estes dois casos:

Caso A: O próprio VPS não é alterado, mas o tráfego e os arquivos são monitorados completamente.

Caso B: O VPS está completamente comprometido, o conteúdo do sistema de arquivos pode ser alterado.

Se eu agora enviar um arquivo do Cliente A para o Cliente B por SFTP, seria possível para a empresa que hospeda o VPS "interceptar" e ler o conteúdo do arquivo (não criptografado)?

networking ssh
  • 2 2 respostas
  • 2842 Views

2 respostas

  • Voted
  1. Best Answer
    user232326
    2018-11-02T03:12:23+08:002018-11-02T03:12:23+08:00

    O que você fez

    Você usou três comandos ssh:

    1. Enquanto dentro de um console B você fez:

      ssh -4 -N -f -R 18822:localhost:22 <user>@<vps>
      

      Comando sshd (o servidor) para abrir port 18822, uma porta remotavps:18822 conectada ao localhost (B) porta 22.

    2. Enquanto em um console vps você fez:

      ssh -g -f -N -L 0.0.0.0:18888:localhost:18822 <user>@localhost
      

      Comando ssh (o cliente) para abrir a porta 18888disponível como uma porta externa ( 0.0.0.0) em ( vps) que se conecta à porta interna 18822.

      Isso abre uma porta visível na Internet vps:18888que redireciona o tráfego para o 18822qual, por sua vez, redireciona para B:22.

    3. Enquanto estiver em um console A (e a única conexão em que A participa):

      Conecte-se do Cliente A diretamente ao Cliente B em vps:18888.

    O que importa é essa última conexão.
    Toda a segurança SSH depende da autenticação de A para B .

    O que significa

    O protocolo SSH

    O SSH fornece um canal seguro em uma rede não segura

    Usando criptografia de ponta a ponta

    A criptografia de ponta a ponta (E2EE) é um sistema de comunicação onde apenas os usuários em comunicação podem ler as mensagens. Em princípio, ele evita que potenciais bisbilhoteiros – incluindo provedores de telecomunicações, provedores de Internet e até mesmo o provedor do serviço de comunicação – possam acessar as chaves criptográficas necessárias para descriptografar a conversa.

    A criptografia de ponta a ponta é um conceito. SSH é um protocolo. O SSH implementa criptografia de ponta a ponta. Assim como https, ou qualquer outro número de protocolos com criptografia.

    Se o protocolo for forte e a implementação estiver correta, as únicas partes que conhecem as chaves de criptografia são as duas partes autenticadas (final).

    Não conhecendo as chaves e não podendo quebrar a segurança do protocolo, qualquer outra parte é excluída do conteúdo da comunicação.

    Se , como você descreve: do Cliente A diretamente para o Cliente B , você está autenticando diretamente no sistema B, então , apenas o Cliente A e o cliente B possuem as chaves. Nenhum outro.

    Q1

    Caso A: O próprio VPS não é alterado, mas o tráfego e os arquivos são monitorados completamente.

    Apenas o fato de que uma comunicação (dia, hora, IPs finais, etc.) está ocorrendo e que alguma quantidade de tráfego (kbytes, MBytes) pode ser monitorada, mas não o conteúdo real do que foi comunicado.

    Q2

    Caso B: O VPS está completamente comprometido, o conteúdo do sistema de arquivos pode ser alterado.

    Não importa, mesmo que a comunicação seja redirecionada através de alguns outros sites/locais, as únicas duas partes que conhecem as chaves são A e B. Ou seja: Se a autenticação no início da comunicação foi entre A e B.

    Opcionalmente, verifique a validade do IP ao qual A está se conectando, então: use autenticação de chave pública (use apenas uma vez um par de chaves privada-pública que apenas A e B conhecem), feito.

    Entenda que você deve garantir que a chave pública utilizada seja transportada com segurança para o sistema B. Você não pode confiar no mesmo canal para transportar as chaves e depois carregar a criptografia. Existem ataques Man-in-the-middle que podem quebrar o protocolo .

    Q3

    Se eu agora enviar um arquivo do Cliente A para o Cliente B por SFTP, seria possível para a empresa que hospeda o VPS "interceptar" e ler o conteúdo do arquivo (não criptografado)?

    Não, se as chaves públicas foram colocadas com segurança em ambas as extremidades, há uma probabilidade muito pequena de que isso aconteça.

    Ande com o disco com a chave pública do outro lado para instalá-lo, nunca mais se preocupe.


    Comente

    Do seu comentário:

    Q1

    Então, basicamente, o VPS na minha configuração não faz nada além de encaminhar as portas e não está envolvido na conexão SSH real ou na autenticação acontecendo do Cliente A para o B, correto?

    Tipo de. Sim, o VPS não deve estar envolvido na autenticação. Mas é "In-The-Middle", ou seja, recebe pacotes de um lado e os entrega (se estiver funcionando corretamente) para o outro lado. Mas há uma alternativa, o VPS (ou qualquer coisa no meio) pode optar por mentir e realizar um "ataque do homem no meio" . Poderia mentir para o Cliente-A fingindo ser o Cliente-B e mentir para o Cliente-B fingindo ser o Cliente-A. Isso revelaria tudo dentro da comunicação com o "Man-In-The-Middle". É por isso que enfatizo a palavra deveria acima.

    Devo dizer também que :

    ...não há ferramentas implementando MITM em uma conexão SSH autenticada usando o método de chave pública...

    A autenticação baseada em senha não é o método de chave pública.

    Se você se autenticar com uma senha, poderá estar sujeito a um ataque man-in-the-middle. Existem várias outras alternativas, mas estão fora do escopo deste post.

    Basicamente, use ssh-keygen para gerar um par de chaves (vamos supor no lado A) e (para segurança correta) carregue a parte pública dentro de um disco para o lado B e instale-a no arquivo Authorized-keys. Não use a rede para instalar a chave pública, ou seja: não use o ssh-copy-id pela rede a menos que você realmente saiba exatamente o que está fazendo e seja capaz de verificar a identidade do lado B. Você precisa ser um especialista para fazer isso com segurança.

    Q2

    Sobre a chave pública, porém, não é, bem, pública?

    • Sim, é público.
      Bem, sim, a entidade que gerou o par público-privado poderia publicar a parte pública para qualquer um (todos) e não perderia nenhum segredo. Se alguém criptografar apenas com sua chave pública, poderia descriptografar qualquer mensagem com a chave privada correspondente (e secreta).

    • Criptografia SSH.
      A propósito, a criptografia SSH é simétrica e não assimétrica (pública). A autenticação é assimétrica (seja DH ( Diffie-Hellman ) (para senhas) ou RSA, DSA, Ed25519 Key Strength ou outros (para chaves públicas)), então uma chave simétrica é gerada a partir dessa autenticação e usada como chave de criptografia de comunicação.

    • Usado para autenticação.
      Mas para o SSH, a chave pública (gerada com ssh-keygen) carrega um segredo adicional: ela autentica o dono da chave pública.

      Se você receber uma chave pública da Internet: Como você sabe a quem ela pertence? Você confia no que a chave pública afirma ser? Você não deveria !!

      É por isso que você deve levar o arquivo de chave pública para o servidor remoto (de forma segura) e instalá-lo lá. Depois disso, você pode confiar nessa chave pública (já verificada) como um método para autenticá-lo para fazer login nesse servidor.

    Q3

    Eu me conectei do VPS, principalmente para teste, ao Cliente B antes também, isso já não troca a chave pública?

    Ele troca um conjunto de chaves públicas (um conjunto de chaves públicas geradas por DH) usadas para criptografia. Não a chave pública de autenticação gerada com ssh-keygen. A chave usada nessa comunicação é apagada e esquecida assim que a comunicação é encerrada.

    Bem, você também aceitou (e usou) uma chave para autenticar o IP do servidor remoto. Garantir que um IP seja seguro é ainda mais complexo do que uma simples autenticação de chave pública ( ?? ).

    Minha impressão foi que a chave pública pode ser compartilhada, mas a chave privada ou senha deve ser mantida em segurança.

    E sua impressão (geral) está correta, mas o diabo está nos detalhes...

    Quem gerou um par de chaves poderia publicar sua chave pública sem qualquer diminuição de sua segurança.

    Quem recebe uma chave pública deve confirmar de forma independente que a chave pública pertence a quem acredita que ela pertence.

    Caso contrário, o receptor de uma chave pública pode estar se comunicando com um parceiro maligno.

    Gere sua chave

    • 8
  2. ctrl-alt-delor
    2018-11-06T07:51:51+08:002018-11-06T07:51:51+08:00

    Se você usar ssh para conectar A a C e depois C a B, então não é de ponta a ponta. É extremidade para C, e C para outra extremidade. C pode ver o que está sendo transmitido.

    Para criptografia de ponta a ponta, você precisa de ssh para conectar as duas extremidades. Não importa o que você passa.

    Se as duas extremidades não puderem ver uma à outra, mas puderem ver C, você poderá configurar as conexões (seguras ou não) A—C e B—C. Em seguida, use ssh para fazer uma conexão segura A—B.

    • -1

relate perguntas

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • rsync porta 22 e 873 uso

  • Aborto repentino do SCP: tubo quebrado, código de autenticação de mensagem incorreto

  • Incapaz de identificar qual saída de endereço MAC do comando arp ou comando ip está correta

  • Roteador estranho funciona com centos 6 [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve