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.
fonte
sa
ou qualquer membro desysadmin
, incluindo logins do Windows?sa
explicitamente.Respostas:
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.
fonte
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:
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)
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.
fonte
alter login sa with name = [as];
.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
sa
uso 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
sa
acesso em vigor concedersa
acesso 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 asa
senha 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 requersa
equivale a darsa
privilé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: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
sa
senha 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.fonte
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.
fonte
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.
fonte
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
fonte
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.)
fonte
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
fonte