「サイト改ざん」が世界規模で多発している。前回は、犯人の狙いとユーザーとしてとるべき対策を用語解説を加えてまとめたが、今回はサイト改ざんの攻撃がどのように行われたか、その攻撃手法と被害の実態を、最新事例を取り上げて解説する。
海外で大規模な正規サイト改ざんが発生したのは1年前で、国内では少し遅れていくつかの改ざん報告が上がって来たが、これほどまでに大規模な攻撃が国内サイトを襲い、著名な企業や団体などの公式サイトが次々に改ざんされていくことになろうとは、予想もしていなかった。ある日突然、サイトに埋め込まれた不正なコードが、怪しくなどないはずのサイトを不正サイトに変える。信頼していたはずのサイトが牙をむいて襲いかかり、正規サイトへの信頼が木っ端微塵に砕け散る。リンクの先どころか、リンク元の安全性が土台から大きく揺らいだのだ。 被害が続出したサイト改ざん、そのときいったい何が起きていたのかを確かめてみたい。ひょっとすると今もどこかで、同じ被害が繰り返されているかも知れない。
【INDEX】
ユーザーに牙をむいた攻撃シナリオ~2段階5つのステップ
■攻撃ステップ2-1:ユーザーが改ざんサイトを閲覧
■攻撃ステップ2-2:ユーザーのブラウザ上で攻撃コードが実行
■攻撃ステップ2-3:攻撃コードが脆弱性を突いて悪意あるプログラム実行
■対策ソフトと攻撃者の熱い攻防
●改ざんされた正規サイト~仕掛けられたさまざまな攻撃
■仕掛けられた攻撃:HTMLページの改ざん
■仕掛けられた攻撃:データベースのデータ改ざん
■仕掛けられた攻撃:テンプレートの改ざん
■仕掛けられた攻撃:経路情報の改ざん(ARPスプーフィング)
■仕掛けられた攻撃:広告サーバー改ざん
【本文】
攻撃者の最終目的は、ユーザーのパソコン上で悪意のあるプログラムを実行させることにあった。これまでならば、メールの添付ファイルを開かせたり、言葉巧みにWebサイトに誘導したりといった、ユーザーに直接攻撃を仕掛ける手口がもっぱら使われていたのだが、今回の一連の攻撃では、正規サイトにそのための罠を仕掛け、ユーザーの来訪を待つという手法が採られた。そんな一連の攻撃のシナリオは、おおむね次のようなものだ。
ステップ1-1:攻撃者がサイトに侵入
ステップ1-2:攻撃者が不正コードの埋め込み(改ざん)
ステップ2-1:ユーザーが改ざんサイトを閲覧
ステップ2-2:ユーザーのブラウザ上で攻撃コードが実行
ステップ2-3:攻撃コードが脆弱性を突いて悪意のあるプログラムが実行
攻撃のシナリオを大きく分けると、罠を仕掛けるための正規サイトへの攻撃「ステップ1」と、それを閲覧したユーザーへの攻撃「ステップ2」に大別される。「ステップ1」については後述するが、一連の正規サイト改ざんの多くは、SQLインジェクションという手法を使って、外部からデータベースを改ざん。攻撃サイトに仕掛けた攻撃コードを実行させるための、不正な「script」タグ(ほとんどがこれである)や「iframe」タグを埋め込んでいた。
「script」タグは、ブラウザ上でJavaScriptなどのプログラムを実行する機能を提供する。プログラムといっても、それ自体はシステムにダメージを与えるような悪質な操作はできないように作られているが、次のステップの脆弱性攻撃を仕掛けるために、このJavaScriptを使用(一部にはInternet ExplorerがサポートするVBScriptも使われていた)。一連の攻撃では、「script」タグを使って改ざんページから外部の攻撃サイトに置いたスクリプトファイルを読み込み実行するようになっていた。
「iframe」タグは、ブラウザ上にシームレスなフレームを作成し、そこに別のページ(HTML)を表示する機能を提供する。一連の攻撃では、閲覧者に気付かれないように見えないフレームを作成し、外部の攻撃サイトに置いたページを開かせるようになっており、その後にJavaScriptが実行される。
改ざん例1:不正な「script」タグが埋め込まれた例
・本市の公式ホームページ「もっと高松」の停止について(高松市)
・本市の公式ホームページ「もっと高松」の復旧について(高松市)
■攻撃ステップ2-2:ユーザーのブラウザ上で攻撃コードが実行
「script」「iframe」いずれの場合も、標準設定のブラウザで改ざんページを閲覧すると、ユーザーの見えないところで自動的に攻撃サイトにアクセスし、JavaScriptまたはWebページを読み込む。そこからさらに、複数のサイトにまたがるJavaScripやWebページを読み込みならが、そこに書かれた攻撃用のJavaScriptが次々と実行されていく。
■攻撃ステップ2-3:攻撃コードが脆弱性を突いて悪意あるプログラム実行
実行される攻撃コードは、OSやプラグインの脆弱性を突いて、悪意のあるプログラムを自動的にダウンロード・実行しようとするもの。こちらは機能が制限されたJavaScriptと違い、システム上であらゆることが可能な、正真正銘のプログラムだ。
悪用された脆弱性は、編集部で確認できただけでも、のべ20種類以上。その中には、国内では馴染みのない中国のソフトウェアも含まれていた。悪用された脆弱性のほとんどは、昨年までに修正済みの古いものばかりだったが、今年4月に修正されたばかりのRealPlayerやFlashの脆弱性などは、早々と攻撃に用いられた。
アップデート情報に注意を払い、常に脆弱性が修正された最新版を使用してさえいれば、今回の攻撃で悪意のあるプログラムが実行されるようなことにはならないのだが、ひとつでも漏れがあると攻撃が成立し、安心して訪れたはずのサイトでウイルス感染という、悲しい結末を迎えることになる。
3月以降の一連の攻撃では、ウイルス対策ソフトはかなり有効に機能していたようで、改ざんページから悪意のある実行プログラムまでのどこかで異常を検出し、最終的な悪意のあるプログラムの実行を阻止するケースが大半を占めた。だがその一方で、攻撃者のほうもウイルス対策ソフトのブロックを逃れるべく、攻撃サイトや攻撃コード、悪意のあるプログラムを次々と更新。ある時点では全く検出できずに、悪意のあるプログラムの実行までたどり着いてしまうケースもあった。
ウイルス対策ソフトの検出を逃れ、脆弱性が未修正のままだったシステムには、オンラインゲームのパスワードを盗み取るとみられるトロイの木馬がインストールされた。別のプログラムをダウンロード・実行するダウンローダーを実行する例では、その後に30種類以上もの亜種を送り込んでくるものもあった。
もちろんこれは、編集部で確認できたごく一部の事例であって、ほかにどんな脅威が待ち受けていたのかは分からない。改ざんされた正規サイトは攻撃サイトに誘導するだけのものであり、その先で起きた一部始終を知るのは、おそらく攻撃者たちだけだろう。
正規サイトに罠を仕掛けるために、攻撃者は何らかの方法でサイトに侵入し、Webページなどを改ざんする。侵入方法には、サイトのパスワードを破るという手口もあるが、一連の攻撃で多用されたのが、SQLインジェクションという手法だった。
ユーザーの入力した値を十分検証せずにデータベースに送ってしまうWebアプリケーションは、外部からデータベースそのものを操作する命令を送り込まれてしまう可能性がある。データベースが自由に操作できれば、格納されているデータの取得や改ざんはもちろんのこと、データベースシステムによっては、OSに抜けて任意のコマンド操作ができてしまうこともある。
3月以降のサイト改ざんでは、このSQLインジェクションによってデータベースに不正なコードを埋め込んだケースが大半を占めるが、そのほかにも、HTMLのページが直接改ざんされた例や、テンプレートの改ざん、経路情報の改ざん、広告サーバーの改ざんなど、さまざまな攻撃が仕掛けられている。
改ざん例2:難読化されたJavaScriptが埋め込まれた例(実行すると外部サイトに誘導する「iframe」タグになる)
・WEBサイト停止についてのお詫びとお知らせ(日本経営合理化協会AV局)
SQLインジェクション以前からある最もオーソドックスなのが、HTMLファイルを直接改ざんする手法だ。サイトに侵入され、これには、特定のページが改ざんされるというケースのほかに、HTMLファイルを改ざんするウイルスに感染し、その結果、サイトのページに不正なコードが挿入されていたという例もある。いずれの場合も、影響は、改ざんされたページのみに限定される。
先進的なWebサイトの多くが、データベースを使って動的にページを生成している。そのデータベースが改ざんされると、データベースを使用したページで改ざんデータを表示する際に、動的に不正なコードが埋め込まれる結果となる。これが今回圧倒的に多かった例だが、出力時に特殊文字の「<」や「>」を「<」「>」に置換しているシステムでは、埋め込んだスクリプトはスクリプトとしては動作せず、文字列として表示される。
この埋め込みに失敗したページが検索サイトで大量に検索されたため、数10万ページが改ざんといった報告が上がった。検索にヒットするページの中には、埋め込みに成功している危険なところもあるが、ヒットする部分そのものは攻撃の失敗部分であり、閲覧するだけで悪意のあるプログラムが実行されるような深刻な状態ではなかったりする。
ブログや掲示板などのCMS(Content Management System)を使ったシステムでは、コンテンツのデータ部分をデータベースに格納し、テンプレート(雛形)にデータを埋め込んで出力することが多い。テンプレートは、それ自身がデータベースに格納されている場合もあれば、外部ファイルとして用意されている場合もあるが、テンプレート側が改ざんされると、それを使用する全てのページに不正なコードが埋め込まれる結果となる。テンプレートを変えるだけで全てのページに反映される便利さが、今回ばかりは仇となってしまう。
■仕掛けられた攻撃:経路情報の改ざん(ARPスプーフィング)
多くのWebサーバーは、1台1台が個別にインターネット回線に接続しているわけではなく、個々の企業、あるいはサーバーを預かるデータセンターのLAN(Local Area Network)上に接続されている。ネットワーク間を中継する機器をルーター、あるいはゲートウェイといい、LAN内の機器がLAN外と通信する場合には、このゲートウェイに通信を中継してもらう。
6月初め、さくらインターネットのサーバー1台が不正に使われ、LAN内の他のサーバー対し、自分がゲートウェイだと名乗り出る事態(ARPスプーフィング)が生じた。騙された他のサーバーは、インターネット側のユーザーに送るはずのコンテンツを全て不正サーバーに送信。不正サーバーは、受け取ったコンテンツに「iframe」タグを埋め込んでからゲートウェイに送り出すというやり方で、不正なコードの埋め込みを行った。騙されてしまったLAN内の他のWebサーバーの全てのコンテンツが、通信途中で改ざんされ、ユーザーに届けられるという結果になってしまった。
大手サイトのバナー広告や個人向けのアフィリエイトなどでは、ページ内にちょっとしたタグを記述しておき、閲覧時に契約先の広告サーバーから、その部分に自動的に広告が挿入されるという手法がよく採られる。
デジロックが提供する無料のWebホスティングサービス「XREA」で今月9日、ユーザーのコンテンツに不正なコードが埋め込まれるという騒ぎが起きた。ページに広告を自動挿入する広告サーバー1台のパスワードが、管理を委託していた会社の外の者に渡り、不正なファイルがアップロードされていたのだという。広告サーバーは、5台のサーバーが分散処理していたので常に挿入されるというわけではないが、めぐり合わせ次第で、閲覧者には広告の代わりに攻撃サイトへの誘導コードが配信される可能性も。同社と委託先とのコミュニケーションが上手く取れていなかったため、そんな状態が17日夕方まで続いた。
・無料ユーザー向け広告配信サーバーの不具合について(XREA)
(執筆:現代フォーラム/鈴木)