サイト改ざんを調べてみた
2019-01-05 | やってみた
先日、サイトが改ざんされたと連絡がありました。
実際にどのような改ざんの内容だったのかという情報って意外に少ないので、できるだけ細かく調べてみました。
まず、その時の状況から。
- 12月○日、A社のトップページから何らかのリンクを踏むと、右の画面のような当選詐欺サイトにジャンプさせられるようになった。
- リンク先のページにリンクする間に、Coinhive(コインハイブ)を仕込まれる。
(コインハイブとは、閲覧者のPCの使って仮想通貨のマイニング作業を行わせるスクリプトで、賛否両論がありますが、現在ではマルウェア扱いとなっています。) - しばらくして(発覚から1~2時間後)、ChromeでGoogleの検索からA社のサイトを開こうとすると、真っ赤な画面で警告が表示されるようになる。(下の画像)
こうなると、せっかく検索エンジンの上位をキープしていたサイトもぶっ飛んでしまいます。
流れとしては上記のようなシンプルなもので、改ざんされたサイトではよくある「悪意のあるサイトへ強引にリンクされる」リダイレクトハックでした。
次に、改ざんされたサイトの状態
index.html(トップページ)を調べてみると、コードの最後に以下の一文が追記されていました。
どうやら、nimble.jsという良からぬスクリプトを埋め込まれたようです。
初動対応として、FTPより一旦バックアップを取り、上記スクリプトを削除。
これでひとまず不正なリンクに飛ばされることはなくなりました。
次に、上記の記述が埋め込まれたページを探します。
トップページをはじめ、4ページ分上記同様の改ざんがされていました。(サイト全体は20ページ前後)
改ざんされたファイルを全て元通りにして復旧は終了ですが、念の為不正スクリプトが何をやっていたのかを調べます。
不正スクリプトの中身
nimble.jsの中身から、実際にどのような動きになっているのかを芋づる式に追っかけて行きます。
まず、nimble.jsの中身を見ると、難読化されたJavaScriptのコードがありました。
(難読化とはコードを他人に可能な限り分かりにくくすること)
どうやら、別のjsファイル(friendly.js)を読み込むためのものです。
早速、friendly.jsの中身も見てみましょう。
ここで、コインハイブを食わせています。
次に、ad.js.phpと19575631.jsを読み込んでいますね。
この2つが何をやっているのかは調査中ですが、
「https://2436.net/visit.php?source=Hezuo&country=US&lp=7&partner_id=***&pid=***」(念の為、途中全角です)
というアドレスにジャンプします。
すると、
というアドレスにリダイレクトされ、以下の当選詐欺サイトが開きます。
先程のURLで「&lp=7」の部分が気になったので、「&lp=1」や「&lp=3」に変えてみたところ、
というように、ご丁寧にもフィッシングサイトが選べるパラメータになっていました。
nimble.jsから読み込まれるスクリプトを追っかけてみましたが、「削除」することでひとまず大丈夫かと思われます。
サーバーの中身
原因追求、再発防止のためにサーバーの中身(状態)を確認する必要があります。
文章でまとめにくいので箇条書きにしてみます。
- サーバーは一般的なレンタルサーバー
- サイトはリニューアル案件
- サイトはお問い合わせフォームを除き、全て静的ページ
- 前の制作会社が設置したバージョンの古いCMS(MT)が生き残っていた
(リニューアル時に削除してよいかどうか、当時クライアントも分からなかったので「しばらくそのままに」という流れであった。ちなみに前の制作会社は9年前に廃業しており連絡取れず) - 念の為、納品当時に上記CMSのディレクトリをリネームして、cgiのパーミッションは実行権限無しに変更済みにしてあった
- 改ざんされた元ファイルはご丁寧に「index.html.bak」というようにリネームされ、バックアップとして置かれていた
- FTPアカウントは前の制作会社が設定したままのもの
(改ざん発覚時にFTPパスワード変更済み)
次に時系列
あくまでファイルのタイムスタンプでの時系列です。
1.納品1ヶ月後にnimble.jsがアップロードされ、トップページ他3ページが改ざん。
(但し、発病せず)
2.その2ヶ月後にメールフォームと思われるphp(emks.php)がアップロードされる
(コードはfopo.com.arというツールにより難読化)
3.さらに翌月1ページ改ざん
4.その4ヶ月後に発病・改ざん発覚
よって、FTPログやアパッチログも残っていませんでした。
(ログは3ヶ月程度しか残らない)
発病のタイミングが実際の改ざんとずれているのは、サーバーにログが残らないようにわざと期間を開けたのかもしれません。
(A社側のサーバーに置かれたnimble.jsは、単にfriendly.jsを読みに行くだけなので、攻撃者は自分のサーバーにあるfriendly.jsの内容を書き換えれば、発病時期を任意に変えられる)
検証・原因について
- 静的ページなので、MySQL等のDBやミドルウェアは関係ない
- 残骸のCMS(MT)もディレクトリのリネーム&実行権限を外していたことで原因となる可能性は低い
- ファイルは上書きではなく、元ファイルをバックアップして新たに設置したことから、FTPから直接ファイルを操作された可能性が高いが、ログが残っていないため確定できず
- 唯一のシステムとなるお問い合わせフォームのプログラムからは、一連のファイル操作は不可能
(OSコマンドインジェクション、パス乗り換え等対策済み) - サーバーのコントロールパネルの権限はこちらに無いため、検証できず
というカンジでしょうか。
状況から考えると、FTPから不正アクセスを受けたという結論が濃厚な気がします。
FTP関係の懸念点としては、FTPアカウントは前の制作会社が設定したまま変更しておらず、且つ驚くほど推測されやすいパスワードであったことや、考え過ぎかもしれませんが、もしかしてFTPアカウントを以前に盗まれていたことに気づいていなかった可能性も捨てきれません。(ガンブラーウィルスが流行った頃に廃業されている)
不正アクセスのタイミングから考えると、ガンブラーではなく推測されやすいパスワードをクラックしたようにも思いますが、犯人でないと真相はわかりません。
FTPが原因なら犯人は直接改ざんしたページをアップすればいいじゃん!とも思いましたが、足跡(ログ)を消すために3ヶ月以上待ってからの発火を狙っていたのであれば、今回の手口も理解ができます。
(沢山の改ざんしたサイトを一斉発火させるとか・・・)
ちなみにリニューアル前と後では、検索エンジンの表示順位やキーワード数が、不正アクセスを受けるタイミングと同時期に大きく上がっており、何らかの関係があるのかもしれませんが、ないかもしれません。
なんかモヤモヤした話になってしまいました、スミマセン。
最後に、弊社で取った対策
ホームページというのは運営が長くなるとサイトの環境も秘伝のタレ状態になってきます。
サーバー会社によって各種設定方法が異なったり、業者が何社も入り組むことでサーバー上のファイルの所有者が不明になっていたり、当時の担当者が連絡取れなくなって詳細が分からなくなるなど、一度トラブルが起こると再発防止のための原因追求が困難なケースがとても多いのではないでしょうか。
つまり、予防のみではなくトラブル(インシデント)発生時の迅速な対応が課題と言えます。
そこで弊社では次の対策を取りました。
お客様のサイトのファイル変更チェック
改ざんされるページの多くはトップページということに着目して、弊社で制作したお客様のサイトのトップページを定期的に巡回して静的部分が変更されたかをチェックするツールを作成し稼働させました。
かなり簡易的ですが、これならお客様から費用を頂くことなく毎日チェックできます。
(あくまで弊社内のツールです)
Googleサーチコンソールでサイトの改ざんを検知することもできますが、正常時HTMLを収集しておくことで、いざというときのファイル比較を容易にしたかったわけです。
仲間のホームページ制作会社にも使ってもらおうかな。
それでは今年もお客様のために、少しでも良いサービスをご提供できるよう努力していきます。