Negocio

Ataque de injeção de SQL: definição, tipos e exemplos

Aproveitando a Informação

Para a maioria de nós, consumir informações é uma parte importante de nossas vidas. As informações nos ajudam a entender o mundo ao nosso redor, planejar nossas próximas férias e até mesmo escolher nosso entretenimento para a noite. Poderíamos mesmo ir mais longe e dizer que não podemos viver sem informação. Mas se é tão importante, como o organizamos? Como acessamos as peças de que precisamos para a tarefa em questão? Como você pode imaginar, existem várias maneiras, cada uma desenvolvida para aproveitar as vantagens da natureza das informações, da tecnologia disponível ou de ambas. Um, em particular, é o SQL.

O que é SQL?

SQL ou Structured Query Language é uma linguagem de computador desenvolvida pela IBM nos anos 1970. Foi desenvolvido para promover o uso das informações armazenadas em um banco de dados. Um banco de dados é um conjunto de informações ordenadas de alguma forma, estruturadas para facilitar o acesso e orientadas para um determinado tópico. O SQL armazena informações em conjuntos de tabelas contendo categorias de dados em colunas e valores de dados específicos nas linhas. A linguagem consiste em vários comandos, cada um desempenhando uma função única no banco de dados. Alguns exemplos incluem:

  • CREATE é um comando que permite criar algum tipo de estrutura dentro de um banco de dados.
  • INSERT é um comando que permite adicionar informações a um banco de dados.
  • GRANT é um comando que permite conceder direitos de acesso às informações de um banco de dados.
  • SELECT é um comando que permite localizar informações em um banco de dados.

Ataques de injeção de SQL

Um ataque de injeção de SQL é uma atividade maliciosa em que o código que acessa o banco de dados SQL é manipulado por um meio diferente do pretendido. Este ataque tira proveito do design de programa pobre. Por exemplo, digamos que você tenha um aplicativo que solicite ao usuário um número de telefone e passe a entrada para o banco de dados ‘no estado em que se encontra’. A consulta resultante pode ser semelhante a:

SELECT * FROM Customer_Table WHERE telephone = 'blah';

Isso localizaria todos os registros com ‘blá’ como número de telefone. Agora, se o usuário souber um pouco sobre o código por trás dele, ele pode inserir algo como ‘blá ou 1 = 1’ em vez de apenas ‘blá’. Isso sempre seria verdadeiro (porque 1 = 1 é sempre verdadeiro) e corresponderia a qualquer registro no banco de dados. Nesse caso, é a palavra ‘ONDE’ que causa a vulnerabilidade. Isso não parece tão ruim, mas e se os registros do banco de dados contiverem informações confidenciais, como números do seguro social, números do seguro social ou senhas. Os resultados podem ser catastróficos.

Tipos de ataques de injeção SQL

Existem vários tipos diferentes de ataques de injeção de SQL. Alguns notáveis ​​incluem:

  • Com base em erros – esse tipo de ataque usa as mensagens de erro que um banco de dados gera quando uma operação falha. Essas informações podem ser usadas para aprender sobre a estrutura do banco de dados. Por exemplo, se você deseja determinar se existe um campo de senha, você pode usar uma consulta que procura um valor específico nesse campo e observar todas as mensagens de erro geradas.
  • Baseado em união – este tipo de ataque usa o comando UNION para combinar os resultados de duas ou mais consultas e retornar os resultados compostos. Por exemplo, você pode criar uma consulta que varre uma tabela por um nome, outra por um número de conta e usar uma união para obter a combinação dos dois.
  • Baseado em booleano – este tipo de ataque não recebe os dados reais. Em vez disso, ele estrutura a consulta para retornar verdadeiro ou falso e infere o conteúdo desse resultado. Por exemplo, você pode criar uma consulta que determina se uma informação específica existe no banco de dados, em vez de retornar as próprias informações.
  • Baseado em tempo – este tipo de ataque é semelhante ao booleano, exceto que usa o atraso de tempo em vez de verdadeiro e falso para fazer a inferência. O exemplo seria semelhante ao anterior, mas você usaria o tempo necessário para a resposta, em vez do valor retornado.

Resumo da lição

Para recapitular, SQL é uma linguagem de computador que incentiva o uso de informações armazenadas em um banco de dados. A linguagem consiste em vários comandos, incluindo CREATE, INSERT, GRANT e SELECT. Um ataque de injeção de SQL é uma atividade maliciosa que tira proveito de um design de programa ruim e acessa um banco de dados de um meio diferente do pretendido. Existem vários tipos diferentes de ataques de injeção de SQL, incluindo baseado em erro, baseado em união, baseado em booleano e baseado em tempo.