Como verificar se o SQL Server está seguro ?

Certa vez, ministrei uma seqüência de cursos oficiais de SQL Server 2005 para uma empresa e no pacote a empresa contratou algumas horas para consultoria com o intuito de ajudar na implementação dos conhecimentos repassados no curso. Os DBAs da empresa ficaram interessados em uma análise da segurança do SQL Server 2005 e queriam que eu desse uma olhada como andava a segurança do SQL Server 2005 na empresa.

Fiquei a pensar como um pedido tão simples poderia dar um nó em um trabalho de consultoria. Segurança por si só é algo tão amplo… Aprendemos que não devemos colocar um login como Sysadmin, que devemos usar procedures para evitar dar permissões diretas em tabelas, que os backups devem ser muito bem guardados, que devemos usar senhas fortes, etc… Como senão bastasse, ainda temos a possibilidade de usar criptografia, certificados, e a instrução EXECUTE AS. Fiquei refletindo como eu poderia analisar a "segurança do SQL Server". Se fosse levantar tudo o que afeta a segurança certamente não iria terminar nunca, mas não podia simplesmente levantar quem estava na role db_owner. Havia trabalho a fazer e como ponto de partida comecei fazendo um roteiro de perguntas relacionadas à segurança que me ajudariam a tentar entender como estava a segurança do SQL Server na instituição.

Após produzir o material, fiquei a pensar que nunca encontrei nada em livros e bibliografias e que assim como eu, outros DBAs, consultores e profissionais de infra-estrutura devem ter passado pela mesma dificuldade (ou ainda vão passar). Assim sendo, resolvi compartilhar o material. O check list não irá resolver os problemas de segurança, mas pode ajudar a direcionar um trabalho desse nível. Publiquei esse material no fórum MSDN (http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=2831030&SiteID=21) e o reproduzo aqui.

Check List – Segurança SQL Server

I – Servidor

  1. Quais são os protocolos utilizados para conexão ao servidor (Named Pipes, TCP/IP) ?
  2. Qual porta está configurada para utilização do SQL Server ?
  3. O servidor SQL Server está protegido por algum firewall ? Se sim, que portas estão habilitadas ?
  4. O servidor onde o SQL Server está instalado é acessível a qualquer IP da rede ?
  5. O servidor está em uma OU (Organization Unit) separada no AD ? Por que sim ? Por que não ?
  6. Como estão configuradas as contas de serviço do SQL Server ?
  7. Qual é a política de definição e troca de senhas dessas contas ?
  8. Todos os serviços instalados (SQL Server, SQL Agent, SQL Browser, etc) são realmente necessários ?
  9. Existe software de antivírus no servidor de banco de dados ? Houve alguma customização em sua instalação ? Como é feita a atualização ?
  10. Como é feita a atualização do produto (Service Packs, Hotfixes, etc) ?

II – SQL Server

  1. Apenas as funcionalidades necessárias estão habilitadas ? (SQL Server Surface Area Configuration)
  2. É utilizada a solução de database mail ? Como foi configurada ?
  3. Há maior utilização de logins Windows ou SQL ? Por quê ?
  4. Como são definidas as senhas de usuários SQL Server ?
  5. Há algum critério para utilização das roles de servidor (Sysadmin, DbCreator, etc) ?
  6. Há alertas configurados para monitorar questões de segurança ?
  7. Existe alguma solução para auditar os logins feitos à base ?
  8. Existe a utilização de soluções de Database Mirror, Replicação ou Log Shipping ? Como está configurada a segurança dos agentes e pastas envolvidos ?
  9. São utilizados Linked Servers ? Como a segurança dos usuários dos Linked Servers está configurada ?

III – Banco de dados

  1. Há algum critério para utilização das roles de banco de dados (db_owner, db_datareader, db_datawriter, etc) ?
  2. Há a utilização de database roles e application roles ?
  3. São utilizadas permissões em nível de schema ?
  4. Há mais acesso à base através de consultas ADHOC ou Stored Procedures ?
  5. Existem regras de negócio codificadas em stored procedures, views e functions ?
  6. Há algum monitoramento de alteração de estruturas de objetos (tabelas, views, procedures, functions, etc) ?
  7. Há a necessidade de criptografar dados ? Se sim, como isso é feito ?
  8. Existem acessos que combinem informações entre bancos de dados diferentes ? Como esse acesso é configurado ?

IV – Procedimentos

  1. Há algum monitoramento que contemple o nível de utilização de recursos (I/O, memória, CPU) ?
  2. Como é realizada a notificação de uma violação de segurança ?
  3. Já houve algum incidente relacionado à segurança ? Descreva-o
  4. Existe algum processo conhecido que represente riscos à segurança ? Se sim, como são documentados ?
  5. Antes da aplicação entrar em produção, é feito algum teste de segurança ? (SQL Injection, quebra de validação de regras no cliente, senhas “padrão”, etc)
  6. Quando é feito o deploy da aplicação para a área de produção as senhas são trocadas ?
  7. Quando uma aplicação é desativada ou substituída, há um política para remover o banco e os logins associados ?
  8. Os desenvolvedores têm acesso à área de produção e (ou) conhecimento das senhas utilizadas na produção ?
  9. Qual é a política de backup adotada para os bancos de dados de negócio e de sistema ?
  10. Caso o desenvolvedor necessite de um backup, como ele é disponibilizado ?

Espero que seja útil a quem trabalhe na melhora da segurança em um ambiente SQL Server.

[ ]s,

Gustavo

2 Respostas para “Como verificar se o SQL Server está seguro ?

  1. Marcelo Carvalho

    Prezado Gustavo,
    Agradeço pelo seu post que fora de insuperável qualidade.
    Peço permissão ao amigo para a utilização dele para os meus escritos na criação de uma documentaçãode boas práticas de instalação de sistemas.
    Gostaria de colocar duas perguntas.
    1) Existe algum conjunto de testes onde eu possa avaliar se o banco está bem instalado?
    2) Existe alguma tabela ou medida padrão para suportar o crescimento da base. Alguma formula padrão para planejar um sizing?
    Prezado, muito obrigado e deixo estas duas dúvidas para o nobre pesquisador e utilizador.
    Boa Páscoa para vc e os seus.
    Marcelo Carvalho

    • Olá Marcelo,

      Pode ficar à vontade. A idéia de compartilhar é justamente para que seja reaproveitado e refinado. Só peço que sempre que aplicável que sejam citadas as fontes ok ? Sobre suas perguntas vamos lá:

      Não existem muitos testes para avaliar se o banco está bem instalado. Talvez você possa tentar alguns testes básicos relacionados a conectividade, mas o melhor ponto de partida é olhar o arquivo de log após a instalação.

      O SQL Server não possui uma tabela que contenha todos os dados necessários para efetuar o crescimento do banco. Há muitos dados úteis, mas você tem que montar uma linha de base própria e capturá-los em períodos específicos (uma vez ao dia, ou uma vez na semana, ao mês, etc). Ainda assim, o tamanho da base não é tudo para efetuar um bom Sizing. Não há uma receita de bolo, mas monitorar é um excelente começo. Tente utilizar o Performance Studio para essa tarefa.

      [ ]s,

      Gustavo

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s