No meu trabalho temos um programa de recompensas para pessoas que encontram problemas de segurança nos nossos sistemas. Isso é bom para a empresa porque em geral recebemos bons relatórios com os passos para reproduzirmos e a partir daí mantemos uma relação com o pesquisador até conseguirmos sanar o problema apontado. É um ótimo programa, tanto para melhorarmos os produtos da empresa quanto para aumentarmos o conhecimento dos diversos times sobre segurança — afinal, escalar segurança não é uma tarefa simples. Mas hoje não vamos falar de segurança, vamos falar sobre internet. E por que essa introdução? Bom, às vezes recebemos alguns relatórios que não são problemas de segurança, é simplesmente algo que faz parte de como a internet funciona. Como alguém confunde o funcionamento da internet com segurança? A tecnologia da informação tem tantas áreas e requer tanto conhecimento que é impossível alguém saber tudo, especialmente pessoas que estão começando, ou que mudaram de área.
A imagem da capa é uma piada da série IT Crowd, no capítulo em que o time de TI diz para a nova gestora, que não sabia nada de TI, que a internet era aquela caixa preta com uma luz vermelha piscando. Se algo acontecer com a caixa será uma catástrofe mundial. A série é ótima para quem é da área, rende muitas risadas. Se alguém pode acreditar que uma caixa que pisca é a internet então tentar entender melhor como a internet funciona pode ser um conhecimento útil.
O relato que me fez escrever este texto falava sobre um problema do nosso servidor contatar o servidor do cliente depois de fazer a inscrição no site. No fluxo de inscrição, logo após o cadastro de uma nova conta, enviamos um email de confirmação da criação dessa conta. Então essa conexão com o servidor deles faz parte e não é um problema de segurança. Para ser um problema de segurança seria algo mais na linha de acessar alguma página usando dados que foram enviados pelo cliente, permitindo um atacante controlar esse fluxo — mas isso não é assunto para esse artigo.
A internet é uma grande rede com diversos tipos de equipamentos, computadores, servidores, dispositivos móveis, etc. Todos falam a mesma língua entre si: IP (Internet Protocol!) — ok, não é uma língua, é um protocolo de comunicação, mas fiquem com a poesia de pensar que as máquinas conversam entre si. Como o IP exige que se decore diversos números para chegar a um determinado servidor e nós humanos não gostamos de decorar números (alguns sim, mas não é a regra), foi inventado outro sistema para nos ajudar nisso e podermos usar nomes: DNS (Domain Name System).
DNS é o sistema que nos permite decorar “google.com” ou “nytimes.com” ou “g1.globo.com” e não nos preocuparmos em saber que google pode ser 142.251.132.46 ou 142.251.129.142 ou … — sistemas grandes como o google podem responder por diversos IPs diferentes, impossível de decorar. O DNS resolve esse problema muito bem com diversos servidores espalhados pelo mundo, basta mandar uma pergunta para ele e receber de volta o IP correspondente. São diversos tipos de perguntas possíveis, uma delas é para descobrir qual o servidor de email de um determinado domínio. Sabendo qual o endereço do servidor de email podemos usar um outro protocolo em cima de IP para mandar uma mensagem — nossa confirmação da criação da conta.
O que um sistema de envio de email faz é basicamente descobrir qual o IP do servidor de destino, perguntando para o DNS essa informação, e depois é feita uma conexão entre os servidores e o email é transferido para o servidor de destino. Falando assim parece super simples e realmente o conceito é simples — depois foram adicionadas camadas de segurança, criptografia, assinaturas para garantir que só um servidor possa enviar email para um dado domínio, etc.
Outros sistemas que formam a internet são muito similares quando focamos no essencial, como por exemplo como a Web (http) funciona. O que acontece quando abrimos um navegador e digitamos www.amazon.com? Inclusive essa é uma pergunta muito usada em entrevistas, dá para responder de muitas formas, cada pessoa vai acabar focando no que sabe mais. Um desenvolvedor de navegador pode falar sobre como conexões são abertas, memórias que são alocadas, interações com o sistema operacional, bibliotecas para renderizar, etc. Um engenheiro de redes pode falar sobre roteadores, como as rotas são distribuídas e quão dinâmica uma rede é. Alguém que trabalhe com frontend pode falar sobre como o navegador exibe a página, como o estilo da página é interpretado, como os scripts são executados. Mas respondendo a pergunta de forma muito concisa e abstraindo que vivemos cercados de estilo, scripts e imagens:
- O navegador descobre para qual IP o endereço digitado aponta. (Olha o DNS aparecendo aqui).
- O navegador abre uma conexão para o IP na porta 80 (sim, estou ignorando criptografia).
- Navegador manda alguns dados para o servidor (página, identificação do navegador, versão do protocolo, etc)
- Servidor verifica o que foi recebido e procura se o arquivo existe. Se existir, manda o arquivo de volta. Caso contrário retorna erro.
- Navegador recebe o arquivo e exibe na tela.
Simples, não? Claro que para realmente funcionar temos um mundo de outras coisas acontecendo. Milhares de detalhes estão escondidos e são, em geral, irrelevantes para a maioria das pessoas. Dependendo da curiosidade ou da necessidade do trabalho podemos explorar cada uma das partes. Mas é necessário termos os conceitos básicos de forma clara, pois a partir deles conseguimos entender o resto ou até mesmo criar novas tecnologias.
A internet é formada por várias caixinhas pretas que piscam, mas não é uma única que controla tudo. Pode-se dizer que os conceitos fundamentais são simples. A soma de muitos conceitos simples é que tornam o todo extremamente complexo. Isolando e removendo as partes não essenciais conseguimos entender muito melhor como qualquer coisa funciona, não só a internet.
Top comments (0)