it-swarm-pt.tech

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

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 eles podem facilmente se passar pela máquina.

Pensamentos?

13
NotMe

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 (ou seja, não há outro serviço no Host da WWW que use credenciais com privilégios mais altos no banco de dados do que a conta da WWW). Esses são princípios básicos de segurança e não têm nada a ver com o esquema de autenticação usado.

Embora o sql auth vs. windows auth não ofereça 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 a 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 ruins 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

8
Remus Rusanu

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.

6
Joel Spolsky

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. Gerenciar a 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.

6
Brent Ozar

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.

2
diq

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 o nome do 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 na primeira configuração, pressione a tecla Enter e faça o failover para a segunda conexão e atualize 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.

1
Luke Puplett

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 da 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 for acessar um novo SQL Server, criando o logon, tudo será reconectado quando você restaurar o banco de dados, porque os SIDs corresponderão entre o logon e o usuário do banco de dados. .

1
K. Brian Kelley

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

1
Kevin Colby

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 concedo a ele o acesso necessário. Nesse ponto, o usuário fica restrito ao que pode fazer conforme permitido pela interface do aplicativo da web.

0
squillman