File Protector演示步骤

2023 年 4 月 3 日 | 没有评论

下载 EaseFilter File Control Filter SDK 安装文件
下载 EaseFilter File Control Filter SDK压缩文件

File Protector Demo是使用EaseFilter File Monitor、File Control、File Encryption和Process Filter Driver SDK开发的,它演示了如何使用EaseFilter Filter Driver SDK来监视或控制Windows文件I/O。 文件保护工具可以实时监视或阻止文件更改和文件访问,获取所有注册的文件 I/O 请求的通知。 它可以捕获或阻止文件打开、文件创建、文件更改、文件读取、文件写入、查询文件信息、设置文件信息、查询安全信息、设置安全信息、文件重命名、文件删除、目录浏览和文件关闭I/ 奥请求。 您可以记录文件 I/O 信息,以了解谁、何时、访问了哪些文件。 这是 File Protector 演示工具的屏幕截图。

文件保护器全局设置

  1. 连接的最大线程数:过滤器驱动程序和用户模式服务之间有一个通信通道,过滤器驱动程序将通过该通道向用户模式服务发送文件 I/O 消息,这就是用户模式服务中处理消息的线程数。
  2. 最大连接超时:过滤驱动程序中的报文在通信通道队列中等待处理的最长时间。
  3. 卷已连接或已分离:启用该设置,可在有新卷被连接或已有卷被分离时收到通知。
  4. 阻止加密卷格式化:启用此标记,将阻止加密卷被格式化。
  5. 阻止 USB 读取:启用此标记,将阻止 USB 被读取。
  6. 阻止 USB 写入:启用此标记,将阻止 USB 被写入。
  7. 保护进程 Ids:防止进程被终止,为了更好地保护进程,需要将其作为 Windows 服务运行。

为File Protector设置过滤规则

过滤规则是一种基于文件名的文件控制策略,过滤驱动程序将根据文件名监视文件 I/O,命令如下,过滤驱动程序将只监视或控制符合过滤条件的文件。要监控文件 I/O,至少需要创建一条文件过滤规则。

  1. 包含文件过滤掩码:文件过滤规则是带有通配符的文件名。 每个过滤规则都有一个唯一的文件名过滤掩码,它不能与其他过滤规则重复。 如果文件名与包含文件过滤器掩码匹配,则仅过滤文件 I/O。
  2. 排除文件过滤掩码:如果不为空,则如果文件名与排除文件过滤掩码匹配,则文件 I/O 将被排除。
  3. include进程名:如果不为空,则只过滤include进程名列表中的进程发起的文件I/O。
  4. include进程Ids:如果不为空,则仅过滤include进程Id列表中的进程发起的文件I/O。
  5. 排除进程名称:如果不为空,则如果文件I/O是由排除进程名称列表中的进程发起的,则该文件I/O将被排除。
  6. 排除进程Ids:如果不为空,则如果文件I/O是由排除进程Id列表中的进程发起的,则该文件I/O将被排除。
  7. 包含用户名:如果不为空,则只过滤包含用户名列表中的用户名发起的文件I/O。
  8. 排除用户名:如果不为空,则如果文件I/O是由排除用户名列表中的用户发起的,则该文件I/O将被排除。
  9. CreateFile 过滤选项:如果它不为零,则仅过滤使用相同 DesiredAccess、Disposition 和 CreateOptions 打开的文件 I/O。

文件过滤规则的文件访问控制设置

为了控制文件访问并保护您的敏感数据,您可以在过滤规则中配置访问控制标志,也可以注册 pre-io 事件,在 pre-io 通知事件中允许或拒绝文件访问。 配置过滤规则的访问标志,可以防止您的文件被未经授权的进程或用户读取、写入、删除、重命名或更改。

设置文件控制访问标志

您可以在过滤器驱动程序中设置控制策略,过滤器驱动程序将根据过滤器规则设置的策略允许或阻止文件访问。 要为过滤器驱动程序设置控制过滤器规则,您可以设置或取消设置访问标志整数位以允许或阻止过滤器规则中的特定 I/O,如下所示。

  • ALLOW_ENCRYPT_NEW_FILE:启用该位,将启用加密功能,新创建的文件将被加密。
  • ALLOW_READ_ENCRYPTED_FILES:禁用该位,将阻止加密文件被解密,将返回原始加密数据。
  • DISABLE_ENCRYPT_DATA_ON_READ:禁用该位,如果启用了加密过滤规则,它将动态加密文件。
  • ENABLE_HIDE_FILES_IN_DIRECTORY_BROWSING:启用此位,如果添加了隐藏文件掩码,则隐藏文件夹目录列表中的文件。
  • ENABLE_REPARSE_FILE_OPEN:启用该位,如果添加了重新解析文件掩码,则将打开的文件重新解析为新文件名。
  • ALLOW_FILE_ACCESS_FROM_NETWORK:禁用该位,阻止通过 SMB 共享访问文件。
  • ALLOW_COPY_PROTECTED_FILES_OUT:禁用此位,阻止将文件复制出受保护的文件夹。
  • ALLOW_COPY_PROTECTED_FILES_TO_USB:禁用该位,阻止从 USB 驱动器复制文件。
  • ALLOW_OPEN_WTIH_ACCESS_SYSTEM_SECURITY:禁用该位,阻止使用文件安全访问权限打开文件。
  • ALLOW_OPEN_WITH_READ_ACCESS:禁用该位,阻止以读取访问权限打开文件。
  • ALLOW_OPEN_WITH_WRITE_ACCESS:禁用该位,阻止以写访问权限打开文件。
  • ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_ACCESS:禁用该位、阻止新文件创建或使用覆盖访问权限打开文件。
  • ALLOW_OPEN_WITH_DELETE_ACCESS:禁用该位,阻止使用删除访问权限打开文件。
  • ALLOW_READ_ACCESS:禁用该位,阻止读取文件数据。
  • ALLOW_WRITE_ACCESS:禁用该位,阻止写入文件。
  • ALLOW_QUERY_INFORMATION_ACCESS:禁用该位,防止查询文件信息。
  • ALLOW_SET_INFORMATION:禁用该位,防止文件信息被更改:更改文件属性、更改文件大小、重命名文件名、删除文件。
  • ALLOW_FILE_RENAME:禁用该位,阻止文件被重命名。
  • ALLOW_FILE_DELETE:禁用该位,阻止文件被删除。
  • ALLOW_FILE_SIZE_CHANGE:禁用该位,阻止更改文件大小。
  • ALLOW_QUERY_SECURITY_ACCESS:禁用该位,阻止查询文件安全信息。
  • ALLOW_SET_SECURITY_ACCESS:禁用该位,阻止文件安全信息被更改。
  • ALLOW_DIRECTORY_LIST_ACCESS:禁用该位,阻止正在浏览的目录。
    1. 为进程名称添加文件访问权限:可以根据进程名称将过滤规则中的文件访问权限设置为特定进程。 您可以允许或阻止对授权或未授权进程的特定文件 I/O。
    2. 根据 sha256 哈希值向进程添加文件访问权限:您可以将过滤规则中的文件访问权限设置为具有特定 sha256 哈希值的特定进程。 您可以允许或阻止对授权或未授权进程的特定文件 I/O。
    3. 根据证书名称为进程添加文件访问权限:您可以将过滤规则中的文件访问权限设置为使用特定证书名称签名的特定进程。 您可以允许或阻止对授权或未授权进程的特定文件 I/O。
    4. 为进程Id添加文件访问权限:可以根据进程Id将过滤规则中的文件访问权限设置为特定进程。 您可以允许或阻止对授权或未授权进程的特定文件 I/O。
    5. 为用户名添加文件访问权限:可以根据用户名将过滤规则中的文件访问权限设置为特定用户。 您可以允许或阻止授权或未授权用户的特定文件 I/O。

在回调函数中控制文件访问

您可以注册 Pre-IO 操作来控制回调函数中的文件访问。 通过注册特定的I/O事件,您可以完全控制I/O,您的回调函数将为每个注册的I/O调用,您可以根据I/O信息允许、修改或阻止该I/O。

  • OnPreFileCreate:在文件创建 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件打开或创建。
  • OnPreFileRead:在文件读取 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件读取。
  • OnPreFileWrite:在文件写入 IO 写入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件写入。
  • OnPreQueryFileSize:在查询文件大小 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件大小。
  • OnPreQueryFileBasicInfo:在查询文件基本信息 IO 深入到文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件基本信息。
  • OnPreQueryFileStandardInfo:在查询文件标准信息 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件标准信息。
  • OnPreQueryFileNetworkInfo:在查询文件网络信息 IO 深入到文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件网络信息。
  • OnPreQueryFileId:在查询文件 Id IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件Id。
  • OnPreQueryFileInfo:在查询文件信息 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件信息。
  • OnPreSetFileSize:在设置的文件大小 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止更改文件大小。
  • OnPreSetFileBasicInfo:在设置文件基本信息 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件基本信息的更改。
  • OnPreSetFileStandardInfo:在设置文件标准信息 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件标准信息的更改。
  • OnPreSetFileNetworkInfo:在设置的文件网络信息写入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止更改文件网络信息。
  • OnPreMoveOrRenameFile:在文件移动或重命名 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件重命名。
  • OnPreDeleteFile:在文件删除 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止删除的文件大小。
  • OnPreSetFileInfo:在设置文件信息 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止文件信息被更改。
  • OnPreQueryDirectoryFile:在查询目录文件信息进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在浏览的目录。
  • OnPreQueryFileSecurity:在查询文件安全 IO 深入到文件系统之前触发此事件。 您可以在此回调函数中允许或阻止正在查询的文件安全性。
  • OnPreSetFileSecurity:在设置文件安全 IO 进入文件系统之前触发此事件。 您可以在此回调函数中允许或阻止更改文件安全性。

文件I/O事件的常用信息:

  1. IoStatus:这是 IO 完成状态,如果请求的操作成功完成,则为 STATUS_SUCCESS,或者为信息性、警告或错误 STATUS_XXX 值,仅对后 IO 有效。
  2. TransactionTime:此 IO 请求的事务时间(UTC)。
  3. FileObject:fileObject 是文件 I/O 从打开到关闭的唯一 ID。
  4. ProcessId:发起IO的进程Id。
  5. ProcessName:发起IO的进程名。
  6. ThreadId:发起IO的线程Id。
  7. UserName:发起IO的用户名。
  8. FileName:文件IO的文件名。
  9. FileSize:文件IO的文件大小。
  10. CreationTime:文件的创建时间(UTC)。
  11. LastWriteTime:文件的最后一次写入时间(UTC)。
  12. FileAttributes:文件IO的文件属性。
  13. CreateOptions:打开文件IO的文件创建选项。
  14. SharedAccess:文件打开的SharedAccess,请参考CreateFile windows API。
  15. IsRemoteAccess:指示打开的文件是否来自 SMB 网络。
  16. RemoteIp:打开文件的远程计算机的 IP 地址。 此功能仅适用于 Win7 或更高版本的操作系统。

文件保护器 C# 示例

以下示例创建一个过滤规则来保护运行时指定的目录。 设置过滤规则是为了保护文件夹免遭文件被重命名、删除、写入。 该组件在目录中注册了创建和删除 IO 回调事件。 如果文件被打开或删除,就会触发该事件,您可以在该事件中允许或阻止IO。


//A File Protector C# Example
The following example creates a filter rule to watch the directory specified at run time. 
The component is set to watch for all file change in the directory. If a file was changed, the file name, 
file change type, user name, process name will be printed to the console. 
The component also is set to watch the file open and file read IO, the IO was triggered, the file open and file read information will be printed to the console.
 
  
using System;
using EaseFilter.FilterControl;

namespace FileProtectorConsole
{
    class Program
    {
        static FilterControl filterControl = new FilterControl();

        static void Main(string[] args)
        {
            string lastError = string.Empty;
            string licenseKey = "Email us to request a trial key: info@easefilter.com";

            FilterAPI.FilterType filterType = FilterAPI.FilterType.MONITOR_FILTER|FilterAPI.FilterType.CONTROL_FILTER
                |FilterAPI.FilterType.PROCESS_FILTER|FilterAPI.FilterType.REGISTRY_FILTER|FilterAPI.FilterType.ENCRYPTION_FILTER;

            int serviceThreads = 5;
            int connectionTimeOut = 10; //seconds

            try
            {
                //copy the right Dlls to the current folder.
                Utils.CopyOSPlatformDependentFiles(ref lastError);

                if (!filterControl.StartFilter(filterType, serviceThreads, connectionTimeOut, licenseKey, ref lastError))
                {
                    Console.WriteLine("Start Filter Service failed with error:" + lastError);
                    return;
                }

                //the watch path can use wildcard to be the file path filter mask.i.e. '*.txt' only monitor text file.
                string watchPath = "c:\\test\\*";

                if (args.Length > 0)
                {
                    watchPath = args[0];
                }

                //create a file protector filter rule, every filter rule must have the unique watch path. 
                FileFilter fileProtectorFilter = new FileFilter(watchPath);

                //configure the access right for the protected folder

                //prevent the file from being deleted.
                fileProtectorFilter.EnableDeleteFile = false;

                //prevent the file from being renamed.
                fileProtectorFilter.EnableRenameOrMoveFile = false;

                //prevent the file from being written.
                fileProtectorFilter.EnableWriteToFile = false;

                //authorize process with full access right
                fileProtectorFilter.ProcessNameAccessRightList.Add("notepad.exe", FilterAPI.ALLOW_MAX_RIGHT_ACCESS);

                //you can enable/disalbe more access right by setting the properties of the fileProtectorFilter.

                //Filter the callback file IO events, here get callback before the file was opened/created, and file was deleted.
                fileProtectorFilter.ControlFileIOEventFilter = (ulong)(ControlFileIOEvents.OnPreFileCreate | ControlFileIOEvents.OnPreDeleteFile);

                fileProtectorFilter.OnPreCreateFile += OnPreCreateFile;
                fileProtectorFilter.OnPreDeleteFile += OnPreDeleteFile;

                filterControl.AddFilter(fileProtectorFilter);

                if (!filterControl.SendConfigSettingsToFilter(ref lastError))
                {
                    Console.WriteLine("SendConfigSettingsToFilter failed." + lastError);
                    return;
                }

                Console.WriteLine("Start filter service succeeded.");

                // Wait for the user to quit the program.
                Console.WriteLine("Press 'q' to quit the sample.");
                while (Console.Read() != 'q') ;

                filterControl.StopFilter();

            }
            catch (Exception ex)
            {
                Console.WriteLine("Start filter service failed with error:" + ex.Message);
            }

        }

        /// 

        /// Fires this event before the file was opened. 
        /// 

        static void OnPreCreateFile(object sender, FileCreateEventArgs e)
        {
            Console.WriteLine("OnPreCreateFile:" + e.FileName + ",userName:" + e.UserName + ",processName:" + e.ProcessName);

            //you can block the file open here by returning below status.
            e.ReturnStatus = NtStatus.Status.AccessDenied;

        }

        /// 

        /// Fires this event before the file was deleted.
        /// 

        static void OnPreDeleteFile(object sender, FileIOEventArgs e)
        {
            Console.WriteLine("OnPreDeleteFile:" + e.FileName  + ",userName:" + e.UserName + ",processName:" + e.ProcessName);

            //you can block the file being deleted here by returning below status.
            e.ReturnStatus = NtStatus.Status.AccessDenied;
        }
    }
}

最新文章

Process Monitor SDK
File Security Filter Driver SDK
Using EaseFilter Filter Driver SDK
EEFD Transparent File Encryption SDK
EaseFilter File Access Control SDK
EaseFilter File Access Monitor SDK
Process Control SDK
Registry Protection SDK 自动文件加密演示
文件保护器分步演示
文件监视器分步演示
文件访问控制列表
认证与授权
零信任文件访问安全
黑名单和白名单
网络文件监控和保护器
阻止文件访问 USB 驱动器
设置可信进程权限
使用标头加密文件
随时随地加密文件
跟踪应用程序中的文件更改
如何设置文件访问权限
文件访问过滤规则

文件知识库
  • 了解文件 I/O
  • 了解文件加密
  • 了解 I/O 系统
  • 了解IRP
  • IRP 与快速 I/O
  • 了解过滤器驱动程序
  • 过滤器驱动程序资源
  • 过滤器驱动框架
  • 隔离滤波器驱动器
  • 存储分层过滤驱动程序
文件加密
  • 了解文件加密
  • 了解 AES 加密
  • C# 中的文件加密
  • C++ 中的文件加密
  • BitLocker、EFS 与 EEFD
  • 对称加密
  • 非对称加密
  • 数字签名
  • EEFD透明文件加密開發包
  • EaseFilter文件監控開發包
  • EaseFilter文件訪問控制開發包
京公网安备 号    |    备案号:京ICP备09015132号-1024