Curso Livre de Segurança de Sistemas/Tecnologia e Princípios de Segurança de Computadores/Segurança de Banco de Dados/Caderno Colaborativo

Fonte: Wikiversidade

Controle de acesso a bancos de dados[editar | editar código-fonte]

Normalmente os sistemas de gerenciamento de banco de dados já incluem um controle de acesso, sendo que alguns exemplos são: usuários que têm controle sobre os direitos de acesso de outros usuários; proprietários que controlam os acessos; e proprietários que controlam os acessos e concedem privilégios para outros usuários. Esses direitos de acesso podem incluir instruções como criar, remover, alterar, ler e escrever, sendo que podem estar restritas apenas à uma tabela, uma coluna, uma linha, ou até mesmo o banco de dados completo.


Um dos exemplos de controle de acesso é a autorização em cascata, quando um direito de acesso chega a vários usuários por meio de uma cascata, ou seja, um proprietário concede acesso ao usuário 1, que passa esse acesso ao usuário 2 e 3, e assim sucessivamente. O mesmo ocorre quando esse acesso é retirado, sendo que todos os usuários serão revogados através da cascata. Um outro exemplo é o controle de acesso baseado em papéis, onde pode-se ter o proprietário, o administrador e o usuário final. Neste caso, cada usuário recebe um papel e possui acesso apenas ao que lhe é permitido.

A necessidade da segurança de bancos de dados[editar | editar código-fonte]

Os bancos de dados possuem diversas informações sensíveis, como: dados financeiros, registros de telefone, informações de cartões, dentre outros registros confidenciais, e para que a segurança desses banco não seja comprometida por acidentes ou ameaças, é preciso garantir o bom funcionamento de três pilares: a integridade, disponibilidade e confiabilidade.

Integridade: A integridade visa garantir que as informações manipuladas no sistema permanecerão conservadas em suas características originais. Ela está diretamente ligada ao controle das mudanças feitas no sistema e toda a preservação do ciclo de vida dos dados(implementação e uso), baseado na origem, manutenção e destruição.

Disponibilidade: A disponibilidade garante que os dados estarão sempre disponíveis para o uso legítimo, as entidades autorizadas sempre terão acesso ao sistema, e assim, interrupção de atividades que dependem desses dados não deverão acontecer.

Confiabilidade: A confiabilidade significa impor limites de acesso aos dados em questão, somente as entidades confiáveis que precisem manipular essas informações terão acesso, desse modo buscando evitar que informações confidenciais e críticas não sejam roubadas dos sistemas por meio de ciberataques, espionagem, etc.

Sistemas de gerenciamento de banco de dados[editar | editar código-fonte]

Os sistemas de gerenciamento de banco de dados (Database Management System - DBMS) é um conjunto integrado de programas que tem por objetivo construir e manter o banco de dados, além de oferecer recursos de consulta para vários usuários e aplicações. Uma linguagem de consulta prove uma interface uniforme com o banco de dados tanto para usuários e aplicações.

Para que haja uma comunicação e implementação de logica relacional no banco de dados, projetistas ou administradores do banco de dados, fazem uso da Linguagem de Definição de Dados (Data Definition Language — DDL).

Além da linguagem de definição de dados, também existe a Linguagem de Manipulação de Dados (Data Manipulation Language — DML), esta por sua vez fornece um conjunto de ferramentas para desenvolvedores de aplicações. Para os usuários a linguagem de consulta de dados foi projetada exclusivamente para os mesmo, a fim de suprir o modo como se comunicam e requisitam os dados.

No geral o banco de dados é eficiente para o armazenamento de grandes quantidades de dados, além de serem a peça vital das empresas/organizações nos dias atuais, o que faz com que a sua segurança seja elevada a níveis de prioridade mais altos.

Structure Query Language (SQL)[editar | editar código-fonte]

Structured Query Language (SQL) é uma linguagem de programação normalmente usada em bancos de dados relacionais ou sistemas de gerenciamento de fluxo de dados.

Foi desenvolvido pela IBM no início dos anos 1970 e agora é um padrão oficial reconhecido pelo American National Standards Institute (ANSI) e pela International Organization for Standardization (ISO).

SQL permaneceu uma escolha consistentemente popular para usuários de banco de dados ao longo dos anos, principalmente devido à sua facilidade de uso e à maneira altamente eficaz com que consulta, manipula, agrega dados e executa uma ampla gama de outras funções para transformar enormes coleções de dados estruturados em informações utilizáveis.

Por este motivo, foi incorporado a vários produtos de banco de dados comerciais, como MySQL, Oracle, Sybase, SQL Server, Postgres e outros.

Quatro categorias de comandos SQL[editar | editar código-fonte]

  • Linguagem de definição de dados (DDL)

Isso inclui CREATE (tabelas, visualizações, objetos, etc.), ALTER e DROP (excluir).

  • Linguagem de manipulação de dados (DML)

SELECT, INSERT, UPDATE, DELETE de registros dentro das tabelas.

  • Linguagem de controle de dados (DCL)

GRANT e / ou REVOKE privilégios de usuário, etc.

  • Indexação de banco de dados

As instruções CREATE INDEX e DROP INDEX são usadas para criar e excluir índices em tabelas.

Ataques de Injeção SQL (SQL Injection attacks)[editar | editar código-fonte]

Um ataque de injeção SQL (SQL Injection attacks) consiste na inserção ou “injeção” de uma consulta SQL por meio dos dados de entrada do cliente para o aplicativo. Uma exploração de injeção SQL bem-sucedida pode ler dados confidenciais do banco de dados, modificar os dados do banco de dados (INSERT / UPDATE / DELETE), executar operações de administração no banco de dados, recuperar o conteúdo de um determinado arquivo presente no arquivo DBMS sistema e, em alguns casos, emitir comandos para o sistema operacional. Os ataques de injeção de SQL são um tipo de ataque de injeção, no qual os comandos SQL são injetados na entrada do plano de dados para afetar a execução de comandos SQL predefinidos.


Segurança em Nuvem[editar | editar código-fonte]

Hoje em dia, diversas empresas movem sua área de tecnologia da informação para servidores remotos conectados a internet, estes conhecidos como computação em nuvem empresarial. Causando assim, brechas para possíveis ataques se a parte de segurança não for bem atendida, principalmente na questão de banco de dados. A computação em nuvem é definida pelo Instituto Nacional de Padrões e Tecnologia (NIST), como um modelo de acesso a rede, possuindo um formato adequado, sendo sob demanda, e de forma ubíqua em relação a um grupo de recursos de computação que possam ser confíguráveis, liberados e provisionados de forma rápida, ou com o mínimo de esforço necessário. Assim, o modelo em nuvem é composto por cinco características essenciais, três modelos de serviço e quatro modelos de implantação.

Características Especiais[editar | editar código-fonte]

Serviço Mensurável: É necessário que a utilização dos recursos possa ser monitorada, controlada e relatada, fornecendo assim, transparência ao cliente e ao provedor dos recursos.

Rápida Elasticidade: Com a computação em nuvem é possível tanto expandir quando reduzir a capacidade do recurso de forma a atender os requisitos específicados pelos seriços.

Autosserviço sob Demanda: O cliente deve poder de forma uniláteral, provisionar recursos computacionais conforme sua necessidade, e sem precisar de interação humana.

Amplo Acesso à Rede: Recursos são disponíbilizados via rede, por conta disso, possui capacidade de acesso de qualquer plataforma indiferente de sua complexidade.

Agrupamento de Recursos: Com a grande demanda de recursos computacionais, as empresas acabam por agrupar os recursos, com isso, o cliente não tem conhecimento da localização exata do hardware utilizado, porém é possível obter acesso em um nível de abstração mais alto.

Modelos de Serviço[editar | editar código-fonte]

Software as a Service (SaaS): O modelo SaaS, busca evitar a complexidade de instalação, manutenção e atualização do serviço, de modo que o cliente interaja com uma interface simples, e por meio de vários dispositivos. Removendo também a necessidade de obter licenças de uso de software para computadores pessoais.

Platform as a Service (PaaS): O modelo PaaS, tem como objetivo, fornecer ao cliente a capacidade de instalar na nuvem suas próprias aplicações, onde o PaaS fornece suporte para diversas linguagens de programação e ferramentas de suporte ao desenvolvedor. Podendo também, fornecer serviços essenciais para uso por aplicações e banco de dados.

Infrastructure as a Service (IaaS): O modelo IaaS, procura oferecer a capacidade de provisionamento de armazenamento, processamento, redes, e recursos computacionais fundamentais.

Modelos de Implantação[editar | editar código-fonte]

Nuvem Pública: Disponibilizada para um grupo industrial ou ao público. Onde seu dono é a empresa que vende o serviço em nuvem, e o mesmo gerencia e controla a nuvem.

Nuvem Privada: O provedor da nuvem é apenas responsável pela infraestrutura, e a empresa é quem controla a nuvem. Dessa forma disponíbiliza para os indivíduos de dentro ou fora das instação da empresa.

Nuvem Comunitária: Podendo ser gerenciada por organizações ou um terceiro. A nuvem comunitária é compartilhada por diversas organizações, e oferece suporte a comunidades com interesses compartilhados.

Nuvem Híbrida: Combina um ou mais modelos de implantação.

Riscos de segurança na nuvem[editar | editar código-fonte]

De acordo com a Cloud Security Alliance, as maiores ameaças à segurança da nuvem são:

  • Utilização abusiva e criminosa de computação em nuvem: como é muito fácil se registrar para começar a utilizar serviços em nuvem, isso também facilita que atacantes os utilizem para realizar ataques como distribuição de spam, ataques de código malicioso e ataques de negação de serviço.
  • Interfaces e APIs inseguras: os provedores de nuvem disponibilizam uma série de APIs que seus clientes podem utilizar para gerenciar seus serviços. Portanto, os serviços de nuvem dependem da segurança dessas APIs, que devem ser projetadas para os diversos tipos de vulnerabilidade.
  • Usuários internos maliciosos: os agentes internos (insiders) são uma grande preocupação nessa área, pois eles tem acessos a recursos que são extremamente sensíveis.
  • Questões de tecnologia compartilhada: as plataformas fornecedoras de IaaS (infraestrutura como serviço) oferecem seus serviços compartilhando sua infraestrutura e muitas vezes alguns componentes não foram projetados pensando nesse compartilhamento. Apesar de utilizarem a estratégia de utilizar máquinas virtuais isoladas, essa abordagem ainda é vulnerável a ataques por agentes internos e externos.
  • Sequestro de conta ou serviço: assim como em qualquer área que exige algum tipo de autenticação para acessar os serviços, a nuvem também está vulnerável a esse tipo de problema. Com as credenciais roubadas, o atacante pode comprometer diversas áreas dos serviços de nuvem.
  • Perfil de risco desconhecido: é importante que o cliente utilizador do serviço em nuvem esteja ciente de todas as políticas de segurança para evitar expor os sistemas.


Cifração de banco de dados[editar | editar código-fonte]

Como o banco de dados é um recurso de informação que possui alto teor de informação e consequentemente valioso, é necessário a criação de formas de proteção para a segurança destas informações, como a utilização de firewalls, autenticação, controle de acessos e cifração, para dados sensíveis. As vantagens de se utilizar a cifração são tornar a busca de registros mais difícil e inflexível e obrigar a usuários a possuírem uma chave de decifração para os dados que têm acesso.

A cifração pode ser utilizada no banco de dados por completo, no grau de registros, no grau de atributos como as colunas ou no grau dos campos individuais.

Ao cifrar o banco de dados inteiro, o usuário não consegue mais realizar buscas por indexações de parâmetros utilizados como chave, por exemplo, uma busca pelo ID. Nesse caso, será necessário conseguir todos os registros das tabelas, decifrar e trabalhar em cima dos dados decifrados. Além disso, se algum agente exterior conseguir acesso ao servidor do banco de dados, que não possuí a chave, o que conseguiria serão dados cifrados.

Para conceder mais flexibilidade para o banco de dados, cada linha no banco de dados é cifrada como um bloco. Cada campo daquela linha é tratada como uma sequência binária e concatenadas umas com as outras para formar um bloco binário e então esse bloco é cifrado. Para cada linha no banco de dados original, existe uma linha cifrada no banco de dados cifrado e é criado um índice para o dado em um conjunto de dados particionados em intervalos. Os índices podem ser ordenados de forma aleatória para um agente externo não consiga perceber a correlação entre o índice e os intervalos de linhas por atributo, já que esse tipo de metadado não é armazenado [1].

Inferência[editar | editar código-fonte]

No campo de segurança de banco de dados, inferência pode ser descrito como o processo de realizar consultas autorizadas e também de encontrar informações não autorizadas das respostas legítimas recebidas. O problema relacionado a isso vem quando um grupo de vários itens de dados pode ser usado para deduzir dados mais sensíveis ou então quando eles são mais sensíveis em termos de segurança do que os itens individuais.

O possível invasor pode utilizar dados não sensíveis, como por exemplo metadados. Os metadados são conhecimentos de correlações ou dependências entre itens de dados, podendo ser usado para deduzir informações. Os caminhos de informações por onde são adquiridos dados não autorizados é chamado de canal de Inferência.

Para evitar que ocorra ameaças de revelação por inferência, há duas possíveis ações:

*Detecção de inferência durante o projeto do banco de dados: Esse método exclui um canal de inferência caso ocorra alterações da estrutura do banco de dados ou alguma mudança relacionada ao regime de controle de acesso para impedir inferência.

*Detecção de inferência na hora da consulta: Esse método remove uma violação de canal de inferência enquanto ocorre uma ou uma série de consultas. Caso um canal de inferência for detectado, a consulta é negada ou alterada.

Independente de qual dos métodos acima for utilizado para a detecção, será necessário utilizar um algoritmo de detecção de inferência, sendo esse um foco constante de pesquisas.

Monitoramento de atividade de banco de dados (DAM)[editar | editar código-fonte]

Uma camada de segurança mais sofisticada envolve o monitoramento da atividade do banco de dados em tempo real, seja analisando o tráfego do protocolo (SQL) na rede ou observando a atividade do banco de dados local em cada servidor usando agentes de software, ou ambos. O uso de agentes ou seu próprio registro é necessário para capturar as ações executadas no servidor, que geralmente incluem as ações do administrador do banco de dados. Os agentes permitem que essas informações sejam capturadas de uma forma que não possa ser desabilitada por um DBA que tem a capacidade de desabilitar ou modificar seus próprios logs de auditoria.

A análise pode ser realizada para identificar violações de regras conhecidas ou dados brutos podem ser capturados ao longo do tempo para criar um padrão normal usado para detectar atividades anômalas que podem indicar uma intrusão. Esses sistemas podem fornecer trilhas de auditoria de banco de dados abrangentes, além de mecanismos de detecção de intrusão, e alguns sistemas também podem fornecer proteção encerrando sessões de usuário e colocando usuários em quarentena que exibem comportamento suspeito.[2]

O Monitoramento desses dados deve ser feito constantemente, e suas regras devidamente atualizadas para evitar que existem credenciais com permissões que possam ser esquecidas, como no caso da demissão de um funcionário em uma empresa que tivesse um usuário de acesso completo ou parcial do banco de dados, trocando senhas ou alterando e removendo credenciais de preferencia antes do aviso de demissão ou troca de cargo, o que pode parecer besteira, mas é comprovadamente uma das maiores fontes de problemas de segurança de um banco: a falha humana.[3]

  1. STALLINGS, William. BROWN, Lawrie. Segurança de Computadores. 2ed.
  2. https://securosis.com/assets/library/reports/DAM-Whitepaper-final.pdf
  3. https://www.perallis.com/news/10-principais-causas-de-ataques-a-banco-de-dados