Senhas, brute force e Instagram

Luiz Guilherme Ribeiro
stolabs
Published in
3 min readSep 22, 2017

Acredito que você, leitor, já tenha se deparado com cadastros em sites e serviços com critérios no mínimo peculiares para validação de senhas. Letras maiúsculas, números e caracteres especiais são apenas um exemplo desses critérios. Mas será que dessa forma estamos realmente protegidos?

O quadrinho abaixo explica o que estou querendo dizer de uma maneira bem interessante.

Deixando os termos técnicos do quadrinho de lado, basicamente o que temos com essas senhas “fortes” criadas com base em critérios duvidosos são senhas difíceis de gravar, mas que um computador consegue quebrar com certa facilidade por meio de brute force (ataques de força bruta, nos quais diversas senhas diferentes são testadas).

Então, a ideia para criar senhas à prova de brute force é utilizar senhas grandes, pois elas possuem um nível de complexidade tão elevado que dificilmente serão quebradas. A imagem abaixo, retirada do site how secure is my password exemplifica isso de forma clara.

Dessa forma fica mais fácil de lembrar as senhas e uma proteção maior é garantida. Não que eu esteja incentivando a utilização de senhas sem caracteres esdrúxulos. Só estou defendendo que é possível ter uma senha fácil de lembrar, altamente complexa e que não tenha um exagero de critérios de verificação para ser aprovada.

A título de curiosidade, quando a senha do quadrinho “correcthorsebatterystaple” é verificada utilizando o how secure is my password o site informa que ela seria quebrada instantaneamente.

Ok, e o que o Instagram tem a ver com isso?

Algum tempo atrás desenvolvi o instacracker, uma ferramenta para quebrar senhas não tão fortes utilizadas no Instagram. Na realidade, hoje esse tipo de ataque não funciona mais da mesma forma na aplicação deles, mas em muitos outros casos ele é válido. O que é difundido no mundo do desenvolvimento e da segurança é que as validações e verificações devem ser feitas tanto no servidor quanto no cliente. Ou seja, para evitar ataques de brute force é necessário implementar soluções no front-end e no back-end. O que o Instagram fazia na época em que o instacracker foi desenvolvido era checar apenas no server side o número de requisições feitas por um IP. Caso mais de vinte requisições fossem realizadas em um curto intervalo de tempo o IP seria bloqueado e qualquer requisição que ele realizasse seria malsucedida.

O ataque foi pensado levando em conta esse número de requisições que cada IP pode realizar e a estrutura da rede tor. A ideia é utilizar um nó de saída da tor para fazer vinte requisições e caso a senha não seja descoberta, trocar o nó de saída. Dessa forma diversas tentativas podem ser realizadas sucessivamente como é possível observar na figura abaixo.

Portanto, fica o alerta aos desenvolvedores para além de implementar formas de controle de acesso no back-end também utilizar mecanismos como Capcha no client side da aplicação, e aos usuários que comecem a utilizar senhas longas.

--

--