Boletim de Segurança
Microsoft Security Bulletin MS02-039 - Crítica
Saturações de buffer no serviço de resolução do SQL Server 2000 podem habilitar a execução de código (Q323875)
Publicado: terça-feira, 24 de julho de 2002 | Atualizado: January 31, 2003
Versão: 1.2
Postado originalmente: 24 de julho de 2002
Atualizado: January 31, 2003
Resumo
Quem deve ler este boletim: Administradores de sistema usando o Microsoft® SQL Server™ 2000 e o Microsoft Desktop Engine 2000.
Impacto da vulnerabilidade: Três vulnerabilidades, a mais grave das quais pode permitir que um invasor obtenha controle sobre um servidor afetado.
Classificação de gravidade máxima: Crítica
Recomendação: Os administradores de sistema devem instalar o patch imediatamente.
Nota: O patch lançado com este boletim é eficaz na proteção do SQL Server 2000 e MSDE 2000 contra o vírus worm "SQL Slammer". No entanto, este patch foi substituído pelo patch lançado com o boletim MS02-061 , que contém correções para vulnerabilidades de segurança adicionais nestes produtos. A Microsoft recomenda que os clientes do SQL 2000 e do MSDE 2000 apliquem o patch do boletim MS02-061.
Software afetado:
- Microsoft SQL Server 2000
- Microsoft Desktop Engine (MSDE) 2000
Informações Gerais
Detalhes técnicos
Descrição técnica:
Este patch de segurança não contém um patch do artigo 317748 da Base de Dados de Conhecimento Microsoft necessário para garantir o funcionamento normal do SQL Server 2000 e do MSDE 2000. Se tiver aplicado este patch de segurança a uma instalação do SQL Server 2000 ou MSDE 2000 antes de aplicar a correção do artigo 317748 do Patch de Conhecimento Microsoft, tem de responder "não" se e quando lhe for pedido para substituir ficheiros para garantir que não substitui ficheiros do patch de segurança.
O SQL Server 2000 e o MSDE 2000 introduzem a capacidade de hospedar várias instâncias do SQL Server em uma única máquina física. Cada instância opera para todos os fins como se fosse um servidor separado. No entanto, as várias instâncias não podem usar a porta de sessão padrão do SQL Server (TCP 1433). Enquanto a instância padrão escuta na porta TCP 1433, as instâncias nomeadas escutam em qualquer porta atribuída a elas. O Serviço de Resolução do SQL Server, que opera na porta UDP 1434, fornece uma maneira para os clientes consultarem os pontos de extremidade de rede apropriados a serem usados para uma instância específica do SQL Server.
Há três vulnerabilidades de segurança aqui. Os dois primeiros são saturações de buffer. Ao enviar um pacote cuidadosamente criado para o Serviço de Resolução, um invasor pode fazer com que partes da memória do sistema (a pilha em um caso, a pilha no outro) sejam substituídas. Substituí-lo por dados aleatórios provavelmente resultaria na falha do serviço SQL Server; substituí-lo por dados cuidadosamente selecionados pode permitir que o invasor execute código no contexto de segurança do serviço SQL Server.
A terceira vulnerabilidade é uma vulnerabilidade de negação de serviço. O SQL usa um mecanismo keep-alive para distinguir entre instâncias ativas e passivas. É possível criar um pacote keep-alive que, quando enviado para o Serviço de Resolução, fará com que o SQL Server 2000 responda com as mesmas informações. Um invasor que criou esse pacote, falsificou o endereço de origem para que ele parecesse vir de um sistema SQL Server 2000 e o enviou para um sistema vizinho do SQL Server 2000 poderia fazer com que os dois sistemas entrassem em um ciclo interminável de trocas de pacotes keep-alive. Isso consumiria recursos em ambos os sistemas, diminuindo consideravelmente o desempenho.
Fatores atenuantes:
Saturações de buffer no SQL Server Resolution Service:
- O SQL Server 2000 é executado em um contexto de segurança escolhido pelo administrador no momento da instalação. Por padrão, ele é executado como um usuário de domínio. Assim, embora o código do invasor pudesse executar qualquer ação desejada no banco de dados, ele não teria necessariamente privilégios significativos no nível do sistema operacional se as práticas recomendadas tivessem sido seguidas.
- O risco representado pela vulnerabilidade pode ser mitigado, se possível, bloqueando a porta 1434 no firewall.
Negação de serviço por meio do SQL Server Resolution Service:
- Um ataque pode ser interrompido reiniciando o serviço SQL Server 2000 em qualquer um dos sistemas afetados. O processamento normal em ambos os sistemas seria retomado assim que o ataque cessasse.
- A vulnerabilidade não fornece nenhuma maneira de obter quaisquer privilégios no sistema. É apenas uma vulnerabilidade de negação de serviço.
Classificação de gravidade:
| Saturações de buffer no SQL Server Resolution Service: | Servidores de Internet | Servidores de Intranet | Sistemas Clientes |
| SQL Server 2000 | Crítico | Crítico | Nenhuma |
| Negação de serviço por meio do SQL Server Resolution Service: | Servidores de Internet | Servidores de Intranet | Sistemas Clientes |
| SQL Server 2000 | Crítico | Crítico | Nenhuma |
A avaliação acima referida baseia-se nos tipos de sistemas afetados pela vulnerabilidade, nos seus padrões típicos de implantação e no efeito que a exploração da vulnerabilidade teria sobre eles.
Identificador de vulnerabilidade:
- Saturações de buffer no SQL Server Resolution Service: CVE-CAN-2002-0649
- Negação de serviço via SQL Server Resolution Service: CVE-CAN-2002-0650
Versões testadas:
A Microsoft testou o SQL Server 2000 e 7.0 (e suas versões associadas do MSDE) para avaliar se eles são afetados por essas vulnerabilidades. As versões anteriores não são mais suportadas e podem ou não ser afetadas por essas vulnerabilidades.
Perguntas mais frequentes
Qual é a ordem correta para instalar este patch em conjunto com o hotfix discutido no317748?
Este patch de segurança não contém um patch do artigo 317748 da Base de Dados de Conhecimento necessário para garantir o funcionamento normal do SQL Server 2000 e do MSDE 2000. A ordem correta de instalação é instalar o patch 317748 e, em seguida, este patch de segurança. Se tiver aplicado este patch de segurança a uma instalação do SQL Server 2000 ou MSDE 2000 antes de aplicar a correção do artigo 317748 do Patch de Conhecimento, tem de responder "não" se e quando lhe for pedido para substituir ficheiros para garantir que não substitui ficheiros do patch de segurança.
Como verifico se tenho este patch de segurança instalado?
Você deve verificar se a versão do ssnetlib.dll na pasta \MSSQL\BINN para a instância para a qual você aplicou o patch é: 2000.80.636.0 Se a versão do ssnetlib.dll na pasta \MSSSQL\BINN for menor que 2000.80.636.0, será necessário reaplicar o patch de segurança. No entanto, a Microsoft recomenda que aplique o patch de segurança mais recente, conforme descrito no boletim MS02-061 , uma vez que contém correções para vulnerabilidades de segurança adicionais nestes produtos.
Que vulnerabilidades elimina este patch?
Este patch elimina três vulnerabilidades, ambas envolvendo o Serviço de Resolução do SQL Server 2000:
- As duas primeiras vulnerabilidades podem permitir que um invasor obtenha controle significativo, e talvez completo, sobre um SQL Server afetado.
- A terceira vulnerabilidade pode permitir que um invasor faça com que dois SQL Servers afetados envolvam uma troca de informações interminável, com o objetivo de diminuir o desempenho dos servidores.
O que é o Serviço de Resolução do SQL Server 2000?
O SQL Server 2000 introduz a capacidade de instalar várias cópias do SQL Server em uma única máquina e fazer parecer que as cópias são servidores de banco de dados completamente separados. Essas cópias, conhecidas como instâncias, são executadas independentemente umas das outras. A instância padrão escuta na porta TCP 1433. Outras instâncias não podem compartilhar essa mesma porta e exigem uma porta própria.
O desafio é como permitir que os clientes do SQL Server encontrem a porta na qual uma instância específica está operando; a solução é o Serviço de Resolução do SQL Server. A primeira instância em um SQL Server sempre opera pela porta 1433. Instâncias adicionais são alocadas seus próprios números de porta dinamicamente. Quando um cliente SQL precisa se conectar a uma instância adicional no SQL Server, ele consulta o Serviço de Resolução do SQL Server (que opera na porta UDP 1434), que informa qual porta a instância solicitada está usando.
A porta UDP 1434 normalmente está bloqueada no firewall?
Depende do cenário de implantação específico.
- Se uma rede não hospedar nenhum SQL Server conectado à Internet, a porta associada ao Serviço de Resolução do SQL Server (e todas as outras portas associadas ao SQL Server) deverá ser bloqueada.
- Se uma rede oferecer serviços do SQL Server para a Internet, mas houver apenas uma única instância no servidor, o Serviço de Resolução SQL pode e deve ser bloqueado.
- Se uma rede oferecer serviços do SQL Server para a Internet e tiver mais de uma instância, o Serviço de Resolução SQL deverá estar acessível através do firewall.
O Serviço de Resolução do SQL Server existe em versões anteriores do SQL Server?
N.º As versões anteriores do SQL Server não ofereciam suporte a várias instâncias e o Serviço de Resolução do SQL Server não existia. Como resultado, nenhuma outra versão do SQL Server é afetada pelas vulnerabilidades.
A seção Versões afetadas diz que o Microsoft Desktop Engine (MSDE) também é afetado por essas vulnerabilidades. O que é o MSDE?
O MSDE é um mecanismo de banco de dados criado e baseado na tecnologia SQL Server 2000 e que é fornecido como parte de vários produtos da Microsoft, incluindo o Microsoft Visual Studio e o Microsoft Office Developer Edition. Há uma conexão direta entre versões do MSDE e versões do SQL Server. O MSDE 2000 é baseado no SQL Server 2000.
Saturações de buffer no SQL Server Resolution Service (CVE-CAN-2002-0649):
Qual é o âmbito desta vulnerabilidade?
Na verdade, existem duas vulnerabilidades aqui, ambas são vulnerabilidades de saturação de buffer. Um invasor que explorar com êxito qualquer uma das vulnerabilidades poderá obter a capacidade de fazer com que o servidor falhe ou de executar código usando os privilégios do SQL Server.
Embora a exploração das vulnerabilidades concedesse ao invasor controle total sobre o banco de dados, isso não necessariamente transmitiria controle total sobre o próprio sistema. O SQL Server 2000 pode ser configurado para ser executado com vários níveis de privilégio; Por padrão, ele é executado com os privilégios de um usuário de domínio, em vez de um administrador.
O que causa as vulnerabilidades?
As vulnerabilidades resultam porque um par de funções oferecidas pelo SQL Server Resolution Service contêm buffers não verificados. Ao enviar uma solicitação especialmente formatada para a porta UDP 1434, pode ser possível executar os buffers associados a qualquer uma das funções.
O que essa vulnerabilidade permitiria que um invasor fizesse?
A vulnerabilidade pode permitir que um invasor execute uma das duas ações:
- Fazer com que o SQL Server falhe. Este seria o tipo de ataque mais fácil de montar e exigiria apenas que o invasor invadisse o buffer com dados aleatórios.
- Modifique o funcionamento do SQL Server, a fim de executar funções da escolha do invasor. Isso exigiria que o invasor invadisse o buffer com dados escolhidos com precisão.
Quem poderia explorar a vulnerabilidade?
Qualquer utilizador que possa entregar um pedido ao SQL Server (através da porta UDP 1434) num servidor afetado pode explorar a vulnerabilidade.
Se o invasor explorou a vulnerabilidade para fazer com que o SQL Server falhasse, o que o administrador precisaria fazer para restaurar a operação normal?
O administrador pode retomar a operação normal reiniciando o serviço SQL Server.
Se o invasor explorasse a vulnerabilidade para fazer com que o SQL Server executasse funções de sua escolha, em quais privilégios o código do invasor seria executado?
Claramente, o código do invasor teria controle total sobre as funções do banco de dados, uma vez que seria executado no contexto de segurança do próprio SQL Server. Mas ele pode ter poucos privilégios fora do SQL Server. Durante a instalação do SQL Server 2000, o administrador deve escolher em qual conta do Windows o SQL Server deve ser executado. Por padrão, o serviço do SQL Server é executado como um usuário de domínio. Se as práticas recomendadas fossem seguidas e um contexto de usuário normal fosse escolhido, o invasor não obteria controle administrativo sobre o sistema operacional, nem privilégios administrativos sobre o domínio.
Como é que o patch elimina as vulnerabilidades?
O patch garante que o Serviço de Resolução do SQL Server limite corretamente o tamanho dos dados de entrada e impeça que ele execute qualquer um de seus buffers.
Negação de serviço via SQL Server Resolution Service (CVE-CAN-2002-0650):
Qual é o âmbito desta vulnerabilidade?
Esta é uma vulnerabilidade de negação de serviço . Um invasor pode usar a vulnerabilidade para diminuir o desempenho de um SQL Server afetado. A quantidade exata pela qual o desempenho do sistema seria reduzido dependeria de uma série de fatores, como a velocidade do processador e a memória no SQL Server, o número de sistemas atacando o servidor e assim por diante.
A vulnerabilidade não poderia ser usada para fazer com que o servidor falhasse completamente, nem forneceria ao invasor quaisquer privilégios no sistema. O servidor retomaria a operação normal assim que o ataque fosse interrompido.
O que causa a vulnerabilidade?
A vulnerabilidade resulta de uma falha no mecanismo keep-alive do SQL Server 2000, que opera através do Serviço de Resolução. Se um pacote de dados específico for enviado para a função keep-alive do SQL Server 2000, ele responderá ao remetente com um pacote idêntico. Ao falsificar o endereço de origem de tal pacote, seria possível fazer com que dois sistemas SQL Server 2000 iniciassem um ciclo interminável de trocas de pacotes.
O que é a função keep-alive no SQL Server 2000?
O SQL Server 2000 inclui um mecanismo pelo qual ele pode determinar se um servidor está ativo ou não. Ele faz isso enviando um pacote keep-alive chamado para o Serviço de Resolução do SQL Server na porta UDP 1434 e ouvindo uma resposta.
O que há de errado com a implementação da função keep-alive no SQL Server 2000?
É possível criar um pacote keep-alive cuja resposta será idêntica à solicitação. Se um SQL Server enviasse esse pacote para outro SQL Server, ele entraria em um ciclo interminável de envio do mesmo pacote entre si. Essa atividade pode consumir a maior parte ou toda a largura de banda disponível nas duas máquinas.
Esta situação pode ocorrer naturalmente?
N.º A situação envolvida na vulnerabilidade não poderia ocorrer em condições normais. O SQL Server normalmente não gera um pacote keep-alive com as características necessárias. No entanto, poderia ser possível para um atacante introduzir tal pacote para iniciar uma troca, que seria posteriormente autossustentável.
Como um invasor pode fazer isso?
Suponha que havia dois SQL Servers com a vulnerabilidade, Servidor 1 e Servidor 2. Agora, suponha que o invasor criou o pacote keep-alive necessário e modificou o endereço de origem para que ele contivesse o endereço do Servidor 1 e, em seguida, enviou o pacote para o Servidor 2. Isso iniciaria a troca, porque o Servidor 2 responderia ao Servidor 1, que responderia ao Servidor 2, ad infinitum.
O que essa vulnerabilidade pode permitir que um invasor faça?
Um invasor pode usar essa vulnerabilidade para consumir recursos em dois sistemas SQL Server 2000 ao mesmo tempo.
Quem poderia explorar a vulnerabilidade?
Qualquer usuário que possa enviar dados para uma porta afetada do Serviço de Resolução do SQL Server pode explorar a vulnerabilidade.
Quanto tempo duraria um ataque?
Uma vez iniciado, um ataque continuaria até que uma das máquinas parasse de enviar pacotes. Isso pode acontecer porque o sistema foi reinicializado, o serviço do SQL Server foi reiniciado ou a conectividade entre os dois servidores foi perdida.
Uma vez terminado o ataque, o servidor retomaria o funcionamento normal sozinho?
Sim.
Quanto dos recursos de um sistema poderia ser monopolizado através de tal ataque?
Dependeria das especificidades do ataque. Por exemplo, seria possível envolver vários servidores em um ataque contra um único. Da mesma forma, dependeria da largura de banda da rede entre os sistemas, da velocidade do processador nas respetivas máquinas e assim por diante.
Como é que o patch elimina a vulnerabilidade?
O patch elimina o mecanismo keep-alive atual e determina quais servidores estão ativos e quais são passivos através de um mecanismo diferente. Depois de aplicar o patch, um sistema SQL Server 2000 não responderá mais aos pacotes keep-alive.
Disponibilidade do patch
Locais de download para este patch
Microsoft SQL Server 2000 e MSDE 2000:
Informações adicionais sobre este patch
Plataformas de instalação:
Esse patch pode ser instalado em sistemas que executam o SQL Server 2000 Service Pack 2.
Inclusão em service packs futuros:
A correção para esse problema será incluída no SQL Server 2000 Service Pack 3.
Reinicialização necessária: Não. O serviço SQL Server só precisa ser reiniciado após a aplicação do patch.
O patch pode ser desinstalado: Sim.
Patches substituídos: Nenhum.
Verificando a instalação do patch:
- Para garantir que você tenha a correção instalada corretamente, verifique os arquivos individuais consultando o carimbo de data/hora dos arquivos listados no manifesto do arquivo no artigo Q323875 da Base de Dados de Conhecimento Microsoft.
Advertências:
Nenhuma
Localização:
As versões localizadas deste patch estão disponíveis nos locais discutidos em "Disponibilidade do patch".
Obtenção de outros patches de segurança:
Patches para outros problemas de segurança estão disponíveis nos seguintes locais:
- Os patches de segurança estão disponíveis no Centro de Download da Microsoft e podem ser encontrados mais facilmente fazendo uma pesquisa de palavra-chave para "security_patch".
- Os patches para plataformas de consumidor estão disponíveis no site WindowsUpdate
Informações suplementares:
Agradecimentos
A Microsoft agradece a David Litchfield, da Next Generation Security Software Ltd., por nos comunicar estes problemas e trabalhar connosco para proteger os clientes.
Suporte:
- O artigo Q323875 da Base de Dados de Conhecimento Microsoft discute esse problema e estará disponível aproximadamente 24 horas após o lançamento deste boletim. Os artigos da Base de Dados de Conhecimento podem ser encontrados no site de Suporte Online da Microsoft.
- O suporte técnico está disponível no Atendimento Microsoft. Não há cobrança para chamadas de suporte associadas a patches de segurança.
Recursos de segurança: O site Microsoft TechNet Security fornece informações adicionais sobre segurança em produtos Microsoft.
Exclusão de responsabilidade:
As informações fornecidas na Base de Dados de Conhecimento Microsoft são fornecidas "no estado em que se encontram", sem garantia de qualquer tipo. A Microsoft se isenta de todas as garantias, expressas ou implícitas, incluindo as garantias de comercialização e adequação a uma finalidade específica. Em nenhuma circunstância a Microsoft Corporation ou seus fornecedores serão responsáveis por quaisquer danos, incluindo danos diretos, indiretos, incidentais, consequenciais, perda de lucros comerciais ou danos especiais, mesmo que a Microsoft Corporation ou seus fornecedores tenham sido avisados da possibilidade de tais danos. Alguns estados não permitem a exclusão ou limitação de responsabilidade por danos consequenciais ou incidentais, portanto, a limitação acima pode não se aplicar.
Revisões:
- V1.0 (24 de julho de 2002): Boletim criado.
- V1.1 (25 de julho de 2002): Atualizado para observar que o MSDE 2000 é afetado pelas vulnerabilidades.
- V1.2 (31 de janeiro de 2003): Atualizado para avisar sobre a substituição pelo boletim MS02-061 e esclarecer a ordem de instalação quando o Hotfix 317748 é aplicado em conjunto com este patch de segurança.
Construído em 2014-04-18T13:49:36Z-07:00