Lidando com Armazenamento de Dados

Documentos relacionados
Conexão com Banco de Dados, Inserção, exclusão e atualização de registros

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Banco de Dados SQL injection

Cross-Site Scripting. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

JDBC JDBC. JDBC - Arquitetura. JDBC Arquitetura Pacote Java.sql. Java Database Connectivity JDBC PostgreSQL

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Autenticação Segura. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo

Oracle Database 10g: Fundamentos de SQL e PL/SQL

IMPLEMENTAÇÃO DE BANCO DE DADOS

Banco de Dados. Banco de Dados Parte 2. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Quando a máquina terminar o arranque e lhe pedir as credenciais para entrar, introduza as seguintes:

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

Segurança Informática e nas Organizações. Guiões das Aulas Práticas

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

Administração de Sistemas Operacionais. Prof. Marlon Marcon

BD II (SI 587) Segurança em Banco de Dados. Josenildo Silva.

Manual Prático de Uso do MySQL

Aula 06 Sistemas Embarcados LT38C

SQL Básica DML. Prof. Marcos A. Schreiner. 22 de outubro de Curso de Licenciatura em Computação

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC

Oracle Database 11g: Introdução à Linguagem SQL Novo

Curso de Banco de Dados. Prof. Rone Ilídio

Como criar um banco de dados usando o mysql

Banco de Dados I Introdução SQL

A linguagem SQL

BANCO DE DADOS FACSUL 2017 TECNOLOGIA DE REDE DE COMPUTADORES

Banco de Dados. Professora: Luciana Faria

SQL INJECTION: ENTENDENDO E EVITANDO. MAGALHÃES, Felipe. B. ¹, BASTOS, Rafael. R² RESUMO

Vijeo Designer - Personalização de login / logout na IHM

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Petter Anderson Lopes Arbitragem, Desenvolvimento Seguro, Segurança Ofensiva e Forense Computacional

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

Tutorial SQL Server 2014 Express

Instruções de operação Site de aplicativos

BANCO DE DADOS WEB AULA 9. concessão e revogação de privilégios. professor Luciano Roberto Rocha.

Benvindo ao Curso de Introdução ao Firebird com Ferramenta de Relatórios!

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

Revisão de Bancos de Dados

Marcos Alexandruk Marcos Alexandruk

Universidade Estadual do Ceará UECE Departamento de Informática DI Documentação Técnica

Desenvolvimento Web II

LAB 7 Cookies e Sessões em PHP

TRABALHO FINAL 20 Pontos

Guia do Wi-Fi Direct. Configuração fácil usando Wi-Fi Direct. Solução de problemas

PSI Linguagem de Definição de dados. Módulo 15

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

MIRTH CRIANDO MENSAGENS HL7 A PARTIR DE UMA BASE DE DADOS

Uniao Educacional e Tecnologica Impacta- Uni Impacta

SEGURANÇA EM APLICAÇÕES WEB PROF.: PAULO RICARDO LISBOA DE ALMEIDA

MySQL. Prof. César Melo. com a ajuda de vários

MASTERSAF REDF SP CONFIGURAÇÃO E CRIPTOGRAFIA

INTRODUÇÃO AO MYSQL. Eng. Computação

Manipulação de Dados com SQL

Android e Bancos de Dados

Banco de Dados II. Administração do SGBD Oracle. Tablespaces, usuários, privilégios, papéis e perfis. Gustavo Dibbern Piva

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

Introdução ao Sistema. Características

Oracle Database 12c: Introdução ao SQL Ed. 2

Programação Orientada a Objetos II

Uniao Educacional e Tecnologica Impacta- Uni Impacta

2.1-Criar BD e Tabelas.

Linguagem SQL Restrições, Triggers e Views

Aula 6: Vulnerabilidades Web

Zabbix 3 Instalação INSTALAÇÃO

SQL/HTML Injection e Criptografia Professor Fábio Luís da Silva Santos

Manual Técnico. Instalação e Configuração do Reporting Services

globo.com Gerenciamento de Senhas

Disciplina: Banco de Dados Tema: SQL Parte 2

Fundamentos de Banco de Dados Postgre com Sql

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

Guia de Instalação TSS TOTVS SERVICE SOA

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Prova de pré-requisito

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

Conexão com Banco de Dados

SQL E MYSQL - COMANDOS BÁSICOS

Como acessar as imagens via Navegador Mozilla Firefox

Guia do Google Cloud Print

Introdução em Banco de Dados

Transcrição:

Lidando com Armazenamento de Dados Paulo Ricardo Lisboa de Almeida 1

Armazenamento de Dados A grande maioria das aplicações possuem algum mecanismo para armazenagem de dados Dados de usuários Permissões Configurações... 2

Injeção em Contextos Interpretados Muitas das ferramentas utilizadas para comunicação com repositórios de dados são interpretadas Ex.: SQL, LDAP Exposição a vulnerabilidades do tipo Code Injection Geralmente uma injeção de código pode ser feita devido a uma falha de validação de input 3

Exemplo com SQL SELECT * FROM users WHERE username = meulogin and password = senha No exemplo, se a consulta retornar um resultado, é considerado que o usuário existe no banco de dados com aquele login e senha Login efetuado com sucesso Observações Em SQL, strings devem ficar entre aspas simples ( ) Comentários no código sql são adicionados pela sequência -- ou # dependendo do SQBD 4

Exercício Considere o exemplo do slide anterior e descreva possíveis formas de se passar pelo sistema de login considerando: Que você sabe que existe um usuário de login Alice, mas que você não sabe a senha Que você não possui nem o login nem a senha de nenhum usuário Você pode utilizar uma das seguintes aplicações demo para fazer seus testes: http://www.codebashing.com/sql_demo http://sqlzoo.net/hack/ Obs.: No interpretador da aplicação # ou -- representa um comentário 5

Exercício Dependendo da sequência que digitarmos nos campos de entrada, obtemos uma mensagem de erro. Ex.: user name: '#sadsad O que isso nos revela? 6

Exercício Dependendo da sequência que digitarmos nos campos de entrada, obtemos uma mensagem de erro. Ex.: user name: '#sadsad O que isso nos revela? Uma string incorreta foi capaz de gerar um erro no sistema Logo, o sistema está interpretando comandos dessa string Não conseguimos burlar a segurança, mas estamos no caminho certo!!! 7

Exercício Algumas soluções Inserir no campo User Name o valor usuario1234 -- Inserir qualquer coisa na senha SELECT * FROM users WHERE username = 'usuario1234'--' AND password = 'foo' 8

Exercício Algumas soluções Inserir no campo User Name o valor usuario1234 Inserir na senha OR 1=1 SELECT * FROM users WHERE username = 'usuario1234' AND password = '' OR 1=1; 9

Exercício Algumas soluções Inserir no campo User Name o valor OR 1=1-- Inserir qualquer coisa na senha SELECT * FROM users WHERE username = '' OR 1=1--' AND password = 'foo' 10

Até onde Podemos Chegar? Algumas soluções Em user name: ' or 1=1) UNION ALL SELECT users.* FROM users# O que o Union All pode possibilitar? 11

Algumas soluções Em user name: ' or 1=1) UNION ALL SELECT users.* FROM users# O que o Union All pode possibilitar? Se conseguirmos imprimir o resultado dessa consulta na tela, podemos ter uma lista de todos usuários do sistema Podemos criar variantes mais perigosas ' or 1=1) UNION ALL select * from information_schema.tables# Obs.: Devemos casar o número de colunas do select para o Union All Funcionar 12

SQL Injection Aplicações Web geralmente constroem SQLs dinamicamente através dos dados inseridos pelos usuários Falhas de segurança podem tornar o sistema vulnerável a SQL Injection O exercício anterior explorava SQL Injection através do campo login e senha de uma aplicação vulnerável Em alguns casos uma SQL Injection pode permitir ao atacante: Ler e alterar qualquer dado no banco Obter acesso ao banco e ao servidor do banco de dados como um todo!!! 13

SQL Injection Com SQL Injection podemos recuperar informações arbitrárias do sistema Select Inserir informações no banco de dados Insert Ex.: Podemos inserir um novo login e senha no banco para podemos logar quando quisermos Modificar informações no banco de dados Update Ex.: Podemos modificar a senha do usuário admin 14

SQL Injection Vulnerabilidade Básica Preconceito contra Joana D'Arc Pode impedir que um usuário comum entre no sistema Qual o problema? SELECT * FROM users WHERE username = meulogin and password = senha 15

SQL Injection Vulnerabilidade Básica Preconceito contra Joana D'Arc Pode impedir que um usuário comum entre no sistema Qual o problema? Como Solucionar? SELECT * FROM users WHERE username = 'Joana D'Arc' and password = 'senha'; SELECT * FROM users WHERE username = meulogin and password = senha 16

SQL Injection Vulnerabilidade Básica Preconceito contra Joana D'Arc Muitos desenvolvedores podem ser tendenciosos em fazer uma sanitização simples da entrada Ex.: colocar um caractere de escape nas aspas Entrada: Joana D'Arc Depois da Sanitização: Joana D\'Arc Um usuário comum de nome Joana D'Arc agora pode utilizar o sistema. Mas ainda temos uma falha grave de segurança. Como burlar esse sistema? 17

SQL Injection Vulnerabilidade Básica Preconceito contra Joana D'Arc Muitos desenvolvedores podem ser tendenciosos em fazer uma sanitização simples da entrada Ex.: colocar um caractere de escape nas aspas Entrada: Joana D'Arc Depois da Sanitização: Joana D\'Arc Um usuário comum de nome Joana D'Arc agora pode utilizar o sistema. Mas ainda temos uma falha grave de segurança. Como burlar esse sistema? Entrada: Joana D\'Arc Depois da Sanitização: Joana D\\'Arc 18

Como Prevenir SQL Injections? Sanitização das entradas Solução Parcial Pode impedir alguns ataques, mas os algoritmos de sanitização sempre são propensos a falhas 19

Como Prevenir SQL Injections? Stored Procedures Solução parcial Criam-se as Sqls estáticas no banco de dados para inserção, por exemplo. Problemas SQL Injections ainda são possíveis em Stored Procedures, principalmente se elas tiverem problemas de desgn Pode ser considerada uma má prática de desenvolvimento do ponto da Eng. De Software Custo de desenvolvimento 20

Queries Parametrizadas Os parâmetros sempre serão interpretados como dados, e nunca como sendo parte da estrutura da consulta. A estrutura da consulta foi definida no primeiro passo A API do banco de dados (driver) garante que qualquer placeholder definido será tratado de maneira segura Interpretado sempre como um dado 21

Como Prevenir SQL Injections? Queries Parametrizadas (Parametrized Queries) Solução efetiva que geralmente pode ser utilizada String sql = "insert into pessoa (cpf,nome,nascimento) values (?,?,?)"; PreparedStatement statement = connection.preparestatement(sql); statement.setint(1, cpf); statement.setstring(2, nome); 22

Queries Parametrizadas O comando é construído em dois passos: A estrutura da consulta é definida, deixando-se alguns espaços reservados (placeholders) para as entradas de usuário Os conteúdos dos espaços reservados é especificado pela aplicação String sql = "insert into pessoa (cpf,nome,nascimento) values (?,?,?)"; PreparedStatement statement = connection.preparestatement(sql); statement.setint(1, cpf); statement.setstring(2, nome); 23

Queries Parametrizadas Os parâmetros sempre serão interpretados como dados, e nunca como sendo parte da estrutura da consulta. Por quê? 24

Queries Parametrizadas Os parâmetros sempre serão interpretados como dados, e nunca como sendo parte da estrutura da consulta. A estrutura da consulta foi definida no primeiro passo A API do banco de dados (driver) garante que qualquer placeholder definido será tratado de maneira segura Interpretado sempre como um dado 25

Queries Parametrizadas Para que as queries parametrizadas tenham efeito, temos que manter em mente que: Todas consultas no sistema devem ser parametrizadas Todos itens de dados inseridos devem ser parametrizados De nada adianta parametrizar alguns itens, e outros não Placeholders devem ser utilizados somente para especificar os dados, e nunca a estrutura da consulta Ex:. Não devem ser utilizados para especificar colunas, tabelas, schemas, 26

Demais Mecanismos de Defesa A aplicação deve ter o menor nível de privilégios possível para acessar o banco de dados Se a aplicação somente precisa consultar informações no banco, e nunca inserir ou atualizar, deve-se criar um usuário no banco que possa somente fazer consultas que será utilizado pela aplicação A aplicação nunca deve ter privilégios de root (administrador) no banco de dados Desabilitar as funcionalidades do banco de dados que não são utilizadas Ex.: o banco pode ter uma funcionalidade serializar os dados via SOAP, que não é utilizada pela aplicação Aplicar patches de correção no banco de dados recomentados pelo fabricante 27

Exercício (Valor 1,0) Considere o banco de dados da imagem que contém somente a tabela pessoa Crie uma aplicação que insira, atualize e remova os dados nessa tabela utilizando a linguagem de sua preferência e queries parametrizadas A grande maioria das linguagens oferece drivers para conexão com bancos de dados utilizando queries parametrizadas Java (JDBC),.Net, C++, PHP, Utilize o banco de Dados de sua preferência PostgreSQL, HSLQDB, Oracle, Os scripts para criação de um banco HSQLDB, bem como uma aplicação de exemplo encontram-se no site da disciplina 28

Exercício (Valor 1,0) Exemplos: Insert: insert into pessoa (cpf,nome,nascimento) values (?,?,?) Update: update pessoa set cpf =?, nome =?, nascimento =? where pessoa_id =? Delete delete from pessoa where pessoa_id =? 29