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 -----------