ランサムウェア
ランサムウェア「BlackCat」が新たな署名付きカーネルドライバを展開
本稿では、2023年2月に確認されたランサムウェア「BlackCat」の攻撃事例について、詳しく解説します。当該の攻撃では、防御回避を目的とする新たな手口が利用されました。
概要
2022年12月後半、Microsoft社のハードウェア開発者用アカウント(Microsoft社のWindows Hardware Developer Programで承認済み)で署名された不正なカーネルドライバに関する報告が、「Mandiant」、「Sophos」、「Sentinel One」の三者から共同で発表されました。当該の開発者用アカウントは、ランサムウェアを含む複数の攻撃事例で使用されていました。これを受けてMicrosoft社は、攻撃に利用された複数のアカウントを停止しました。
本稿では、関連事例として2023年2月に発生したランサムウェア「BlackCat」による攻撃について解説します。この攻撃では、防御回避の新機能として、先述の不正なドライバと類似する手口が利用されました。BlackCatの提携グループは、セキュリティ関連ツールの無効化や改変、セーフモードでの起動など、さまざまな手法を駆使して防御回避を行うことで知られています。
今回の調査では、BlackCatによる新機能に焦点をあて、署名付きカーネルドライバを介して防御回避が行われる仕組みを解明しました。このカーネルドライバは、前回調査した検体のメイン機能を受け継いだアップデート版であると考えられます。本ドライバの主機能は、標的のエンドポイント内で稼働しているセキュリティ関連プロセスやエージェントをコントロール、一時停止、または終了することであり、独立したユーザクライアントの実行ファイルから呼び出されます。
攻撃者は、不正なカーネルドライバに署名を付与するために、さまざまな手段を利用します。その典型例として、Microsoft社による署名ポータルの不正利用、流出または窃取された証明書の利用、アンダーグラウンド・サービスの利用が挙げられます。今回報告する攻撃者は、まずMicrosoft社の署名付きの以下のドライバを標的システム内に展開しようとしました。
SHA256:b2f955b3e6107f831ebe67997f8586d4fe9f3e98
しかし、本ドライバは以前からMandiantによって報告されていた古いものであり、セキュリティ機能によって検知されました。そこで攻撃者は、窃取または流出済みのクロス署名証明書が付与された別のカーネルドライバを用いました。トレンドマイクロでは、今回の攻撃対象領域(アタックサーフェス)に関連するツール、戦略、プロシージャ(TTPs:Tools、Tactics、Procedures)の他、あらゆる署名付きドライバを用いた手口に対する監視を続けていきます。
署名付きの不正なカーネルドライバ
弊社が2023年2月に確認したランサムウェア攻撃からは、攻撃者やその提携グループが、ペイロードを高い権限で実行する手法に強い関心を寄せている様子がうかがえます。標的システム内に作成した最終段階のペイロードがセキュリティ製品に検知される状況を避けるため、攻撃者は多くの場合、低レベル(またはカーネルレベル)のコンポーネントで構成されたランサムウェアファミリを使用します。カーネルレベルの脅威やキルチェーンの全般的な傾向を分析したところ、カーネルで稼働するペイロードの多くは、防御回避の段階で発見されること(図2)が判明しました。
ランサムウェアの中には、Microsoft社によるコード署名の要件に準拠しようとするものが見られます。これにより攻撃者は、標的システム上に実際のペイロードを作成する前に、個別のタスク別(通常は防御の妨害や回避を伴う)に設計されたカーネルモジュールを都度コンパイルする柔軟性が得られます。コード署名証明書を取得する際のアプローチとして、下記のいずれかが使用されます。
1. 侵害済みのシステムからコード署名証明書を窃取して利用する。または、アンダーグラウンドのマーケットから、流出済みのコード署名証明書を購入して利用する。
2. 新しい正規のコード署名証明書を取得して利用する。具体的な手段として、攻撃者は正規の組織になりすまし、Microsoft社によるクロス署名証明書の発行手続きを行う(Microsoft社がカーネルコードに対するクロス署名を許可していた時期)。または、Microsoft社のプラットフォームを不正使用して、署名付きのカーネルモジュールを発行する。あるいは、アンダーグラウンドマーケットから実際の身分情報に紐づく正規なコード署名証明書またはEV(Extended Validation)証明書を購入する。
署名付きドライバの解析
以降、2月のBlackCatによる攻撃で使用された署名付きドライバ(ktgn.sys)を解析した結果について解説します。まず、防御段階で利用された「ktgn.sys」や他の新規ドライバ、およびそれぞれの役割について、図4に示します。
仮想マシンで保護されたユーザエージェント「tjr.exe」は、ユーザの以下の一時ディレクトリ配下にカーネルドライバ「ktgn.sys」を作成します。
C:\%User%\AppData\Local\Temp
続いて、当該ドライバを「ktgn」の名前でインストールし、起動パラメータとして「System(システムの再起動時に開始されるように)」を指定します。実際にあるユーザが本ドライバにアクセスした際の動作を解析したところ、デバイス入出力コントロール(IOCTL:Input and Output Control)として公開されている1コードを呼び出しただけであることが分かりました。そのコードは「Kill Process(プロセス停止)」に相当し、システム内にインストール済みのセキュリティ関連プロセスを停止する機能を持ちます。
ドライバ「ktgn.sys」には、「BopSoft(他の攻撃グループもコード署名に利用したことが報告されている)」によるデジタル署名が付与され、署名ポリシーが強化されたWindows 64ビット環境でも正常に読み込まれます。なお、当該のデジタル署名は、現時点ですでに取り消されています。本ドライバはツール「Safengine Protector v2.4.0.0」によって難読化されているため、静的解析が困難なものとなっています。そこで、動的解析の一手法として、本ドライバを実際にロードし、ユーザモードのクライアントをビルドして使用することで、公開状態のIOCTLインターフェースを参照しました。これにより、各IOCTLコードに対応する機能が確認できました。なお、カーネルドライバ「ktgn.sys」には亜種が存在し、同じ機能を持ちながらも、付与されたコード署名証明書は異なることが判明しました。
本ドライバには、停止(アンロード)用のコールバック関数が登録されていません。そのため、ドライバを停止するためには、対象サービスのレジストリキーを削除または修正した上で、システムを再起動する必要があります。
ユーザモードのクライアントからドライバへの接続、通信をサポートするため、以下の名前のシンボリックリンクが作成されます。
\\.\keHeperDriverLink
ただし、本リンクによる接続は1つしか認められていないため、複数クライアントから同時に接続しようとすると、システムが異常終了します。
公開状態のIOCTLインターフェース
ユーザモードのクライアントは、固有の機能を備えた10種のコマンドを提供します。コマンド毎に、クライアントは適切なIOCTLインターフェースを呼び出すことで、ドライバ側に処理の実行を委ねます。クライアントとドライバ間の通信は、以下のリクエストを介して行われます。機能別に定義されたIOCTLコードは下記の通りです。
IRP_MJ_DEVICIDE_CONROL
カーネルドライバを解析したところ、使用できない機能や、構造的に整備されていない箇所が見受けられました。そのため、本ドライバは、まだ開発およびテスト途上にあると考えられます。以降、各IOCTLコードについて詳しく解説します。
IOCTL 222088h
「IOCTL 222088h」は、ドライバのアクティブ化を行うためのコードです。他のいかなるドライバ操作を実行する場合にも、前もってこのコードを呼び出す必要があります。本コードを呼び出さずに他のドライバ操作を実行しようとすると、以下のエラーメッセージが返却されます。
STATUS_ACCESS_DENIED(アクセス拒否)
アクティブ化を実行するにあたり、ユーザモードのクライアントは、ドライバ側にアクティベーション用の特殊なバイト列を送信します。
ドライバ側で行う処理は単純であり、受信したアクティベーション用バイト列と、ドライバ内にハードコードされたサイズ0x42のバイト列を比較するだけです。両バイト列が一致する場合、ブーリアン型のフラグをセットします。このフラグは、アクティブ状態であるかの判別に用いるものであり、各ドライバ操作の実行前にチェックされます。
IOCTL 22208Ch
「IOCTL 22208Ch」は、各種ドライバ操作の完了後、先に「IOCTL 222088h」でセット済みのフラグを解除する目的で使用されます。これによりドライバは非アクティブ状態になり、以降は新たな操作を受け付けなくなります。
非アクティブ化を実行するにあたり、クライアントは「IOCTL 222088h」の時と同じバイト列をドライバ側に送信する必要があります。
IOCTL 222094h
「IOCTL 222094h」は、ユーザモードのプロセス(保護されたものを含む)を停止する目的で使用されます。ドライバは、ユーザエージェントからプロセスIDを受け取り、対象プロセスのコンテキスト中にカーネルスレッドを作成します。このカーネルスレッドは、以下のAPIを呼び出して対象のプロセスを停止します。
ZwTerminateProcess
IOCTL 222184h
「IOCTL 222184h」は図13の通り、指定のファイルパスを削除するために使用されます。
IOCTL 222188h
「IOCTL 222188h」は、ファイルの強制削除に使用されます。その手段として、カーネルドライバが下記を実行します。
- システム内の全プロセスをブルートフォース方式(プロセスID:0x4から0x27FFDまで)でオープンする。
- プロセスのオープンに成功した場合、当該プロセスで使用中の全ハンドルをブルートフォース方式で参照する(ハンドル:0x4から27FFDまで)。
- ハンドルの参照に成功した場合、そのハンドルに対応する名前をAPI「ObQueryNameString」によって取得する。名前が一致した場合、当該ハンドルをクローズする。
上記の操作により、対象ファイルへの参照が全てクローズされます。これにより、ファイルの削除時に「別のアプリケーションによって使用されているため削除できない」といった状況を、意図的に回避することが可能です。
IOCTL 22218Ch
「IOCTL 22218Ch」は、ファイルのコピーに使用されます。
IOCTL 222190h
「IOCTL 222190h」は、ファイルの強制コピーに使用されます。ドライバ側の処理は「IOCTL 222188h(ファイルの強制削除)」と同様であり、全プロセスから全ハンドルをブルートフォース方式で取得し、その中で対象ファイルに紐づくものをクローズした上で、ファイルのコピーを実行します。
IOCTL 2221C4hおよびIOCTL 2221C8h
「IOCTL 2221C4h」はプロセスやスレッドの通知コールバックを登録、「IOCTL 2221C8h」はそれを解除する目的でそれぞれ使用されます。ただし、本稿執筆時点で、両機能は到達不可能なパス上に設定されています。そのため、本ドライバは依然として開発中またはテスト途上にあると推測されます。
IOCTL 222264h
「IOCTL 222264h」は、システムの再起動に使用されます。再起動の手段として、以下のAPIが用いられます。
HalReturnToFirmware
結論
Windowsシステム上で高いアクセス権の掌握を試みる攻撃者は、EPP(Endpoint Protection Platform:エンドポイント保護プラットフォーム)やEDR(Endpoint Detection and Response:エンドポイントでの検知と応答)など、ユーザやプロセスを保護する強力なセキュリティ機能を突破する手法を模索し続けています。多層に及ぶ保護機能をすり抜ける手段として、攻撃者はカーネル層(または更に低い層)のように抵抗の少ない経路を選び、そこから秘密裏に不正なコードを動かそうとする傾向が見られます。そのため、本稿で挙げたツールキットなどによる攻撃は、今後も衰えることなく継続するものと考えられます。
攻撃者は、今後もツールキットによって不正なコードをセキュリティツールから隠蔽し、防御機能を無効化することで、長期に渡って監視の目を欺こうとするでしょう。こうしたツールキットは特に、低レベルで動くシステムコンポーネントの解析技術や、豊富な開発リソースを持つ攻撃グループによって多用されていくと考えられます。また、当該条件に合致する攻撃グループは多くの場合、潤沢な資金を武器にアンダーグラウンドからルートキットを購入したり、コード署名証明書を購入してルートキットをビルドすることも可能と考えられます。以上を踏まえると、ルートキットに潜む危険性は、キルチェーンの初期段階から複雑な標的型攻撃を隠蔽できるという点にあります。こうした性質は、標的システム内にペイロードを配備する前に、あらかじめ防御機能を無効化しておく作戦に寄与するものです。
推奨事項とソリューション
コード署名証明書は、攻撃を見えにくくする追加手段として、攻撃者によって頻繁に不正利用されています。企業や組織にとって、鍵情報の侵害はセキュリティ上のリスクに繋がるだけでなく、元の署名付きソフトウェアに対する評判や信頼の低下を引き起こす可能性もあります。被害を避けるため、証明書を保護するベストプラクティスの実施を推奨します。例えば、秘密鍵へのアクセスに制限をかけることで、証明書が不正アクセスに遭うリスクを軽減できます。また、秘密鍵に対して強力なパスワードや他の認証手続きを設けることも、窃取や侵害の試みを阻止する手段として有用です。さらに、テスト時のコード署名証明書(リリース前のテスト環境でのみ使用)を本番リリース時とは別に用意することで、本番用の証明書が不正利用されるリスクを最小限に抑え込むことが可能です。
企業や組織を狙う一般的なランサムウェア攻撃に対しては、体系的なセキュリティフレームワークを導入し、リソースを適切に割り当てて強固な防御戦略を確立することが有効です。推奨されるガイドラインを下記に示します。
- データや資産の棚卸しを行う
- 承認済み、および未承認の機器やソフトウェアを特定、分類する
- イベントやインシデントのログを監視する
- ハードウェアやソフトウェアの設定を適切に管理する
- 管理者権限やアクセス権は、必要な場合にのみ付与する
- ネットワークのポート、プロトコル、サービスを監視する
- 正規なアプリケーションのみを対象とするソフトウェア・ホワイトリストを作成する
- データの保護、バックアップ、復旧の仕組みを導入する
- 多要素認証(MFA:Multifactor Authentication)を有効化する
- システム上の全レイヤーを網羅できる最新のセキュリティソリューションを導入する
- 攻撃の兆候に警戒する
企業や組織では、多面的またはマルチレイヤーによるアプローチを用いることで、エンドポイントやメール、Web、ネットワークなど、システム侵入に繋がるさまざまな経路を保護できます。不審な挙動や疑わしい要素を発見できるセキュリティソリューションは、ランサムウェアによる脅威から企業のシステムを守る上で有効です。
- 「Trend Vision One™」は、多層防御と挙動検知機能を提供し、ランサムウェアがシステムに損害を与える前に、疑わしい挙動やツールを早期にブロックすることを可能とします。
- 「Trend Micro Apex One™」は、ファイルレス攻撃やランサムウェア等、より高次元の脅威に対し、次世代レベルの自動脅威検知機能及び防御を提供し、確実にエンドポイントを保護します。
侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡(IoC)はこちらで確認してください。
参考記事:
BlackCat Ransomware Deploys New Signed Kernel Driver
By: Mahmoud Zohdy, Sherif Magdy, Mohamed Fahmy, Bahaa Yamany
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)