Uso de certificados em sites para comunicações seguras
A segurança, é assunto que interessa de certa forma a todos nós. Apesar da segurança total não existir na realidade quando se trata de sistemas informáticos, devido a existir muitas falhas que vão sendo exploradas ao longo dos tempos. Estas falhas podem ser de várias tipos. Podem ser devido a erros “BUGs” nos códigos que são usados na encriptação de comunicações. Pode ser devido às limitações de um determinado algoritmo usado, entre outros.
Com este artigo pretendo expor uma visão, que permita a reflexão de alguns pontos importantes, que devem ser refletidos por todos aqueles que administrem um ou muitos sites. Apenas o bom senso já ajuda na decisão, mas compreender com analise destes pontos é realmente importante.
Quando se administra um site, seja a nível profissional ou como hobby, temos que tomar algumas decisões mínimas para que o nosso site seja o mais seguro possível, quer para nós quer para o visitante do site.
Realmente existe sites que não necessitam de comunicar com ligações seguras, devido ao que é disponibilizado no site. Quando toda a informação é de domínio publico, toda. É justamente na analise do tipo de informação que se pretende disponibilizar que devemos decidir se existe ou não a necessidade de encriptar a comunicação.
Devido ao protocolo HTTP ser utilizado para transmitir as informações do Browser para o servidor e vice versa. Todos os dados são transmitidos em texto que pode ser analisado ao longo do seu percurso até a um determinado servidor. Abaixo podem ver um simples pedido e resposta realizado a um servidor. Perceber a quantidade de informação que circula em um simples pedido. Neste caso em concreto estou apenas a usar um serviço online para otimizar uma imagem.
Pedido e Resposta
Pedido / Cabeçalhos
GET /ws.php?img=https://www.ncdc.pt/certificados-ssl.jpg HTTP/1.1
Host: api.resmush.it
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Como podemos constatar neste exemplo muitos dados são transmitidos. E dependendo da situação, do objetivo da analise, pode ser usado para muitos fins. Infelizmente muitas das vezes é usado em ataques quer do servidor quer do cliente. Com o objetivo de escalar ganhando mais permissão aos dados de um determinado utilizador(s).
Algumas conclusões que podemos tirar deste simples pedido / resposta
Ficamos a saber que o servidor usa o Apache com a versão 2.2.22 através do cabeçalho: Server: Apache/2.2.22
A versão do PHP que é utilizada pelo servidor pelo cabeçalho: X-Powered-By: PHP/5.4.45-0+deb7u7
Podemos determinar qual o Browser utilizado pelo cliente através do cabeçalho: User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36
Podemos associar o utilizador a um determinado id pelo menos para o servidor em questão, através do cabeçalho: Cookie: __uid=d34938xxxxxxxxxxxx3f85912axxxxxx430837
Estas informações e outra mais complexas e mais recheadas de informação podem levar a lugares que nenhum administrador ou utilizador pretende ir, pelo menos sem o seu consentimento.
Pontos que devem refletir
Os seguintes pontos são a meu ver obrigatórios, quando tentamos perceber se necessitamos implementar comunicações seguras:
- Permite criar contas de utilizador?
- Permite receber ou enviar informação confidencial?
- É transmitido dados que possam identificar um utilizador?
- +
Outros pontos podem ser adicionados a esta lista, quantos mais melhor.
Abaixo reflito nestes pontos e espero que seja feito o mesmo, por todos os administradores e utilizadores em geral.
Permite criar contas de utilizador?
Quando crio uma conta como utilizador em algum site, não obrigatoriamente pretendo que todos os meus dados sejam disponibilizados publicamente. Não pretendo que todos sejam capazes de saber a minha palavra passe, nem o meu email, nem o que escrevi num grupo privado. Perdia o sentido criar uma conta se todos a pudessem usar. Escrever em um grupo privado que poderia ser visto por todos, não seria privado e sim publico.
Todos os sites que implementem contas de utilizadores, devem com certeza ter comunicações seguras. Bem, pelo menos nas parte do site em que é mostrado dados que pertencem a um determinado utilizador.
Quando um utilizador inicia sessão em um determinado site existe sempre informação a circular que identifica um determinado utilizador no servidor em questão.
Existe técnicas bem complexas, que dificultam bastante o obtenção de dados dos utilizadores, mas nenhuma totalmente.
Permite receber ou enviar informação confidencial?
Claro que apenas o bom senso nos diz, que não devemos enviar um ficheiro confidencial através de uma ligação insegura/publica.
Uma empresa pede que seja redigido um contrato a um advogado, para um determinado negocio em curso que é sigiloso até ao sua conclusão. E pede que seja enviado em formato digital. Obrigatoriamente terá que permitir uma ligação segura.
Um grupo de desenvolve-dores, está a criar um projeto de software, mesmo sendo OpenSource não quer que seja visto fora do grupo até ao seu lançamento inicial. Eu compreendo eu desenvolvo e às vezes prefiro pensar sozinho, pelo menos organizar o meu pensamento.
Em todos estes casos é obrigatório usar comunicações seguras. Caso contrario essa informação pode ser capturada até ao seu destino. E perde automaticamente a parte de confidencial e torna-se publica.
É transmitido dados que possam identificar um utilizador?
Hoje em dia é bastante difícil encontrar um site que não utilize cookies para guardar informação que identifica um utilizador em um serviço ou vários. Se temos informação que seja dirigida a um determinado utilizador temos que diferencia-lo dos demais. Para o efeito é utilizado normalmente cookies.
Estes coockies são enviados e recebidos na comunicação com o site a fim de terminar quem é e o que tem acesso ou o que pode ver.
Se esta informação não for transmitida de forma segura é possível que possa ser adquirida ao longo do caminho até ao servidor.
Conclusão
Hoje em dia é bastante simples adquirir um certificado. Até mesmo sem qualquer custo. Não existe mais a desculpa do custo.
No entanto apesar de ser pouco, encriptar todo o conteúdo de um determinado site exige mais algum processamento. Se tivermos certeza de que o site só irá lidar com conteúdos públicos, que podem ser adquiridos por todos, aí sim podemos por de parte a encriptação.
Para podermos ganhar alguns recursos, podemos forçar apenas as partes criticas do site a usar comunicações seguras e deixar que o utilizador decida se pretende ter acesso ao resto de forma segura ou não.
Se possível use sempre https em vez de http, desta forma estará muito mais seguro.