O uso da segurança integrada (SSPI) para acessar o SQL Server é melhor para aplicativos da Web?

13

Ao implantar aplicativos da Web (.net) em um ambiente de produção, é melhor usar a segurança integrada ou isso importa?

Parece-me que, se um hacker interrompe o servidor da Web, isso realmente não importa, pois ele pode se passar por uma máquina facilmente.

Pensamentos?

Eu não
fonte
Há tantas boas respostas aqui; foi difícil escolher um vencedor. Obrigado a todos.
NotMe

Respostas:

8

Eu diria que existem apenas dois motivos válidos para usar a autenticação SQL:

  1. Você está se conectando de fora do domínio, portanto, autenticação integrada.
  2. Você está executando um benchmark TPC-C e cada ciclo conta. A autenticação SQL é um pouco mais rápida.

Para o cenário que você está propondo (o host do servidor da Web está completamente comprometido), nada pode protegê-lo. O hacker pode fazer no servidor de banco de dados, no mínimo, tudo o que o servidor da web pode fazer . E eu diria que a defesa em profundidade pode ensinar você a minimizar a perda nesse caso: reduza os direitos de banco de dados da conta usada pelo servidor da web para o mínimo absolutamente necessário e nada mais. Segundo, verifique se o host do servidor da Web está comprometido, não pode ser usado para elevar privilégios mais altos que a conta do servidor da Web (por exemplo, não há outro serviço no host da WWW que use credenciais com privilégios mais altos no DB do que a conta da WWW). Estes são princípios básicos de segurança e não têm nada a ver com o esquema de autenticação usado.

Enquanto a autenticação sql vs. a autenticação windows não oferece uma vantagem clara no seu cenário, há outros problemas a serem considerados:

  1. Imposição centralizada de políticas: você tem um local para configurar suas políticas de senha, incluindo a duração e expiração da senha, o encerramento da conta etc.
  2. Controle sobre a representação e delegação de confiança. Depois que a autenticação sql é usada em uma cadeia de delegação confiável, todas as apostas são desativadas, pois isso não é uma 'delegação' real e, portanto, não está mais sob as restrições impostas por suas políticas
  3. Auditoria: a autenticação sql nem é vista pelo seu LSA; portanto, toda a sua infraestrutura de auditoria é simplesmente ignorada. Você precisa adicionar explicitamente os registros que o SQL produz sobre os eventos de autenticação sql, mas está misturando maçãs e laranjas, pois esses eventos têm origem, provedor e esquema diferentes no log de eventos

Uma última observação: o protocolo TDS expõe a senha de autenticação sql em texto não criptografado no tráfego, mas isso geralmente é atenuado solicitando a criptografia SSL do tráfego.

Então, por que você ainda vê hosts WWW de autenticação sql que armazenam a senha em claro no web.config? Esses são os maus desenvolvedores / administradores, não sejam um deles.

msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx

technet.microsoft.com/en-us/library/ms189067.aspx

Remus Rusanu
fonte
6

Se você não usar o SSPI, estará codificando o nome de usuário e a senha nos arquivos de origem.

Se você estiver codificando o nome de usuário e a senha nos arquivos de origem, todos os seus funcionários terão acesso a eles.

Isso é relativamente inseguro. Um ex-funcionário insatisfeito pode usar as informações maliciosamente. Um visitante pode ver o código em uma tela em algum lugar. Ou o código fonte pode sair acidentalmente na natureza.

A vantagem do SSPI é que a senha nunca é armazenada em nenhum lugar limpo.

Joel Spolsky
fonte
Embora verdadeiro, um funcionário insatisfeito também pode simplesmente instalar uma página da web que utiliza a conexão SSPI. Que é tão ruim quanto ter acesso à senha em si ...
NotMe
1
um funcionário EX descontentes já não teria acesso, uma vez que seu / sua senha teria sido desativado
Joel Spolsky
6

As outras respostas até agora têm sido boas, mas vou dar outra: gestão.

Mais cedo ou mais tarde, você provavelmente terminará com vários servidores SQL. O gerenciamento da autenticação SQL entre seu aplicativo e vários servidores SQL pode ser um pouco doloroso, especialmente quando você enfrenta problemas de segurança. Se você alterar uma senha de autenticação do Windows uma vez, ela será alterada imediatamente em todos os seus servidores. Se você precisar rotacionar suas senhas de autenticação SQL, é mais doloroso - a ponto de você provavelmente não fazer isso. Isso é um risco de segurança.

Brent Ozar
fonte
Certamente você precisa alterar a senha em cada servidor Web para a identidade do processo do trabalhador? Isso parece mais difícil de automatizar do que uma alteração no arquivo de configuração. Atualmente, todas as minhas opções são baseadas na facilidade de automação.
Luke Puplett 5/05
2

Não tenho 100% de certeza aqui, mas acho que o ponto principal é que a autenticação SQL é insegura; portanto, é melhor usar a autenticação do Windows. Dependendo da configuração do aplicativo, você também pode armazenar as credenciais apropriadas em um formato criptografado na máquina usando a autenticação do Windows. Eu não acho que isso seja realmente possível com a autenticação SQL. Você pode ofuscá-lo, mas, no final das contas, deve ficar claro.

Além disso, apenas porque um hacker pode entrar em um servidor não significa que o jogo acabou. Um hacker pode obter o controle de um processo sem privilégios, mas não pode fazer mais nada no servidor. É por isso que é importante não executar tudo como administrador ou sistema, mas usar contas de serviço com privilégios mínimos.

diq
fonte
1

A melhor coisa a fazer é limitar o que eles podem fazer se / quando invadirem o servidor da web. Isso significa conceder apenas os direitos SQL necessários para o aplicativo funcionar. É muito mais fácil conceder direitos DBO ao aplicativo, mas isso torna o banco de dados muito mais vulnerável no caso de um ataque bem-sucedido ao servidor da web.

Kevin Colby
fonte
1

Eu vou preceder tudo isso dizendo que estou assumindo que você está falando de um servidor Web interno na rede privada interna.

Vamos começar com a representação da máquina. Se a identidade do pool de aplicativos for Serviço de Rede e não houver representação no aplicativo .NET, sim, o aplicativo Web se conectará ao SQL Server de back-end usando a conta de computador da máquina. E isso significa que você concedeu acesso à conta da máquina. O CRM da Microsoft funciona dessa maneira.

No entanto, se você especificou uma identidade, essa conta de usuário precisará acessar o SQL Server. Embora você esteja certo de que, se um invasor comprometeu o servidor Web, ele efetivamente tem o mesmo acesso que a conta de identidade, a verdade é que o uso de um logon do SQL Server não altera nada aqui. Depois de ter acesso, posso modificar o aplicativo Web para fazer o que eu quero e o que ele fizer, no máximo que sua segurança permitir no SQL Server de back-end.

Agora, por que usar o SSPI. Em primeiro lugar, você não está usando um logon baseado no SQL Server. Isso significa que o Active Directory é a única fonte de segurança. Isso significa que você tem os meios normais de auditoria para determinar o acesso inválido. Segundo, significa que, a menos que haja outros aplicativos que exijam, você pode deixar o SQL Server no modo somente de autenticação do Windows. Isso significa que nenhum logon do SQL Server é permitido. Isso significa que qualquer ataque contra o sa é interrompido antes mesmo de começar. E, finalmente, facilita a recuperação. Se você usar um logon baseado no SQL Server, precisará extrair o logon com SID e senha criptografada. Se você estiver usando uma conta de usuário baseada no Windows como uma "conta de serviço", quando acessar um novo SQL Server, criando o logon,

K. Brian Kelley
fonte
Não tenho certeza se realmente existe uma diferença entre um servidor exposto publicamente e um servidor usado internamente. Fora isso, esta é uma boa explicação.
NotMe
Claro que existe. Um servidor exposto publicamente, em geral, não deve estar no domínio. Isso significa que você não pode usar uma conexão confiável. SSPI não é uma opção.
K. Brian Kelley
1

A questão é qual é "melhor"? O que é difícil de responder, pois se baseia no contexto, valores e prioridades do questionador.

Pessoalmente, eu gosto de autenticação SQL.

  • O AD é outra coisa para executar, dar suporte e gerenciar contas de serviço.
  • O AD precisa estar disponível no seu ambiente de hospedagem.
  • O AD dificultaria a migração para a nuvem ou nuvem híbrida.
  • O AD facilita a adição de contas de serviço a grupos nos quais eles não deveriam estar por administradores em outra parte da sua organização.
  • O SSPI não contorna o problema de criptografar sua cadeia de conexão, pois você deve criptografar seu nome de host SQL na configuração.
  • A autenticação SQL é simples e apenas configuração de texto, fácil de implantar.
  • Definir identidades do pool de aplicativos é outra coisa para automatizar e ocultar o nome de usuário e a senha nesses scripts de automação para cada ambiente.
  • O uso de duas cadeias de conexão facilita o uso de senhas contínuas, para que você possa atualizar a senha sem tempo de inatividade.

Último ponto: você codifica sua classe do gerenciador de conexões para tentar cada cadeia de conexão, para alterar a senha no primeiro na configuração, enviar a alteração e o failover para a segunda conexão e atualizar a senha no MSQL e o primeiro será usado novamente. É necessária uma alteração final na configuração para definir a segunda senha igual à primeira, pronta para a próxima vez.

Luke Puplett
fonte
0

Se os usuários não estiverem manipulando o banco de dados diretamente (por meio de outras ferramentas clientes, como o SQL Server Management Studio), normalmente criarei um único logon SQL para o aplicativo e concederei o acesso necessário. Nesse ponto, o usuário fica restrito ao que pode fazer conforme permitido pela interface do aplicativo da web.

squillman
fonte