FortiGuard Labs 脅威リサーチ
フォーティネットのRansomware Roundupシリーズの前回記事では、一般公開されているオープンソースのランサムウェアツールキット、Cryptoniteを取り上げました。その調査を進める中で、復号する手段がないうえにワイパーとして動作する、Cryptoniteのサンプルが存在することも判明しました。フォーティネットは先日、主に政治的キャンペーンの一環として、ランサムウェアを意図的にワイパー型マルウェアに変化させる事例が増加していることを確認しました。このブログでは、Cryptoniteワイパーのサンプルについて詳しく解説します。
影響を受けるプラットフォーム: Microsoft Windows
影響を受けるユーザー: Microsoft Windowsユーザー
影響: 侵害されたマシン上のファイルが暗号化され、復号方法が提示されない
深刻度: 高
まずは良いニュースをお伝えしましょう。Ransomware Roundupの発表後、セキュリティコミュニティの協力もあり、CryptoniteのソースコードはGitHubから削除されました(図1)。
オリジナルのリポジトリはGitHubで41回フォークされましたが、これらもすべて削除されました。
リポジトリのコントリビューションを見てみると、CryptoniteはCYBERDEVILZグループが主体となって開発し、数名のコントリビューターが協力していたことがわかります(図2)。
Cryptoniteのランサムウェアサンプルは、最小限のランサムウェア機能しか実装していません。除外リスト、サーバーのURL、メールアドレス、ビットコインウォレットなど、いくつかの機能はオペレーターが設定できます。ただし、暗号化と復号は非常に単純で、それほど強力なものではありません。また、現在では一般的な(ただし複雑な)、以下のようなランサムウェアの機能も備えていません。
- Windowsシャドウコピーの削除
- ファイルのロック解除(攻撃の影響を拡大するため)
- 分析回避
- 防御の回避(AMSIのバイパス、イベントログの無効化など)
このランサムウェア亜種は、初心者にとってはランサムウェアビジネスを簡単に始める足掛かりとなりますが、本格的なツールではありません。
この記事で取り上げるサンプルのSHA1ハッシュは、891e774eeb9671ff2dd1334e1628ba18fb60575です。我々がこのサンプルの分析を始めた理由は、実害の出ているワイパー型マルウェアを積極的に追跡していたところ、このサンプルの動作がそれに該当したからです。
手動で実行してもサンドボックス内で実行しても、サンプルは初めのうちは正しく機能するようです。サンプルはソフトウェアアップデートを装い、図3のような進捗バーを表示します。ただし、実際に表示されるのは暗号化の進捗状況です。そしてもちろん、予想どおりファイルが暗号化されます。
ところが、被害者が復号鍵を使って復号プロセスを開始できる画面は表示されません。これには当然、さまざまな理由があると推察されます。そして一つの可能性として、脅威アクターが意図的にランサムウェアをワイパーに変化させたということが考えられます。この仮説を検証するため、私たちは静的分析を行うことにしました。
GitHub上のソースコードから、このサンプルがPythonプログラムであり、pyinstallerによって実行ファイルにバンドルされていることがわかりました。以前のブログでは、このような実行ファイルpyinstxtractorで解凍し、uncompyle6で逆コンパイルしました。脅威アクターがコードに変更を加えたかどうかを判断するため、逆コンパイルしたコードとGitHubにあるマルウェアテンプレートとの差分ファイルを作成しました(図4)。
左側が分析対象のサンプル、右側がGitHubから入手したテンプレートです。プログラムがファイルシステムを列挙する間に5行が削除されたと思われます。
しかし、コードをさらに詳しく調べたところ、その5行を削除したことでプログラムの機能が完全に破損したようです。たとえば、右側の87行はfileLists変数を指定する唯一の場所です。ここには、後で暗号化するすべてのファイルが格納されます。つまり、左側のコードではファイルが一切暗号化されないことになります。これについてはコードを個別にテストして確認できました。
我々がツールに惑わされているかどうかを確かめるために(先に言ってしまうと、そのとおりでした)、PythonのバイトコードレベルでCryptonite.pyc を調べました。これはPythonが.pycファイル内で使用する中間言語です。図5は、アセンブリによく似たfindFiles()関数のバイトコードです。
図5の396行から412行の間に、図4で右側に表示されていた85行から87行までのコードがあります。これは、このコードが存在するものの、なぜか逆コンパイルのプロセスで消失したことを意味します。何かがおかしいときは常に二重チェックを怠るな、というのがリバースエンジニアリングの教訓です。
それ以外の点で、サンプルのコードとテンプレートとの間に機能の違いはありませんでした。
私たちはさらに調査を進めるため、動的分析も行いました。数回の実行ののちに、答えを解明する鍵、すなわちcmd.exeでサンプルを実行するという方法にたどり着きました。図6のように、プログラムがクラッシュするとPythonで例外が発生します。
このトレースバックは、tkinter関数でwarningScreen()ライブラリを使用しようとすると、ランサムウェアに異常が発生することを示しています。この時点で、ランサムウェアの暗号化プロセスはすでに終了しています。warningScreen()は、ランサムノート(身代金の宣告)を表示し、被害者に復号を許可する関数です。
これで、ランサムウェアが意図的にワイパーに変えられたのではないことがわかりました。そうではなく、品質保証の不備がサンプルの機能不全につながっていました。この欠陥に伴う問題点は、ランサムウェアの設計が単純なため、プログラムがクラッシュすると、あるいは通常の終了であっても、暗号化されたファイルを復元する方法がないということです。
第一に、プログラムを「復号専用」モードで実行する方法がありません。ランサムウェアは、実行されるたびに異なる鍵ですべてを再び暗号化してから、被害者に復号を提示します。
第二に、図7のように10行で鍵が生成されて、暗号化用のFarnetインスタンスが初期化されます。この鍵は本物の暗号化鍵です。ただし、この鍵がコード内で再び使用されることはなく、オペレーターにも送信されません。
12行で別の乱数が生成されます。Cryptoniteクラスのコンストラクタで、dkrptの値を使用してdecryptPlease変数が設定されます(図8)。
そのあと、この鍵はオペレーターに送信されます(図9)。身代金が支払われると、この鍵が被害者に渡されます。
被害者の持っている鍵が正しいことを確認するために、送信された値とdecryptPleaseが比較されます(図10)。
実際の復号では、最初に生成された鍵を保存しているFernetインスタンスが使用されます。
これが原因で、プログラムの終了時に実際の暗号化鍵が消失するという問題が起こります。オペレーターであってもその鍵にアクセスすることはできません。この分析で検証したケースでは、例外によってプログラムがクラッシュした場合、暗号化されたデータを復元する方法はありません。
今回のサンプルは、脆弱なアーキテクチャとプログラミングが原因で、ランサムウェアが瞬く間にワイパーに変化し、データの復元が不可能になることを示しています。ランサムウェアサンプルの高度化を危惧する声はよく聞きますが、過度の単純さや品質保証の不備が重大な問題を引き起こすこともあるのです。ただしプラス面では、こうした単純さと自己防御機能の欠如によって、どのウイルス対策プログラムでもこのマルウェアを容易に特定することができます。
フォーティネットのお客様は、FortiGuardのWebフィルタリング、アンチウイルス、FortiEDRサービスによって、このマルウェア亜種から以下のように保護されています。
FortiGuard Labsは以下のアンチウイルスシグネチャを使用して、既知のCryptoniteランサムウェア亜種を検知します。
頻繁なシステム停止、日常業務への損害、組織の評判への影響、PII(個人情報)の破損や望ましくない公表などを考えると、すべてのアンチウイルスおよびIPSシグネチャを最新の状態で維持することが重要です。
大半のランサムウェアはフィッシングを介して拡散されます。したがって、フィッシング攻撃の理解 / 検知に関するユーザートレーニング向けに設計されたフォーティネットソリューションの活用を是非ご検討ください。
FortiPhishフィッシングシミュレーションサービスでは、実際の攻撃をシミュレーションし、フィッシングの脅威に対するユーザーの認識や備えをテストするほか、フィッシング攻撃を受けた場合の適切な対処方法を訓練および強化できます。
フォーティネットが無償で提供するNSEトレーニング:NSE 1 – 情報セキュリティ意識向上には、インターネットの脅威に関するモジュールが含まれ、エンドユーザーは各種のフィッシング攻撃を識別して自らを保護する方法を学習できます。また、このトレーニングは社内のトレーニングプログラムに簡単に組み込むこともできます。
組織はデータバックアップの頻度、場所、およびセキュリティを根本的に見直し、進化を続け急速に拡大するランサムウェアのリスクに効果的に対処しなければなりません。デジタルサプライチェーンの侵害や、リモートワーカーがネットワークに接続することなどを考え合わせると、どこからでも攻撃されるリスクがまぎれもなく存在します。リスクを最小化し、ランサムウェア攻撃の影響を軽減するために、オフネットワークのデバイスを保護するクラウドベースのセキュリティソリューション(SASEなど)、マルウェアの中間者攻撃を阻止できる高度なエンドポイントセキュリティ(EDR:Endpoint Detection and Response、など)、そして、ポリシーとコンテキストに基づいてアプリケーションやリソースへのアクセスを制限するゼロトラストアクセスやネットワークセグメンテーション戦略の活用を是非ご検討ください。
フォーティネットは、お客様のセキュリティエコシステムにネイティブな相乗効果と自動化をもたらす、業界をリードする完全統合型セキュリティ ファブリックの一部として、テクノロジーとエキスパート人材ベースのSECaaS(Security-as-a-Service)の幅広いポートフォリオも提供しています。これらのサービスを提供しているのは、経験豊富なサイバーセキュリティのエキスパートで構成されたグローバルなFortiGuardチームです。
CISA、NCSC、FBI、HHSなどの組織は、ランサムウェアの被害者に対し、身代金を支払わないよう呼びかけています。身代金を支払ってもファイルが復元される保証はない、というのがその理由の一つです。米国財務省外国資産管理局(OFAC)の勧告によると、身代金を支払うことで、別の組織を狙った攻撃や、他の犯罪者によるランサムウェアの配信を助長したり、法律違反の可能性がある非倫理的行為に資金を提供したりする可能性があります。FBIはランサムウェアの被害を受けた組織および個人向けに、ランサムウェア申告ページを開設しており、被害者はインターネット犯罪苦情センター(Internet Crimes Complaint Center:IC3)を通じてランサムウェア攻撃のサンプルを提出することができます。
インシデントが検知されると、FortiGuard Labsの緊急インシデント対応サービスが迅速かつ効果的に対応します。フォーティネットのインシデント対応サブスクリプションサービスは、サイバーインシデントへの備えを強化するためのツールとガイダンスを提供します。これには準備態勢の評価や、IRプレイブックの作成およびテスト(机上演習)などが含まれます。
詳しくは、フォーティネットのFortiGuard Labs脅威リサーチ / インテリジェンス部門、およびFortiGuard AI活用セキュリティのサービスポートフォリオをご参照してください。