web-dev-qa-db-ja.com

Windows Server Core Dockerコンテナにドライバーをインストールできますか?

ドライバーが必要なアプリがあります。実験として、またテスト目的で、mcr.Microsoft.com/windows/servercore:1903-AMD64に基づくDockerイメージを使用してデプロイすることを考えました。ホストオペレーティングシステムは、開発用ラップトップであるWindows 101903です。ドライバーはミニフィルターファイルシステムドライバーで、インストールは問題ないようですが、起動に失敗します。アプリケーション自体は、x64/x86で実行される32ビットのポータブル実行可能ファイルです。

Windows Server Dockerイメージにミニフィルターファイルシステムドライバーをインストールして実行することは可能ですか?

Dockerインスタンスで実行されているscコマンドの出力は次のとおりです。

C:\>sc start foo
SERVICE_NAME: foo
        TYPE               : 2  FILE_SYSTEM_DRIVER
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :
C:\>sc query foo
SERVICE_NAME: foo
        TYPE               : 2  FILE_SYSTEM_DRIVER
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\>fltmc
The FltMgr.sys driver is not currently loaded.

1
oleksii

現在、Windowsコンテナにドライバをインストールする方法はありません。

ただし、Windowsのコンテナーは、ホストOSに存在するドライバーを利用できます。

Windowsコンテナのリバースエンジニアリングに関するUnit42のブログ投稿では、Windowsコンテナの内部動作について説明しています。これは、フィルタリングがシステムコールレベルで発生することを示しています。

危険なシステムコールがたくさんあり、呼び出しプロセスまたはスレッドがサイロ内にあるかどうかを判断するための複数のカーネル関数があります。コンテナ内にドライバをロードする特定のケースでは、Windowsがカーネルに十分なチェックを持っていることがわかりました。これは、他の多くのシステムコールにも関連しています。この場合、IopLoadDriverImageが実際にカーネルドライバーイメージをロードするために呼び出す関数であるNtLoadDriverは、呼び出しプロセスがサイロ内にあるかどうかを示す値を返すだけです。

詳細については、ブログ投稿全体をここで見つけることができます: Windowsコンテナのリバースエンジニアリングから学んだこと

1
J91321