você está aqui: Home  → Arquivo de Mensagens

Protegendo a console administrativa contra ataques de brute force

Colaboração: Alexandro Silva

Data de Publicação: 16 de setembro de 2013

Nos últimos meses venho acompanhando tentativas diárias de ataques de brute-force direcionados a tela de autenticação do Wordpress. A boa prática de segurança, caso seja necessário disponibilizar consoles administrativas para a internet, é restringir o acesso somente para ips específicos. O log abaixo apresenta algumas dessas tentativas que vem ocorrendo aos montes diariamente.

  78.162.40.7 - - [11/Sep/2013:17:13:11 +0000] "GET /wp-admin/ HTTP/1.1"
  403 434 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"
  
  78.162.40.7 - - [11/Sep/2013:17:13:10 +0000] "GET /admin/login.php HTTP/1.1"
  404 8261 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"
  
  78.162.40.7 - - [11/Sep/2013:17:13:11 +0000] "GET /wp-admin/ HTTP/1.1"
  403 434 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"
  
  78.162.40.7 - - [11/Sep/2013:17:13:06 +0000] "GET /admin.php HTTP/1.1"
  404 8255 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"
  
  78.162.40.7 - - [11/Sep/2013:17:13:03 +0000] "GET /wp-login.php HTTP/1.1"
  403 438 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"
  
  78.162.40.7 - - [11/Sep/2013:17:13:03 +0000] "GET /wp-login.php HTTP/1.1"
  403 438 "-" "Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML,
  like Gecko) Version/4.0 Mobile Safari/533.1"

RESTRINGINDO O ACESSO

Como disse anteriormente a recomendação é restringir o acesso, nesse caso podemos executar os seguintes procedimentos:

No Apache

Edite o arquivo do vhost e crie uma diretiva Directory para o diretório admin do site como no exemplo abaixo:

  
  <Directory /var/www/acme/wp-admin>
  Order Deny,Allow
  Deny from all
  Allow from 1.2.3.4
  Options FollowSymLinks
  AllowOverride All
  </Directory>
  

No Nginx

Edite o arquivo /etc/nginx/nginx.conf ou do vhost em /etc/nginx/sites-avaliable como no exemplo abaixo:

  location /wp-admin {
  root /var/www/acme/;
  index index.php;
  allow 1.2.3.4;
  deny all;
  }

REDIRECIONANDO ERROS

Outra ação interessante é redirecionar o acesso para a página principal ocorrendo erros 500,403 e 404, faça isso adcionando as seguintes linhas no arquivo de configuração do vhost:

  ErrorDocument 500 http://www.acme.com
  ErrorDocument 403 http://www.acme.com
  ErrorDocument 404 http://www.acme.com

HABILITANDO UMA 2a AUTENTICAÇÃO

Não sendo possível restringir o acesso a hosts específicos, habilite outra camada de autenticação.

No Apache

Use o htdigest para criar um arquivo de senhas.

  sudo htdigest -c /var/www/acme/digest/.pass 'Acesso Restrito' **login==

Adicione as seguintes linhas dentro da diretiva Directory correspondente ao diretório admin.

  AuthType Digest
  AuthName "Acesso Restrito"
  AuthDigestProvider file
  AuthUserFile /var/www/acme/digest/.pass
  Require valid-user

Exemplo

  <Directory /var/www/acme/wp-admin>
  AuthType Digest
  AuthName "Acesso Restrito"
  AuthDigestProvider file
  AuthUserFile /var/www/acme/digest/.pass
  Require valid-user
  Order Allow,Deny
  Allow from all
  Options FollowSymLinks
  AllowOverride All
  </Directory>

No Nginx

Só é possível utilizar o modo de autenticação Digest no Nginx apenas utilizando módulos de terceiros, para facilitar irei descrever como habilitar o modo Basic que não é o mais recomendado por não prover a confidencialidade dos dados.

Instale o pacote apache2-utils e crie o arquivo de senhas

  sudo aptitude install apache2-utils
  sudo htpasswd -c /var/www/acme/.htpasswd **login==

Adicione as seguintes linhas dentro da diretiva location correspondente ao diretório admin.

  auth_basic "Restricted";
  auth_basic_user_file /var/www/acme/.htpasswd;
  location /wp-admin {
  root /var/www/acme/;
  index index.php;
  auth_basic "Restricted";
  auth_basic_user_file /var/www/acme/.htpasswd;
  }

USANDO O HTACCESS

Nos casos onde não é possível acessar os arquivos de configuração do Apache ou Nginx, execute estes procedimentos no arquivo .htaccess.

Use o htdigest para criar um arquivo de senhas.

  sudo htdigest -c /var/www/acme/digest/.pass 'Acesso Restrito' **login==

Para proteger o diretório wp-admin,crie um arquivo .htaccess dentro deste diretório adicionando as configurações de segurança e adicione as linhas como mostra o exemplo.

  vim /home/acme/www/wp-admin/.htpasswd
  ErrorDocument 401 default
  AuthType Digest
  AuthName "Acesso Restrito"
  AuthUserFile /home/acme/www/.htpasswd
  require valid-user

Habilite também a proteção para o arquivo wp-login.php que fica no diretório raiz do Wordpress.

  vim /home/acme/www/.htpasswd
  ErrorDocument 401 default
  <Files "wp-login.php">
  Satisfy all
  AuthType Basic
  AuthName "Acesso Restrito"
  AuthUserFile /home/acme/www/.htpasswd
  require valid-user
  </Files>

HIDS/WAF

O uso de um HIDS ou um WAF é recomendado pois eles são capazes de identificar e bloquear este tipo de ataque, evitando a indisponibilidade do serviço devido a uma sobrecarga do servidor web na tentativa de atender as requisições.

PLUGINS

Exemplos de plugins que contribuem na proteção da console administrativa dos principais CMSs.

CONCLUSÃO

Usando esses procedimentos é possível inibir ataques de brute-force ou tentativas de acesso não autorizado a console administrativa não só do Wordpress como de qualquer outro CMS ou site.

REFERÊNCIAS

Artigo publicado originalmente no Blog do autor



Veja a relação completa dos artigos de Alexandro Silva

 

 

Opinião dos Leitores

Rodrigo Campos
16 Set 2013, 08:13
Isso sim é dica útil para o Dicas-L. Não aquele blablablá interminável de bandeira de software livre.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script