Módulo 7 · 7.3
Iniciar sessão: palavras-passe, autenticação de dois fatores e força bruta
Módulo 7: Segurança · Tempo de leitura: 9 minutos
Objetivo de aprendizagem: Após esta lição, é capaz de proteger o início de sessão do seu site com palavras-passe fortes, autenticação de dois fatores e limitação de tentativas de início de sessão, e sabe o que é o xmlrpc.php.
Conceitos-chave: gestor de palavras-passe, frase-passe, palavra-passe única, autenticação de dois fatores (2FA, TOTP), passkey, força bruta, limitação de tentativas de início de sessão, wp-login.php por endereço IP, xmlrpc.php, nomes de utilizador que são revelados (REST, ?author=), palavras-passe de aplicação
A palavra-passe: longa e única
Uma boa palavra-passe tem duas características:
- Longa: o comprimento conta mais do que caracteres estranhos. Uma frase-passe de quatro ou cinco palavras aleatórias (
peneira-pinguim-outubro-lanterna) é mais forte e mais fácil de memorizar do queP4ssw0rd!. Recomenda-se uma palavra-passe única de pelo menos 12 caracteres, de preferência uma frase-passe. - Única: não usada em mais nenhum lado. O credential stuffing (lição 7.1) só funciona se reutilizar uma palavra-passe.
Ninguém memoriza dezenas de palavras-passe longas e únicas. Por isso, utilize um gestor de palavras-passe: um programa que as cria, guarda e preenche por si. Assim só precisa de memorizar uma: a do próprio gestor, que também protege com autenticação de dois fatores.
Para saber se uma palavra-passe consta de uma fuga de dados conhecida, pode consultar haveibeenpwned.com. Se o seu endereço de e-mail constar de uma fuga, altere a palavra-passe em todos os serviços onde usou essa mesma palavra-passe.
Autenticação de dois fatores
Com a autenticação de dois fatores (2FA), para além da palavra-passe, precisa ainda de algo mais ao iniciar sessão: normalmente um código de seis dígitos gerado por uma aplicação no telemóvel (um autenticador, segundo o padrão TOTP). Um atacante que tenha a sua palavra-passe não consegue entrar.
O WordPress não tem autenticação de dois fatores incorporada. Adiciona-a com um plugin. Existem muitos; um simples é o Two Factor, criado por colaboradores do próprio WordPress. Os plugins de segurança também costumam incluí-la. Ao escolher, tenha em atenção:
- aplicações TOTP e códigos de recuperação (para caso perca o telemóvel); os códigos por e-mail são mais fracos, porque a sua caixa de correio também pode ser pirateada;
- a possibilidade de a tornar obrigatória para administradores e editores;
- passkeys: iniciar sessão com a sua impressão digital, rosto ou uma chave de segurança, sem palavra-passe. Existem plugins para isso. As passkeys são resistentes a phishing, porque só funcionam no site verdadeiro.
Ative também a autenticação de dois fatores em tudo o que está à volta do seu site: o seu painel de alojamento, o seu e-mail, o seu registrar e o seu gestor de palavras-passe. Um atacante que tome conta do seu painel de alojamento não precisa da sua palavra-passe do WordPress.
Força bruta e limitação de tentativas de início de sessão
Um site WordPress aberto recebe tentativas de início de sessão em wp-login.php o dia todo, muitas vezes com admin e listas de palavras-passe comuns. Com uma palavra-passe longa e 2FA não conseguem entrar, mas cada tentativa custa processamento ao seu servidor (um arranque completo do WordPress). Numa vaga grande, o seu site fica lento.
O próprio WordPress não limita o número de tentativas. O que ajuda, por ordem de "bloquear o mais cedo possível":
- No servidor: muitos alojamentos bloqueiam um endereço IP que faça muitas tentativas falhadas num curto espaço de tempo, ainda antes de o WordPress arrancar (com uma firewall ou uma função do servidor web). Pergunte ao seu alojamento o que acontece.
- wp-login.php apenas para o seu endereço IP: com algumas linhas em
.htaccess(no LiteSpeed e Apache):
<Files wp-login.php>
Require ip 192.0.2.10
</Files>Isto funciona bem se tiver um endereço IP fixo. Se não tiver (em casa, no telemóvel), fica fora do seu próprio site se o endereço mudar. Uma alternativa é uma palavra-passe adicional na página de início de sessão (uma "pasta protegida", basic authentication) com uma palavra-passe diferente da sua palavra-passe do WordPress.
- Um plugin que limita tentativas: após cinco tentativas falhadas, o endereço IP fica bloqueado durante algum tempo. Funciona, mas só depois de o WordPress já estar a correr, pelo que o processamento continua a existir.
Ocultar ou renomear a página de início de sessão (por exemplo, /minha-entrada em vez de /wp-login.php) reduz o ruído no seu registo. Não é uma proteção real, e alguns plugins e temas esperam o endereço padrão. Serve bem como extra, nunca em vez de uma boa palavra-passe e 2FA.
xmlrpc.php
xmlrpc.php é uma ligação antiga de antes da REST API, através da qual aplicações e outras sites comunicam com o WordPress. Ainda é usada por algumas aplicações, pelo Jetpack e por algumas integrações. Para a maioria dos sites, é dispensável.
Os atacantes gostam do xmlrpc.php, porque permite experimentar centenas de palavras-passe de uma só vez num único pedido (com a função system.multicall), e porque pode ser utilizado em ataques a outros sites (pingbacks). O que fazer:
- Não a utiliza: bloqueie-a. Alguns alojamentos, incluindo a WebOké, bloqueiam o xmlrpc.php por predefinição no servidor. Caso contrário, com uma linha em
.htaccessou com um plugin de segurança. - Utiliza-a (por exemplo, para uma aplicação que precisa dela): mantenha-a aberta, mas garanta palavras-passe fortes, 2FA e uma limitação de tentativas. As aplicações modernas costumam usar a REST API com uma palavra-passe de aplicação (lição 3.3).
Nomes de utilizador que são revelados
Na lição 3.3 viu que o WordPress mostra uma derivação dos nomes de utilizador:
https://example.com/?author=1redireciona para/author/<nome>/;https://example.com/wp-json/wp/v2/usersmostra uma lista com os slugs de todos os que publicaram algo.
Isso é grave? Um nome de utilizador não é uma palavra-passe. Com uma palavra-passe longa e única e 2FA, faz pouca diferença. Mas dá a um atacante metade dos dados de início de sessão e facilita o phishing dirigido. Medidas razoáveis:
- dê aos administradores um nome de utilizador que não seja o seu nome público, e não publique com uma conta de administrador (lição 3.3);
- limite a lista de utilizadores na REST API com um plugin de segurança ou algumas linhas de código, se não precisar dela. Não feche completamente a REST API: o editor de blocos e muitos plugins precisam dela.
Palavras-passe de aplicação
As palavras-passe de aplicação (lição 3.3) são uma forma segura de dar acesso a uma aplicação ou sistema, mas contornam a sua autenticação de dois fatores: uma aplicação com uma palavra-passe de aplicação não precisa de código. Crie-as apenas quando necessário, numa conta com uma função de baixo nível, e revogue-as quando deixar de usar a integração.
Resumo
- Utilize palavras-passe longas e únicas (frases-passe) num gestor de palavras-passe.
- Ative a autenticação de dois fatores, com um plugin no WordPress e também no seu painel de alojamento, e-mail e registrar.
- Bloqueie as tentativas de início de sessão o mais cedo possível: no servidor, com uma regra de IP ou palavra-passe adicional, ou com um plugin.
- Bloqueie o xmlrpc.php se não o utilizar.
- Nomes de utilizador revelados não são um desastre, mas sim um indício: não publique como administrador e limite a lista de utilizadores da REST se não precisar dela.
Questionário
Exercício
Exercício A7.3: O que o seu site revela ao iniciar sessão? Introduza o endereço do seu site e comprove que é o seu próprio site (com o código do exercício, como registo TXT ou como ficheiro). O programa verifica três coisas: se xmlrpc.php devolve uma lista de funções (aberto) ou está bloqueado, se /wp-json/wp/v2/users mostra nomes de utilizador (slugs), e para onde /?author=1 redireciona. Indique se precisa do xmlrpc.php; se não precisar, um xmlrpc.php aberto fica a vermelho. Slugs revelados ficam a laranja com explicação.
Exercício D7.3: Ativar a autenticação de dois fatores. Ative a autenticação de dois fatores para todos os administradores do seu site WordPress, e também no seu painel de alojamento e no seu e-mail. Guarde os códigos de recuperação no seu gestor de palavras-passe. Assinale, por cada componente, que está ativa e anote qual o método que utiliza (aplicação, passkey, e-mail) e onde estão guardados os códigos de recuperação. Anote também como protege adicionalmente o wp-login.php e porque escolheu essa forma.
Exercício D7.3: Ativar a autenticação de dois fatores
Este exercício faz você mesmo; ninguém o verifica. Assinale o que já fez e marque o exercício como concluído.
Para os administradores, use preferencialmente uma aplicação ou uma chave de acesso (passkey) em vez de apenas o e-mail. Pode autorizar um endereço IP fixo em wp-login.php; com endereços variáveis, a limitação de tentativas de início de sessão é mais adequada.
As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.
Leitura adicional
Estes artigos descrevem os passos nos painéis da WebOké; noutros painéis funcionam de forma semelhante.
- Manual DirectAdmin 3.7: Palavras-passe seguras e o que fazer em caso de fuga de uma palavra-passe
- Configurar a verificação em dois passos no O meu WebOké e uma aplicação de autenticação
- Não é possível aceder ao xmlrpc.php do WordPress
- Proteger o wp-login.php do WordPress
- Manual DirectAdmin 15.9: Proteção de pastas com senha
- Início de sessão seguro (Veilig Internetten, governo neerlandês): https://veiliginternetten.nl/veilig-inloggen/
- Ataques de força bruta (developer.wordpress.org, Inglês): https://developer.wordpress.org/advanced-administration/security/brute-force/
- Configurar a verificação em dois passos para o WordPress
