Translated by phrog <nimrod@zaz.com.br> of PowerOff (POFF) --- Advisory RFP9907 ----------------------------- rfp.labs ----------- Voce, seus servidores, RDS, e milhares de script kiddies ..e como deixar seu site intacto.. (Defendendo Ataques RDS) ------------------------------ rain forest puppy / rfp@wiretrip.net --- Conteudo: - 1. Problema - 2. Solucoes - 3. Situacoes - 4. Detectando msadc.pl - 5. Conclusao - 6. Resources ----------------------------------------------------------------------- Nao tem tempo para ler isso? Entao tudo que voce tem a fazer eh deletar o seguinte arquivo: ?:\Program Files\Common Files\System\Msadc\msadcs.dll (?:\Arquivos de Programas\Arquivos Comuns\System\Msadc\msadcs.dll) Sujo e rapido desligamento do RDS. (Se voce precisa de RDS, eh melhor ler) ----------------------------------------------------------------------- ----[ 1. Problema .gov.br, .mil.br, e ateh microsoft.com cairam ultimamente nas maos dos "hackers de web". Por fora, foi tudo por causa do RDS. Agora, claro, o IIS 4.0 esta muito mais vulneravel, mas a Microsoft nao lancou uma nota, ou duas, e sim *tres* patches para o IIS e re-editou-a varias vezes o mesmo advisory. E isso ainda eh um problema. Entao, nos precisamos aprender. Hah muita especulacao por ai dizendo o que e como consertar por voce mesmo. Desde de que eu escrevi o exploit para o RDS, e eu pesquisei muito sobre ele, eu queria compartilhar meus achados, um reforco para colocar esse documento para todos. O problema estah basicamenta na Jet 3.5, que permite chamar a funcao shell() da VBA, da qual permite voce rodar comandos de shell(isso foi documentado no RFP9901: vulnerabilidades remotas NT ODBC, disponivel em: http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 ). Agora, IIS 4.0, por padrao, instala o MDAC 1.5. Isso inclui o RDS, que permite acesso remoto aos componentes ODBC pela web, apartir de uma singular .DLL localizada em /msadc/msadcs.dll (isto estah documentado no RFP9902: RDS/ISS vulnerabilidade e exploit, disponivel em: http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 ). Entao voce ve que eh um problema duplo. Hah tambem um terceiro elemento, onde as paginas de exemplos instaladas por varios pacotes RDS SDK incluem um componente de exemplo chamado VbBusObj, que permite voce pular alguns reparos recomendados pela Microsoft (isto tambem estah documentado no RFP9902). Nos devemos tocar em todos esses elementos. ----[ 2. Solucoes O problema eh que hah muitas solucoes, e hah muitas diferentes combinacoes de uso. Eu vou tentar detalhar o quanto for possivel. Tambem, para simplificar, eu fiz um mirror de todos os binarios importantes(somente i386) no meu site(www.wiretrip.net/rfp), somente no caso que voce nao consiga acessar microsoft.com, etc. -Solucao #1: mova o cmd.exe (reparo recomendado pela ULG) http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html Eu elogiei a ULG por ajudar, porem essa solucao tem um problema. Eh verdade que o mdac.pl foi feito para usar o cmd.exe (ou command.com). Porem, eu queria que eles soubessem que O CMD.EXE NAO EH NECESSARIO PARA O FUNCIONAMENTO DO EXPLOIT Eu usei-o para moldar uma compatibilidade. Se voce nao acredita em mim, tente voce mesmo. Edite o mdac.pl para nao enviar a string 'cmd /c'. Voce ainda pode fornecer um nome de um executavel qualquer (por exemplo, 'rdisk'). Somente lembre-se, se voce nao usar o cmd.exe, entao voce nao podera usar outros comandos do tipo 'copy', redirecionamento de arquivos ( ' > arquivo.saida'). Essas sao as unicas vantagens de usar o cmd.exe. Tambem note que mover o cmd.exe/command.com eh meramente um obscuro pensamento de seguranca. Se o hacker acha onde voce o colocou, eles ainda podem usa-lo. E ajustando suas permissoes para desabilitar o acesso System pode parar outras aplicacoes. Eu soh usaria esta solucao com cuidados extremos (considerando que hah outros patches, eu usaria os outros). -Solucao #2: atualizar o MDAC 1.5 para 2.0 O MDAC 2.0 move do Jet 3.5 para Jet 3.52. Isto ainda eh vulneravel ao ataque da funcao shell() da VBA (do qual eh essencial para o exploit), e ele nao desabilita o RDS por padrao. De fato, eu acretido que ele reinstalara o RDS se voce remove-lo. Algumas coisas notaveis: * a engine Jet padrao vira 3.52 (ainda eh vulneravel) * permite a criacao do suporte a handler (para parar uso anonimo do RDS) * cria os provedores dos Microsoft.Jet.OLEDB.3.51* Agora, essa solucao, na sua forma padrao, nao eh boa. Voce primeiro precisa habilitar o suporte a "custom handler". Isso eh simplesmente uma chave do registro achada em: HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\ Nome da Chave: HandlerRequired Valor: DWORD:1 (seguro) ou 0 (inseguro) Eh recomendado que voce mude para 1. Isso tambem eh o que eh feito pelo 'handsafe.exe/.reg', reparo provido pela Microsoft. Voce pode pegar este arquivo no meu site, em: http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe Quando rodado, o arquivo produz um outro arquivo chamado handsafe.rem. Renomeie este para handsafe.reg, e entao clique novamente para importa-lo para o registro (que vai mudar a chave mencionada para o valor 1). Agora, estando protegido do ataque remoto via RDS, voce ainda eh vulneravel a todos os outros tipos de ataque baseados em ODBC, que inclui trojans(cavalos de troia) nos arquivos do Excel, Word e Access, e outros aplicativos, etc. Isso deve ser considerando insuficiente. Criar os provedores dos Microsoft.Jet.OLEDB.3.51* eh importante, e eu vou voltar a falar sobre isso. -Solucao #3: atualize o MDAC 1.5 para 2.1 (qualquer nivel) O MDAC 2.1 move da engine Jet 3.5 para a 4.0, da qual nao eh exploitavel. Porem, hah issues compativeis, por causa das diferencas entre a versao 3.5 e 4.0. Muitas pessoas estao evitando atualiza-la por causa dessas incompatibilidades. Sem mencionar alguma issues estaveis com a ultima linha 2.1 tambem. Alguns notaveis: * engine Jet 4.0 padrao (nao vulneravel) * permite o suporte "custom handler" (para parar uso anonimo do RDS) Porem, os "custom handlers" nao estao ligados por padrao. Voce precisa modificar a chave do registro mencionada anteriormente (HandlerRequired) para o valor 1, tambem usando o regedit ou o fix handsafe.exe/.reg. -Solucao #4: atualize o MDAC 1.5 para 2.0 para 2.1 Agora, se voce fosse um bom administrado, voce deveria ter guardado atualizada nas instalacoes, atualizando enquanto voce saiu. Se voce o fez, voce se sucumbiu a rota total de upgrade. O mesmo problema existe fazendo uma atualizacao direta para o 2.1 (como foi mencionado acima) -- voce ainda precisa habilitar a chave 'HandlerRequired' no registro. Tambem lembrando que a 2.1 usou o Jet 4.0 como engine padrao. Porem, desde que voce passou pela instalacao da 2.0, voce tem os provedores Microsoft.Jet.OLEDB3.51. (exploitavel) a engine Jet 3.51! Voce deve remover esses velhos ganchos/provedores. Um metodo eh remover as seguintes entradas no registr: HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51 HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors Porem, voce ainda esta de cara com a issues de compatibilidade de uso da engine 4.0. Entao isso ainda nao eh uma grande solucao. -Soluca #5: instalar o JetCopkg.exe (MS99-030) JetCopkg.exe eh uma engine Jet 3.5 modificada que tem suas qualidades de seguranca ligadas para previnir um exploit, chamado de modo 'sandbox'. Essa qualidade de seguranca eh controlada pela seguinte chave do registro: HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode Com os seguintes valores: 0 desabilitado 1 habilitado para o Access, desabilitado para qualquer outra coisa 2 desabilitado para o Access, habilitado para qualquer outra coisa (padrao) 3 habilitado para tudo (Nota 1: 'xxx for Access' significa para uso com o Access) (Nota 2: isso eh tudo explicado em: http://support.microsoft.com/support/kb/articles/q239/1/04.asp) (Nota 3: as permissoes padroes nessa chave sao inseguras! Voce deve mudar 'Authenticated Users' para 'Read Only' nessa chave. Para muitos exemplos de como a fraqueza dessa chave pode causar problemas, veja um otimo email por Eric Shultze, postado no meu site em: http://www.wiretrip.net/rfp/p/doc.asp?id=11&iface=2 ) O valor 2 ou 3 vao manter os exploits fora. Entao, IMHO ESSA EH A CORRETA, A SOLUCAO RECOMENDADA Desde essa ainda eh a mesma engine Jet 3.2, voce nao deve ter problemas de compatibilidade. Porem, isso nao fecha o RDS. Enquanto voce nao vai poder ser exploitado, isso significa que um "hacker" ainda pode conseguir acesso anonimo remoto no seus datasources(originadores de dados). O que siginifica que ele pode mexer com seus dados, o que ainda nao eh bom. Entao voce precisa fazer algo sobre o RDS. Eu sugiro desabilitar o RDS (veja a baixo), ou atualizar para MDAC 2.0 (porem, primeiro atualize para o MDAC 2.0, depois o JetCopkg). Atualizando para o MDACX 2.0, voce vai ter o "handler control", onde voce poed negar acesso anonimo. -Solucao #6: remover/desabilitar o suporte a RDS Esse eh seu melhor movimento, quando usado em combinacao com o JetCopkg (mencionado acima). Se voce nao poder instalar os pacotes modificadores do sistema (por causa do bug do ano 2000, etc), voce pelo menos pode cortar um possivel potencial de exploit remoto somente desabilitando o RDS. Voce pode faze-lo de uma maneira cruel e suja deletando: ?:\Program Files\Common Files\System\Msadc\msadcs.dll (?:\Arquivos de Programas\Arquivos Comuns\System\Msadc\msadcs.dll) Essa eh a .DLL que prove a interface RDS. Porem, eh mais recomendavel que voce esperar um pouco e limpa-lo corretamente. Isso inclui: * Remover o diretorio virtual mapeado /msadc do IIS. Fazendo isso, abra o Microsoft Management Console/Internet Service Manager, e: * Va em 'Internet Information Server' * Selecione o sistema correto * Selecione 'Default Web Site' * Selecione 'msadc' * Pressione a tecla 'Del', ou cliquem no icone de deletar * Voce tem certeza? Sim. * Remova a seguinte chave do registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch (Nota: essa linha foi pulada para melhor visualizacao) * Delete todos os arquivos e subdiretorios em: ?:\Program Files\Common Files\System\Msadc (?:\Arquivos de Programa\Arquivos Comuns\System\Msadc) ----[ 3. Situacoes -Situacao #1: Eu preciso do suporte a RDS! Ugh, desculpe por ouvir isso. Mas tudo bem, isso eh possivel. Voce precisa pelomenos atualizar para o MDAC 2.0. Se voce ainda tiver issues de compatibilidade contraria(backwards-compatibility), entao o MDAC 2.0 com o JetCopkg vai fazer o servico, ou entao, pule para o MDAC 2.1. Tenha certeza que voce habilitou a chave 'HandlerRequired' (explicado acima). Tambem tenha certeza que voce removeu os exemplos do RDS, se disponiveis (veja abaixo). A Microsoft tambem recomenda desabilitar o Acesso Anonimo(Anonymous Access) para o diretorio /msadc no site padrao, usando o MMC. Finalmente, voce precisa implementar o "custom handler". Informacoes sobre como faze-lo encontra-se em: http://www.microsoft.com/Data/ado/rds/custhand.htm -Situacao #2: Eu jah fiz tudo, exceto aqueles scripts de exemplo... MUITO IMPORTANTE Usar custom handlers eh o unico cheio de parar o acesso anonimo ao RDS sem desabilitar totalmente o RDS. Porem, se os exemplos do RDS estao instalados (achados em: ?:\Program Files\Common Files\System\Msadc\Samples (?:\Arquivos de Programa\Arquivos Comuns\System\Msadc\Samples) ) entao um objeto incluido com os arquivos de exemplo (VbBusObj) pode ser usado para pular os custom handlers! De fato, nao hah razao para que isso tudo esteja em um servidor de producao(production server), e deve ser removido. Eh um processo de dois passos: * Deletar o seguinte diretorio (TUDO lah dentro): ?:\Progam Files\Comman Files\System\Msadc\Samples (?:\Arquivos de Programa\Arquivos Comuns\System\Msadc\Samples) * Remover a seguinte chave do registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch\VbBusObj.VbBusObjCls Isso vai remover o objeto VbBusObj, e previnir que pessoas pulem os seus custom handlers. ----[ 4. Detectando o msadc.pl A ativiadade de deteccao pelo msadc.pl versao 1 e 2 nao eh tao dificil. Porem, eu estou dizendo o exploit como o que existe agora -- hah modificacoes que podem fazer sua deteccao mais dificil. Eu soh vou focalizar no exploit como eu escrevi. Primeiro, o script ira fazer uma chamada GET para /msadc/msadcs.dll no servidor alvo. Caso ele exista, ele ira continuar; caso nao, ele ira mostrar uma mensagem de erro e sair. Essa chamada inicial para o GET deve ser gravada nos logs do seu servidor web, como usual. Note que os 'usuarios avancados podem mudar isso para uma chamada HEAD ou POST. e podem usar algumas tecnicas de obfuscacao de URL (do tipo hex-encoding). Mas isso ainda sera gravado. A chave eh anunciada como msadcs.dll sem parametros (explico daqui a pouco)... isso significa que alguem esta procurando, mas nao usando (ainda). Se hah cuidados com o RDS, ninguem deveria estar somente 'olhando;. Usuarios validos vao usa-los diretamente. Entao, uma chamada ao msadcs.dll sem nenhum parametro deve ser classificada como suspeita. Se o msadcs.dll existe (determinado por uma particular resposta), entao ele pergunta ao usuario qual comando executar. Por padrao, msadc.pl vai antepor 'cmd /c' ou 'command /c', para compatibilidade. Isso significa que ele eh dependente do cmd.exe ou command.com. Porem, de novo, 'usuarios anvancados' podem modificar o script para nao requere-lo. Depois o script comeca a fazer perguntas(queries) ao RDS. Ele o faz usando chamadas POST para uma das URLs: Pergunta(query) normal: /msadc/msadcs.dll/ActiveDataFactory.Query VbBusObj para pular os "custom handlers": /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetRecordset Pergunta(query) ao VbBusObj pelo nome NetBIOS: /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetMachineName Agora, se voce estiver usando o RDS para propositos autenticos, entao a URL ActiveDataFactory.Query eh a normal. Porem, ninguem deve estar usando o VbBusObj, entao as outras duas URLs devem ser classificadas como as de um hacker(atacante). Lembre-se que procurando nos seus logs por VbBusObj nao vai ajuda-lo -- 'usuarios avancados' podem codificar com hex a URL para ler algo do tipo: /%6Dsadc/%6Dsadcs.dll/V%62BusO%62j.V%62BusO%62jCls.GetRecordset (isso eh somente um exemplo) Veja como a string estah diferente agora. Entao uma simples procura para achar os problemas pode nao ser suficiente. Neste ponto, eu quero tambem apontar outras duas coisas: * o msadc.pl original usa 'ACTIVEDATA' como o User-Agent. Isso pode servir como uma flag -- porem, o controle normal do RDS pode tambem usar este argumento como User-Agent, mais pode nao ser possivel distingui-lo do trafego normal. * o msadc.pl original usa '!ADM!ROX!YOUR!WOLRD' como string MIME separadora. Enquanto isso nao eh gravado em qualquer canto, alguns IDS(como Dragon; www.securitywizards.com) usam isso para detectar hacker(atacantes). Por padrao, o script tenta usar alguns .MDB locais achados no servidor. Se nenhum eh achado, ele cria uma tabela chamada 'AZZ' com o .MDB. Ele nao delete a tabelda depois, entao voce pode checar todos os seus arquivos .MDB por tabelas chamadas 'AZZ'. Porem, a versao 2 do msadc.pl permite um tipo diferente de pergunta(query) que pode nao criar a tabelza 'AZZ', e pode tambem nao usar os .MDB locais (suporte a UNC). ----[ 5. Conclusao Ok, outra noite que eu passo sem dormir para digitar um advisory. Eu realmente preciso para de fazer isso. Sao as coisas que eu faco para voces. ;) A melhor indicacao que voce foi atacado atraves do RDS eh que seu site leh algo a mais do que as linhas vistas na minha homepage, em: http://www.wiretrip.net/rfp/ Nao eh tao dificil. Primeiramente, delete um arquivo, e voce esta praticamente seguro. Entao voce pode descancar assegurado que voce nao vai ser o proximo site "hackeado" na Attrition. A frente e avante, .rain.forest.puppy. ----[ 6. Resources - Office 97/Jet 3.5 binario atualizado (i386) http://www.wiretrip.net/rfp/bins/msadc/jetcopkg.exe http://officeupdate.microsoft.com/isapi/gooffupd.asp ?TARGET=/downloaditems/JetCopkg.exe - Microsoft Universal Data Access http://www.microsoft.com/data/ - MDAC 2.1.2.4202.3 (GA) (tambem chamado MDAC 2.1 sp2) update (i386) http://www.wiretrip.net/rfp/bins/msadc/mdac_typ.exe http://www.microsoft.com/data/download_21242023.htm - MDAC 2.1.1.3711.11 (GA) (tambem chamado MDAC 2.1 sp1) hotfix http://www.microsoft.com/data/download/jetODBC.exe - MDAC 2.1 manifesto de lancamento http://www.microsoft.com/data/MDAC21info/MDAC21sp2manifest.htm - MDAC 2.1 FAQ da instalacao http://www.microsoft.com/data/MDAC21info/MDACinstQ.htm - Comprometimento de Seguranca do RDS 1.5, IIS 3.0 ou 4.0, e ODBC http://support.microsoft.com/support/kb/articles/q184/3/75.asp - Acesso nao autorizado a ODBC com IIS e RDS (MS99-004) http://www.microsoft.com/security/bulletins/ms98-004.asp - Re-edicao do MS99-004 (MS99-025) http://www.microsoft.com/security/bulletins/ms99-025.asp - MS99-025 FAQ (melhor explicacao do problema pela Microsoft) http://www.microsoft.com/security/bulletins/MS99-025faq.asp - MS99-30: Patch disponivel para vulnerabilidades Office ODBC http://www.microsoft.com/security/bulletins/ms99-030.asp - Jet Expression pode executar funcoes inseguras da VBA http://support.microsoft.com/support/kb/articles/q239/1/04.asp - Implementando custom Handlers no RDS 2.0 http://www.microsoft.com/Data/ado/rds/custhand.htm - Patch de registro 'Handsafe' (habilita handlers) http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe http://www.microsoft.com/security/bulletins/handsafe.exe - RFP9901: NT ODBC comprometimento remoto http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 - RFP9902: RDS/IIS 4.0 vulnerabilidade e exploit http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 - RDS exploit (msadc.pl v1 e v2) http://www.wiretrip.net/rfp/p/doc.asp?id=16&iface=2 - ULG recomendou um reparo na OSALL http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html - CERT blurb http://www.cert.org/current/current_activity.html#0 - Attrition mirror de sites "hackeados" http://www.attrition.org/mirror/attrition/ (Traduzido por source <source@leenox.com.br> Power OFF: http://www.leenox.com.br/~poweroff>) --- rain forest puppy / rfp@wiretrip.net ----------- ADM / wiretrip --- Ajeite seu sistema antes que flipper e fuqnut cheguem a voce... --- Advisory RFP9907 ----------------------------- rfp.labs -----------