Ir para o conteúdo principal

Os ataques de injeção de SQL são uma das vulnerabilidades mais antigas das aplicações da Web, que têm sido discutidas desde o final dos anos 90, mas ainda permanecem relevantes hoje. Este explicador descreve o que são, como funcionam e como você pode evitá-los.

Injeção de SQL: significado e definição

Uma injeção de SQL, às vezes abreviada como SQLi, é um tipo de vulnerabilidade em que um invasor usa uma parte do código SQL (Structured Query Language) para manipular um banco de dados e obter acesso a informações potencialmente valiosas. Esse é um dos tipos de ataque mais comuns e perigosos porque pode ser usado contra qualquer aplicação de Web ou site que utilize um banco de dados SQL (ou seja, a maioria deles).

Como funcionam os ataques de injeção de SQL?

Para entender a injeção de SQL, é importante saber o que é Structured Query Language (SQL). A SQL é uma linguagem de consulta usada em programação para acessar, modificar e excluir dados armazenados em bancos de dados relacionais. Como a grande maioria dos sites e aplicativos da Web depende de bancos de dados SQL, um ataque de injeção de SQL pode ter sérias consequências para as organizações.

Uma consulta SQL é uma solicitação enviada a um banco de dados para que seja realizado algum tipo de atividade ou função, como consulta de dados ou execução de código SQL a ser realizada. Um exemplo é quando as informações de login são enviadas através de um formulário web para permitir o acesso de um usuário a um site. Normalmente, esse tipo de formulário da Web é projetado para aceitar somente alguns tipos específicos de dados, como um nome e/ou uma senha. Ao serem inseridas, essas informações são verificadas no banco de dados e, se corresponderem, o usuário terá permissão de acesso. Caso contrário, o acesso será negado.

Possíveis problemas ocorrem porque a maioria dos formulários da Web não consegue impedir a entrada de informações adicionais. Os invasores podem explorar esse ponto fraco e usar caixas de entrada no formulário para enviar suas próprias solicitações ao banco de dados. Isso poderia permitir a realização de uma série de atividades mal-intencionadas, como roubo de dados confidenciais e manipulação de informações no banco de dados para seus próprios fins.

Devido à predominância de sites e servidores que utilizam bancos de dados, as vulnerabilidades de injeção de SQL são um dos tipos mais antigos e comuns de ataque cibernético. A evolução da comunidade de hackers aumentou o risco desse tipo de ataque, principalmente com o surgimento de ferramentas para detectar e explorar a injeção de SQL. Disponibilizadas livremente por desenvolvedores de código aberto, essas ferramentas permitem que cibercriminosos conduzam ataques automáticos em questão de alguns minutos, permitindo que acessem qualquer tabela ou coluna do banco de dados apenas com um processo de clicar e atacar.

Sintomas da SQLi

Um ataque bem-sucedido de injeção de SQL pode não apresentar sintomas. No entanto, às vezes há indicações externas, que incluem:

  • Recebimento de um número excessivo de solicitações em um curto período. Por exemplo, você pode receber vários e-mails por meio do formulário de contato de sua página da Web.
  • Anúncios que redirecionam para sites suspeitos.
  • Pop-ups e mensagens de erro estranhos. 

Tipos de injeção de SQL

Dependendo de como obtêm acesso aos dados de back-end e da extensão dos danos potenciais que causam, as injeções de SQL se enquadram em três categorias:

SQLi em banda: 

Esse tipo de ataque de SQLi é simples para os invasores, pois eles usam o mesmo canal de comunicação para desencadear ataques e obter resultados. Esse tipo de ataque de SQLi tem duas subvariações:

  • SQLi com base em erro: o banco de dados gera uma mensagem de erro devido às ações do invasor. Com base nos dados gerados pelas mensagens de erro, o invasor coleta informações sobre a infraestrutura do banco de dados.
  • SQLi com base em Union: o invasor usa o operador UNION SQL para obter os dados desejados reunindo várias instruções select em uma única resposta HTTP.

SQLi de inferência (também conhecido como injeção de SQL cego): 

Nesse tipo de SQLi, após enviar cargas de dados, os invasores usam os padrões de resposta e comportamento do servidor para obter mais informações sobre a estrutura dele. Os dados não são transferidos do banco de dados do site para o invasor. Portanto, o invasor não vê informações sobre o ataque em banda (essa é a origem do termo "SQLi cego"). O SQLi de inferência pode ser classificado em dois subtipos:

  • SQLi com base em tempo: os invasores enviam uma consulta SQL ao banco de dados, fazendo com que ele aguarde alguns segundos antes de responder à consulta como verdadeiro ou falso.
  • SQLi booliano: os invasores enviam uma consulta SQL ao banco de dados, permitindo que o aplicativo responda com a geração de um resultado verdadeiro ou falso.

SQLi fora de banda: 

Esse tipo de ataque SQL ocorre em dois cenários:

  • Quando os invasores não conseguem usar o mesmo canal para desencadear o ataque e coletar informações; ou
  • Quando um servidor está muito lento ou instável para executar essas ações.

Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

Impacto de ataques de injeção de SQL

Um ataque de injeção de SQL bem-sucedido pode acarretar sérias consequências a uma empresa. Isso ocorre porque um ataque de injeção de SQL pode:

  • Expor dados confidenciais. Os invasores podem recuperar dados, o que gera o risco de exposição de dados confidenciais armazenados no servidor SQL.
  • Comprometer a integridade dos dados. Os invasores podem alterar ou excluir informações de seu sistema.
  • Comprometer a privacidade dos usuários. Dependendo dos dados armazenados no servidor SQL, um ataque pode expor informações confidenciais dos usuários, como endereços, números de telefone e dados de cartões de crédito.
  • Conceder a um invasor acesso de administrador a seu sistema. Se um usuário de banco de dados tiver privilégios administrativos, um invasor poderá obter acesso ao sistema usando código mal-intencionado.
  • Dar a um invasor acesso geral a seu sistema. Se você usar comandos SQL fracos para verificar nomes de usuário e senhas, um invasor poderá obter acesso a seu sistema sem saber as credenciais de um usuário. Depois disso, o invasor poderá causar danos acessando e manipulando informações confidenciais.

O custo de um ataque de injeção de SQL não é apenas financeiro: também pode envolver perda de confiança dos clientes e danos à reputação, caso sejam roubadas informações pessoais como nomes, endereços, números de telefone e dados de cartões de crédito. Quando a confiança do cliente é perdida, pode ser muito difícil reconquistá-la.

Exemplos de injeção de SQL

Ao longo dos anos, muitas organizações foram vítimas de SQLi. Estes são alguns exemplos de destaque:

Fortnite, 2019Fortnite é um jogo on-line com mais de 350 milhões de usuários. Em 2019, foi descoberta uma vulnerabilidade de injeção de SQL que poderia permitir que invasores acessassem contas de usuários. A vulnerabilidade foi corrigida.

Cisco, 2018

Em 2018, foi encontrada uma vulnerabilidade de injeção de SQL no Cisco Prime License Manager. A vulnerabilidade permitiu que invasores obtivessem acesso de shell aos sistemas nos quais o gerenciador de licenças foi implantado. Posteriormente, a Cisco corrigiu a vulnerabilidade.

Tesla, 2014

Em 2014, os pesquisadores de segurança anunciaram que conseguiram violar o site da Tesla usando injeção de SQL, obtendo privilégios administrativos e roubando dados dos usuários.

Perguntas frequentes sobre ataques de injeção de SQL

As perguntas mais frequentes sobre SQLi são:

O que é um ataque de injeção de SQL?

Um ataque de injeção de SQL usa código SQL mal-intencionado para manipulação de um banco de dados de back-end a fim de acessar informações privadas. As informações podem incluir dados confidenciais de empresas, listas de usuários ou detalhes de clientes. SQL é a abreviação de "structured query language", e às vezes a injeção de SQL é abreviada como SQLi.

O que a injeção de SQL faz?

Os ataques de injeção de SQL permitem que os invasores falsifiquem a identidade, alterem dados existentes, divulguem dados no sistema, destruam dados ou os tornem indisponíveis e se tornem administradores do servidor de banco de dados. Os ataques de injeção de SQL podem acarretar sérios danos às empresas, inclusive a perda da confiança dos clientes, caso dados confidenciais de usuários sejam violados.

Qual é a frequência dos ataques de injeção de SQL?

Por serem relativamente fáceis de implementar e terem uma grande recompensa potencial, os ataques de injeção de SQL não são raros. As estatísticas variam, mas é estimado que os ataques de injeção de SQL constituam a maioria dos ataques a aplicativos de software. Segundo o Open Web Application Security Project, os ataques de injeção, que incluem injeções de SQL, foram o terceiro risco de segurança mais sério a aplicativos da Web em 2021.

Como evitar ataques de injeção de SQL

Para empresas preocupadas com a prevenção da injeção de SQL, os princípios-chave para defender sites e aplicativos da Web são:

Treinamento da equipe:Promova a conscientização da equipe responsável pela aplicação da Web sobre os riscos decorrentes de SQLi e ministre o treinamento necessário, com base em função, para todos os usuários.

Mantenha o controle da entrada dos usuários:Qualquer entrada dos usuários em uma consulta SQL gera riscos. Até que ela seja verificada, lide com a entrada de usuários autenticados e/ou internos da mesma forma como lida com a entrada pública. Dê às contas que se conectam ao banco de dados SQL apenas os privilégios mínimos necessários. Como prática padrão, use listas de permissões em vez de listas de bloqueio para verificar e filtrar a entrada dos usuários.

Use as versões mais recentes:é importante usar a versão mais recente do ambiente de desenvolvimento para maximizar a proteção, pois as versões mais antigas podem não ter recursos de segurança atualizados. Instale o software e os patches de segurança mais recentes quando estiverem disponíveis.

Verifique continuamente aplicações da Web:

Use ferramentas abrangentes de gerenciamento de desempenho de aplicações. A verificação regular de aplicações da Web identificará e tratará de possíveis vulnerabilidades antes que elas causem danos sérios.

Use um firewall:um firewall de aplicação da Web (WAF) é frequentemente usado para filtrar SQLi, bem como outras ameaças on-line. Um WAF conta com uma lista grande e atualizada de assinaturas para filtrar consultas SQL mal-intencionadas. Normalmente, a lista contém assinaturas para lidar com vetores de ataque específicos e é corrigida regularmente quando há vulnerabilidades recém-descobertas.

Produtos relacionados:

Leitura complementar:

O que é injeção de SQL? Definição e explicação

A injeção de SQL permite que invasores obtenham acesso não autorizado a bancos de dados, causando danos às empresas. Saiba mais sobre como funciona a injeção de SQL.
Kaspersky Logo