Windowsサービスの復元機能がランサムウェアからの脆弱性が浮き彫りに - Minervaは確実先制防御!2022年11月24日Minervaのブログから
Windowsサービスは、システムの起動時にプロセスを開始するために使用されるOSメカニズムであり、一般ユーザーの操作に関連されないサービスを提供しています。
Windowsサービスは、
1. サービスアプリケーション
2. サービスコントロールプログラム (SCP)
3.サービスコントロールマネージャー (SCM)
3つのコンポーネントで構成されます。
サービスアプリケーションの特徴
サービスアプリケーションは、Windows サービスとして少なくとも 1 つの実行可能ファイルで構成され、サービスコントロールマネージャー (SCM) コードインターフェイス仕様に準拠してコマンドを受信し、アプリケーションのステータス状況を SCM に返します。 ほとんどのサービスにはユーザーインターフェイスがないため、コンソールプログラムとして構築されています。 サービスを含むアプリケーションをインストールする場合、アプリケーションのセットアッププログラムはサービスをシステムに登録する必要があります。 サービスを登録するために、セットアッププログラムは Windows のCreateService関数を呼び出します。 セットアッププログラムがこれを行うと、サービスのHKLM\SYSTEM\CurrentControlSet\Services直下に新しいレジストリ キーが作成されます。 各サービスのキーは、サービスとそのパラメータおよび構成オプションを含む実行可能イメージのパスを定義します。
プログラムが CreateService を呼び出すとき、サービスの特性を説明するパラメータの数 (必須のものとオプションのものがあります) を指定する必要があります。一般ユーザが見ても非常に難しいと思いますので、こういった項目がある認識で良いです。特徴は次のとおりです。
1. Start - システムの起動時にサービスを自動的に開始するか、SCP の指示で手動開始するかを示す
2. ErrorControl - サービスの開始時にエラーが検出された場合にシステムがどのように反応するかを示すエラーコード
3. Type - サービスが独自のプロセスで実行されているか、他のサービスとプロセスを共有しているサービスであるかを示す
4. Group - サービス グループを定義。 設定されている場合、グループの初期化時にサービスが初期化される
5. Tag - グループの初期化順序で指定された場所。 このパラメータはサービスには適用されない
6. ImagePath - サービスの実行可能イメージファイルの場所
7. DependOnGroup - 指定されたグループのドライバーまたはサービスがロードされない限り、ドライバーまたはサービスはロードされない
8. DependOnService - サービスは、指定されたサービスがロードされた後にのみロードされる
9. ObjectName - サービスが実行されるアカウントを指定する
10. DisplayName - オプションの表示名
11. Description - サービスの説明、最大 32767 バイト
12. FailureActions - 障害アクションには、サービスプロセスの再起動、システムの再起動、および指定されたプログラムの実行を含む
13. FailureCommand - SCM は、FailureActions がサービス障害時にプログラムを実行するように指定されている場合にのみ、この値を読み取る
14. DelayedAutoStart - SCM が開始されてから一定の遅延が経過した後に、このサービスを開始するように SCM に指示する。 これにより、起動時に同時に開始されるサービスの数が減少する
15. PreshutdownTimeout - この値により、サービスはデフォルトのプレシャットダウン通知タイムアウトをオーバーライドが可能。 このタイムアウトの後、サービスがまだ応答していない場合、SCM はサービスに対してシャットダウン アクションを実行する
16. ServiceSidType - サービス セキュリティ識別子のタイプを表す
17. RequiredPrivileges - サービスが機能するために必要な特権のリストが含まれている
18. Security - この値には、SCM によって内部的に作成されたサービス オブジェクトへのアクセス権を持つユーザーを定義するオプションのセキュリティ記述子が含まれている
上記の特性のうち、12. FailureActionsと13. FailureCommand の 2つは、悪用される可能性が非常に高いため特に注意が必要です。
これら 2つのサービス特性はオプションです。 SCMは、サービスプロセスが終了したときにシグナルを受信するために、システムに登録します。 サービスプロセスが予期せず終了すると、SCMはプロセスで実行されたサービスを特定し、障害関連のレジストリ値で指定された回復手順を開始します。 SCMの構成可能なアクションには、サービスの再起動、プログラムの起動、およびコンピューターの再起動が含まれます。 さらに、サービスは、サービスプロセスが失敗した 1回目、2回目、およびそれ以降の失敗時のアクションを指定できます。また、SCM がサービスの再起動を要求した場合にサービスを再起動する前に待機する遅延期間を示すこともできます。 サービスの特性は、次の方法で変更される場合があります。
1. サービスのレジストリ値を変更
2. サービス MMC を使用してサービスを変更。 復元タブはFailureActionsおよび FailureCommand の特性に従属
3. sc.exe cli を使用してサービスを変更
4. ChangeServiceConfig2 API を使用してプログラムでサービスを変更
レジストリを介して行われない限り、変更はすぐに適用されます (レジストリは、PCの再起動後にのみ適用されます)。
いずれにせよ管理者権限を持っている人なら誰でも、FailureActionやFailureCommand を含むすべてのサービス特性を変更できます。その結果、この後説明をいたしますが、システムが悪用されることによりネットワークが致命的になる可能性があります。
FailureActionsとFailureCommandを悪用操作の実証実験
私たちMinerva分析チームでは、FailureActions や FailureCommand などの特性を変更する 実証実験 (POC)を作成しました。 FailureActions を「Run a Program」へ設定し、FailureCommand を以下の処理により Powershell コマンドに設定します。
1. C:\temp フォルダーを防御者の除外対象に追加する
2. 以前にドロップした ARCrypt ランサムウェアを C:\temp フォルダーに解凍する
3. ARCrypt ランサムウェアの実行
図1: POC実行前及び実行後の設定
サービスリスト内の一部のサービスは、システムドライバーの起動に追随していることに注意してください。FailureActionsとFailureCommand はドライバーには適用されず、復元パラメータを変更しようとすると、「アクセスが拒否されました」というメッセージが表示されます。
FailureCommandは、cmd および PowerShell コマンドとスクリプトを含む実行ファイルを起動できます (POC に示されているとおり)。 services.exe によって作成されたプロセスは、失敗したプロセスを介して新しいプロセスを起動するなど、すべてのプロパティを継承します (例えば、失敗したプロセスが「ローカル サービス」ユーザーで実行された場合、失敗したプロセスも実行されます)。 その結果、実行されたプロセスはユーザーのデスクトップに伝達されません。つまり、画面に表示されませんので、ユーザーは何が起こっているのかわからない状態なのです。
図2 - セッションゼロ時の稼働
サービスの起動失敗は“taskkill /f” コマンドを実行することで、サービスを実行するのと同じくらい容易です。
FailureActionsとFailureCommand 特性は、システム管理者とサービス開発者がサービスのクリーンアップと復元アクションを定義したり、サービス障害を電子メール通知で関係者に送信したりする機能です。 ただしこの機能は、悪用されると最大の脅威となります。
図3 - サービス失敗以前にcmdコマンドがファイルを生成されたホルダー
サービス失敗後に C:\tempホルダー直下にランサムウェアがドロップされた様子
実際の攻撃フローは無数に存在するでしょう。攻撃脅威は、それぞれ異なる目的のために特定のサービスを使用する可能性があります。例えば、1つ目のサービスが Windows Defenderを無効にし、次のサービスが次の攻撃をダウンロードさせて、3つ目のサービスを悪用することによりデータを収集して盗み出す可能性があります。
Minerva ランサムウェア攻撃防御モジュールで回避挙動を完全ストップ
Minerva Armor製品は マルウェアの回避技術を防ぎ、攻撃を先制防御することに特化しています。 ハッカーによる手の込んだ攻撃手法は無限でしかも複雑困難を極めており、検出ベースのセキュリティシステムを容易に回避してしまいます。 Minerva は、これらの攻撃を初期段階で防止します。
Minerva製品(Minerva Armor)についてのお問い合わせはPico Technologies (info@pico-t.co.jp)までお願い致します。