wordpress, aumentando a segurança
2. WordPress
Primeiro vamos focar nos ajustes e configurações da interface web.
2.1 Versão WordPress
Busque sempre utilizar a última versão disponível do WordPress.
Não tenha medo de atualizar, vale mais a pena ajustar seu tema – se houver alguma mudança – do que correr um risco de segurança.
A versão do site do projeto é testada por centenas de desenvolvedores e milhares de usuários, atualize sempre para as versões mais novas, mesmo que sejam minor versions (3.2.1 pra 3.2.2) ou major versions (3.1 para 3.2).
Ao fazer isto você vai sempre estar contando com inúmeras correções (bugfix) e melhorias.
Veja por exemplo o que a versão 3.2 trouxe de novo.
E veja no release da 3.14 como são importantes as atualizações.
2.2 Versões Plugins
Prefira sempre plugins com bastante documentação, boa aprovação e aceitação dos usuários, principalmente aqueles com vários reviews.
Mantenha seus plugins atualizados e se possível, em caso de sites com grande movimento, peça para seu desenvolvedor avaliar cada plugin buscando falhas que podem ser exploradas como XSS e SQL Injections.
Infelizmente os desenvolvedores de plugins não se preocupam com a escalabilidade, portanto, alguns plugins podem deixar seu site lento e pesado por não terem sido projetados para grandes tráficos, logo estes merecem avaliação cuidadosa e testes de carga com apoio da sua equipe de infraestrutura (devops) e desenvolvedores.
2.3 Senhas
Utilize senhas fortes alfanuméricas, case sentitive (maiusculas e minúsculas) e símbolos.
Suas senhas devem ter pelo menos 8 caracteres, se possível use mais.
Use um gerador automático de senhas, isso evita que você construa senhas com percepções pessoais, algo que pode ser explorado por atacantes estudando seu perfil em redes sociais.
Veja um exemplo de senha forte, alfanuméricas com símbolos.
q7w=1@fzctzd;d
=jil~J9R0JmG/x
Veja um exemplo de senha forte ‘pronunciável’:
nal-og-vak-hid
wuc-koj-vod-pi
Você precisa guardar essas senhas de forma segura, afinal são complicadas e difíceis de gravar em nossa memória, para isto recomendo os softwares abaixo para armazená-las.
1password (mac)
keepassx (linux)
keepass (windows)
Use senhas com essa complexidade principalmente para acesso ao banco de dados do wordpress.
2.4 Usuários
2.4.1 Admin
Em caso de um ataque de força bruta o primeiro usuário que vão tentar usar é o ADMIN, ele é o usuário padrão de administração do wordpress, portanto meu amigo, remova as credenciais deste usuário, crie um usuário com outro NOME e especifique privilégios de ADMIN, logue-se com esse novo usuário e logo depois remova o usuário ADMIN.
2.4.2 Pessoal
Crie diretamente os usuários que vão trabalhar e alimentar o site.
Evite criar usuários com nomes simples Guto, Paulo, José, Carol pois esses são os primeiros que o pessoal vai tentar ‘forçar’ a autenticação.
Crie apelidos para seus usuários e defina as permissões corretas, editor, colaborador, revisor, etc.
Mesmo definindo um nome aleatório para a conta, lembre-se que internamente você vai enxergar o ‘Nome Real’ do usuário, basta preencher esse campo corretamente durante o cadastro.
Exemplo:
Usuário: Gv10[4Rv4lh0
Nome Real: Guto Carvalho
2.4.3 Usuários nos temas
Não permita que os visitantes do site vejam o nome de quem publicou o post no seu tema, isso em caso de um site que se preocupa com segurança.
Arquivado em destaque por gutocarvalho em 10 de julho de 2011 as 9:04
Se fizer isso no seu tema, você estará dando metade da informação necessária para que alguém execute um ataque de força bruta em seu blog.
Por último, desabilite o registro de usuários, cadastre manualmente seus colaboradores, assim é mais seguro.
2.5 Acesso Remoto
Prefira sempre SFTP ou SSH ao acesso FTP quando for enviar arquivos para seu servidor, se possível desabilite a conta FTP em seu sistema.
3. Sysadmin
Essa área é focada para ajustes no servidor WEB (Apache2/Nginx/etc…) e no sistema de arquivos.
São necessários conhecimentos intermediários/avançados a partir deste ponto.
3.1 Listagem de Arquivos
Por padrão o wordpress não trata a listagem de arquivos, deixando algumas brechas que permitem que alguém aponte direto para seu diretório de imagens e veja todos os seus arquivos, isto não deve ser permitido.
Para tratar isso devemos desabilitar o INDEXES via .htaccess no diretório em questão.
Insira a linha no fina .htacess do diretório root do seu wordpress.
[code]
# END Url Rewrite section
Options -Indexes
DirectoryIndex index.html index.php /wordpress/index.php
# BEGIN WordPress
[/code]
Observe que você tem que ser inserir o código entre essas linhas END e BEGIN, do contrário não funciona.
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.2 Informações do sistema
3.2.1 Versão
Omitir versão do wordpress é importante, se o atacante sabe a versão ele pode procurar por exploits vigentes que podem te afetar caso algo ainda não tenha atualizado seu blog.
Para resolver isto basta editar o functions.php do seu tema e adicionar a linha abaixo.
[code]remove_action(‘wp_head’, ‘wp_generator’);[/code]
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.2.2 Robots
Evite que os robos varram e indexem diretórios administrativos de seu site.
Edite o arquivo robots.txt da raiz e insira a linha abaixo:
[code]Disallow: /wp-*[/code]
3.3 Diretórios e Arquivos
3.3.1 Adicionando mais uma camada de autenticação
Assim temos mais uma camada de segurança antes de liberar acesso ao arquivo de autenticação do wordpress, dificultamos um pouco mais para o atacante.
O seu apache2 tem que ter suporte a autenticação digest para usar esse recurso.
Edite o arquivo .htaccess da raiz e insera o código abaixo.
[code]<Files wp-login.php>
Satisfy Any
AuthType Digest
AuthName “Auth Level One”
AuthDigestDomain /wp-admin/
AuthUserFile /var/www/wordpress/.htpasswd
Require valid-user
</Files>[/code]
criando o arquivo e setando senha para o primeiro usuário
[code]htpasswd -cm /var/www/wordpress/.htpasswd user[/code]
criando o segundo usuário
[code]htpasswd -m /var/www/wordpress/.htpasswd user[/code]
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.3.2 Podemos pedir autenticação para tudo que não for um arquivo estático neste diretório.
[code]AuthType Digest
AuthName “Auth Level One”
AuthDigestDomain /wp-admin/
AuthUserFile /var/www/wordpress/.htpasswd
Require valid-user
<FilesMatch “\.(ico|pdf|flv|jpg|jpeg|gif|png|mp3|mp4|mpeg|mov|wav|wmv|avi|swf|css|js)$”>
Allow from All
</FilesMatch>
<FilesMatch “(async-upload|admin-ajax)\.php$”>
<IfModule mod_security.c>
SecFilterEngine Off
</IfModule>
Allow from All
</FilesMatch>[/code]
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.3.3 Subir o wp-admin em um nível
Você pode subir o arquivo wp-admin.php um nível – fora do root wordpress – para aumentar a segurança, funciona, está na documentação do codex.
3.3.4. Restrinja acesso direto a arquivos PHP, apenas arquivos de mídia serão permitidos e carregados.
Esse código também bai no htacess. [code]RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /wordpress/wp-content/.*$ [NC] RewriteCond %{REQUEST_FILENAME} !^.+(flexible-upload-wp25js|media)\.php$ RewriteCond %{REQUEST_FILENAME} ^.+\.(php|html|htm|txt)$ RewriteRule .* - [F,NS,L][/code]
Isso pode quebrar alguns plugins, porém você pode tratar a excessão plugin a plugin no htaccess.
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.4. Cuidando do Banco
Quando o wordpress é instalado por padrão, ele cria tabelas com o prefixo wp-*
Usar essa tabelas facilita a vida do atacante pois ele conhece quais são as tabelas de usuário, posts, etc, assim ele pode tentar fazer injections e alterar os dados destas.
Para dificultar a vida do atacante podemos mudar o prefixo das tabelas para qualquercoisa-* por exemplo, isso pode ser feito durante a instalação.
Se seu wordpress já estiver instalado, vamos indicar alguns plugins que te ajudam a fazer esta mudança.
3.5 Permissões de arquivos
É importante definir corretamente as permissões de arquivos do seu wordpress
Nunca use 777 para diretórios e arquivos, faça o correto.
Use sempre a permissão 755 (RWX,R–,R–) para diretórios e 644 (RW-,R–,R–) para arquivos.
Ajustando permissões de arquivos via shell no seu servidor.
[code] find /var/www/wordpress -type f -exec chmod 664 {} \;[/code]
Ajustando permissões de diretórios
[code] find /var/www/wordpress -type d -exec chmod 775 {} \; [/code]
Mais informações no codex:
http://codex.wordpress.org/Changing_File_Permissions
3.6 Bloqueio de ips no admin
Se possível limite no apache2 os IPs que podem acessar o WP-ADMIN, isso diminui bastante a chance dos atacantes pois apenas alguns IPs conseguirão entrar neste diretório.
[code]Order Deny,Allow
Allow from ww.xx.yy.zz
Deny from all[/code]
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.7 Cookies Encriptados
Um cookie HTTP é um pedaço de informação em modo texto armazenado no navegador do usuário. O cookie pode ser utilizado para guardar informações acerca da autenticação, guardar as preferencias do usuário, preferências de carrinhos de compra em sites de e-commerce ou outras informações, praticamente qualquer coisa pode ser armazenada em um cookie, inclusive informações sensíveis.
Atacantes podem tentar interceptar cookies através de sniffers, e com isso obter informações acerca de sua autenticação. Isso é chamado de Cookie Hijacking e para evitá-los podemos criptografar alguns cookies, existe um gerador automático basta acessar o endereço abaixo para gerar os cookies para seu site.
https://api.wordpress.org/secret-key/1.1/salt/
Copie a saída e coloque em nosso wp-config.php
[php]define(‘AUTH_KEY’, ‘5@a+1ZA8aP[yb _yL6M&mk65g0PAW%?#>S=G%A!.>l%||Lg-VD+;ZB*ZxnefuW:L’);
define(‘SECURE_AUTH_KEY’, ‘iuxsg+ENbHYJ9Ut-,a1`G3fsEAPG|6HE-eD@B;foCW(h +)$HolP~p[.sYWkaYvr’);
define(‘LOGGED_IN_KEY’, ‘CC?(TpO&O|`|Me-2oY[WDyr:PE-Y{UjkYK?2IOKMSF~n[8chw7HIop!;AE=Oy`mj’);
define(‘NONCE_KEY’, ‘tzB-!L{(.$0Km`U@~PlkS+a(04)V_+F YUy A*E8~$F|(L$/5W~x|kFSV+w)mJ-g’);
define(‘AUTH_SALT’, ‘@N!`lVz-9IP2FDt0%Eyy6dJaV!^pPI8= U7aSjo:.`yB[)bCkt]Ok4za?S S`W*[‘);
define(‘SECURE_AUTH_SALT’, ‘jl=}pRQG#*41@+#InPk-:=-JCWBbl1W7BfQG0|5C&>(|p|(0>xzMT7}B91)psvza’);
define(‘LOGGED_IN_SALT’, ‘jH$+Y99[~;-3Fr.%h/z&@XZ2)KQ#4yu-TSiLQl–ux(+ekC`3_tt_3T3$J=~HX|t’);
define(‘NONCE_SALT’, ‘AXIk6?5z]`s,Y}n.^a^- YglT:t1enJB+T4xPGrs$~rylF^yga7xj;0*!;T!O_rc’);[/php]
Esse é um exemplo randômico de saída, cada acesso, ou seja cada vez que carregar esse endereço, o site vai gerar uma saída diferente.
Com isso a parte sensível dos cookies do wordpress passa a ser criptografada, dificultando a vida dos atacantes.
3.8 Acesso seguro
3.8.1 site principal
Se houver condições use HTTPS no site principal – prefira sempre um certificao válido, isso aumenta sensivelmente a segurança e privacidade dos dados, principalmente se você for acessar o site e publicar a partir de locais públicos.
Lembrando que você vai precisar configurar o VHOST para conexão SSL no apache2 além gerar os certificados, sejam auto-assinados, sejam válidos.
http://en.support.wordpress.com/https/
3.8.2 site administrativo
Essencial rodar essa área do site em modo seguro, dá para isolar apenas o admin via SSL, deixando o HOME em HTTP puro.
O WordPress tem alguns parâmetros que podem forçar o LOGIN em SSL, basta inserir no wp-config.php
[php]define(‘FORCE_SSL_ADMIN’, true);[/php]
http://codex.wordpress.org/Administration_Over_SSL
Você pode utilizar um plugin para isto, antes de intervir continue lendo até a seção de plugins.
3.9 Backup
Faça Backup diariamente dos arquivos estáticos e dinâmicos do WordPress.
[code]tar jcvf /var/backups/wordpress-`date +%Y%m%d`.tar.bz2 /var/www/wordpress[/code]
Faça Backup diariamente e do banco.
[code]mysqldump -U usuário -p nomedobanco > /var/backups/wordpress-database`date +%Y%m%d`.tar.sql[/code]
Você pode agendar estas tarefas no CRON.
4. Plugins WordPress
Abaixo vou apresentar alguns plugins interessantes para você utilizar em seu wordpress, mas isso não significa que você tem que sair baixando tudo e instalado tudo, alguns podem sobrepor outros, entenda o que cada um faz primeiro, na seção 4.4 eu vou te ajudar a combinar alguns plugins de segurança para você ter maior eficiência no uso destes.
4.1 Segurança
Vamos começar pelos plugins que são o foco deste post, segurança!
4.1.1 Akismet
Este plugin lhe permite controlar SPAM no seus comentários e track-backs, evitando vandalismos em seu site.
É um dos plugins de mais eficientes para essa finalidade.
4.1.2 Bad Behavior
Utilizar plugin Bad Behavior para bloquear IPs maliciosos e comportamentos suspeitos.
Este plugin analisa toda o início das requisições HTTP, caso um bot seja detectado ele rejeita o acesso.
Ele avalia IPs sujos e outros comportamentos diminuindo as chances de vandalismo em seu site.
http://bad-behavior.ioerror.us/documentation/benefits/
4.1.3 WP Better Security
É um dos plugins mais completos que eu conheço, vale a pena utilizar e sempre tem atualizações muito recentes, acompanhando o lançamento das releases do WP.
Este plugin remove tags com versão do wordpress
Remove erros de login
Permite mudar URLS de áreas administrativas
Limita o acesso ao ADMIN para alguns ips
Pode banir acesse de alguns IPs
Tem suporte a desligar login no wordpress em perídos (por exemplo de madrugada).
Previne tentativas de login por força bruta
Não deixa os usuários internos verem a versão do seu wordpress
Remove notificacões de atualizações dos usuários que não são admins
Aumenta a segurança do seus diretórios via controles htaccess
Detecta comportamentos suspeitos no site e te manda e-mails avisando
Permite renomear a conta Admin
Permite tocar o prefixo do seu banco de dados wp* para outra coisa
Pode desabilitar edição de arquivos de temas via Admin
Pode forçar acesso SSL ao admin.
Dentre outros recursos.
http://bit51.com/software/better-wp-security/
4.2 Sysadmin
Plugins que ajudam na administração do site.
4.2.1 WPDB-Manager
Utilizar plugin WPDB-Manager para cuidar do seu banco de dados.
Ele te permite administrador o banco com os seguintes recursos:
Backup diario
Otimização da base
Reparo de base e tabelas corrompidas
4.3 Outros Plugins interessantes
4.3.1 Login Lockdown
Utilizar plugin Login Lockdown para evitar força bruta no login.
Você define quantos erros cada tentativa de login pode ter, de quanto em quanto tempo a pessoa pode tentar se logar após um erro e o tempo de bloqueio caso a regra definida seja infringida.
Você pode inibir as mensagens de erro de login, isso é interessante para evitar que o atacante saiba se o usuário é válido.
Você pode visualizar os IPs bloqueados e liberar o IP se for um falso positivo.
http://www.bad-neighborhood.com/login-lockdown.html
4.3.2 Ask Apache Password Protect
Este plugin protege os diretórios e arquivos do seu wordpress. Fora isto ele também analisa e inibe alguns comportamentos maliciosos.
Abaixo os principais pontos em que ele atua:
Protege o diretório wp-content
Protege o diretório wp-include
Protege o diretório wp-admin com segunda camada de autenticação
Protege o arquivo wp-login.php com segunda camada de autenticação
Inibe a listagem de arquivos nos diretórios do WP (indexes apache)
inibe o acesso direto a arquivos dinâmicos em diretórios administrativos
Fora isto ele tem métodos de proteção contra SPAM, Hijacking, XSS dentre outros.
É um plugin muito completo, porém use com cuidado, dependendo da proteção seu tema e plugins podem quebrar.
Uma coisa trabalhosa é que dependendo do que você habiltar para ele proteger, por exemplo, diretório wp-content, demandará desligar o plugin para fazer atualizações no Core do WordPress , Plugins e temas.
http://wordpress.org/extend/plugins/askapache-password-protect/
4.3.3 Secure WordPress
Recursos do plugin:
Desativa o retorno de mensagens de erro no login (possibilitam saber se o usuário existe)
Esconde versão do WordPress nos cabeçalhos
Esconde versões do WordPress no dashboard para usuários “não admins”
Esconde versões do WordPress nos Stylesheets do frontend (visão do usuário)
Criar arquivos index.php em ‘plugins’ e ‘themes’ para evitar listagem de diretórios
Remove alertas de update do wordpress para “não admins”
Remove alertas de atualização de plguins para “não admins”
Protege o wordpress contra URL’s maliciosas
Tem suporte a auditoria do websitedefender.com
Atua na detecção de Malware presente em seu website
Atua na auditoria do website buscando problemas de segurança
Evita que você seja bloqueado (blocklist) pelo google
Mantém o conteúdo do seu website seguro
Envia alertas sobre comportamentos suspeitos
http://wordpress.org/extend/plugins/secure-wordpress/
4.3.4 Security Scan
Este plugin avalia seu ambiente e lhe sugere melhorias.
Através dele você pode inclusive mudar o prefixo de suas tabelas no baco de wp-* para algumacoisa-* , dificultando a vida do atacante.
Ele oferece os seguintes recursos:
Gerador de senhas fortes
Avalia, alerta e permite ajustar permissões de arquivos inseguras
Avalia, alerta e permite desativar o retorno de erros em tentativas de login
Avalia, alerta e permite ajustar a segurança de sua base de dados
Permite o backup de sua base de dados
Permite trocar o prefixo de suas tabelas
Verifica se a versão do WP no sistema está oculto
Verifica se a versão do WP nas META TAGS está oculto
Verifica se o usuário ADMIN existe e tem privilégios de ADMIN
Verifica se o WP está atualizado
Verifica se os diretórios estão protegidos por arquivos .htaccess
http://wordpress.org/extend/plugins/wp-security-scan/
4.3.5 AntiVirus
Uma forma simples de verificar os arquivos do wordpress e temas.
Pronto para rodar no wordpress 3
Detecta backdoor no sub-sistema permalink
Verifica os arquivos do wordpress atrás de código malicioso – dá muito falso positivo
Verifica os arquivos do seu tema atrás de código malicioso – dá muito falso positivo
Tem suporte a whitelist para excluir arquivos da checagem – para evitar falso positivo
Tem suporte a agendamento para executar a verificação diariamente.
Você pode usá-lo eventualmente para dar um checada principalmente no tema, abuse da whitelist para ele não ficar alarmando coisas que você tem certeza que não são problema.
4.4 Ativando plugins de segurança que não vão se sobrepor
4.4.1 Segurança Combinado 1 – Nível Preocupado
- Akismet + Badbehavior para cuidar de SPAMs e comportamentos maliciosos.
- Secure WordPress + Security Scanner para monitorar aspectos de segurança, omitir informações e proteger diretórios.
- Login Lockdown para barrar ataques de força bruta no login.
O Secure WordPress e Security Scanner te permitem usar o site websitedefender.com para scannear e monitorar seu site, esse site tem alguns ferramentas bem bacanas, o plugins integram seu blog ao site para monitoração constante.
Usei por muito tempo essa combinação, é eficiente porém requer vários plugins ativados, algo que pode deixar seu site com menor performance.
4.4.2 Segurança Combinado 2 – Nível Paranóico
- Akismet + Badbehavior para cuidar de SPAMs e comportamentos maliciosos.
- Secure WordPress + Security Scanner para monitorar aspectos de segurança, omitir informações. Aqui por favor desative a parte de proteçao de diretórios, vamos fazer isso em outro plugin.
- Login Lockdown para barrar ataques de força bruta no login.
- Ask Apache Password para criar uma segunda camada de autenticação e proteger diretórios.
Essa combinação é bastante eficiente, o único problema é que o Ask Apache Password quando ativado não permite atualização de temas, plugins ou do CORE do WORDPRESS, você precisa desligá-lo, fazer a manutenção e ligá-lo novamente, isso pode ser cansativo, porém, se busca um nível alto de segurança essa é a combinação para você.
4.4.3 Combinação 3 – Nível Segurança na Medida
- Akismet + Bad Behavior
- WP Better Security
Essa combinação abrange quase toda a parte 3 com excessão da segunda camada de autenticação, é a combinação que eu uso, para o meu blog é mais do que suficiente.
5. Conclusão
É possível ter um ambiente wordpress seguro sem muitas dificuldades, existe uma grande quantidade de plugins que podem nos ajudar, só devemos tomar cuidado para não utilizar plugins demais, degradando a performance da ferramenta, ou utilizar ferramentas e plugins de segurança que sobreponham recursos de outras, se você dois plugins fazendo a mesma coisa vão te causar problemas, então tome muito cuidado com isto.
Além de usar as ferramentas, as boas práticas descritas na seção 2, relativas as senhas, nomes de usuários e configurações são sempre os melhores caminhos para se ter um ambiente realmente seguro e incólume.
6. Referências
http://codex.wordpress.org/Hardening_WordPress
http://codex.wordpress.org/Changing_File_Permissions
https://api.wordpress.org/secret-key/1.1/salt/
http://en.support.wordpress.com/https/
http://codex.wordpress.org/Administration_Over_SSL
http://en.wikipedia.org/wiki/Salt_%28cryptography%29