Em meu post anterior Acabei de me conectar como o senhor, eu revelei que alguém estava se conectando como eu – especificamente porque eles descobriu minha senha. Mas como?
Se eu quisesse descobrir a senha de alguém, posso pensar em algumas maneiras:
- Adivinhação educada. Se o senhor souber a data de aniversário de alguém, seus animais de estimação, os nomes dos filhos, seus filmes favoritos e assim por diante, todas essas são senhas em potencial de várias formas. Essa é a engenharia social clássica e pode funcionar; isso é essencialmente como o e-mail de Sarah Palin foi hackeado. Embora minha senha foi fraco, não era nada que o senhor pudesse razoavelmente supor com base nas informações públicas disponíveis sobre mim.
- Ataque de dicionário de força bruta. Se as tentativas de login não forem significativas, o taxa limitadao senhor pode tentar um ataque de dicionário e rezar para que a senha-alvo seja uma palavra simples do dicionário. É assim que o a conta de um administrador do Twitter foi comprometida. Mas deixar de avaliar o limite de tentativas de senhas é coisa de amador (e eu diria que beira a incompetência); nenhum provedor de OpenID de qualquer importância cometeria esse erro.
- Interceptação. Escute o usuário de todas as formas possíveis para descobrir sua senha: instale um keylogger de hardware, um keylogger de software ou realize a detecção de tráfego não criptografado na rede. Se o senhor tiver acesso físico ao usuário, os métodos analógicos de baixa tecnologia, como observar por cima do ombro de alguém enquanto ele digita a senha, são efetivamente a mesma coisa. Embora eu não possa excluir a possibilidade de fantasias paranóicas de keyloggers, se minha máquina fosse tão minuciosamente 0wnz0red, acho que minha senha do OpenID teria sido a menor das minhas preocupações naquele momento.
- Falsificação de identidade. Comumente conhecido como phishing. O senhor apresenta ao usuário uma página de login de aparência plausível para um serviço que ele já usa e espera que ele insira suas credenciais. Como alternativa, no estilo deprimente e comum da Web 2.0, o senhor pode simplesmente exigir que os usuários forneçam suas credenciais para obter algum recurso de integração trivial com o site de destino. Considero ambas as formas de phishing, e as chamo de o hack para sempre por um bom motivo.
Então, qual desses métodos essa pessoa usou para obter minha senha? Nenhum deles.
Não foi uma suposição e não foi força bruta.
Acho que posso lhe dizer, para que o senhor não caia nessa armadilha novamente. Há um site em que ajudo que não salga suas senhas. Elas são criptografadas por MD5, mas se o senhor tiver uma senha de dicionário, é muito fácil usar um site de MD5 reverso para obter a original. Consegui descobrir que o senhor era um usuário do site há algum tempo e percebi que poderia fazer isso, se ao menos soubesse seu provedor openid…
(Como um aparte, reclamei com o responsável pelo site meses atrás que ele deveria começar a salgar as senhas exatamente por esse motivo. Também analiso minhas senhas que preciso que sejam seguras em alguns sites de hash reverso, apenas para garantir que não estejam armazenadas em algum lugar).
Portanto, a parte antiética foi a busca por essas informações em primeiro lugar. Peço desculpas. Mas, como eu disse, é melhor que outra pessoa tenha acesso a esses dados.
Ei, parece que o o senhor está armazenando as senhas incorretamente!
Conhecemos o inimigo, e ele é… programadores como nós. Sério, o senhor vai ler essa entrada do blog. É exatamente isso, exatamente o que acabou de acontecer comigo.
Quando digo programadores como nós, refiro-me a mim também. Reconheço que também sou culpado aqui, por…
- usar a mesma senha de credencial de baixo valor em dois lugares.
- escolher uma senha particularmente fraca.
- não usar uma credencial de alto valor para algo que claramente a merecia, ou seja, meu login de moderador no Stack Overflow.
Tudo isso é verdade, e eu assumo a culpa por isso. Talvez eu devesse seguir meu próprio conselho. Um momento de fraqueza, suponho.
Se o senhor for um programador que trabalha em um aplicativo que armazena credenciais de usuário, o mais importante a se tirar disso é não se meter no negócio de armazenar credenciais de usuário! Como vimos hoje, o mundo está cheio de usuários estúpidos como eu, que fazem coisas incrivelmente estúpidas. Os senhores estão equipados e dispostos a fazer tudo o que for necessário para proteger idiotas como eu de mim mesmo? Essa é uma parte fundamental da promessa do OpenID e um dos motivos pelos quais o escolhemos como sistema de autenticação para o Stack Overflow. Como disse um comentarista observou no Reddit:
Eu, por exemplo, acho que meu provedor de OpenID é mais seguro do que a média das pessoas que administram um fórum.
Exatamente. Terceirizamos nosso sistema de credenciais de usuário para pessoas que são muito melhores nisso do que nós (bem, dependendo do provedor de OpenID que o senhor escolher). E também porque não achamos que o mundo precisasse de mais um nome de usuário e senha. O senhor é bem-vindo. Acho que sim.
Então, o que aprendemos?
- Os programadores são o inimigo.
- Ei… espere um segundo, Eu sou o um programador!
GOTO 1
(Ah, e crédito para o Malte, o primeiro comentarista a identificar corretamente qual era a provável vulnerabilidade da senha — menos de uma hora depois que o post foi publicado!)