SQL Injection: Como Funciona e Como Prevenir

Os hackers podem assumir o controle de um site inteiro com apenas algumas sequências de código? Uma injeção de SQL pode permitir que alguém saqueie seu banco de dados e roube tudo, desde credenciais administrativas até detalhes do cartão do cliente.

Se o seu site ou aplicativo ficou com apenas alguns pontos fracos em sua programação, um hacker pode extrair todos os tipos de informações que você nunca quis que fossem divulgadas.

Então, o que é um ataque de injeção de SQL e como você pode evitá-lo?

O que é SQL?

SQL é uma linguagem de codificação usada principalmente para recuperar informações de bancos de dados online. É fácil de trabalhar porque é intuitivo e incorpora palavras básicas em inglês como comandos.

Por exemplo, imagine que um cliente está comprando online e digita a palavra “sapatos” na barra de pesquisa de uma loja. Quando eles iniciam a função de pesquisa, um processo simples começa nos bastidores.

O site usará um sistema de gerenciamento de banco de dados (DBMS) que, por sua vez, executará alguma forma de SQL. Quando o cliente procura por “sapatos”, uma sequência de código é criada usando esse idioma. Esta é a consulta SQL.

Essa consulta conterá algumas especificações, como onde procurar e o que recuperar. Deve ficar assim:

SELECT nome, descrição FROM products WHERE categoria = “sapatos”

Quando essa consulta chegar ao banco de dados, o sistema SGBD lerá a consulta SQL e saberá procurar na tabela “produtos”. Ele pode então recuperar os nomes e descrições dos itens na categoria “sapatos” e enviar esses dados de volta ao cliente. Se encontrar dez itens, enviará dez nomes e descrições.

É um processo simples. É aí que começa o problema.

O que é injeção de SQL?

Para realizar uma injeção, um hacker tentará inserir codificação adicional na string SQL. Essa é a injeção.

Isso nem sempre funciona, é claro. O SGBD do site lê alguns caracteres como comandos de codificação (SELECT, por exemplo) e outros como palavras e caracteres normais (“sapatos” neste cenário).

Se um site foi programado corretamente, a busca por um comando de codificação não resultará em uma injeção. Em vez disso, o sistema lerá o comando como um conjunto de caracteres que não reconhece e enviará de volta uma mensagem dizendo algo como “nenhum item encontrado”.

No entanto, se o sistema não estiver protegido, ele lerá os caracteres injetados como um comando SQL genuíno. É aqui que as coisas podem dar muito errado.

Em vez de usar a palavra-chave “sapatos”, o hacker pode procurar comandos SQL específicos. Quando a string é formada e enviada ao banco de dados, o DBMS lerá a palavra-chave pesquisada como um comando e a executará de acordo.

O dano

Usando uma técnica chamada injeção cega de SQL, um hacker pode rapidamente descobrir exatamente qual DBMS está sendo operado nos bastidores. Sabendo disso, eles poderão começar a usar a linguagem SQL apropriada.

Se eles procurarem os termos de codificação corretos, eles podem obrigar o DBMS a retornar uma lista completa de todas as diferentes tabelas de dados que ele contém. Armados com esse insight, eles podem acessar cada tabela e extrair as informações que desejam. Se eles encontrarem uma tabela de “usuários”, eles podem realmente causar alguns problemas.

UNION é um comando de codificação que permite que alguém adicione uma consulta extra à sua principal. Os resultados desta subconsulta aparecerão abaixo dos resultados da consulta primária.

Um hacker poderia escrever algo assim na barra de pesquisa:

“sapatos” UNION (SELECT nome de usuário, senha FROM users);--"

Nos bastidores, uma string SQL seria gerada, que pode ser assim:

SELECT nome, descrição FROM products WHERE category = “sapatos” UNION (SELECT nome de usuário, senha FROM users);--

Agora, além de retornar os resultados para a palavra-chave “sapatos”, o hacker também poderá visualizar todos os nomes de usuário e senhas da tabela “usuários”.

As senhas provavelmente serão criptografadas, mas não demorará muito para um hacker decifrá-las. Se eles puderem descobrir quais nomes de usuário pertencem aos administradores, eles podem usar um software de força bruta para invadir rapidamente a conta relevante e obter acesso administrativo a todo o aplicativo.

Os ataques de injeção de SQL representam uma variedade de ameaças de segurança para a organização afetada. Uma vez que os cibercriminosos conseguem explorar uma vulnerabilidade de injeção de SQL, eles podem:

  • Adicione, remova ou edite conteúdo no banco de dados.
  • Grave novos arquivos no banco de dados.
  • Leia o código-fonte do servidor de banco de dados.

Esses recursos de acesso podem até levar a um controle completo dos bancos de dados e do servidor da Web, o que - como você pode imaginar - pode ser desastroso.

Como evitar a injeção de SQL

Uma injeção de SQL bem-sucedida pode levar a problemas colossais. Um hacker pode roubar senhas e informações de pagamento, vazar detalhes do usuário online e excluir dados essenciais. Um evento como este pode destruir irreversivelmente a confiança do consumidor. Como você pode evitá-lo?

  • Validação de entrada

    Se você criar um processo de validação de entrada na codificação de back-end do seu site, isso pode ajudar bastante a reduzir a ameaça. Você pode criar uma lista de permissões de caracteres aceitos e programar o DBMS para reconhecer se uma palavra-chave não estiver listada. Se um hacker “procurar” por um comando de codificação, seu sistema o verificará na lista de permissões. Quando não obtiver uma correspondência, ele não executará o código.

  • Declarações preparadas

    Criar declarações preparadas é provavelmente a melhor estratégia. Um site vulnerável cria uma nova string SQL toda vez que o hacker faz uma busca, mas com uma declaração preparada, esse não é o caso. Ao programar o backend do seu site, crie seus modelos SQL com antecedência, com um ponto de interrogação no lugar da palavra-chave. O DBMS pode ser programado para ler esse ponto de interrogação como qualquer dado que esteja na barra de pesquisa, mas a consulta em si é pré-feita. Isso reduz drasticamente o risco de um comando SQL malicioso atingir o banco de dados.

  • Segregação de dados

    Quanto mais seus dados forem segregados, menos um hacker terá que aproveitar em um ataque. No exemplo da loja online que discutimos anteriormente, o problema da fraqueza do SQL é muito pior pelo fato de que os dados do usuário estão sendo mantidos no mesmo banco de dados que as listas básicas de produtos. Separar diferentes tipos de informações em bancos de dados e servidores separados limita a quantidade de danos que um ataque SQL pode causar.

  • Utilize as tecnologias mais recentes

    Certifique-se de usar a versão mais recente das ferramentas de desenvolvimento para garantir a máxima segurança. As tecnologias de desenvolvimento da Web mais antigas podem não ter proteção SQL ou podem ter vulnerabilidades em potencial que podem ser exploradas por agentes mal-intencionados. Certifique-se de atualizar os componentes de software que você pode usar para desenvolvimento porque as atualizações são projetadas para corrigir os bugs e possíveis problemas de segurança.


Strong

5178 Blog indlæg

Kommentarer