O que é uma injeção de SQL?

Os 5 principais tipos

Injeção de SQL

Para manter os seus dados pessoais a salvo dos hackers, deve partilhá-los apenas em formulários encriptados em websites de confiança. Porém, se os donos desses websites não tomarem medidas para proteger a base de dados, a sua informação pessoal pode ainda estar em risco. Dado que uma injeção de SQL consiste em apenas algumas linhas de código, qualquer website com reputação pode ser comprometido por hackers, e a sua informação pode acabar nas mãos erradas.

Sumário: Uma injeção de SQL é a inserção de código malicioso em websites e aplicações web com o objetivo de comprometer os mesmos e recolher dados de utilizadores. Como o próprio nome indica, os ataques de injeção de SQL visam bases de dados em SQL (Structured Query language), que são consideradas a espinha dorsal de um website. Continue a ler para ficar a saber mais sobre os cinco tipos principais de ataques de injeção de SQL.

SQL Injection

O que é uma injeção de SQL?

Uma injeção de SQL consiste em embutir código malicioso em aplicações web com o objetivo de atacar websites e/ou recolher dados de utilizadores. Os hackers podem lançar ataques de injeção de SQL por diversos motivos. Além de fugas de dados, podem usar esta técnica para fornecer informação falsa à base de dados da aplicação, dela remover informação importante, ou negar o acesso à base de dados aos donos e criadores da aplicação. Para o fazer, têm de encontrar e explorar alguma vulnerabilidade de segurança no software da aplicação visada.

Uma abreviatura de Structured Query Language, o SQL é uma linguagem criada especificamente para introduzir dados e modificar o conteúdo de bases de dados. Vários websites e aplicações web dependem de bases de dados para guardar todos os seus dados e prestar serviços ao utilizador final. O SQL desempenha um papel crucial neste processo, porque permite aos utilizadores localizar conteúdo específico na base de dados. Por exemplo, se este está à procura de um produto em particular numa loja online, os termos da pesquisa e as suas preferências (tamanho, peso, etc.) irão ser, todos eles, formatados em SQL.

Como o nome sugere, os ataques de injeção de SQL visam estas bases de dados em SQL. O hacker responsável pelo ataque explora uma falta de filtros de validação dos inputs para os chamados caracteres de escape (por exemplo, a contrabarra ‘\’) para injetar o seu próprio código no sistema. Dependendo dos seus objetivos, os hackers poderão desenhar o código de forma a que, de cada vez que um utilizador introduzir uma nova query, estes adquirem acesso aos seus detalhes de login, ou parte da base de dados é destruída. As injeções de SQL podem até ser usadas para disseminar malware por vários websites infetados.

Apesar de serem fáceis de prevenir, os ataques de injeção SQL são uma grande ameaça que já afetou muitas empresas e meios de comunicação com reputação, bem como os seus utilizadores. Os peritos estimam que mais de metade de todos os ciberataques atuais são levados a cabo através de técnicas de injeção de SQL. A grande maioria visa blogs de WordPress e sites de comércio digital. De acordo com estatísticas de 2014, um único ataque custa a um negócio cerca de 200,000 dólares.

Que tipos de ataques de injeção de SQL existem?

Dependendo da forma como são efetuados, os ataques de injeção de SQL podem ser organizados em cinco categorias:

  1. Union-Based SQL Injection

Uma injeção de SQL union-based é um tipo dos chamados ataques de injeção de SQL in-band, e usa o operador de SQL UNION para extrair facilmente a informação pretendida da base de dados visada pelo ataque. O operador UNION permite ao utilizador, simultaneamente, extrair dados de múltiplas tabelas com o mesmo número de colunas e tipo de dados idêntico. Os hackers recolhem a informação que precisam injetando uma instrução SELECT, mas, para o ataque ter sucesso, estes precisam de saber o nome exato da tabela, o número de colunas, e o tipo de dados.

  1. Error-Based SQL Injection

Outro tipo de injeção de SQL in-band, a injeção de SQL error-based é uma técnica que permite aos hackers potenciar as mensagens de erro devolvidas por um servidor para retirar a informação que precisam acerca da estrutura desse servidor. Estes introduzem, intencionalmente, queries inválidas para despoletar mensagens de erro. Contudo, estas mensagens de erro contêm, muitas vezes, ou os resultados completos da query, ou informação sobre como melhorar a query para obter os resultados desejados, sendo que ambos os casos ajudam os hackers a completar o ataque com sucesso.

  1. Time-Based Blind SQL Injection

A injeção de SQL cega time-based é uma técnica que implica o envio de uma query temporizada em SQL para a base de dados para avaliar o resultado da query. A query em questão irá forçar a base de dados a esperar antes de devolver um resultado, que irá ser TRUE ou FALSE. Com base no tempo de resposta, e na resposta em si, um hacker pode avaliar se o seu payload foi enviado com sucesso. A principal desvantagem deste tipo de injeção de SQL é a sua duração, dado que o hacker teria que enumerar a base de dados, um carácter de cada vez.

  1. Boolean-Based Blind SQL Injection

A injeção de SQL cega boolean-based é uma técnica de injeção por inferência que é muito similar à injeção cega time-based. Nomeadamente, os hackers enviam uma query SQL de cada vez, numa tentativa de enumerar a base de dados. Com base no tempo de resposta, avaliam se o payload foi enviado com sucesso. Todavia, em vez de temporizar as suas queries, neste caso combinam expressões TRUE e FALSE. Tal como acontece com a injeção time-based, estes ataques podem ser muito lentos, especialmente quando um hacker está a atacar uma grande base de dados.

  1. Out-of-Band SQL Injection

Uma injeção de SQL out-of-band é uma técnica usada por hackers para gerar pedidos DNS e/ou HTTP que entregam dados diretamente a esses mesmos hackers. Por vezes, é usada como alternativa aos ataques cegos time-based, habitualmente quando se tratam de servidores com elevados tempos de resposta, ou quando é impossível recolher dados através do mesmo canal que foi usado para lançar o ataque. Dado que o seu sucesso depende de características que só podem ser ativadas pelo administrador do servidor, os ataques de injeção de SQL out-of-band são extremamente raros.

Exemplos de ataques de injeção de SQL

Ao longo das duas últimas décadas, vários ataques de injeção de SQL foram lançados contra grandes websites, empresas, e redes sociais. Muitos desses ataques resultaram em fugas de dados em larga escala. Alguns dos exemplos mais notáveis são os seguintes:

  • Em 2008, dois hackers nascidos na Rússia usaram técnicas de injeção de SQL para atacar a Heartland Payment Systems, uma fornecedora de soluções de processamento de pagamentos. Apontado na altura como originador da maior fuga de dados de cartões de crédito de sempre, o ataque deu aos hackers acesso a informação sobre mais de 150 milhões de cartões de crédito, e custou aos negócios afetados mais de 300 milhões de dólares. Em 2018, os dois hackers por trás do ataque foram condenados a uma pena combinada de mais de 16 anos de prisão.
  • Em 2016, um grupo de hackers explorou as vulnerabilidades do vBulletin, um software popular de painéis de mensagens online, para atacar 11 painéis orientados para os videojogos, a maioria em russo. Durante o ataque, os hackers conseguiram roubar dados de login de mais de 27 milhões de contas.
  • Também em 2016, hackers usaram métodos de injeção de SQL para lançar um ciberataque contra o Qatar National Bank. Os hackers conseguiram roubar mais de 1.4GB de dados, que foram, na altura, prontamente revelados ao público. Estes dados envolviam informações de conta de milhares de clientes, incluindo membros da família regente do país, agentes dos serviços de informação, líderes religiosos envoltos em controvérsia, e ainda vários naturais do Reino Unido, França e EUA rotulados de espiões.

Como prevenir ataques de injeção de SQL

Os ataques de injeção de SQL são facilmente evitáveis, se o website tiver a manutenção apropriada. Isto inclui monitorização constante das instruções SQL de todas as aplicações ligadas à base de dados, atualizações regulares e aplicação de patches, bem como a utilização de software de cibersegurança fiável para proteger a base de dados.

Dado que estes ataques contra websites utilizam SQL dinâmico, deve tomar medidas para diminuir ao máximo a necessidade de inputs do utilizador quando constrói as suas queries. Sempre que possível, disponibilize instruções preparadas aos utilizadores, juntamente com uma lista de opções para este escolher, em vez de lhe dar a opção de introduzir a sua própria query. É também importante que use a validação de inputs para evitar problemas com caracteres de escape. Além disso, lembre-se de ativar a filtragem de dados baseada no contexto. Por exemplo, só deve permitir a introdução de dígitos para números telefónicos.

Em alguns casos raros, os hackers podem também lançar ataques de injeção de SQL para infetar websites normalmente de confiança com software malicioso. Assim que visita um website infetado, o malware começa a ser transferido sem o seu consentimento. Uma vez instalado, pode dar aos hackers acesso ao seu histórico de navegação, informação pessoal, ou mesmo às teclas pressionadas no teclado. Para impedir que isto aconteça, use sempre o melhor software antivírus, que mantém o seu computador e dados a salvo de vírus, malware, e outras potenciais ameaças.

Fontes (em inglês):