Cryptojackingについてまとめてみた

1 minute read

Cryptojackingとは

意図せずに端末上/ブラウザ上で仮想通貨のマイニングを実行させられる攻撃のこと。

Coinhiveの登場(2017年9月)以降、この用語が使われるようになった模様。

想定シナリオ

  • Webサイト管理者が、ユーザーの同意なしにCoinhive等のマイニング用JavaScriptをWebサイト上に埋め込む
  • 攻撃者がWebサイトを改ざんし、Webサイト上にCoinhive等のマイニング用JavaScriptを埋め込む

事例集

海外事例

  • USの著名なファクトチェックサイトにCoinhiveが埋め込まれ、閲覧者のCPU使用率が100%になる状態に
  • PolitiFactのディレクターはクラウドサーバーの設定ミスが原因でCoinhiveが埋め込まれたと発言
  • CBS参加のテレビ局Showtimeの公式サイトにCoinhiveが埋め込まれる(ハックされた結果かどうかは不明)
  • Wall Street Journalの取材に対し、Showtimeのスポークスマンはコメントを辞退
  • 某ビデオストリーミングサイトにマイナーが埋め込まれた事例をMicrosoftが報告
  • 多段のiframeを使用 + “coin”/”miner”という単語を使わない等の工夫が施されているとのこと
  • WordPress, Joomla, DrupalなどのCMSがハックされ、マイナーが埋め込まれる事例をSucuriが報告
  • 500以上のWordPressサイトがハックされているとのこと

日本国内事例

今回観測した事象は、一般の日本企業のWebサイトが改ざんされて仮想通貨をマイニングするスクリプトが埋め込まれるというものです。

ここで注意すべきなのは、仮想通貨をマイニングするスクリプトがWebサイトの管理者によって意図的に埋め込まれたものなのか、あるいは攻撃者が悪意を持って挿入したものなのかを外部から一律に判断することは困難という点です。

今回に関しては、挿入されたスクリプトが発見されにくいように隠蔽されていたことから、攻撃者によって勝手に挿入されたものと判断しました。

— via IIJ Webサイトの改ざんに伴う仮想通貨マイニングスクリプトの埋め込み事例

どんんだけ儲かる?

Cryptojackingは攻撃者にとってどれだけ実入りがいいものなのだろうか?

Checkpointの試算結果によれば、1,000人のユーザーがいるサイトにCoinhiveを埋め込めば月収20万程度は達成できると推測されている。

Assuming the latest Monero network stats: > Monero Hashrate: 266.122 Mh/s (current worldwide mining power)

A new block is created every 2 minutes in average. (720 blocks per day)

Reward per block is 6.2 XMR.

1 XMR = 88.46$

Every day 4464 XMR worth of blocks are created (720*6.2)

One’s relative contribution to the network’s hashrate is 0.0000000169095 (45/266.12M)

So we will receive 0.000754 XMR daily, per user.

And for 1000 users, for 30 days: (1000300.000754) = 22.62 XMR ß In dollars: 2001 USD (22.62*88.46)

— via Crypto Miners Part 2

エンドユーザー側での対策方法

AVソフトによる対策

  • coinhive.min.js(39831bc68dddc4d22b7a0eea978a0193966d2cefda77a223c2b7140305e8b5fd)の検出率は28/59
    • Imgur
    • https://www.virustotal.com/ja/us/file/39831bc68dddc4d22b7a0eea978a0193966d2cefda77a223c2b7140305e8b5fd/analysis/
  • Coinhive自体は合法であるため、AV側で検出すべきかどうかは議論が別れるところ

拡張機能による対策

NoCoin, Crypto Miner Blocker, MinerBlockなどJS実装の仮想通貨マイナーをブロックする拡張機能が公開されている。

大別して、ドメインブラックリスト方式(NoCoin, Crypto Miner Blocker)とJS実装に割り込みをかける方式(MinerBlock)の二種類がある。

MinerBlockの実装

for(let name in this) {

	if(name === 'webkitStorageInfo') {
		continue;
	}

	// Check coinhive miner

	if(	this[name]
		&& typeof this[name] !== 'undefined'
		&& typeof this[name].isRunning === 'function'
		&& typeof this[name].stop === 'function') {
		console.log('[+] Coinhive miner found, stopping...');
		this[name].stop();
		this[name] = null;
		triggerMbEvent('coinhive.com');
	}
}
  • Coinhiveの公式実装では、マイニングをするインスタンスはisRunningメソッドとstopメソッドを持つ。
  • MinerBlockはその両方の持つインスタンスがないか総当りでチェックを行い、該当するインスタンスがある場合はstopメソッドを呼び出しマイニングを中止させる。
    • この実装では少し改変されるだけでブロックできなくなる・・・

Coinhive公式による対策

CoinhiveはユーザーがOpt-Inでマイニングに協力するかどうか選択できる実装を公開。

ブラウザ実装による対策

bugs.chromium.org上で何か対策ができないのかと議論中

If a site is using more than XX% CPU for more than YY seconds, then we put the page into “battery saver mode” where we aggressively throttle tasks and show a toast allowing the user to opt-out of battery saver mode.

など色々と提案がなされているか、まとまるかは疑問。

まとめ

  • Cryptojackingが流行ってきている。
  • エンドユーザー側での対策方法は色々あるが、ドメインブラックリスト方式の拡張機能を使うのがいいのではないか。