Segurança em Banco de Dados Prof: Thiago Moraes Martins Bacharel em Sistemas de Informação Pós-Graduação Software Livre Aplicado Pós-Graduação Analista de Sistemas Pós-Graduação Metodologia do Ensino Superior Mestrado Engenharia de Software (Andamento) Certificado ITIL Certificado COBIT Certificado CWSP www.asassoftwares.com.br/1102/sbd01.zip 1 Segurança em Banco de Dados Ementa A disciplina oferece aos alunos uma visão ampla dos diversos aspectos que envolvem a segurança de um sistema computacional de uma organização, com foco nos SGBDs. Segurança física e lógica dos SGBDs. Montagem de uma auditoria. Falhas prováveis que podem ser encontrados nos SGBDs. A internet e sua vulnerabilidade aos SGBDs. 2 Segurança em Banco de Dados Objetivo da Disciplina Estimular o conhecimento sobre segurança da informação. Desenvolver uma política de segurança para SGBDs. Conhecer técnicas de ataque aos SGBDs. Aplicar a auditoria aos banco de dados. Analisar as soluções possíveis, considerando as diversas variáveis que podem dificultar ou facilitar a implantação de segurança nos SGBDs. 3 Segurança em Banco de Dados Ementa: 1 ESTRATÉGIAS PARA SEGURANÇA DA INFORMAÇÂO Fundamentos sobre segurança Segurança na Web A Informação – porque necessita de segurança? 2 SEGURANÇA NOS SGBDs 2.1 O papel do DBA na segurança dos SGBDs 2.2 Backup e Recovery 2.3 Infra estrutura adequada visando a segurança dos SGBDs 2.4 Controle de acesso discreto e mandatório 2.5 Roles 4 Segurança em Banco de Dados 2.6 Proteção de usuários x proteção de objetos do SGBD 2.7 Comandos SQLs para segurança 2.8 Regras de Autorização 3 POLÍTICAS DE SEGURANÇA PARA OS SGBDs 3.1 O que é uma política de segurança 3.2 Montagem de uma política de segurança eficaz 4 ROUBO DE DADOS 4.1 Quem está sujeito a perda (roubo) de dados 4.2 Cases 5 Segurança em Banco de Dados 5 A WEB E A SEGURANÇA DOS SGBDs 5.1 Diferenças da segurança de banco de dados na Web 5.2 Prováveis ataques 5.3 Montagem de um plano para dificultar os ataques 6 AUDITORIA 6.1 Auditoria nos SGBDs 6.2 Opções de auditoria 6.3 Audit Trail 6 Segurança em Banco de Dados Bibliografia Indicada DATE, C. J. Introdução a sistemas de banco de dados. Rio de Janeiro: Elsevier, 2003. ELMASRI, R.; NAVATHE, S. B. Sistemas de bancos de dados: fundamentos e aplicações. 4. ed. São Paulo: Pearson Education, 2005. SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de banco de dados. Tradução da 5ª Edição. São Paulo: Campus, 2006. Bibliografia Opcional CHESWICK, R. W.; BELLOVIN, S. M.; RUBIN, A. D. Firewalls e segurança na Internet. 2. ed. ,2005. 400p. 7 Segurança em Banco de Dados Segurança em banco de dados 8 Segurança em Banco de Dados O banco de dados de uma empresa contém uma grande quantidade de dados e geralmente um grande número de usuários. A maioria destes usuários não tem a necessidade de acessar todos os dados. Assim, permitir o acesso irrestrito a todos os dados pode ser indesejável e o SGBD deve prover mecanismos para controlar este acesso. O banco de dados de uma empresa contém uma grande quantidade de dados e geralmente um grande número de usuários. A maioria destes usuários não tem a necessidade de acessar todos os dados. Assim, permitir o acesso irrestrito a todos os dados pode ser indesejável e o SGBD deve prover mecanismos para controlar este acesso. 9 Segurança em Banco de Dados Controle de acesso discricionário 10 Segurança em Banco de Dados SGBDs controlam o acesso aos dados através do controle de acesso discricionário. Esse controle é baseado no conceito de direitos de acesso ou privilégios e a maneira de conceder estes privilégios aos usuários. Um privilégio permite que um usuário acesse o dado de certa maneira (por exemplo, lendo ou escrevendo o dado). Um usuário que cria um objeto automaticamente adquire todos os direitos sobre o mesmo. A partir de então, o banco de dados guarda todos os privilégios que são concedidos a outros usuários e desta forma, garante que apenas os usuários autorizados possam acessar este objeto. 11 Segurança em Banco de Dados Em praticamente todos os bancos de dados, o controle de acesso discricionário é implementado através do uso dos comandos GRANT e REVOKE. O comando GRANT concede privilégios sobre os objetos do banco de dados (tabelas e visões, dentre outros) a outros usuários enquanto que o comando REVOKE revoga os privilégios concedidos. Para um melhor entendimento do mecanismo de acesso discricionário, é importante compreender a definição de privilégios, objetos e usuários: 12 Segurança em Banco de Dados • Usuários: são as pessoas que estão representadas por um nome de autorização. Os usuários podem ser classificados em grupos de acordo com um perfil ou nível de autorização. Um usuário que pertence a um grupo, implicitamente, recebe os privilégios relacionados ao grupo que ele pertence; • Privilégio: define uma permissão individual associada a um nome autorizado, habilitando-o a acessar ou modificar um recurso do banco de dados. Os privilégios também podem ser concedidos a grupos de usuários; • Objetos: os usuários necessitam de privilégios para acessar os objetos guardados no banco de dados. Os privilégios variam de acordo com a natureza do objeto. Por exemplo, uma tabela possui uma lista de privilégios diferente das visões. São exemplos de objetos: tabelas, visões, índices, triggers, entre outros. 13 Segurança em Banco de Dados Comando GRANT 14 Segurança em Banco de Dados A sintaxe do comando GRANT é a seguinte: GRANT privilégios ON objeto TO usuários [WITH GRANT OPTION] Onde: • Privilégios: denota, por modelar: o SELECT: o direito de leitura sobre as colunas da tabela especificada; o INSERT: o direito de inserir linhas; o UPDATE (nome-da-coluna, ...): o direito alterar valores na coluna especificada da tabela indicada como objeto; 15 Segurança em Banco de Dados o DELETE: o direito de excluir linhas de uma tabela especificada como objeto; o INDEX: direito de criar um novo índice sobre a tabela. Este privilégio aplica-se somente a tabelas; • Objeto: geralmente uma tabela ou visão; • Usuários: usuário ou lista de usuários que receberão o privilégio. 16 Segurança em Banco de Dados Se um usuário recebe o privilégio com a opção GRANT OPTION, ele pode passar esse privilégio para outro usuário através do comando GRANT. Um usuário que cria uma tabela automaticamente herda todos os privilégios aplicáveis à tabela juntamente com o direito de conceder estes privilégios para outros usuários. O usuário que cria uma visão tem os mesmos privilégios sobre ela. Apenas o dono de um esquema (um esquema é a descrição do banco de dados) pode executar os comandos de definição de dados CREATE, ALTER e DROP do mesmo. O direito de executar estes comandos não pode ser concedido ou revogado. 17 Segurança em Banco de Dados Exemplos do uso do comando GRANT 18 Segurança em Banco de Dados GRANT SELECT, INSERT ON tb_cep TO user1; GRANT SELECT ON tb_cep TO PUBLIC; GRANT SELECT ON funcionario to admuser WITH GRANT OPTION; GRANT ALL ON tb_cep TO admuser WITH GRANT OPTION; 19 Segurança em Banco de Dados O comando Revoke 20 Segurança em Banco de Dados Para revogar privilégios concedidos utiliza-se o comando REVOKE. Sua sintaxe é: REVOKE privilégios ON objeto FROM usuários { RESTRICT | CASCADE } 21 Segurança em Banco de Dados Exemplos do uso do comando REVOKE 22 Segurança em Banco de Dados REVOKE SELECT ON tb_cep FROM PUBLIC; REVOKE SELECT ON funcionario FROM admuser RESTRICT; REVOKE ALL ON tb_cep FROM admuser CASCADE; 23 Segurança em Banco de Dados A opção de RESTRIC significa que o comando recusa remover a tabela se existirem objetos dependentes. Este é o padrão no banco de dados DB2. Já a opção CASCADE remove automaticamente os objetos que dependem da tabela (como visões), ou seja, faz uma remoção em cascata. 24 Segurança em Banco de Dados Gráfico de autorização 25 Segurança em Banco de Dados O efeito de uma série de comandos GRANT pode ser descrito através de um gráfico de autorização no quais os nós são usuários e as setas/arcos indicam como os privilégios são passados. Por exemplo, existe uma seta do usuário1 para o usuário2 se usuário1 executou um comando GRANT passando um privilégio para o usuário2. A seta será rotulada com o descritor para este comando GRANT. Para os comandos da Listagem 3 foi criado o gráfico de autorização apresentado na Figura 1: 26 Segurança em Banco de Dados • Note que o usuário Jose é o criador da tabela Item e herda o privilégio SELECT do SGBD. Esta operação é demonstrada pela introdução de um nó de sistema (SYSTEM), desenhando uma seta deste nó para o nó de Jose (Ação 1). • Vera recebe os privilégios de Jose (Ação 2). • Subseqüentemente Rob recebe o mesmo privilégio através de Vera (Ação 3). • Como o gráfico claramente indica, o GRANT de Artur para Rob e de Rob para Artur (do mesmo privilégio) cria um ciclo (Ação 4). 27 Segurança em Banco de Dados Listagem 3. Concedendo e revogando privilégios. GRANT SELECT ON Item TO Artur WITH GRANT OPTION; (executed by Jose) GRANT SELECT ON Item TO Vera WITH GRANT OPTION; (executed by Jose) GRANT SELECT ON Item TO Rob WITH GRANT OPTION; (executed by Vera) GRANT SELECT ON Item TO Rob WITH GRANT OPTION; (executed by Artur) 28 Segurança em Banco de Dados GRANT SELECT ON Item TO Artur WITH GRANT OPTION; (executed by Rob) REVOKE SELECT ON Item FROM Artur CASCADE ; (executed by Jose) 29 Segurança em Banco de Dados Figura 01 30 Segurança em Banco de Dados Dados Criptografados 31 Segurança em Banco de Dados Como sabemos, os aspectos de segurança em uma rede são fundamentais para garantia de confiabilidade e execução dos serviços. A tecnologia de banco de dados trabalha com vários fatores para garantir a integridade e segurança dos dados. Além do acesso discricionário, existem outros fatores que podem auxiliar na segurança de um banco de dados. Um destes fatores diz respeito à criptografia dos dados como veremos no tópico a seguir. 32 Segurança em Banco de Dados Verificando o tráfego na rede 33 Segurança em Banco de Dados O funcionamento de uma rede consiste basicamente em envio e recebimento de dados. Qualquer informação que trafegue pela rede, seja uma mensagem de correio eletrônico, um arquivo de texto ou um comando de consulta qualquer, é dividida em pequenas unidades de dados chamadas pacotes. Além de uma parte do conteúdo da mensagem original, cada pacote recebe informações adicionais que incluem o endereço IP de destino e o conteúdo do pacote. Para verificar o conteúdo de um pacote de informações em uma LAN basta o usuário ter o acesso interno a ela e possuir um programa específico para realizar esta captura. Com isso se torna simples localizar e visualizar o conteúdo de um pacote. 34 Segurança em Banco de Dados Capturando pacotes de informações 35 Segurança em Banco de Dados Buscando encontrar e analisar o movimento dos pacotes de informações referentes aos comandos e informações do nosso banco de dados utilizou-se um software chamado Ethereal (). O Ethereal (Figura 2) é um analisador de tráfego de rede com uma interface intuitiva e simples capaz de capturar pacotes específicos relacionados a um endereço IP ou um cliente de rede que esteja efetuando transações ativas. Este software não só permite ver os pacotes que são destinados ao nosso computador como os que são destinados aos restantes (e que em geral o nosso computador ignora). Este tipo de aplicação costuma ser chamado de analisador de protocolos ou também de sniffer. 36 Segurança em Banco de Dados 37 Segurança em Banco de Dados A análise feita sobre um componente de tráfego de rede foi estabelecida através da captura de um pacote de informação no exato momento de sua movimentação pela rede. Com isso, foi possível executar uma análise prévia dos resultados e dos comandos emitidos pelo cliente para o banco de dados, nesse exemplo, chamado de DBCRIPT. O usuário utilizado para a conexão de exemplo foi db2admin com a senha criptografia. Na Listagem 8 podemos observar uma descrição de uma parte do pacote de informações capturado durante o teste. Este pacote de informações esta trafegando sem qualquer tipo de criptografia. 38 Segurança em Banco de Dados Listagem 8. Pacote de dados sem criptografia. DBCRIPT D! db2admin NULLID SYSSH200 SYSLVL01 criptÐogrÐafiaÐ $ WITH HOLD ÿ ]ÐC W$ MSELECT A.ID_APLICACAO, C.COD_ RESTRICAO, B.* FROM APLICACOES A LEFT JOIN RESTRICOES_APLIC B INNER JOIN RESTRICOES C ON B.ID_RESTRICAO = C.ID_ RESTRICAO AND C.TIPO_RESTRICAO IN (‘Q’, ‘D’) ON A.ID_APLICACAO = B.ID_APLICACAO WHERE A.ID_APLICACAO = ? ORDER BY A.ID_ APLICACAO, C.COD_RESTRICAO ÿ SÐA M D! DBSM NULLID SYSSH200 SYSLVL01 !F/ aÐQ / [ MSELECT A.ID_APLICACAO, C.COD_RESTRICAO, B.* FROM APLICACOES A LEFT JOIN RESTRICOES_APLIC B INNER JOIN RESTRICOES 39 Segurança em Banco de Dados Considere as informações abaixo para entender a Listagem 8. Nome do Banco de Dados Usuário do Banco de Dados Senha do Usuário do Banco de Dados 40 Segurança em Banco de Dados Comando executado 41 Segurança em Banco de Dados Conforme a legenda acima, podemos observar que este pacote contém informações vitais para a segurança de uma empresa. Normalmente estes pacotes de informações transitam livremente sem nenhum tipo de segurança. Basta um simples software de captura e uma análise superficial para podermos ter em mãos dados confidenciais e importantes do dia a dia da empresa. Podemos também recuperar facilmente um usuário que tem permissão total para modificações no banco de dados. 42 Segurança em Banco de Dados Ativando criptografia no DB2 43 Segurança em Banco de Dados O DB2 possui um parâmetro que permite ao DBA aplicar mais segurança nestes pacotes de informações com a ativação de criptografia. Para isso é preciso alterar as configurações do banco de dados. Basta aplicar o comando DB2 GET DBM CFG e alterar o parâmetro Database manager authentication como podemos observar abaixo: Database Manager Configuration Database manager authentication (AUTHENTICATION) = SERVER_ENCRYPT 44 Segurança em Banco de Dados Depois de efetuado a configuração do parâmetro de autenticação, é preciso modificar as opções de segurança em cada máquina cliente que possui acesso ao banco de dados. Para isso, basta acessarmos o Assistente de Configuração de Banco de Dados do DB2 e selecionarmos a opção Autenticação do Servidor (SERVER) e Ativar criptografia (ver Figura 3). 45 Segurança em Banco de Dados Figura 3. tela assistente 46 Segurança em Banco de Dados Depois de efetuadas as modificações no banco, repetimos o mesmo processo de captura de pacotes com o mesmo comando executado da mesma máquina cliente. O resultado pode ser visto na Listagem 9. Listagem 9. Pacote de dados com criptografia. °ÐA ª A n ^‘?¥?¦K…§…@@@@@@@@@@@ðöõøðöÁôððð `ðððñÁãÒÉÕâÖÕ@@@@@@@@@@@@@@@@@@@@@@ÄÂâÔã ÙÅÉ 14 / $ t $@ GØÄÂòaÕã mÕÂÄðó ZâØÓðøðñõ JÐ Dm¢ ! ÄÂâÔãÙÅÉ@@@@@@@@@@ $ ܶ òjêáý‹6çàöN¼·ÏWåjFÒ]êÞ¸³ ‰Ó Ô hÐC b C ^„‚ò‰•¢£ñ„‚ò?‡…•£ððððóòÂöð 14 / $ t $47 Segurança em Banco de Dados Como podemos observar, os dados em questão estão completamente ilegíveis, pois já estão atuando com a criptografia ativa. Com isso, tende-se a dificultar as possibilidades de qualquer tipo de invasão ou de obtenção de informações confidenciais dentro e fora da empresa. 48 Segurança em Banco de Dados Conclusão No teste realizado, monitoramos apenas alguns minutos do gargalo de entrada do banco de dados DBCRIPT e geramos apenas alguns arquivos de exemplo para análise. O mais interessante neste teste foi a facilidade de obtenção de um usuário e uma senha para acesso ao banco de dados. Esta aparece com a forma um pouco “confusa”, mas mesmo assim pode-se chegar à senha correta com facilidade. Verifique se o servidor de banco de dados que você utiliza fornece criptografia para trânsito de dados e não deixe de usar esse recurso fundamental para a segurança das informações de sua empresa. 49 Segurança em Banco de Dados O uso do ethereal é simples e intuitivo – siga o roteiro abaixo para realizar seus primeiros passos com o aplicativo: 1) Baixe o instalador em www.ethereal.com. A instalação não solicita nenhum tipo de configuração e é baseada em ‘next-next-next’ (se você marcou a opção ‘Start WinPcap service at startup, será necessário reiniciar o micro); 2) Inicie o aplicativo e selecione a interface de conexão (placa ou conexão de rede). Para isso, clique no menu Capture-Interfaces (Figura 4). Em seguida, clique no botão ‘Capture’ da placa de rede correspondente (Figura 5); 50 Segurança em Banco de Dados 51 Segurança em Banco de Dados 3) Uma janela com o status do tráfego de dados pela rede será aberta (Figura 6). Deixe a janela rodando durante algum tempo e clique em ‘Stop’; 52 Segurança em Banco de Dados 4) Por último o aplicativo exibirá os pacotes capturados na janela principal, divididos em três categorias. Para visualizar os dados de um pacote, clique em uma das linhas no painel superior (que exibe o cabeçalho do pacote) e visualize o conteúdo do pacote no terceiro painel. Observe que o pacote aparece em dois formatos: byte e ascii (Figura 7). Veja também que o cabeçalho do pacote exibe diversas informações importantes, tais como endereço IP de origem, endereço IP de destino, protocolo e tipo da aplicação que enviou o pacote (na coluna info). 53 Segurança em Banco de Dados 54 Segurança em Banco de Dados Exemplo de Role no Sql Server 2005 55 Segurança em Banco de Dados Verificando propriedades do login SA. 56 Segurança em Banco de Dados O seu Server Roles está apontado para o fixed sysadmin. 57 Segurança em Banco de Dados Databases Roles - São aplicados ao usuário Server Roles - São aplicados aos logins Os logins possuem permissões administrativas no servidor e os usuários possuem permissões nos objetos do banco de dados. 58 Segurança em Banco de Dados Criando um novo Login. 59 Segurança em Banco de Dados 60 Segurança em Banco de Dados O sysadmin é um role especial, pois toda vez que é colocado o login como sysadmin, ele automaticamente se torna um db_owner para todos os bancos, pois este é um login que se pode fazer tudo. Desta forma tem uma relação entre os fixed Server roles conforme abaixo com os database role db_owner que é o mais poderoso. 61 Segurança em Banco de Dados Criação do login John e mapeando o mesmo ao usuário J 62 Segurança em Banco de Dados Associar o usuário ao banco de dados DB_PERM - Server Roles são utilizados para servidores. - Database Role são utilizados para banco de dados. - Existem 10 database role por padrão conforme figura acima, que são denominados fixed database role. 63 Segurança em Banco de Dados - Cada database role possui uma permissão já por padrão. Os database role são relativos ao usuário e não ao login, pois o login utiliza os server roles. - Um pouco sobre cada um dos database role: db_accessadmin • db_backupoperator • Permite ao usuário efetuar gravações como update, delete e insert. db_ddladmin • Permite ao usuário efetuar apenas o comando select, ou seja, somente leitura do banco de dados. db_datawriter • O usuário pode fazer backup/restore. db_datareader • O usuário tem permissão de criação ou não de login. Pemite a criação de objetos como o create table, drop view, alter procedure, ou seja, criação de objetos de DDL. db_denydatareader • Nega a permissão de leitura ao banco de dados. 64 Segurança em Banco de Dados db_denydatawriter • db_owner • É um recurso especial, pois toda vez que colocar o usuário como db_owner, o mesmo pode fazer todo o tipo de operação no banco de dados. db_securityadmin • Nega a permissão de gravação ao banco de dados. É relacionado as permissões de GRANT, DENY, REVOKE. Public • É igual ao db_owner, são 2 roles especiais. O public é um role especial que não é possível ser removido. Pois toda a vez que um login do SQL Server é mapeado ao banco de dados, como por exemplo, o login John está sendo mapeado ao usuário J, ele automaticamente pertence ao role public. • O role public pertence a todos os banco de dados e por padrão ele não possui nenhuma permissão. 65 Segurança em Banco de Dados db_denydatawriter • db_owner • É um recurso especial, pois toda vez que colocar o usuário como db_owner, o mesmo pode fazer todo o tipo de operação no banco de dados. db_securityadmin • Nega a permissão de gravação ao banco de dados. É relacionado as permissões de GRANT, DENY, REVOKE. Public • É igual ao db_owner, são 2 roles especiais. O public é um role especial que não é possível ser removido. Pois toda a vez que um login do SQL Server é mapeado ao banco de dados, como por exemplo, o login John está sendo mapeado ao usuário J, ele automaticamente pertence ao role public. • O role public pertence a todos os banco de dados e por padrão ele não possui nenhuma permissão. 66 Segurança em Banco de Dados Exibindo o usuário J criado. Obs.: Conforme figura anterior, o usuário J não foi associado a nenhuma role, a não ser a padrão public que não possui permissão. 67 Segurança em Banco de Dados Criação do login Mary e mapeando o mesmo ao usuário M 68 Segurança em Banco de Dados 69 Segurança em Banco de Dados Associar o usuário ao banco de dados DB_PERM 70 Segurança em Banco de Dados Não será marcado nenhum fixed Server role. 71 Segurança em Banco de Dados Login John e Mary Usuário J e M » AMBOS NÃO POSSUEM PERMISSÃO ALGUMA! 72 Segurança em Banco de Dados Crie 3 abas clicando no botão Query e efetue a autenticação de cada aba aos usuários criados . Aba 01 -> Usuário SA Aba 02 -> Usuário John Aba 03 -> Usuário Mary Digite o comando SQL para apontar para o banco DB_PERM conforme abaixo. Deverá ser feito para cada uma das abas. 73 Segurança em Banco de Dados Com o usuário SA funciona perfeitamente o SELECT, pois o login SA faz parte do fixed role sysadmin que é mapeado ao usúário db_owner em todos os bancos de dados. Desta forma, todos os usuários que estiverem dentro do ROLE SA, conseguirão efetuar o select. 74 Segurança em Banco de Dados Efetuando o mesmo select com o John e Mary, o mesmo possui apresenta erro. 75 Segurança em Banco de Dados Após a criação do ROLE e atribuição do GRANT de SELECT, o usuário SA continua conseguindo executar a consulta. 76 Segurança em Banco de Dados O usuário J (John) ainda não consegue efetuar a consulta select, pois o mesmo não está ainda dentro do ROLE. 77 Segurança em Banco de Dados O usuário M (Mary) ainda não consegue efetuar a consulta select, pois o mesmo não está ainda dentro do ROLE. 78 Segurança em Banco de Dados Após a inclusão do usuário J (John) ao ROLE, o mesmo já consegue efetuar a consulta. 79 Segurança em Banco de Dados Como J (John) já está dentro do grupo, o mesmo já consegue efetuar a consulta. 80 Segurança em Banco de Dados Após a inclusão do usuário M (Mary) ao ROLE, o mesmo já consegue efetuar a consulta. 81 Segurança em Banco de Dados Como M (Mary) já está dentro do grupo, o mesmo já consegue efetuar a consulta. 82 Segurança em Banco de Dados Todo o usuário que estiver dentro do grupo SALES, terá permissão correspondente ao ROLE atribuído. Porém, pode ser feito também uma permissão individual dentro do grupo. Desta forma, qual permissão prevalecerá? A permissão do grupo ou a permissão individual? 83 Segurança em Banco de Dados Em caso de conflito de restrições, a que vale é a mais restritiva. No caso anterior, atribuímos a permissão do ROLE a permissão de SELECT para todos os usuários que estavam no grupo. Se eu efetuar a negação de SELECT a um usuário específico, o mesmo não poderá efetuar a consulta e sim somente os outros usuários do grupo. Veja a negação da permissão de SELECT para o usuário J. 84 Segurança em Banco de Dados O usuário J (John) não consegue mais efetuar a consulta. 85 Segurança em Banco de Dados O usuário M (Mary) ainda consegue efetuar a consulta, pois não possui ainda nenhuma negação. 86 Segurança em Banco de Dados Removendo o usuário M (Mary) do grupo SALES. 87 Segurança em Banco de Dados Como o usuário M (Mary) não está mais no grupo SALES, a mesma não tem permissão mais de SELECT. 88 Segurança em Banco de Dados Visualizando informações do usuário J (John). 89 Segurança em Banco de Dados Visualizando informações do usuário M (Mary). 90 Segurança em Banco de Dados O comando abaixo retorna os membros de um determinado ROLE. 91 Segurança em Banco de Dados 92 Segurança em Banco de Dados Contextualização 93 Segurança em Banco de Dados 94 Segurança em Banco de Dados Auditoria 95 Segurança em Banco de Dados 96 Segurança em Banco de Dados 97 Segurança em Banco de Dados 98 Segurança em Banco de Dados 99 Segurança em Banco de Dados Introdução 100 Segurança em Banco de Dados Recurso Sql Server Audit 101 Segurança em Banco de Dados 102 Segurança em Banco de Dados Server Audit Specification 103 Segurança em Banco de Dados Database Audit Specification 104 Segurança em Banco de Dados Target 105 Segurança em Banco de Dados Uso do Sql Server Audit 106 Segurança em Banco de Dados Criando Sql Server Audit 107 Segurança em Banco de Dados Criando Sql Specification 108 Segurança em Banco de Dados 109 Segurança em Banco de Dados Testando a Auditoria 110 Segurança em Banco de Dados Editando a Auditoria 111 Segurança em Banco de Dados Auditoria aplicada a Rollback 112 Segurança em Banco de Dados Carregando os dados de auditoria em uma tabela 113 Segurança em Banco de Dados 114 Segurança em Banco de Dados 115 Segurança em Banco de Dados Considerações 116 Segurança em Banco de Dados Segurança no SQL Server 2005 117 Segurança em Banco de Dados Integridade e segurança são duas dentre as muitas razões para o armazenamento de informações em um banco de dados. Entende-se por integridade não somente a garantia de que um dado está fisicamente armazenado no banco de dados, mas de que o dado foi inserido, alterado, apagado ou acessado somente por aqueles que possuem permissões adequadas. Entende-se por segurança o controle de usuários, objetos e os relacionamentos de permissões existentes entre eles. É função de um sistema gerenciador de banco de dados fornecer um modelo de segurança capaz de garantir a integridade lógica e segurança dos dados armazenados. É de responsabilidade do administrador de banco de dados conhecer este modelo e suas formas de implementação. 118 Segurança em Banco de Dados No modelo de segurança do SQL Server 2005. O SQL Server 2005 é aderente ao conceito de “trustworth computing” da Microsoft que segue as seguintes linhas de pensamento: • Seguro na arquitetura: a Microsoft esforçou-se para diminuir a área de ataque do SQL Server 2005 através da análise dos vetores de ataques mais comuns; • Seguro por padrão: uma instalação padrão do SQL Server 2005 não implementa todas as funcionalidades e alguns serviços não são instalados. Alguns exemplos são: a stored procedure XP_CMDSHELL que vem desabilitada por padrão e, a base de teste AdventureWorks (que substitui as bases Pubs e Northwind) que também não é instalada por padrão. • Seguro na instalação: o SQL Server 2005 agregou ferramentas para a configuração de segurança, monitoramento e auditoria do banco. Dentre as novas ferramentas estão o Surface Area Configuration - que permite configurar funcionalidades e serviços ativos no SQL Server 2005 – triggers de auditoria e políticas de senha para usuários SQL. 119 Segurança em Banco de Dados O SQL Server 2005 implementa um novo modelo de segurança baseado na hierarquia de objetos e fundamentado em três conceitos: • Principals: é qualquer entidade autenticada que pode possuir permissões para acessar um objeto no sistema de banco de dados. Principals podem existir em três níveis: Windows, SQL Server e banco de dados. A Tabela 1 apresenta os principals do SQL Server 2005. Tabela 1. Principal 120 Segurança em Banco de Dados Securables: objetos que recebem permissões são chamados de Securables. Securables são , organizados de forma hierárquica em grupos (Scopes). Os três escopos dos objetos securables são: Server, database e schema (ver Tabela 2). Tabela 2. Securables e escopos 121 Segurança em Banco de Dados • Permissions: permissões são as regras que controlam o nível de acesso que os principais possuem nos securables. Permissões podem ser dadas, revogadas ou proibidas. O SQL Server 2005 mantém os comandos GRANT, REVOKE e DENY para o controle de permissões dos principais nos securables. Alem destes comandos, outros novos comandos foram inseridos e estão apresentados na Tabela 3. Tabela 3. Novas permissões do SQL Server 2005 122 Segurança em Banco de Dados Surface Area Configuration 123 Segurança em Banco de Dados Surface Area Configuration (SAC) é a nova ferramenta de gerenciamento de segurança do SQL Server 2005. O SAC permite maior controle de segurança sobre serviços, conexões e funcionalidades do SQL Server 2005 e pode ser acessado através do grupo Configuration Tool no grupo de programas do SQL Server 2005. O SAC está dividido em “Configurações de Serviços e Conexões” e “Funcionalidades”. Através das Configurações de Serviços e Conexões é possível desabilitar/habilitar serviços do SQL Server 2005 como Database Engine, SQL Server Agent, Full Text Search e SQL Server Browser. Também é possível configurar as permissões de conexões como somente local, TCP/IP, named pipes ou TCP/IP e named Pipes. A Figura 1 apresenta a tela de configuração do Surface Area Configuration for Services and Connections. 124 Segurança em Banco de Dados Figura 1. Surface Area Configuration for Services e Connections. 125 Segurança em Banco de Dados A configuração de funcionalidades permite habilitar ou desabilitar funcionalidades específicas do SQL Server 2005. As funcionalidades que podem ser configuradas são: AD hoc remote queries, execução de código .Net no SQL Server, conexão dedicada do administrador, database mail, suporte nativo a XML Web Services, automação OLE, SQL Mail, assistente WEB e xp_cmshell. Todas essas funcionalidades vêem desabilitadas na instalação padrão do SQL Server 2005 reforçando o conceito de seguro por padrão. A Figura 2 apresenta a tela de configuração do Surface Área Configuration for Features. 126 Segurança em Banco de Dados Figura 2. Surface Área Configuration for Features. 127 Segurança em Banco de Dados Políticas de senha para usuários SQL O SQL Server 2005 continua a suportar os dois modelos de autenticação existentes no SQL Server 2000: Windows e SQL. Na autenticação Windows o usuário e senha, incluindo a sua complexidade e expiração, são gerenciados pelo controlador de domínio. Na autenticação SQL o usuário e a senha são gerenciados pelo próprio SQL Server. Até a versão do SQL Server 2000 não era possível aplicar políticas de controle de senha nos usuários SQL. O SQL Server 2005 permite que as mesmas políticas de senhas existentes no domínio Windows sejam aplicadas aos usuários SQL. Esta funcionalidade é possível através da API NetValidate-PasswordPolicy(), disponível somente no Windows 2003. O comando utilizado para a criação de um usuário SQL é o CREATE LOGIN. Este comando substitui o comando SP_ADDLOGIN, que continua a existir por questões de compatibilidade. O comando CREATE LOGIN pode ser utilizado para a adição de logins com Segurança Integrada (autenticação Windows) e SQL Server Authentication. Quando o comando CREATE LOGIN é utilizado para a adição de usuários SQL, estão disponíveis as configurações listadas na Tabela 4. 128 Segurança em Banco de Dados Tabela 4. Opções do comando CREATE LOGIN. 129 Segurança em Banco de Dados A Listagem 1 ilustra a criação de um login SQL com política de senha e a obrigatoriedade de troca de senha no primeiro login. listagem 1. criação de um login com política de senha. create login [foobar] with password=n’pass@word1’ must_change, check_expiration=on, check_policy=on ----------------------------------------------------command(s) completed successfully. 130 Segurança em Banco de Dados Quando a senha de um usuário expira, utiliza-se o comando ALTER LOGIN para a liberação da senha. A Listagem 2 apresenta o comando que deve ser executado para a liberação da senha do usuário. listagem 2. liberação de um login bloqueado. alter login [foobar] with password= n’pass@word1’ unlock ----------------------------------------------------command(s) completed successfully. 131 Segurança em Banco de Dados Triggers de DDL 132 Segurança em Banco de Dados Triggers de DDL (ver Nota 1) assim como todas as triggers, executam comandos na ocorrência de um evento específico. No entanto, triggers de DDL respondem a eventos de CREATE, ALTER ou DROP que ocorrem tanto no escopo do servidor de banco de dados quanto no escopo do database. Elas podem ser utilizadas para evitar, registrar ou proibir a execução de comandos DDL no servidor de banco de dados. Dois escopos são possíveis para execução das DDL Triggers: • Server: abrange o servidor como um todo; • Database: atua no database. 133 Segurança em Banco de Dados Nota 1. DDL – Data Definition Language Linguagem de definição de dados. Utilizada para a criação, alteração e exclusão de objetos em servidores de banco de dados. Os eventos que podem ocorrer no nível do servidor estão organizados no grupo DDL_SERVER_LEVEL_EVENTS e os eventos que podem ocorrer no nível do banco de dados são organizados no grupo DDL_DATABASE_LEVEL_EVENTS. A Figura 3 apresenta os dois grupos e seus respectivos eventos. 134 Segurança em Banco de Dados Figura 3. Eventos que disparam Triggers de auditoria. 135 Segurança em Banco de Dados A sintaxe de criação de uma DDL Trigger é muito parecida com a criação de triggers: uma das mudanças é a utilização da opção ON ALL SERVER ou ON DATABASE que especifica se o escopo da trigger é no servidor ou somente no banco de dados. O script da Listagem 3 cria um DDL trigger para armazenar todos os eventos de CREATE, ALTER ou DROP LOGIN que venham a ocorrer no servidor SQL Server 2005. 136 Segurança em Banco de Dados listagem 3. criação de uma ddl trigger. use master go -- cria tabela de log create table tb_ddl_trigger_log (horario datetime, usuario nvarchar(100), evento nvarchar(100), objeto nvarchar(255)) go --cria trigger que responderá a eventos relacionados --a login (create,alter e drop login) create trigger tg_ddl_trigger_log on all server for ddl_login_events as declare @data xml set @data = eventdata() insert tb_ddl_trigger_log (horario, usuario, evento, objeto) values (getdate(), @data.value(‘(/event_instance/loginname)[1]’, ’nvarchar(100)’), @data.value(‘(/event_instance/eventtype)[1]’, ‘nvarchar(100)’), @data.value(‘(/event_instance/objectname)[1]’, ‘nvarchar(2000)’)) ; go 137 Segurança em Banco de Dados -- testa o funcionamento da trigger create login foo with password=’foobar’; drop login foo go -- seleciona os dados da tabela de log para -- visualizar os eventos de login select * from tb_ddl_trigger_log go ----------------------------------------------------horario usuario evento objeto 2005-12-08 21:44:15.967 geekmobile\carlos create_login foo 2005-12-08 21:44:31.700 geekmobile\carlos drop_login foo 138 Segurança em Banco de Dados O evento DDL é capturado no escopo da trigger por uma função chamada EVENTDATA(), que retorna dados no formato XML. Para se obter os valores desejados, declarase uma variável do tipo XML chamada @data e o resultado da função EVENTDATA() é armazenado nesta variável. Os valores de LoginName, tipo de evento e nome do objeto são obtidos através da pesquisa, utilizando-se Xquery, na variável @data. 139 Segurança em Banco de Dados SQL Injection em ambientes Web 140 Segurança em Banco de Dados Em um cenário onde existem informações armazenadas em bancos de dados e que podem ser acessados via web, tem-se a possibilidade do ataque do tipo SQL injection. SQL injection é um tipo de ataque muito simples, que baseia-se na execução de comandos SQL, sejam comandos de manipulação de dados - DML (select, insert, update, delete) ou comandos de definição de dados - DDL (create, drop, alter). Estes comandos são executados através das entradas de formulários web, ou seja, no local destinado para digitação de informações pelo usuário, onde são passados comandos SQL, que por falhas nas aplicações acabam por resultar em alterações no banco de dados ou no acesso indevido à aplicação. A figura 1 apresenta um exemplo clássico de tal prática numa tela de autenticação: 141 Segurança em Banco de Dados 142 Segurança em Banco de Dados O problema ocorre devido a autenticação do usuário ser validada internamente pela aplicação com a seguinte instrução, que verifica se existe um usuário com o respectivo login e senha: SELECT * FROM tabela_usuarios WHERE login = 'campo_login' AND senha = 'campo_senha' 143 Segurança em Banco de Dados Normalmente, seriam digitados o login e a senha, que resultaria em uma consulta ao banco de dados para verificar se os mesmos conferem mas na figura acima foi passado parte de um comando SQL no campo reservado para senha, que internamente resultará na seguinte instrução: SELECT * FROM tabela_usuarios WHERE login = '123' AND senha = ' ' or '1' = '1' 144 Segurança em Banco de Dados Observe que o comando passado no campo da senha fez com que independente do login e senha informados, a condição seja sempre verdadeira, permitindo assim o acesso do usuário à aplicação sem o mesmo possuir a devida permissão. Existem diversas possibilidades de comandos que podem ser executados indevidamente através da passagem de parâmetros, onde alguns exemplos podem ser observados na tabela 1: SQL esperado Parâmetros informados Campo_login marcos’;-- SELECT * FROM tabela_usuarios WHERE login = 'campo_login' AND senha = 'campo_senha' ' OR 1=1 -- 123'; DROP TABLE produtos; - SQL resultante Comantário SELECT * FROM tabela_usuarios WHERE login = 'marcos';--' AND senha = 'campo_senha' Se o usuário já souber o login (no caso, login do usuário marcos) então consegue logar sem senha, já que os caracteres “--“ são comentários no SQL SELECT * FROM tabela_usuarios WHERE login = '' OR 1=1--' AND senha = 'campo_senha' Neste caso, não é necessário saber nem o login nem a senha, pois a condição “OR 1=1” sempre vai ser satisfeita e todos os comandos posteriores são comentados pelos carecteres “--” SELECT * FROM tabela_usuarios WHERE login = '123'; DROP TABLE produtos;-- ' AND senha = 'campo_senha' Este caso é muito parecido com o primeiro mas um comando para apagar uma tabela é executado antes do comentário. Na verdade aqui o objetivo era somente apagar a tabela, por isso foi passado um login qualquer. Campo_senha Tabela 1 – Passagem de parâmetros SQL injection 145 Segurança em Banco de Dados Considerações Finais Sistemas Desktop e Web ainda permanecem como alvos vulneráveis, apesar da disponibilidade de ferramentas e de procedimentos que dificultam a ocorrência de ataques. A fragilidade desses sistemas muitas vezes é potencializada pelo desconhecimento que os programadores possuem sobre a programação segura e também sobre os cenários nos quais esses ataques ocorreram e foram bem sucedidos. 146 Segurança em Banco de Dados Trabalho em grupo Tema: Auditoria no SQL SERVER 2005 •O trabalho deverá ser feito em grupo de 4 ou 5 pessoas; •Cada grupo deverá preparar sua própria apresentação em PPT; •O tempo de apresentação é de 20 a 30 minutos. •O trabalho deverá seguir as normas da ABNT; •Poderá ser consultada qualquer fonte desejada, porém nada deverá ser copiado e SIM escrito com suas próprias palavras o entendimento sobre o assunto. •Qualquer tipo de CÓPIA invalidará o trabalho. •Deverá conter no mínimo 7 e no máximo 10 páginas; •Data de Entrega: Ainda será definida. •Pontuação •15 Pontos da parte escrita •5 Pontos de apresentação 147