Wählen Sie das Produkt, für das Sie Hilfe benötigen:
Carregamento seguro de bibliotecas para evitar ataques de pré-carregamento de DLLsArtigo: 2389418 - Ver produtos para os quais este artigo se aplica. Nesta páginaSumárioQuando uma aplicação carrega uma DLL (Dynamic Link Library) dinamicamente sem especificar um caminho totalmente qualificado, o Windows tenta localizar a DLL procurando num conjunto bem definido de directórios. Se um atacante obtiver o controlo de um dos directórios, poderá forçar a aplicação a carregar uma cópia maliciosa da DLL, em vez da DLL esperada. Estes ataques são conhecidos como “ataques de pré-carregamento de DLLs” e são comuns a todos os sistemas operativos que suportam o carregamento de bibliotecas de DLL partilhadas dinamicamente. Estes ataques podem permitir que um atacante execute código no contexto do utilizador que está a executar a aplicação. Quando a aplicação está a ser executada como Administrador, tal pode dar origem a uma elevação local de privilégios. Temos conhecimento do interesse renovado nestes ataques. Para limitar o efeito deste problema nos nossos clientes mútuos, a Microsoft publica este documento para a comunidade de programadores, de forma a certificar-se de que estes têm conhecimento do problema e dispõem das ferramentas necessárias para o resolver nas respectivas aplicações. Mais InformaçãoDescrição dos ataques de pré-carregamento de DLLsAtaques baseados em LoadLibraryQuando uma aplicação carrega uma DLL dinamicamente sem especificar um caminho totalmente qualificado, o Windows tenta localizar esta DLL procurando linearmente num conjunto bem definido de directórios, conhecido como Ordem de Procura de DLL. Se o Windows localizar a DLL na Ordem de Procura de DLL, irá carregar essa DLL. No entanto, se o Windows não localizar a DLL em nenhum dos directórios da Ordem de Procura de DLL, devolverá uma falha relativamente à operação de carregamento da DLL. Segue-se a Ordem de Procura de DLL das funções LoadLibrary
(http://msdn.microsoft.com/pt-pt/library/ms684175(VS.85).aspx)
e LoadLibraryEx
(http://msdn.microsoft.com/pt-pt/library/ms684175(VS.85).aspx)
, que são utilizadas para carregar DLLs dinamicamente:
Recomendação Para evitar este ataque, as aplicações podem remover o directório de trabalho actual (CWD) do caminho de procura de DLLs através da chamada da API SetDllDirectory com uma cadeia vazia (“”). Se uma aplicação depender do carregamento de uma DLL a partir do directório actual, obtenha o directório de trabalho actual e utilize-o para passar um caminho totalmente qualificado de LoadLibrary
(http://msdn.microsoft.com/pt-pt/library/ms684175(VS.85).aspx)
.
Também sabemos que alguns programadores utilizam LoadLibrary para validar a presença de uma DLL específica de forma a determinar a versão do Windows que está a ser executada pelo utilizador. Deve ter em atenção que isto pode tornar a aplicação vulnerável. Se a biblioteca afectada não existir na versão do Windows em que está a executar a aplicação, um atacante poderá introduzir uma biblioteca com esse mesmo nome no directório de trabalho actual. A Microsoft recomenda vivamente que não utilize esta técnica. Em vez disso, utilize as técnicas recomendadas descritas no artigo da MSDN, "Obter a Versão do Sistema". Uma aplicação que carregue plug-ins de terceiros e que não consiga forçar os plug-ins a utilizarem um caminho qualificado para as chamadas de LoadLibrary, deverá chamar SetDllDirectory(“”) para remover o directório de trabalho actual e, em seguida, chamar SetDllDirectory(“localização de instalação do plug-in”) para adicionar o directório de instalação do plug-in ao caminho de procura de DLLs. Ataques baseados em SearchPathExiste um ataque semelhante quando uma aplicação utiliza a API SearchPath para localizar uma DLL e carregar dinamicamente o caminho devolvido por SearchPath
(http://msdn.microsoft.com/pt-pt/library/aa365527(VS.85).aspx)
. Segue-se a ordem de procura predefinida para a API SearchPath:
ShellExecute e CreateProcessPoderão igualmente existir variações destes problemas quando os programadores chamam funções semelhantes como ShellExecute
(http://msdn.microsoft.com/pt-pt/library/bb762153(VS.85).aspx)
e CreateProcess
(http://msdn.microsoft.com/pt-pt/library/ms682425(VS.85).aspx)
para carregar executáveis externos. Recomendamos que os programadores tenham cuidado quando carregarem binários e especificarem o caminho totalmente qualificado. Este processo deverá ser menos complexo quando carregar um binário em vez de uma biblioteca. Passos recomendados para os programadores de softwareRecomendamos que os programadores procedam da seguinte forma:
Orientações sobre como identificar carregamentos de bibliotecas não segurosNo código fonte, eis alguns exemplos de carregamentos de bibliotecas não seguros:
Utilizar o Monitor do Processo para detectar dinamicamente carregamentos não segurosA Microsoft publica uma ferramenta denominada Monitor do Processo. Esta ferramenta permite que os programadores e os administradores controlem rigorosamente o comportamento de um processo em execução. O Monitor do Processo pode ser utilizado para detectar dinamicamente se uma das aplicações pode ser vulnerável a este tipo de problema.
Recursos adicionaisPara mais informações, visite as seguintes páginas Web da Microsoft: Ordem de Procura Dynamic Link Library http://msdn.microsoft.com/pt-pt/library/ms682586(VS.85).aspx Documentação da MSDN sobre a função SearchPath
(http://msdn.microsoft.com/pt-pt/library/ms682586(VS.85).aspx)
http://msdn.microsoft.com/pt-pt/library/aa365527(VS.85).aspx Documentação da MSDN sobre a função LoadLibrary
(http://msdn.microsoft.com/pt-pt/library/aa365527(VS.85).aspx)
http://msdn.microsoft.com/pt-pt/library/ms684175(VS.85).aspx Documentação da MSDN sobre a função SetDllDirectory
(http://msdn.microsoft.com/pt-pt/library/ms684175(VS.85).aspx)
http://msdn.microsoft.com/pt-pt/library/ms686203(VS.85).aspx Documentação da MSDN sobre a função SetSearchPathMode
(http://msdn.microsoft.com/pt-pt/library/ms686203(VS.85).aspx)
http://msdn.microsoft.com/pt-pt/library/dd266735(VS.85).aspx Artigo do blogue de David Leblanc, Engenheiro de Segurança Principal do Microsoft Office
(http://msdn.microsoft.com/pt-pt/library/dd266735(VS.85).aspx)
http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspx Artigo do blogue de Andrew Roths, equipa de Engenharia de MSRC dedicada aos ataques de pré-carregamento de DLLs
(http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspx)
http://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx
(http://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx)
PropriedadesArtigo: 2389418 - Última revisão: segunda-feira, 30 de Agosto de 2010 - Revisão: 2.0 A informação contida neste artigo aplica-se a:
|




Voltar ao topo







