Como utilizar um script do Visual Basic para instalar o patch de segurança 824146 (MS03-039) ou 823980 (MS03-026) em computadores anfitriões remotos

O suporte para o Windows XP terminou

A Microsoft terminou o suporte para o Windows XP em 8 de Abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Aprenda o que isto significa para si e como pode ficar protegido.

O suporte para Windows Server 2003 terminou a 14 de Julho de 2015

A Microsoft terminou o suporte para Windows Server 2003 a 14 de Julho de 2015. Esta alteração afetou as suas atualizações de software e opções de segurança. Aprenda o que isto significa para si e como pode ficar protegido.

Sumário
Este artigo inclui um script de exemplo do Microsoft Visual Basic Scripting Edition com o nome Patchinstall.vbs. Este script é um exemplo de como um administrador de rede pode utilizar scripts de Windows Management Instrumentation (WMI) para instalar o patch de segurança 824146 (MS03-039) ou 823980 (MS03-026) em computadores anfitriões remotos sem os patches instalados, num ambiente de domínio do Microsoft Windows NT, Windows 2000 ou Windows Server 2003. O script Patchinstall.vbs utiliza um ficheiro (Ipfile.txt), que contém endereços IP, como entrada e instala o patch de segurança 824146 (MS03-039) ou 823980 (MS03-026), a partir de uma localização conhecida, no computador anfitrião remoto (C:\Patchinst.exe). Para obter informações adicionais sobre o patch de segurança 824146 (MS03-039), clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
824146 MS03-039: Uma sobrecarga da memória intermédia no RPCSS pode permitir que um atacante execute programas maliciosos
Para obter informações adicionais sobre o patch de segurança 823980, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
823980 MS03-026: Uma sobrecarga da memória intermédia na RPC pode permitir a execução de código
Para obter informações adicionais sobre uma ferramenta que os administradores de rede podem utilizar para verificar se existem computadores nas mesmas que não tenham estes patches de segurança instalados, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
827363 Como utilizar a ferramenta de verificação KB 824146 para identificar computadores anfitriões que não tenham os patches de segurança 823980 (MS03-026) e 824146 (MS03-039) instalados

Notas

  • Tem de ter permissões de administrador nos computadores de destino remotos para poder instalar o patch de segurança 824146 ou 823980 com êxito.
  • Os computadores de destino baseados no Microsoft Windows XP devem estar associados a um domínio do Windows NT, Windows 2000 ou Windows Server 2003, para a utilização do script Patchinstall.vbs com êxito.
  • O script Patchinstall.vbs utiliza o Windows Management Instrumentation (WMI). O WMI depende do DCOM (Distributed Component Object Model). Consequentemente, o Patchinstall.vbs não funciona em computadores de destino onde o DCOM tenha sido desactivado para contornar a vulnerabilidade abordada nos boletins de segurança MS03-039 ou MS03-026 da Microsoft.
  • Os pacotes dos patches de segurança 824146 ou 823980 devem estar localizados numa pasta local do computador onde o administrador vai executar o script Patchinstall.vbs, e os nomes dos pacotes devem ser alterados para Patch_XP.exe (para o Windows XP), Patch_W2K.exe (para o Windows 2000) e Patch_W2K3.exe (para o Windows Server 2003).
  • Pode modificar o script Patchinstall.vbs para instalar outros patches.
Mais Informação
O script Patchinstall.vbs efectua as seguintes tarefas:
  • O script lê uma lista de endereços IP dos computadores anfitriões remotos onde o administrador pretende instalar o patch de segurança 824146 ou 823980. O script obtêm esta lista a partir de um ficheiro de texto ASCII (Ipfile.txt) que contém uma lista de endereços IP (um endereço IP por linha). Por exemplo, pode utilizar o ficheiro de registo Vulnerable.txt da ferramenta de verificação KB824146 para o ficheiro Ipfile.txt .
  • O script obtém o primeiro endereço IP da lista.
  • O script determina a versão do Windows instalada no computador de destino.
  • O script mapeia a unidade Z no computador do script para C$ no computador de destino.
  • O script copia a versão correcta do patch (para o Windows XP, Windows 2000 ou Windows Server 2003) para C:\Patchinst.exe, no computador de destino (utilizando a unidade Z mapeada).
  • O script instala o patch e, em seguida, reinicia automaticamente os computadores de destino sem a intervenção do utilizador nem apresentação de caixas de diálogo, através da utilização dos parâmetros -q -f (modo de instalação automática).
  • O script espera que a instalação seja concluída.
  • O script tenta eliminar o ficheiro C:\Patchinst.exe do computador de destino.
  • O script remove o mapeamento da unidade Z.
  • O script processa o endereço IP seguinte da lista.
Importante: a Microsoft recomenda que modifique este script de exemplo para o ambiente da sua rede e que teste esse script num ambiente de teste antes de utilizá-lo num ambiente de produção.

Para utilizar o script Patchinstall.vbs, cole o seguinte script num ficheiro de texto com o nome Patchinstall.vbs. Em seguida, execute o script Patchinstall.vbs utilizando a seguinte linha de comando:
cscript patchinstall.vbs Ipfile.txt LocalPathToPatches
Neste comando, Ipfile.txt é o ficheiro de texto que contém uma lista de endereços IP dos computadores anfitriões remotos onde pretende instalar o patch de segurança 824146 ou 823980. LocalPathToPatches é o caminho completo de uma pasta que contém os pacotes dos patches de segurança 824146 ou 823980 (com o nome alterado para Patch_XP.exe para o Windows XP, Patch_W2k.exe para o Windows 2000 e Patch_W2k3.exe para o Windows Server 2003).

O script Patchinstall.vbs

A Microsoft fornece exemplos de programação apenas a título informativo, sem garantia expressa ou implícita, incluindo, sem limitação, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador conhece a linguagem de programação apresentada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.
' Patchinstall.vbs' Patch installation script for MS03-026 and MS03-039' (c) Microsoft 2003' v1.03 clon error resume nextconst XP_Patch = "Patch_XP.exe"const W2k_Patch = "Patch_W2k.exe"const W2k3_Patch = "Patch_W2k3.exe"If right(ucase(wscript.FullName),11)="WSCRIPT.EXE" then     wscript.echo "ERROR: You must run this script using cscript, for example 'cscript " & wscript.scriptname & "'."     wscript.quit 0end if' USAGEif wscript.arguments.count <> 2 then     wscript.echo "Usage: cscript " & wscript.scriptname & " <IpFile.txt> <LocalPathToPatches>" & vbCrLf & vbCrLf & _     "  <LocalPathToPatches> must be a full path of a folder that contains all of these files:" & vbCrLf & _     "      " & XP_Patch & vbCrLf & _      "      " & W2k_Patch & vbCrLf & _      "      " & W2k3_Patch     wscript.quitend ifipFile = wscript.arguments(0)localPathToPatches = wscript.arguments(1)set onet = createobject("wscript.network")set ofs = createobject("scripting.filesystemobject")' Verify that ipfile is accessible.set oipFile = ofs.opentextfile(ipFile, 1, false)if (Err.Number <> 0) then     wscript.echo "Cannot open " & ipFile     wscript.quitend if' Make sure to end with a \ character.if right(localPathToPatches, 1) <> "\" then     localPathToPatches = localPathToPatches & "\"end if'Note that cim_datafile does not support UNC paths'so everything must be handled through mapped drives.if left(localPathToPatches, 2) = "\\" then     wscript.echo "<pathToExecutable> cannot be a UNC path, please map a drive locally"     wscript.quitend ifexeWinXP = ofs.getfile(localPathToPatches + XP_Patch).nameexeW2k = ofs.getfile(localPathToPatches + W2k_Patch).nameexeW2k3 = ofs.getfile(localPathToPatches + W2k3_Patch).name' Verify that the patches are accessible.if ((len(exeWinXP) = 0) OR (len(exeW2k) = 0) OR (len(exeW2k3) = 0)) then     wscript.echo "Cannot find patch files."     wscript.echo "Please verify that the <LocalPathToPatches> folder contains all of these files:" & vbCrLf & _     "      " & XP_Patch & vbCrLf & _      "      " & W2k_Patch & vbCrLf & _      "      " & W2k3_Patch     wscript.quitend ifset osvcLocal = getobject("winmgmts:root\cimv2")'The error-handling code is below the function that may throw one - execute it.on error resume nextwhile not oipFile.atEndOfStream     ip = oipFile.ReadLine()     wscript.echo vbCrLf & "Connecting to " & ip & "..."     Err.Clear     set osvcRemote = GetObject("winmgmts:\\" & ip & "\root\cimv2")     if (Err.Number <> 0) then          wscript.echo "Failed to connect to " & ip & "."     else          exeCorrectPatch = detectOSPatch(osvcRemote)          if (exeCorrectPatch <> "") then               ' Lay the bits on the remote computer.               wscript.echo "Installing patch " & exeCorrectPatch & "..."               onet.mapnetworkdrive "z:", "\\" & ip & "\C$"               set osourceFile = osvcLocal.get("cim_datafile=""" & replace(localPathToPatches, "\", "\\") & exeCorrectPatch & """")               ret = osourceFile.Copy("z:\\Patchinst.exe")               if (ret <> 0 and ret <> 10) then                    ' Failure detected and failure was not "file already exists."                    wscript.echo "Failed copy to " & ip & " - error: " & ret               else                    set oprocess = osvcRemote.Get("win32_process")                         ' Start the installation without user interaction, and force a restart after completion.                    ret = oprocess.create("c:\\Patchinst.exe -q -f")                    if (ret <> 0) then                         wscript.echo "Failed to start process on " & ip & ": " & ret                    else                         ' Get a reference to the file that was copied.                         set odestFile = osvcLocal.get("cim_datafile=""z:\\Patchinst.exe""")                         ' Wait for the installation to complete.                         for waitTime = 0 to 120     ' Lay and wait--up to two minutes for the installation to complete.                              wscript.Sleep 1000     ' Sleep one second.                              ' Delete temporary file as soon as possible after it is freed.                              if (odestFile.Delete() = 0) then                                   exit for                              end if                         next ' Otherwise, loop again and keep waiting...                         wscript.echo "Installation successful."                    end if     'Create process succeeded.               end if     'Copy succeeded.               onet.removenetworkdrive "z:", true          end if      ' The script knows which patch to install.     end if ' Do the next IP address, then the next IP address... wendoipFile.close()'Clean up, remove drive mapping (check this time, because it may not have been mapped).if ofs.folderexists("z:\") then     onet.removenetworkdrive "z:", trueend ifwscript.echo vbCrLf & "Patching complete. Exiting."function detectOSPatch(osvcRemote)     set oOSInfo = osvcRemote.InstancesOf("Win32_OperatingSystem")     'Only one instance is ever returned (the currently active OS), even though the following is a foreach.     for each objOperatingSystem in oOSInfo          if (objOperatingSystem.OSType <> 18) then               ' Make sure that this computer is Windows NT-based.               wscript.echo ip & " is not a Windows XP, Windows 2000, or Windows 2003 Server computer."          else               if (objOperatingSystem.Version = "5.0.2195") then                    ' Windows 2000 SP2, SP3, SP4.                    if (objOperatingSystem.ServicePackMajorVersion = 2) or (objOperatingSystem.ServicePackMajorVersion = 3) or _			(objOperatingSystem.ServicePackMajorVersion = 4) then                         systemType = exeW2k                    end if               elseif (objOperatingSystem.Version = "5.1.2600") then                    ' Windows XP RTM, SP1.                    if (objOperatingSystem.ServicePackMajorVersion = 0) or (objOperatingSystem.ServicePackMajorVersion = 1) then                         systemType = exeWinXP                    end if               elseif (objOperatingSystem.Version = "5.2.3790") then                    ' Windows Server 2003 RTM                    if (objOperatingSystem.ServicePackMajorVersion = 0) then                         systemType = exeW2k3                    end if               end if               if (systemType = "") then                     'This was a Windows NT-based computer, but not with a valid service pack.                    wscript.echo "Could not patch " & ip & " - unhandled OS version: " & objOperatingSystem.Caption & " SP" & _				objOperatingSystem.ServicePackMajorVersion & "("& objOperatingSystem.Version & ")"               end if          end if     next     detectOSPatch = systemTypeend function
Propriedades

ID do Artigo: 827227 - Última Revisão: 08/08/2005 15:58:20 - Revisão: 5.4

  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • kbinfo KB827227
Esta informação foi útil?