O que é injeção de linguagem de consulta estruturada (SQL)?

A injeção de SQL (SQLi) é um tipo de ataque que usa código SQL malicioso para manipular um banco de dados e acessar informações confidenciais.

Um ataque bem-sucedido permite que os hackers ignorem a autenticação, roubem dados e obtenham acesso root ao sistema. O que é injeção de SQL, seu site está em risco e como isso pode ser evitado?

 

O que é SQL?

 

SQL é uma linguagem de programação. É usado por sistemas de gerenciamento de banco de dados (DBMS) para comunicar solicitações de informações de um usuário para um banco de dados e suas tabelas de dados.

 

Quando você digita uma palavra-chave na barra de pesquisa em um site, por exemplo, uma solicitação SQL é gerada nos bastidores. Essa solicitação contém qualquer palavra-chave inserida pelo usuário, bem como comandos para o DBMS. Este é então enviado para o banco de dados, onde o SGBD irá interpretá-lo, extrair as informações solicitadas e enviá-las de volta ao usuário.

 

Aqui está o processo:

 

Um cliente pesquisa uma palavra-chave.

Uma string SQL é criada contendo essa palavra-chave.

A string SQL é enviada para o banco de dados, onde é analisada pelo DBMS.

O SGBD reconhece os comandos de codificação, obrigando-o a convocar os dados solicitados.

As informações relevantes são “devolvidas” ao cliente e aparecem em sua tela.

 

O que é injeção de SQL?

 

SQL é uma linguagem simples que se baseia em palavras inglesas reconhecíveis para suas consultas. Se um site não estiver devidamente protegido, um hacker pode “injetar” seus próprios comandos SQL e realizar qualquer ação maliciosa, desde representar uma conta de usuário até comprometer completamente o respectivo banco de dados ou servidor.

 

Isso envolve enganar um site para criar strings SQL que contêm os comandos do hacker. Quando a string é enviada ao banco de dados e interpretada, o DBMS lerá os comandos “injetados” como instruções acionáveis ​​e, em seguida, os executará. Dessa forma, um hacker pode comprometer o DBMS para retornar informações que o proprietário do site poderia ter mantido em sigilo.

 

Por exemplo, imagine um cenário em que alguém deseja roubar nomes de usuário e senhas de clientes de uma loja online. Se a segurança do site não refletir as práticas recomendadas, um hacker poderá utilizar determinadas funções do site, como pesquisar e digitar comandos arbitrários, que serão combinados na sequência SQL resultante.

 

Um ataque de injeção de SQL pode afetar qualquer banco de dados SQL, como Oracle, MySQL, MSSQL ou Microsoft SQL Server.

 

O que são consultas SQL?

 

A maioria das ações que você precisa executar em um banco de dados é feita com instruções SQL. A mais comum é a instrução SELECT, que retorna dados com base em critérios específicos. Existem muitas instruções diferentes em SQL (geralmente chamadas de comandos SQL) que o banco de dados reconhece. As instruções são usadas para controlar transações, fluxo de programa, conexões, sessões ou diagnósticos.

 

Tipos de injeção de SQL

 

Os ataques de injeção de SQL são categorizados por métodos que os agentes de ameaças usam para obter acesso a um banco de dados.

 

SQLi em banda (SQLi clássico)

 

In-band SQLi é o tipo mais comum de ataque de injeção de SQL e também um dos mais fáceis de executar. Um cibercriminoso usa o mesmo canal para lançar um ataque e extrair os resultados. Existem dois tipos principais de ataques SQLi in-band: SQLi baseado em erro e SQLi baseado em união.

 

SQL baseado em erro

 

Como o nome sugere, os ataques de injeção de SQL baseados em erros acionam o banco de dados para gerar um erro, que pode conter muitas informações confidenciais sobre sua estrutura de dados. Usando as informações fornecidas por um erro, os invasores podem modificar a consulta SQL para exploração adicional.

 

SQLi baseado em união

 

O SQLi baseado em união usa o operador UNION para combinar os resultados de várias instruções SELECT em uma saída, que é então retornada junto com a resposta HTTP.

 

SQLi inferencial (SQLi cego)

 

Nesse tipo de ataque de injeção de SQL, um agente de ameaça não pode ver diretamente a resposta das consultas injetadas (é por isso que também é chamado de SQLi cego). No entanto, eles podem observar o comportamento do aplicativo e reconstruir sua estrutura.

 

A injeção de SQL inferencial tem dois tipos: SQLi baseado em booleano cego e SQLi baseado em tempo cego.

 

SQLi cego baseado em booleano (baseado em conteúdo)

 

Um invasor envia várias consultas SQL que acionam respostas VERDADEIRO ou FALSO.

 

SQLi cego baseado em tempo

 

Um ataque SQLi cego baseado em tempo é uma técnica na qual um invasor envia consultas ao banco de dados SQL e o força a esperar um certo tempo antes de responder. Se um site não responder imediatamente, isso indica que está vulnerável a ataques cegos de injeção de SQL.

 

SQL fora de banda

 

Um ataque SQLi fora de banda é uma exploração que permite que hackers extraiam dados por meio de canais DNS ou HTTP.

 

Exemplo de injeção SQL

 

Um ótimo exemplo disso seria o comando UNION, que pode ser usado para adicionar “sub-consultas” adicionais à consulta principal do usuário. Essas subconsultas podem forçar um banco de dados a retornar informações adicionais junto com os resultados de pesquisa legítimos.

 

Usando esse método, um hacker pode acessar a tabela que contém e-mails, nomes de usuários ou senhas de clientes. A partir de uma vulnerabilidade inicial de injeção de SQL, é um pequeno passo para invadir contas de usuários, roubar informações confidenciais e até mesmo assumir o controle administrativo do próprio site.

 

O que um hacker de SQL pode roubar?

 

Se o site não foi devidamente protegido, não há limite para a quantidade de dados que um hacker pode acessar com injeções de SQL. Quase tudo localizado no banco de dados é um jogo justo.

 

Usando comandos SQL simples, eles podem forçar o banco de dados a retornar uma lista completa de todas as tabelas que ele contém. Isso lhes dá um roteiro para cada subseção do banco de dados para que possam solicitar qualquer informação que desejarem.

 

Como evitar a injeção de SQL

 

Segregação de dados

 

Quanto mais centralizados forem seus dados, pior pode ser um ataque SQL. No exemplo da loja online, o hack só é realmente prejudicial porque os dados confidenciais do usuário são mantidos no mesmo banco de dados que as tabelas de produtos. A segregação de informações em diferentes bancos de dados reduz o dano potencial ao mínimo.

 

Declarações preparadas

 

Uma das melhores estratégias para evitar a injeção de SQL é a implementação de Declarações Preparadas. Um site de alto risco gerará uma nova consulta SQL toda vez que alguém enviar uma solicitação, dando aos hackers a oportunidade de injetar seu próprio código.

 

Evite isso programando seu site para usar modelos SQL pré-fabricados, com valores fixos e um ponto de interrogação onde a palavra-chave normalmente apareceria. Seu DBMS pode ser codificado para ler esse ponto de interrogação como qualquer dado que esteja na barra de pesquisa, mas a consulta em si é criada antecipadamente. Com uma instrução preparada, um hacker não poderá adicionar novos comandos à string.

 

Validação de entrada

 

A validação de entrada (também conhecida como sanitização) deve ser incorporada ao back-end de um site, com uma lista branca de caracteres e palavras aceitos. A lista branca pode ser atualizada sempre que novos itens pesquisáveis ​​são adicionados ao banco de dados. Se um hacker “procurar” por um comando de codificação malicioso, o sistema verificará os dados de entrada em sua lista branca. Quando ele não encontra uma correspondência de entrada válida, ele não executa o código e apenas retorna uma mensagem “sem resultados”.


Strong

5178 博客 帖子

注释