Para bloquear a listagem externa de logins de usuários no WordPress, siga estes passos:

No WordPress, por padrão, é possível obter uma lista de usuários administrativos através de uma determinada URL: https://<site_name>/wp-json/wp/v2/users/

A maioria dos especialistas, incluindo a CentralServer, considera esse tipo de divulgação de informações um risco de segurança. Uma solução para o problema seria desativar a API REST do WordPress. No entanto, isso pode impactar vários plugins que fazem uso de chamadas de API.

Como não é viável desativar completamente a API, podemos criar um filtro do WordPress para remover esta rota específica. Exemplo:

 add_filter( ‘rest_endpoints’, function( $endpoints ){

    if ( isset( $endpoints[‘/wp/v2/users’] ) ) {

        unset( $endpoints[‘/wp/v2/users’] );

    }

    if ( isset( $endpoints[‘/wp/v2/users/(?P<id>[\d]+)’] ) ) {

        unset( $endpoints[‘/wp/v2/users/(?P<id>[\d]+)’] );

    }

    return $endpoints;

});

NOTA: Esse filtro deve ser instalado no arquivo functions.php do WordPress ou através de um plugin como o Code Snippets.

Esse filtro oferece uma solução eficiente para a listagem de métodos de enumeração, contudo, existem outros. Por exemplo: https://site_name/?author=ID (onde ID é igual a 1, 2, 3, …) que mostra uma página com o apelido do autor e os posts que ele publicou. 

Para evitar que este tipo de informação seja exibida externamente, podemos desfrutar do plugin Stop User Enumeration (https://br.wordpress.org/plugins/stop-user-enumeration/).

O Stop User Enumeration também se integra ao Fail2ban, o que permite banir os IPs que tentem obter este tipo de informação em lote para, posteriormente, fazer ataques de força bruta contra o site.

Para quem instala o Fail2ban conforme orientamos na nossa wiki, a integração é fácil de ser realizada. Basta instalar dois arquivos fornecidos pelo desenvolvedor do plugin:

– /etc/fail2ban/jail.d/wordpress-userenum.conf

[wordpress-userenum]

enabled = true

filter = wordpress-userenum

logpath = /var/log/auth.log

maxretry = 2

port = http,https

NOTA: Recomendamos usar maxretry = 2 (ou mais) para evitar que bots de mecanismos de busca sejam banidos incorretamente.

– /etc/fail2ban/filter.d/wordpress-userenum.conf

[INCLUDES]

before = common.conf

[Definition]

_daemon = wordpress

failregex = ^%(__prefix_line)sAttempted user enumeration from <HOST>$

ignoreregex =

NOTA: Após instalar os arquivos é necessário reiniciar o Fail2ban.

Confira este artigo para obter mais informações sobre Como proteger o WordPress contra invasões?.

Para conhecer as práticas de segurança que nós recomendamos para você proteger seus recursos na internet, veja as orientações deste artigo da nossa Wiki.

AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A CentralServer se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.