SEO e SQL injection: é importante se proteger

No fim do meu post anterior, comentei sobre o problema de deixar sua versão do WordPress desatualizada. Alguns espertalhões tem aproveitado vulnerabilidades para inserir códigos em páginas de sites. Estes códigos tem diversas funções. Uma é a de esconder links nas suas páginas para passar o PageRank da vítima para páginas escolhidas pelo invasor. Outra é inserir código para abrir publicidade pop-up na suas páginas ou para usar sua página para atacar seus visitantes. Isto pode ser entendido como Black Hat SEO e causar punição para o seu site sem você nem ter culpa.

Umas das técnicas para explorar estas vunerabilidades é o SQL Injection e seu uso tem aumentado recentemente. Ele se aproveita da programação utilizada para consultar suas tabelas do banco de dados para roubar informação ou inserir código malicioso. Isto quer dizer que qualquer site que monta suas páginas com base no conteúdo de um banco de dados, como gerenciadores de conteúdo, corre o risco deste ataque.

Em maio deste ano começou um ataque vindo da China. Ele possui algo diferente de outros ataques, pois usa um robô que busca pelo Google sites vulneráveis. Isto possibilitou que o ataque fosse em grande escala e atingisse muitos sites pela internet. Existem sites do governo e de grande empresas entre as vítimas no Brasil. Qual o problema disto? O Google pode considerar o seu site um malware, colocar um aviso de site perigoso nele e até puní-lo.

Exemplo de página infectada com alerta “Este site pode danificar seu computador”:Tela do Google com alerta

Uma maneira de encontrar alguns exemplos deste grande ataque é procurar no Google por “b.js“, ou por um dos domínios usados no ataque como www.chinabnr.com, www.adwbnr.com ou www.pingadw.com. Se você foi vítima de um ataque deste, visite o link para saber sobre este SQL Injection da China.

Este código pode estar oculto no seu site e talvez seja difícil para o dono do site descobrir que sofreu um ataque. Para isto você tem duas alternativas: vasculhar o código de todas as página do site ou torcer para o Google descobrir e te enviar uma mensagem de alerta. Esta mensagem pode estar no Google Webmaster Tools na área de mensagens ou pode vir por e-mail se você tiver uma conta com nome de usuário como abuse, admin, administrator, contact, info ou webmaster. Um exemplo seria ter um e-mail como “contact(arroba)seusite.com.br”.

A mensagem que você receberá terá instruções sobre qual é a URL problemática e a possível causa do problema. Resolva completamente o problema e então informe ao Google. A tendência é que esti tipo de ataque seja mais comum, principalmente pelo potencial de conseguir links para aumentar PageRank, por isto atenção redobrada e divulgue sobre os riscos de invasão.

23 Comentários

  1. Marcel Souza

    julho 1, 2008 @ 7:24 pm

    Olá amigo, tive meu site penalizado pelo Google (só a raiz, páginas internas aparecem normalmente), porém o PageRank não diminuiu (ainda).

    Desconfio que seja alguma coisa relacionada ao seu artigo pois eu estava com a versão do WordPress desatualizada. Mas já atualizei.

    Quero saber se só de atualizar ele já resolve o problema ou se eu preciso fazer alguma busca? Tentei instalar um plugin chamado Exploit Scanner mas ele não funciona na Blue Host (onde eu hospedo meu site).

    Fiz uma busca pelos códigos e não vi nada de anormal. Mas não sei…

    Se você puder me ajudar, eu lhe agradeço antecipadamente.

    Abraços

  2. Paulo Rodrigo Teixeira

    julho 1, 2008 @ 7:44 pm

    Oi Marcel,

    Que pena esta punição. Claro que posso ajudar! Vou entrar em contato por e-mail.

    Um grande abraço,

  3. Agrinei

    julho 1, 2008 @ 8:01 pm

    Olá Paulo,

    Recentemente prestei uma consultoria para um cliente que foi vítima desse ataque vindo da China. Realmente é importante divulgar essa informação e nos certificarmos de que nossos sites e os de nossos clientes estão livres dessa falha.

    A única observação que faço é que não creio que nesses ataques haja intenção de aumentar o PageRank do “site atacante”. O objetivo principal, se não único, é injetar código que vai explorar vulnerabilidades nos browsers dos visitantes do site atacado. Por fim o atacante poderá vir a ter total controle sobre a máquina dos que visitaram o site comprometido, podendo inclusive iniciar novos ataques a partir delas.

    Abraços,

  4. Paulo Rodrigo Teixeira

    julho 2, 2008 @ 11:41 am

    Oi Agrinei!

    O “SQL Injection da China” é feito em um software que é configurável. Você pode trocar o tipo de informação a ser inserido no banco de dados e ele pode ser uma div oculta com links por exemplo. O ataque ao WordPress também usa esta técnica. A verdade é que as possibilidades destes ataques são muitas.

    E valeu pelo exemplo pessoal também. Se tiver alguma dica, fique à vontade para comentar aqui para o pessoal

    Muito obrigado.

  5. Agrinei

    julho 2, 2008 @ 4:27 pm

    Paulo, realmente as possibilidades desses ataques são muitas!

    Deixo algumas dicas básicas para os desenvolvedores que leêm seu blog:

    – Sempre utilizar parâmetros nas consultas SQL, ao invés de concatenar diretamente os dados fornecidos pelos usuários.

    sql = “Select * from usuarios where login = @login ”

    ao invés de

    sql = “Select * from usuarios where login = ‘” & Request(“login”) & “‘”

    РSe houver alguma url no site que aceita um par̢metro num̩rico, fa̤a testes passando valores ṇo num̩ricos:

    url: site.com.br/produto.asp?cod=200
    testar: site.com.br/produto.asp?cod=teste

    A mensagem de erro recebida pode indicar que a página ou site está vulnerável.

    – Se houver caixas de texto que permitem a entrada de dados pelos visitantes, tais como telas de login, formulários de cadastro, etc., experimente digitar caracteres especiais, como por exemplo uma aspa simples, e ver o que acontece. Novamente, determinadas mensagens de erro indicam vulnerabilidade.

    – Se o site ou sistema utiliza MS SQL Server como base de dados é ainda mais crítico certificar-se de que não há falhas de SQL Injection pois é muito fácil explorá-las nesse banco de dados.

    – Há ferramentas que permitem fazer a verificação automática de falhas de segurança, mas infelizmente elas não têm como fazer correção automática.

    РPor fim, estudem, entendam e testem seus sites e os de seus clientes contra essa e outras falhas de seguran̤a. Outra falha comum ̩ a de XSS (Cross-site scriting).

    Abraços,

  6. brazz

    julho 2, 2008 @ 5:02 pm

    Marcel,
    Eu costumo acompanhar seu site (no que diz respeito a SEO).
    Ele sumiu da primeira página para [planos de saude], mas ele retorna quando você adiciona &filter=0 ao final da string de pesquisa.
    Isso significa que você precisa de um pouco mais de trustrank, apenas isso.

    Algumas sugestões:
    Continue escrevendo sobre Planos de Saúde. Consiga alguns links em sites confiáveis, se possível em sites correlatos (já tentou o dmoz.org?).
    Abstenha-se de conseguir links patrocinados (a não ser que o patrocínio não fique evidente). Apague a menção a PR na sua página Anuncie Aqui; não coloque seu link em sites sobre SEO.

    Ou seja: você tem que convencer a Google que está mais preocupado com conteúdo do que com SEO.

  7. Wagner

    julho 2, 2008 @ 8:55 pm

    Tive meu domínio atingido por essa praga também, felizmente estou conseguindo bloqueá-la agora… tive sorte do Google não ter me punido.

    Para quem trabalha com ASP, é essencial que os parâmetros da URL (tipo o TP=66 da imagem do site contaminado desse post) só aceitem números, ou se forem texto, que tenham seu tamanho limitado para não aceitar as intruções do SQL Injection.

    A última versão do Adobe Dreamweaver já constrói o código ASP prevendo que os parâmetros da URL só aceitem caracteres específicos. Para as versões anteriores tem update pra isso. Fazendo essa correção no código, dá pra se previnir dessa onda ataques maldita!

  8. Paulo Rodrigo Teixeira

    julho 3, 2008 @ 9:20 am

    Agrinei,

    Execelente explicação. Uma aula de proteção para bancos de dados.

    Brazz,

    Você tocou no ponto. Confiança é um fator muito importante. E aquela afirmação de que “Texto ou palavra-chave apontando para seu site” é puramente venda de link.

    Wagner,

    Boas dicas também. Esta do Dreamweaver complementa a do Agrinei.

    É muito bom saber que os visitantes são de alta qualidade!

    Um grande abraço a todos e muito legal seus comentários.

  9. Ruben Zevallos Jr.

    julho 4, 2008 @ 7:38 am

    Existem várias formas de atacar um site.. e o SQL Injection é a mais comum e antiga, não sabia imaginava que o Worldpress teria tal problema, já que ele é bem antigo e tem muita gente atualizando ele. O bom é que o seu artigo estará alertando muita gente também.

  10. Alex Sander Pelati

    julho 7, 2008 @ 9:25 am

    Oi Paulo,

    Assim como o Marcel, tive alguns sites penalizados pelo Google devido a esses ataques. Já retirei os códigos inseridos e até modifiquei as metatags das páginas, mas o site não recuperou seu posicionamento.

    O pior de tudo é que não consta nenhum aviso no Google Webmaster Tools, enfim, não sei mais o que fazer. Será que você pode me ajudar?

    Desde já agradeço.

    Abraços

  11. Marcel Souza

    julho 7, 2008 @ 3:19 pm

    brazz said, Obrigado pelas dicas.

    Eu tinha percebido esse esquema do &filter=0 hoje, ia comentar por aqui.

    Realmente estou limando algumas informações, até deletei a página Anuncie Aqui.

    Vou seguir as dicas, investir em conteúdo de qualidade e informação relevante para o usuário.

    Queria agradecer pela ajuda e atenção de vocês.

    Abraços e continuem com o site.

  12. Marcel Souza

    julho 7, 2008 @ 3:30 pm

    Esqueci de perguntar, o que é o “trustrank”?

  13. Miguel Dorneles

    julho 7, 2008 @ 6:08 pm

    Grande Paulo!

    Será que o site do IAB Brasil pode ter sido alvo de um SQL Injection? Reparei no warning do Google hoje ao fazer uma busca por “iab brasil”. Os sintomas são muito semelhantes.

    Abraço!

  14. Paulo Rodrigo Teixeira

    julho 8, 2008 @ 9:52 am

    Oi Alex,

    Normalmente basta corrigir o problema e pedir a reinserção tudo volta ao normal. Não pode ser uma reincidência ou ainda existe algo dentro do site? Para analisar só olhando o site mesmo.

    Oi Miguel,

    Excelente observação. O ataque é o mesmo sim. Pegou um furo!

    Foi muito legal te rever no domingo.

    Um abração

  15. Gustavo Cardial

    julho 9, 2008 @ 4:59 am

    Ótimo post de alerta.

    Como disseram acima, no caso deste ataque específico a intenção dos atacantes é explorar vulnerabilidades em navegadores (principalmente antigos) para recrutar mais PCs para a botnet deles.

    Mas claro, também é possível utilizar SQL Injection (e XSS) para passar PageRank!

    90% das falhas SQL Injection ocorrem em parâmetros numéricos. Dica rápida: programadores ASP, utilizem a função Int() em seus parâmetros numéricos. Ao invés de Request.QueryString(“id”), usem int(Request.QueryString(“id”))…

    Quanto ao WordPress, mesmo que esteja vulnerável a SQL Injection (seja por uma versão antiga ou um plugin vulnerável), será impossível alterar dados (injetar códigos e links). Ele usa PHP/MySQL, e vulnerabilidades nesta combinação de linguagem/base só permitem a leitura…

  16. ATer

    julho 9, 2008 @ 8:59 pm

    Excelente texto Parabens. Tive esse problema e fui a busca para poder resolver. Mas a unica opção foi voltar com o html antigo. E esperar que não ocorra novamente.

  17. Cristina Dissat

    julho 12, 2008 @ 10:58 pm

    Oi Paulo, revisamos todo o Fim de Jogo, retiramos excesso, atualizamos o wp, diminui muito as táticas de SEO e nada. Continuo fora do Google. Para minha surpresa e alegria (alguma coisa tinha que melhorar) a galera da Blogosfera está toda me ajudando. Estão incluindo matérias, links, comentários, banners, etc. Todos se ofereceram para me ajudar. Acho que a última coisa a fazer é enviar emails para o Google. Page e Sergey eram muito insistentes e fizeram tudo porque acreditavam e seu projeto… acho que é única forma. Não sei mais o que posso fazer. Abs,

  18. LulaRibeiro

    julho 14, 2008 @ 6:15 pm

    Oi Paulo,

    sou o Luiz que fez teu curso na Facha e no IBTA.

    Estou aqui para você dar uma visitada no meu novo blog!

    Estou colocando em prática o SEO!

    Abraço
    Lula

  19. sonia

    agosto 17, 2008 @ 7:35 pm

    OI Rodrigo,

    Gostaria de fazer o curso de links patrocinados…….SEO foi bótimo…melhor que ótimo.
    abraçosssssssssssssssss

  20. Neto

    março 21, 2009 @ 1:10 am

    Estou usando o WordPress, já troquei o prefixo das tabelas, exclui o usuário admin e mais outras mudanças. Espero que isso impeça uma invasão…

  21. efraimdb

    abril 1, 2009 @ 2:35 pm

    Estou visitando SEO e estou aprendendo muito sobre segurança, parabens.

  22. efraimdb

    setembro 11, 2009 @ 4:22 pm

    Estou começando participar deste blog , tenho algumas dúvidas a respeito de segurança no server local. Se alguem digitar um link direcionando para o servidor, no momento que eu estiver logado, ele consegue acesso na página , que quizer, quando não estou logado ,isto não acontece, que devo fazer, tenho session instalado, phpmysql.

  23. João

    janeiro 10, 2011 @ 9:58 am

    Olá srs, embora esse post seja antigo, eu o li agora e tenho uma dúvida ref. a SQL Injection. Páginas que exibem resultados de busca devem manter o seu “SELECT” baseado em uma variável de url cujo conteúdo será o que o usuário digitar na caixa de pesquisa. O modo de envio de dados via GET é padrão para buscas e eu até hoje somente vi 1 ou 2 sites que processavam suas buscas via POST (ou por sessão). Isso pode vir a tornar-se uma “falha”? Se for possível utilizar POST ou SESSION é mais recomendável do que GET mesmo em caso de busca?

    Obrigado e parabéns pelos artigos. Muito esclarecedores.