Translated by Adolfo Soto --- Advisory RFP9907 ----------------------------- rfp.labs ----------- Tu, tus servidores, RDS y miles de script kiddies ..como mantener seguro tu web.. (Defenderse contra los ataques RDS) ------------------------------ rain forest puppy / rfp@wiretrip.net --- Tabla de contenidos: - 1. Problema - 2. Soluciones - 3. Situaciones - 4. Detectar msadc.pl - 5. Conclusiones - 6. Recursos ----------------------------------------------------------------------- �No tienes tiempo para leer esto?. En ese caso lo �nico que tienes que hacer es borrar el siguiente fichero: ?:\Archivos de Programa\Archivos comunes\System\Msadc\msadcs.dll Una manera r�pida de desactivar RDS. (Si necesitas usar RDS continua leyendo) ----------------------------------------------------------------------- ----[ 1. Problema .gov, .mil e incluso microsoft.com han sido v�ctima �ltimamente de asaltantes. Y resulta que todo se debe a RDS. De acuerdo que la instalaci�n por defecto de IIS 4.0 es bastante vulnerable pero es que Microsoft ha publicado no uno ni dos sino *tres* parches diferentes adem�s de distribuir en diferentes ocasiones un bolet�n de seguridad. Y a�n sigue siendo un problema. Parece que necesitamos educaci�n. Hay mucha especulaci�n rondando acerca de que hacer y como protegerte. Ya que yo he escrito el exploit para RDS y he investigado algo, me gustar�a compartir mis descubrimientos para zanjar definitivamente el asunto. El problema reside en que Jet 3.5 permite llamadas a la funci�n VBA shell() que posibilita el ejecutar comandos del sistema (esto se document� en RFP9901: NT ODBC remote vulnerabilities, disponible en: http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 ). IIS 4.0 instala por defecto MDAC 1.5 que incluye RDS y RDS permite el acceso remoto a componentes ODBC usando la web a trav�s de una .DLL que se encuentra en /msadc/msadcs.dll (esto se document� en RFP9902: RDS/IIS vulnerability and exploit, disponible en: http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 ). Asi que tenemos dos partes en este problema. Hay un tercer elemento en juego si se instalan algunas p�ginas de ejemplo que vienen con algunos SDK de RDS, estas incluyen un componente llamado VbBusObj que posibilita el saltarse alguna de las medidas de seguridad recomendadas por Microsoft (este problema tambien se document� en RFP9902) Vamos a ocuparnos de todos estos elementos. ----[ 2. Soluciones Hay tantas soluciones diferentes y tantos posibles escenarios de uso que es dif�cil abarcarlos todos. Intentare explicar todos los que pueda, adem�s en mi p�gina he puesto copias de todos los archivos importantes (para i386) de manera que no tengas que perder tiempo busc�ndolos en microsoft.com -Soluci�n #1: mueve cmd.exe (Recomendado por ULG) http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html Agradezco la ayuda prestada a ULG sin embargo su soluci�n presenta un problema. Aunque el exploit msadc.pl usa cmd.exe (o command.com) resulta que: EL EXPLOIT NO REQUIERE CMD.EXE PARA FUNCIONAR Lo usa por compatibilidad y si no me crees pruebalo tu mismo. Edita msadc.pl para que no env�e la cadena 'cmd /c' y sustituyelo por cualquier otro ejecutable (por ejemplo, 'rdisk'). Por supuesto si no utilizas cmd.exe no podr�s usar comandos como 'copy' y caracter�sticas como la redirecci�n de ficheros ( ' > file.out'), estas s�lo se hallan disponibles con cmd.exe. Mover cmd.exe/command.com es un t�pico ejemplo de seguridad a trav�s de oscuridad. Si un hacker encuentra la nueva localizaci�n de cmd.exe a�n podra utilizarlo y si cambias los permisos para deshabilitar el acceso de System puedes causar problemas a otras aplicaciones. Teniendo en cuenta que hay otras soluciones no usar�a esta m�s que con extrema precauci�n. -Soluci�n #2: actualizar MDAC 1.5 a 2.0 MDAC 2.0 incorpora Jet 3.52 en vez de Jet 3.5. Sigue siendo vulnerable al ataque VBA shell() (que es el ataque en que se basa el exploit) y no deshabilita RDS por defecto. De hecho creo que reinstala RDS si no est� presente. Algunos puntos interesantes: * El motor Jet por defecto es la versi�n 3.52 (vulnerable) * permite usar manejadores personalizados (para evitar el uso an�nimo de RDS) * crea proveedores Microsoft.Jet.OLEDB.3.51* Esta soluci�n tal y como se presenta no es adecuada, al menos necesitas activar el soporte para manejadores personalizados . Busca la siguiente clave en el registro. HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\ Nombre: HandlerRequired Valor: DWORD:1 (seguro) o 0 (inseguro) Te recomiendo que lo cambies a 1, el resultado es id�ntico al que se consigue usando el parche de Microsoft 'handsafe.exe/.reg'. Este fichero lo puedes conseguir en mi p�gina: http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe Al ejecutarlo, este archivo produce otro llamado handsafe.rem. Renombralo a handsafe.reg y haz doble-click para importarlo en el Registro (la clave mencionada anteriormente pasar� a tener el valor 1) Ya estas protegido contra ataques remotos usando RDS pero sigues siendo vulnerable a otras formas de ataque ODBC como troyanos de Excel, Word y Access, etc. No podemos considerar suficiente esta protecci�n. Mas tarde volver� sobre el importante hecho de que se haya creado proveedores Microsoft.Jet.OLEDB.3.51* -Soluci�n #3: actualizar MDAC 1.5 a 2.1 MDAC 2.1 cambia de Jet 3.5 a Jet 4.0, un motor Jet no explotable. No obstante existen incompatibilidades entre estas dos versiones que han llevado a mucha gente a tomar la decisi�n de no actualizar algo tambi�n explicable por la inestabilidad mostrada en las primeras revisiones de la versi�n 2.1. Algunos puntos interesantes: * El motor Jet por defecto es la versi�n 4.0 (no vulnerable) * permite usar manejadores personalizados (para evitar el uso an�nimo de RDS) Vale la pena destacar que las medidas para evitar el acceso an�nimo siguen sin instalarse por defecto con lo que tendremos que activarlas siguiendo alguno de los m�todos descritos en la soluci�n anterior, cambiar la clave del registro (HandlerRequired) a un valor de 1 mediante regedit o recurrir al parche handsafe.exe/.reg -Soluci�n #4: actualizar MDAC 1.5 a 2.0 a 2.1 Si has sido un buen administrador habr�s ido instalando las nuevas versiones seg�n haya ido estando disponibles, lo que significa que te enfrentas no solo al mismo problema que tienen los que actualizaron directamente a 2.1 -- el activar la clave del registro 'HandlerRequired' -- sino que adem�s la instalaci�n de 2.0 te dejo proveedores Microsoft.Jet.OLEDB.3.51. �Ahora las aplicaciones (incluyendo RDS) tienen una entrada para llamar al antiguo y vulnerable motor Jet 3.51!. Eliminaremos estas entradas/proveedores. El m�todo mas simple es borrar las siguientes claves del registro: HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51 HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors Pero a�n nos quedan los problemas de compatibilidad que presenta el uso de Jet 4.0 as� que no es una soluci�n perfecta. -Soluci�n #5: instalar JetCopkg.exe (MS99-030) JetCopkg.exe es una versi�n de Jet 3.5 que incorpora medidas de seguridad denominadas modo de "caja de arena". El control sobre esta caracter�stica se efectua en la siguiente clave del registro: HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode Que puede tomar los valores siguientes: 0 deshabilitado 1 habilitado para Access, deshabilitado para el resto 2 deshabilitado para Access, habilitado para el resto (por defecto) 3 habilitado para todo (Nota 1: 'xxx para Access' significa para su uso con el programa Microsoft Access) (Nota 2: Una explicaci�n m�s detallada se encuentra en: http://support.microsoft.com/support/kb/articles/q239/1/04.asp) (Nota 3: �el permiso establecido por defecto es inseguro!. Debes cambiar 'Usuarios Autenticados' a 'S�lo Lectura' en esta clave. Un email muy interesante de Eric Shultze describe numerosos ejemplos de como el uso de esta clave puede causar problemas, leelo en mi web: http://www.wiretrip.net/rfp/p/doc.asp?id=11&iface=2 ) Un valor de 2 o 3 te har� inmune a los exploits. IMHO ESTA ES LA SOLUCION CORRECTA Y RECOMENDADA Como el motor continua siendo Jet 3.5 no debes tener problemas de compatibilidad pero recuerda que esto no anula el uso de RDS as� que aunque no pueda ser explotado, un atacante todav�a puede acceder de manera an�nima a tus datos lo que sigue sin ser satisfactorio. Tenemos que hacer algo con RDS, personalmente te sugiero que o bien lo deshabilites (lee abajo) o te actualices a MDAC 2.0 (actualiza primero a MDAC 2.0 y despu�s instala JetCopkg). Al actualizarte a MDAC 2.0 tendr�s la posibilidad de prohibir el acceso an�nimo. -Soluci�n #6: borrar/deshabilitar soporte RDS La mejor combinaci�n junto con el uso de JetCopkg (lee arriba), si no puedes instalar programas que modifiquen el sistema (problemas Y2K, etc) al menos evita el posible exploit remoto deshabilitando RDS. La soluci�n de urgencia consiste en borrar: ?:\Archivos de Programa\Archivos comunes\System\Msadc\msadcs.dll Esta .DLL es la que facilita el interface RDS, es mucho mejor que te tomes algo m�s de tiempo y procedas a una desintalaci�n ordenada, incluyendo: * Eliminar el directorio virtual /msadc de IIS, abre el Microsoft Management Console/Internet Service Manager y sigue estas instrucciones. * Escoge 'Internet Information Server' * Selecciona el sistema * Selecciona 'Default Web Site' * Selecciona 'msadc' * Pulsa la tecla 'Del' o haz click sobre el icono Borrar * �Est�s seguro?. Si. * Elimina la siguiente entrada del registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch (Nota: la linea esta dividida para mayor claridad) * Borra todos los ficheros y subdirectorios en ?:\Archivos de Programa\Archivos comunes\System\Msadc ----[ 3. Situaciones -Situaci�n #1: �Necesito usar RDS! Vaya, siento oir eso. Pero no desesperes, se puede hacer. Lo primero es actualizarte a MDAC 2.0, si tienes que mantener la compatibilidad usa la combinaci�n MDAC 2.0 & JetCopkg, si no actualiza directamente a MDAC 2.1. Asegurate de que la clave 'HandlerRequired' (explicado arriba) est� activada. Y borra los ejemplos de RDS si se hallan instalados. Microsoft tambi�n recomienda negar acceso an�nimo al directorio /msadc para el site por defecto en MMC. Finalmente implementa un manejador personalizado, una explicaci�n de como hacerlo se halla en: http://www.microsoft.com/Data/ado/rds/custhand.htm -Situaci�n #2: Estoy asegurado excepto por esos scripts de ejemplo... MUY IMPORTANTE Usar un manejador personalizado es la �nica manera de evitar el acceso an�nimo a RDS sin deshabilitar RDS por completo, pero si se instalan los ejemplos RDS (que se encuentran en: ?:\Archivos de Programa\Archivos comunes\System\Msadc\Samples ) se puede evitar la seguridad proporcionada por esta protecci�n usando un objeto incluido en los ficheros de ejemplo (VbBusObj). No hay ninguna raz�n para que estos ficheros existan en un servidor de trabajo y por tanto los desinstalaremos en un proceso de dos pasos: * Borra el siguiente subdirectorio (TODOS sus contenidos): ?:\Archivos de Programa\Archivos comunes\System\Msadc\Samples * Elimina esta clave del registro: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC \Parameters\ADCLaunch\VbBusObj.VbBusObjCls As� eliminar�s el objeto VbBusObj y cerrar�s la puerta a la posibilidad de que un atacante sortee el manejador que has definido. ----[ 4. Detectar msadc.pl No es muy dif�cil detectar la actividad de msadc.pl en sus versiones 1 y 2 al menos en su forma actual ya que puede modificarse de manera que su detecci�n se haga m�s dif�cil, me centrar� en el exploit tal y como lo program�. El script hace una petici�n GET de /msadc/msadcs.dll en el servidor web objetivo, si existe continua su ejecuci�n, en caso contrario muestra un mensaje de error y finaliza. Esta petici�n inicial aparecer� en los logs del servidor, conviene rese�ar que un atacante experto puede cambiar el m�todo GET a una petici�n HEAD o POST y usar alg�n tipo de t�cnica de ocultaci�n en la URL solicitada (codificaci�n hexadecimal). Seguir� apareciendo en los logs. El quid de la cuesti�n es detectar una llamada a msadcs.dll sin par�metros (ahora lo explico) esto nos avisa de que alguien est� buscando (pero no usando), ahora bien los usuarios normales no 'buscan' sino que usan RDS directamente o sea que una llamada a msadcs.dll sin par�metros es sospechosa. Si msadcs.dll existe (como se determina en la respuesta) el programa pregunta al usuario que comando ejecutar. Por defecto msadc.pl antepone 'cmd /c' o 'command /c' por compatibilidad lo que hace al script dependiente de la existencia de cmd.exe o command.com. Un atacante experto puede modificar el script para que no requiera ninguno de los dos. En este punto el script comienza a hacer consultas RDS, realiza una serie de peticiones POST a las siguientes URLs: Consulta Normal: /msadc/msadcs.dll/ActiveDataFactory.Query VbBusObj para evitar manejadores personalizados: /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetRecordset Consulta VbBusObj para obtener nombre NetBios: /msadc/msadcs.dll/VbBusObj.VbBusObjCls.GetMachineName La consulta ActiveDataFactory.Query es normal si est�s usando RDS pero nadie tienen porque usar VbBusObj, las dos �ltimas URLs deben alertarte de que se produce un ataque. No conf�es en hacer grep en tus logs buscando VbBusObj, un atacante h�bil habr� disimulado la URL usando codificaci�n hexadecimal de manera que presente un aspecto como: /%6Dsadc/%6Dsadcs.dll/V%62BusO%62j.V%62BusO%62jCls.GetRecordset (es s�lo un ejemplo) Como puedes ver la cadena ha cambiado de manera que el simple uso de 'grep' no detectar� el ataque en los logs. Me gustar�a llamar la atenci�n sobre otros dos detalles: * el script msadc.pl envia el valor 'ACTIVEDATA' en el campo User-Agent. Se puede usar como indicador teniendo presente que el tr�fico normal de RDS tambi�n usa este valor. * el script msadc.pl usa como separador MIME '!ADM!ROX!YOUR!WORLD!', no se loguea en ninguna parte pero algunos sistemas de detecci�n de intrusos (como Dragon:www.securitywizards.com) lo tienen en cuenta a la hora de detectar ataques. El script utiliza los ficheros .MDB encontrados en el servidor, si encuentra al menos uno crea una tabla llamada 'AZZ' dentro del .MDB. No la borra con lo cual puedes buscar tus ficheros .MDB por tablas llamadas 'AZZ' aunque la versi�n 2 de msadc.pl permite otras consultas que pueden evitar crear la tabla 'AZZ' e incluso no usar .MDB locales (soporte UNC) ----[ 5. Conclusi�n Otra noche sin dormir para poder escribir este aviso, debo acabar con esto. Las cosas que hago por vosotros. :-) Es f�cil protegerse. Basta con borrar un fichero para obtener un buen grado de seguridad. Eso servir� para que no seas el proximo web asaltado que figure en Attrition. Adelante y parchea, .rain.forest.puppy. pd. soy humano y aunque he tratado de hacerlo lo mejor posible este documento puede contener errores. Es tarde, estoy cansado, quiero acabar esto y escribo mucho de memoria. Me disculpo por anticipado de cualquier error que pueda cometer. ----[ 6. Recursos - Office 97/Jet 3.5 actualizaci�n (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 web http://www.microsoft.com/data/ - MDAC 2.1.2.4202.3 (GA) (aka MDAC 2.1 sp2) actualizaci�n (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) (aka MDAC 2.1 sp1) hotfix http://www.microsoft.com/data/download/jetODBC.exe - Notas de lanzamiento de MDAC 2.1 http://www.microsoft.com/data/MDAC21info/MDAC21sp2manifest.htm - FAQ de instalaci�n de MDAC 2.1 http://www.microsoft.com/data/MDAC21info/MDACinstQ.htm - Implicaciones de seguridad de RDS 1.5, IIS 3.0 o 4.0 y ODBC http://support.microsoft.com/support/kb/articles/q184/3/75.asp - Acceso ODBC no autorizado con IIS y RDS (MS99-004) http://www.microsoft.com/security/bulletins/ms98-004.asp - Redifusi�n de MS99-004 (MS99-025) http://www.microsoft.com/security/bulletins/ms99-025.asp - MS99-025 FAQ (La mejor explicaci�n del problema que da Microsoft) http://www.microsoft.com/security/bulletins/MS99-025faq.asp - MS99-30: Parche para vulnerabilidades ODBC en Office http://www.microsoft.com/security/bulletins/ms99-030.asp - Expresiones JET pueden ejecutar funciones VBA inseguras http://support.microsoft.com/support/kb/articles/q239/1/04.asp - Implementar manejadores personalizados en RDS 2.0 http://www.microsoft.com/Data/ado/rds/custhand.htm - Parche Handsafe para el registro (activa manejadores) http://www.wiretrip.net/rfp/bins/msadc/handsafe.exe http://www.microsoft.com/security/bulletins/handsafe.exe - RFP9901: Compromiso remoto de NT a trav�s de ODBC http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2 - RFP9902: Vulnerabilidad y exploit de RDS/IIS 4.0 http://www.wiretrip.net/rfp/p/doc.asp?id=1&iface=2 - RDS exploit (msadc.pl v1 y v2) http://www.wiretrip.net/rfp/p/doc.asp?id=16&iface=2 - Soluci�n recomendada por ULG en OSALL http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html - CERT http://www.cert.org/current/current_activity.html#0 - Webs asaltadas, mirror de Attrition (�parchea o aparecer�s aqu�!) http://www.attrition.org/mirror/attrition/ --- rain forest puppy / rfp@wiretrip.net ----------- ADM / wiretrip --- Asegura tus sistemas antes de que flipper y fuqnut lleguen... --- Advisory RFP9907 ----------------------------- rfp.labs -----------