我们有一个需要驱动程序的应用程序。作为实验和测试目的,我们考虑使用基于的 docker 映像来部署它mcr.microsoft.com/windows/servercore:1903-amd64
。主机操作系统是 Windows 10 1903,这是一台开发笔记本电脑。该驱动程序是一个 minifilter 文件系统驱动程序,似乎安装正常,但启动失败。该应用程序本身是一个在 x64/x86 上运行的 32 位可移植可执行文件。
是否可以在 Windows Server docker 镜像中安装并运行 minifilter 文件系统驱动程序?
在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
目前无法在 Windows 容器中安装驱动程序。
但是 Windows 上的容器可以利用主机操作系统上存在的驱动程序。
Unit42 的博客文章介绍了 Windows 容器的逆向工程,其中描述了 Windows 容器的一些内部工作原理。文章指出,过滤发生在系统调用级别:
有许多危险的系统调用和多个内核函数可用于确定调用进程或线程是否位于 silo 内。对于在容器内加载驱动程序的具体情况,我发现 Windows 在内核中确实进行了充分检查,这也与许多其他系统调用相关。在这种情况下,实际加载内核驱动程序映像的
IopLoadDriverImage
函数NtLoadDriver
调用仅返回一个值,指示调用进程是否位于 silo 内。
您可以在此处找到完整博客文章以了解更多详细信息:我从逆向 Windows 容器中学到的东西