Injeção de SQL: significado e definição
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 (SQL
Injection).
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.
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.
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.
Fonte: [Link]