SSTエンジニアブログ

SSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。

Coinhive利用サイトを探してみた

こんにちは!新卒エンジニアの西尾です。
まさか入社して5ヶ月で技術的なブログを書かされるとは思いませんでしたが……頑張って書いていきます。

※なお、本記事の内容は個人の見解であり、所属組織を代表するものではありません。

はじめに

さて、本記事ではタイトルの通り、Coinhive(JSマイニング)を利用しているサイトを調査してみました。
Coinhiveといえば、自分のWebサイトにCoinhiveのマイニングスクリプトを設置したことで家宅捜索を受けた事件が話題になりましたね。

doocts.com

他にも国内で逮捕者が出ているみたいで、セキュリティ界隈でも様々な議論がされていると思います。

https://www.jiji.com/jc/article?k=2018061401193&g=socwww.jiji.com

国内のそんな現状を踏まえて、それでもCoinhiveを使い続ける人っているの?どんなサイトで使われているの?と気になったので、調査してみました!

Coinhiveとは

Webサイト上で仮想通貨のMoneroを採掘するサービスです。JavaScriptで記述されたマイニングコードをWebサイトに埋め込み、そのWebサイトを閲覧したPCのCPUを使用して採掘します。マイニングによって得られた収益の7割がマイニングコードの設置者に配分され、残りの3割は手数料として運営元のCoinhiveに差し引かれます。

Coinhiveは広告収入の代替手段となることが目的のようですが、閲覧者に無断でCPUリソースを使用してマイニングすることが問題になりました。(現在は閲覧者に同意を求めてからマイニングするように設定できます)

また、Webサイトを改ざんして不正にマイニングスクリプトを埋め込む Cryptojacking(Drive-by mining)という攻撃にCoinhiveが多く悪用されています。そのため、多くのアンチウイルスソフトがCoinhiveをブロック対象にしている気がします。

調査方法

それでは、まずは調査方法について説明していきます。
今回はAlexaランキング世界上位30万サイトを対象としました。
この30万サイトをクローリングし、コード上にcoinhiveなどの特定文字列が存在するWebサイトを検出します。その後、検出サイトにブラウザからアクセスして、Webサイトやマイニングに関する情報を収集していきます。
(本当は100万サイト解析したかったのですが、30万サイトをクローリングするのに約2週間かかったので、ここで区切りました…)
ちなみに、ランキングデータは2018年7月30日に取得し、クローリングは8月2日~22日の期間で実施しました。

調査対象のマイニングサービス

今回はCoinhive以外に、下記のサービスも調査対象としました。

  • CryptoLoot
  • CoinImp

どちらともCoinhiveと同じようにJavaScriptでマイニングを行うサービスですが、Coinhiveに比べるとまだマイナーな感じがします。(現在、CoinImpは多くのアンチウイルスソフトからブロック対象にされていません)

解析対象外のサイト

今回は以下のWebサイトを解析対象外としました。

  • robots.txtやmetaタグ等でクローリングを許可していないサイト
  • 応答に5秒以上かかるサイト

調査結果

クローリングを実施したところ、除外サイトは4万7157サイトになりました。つまり、今回は上位30万サイトの中から、25万2843サイトを解析対象としました。
さらにその中からクローラが検出したサイト数は372サイトになりました。

クローラの検出数

サイト数
総検出数 372
閲覧者のブラウザ上でJSマイニングするもの 203
JSマイニングを利用したサービス 124
その他(マイニングしないもの) 45

今回目的としている閲覧者のブラウザ上でJSマイニングするものは203サイト見つかりました。(意外と多い…?)
それとは別に、JSマイニングを利用したサービスのWebサイトも多く見つかりました。
その他は、Coinhiveの公式サイトや仮想通貨のニュースサイトなど、Webサイトの本文中にCoinhiveなどのワードがあっただけのものになります(マイニングスクリプトが無い)。

閲覧者のブラウザ上でJSマイニングするもの

まずは本記事のメインとなるJSマイニングサイトについての分析結果を説明します。

マイニングサービス別の検出数

マイニングサービス別の検出数は次のようになりました。

マイニングサービス サイト数
Coinhive 168
CryptoLoot 21
CoinImp 2

予想通りCoinhiveが圧倒的に多いですね。

Webサイトの種類別に分類

次に、Webサイトをザックリと分類してみました。

  • 違法ダウンロード系
    • 多くがいわゆる違法動画サイト
    • 動画以外にも、雑誌や音楽の違法ダウンロードサイトも含む
  • アダルト系
  • ツール提供サイト
    • ファイル共有ソフトのダウンロードサイトが多い
  • 情報サイト
    • 特定の専門分野の情報を載せているサイト
  • コーポレートサイト
    • 企業や大学のホームページ
    • アラビア語?のサイトが多い印象
  • フリー素材サイト
    • 主に画像のフリー素材を提供しているサイト
  • 動画関連サイト
    • 映画のレビューやYoutube動画の紹介など、違法ではないもの
  • ブログ
  • ニュースサイト
  • ゲーム関連サイト
    • ゲームの攻略情報やコミュニティサイト

違法ダウンロードやアダルト系の動画サイトが圧倒的に多いです。
JSマイニングは、基本的にWebサイトを閲覧中ずっとマイニングし続けます。そのため、長時間同じWebサイトに留まり続ける動画サイトと相性が良いと考えられます。

マイニングの負荷率

Coinhiveなどのマイニングサービスでは、CPU負荷率などを設置者が設定することができます。そこで、各マイニングサイトで設定されているCPU負荷率の統計を取ってみました。
ちなみに、デフォルト設定のままだと負荷率は100%になります。

予想通り?203サイト中55サイトが負荷率を100%に設定しており、最多でした。しかし、意図的に100%に設定しているケースは少なく、デフォルト設定のまま使用しているものが大半でした。 また、マイニングサイトの半分以上が、70%以上の負荷率に設定されていました。

個人的には、負荷率の低いサイトが意外とあって驚きました。低い負荷率で稼げるのだろうか…。閲覧者にマイニング行為を気づかせない意図があるのかもしれませんが。

許可制のサイト

全てのWebサイトが無許可でマイニングするわけではなく、許可制のWebサイトもありました。
下図のように、閲覧時にマイニングの許可を求めるポップアップを表示するWebサイトは8サイトありました。

これは公式ツールを利用したもので、『キャンセル』をクリックすると、マイニングを実行せずにWebサイトを閲覧することができます。

また、許可制ではなくとも、下図のようなマイニング状況を表示しているWebサイトが5サイトありました。

これも公式ツールを利用したもので、閲覧者が負荷率を調整したり、マイニングを停止させることもできます。

このように、閲覧者に明示してマイニングを行っているWebサイトは合計13サイトでした。(全マイニングサイトの6.4%
やはり、ほとんどのWebサイトが閲覧者に無許可でJSマイニングを行っていますね。まぁそもそも、マイニングを行っているサイトの多くが違法だったり怪しげなサイトなので、許可を取ってる方が違和感なのですが…。笑

JSマイニングを利用したサービス

今回の調査目的としていたWebサイトとは異なるのですが、解析したら面白かったので、こちらについても説明していきます。
JSマイニングを利用したサービスは、2種類見つけることができました。

Webサイトの種類 サイト数
URL短縮サービス 119
自己マイニングサイト 5

URL短縮サービス

今回の調査で最も多く検出したのが、このURL短縮サービスのサイトになります(119サイト)。この種類のWebサイトは、全て同じようなWebデザインをしていました。その理由は、URL短縮サービス自体のテンプレートが販売されていて、そのままテンプレートを利用して作成したWebサイト(サービス)が多くあるからです。
AdLinkFly - Monetized URL Shortener by MightyScripts | CodeCanyon

また、この種類のWebサイトでは、通常のJSマイニングではなく、Coinhive Captchaを利用するコードが記述されていました。ただ、マイニングを実行するコードは見つけれなかったため、実際にマイニングしているのかは分かりませんでした。(自分の技術力不足で解明できず…。)

解析して分かった範囲で、URL短縮サービスの流れを下図に示します。短縮したいURLをxxx.comとし、短縮後のURLをaaa.com/bbbとしました。

URL短縮サービスの流れ

訪問者が短縮URLをクリックすると、URL短縮サービスのサイトへ誘導され、CAPTCHA認証を行わせます。その後、リンク取得画面へ移動し、5秒間の待機時間があります。そして5秒後、ようやく短縮前のURLを取得できます。

マイニングに関しては、訪問者のブラウザ上でCoinhive Captchaの実行準備をしているところまで分かりました。しかし、実際にマイニングを実行しているのか?どのタイミングで実行するのか?までは分かりませんでした。ちなみにCoinhive Captchaは、人間を判別するわけではなく、一定量採掘したら次の処理に進める仕組みとなっています。

解明はできなかったのですが、このURL短縮サービスでは次の内のいずれかの方法をとっていると推測します。(推測理由も添えています)

  • 中継サイトのCAPTCHA認証時にマイニング
    • reCAPTCHAで認証すると同時にマイニングも実行する?
    • テンプレート販売サイト内のアップデート情報で、Integrate coinhive captcha と記述されている
    • ただ、CAPTCHA認証は数秒で済むので、ほとんどマイニングできないと思われる
  • リンク取得画面で5秒間待機している間にマイニング
    • 5秒間マイニングした後にリンクを取得できる仕組みだと違和感がない
    • Coinhive Captchaの本来の使い方と合っている気がする
  • 準備までしたがマイニングを実行していない
    • 一時的にマイニングスクリプトを削除している?
    • 短縮前のURLを取得するまでの経路で、特にCPU負荷がかかる場面が無かった
    • 通信内容を見たところ、Coinhiveと通信している形跡を見つけれなかった

ちなみに、マイニングの収益はサービス運営側に入り、そこからの一部がサービス利用者に分配されるものと思われます。 それにしても、結構時間をかけて解析したのに結局謎が解けなくて悔しい…。

自己マイニング

勝手にこう名付けました(^^;)
この種類のWebサイトは、閲覧者が自分で自分のためにJSマイニングを行うサイトとなっています。具体的には、このサイトにユーザ登録し、Coinhiveのサイトキーなども設定した後に、自身のブラウザ上でマイニングを実行するものとなっています。(JSマイニングするくらいならマイニング用のソフトを使った方が稼げる気がしますが…)

調査まとめ

Alexaランキング世界上位30万サイトを対象に、Coinhiveなどのブラウザ上でマイニングするWebサイトを探してみたところ、300サイト以上見つけることができました。(千サイトに1サイトくらいの割合)
ただし、今回は解析対象外にしたWebサイトが多くあるので、実際はもう少し多くのWebサイトで利用されていると思われます。
利用サイトは予想通り、違法動画サイトやアダルトサイトだったり、怪しげな雰囲気のWebサイトが多かったです。(もちろん真っ当なWebサイトもありましたが)
JSマイニングを行うサイトの大半は閲覧者に無許可で実行するものでした。
また、Webサイトの訪問者にマイニングさせるものとは異なり、JSマイニングを利用したサービスを提供しているWebサイトも見つけることができました。

おわりに

個人的な感想なのですが、今回日本のWebサイトを1つも見つけることができなくて少し残念でした…。日本だと逮捕されちゃうかもしれないリスクがあるので利用者が少ないのでしょうか。閲覧者に無断でマイニングせずに、許可を求める方式にすれば大丈夫だとは思いますが。ただ、それでもアンチウイルスソフトからマルウェアサイト扱いされるリスクはあります…。。

ちなみにVirusTotalでCoinhiveの公式サイトをスキャンしてみたら、やっぱり悪性判定されていました。
弊社で利用しているアンチウイルスソフトも、公式サイトへのアクセスすらブロックしてきます。笑

このようにCoinhiveなど、閲覧者のブラウザ上でマイニングを行うWebサイトは、マルウェア扱いされる現状です。
また、最近ではWebサイトを改ざんしてマイニングスクリプトを埋め込むCryptojacking(Drive-by mining)という攻撃が発生しています。自社サイトがCryptojackingの被害を受けて、知らない内に自社サイトがブラックリストに入ってしまった!ということが起こらないように、あらかじめ脆弱性診断を実施してWebサイトの弱点を無くしておくと、Web改ざんを未然に防ぐことができます。ただ、弱点を完全に無くすのは難しいので、WebアプリケーションファイアウォールであるScutumを導入して、手軽に自社サイトを守ってみてはいかがでしょうか。
(セキュリティ企業っぽい締め…!)