Por que um aplicativo não deve usar a conta sa


21

Minha primeira pergunta, por favor, seja gentil. Entendo que a conta sa permite controle total sobre um SQL Server e todos os bancos de dados, usuários, permissões etc.

Tenho uma crença absoluta de que os aplicativos não devem usar a senha sa sem um motivo aperfeiçoado e focado nas pessoas de negócios. As respostas a esta pergunta incluem muito do meu raciocínio para uma discussão focada em TI

Estou sendo forçado a aceitar um novo sistema de gerenciamento de serviços que NÃO funcionará, a menos que use a senha sa. Eu nunca tive tempo para entender por que, ao configurar uma avaliação, mas a equipe do servidor tentou instalá-la para usar uma função fixa que eu havia configurado incorporando db_cength e outras permissões que eu pensava que seriam necessárias. que falhou. Em seguida, deixei a equipe do servidor instalar com a conta sa, mas executar sob uma conta na função dbo para seu banco de dados, mas que também falhou. Mal-humorado, tentei fazê-lo funcionar com uma conta na função sysadmin, mas mesmo isso falhou e não com mensagens de erro úteis que me permitiram descobrir o que estava acontecendo sem gastar mais tempo do que eu tinha disponível. Ele funcionará apenas com a conta sa e a senha armazenada em texto não criptografado no arquivo de configuração.

Quando perguntei isso e a equipe do servidor conversou com o fornecedor, eles receberam a resposta preocupante de 'Qual é o problema?' e então 'bem, podemos olhar para mexer na senha' mexendo ffs

Sei que existem maneiras e meios de restringir o acesso ao arquivo, mas, na minha opinião, é apenas mais uma fraqueza na segurança.

Enfim, minha pergunta é: alguém poderia me indicar alguma documentação que eu possa usar para explicar aos negócios a razão pela qual isso é uma coisa ruim e deve ser um grande não não? Eu trabalho em um campo que significa que preciso levar a segurança a sério e tenho lutado para fazer a empresa entender e, por fim, pode estar acima da classificação, mas preciso tentar.


1
saou qualquer membro de sysadmin, incluindo logins do Windows?
Remus Rusanu

sa e sa apenas :-(
SQLDBAWithABeard

1
Você precisa obter mais informações do fornecedor. Especificamente, o que eles estão fazendo e que exigem saexplicitamente.
Aaron Bertrand

11
Freqüentemente, quando um fornecedor diz que precisa fazer o login explicitamente, isso significa que simplesmente não testou seu aplicativo de outra maneira (ou fez uma vez e ocorreu um erro que não foi analisado antes de decidir "continuaremos" com sa "), o que não é algo que me encha de confiança. Porém, não tome essa atitude diretamente com o fornecedor; inquirir de forma mais diplomática obterá melhores resultados!
precisa saber é o seguinte

David tem-lo corretamente Eu acredito dos meus breves relações com o fornecedor
SQLDBAWithABeard

Respostas:


21

Depende do seu negócio, mas o principal na maioria dos casos é garantir que ele não seja visto como um problema de TI. É uma questão de segurança e, enquanto as duas pessoas se sobrepõem maciçamente aos negócios, é mais provável que você escute se você disser "segurança" do que se estiver "gemendo sobre coisas gerais de TI".

Você trabalha com algum cliente que tenha requisitos de segurança? Esse é um bom lugar para começar. Se executássemos um aplicativo com acesso de nível sa ou apenas um aplicativo que não protegesse adequadamente suas credenciais, mesmo que não estivesse usando acesso privelegado (preferimos fortemente o Windows Integrated, em vez de usuário / senha armazenados, sempre que possível), e estaríamos sujeitos a uma segurança auditoria, essa auditoria falharia e corríamos o risco de perder clientes e / ou ter que devolver dinheiro aos clientes de nossos grupos (organizações bancárias no caso do produto em que trabalho principalmente, outras partes do grupo lidam com a polícia e a saúde autoridades e assim por diante) a segurança faz parte de nossa oferta adequada ao seu objetivo. Empresários vão compreender a gravidade dessa ameaça potencial, mesmo que eles geralmente não mais de serviço de bordo pagar para recomendações de TI.

Mesmo ignorando os requisitos impostos pelo cliente, se você se esforçar para atender a vários padrões de segurança padrão do setor, novamente esse tipo de autenticação de aplicativo falhará diante de uma auditoria, pois está tão longe das práticas recomendadas como algo geralmente considerado na lista "simplesmente não deveria ser feito". Deixe claro para os decisores de negócios que a segurança é uma parte importante do aplicativo e o fato de esse fornecedor não estar ciente (ou pelo menos adequadamente preocupado) faz com que você tenha dúvidas sobre o que mais eles talvez não sejam capazes de fazer. lidar com: conhecer as melhores práticas de segurança de banco de dados é (bem, deve ser) parte de seu trabalho e não é difícil implementá-las.

Indique também que você (o comprador) deve ditar requisitos razoáveis ​​de segurança ao fornecedor, e não o contrário. Como são seus dados, eles não estão qualificados para declarar o que é considerado seguro o suficiente.


Ha. Não percebeu que foi adicionado o comentário É seguro dizer que, onde trabalho, segurança de todos os tipos é uma preocupação significativa, considere a mesma da polícia, se quiser. No entanto, os tomadores de decisão não vêem o sa como uma preocupação. A auditoria é um bom ponto de partida e vou investigar isso mais detalhadamente.
SQLDBAWithABeard

+1 gostei especialmente o comentário de que esta é uma segurança questão não um que questão.
perfil completo de Kenneth Fisher

2
Eu hesitaria em comprar qualquer coisa de vários caras que pensam que não há problema em deixar as chaves do reino em um arquivo de configuração em texto simples. Sei que não é sua decisão, mas se você conseguir que os Deciders vejam que idéia terrível é essa e o que ela diz sobre o fornecedor, isso pode ajudar seu caso.
mdoyle

Mdoyle - O problema é que, à medida que eu aprendo mais, os Deciders vêem as coisas com sinais de libra e, como se trata de uma atualização de uma versão antiga, está ficando barato. Eu acho que estou vencendo a batalha um pouco, graças às boas pessoas daqui. Eu ter atrasado o teste da parte do servidor web deste para o presente, pelo menos
SQLDBAWithABeard

20

Nenhum aplicativo precisa ter acesso ao SA - nunca. (A menos que seu único objetivo seja a administração de banco de dados de algum tipo.)

É uma regra geral nunca conceder mais direitos a qualquer logon (aplicativo ou pessoal) do que a empresa exige que o logon possua.

Nenhuma aplicação é completamente segura. A maioria possui algum tipo de vulnerabilidade de Injeção SQL ou XSS. Se um invasor conseguir executar uma declaração de sua escolha e tiver acesso 'SA', muitas coisas podem acontecer aos seus dados que podem matar a empresa instantaneamente. (Especialmente se os dados precisarem ser confiáveis ​​porque são usados ​​pela polícia.) Pergunte aos interessados ​​o que eles teriam que fazer, se alguém pudesse alterar deliberadamente até mesmo um único registro e essas informações vazassem.

Agora, com o acesso 'SA', não apenas o banco de dados do aplicativo pode ser alterado, mas também todos os outros bancos de dados do sistema. Portanto, pergunte às partes interessadas o que elas fariam se você fizesse uma cópia de TODAS as suas bases de dados e enviasse para o jornal. Porque isso pode acontecer se um funcionário insatisfeito descobrir essa falha de segurança.

O fornecedor disse que poderia embaralhar a senha. Isso é BS. O aplicativo precisa acessar a senha em texto não criptografado para usá-la, para que a chave para decifrar a senha seja armazenada decodificada ao lado dela. Além disso, como mencionado anteriormente, o verdadeiro problema não é alguém encontrar essa senha; é que as pessoas que usam esse sistema através de uma vulnerabilidade terão acesso total a todos os seus bancos de dados sem nunca ver a senha.

A causa mais provável para a necessidade de SA é que o aplicativo precise interagir com o SQL Agent. Pelo menos essa é uma das funções mais difíceis de implementar corretamente e a maioria das pessoas simplesmente segue a rota "use SA" para contornar isso. A exigência de 'SA' pode ser devido ao fornecedor não saber como verificar as permissões do sysadmin.

Existem duas soluções que você pode tentar:

  1. Renomeie SA (de qualquer maneira, uma prática recomendada de segurança) e crie uma nova conta chamada 'SA' com direitos restritos. (Nunca tentei isso, mas deve funcionar)

  2. Não instale o software. Você como profissional não pode assumir a responsabilidade por essa ação, portanto não deve instalá-la. Para fazer uma comparação, peça a um encanador para passar a linha de gás diretamente pela lareira em vez de em torno dela para economizar algum cachimbo / dinheiro. Você pode estar rindo dessa imagem, mas acredito que é uma comparação apropriada - este software explodirá mais cedo ou mais tarde, provavelmente mais cedo. E quando isso acontecer, também poderá prejudicar os negócios.

Se tudo isso não impedir que "eles" exijam esse software, a última recomendação que posso lhe dar é executar. Se algo acontecer com os dados, você será o primeiro a ser responsabilizado. Portanto, com esse aplicativo, você provavelmente não tem segurança no emprego; portanto, encontre um empregador que ofereça pelo menos alguns.


4
+1 apenas para o símile "a linha de gás diretamente através da lareira" .
precisa saber é o seguinte

No SQL Server, a conta sa não pode ser renomeada. No entanto, ele pode ser desativado.
precisa

1
@GreenstoneWalker: certeza de que ele pode: alter login sa with name = [as];.
Remus Rusanu 04/04

Remus, isso me servirá certo por confiar no SSMS e também por confiar em conhecimentos antigos. Antes do SQL Server 2005, não era possível renomear. O SSMS não parece capaz de renomear o logon sa, mas o T-SQL que você publica está exatamente correto.
precisa

12

Eu vejo duas linhas de atacar isso.

  • Conformidade . Existe algum critério de conformidade obrigatório em vigor em sua loja? Pesquise com atenção as palavras e veja se encontra algo incompatível com o 'requisito' do aplicativo. Se você encontrar algo que impeça o sauso por um aplicativo, você terá uma caixa estanque à prova de balas, pois o aplicativo tornaria sua empresa responsável, etc.

  • Acesso de administrador do usuário . Certifique-se de apresentar claramente o caso de um aplicativo que requer saacesso em vigor conceder saacesso a todos os usuários corporativos que possuem direitos de administrador nas estações de trabalho em que o aplicativo está instalado. Não há como ocultar a sasenha dos administradores locais onde o aplicativo é executado, isso é fato e nenhuma quantidade de 'embaralhamento' pode impedir isso. Não há raiz de confiança local que um administrador local não possa obter, se ele quiser. Deixe claro que ter um aplicativo que requer saequivale a dar saprivilégio a todos os usuários que estão executando o aplicativo. Explique o que isso significa, o que efetivamente os usuários podem fazer:

    • capacidade de ler quaisquer dados no servidor, não apenas a partir deste aplicativo, mas de qualquer outro banco de dados hospedado nesse servidor
    • capacidade de modificar quaisquer dados no servidor, novamente de qualquer outro banco de dados no mesmo servidor
    • capacidade de apagar qualquer vestígio de suas ações após a modificação
    • capacidade de alterar qualquer auditoria e histórico para fazer parecer que determinadas ações foram realizadas por um usuário diferente
    • capacidade de usar as credenciais do SQL Server para escalar um ataque a qualquer outro recurso que confie neste servidor. Isso pode implicar qualquer outro SQL Server, mas também outros recursos, incluindo, entre outros, compartilhamentos de arquivos, servidores de trocas, etc., pois o SQL Server pode ser usado apenas como um trampolim.

Deixe claro para os tomadores de decisão que aceitar esse aplicativo implica confiar a todos os funcionários que têm acesso de administrador às estações de trabalho que executam o aplicativo todos os privilégios mencionados acima. O fornecedor tentará defender sua posição invocando um ou outro tipo de 'criptografia' da sasenha do aplicativo. Isso não retém água. Não existe um esquema de criptografia capaz de suportar um ataque de um administrador. E deixe claro que a quantidade de habilidades técnicas necessárias para encontrar uma senha localmente 'oculta' é completamente irrelevante. Os funcionários não vão fazer isso sozinhos, um deles pesquisará no Google e descobrirá o script fácil de usar que o faz.


Obrigado Remus. Essa é precisamente a resposta que eu exigi. Eu estou lentamente ganhando a batalha e isso é tudo ajudando
SQLDBAWithABeard

7

Primeiro, a senha sa armazenada em texto simples? Você deveria votar com sua carteira. Quem pensa que é aceitável precisa ser excluído do negócio.

Aqui está uma anologia que pode ajudá-lo a explicar o problema: A funcionária Alice precisa de acesso ao primeiro andar. Você dá a ela a chave mestra de todo o edifício ou apenas a chave do primeiro andar? Resposta: Você dá a ela apenas as chaves do primeiro andar. Por quê? Porque reduz a chance de danos acidentais ou deliberados. Se Alice não puder acessar a sala do servidor do segundo andar, ela nunca fará nada de ruim por lá.

É o princípio do menor privilégio.

Quanto ao motivo pelo qual o aplicativo precisa usar a conta sa, essa é uma pergunta que o PerfMon ou o Extended Events deve poder responder. Crie um rastreio PerfMon usando o modelo T-SQL, talvez filtrado pelo nome do aplicativo.

Em primeiro lugar, aqui está outro argumento contra o uso de sa: O uso da conta sa exige que o serviço SQL Server esteja no modo de autenticação mista. A autenticação somente pelo Windows é melhor, pois podemos aproveitar todos os recursos seguros do Kerberos.


4

Do ponto de vista técnico, não há razão para que um aplicativo precise de permissões de SA. O que provavelmente aconteceu é que os desenvolvedores do aplicativo provavelmente verificam se o logon deles tem permissões de administrador de sistema e, se não, ele simplesmente lança uma mensagem de erro. Dessa forma, eles podem alegar que o aplicativo requer direitos de SA.

Se você precisar desse aplicativo, eu o executaria em uma instância separada que não possui mais nada.


Eu acho que provavelmente verifica se ele está sendo executado como sa e, em seguida, falhar, pois não será executado sob uma conta com sysadmin
SQLDBAWithABeard

1
Então é preciso verificar o ID do usuário específico. É provável que o desenvolvedor esteja fazendo isso porque funciona com sa e eles não querem se preocupar em ver quais permissões eles realmente precisam, portanto, essa é a maneira mais fácil de evitar outros erros. É uma abordagem totalmente porcaria e o fornecedor deve ser criticado por fazê-lo.
mrdenny

4

Talvez seu fornecedor esteja solicitando / exigindo "sa" porque em algum lugar do aplicativo eles estão usando XP_CMDSHELL. (Não me inicie no dano possível com acesso irrestrito ao XP_CMDSHELL. Basta dizer que isso potencialmente abre não apenas seus dados, mas a máquina host e, talvez, qualquer outra coisa na sua rede para acesso de administrador)

Se houver uma necessidade legítima, você poderá conceder acesso restrito por meio de uma conta proxy. Consulte, por exemplo, BOL: http://msdn.microsoft.com/en-us/library/ms175046.aspx


4

Nenhum aplicativo deve exigir a conta e a senha do SA para operar.

No entanto, eu instalei um produto de gerenciamento de serviços de TI e, durante o processo de instalação, você tem a opção de fornecer as credenciais da conta SA para permitir que o instalador crie o banco de dados e anexe uma conta ao banco de dados para o software usar. As credenciais da conta SA não são salvas nos logs do aplicativo ou instalador em nenhum lugar. Este software também oferece a opção de usar um banco de dados pré-criado durante a instalação.

Portanto, confirmo se a conta SA é necessária para a instalação ou a operação deste software de gerenciamento de serviços de TI.

Se instalação: crie uma conta 'sa' temporária - faça a instalação - e remova a conta.

Se estiver em operação: evite esse software como a praga. (ou configure um servidor SQL autônomo que hospedará apenas esse banco de dados.)


+1 para instância dedicada do servidor SQL. Essa seria uma boa alternativa de último recurso à concessão de sa no servidor real.
Dan

0

Qualquer parâmetro de segurança do sistema SQL Server padrão fornecido deve ser modificado. É recomendável não usar o modo misto (habilita a autenticação do Windows e do SQL Server) para autenticação. Em vez disso, alterne apenas para a autenticação do Windows - que aplicará a política de senha do Windows - verificando o comprimento, a duração da vida útil e o histórico da senha. O recurso da diretiva de senha do Windows que a diferencia da autenticação do SQL Server é o bloqueio de logon - após várias tentativas falhas de logon sucessivas, o logon fica bloqueado e inutilizável para uso posterior

Por outro lado, a autenticação do SQL Server não fornece métodos para detectar tentativas de ataque de força bruta e, o que é pior, o SQL Server é otimizado para lidar com um grande número de tentativas rápidas de logon. Portanto, se a autenticação do SQL Server for obrigatória em um sistema SQL Server específico, é altamente recomendável desativar o logon do SA


1
Foi um acidente ou intencional - responder a 2 perguntas com a mesma resposta exata?
ypercubeᵀᴹ

Obrigado pelo comentário. Apenas pensei que a explicação pode ajudar em ambos os casos.
Ivan Stankovic 15/05

Interessante, mas não particularmente útil para o OP.
Dan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.