A cada dia que passa, a segurança de­sem­pe­nha um papel mais im­por­tante na internet. O protocolo de segurança SSH (Secure Socket Shell), por exemplo, parte do conjunto de pro­to­co­los TCP/IP, permite que usuários es­ta­be­le­çam uma conexão segura entre dois com­pu­ta­do­res. Ele é usado desde 1995 e foi atu­a­li­zado diversas vezes ao longo do tempo. Aprenda o que é SSH, conheça seus termos mais im­por­tan­tes e entenda como a crip­to­gra­fia funciona no protocolo SSH.

Fato

Shell é a parte do sistema ope­ra­ci­o­nal que permite que usuários acessem o com­pu­ta­dor. Nor­mal­mente, a expressão diz respeito à uma linha de comando baseada em texto (prompt de comando, terminal ou console), mas a interface gráfica do usuário também é chamada de shell. Já o método de es­ta­be­le­cer uma conexão é chamado Secure Socket Shell.

Para que serve o protocolo SSH?

O protocolo SSH pos­si­bi­lita que dois com­pu­ta­do­res es­ta­be­le­çam uma conexão direta e segura dentro de uma rede po­ten­ci­al­mente insegura, como é o caso da internet. Seu uso é ne­ces­sá­rio para que terceiros não consigam acessar o fluxo de dados, pois isso pode fazer com que dados sensíveis caiam em mãos erradas. Antes do sur­gi­mento do Secure Socket Shell, outras formas de es­ta­be­le­cer uma conexão direta entre dois com­pu­ta­do­res existiam. No entanto, as apli­ca­ções da época, como Telnet, Remote Shell e rlogin, eram inseguras. Já o SSH crip­to­grafa a conexão entre dois com­pu­ta­do­res, per­mi­tindo que um desses com­pu­ta­do­res seja operado re­mo­ta­mente pelo outro.

O protocolo SSH não oferece apenas uma conexão crip­to­gra­fada, como também garante que conexões sejam es­ta­be­le­ci­das somente entre com­pu­ta­do­res de­sig­na­dos, ou seja, ataques man-in-the-middle ficam im­pos­si­bi­li­ta­dos. Isso assegura que dados trans­mi­ti­dos não sejam ma­ni­pu­la­dos enquanto estiverem a caminho do des­ti­na­tá­rio. Com­pu­ta­do­res remotos sempre foram acessados por linhas de comando, usadas para enviar ins­tru­ções ao dis­po­si­tivo remoto. No entanto, hoje também é possível usar o protocolo VNC (Virtual Network Computing) para espelhar uma interface gráfica do usuário (que nem sempre está dis­po­ní­vel nos ser­vi­do­res) no seu próprio com­pu­ta­dor e, dessa forma, controlar outro com­pu­ta­dor.

Muitas áreas podem aplicar o protocolo SSH para:

  • Gerenciar ser­vi­do­res que não podem ser acessados lo­cal­mente.
  • Trans­mi­tir arquivos com segurança.
  • Criar backups com segurança.
  • Pos­si­bi­li­tar a conexão entre dois com­pu­ta­do­res uti­li­zando crip­to­gra­fia de ponta-a-ponta.
  • Fazer a ma­nu­ten­ção de outros com­pu­ta­do­res re­mo­ta­mente.

O de­sen­vol­vi­mento do SSH também in­flu­en­ciou outros pro­to­co­los. Por exemplo, o protocolo FTP (inserguro), usado para trans­fe­rir arquivos entre ser­vi­do­res, passou por apri­mo­ra­men­tos que deram origem ao SFTP: SSH File Transfer Protocol.

Uma vantagem do SSH é que o protocolo pode ser executado em todos os sistemas ope­ra­ci­o­nais comuns. Ori­gi­nal­mente uma aplicação para Unix, o protocolo SSH também passou a ser im­ple­men­tado em todas as dis­tri­bui­ções do Linux e do macOS. Ele também pode ser usado no Windows, caso você instale o programa cor­res­pon­dente.

SSH vs OpenSSH

O Secure Socket Shell foi criado em 1995, em um projeto de código aberto. Nesse mesmo ano, o de­sen­vol­ve­dor Tatu Ylönen fundou uma empresa que expandiu esse protocolo e começou a trabalhá-lo co­mer­ci­al­mente. Assim o projeto, ini­ci­al­mente aberto, se trans­for­mou em um software privado. A co­mu­ni­dade de TI não aceitou a “pri­va­ti­za­ção” e de­sen­vol­veu uma divisão aberta do protocolo SSH-1: o OpenSSH. Como ambos continuam a ser de­sen­vol­vi­dos, duas variações desse protocolo estão dis­po­ní­veis: o protocolo privado SSH-2 (mais evoluído, já que vul­ne­ra­bi­li­da­des de segurança foram en­con­tra­das no SSH-1), e o protocolo público OpenSSH.

O OpenSSH e o SSH são re­la­ti­va­mente parecidos em termos de fun­ci­o­na­li­dade e escopo. A diferença está, prin­ci­pal­mente, no custo e no suporte oferecido. Caso opte por adquirir o protocolo SSH, você receberá suporte 24 horas. Esse recurso é es­pe­ci­al­mente útil para grandes empresas, com gerentes de TI al­ter­na­dos. Por outro lado, o OpenSSH oferece a vantagem de ter uma co­mu­ni­dade e de ser de código aberto, o que significa que o projeto está em constante de­sen­vol­vi­mento e conta com con­tri­bui­ções de diversos es­pe­ci­a­lis­tas.

Como funciona o protocolo SSH?

O Secure Socket Shell faz uso de múltiplas técnicas de crip­to­gra­fia e au­ten­ti­ca­ção. Por um lado, isso garante que os fluxos de dados não sejam lidos ou ma­ni­pu­la­dos. Por outro lado, somente dis­po­si­ti­vos au­to­ri­za­dos podem entrar em contato uns com os outros.

Au­ten­ti­ca­ção

Para começar, o servidor SSH e o cliente au­ten­ti­cam um ao outro. O servidor envia um cer­ti­fi­cado ao cliente para verificar se é o servidor correto. Sempre que esse contato é es­ta­be­le­cido, há o risco de um terceiro se colocar entre os dois par­ti­ci­pan­tes e in­ter­cep­tar a conexão. No SSH, o próprio cer­ti­fi­cado é crip­to­gra­fado, não sendo possível imitá-lo. Como o cliente sabe qual é o cer­ti­fi­cado correto, nenhum terceiro consegue contatar o servidor em questão.

No entanto, após a au­ten­ti­ca­ção do servidor, o cliente também precisa comprovar que tem acesso au­to­ri­zado. Uma senha pode ser usada para essa fi­na­li­dade. Ela (ou seu valor de hash crip­to­gra­fado) é ar­ma­ze­nada no servidor. Assim, usuários são obrigados a inserir a senha sempre que se co­nec­ta­rem a um servidor diferente durante a mesma sessão. Existe também um método al­ter­na­tivo de au­ten­ti­ca­ção do cliente, que usa um par de chaves composto por uma chave pública e uma chave privada.

A chave privada é criada ex­clu­si­va­mente para o seu próprio com­pu­ta­dor, e é protegida por uma frase-passe, mais longa que uma senha comum. Ela é ar­ma­ze­nada somente no seu com­pu­ta­dor e permanece sempre oculta. Caso queira es­ta­be­le­cer uma conexão SSH, você deverá informar a frase-passe para ter acesso à chave privada.

Também existem chaves públicas no servidor (assim como no próprio cliente). O servidor cria um problema crip­to­grá­fico com sua chave pública e o envia ao cliente. Em seguida, o cliente des­crip­to­grafa o problema com sua própria chave privada, devolve a solução e informa ao servidor que a conexão foi permitida, uma vez que é legítima.

Durante uma sessão, você só precisa inserir a frase-passe uma vez para se conectar a qualquer número de ser­vi­do­res. Ao final dela, os usuários devem se des­co­nec­tar de seus com­pu­ta­do­res locais para garantir que terceiros não tenham acesso físico a eles, que têm acesso ao servidor.

Crip­to­gra­fia

Após a au­ten­ti­ca­ção mútua, os dois par­ti­ci­pan­tes da co­mu­ni­ca­ção es­ta­be­le­cem uma conexão crip­to­gra­fada. Para que isso ocorra, é gerada uma chave que expira quando a sessão é encerrada. Ela não deve ser con­fun­dida com o par das chaves pública e privada, que é usado apenas para a troca de chaves. A chave usada na crip­to­gra­fia simétrica é válida apenas por uma sessão. Tanto cliente quanto servidor têm a mesma chave, portanto, todas as mensagens trocadas entre eles podem ser crip­to­gra­fa­das e des­crip­to­gra­fa­das. Cliente e servidor criam a chave si­mul­ta­ne­a­mente, mas de forma in­de­pen­dente. No chamado algoritmo de troca de chaves, ambas as partes usam tanto in­for­ma­ções públicas quanto secretas para criar a chave.

Outra forma de crip­to­gra­fia realizada pelo protocolo SSH ocorre por meio de hashing. Um hash é um tipo de as­si­na­tura de dados trans­mi­ti­dos. Um algoritmo gera um hash único a partir dos dados a serem trans­mi­ti­dos. Se eles forem ma­ni­pu­la­dos, o valor de hash é au­to­ma­ti­ca­mente alterado. Dessa forma, o des­ti­na­tá­rio saberá que terceiros alteraram os dados no meio do caminho. Os valores de hash são pro­je­ta­dos de forma que não possam ser simulados com fa­ci­li­dade. Não é possível criar duas trans­mis­sões di­fe­ren­tes com o mesmo hash. O recurso é conhecido como proteção contra colisão (collision pro­tec­tion).

Portas SSH

Portas TCP são terminais (endpoints) que abrem ser­vi­do­res e clientes, per­mi­tindo a co­mu­ni­ca­ção entre eles. É por meio das portas que os parceiros de co­mu­ni­ca­ção recebem e enviam pacotes de dados. O TCP tem um espaço de en­de­re­ça­mento de 16 bits, o que pos­si­bi­lita a abertura de 65.535 portas. No entanto, a Internet Assigned Numbers Authority (IANA) atribui um número de porta para de­ter­mi­na­das apli­ca­ções. Por padrão, todas as conexões SSH são exe­cu­ta­das na porta 22.

Nota

Como a porta pela qual as conexões SSH passam é am­pla­mente conhecida e transmite dados sensíveis, ela é o destino favorito de cri­mi­no­sos virtuais. Por esse motivo, alguns usuários acreditam que faz sentido realocar a porta SSH. No entanto, isso só aumenta a proteção a curto prazo. Com um port scanner, é possível descobrir todas as portas usadas por um com­pu­ta­dor.

O protocolo SSH também permite o re­di­re­ci­o­na­mento de portas (port forwar­ding). A porta SSH de um cliente ou de um servidor é usada por um outro par­ti­ci­pante dentro da rede local, para criar uma conexão segura pela internet. Para fazer isso, os par­ti­ci­pan­tes criam um túnel: os dados são recebidos pela porta 22 e en­ca­mi­nha­dos ao cliente que está na rede local.

Clientes SSH

O cliente SSH costuma ser o próprio com­pu­ta­dor que você usa para es­ta­be­le­cer uma conexão com o servidor. Em alguns casos (a depender do seu sistema oper­ci­o­nal), você precisará instalar um software para es­ta­be­le­cer uma conexão SSH. Esse tipo de programa costuma ser chamado de SSH clients. O Tectia SSH é pago, vem da co­mu­ni­ca­ção de segurança SSH e contém, adi­ci­o­nal­mente, um server software. Há, também, al­ter­na­ti­vas gratuitas, como o software de código aberto PuTTy (para Windows e Linux) e o lsh, que funciona em todos os sistemas ope­ra­ci­o­nais baseados em Unix.

Dica

Alguns programas oferecem aos usuários uma interface gráfica que sim­pli­fica a con­fi­gu­ra­ção e a im­ple­men­ta­ção do protocolo SSH. A princípio, o Secure Socket Shell também pode ser executado por linha de comando, mesmo sem ter sido instalado no macOS ou em outro sistema ope­ra­ci­o­nal em Unix.

Ser­vi­do­res SSH

O servidor SSH é a con­tra­parte do cliente. O termo também é usado para se referir ao software. Boa parte dos softwares de clientes também funciona nos ser­vi­do­res. Além disso, existem softwares pro­je­ta­dos ex­clu­si­va­mente para ser­vi­do­res SSH. É normal que o SSH seja iniciado nos ser­vi­do­res quando o com­pu­ta­dor é ini­ci­a­li­zado. Assim, você consegue acessar o servidor ex­ter­na­mente a qualquer momento, via SSH.

A rigor, o servidor SSH não precisa estar lo­ca­li­zado em um centro de dados remoto. Por exemplo, um usuário também pode instalar um servidor SSH em seu próprio com­pu­ta­dor e apro­vei­tar as vantagens do re­di­re­ci­o­na­mento de portas do conforto do seu lar.

Ir para o menu principal