基于即时加密/解密系统的USB存储设备域身份验证






4.22/5 (7投票s)
在域内,对USB上的文件进行即时加密/解密。
引言
即插即用USB大容量存储设备已成为最大的信息安全威胁之一。USB大容量存储设备(MSD)可以携带大量数据,这对组织的 डेटा保密策略至关重要。USB驱动器体积小巧、价格便宜、易于购买、使用方便,并且可以携带大量数据,因此可用于完整复制原始软件,或对机密文档构成威胁。
背景
处理大量业务相关敏感数据的IT和ITES组织必须考虑采取一切主动措施,通过部署端点安全解决方案来防御意外数据泄露或故意数据盗窃。我们已经探索了一段时间,寻找保护USB闪存驱动器数据泄露的具体方法。下面我们将介绍一种在组织的Windows域网络基础设施中防止这种情况发生的方法。
核心思想
核心思想是保护对组织来说敏感或可能敏感的数据。但遗憾的是!我们无法标记(或水印)敏感和非敏感文件,因为这需要一个更复杂的应用程序,并具备完整的对文件系统的审计能力。因此,我们一直在寻找一种能提供确定性安全性的更简单的方法。我们构思的想法是,加密从计算机写入USB MSD的所有内容,并反向解密为特定域的通信。这种加密/解密是即时进行的,无需用户干预。实现此任务的可能方法之一是结合使用用户模式NT服务和内核模式筛选驱动程序。下面我们将介绍核心概念以及一些伪代码。详细实现可在附件的源代码文件中找到。该项目的主要组成部分是:- 1) USB控制器NT服务:- 这是一个用C++和Win32 API编写的NT服务。它用于检测USB MSD插入计算机。此外,此服务还负责检查是否已登录有效域用户。如果登录了,则执行数据解密,否则不执行。 2) 文件系统筛选驱动程序(FSFD):- 此文件系统驱动程序模块负责处理从USB MSD读取/写入数据的加密和解密。加密和解密过程是即时进行的。
基本控制流
基本控制流将在以下步骤中解释:- 1. 系统启动时加载内核模式FSFD。 2. 用户模式NT服务(昵称为USB Controller)也会在系统启动时启动。 3. 我们的服务等待任何用户将USB MSD插入计算机。FSFD等待来自我们NT服务的IOCTL,以便它可以执行所需的操作(加密/解密)。 4. 用户插入USB MSD后,USB Controller服务会立即检测到,并检查用户是否为有效域用户。 5. 如果用户是有效域用户,则USB Controller会向FSFD发出信号,允许对从USB驱动器写入/读取的数据进行加密/解密。 6. 如果用户不是有效域用户,则写入USB驱动器的数据将被加密,但从驱动器读取的数据将不会被解密,因此用户将无法使用这些数据。注意:- 通过此解决方案实现的功能是,域相关数据将以有意义的格式提供给有效域用户。无效的域用户将看到数据是乱码……因为对他们来说数据是加密的。强大的加密算法意味着更强的安全性,几乎不可能破解。
USBController NT服务
首先,为什么需要服务?如果有人问我这个问题,我建议您先掌握好Windows基础知识……然后再阅读本文。是的!NT服务是所有安全软件的明显选择,因为NT服务是Windows NT/2K/XP/Vista中最可靠的用户模式应用程序,它提供了更灵活的启动选项,并在管理员权限下运行。下面我介绍的USB Controller服务在SYSTEM账户下运行(这是NT下权限最高的账户)。此服务设置为自动启动,以便Windows在启动时启动此服务。在service_main函数内部,我们使用RegisterDeviceNotification API注册设备通知。我在NotificationFilter.dbcc_classguid参数中提供了USB大容量存储设备的设备类GUID,以便接收属于此设备类的设备的通知。
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USBSTOR; //NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_CDROM; HDEVNOTIFY hDevNotify = RegisterDeviceNotification( sshStatusHandle, &NotificationFilter, DEVICE_NOTIFY_SERVICE_HANDLE);有关RegisterDeviceNotification的更多详细信息,请参阅MSDN上的API文档。(http://msdn2.microsoft.com/en-us/library/aa363431.aspx)每当Windows检测到任何USB MSD插入时,它会使用SERVICE_CONTROL_DEVICEEVENT事件调用我们服务的HandlerEx函数。在本例中,HandlerEx函数是service_ctrl()。此外,Windows还会提供收到的事件类型(DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE或其他)以及指向包含设备特定信息的缓冲区的指针。一旦收到设备到达事件,我们就会枚举登录的用户,并检查他们是否为有效域用户。此功能是通过LsaEnumerateLogonSessions和LsaGetLogonSessionData API实现的。LsaEnumerateLogonSessions枚举该计算机上当前活动的登录会话。除了活动目录用户登录会话外,此API还提供NT AUTHORITY域和NTLM域的本地计算机身份验证信息。在这里,关键是仅使用与我们需求相关的信息,而忽略其余信息。
PLUID sessions; ULONG count; retVal = LsaEnumerateLogonSessions(&count,&sessions);有关LsaEnumerateLogonSessions的更多信息,请参考其MSDN文档(http://msdn2.microsoft.com/en-us/library/aa378275.aspx)。LsaGetLogonSessionData获取使用LsaEnumerateLogonSessions API枚举的每个登录会话的信息。此信息包含域名和用于身份验证用户的身份验证包。此外,它还包含执行的登录类型(例如交互式登录)。
PSECURITY_LOGON_SESSION_DATA sessionData = NULL; retval = LsaGetLogonSessionData (session, &sessionData);有关LsaGetLogonSessionData的更多信息,请参考其MSDN文档(http://msdn2.microsoft.com/en-us/library/aa378290.aspx)。如果用户是有效域用户,那么我们获取USB驱动器的盘符,并将此盘符发送给我们的驱动程序。驱动程序使用它进行加密/解密。如果用户不是有效域用户,则从USB读取的数据不会被解密,用户看到的数据将是乱码,因为它是加密的。尽管上述API已为Windows Vista文档化,但我尚未在Vista上对其进行测试。USBCONTROLLER的已知限制:- 1. 对于启用了Windows Vista或XP快速用户切换的计算机,必须实现额外的逻辑来确定哪个登录用户插入了USB。也就是说,我们必须确定,例如,在4个用户会话中,哪个登录用户的会话当前处于活动状态。如果您想知道如何做到这一点,请给我发邮件。:D
USB文件系统筛选驱动程序
文件系统驱动程序的数据流通过两个不同的接口进行。它们是:a) IRP分派例程:b) FastIo例程。因此,文件系统筛选驱动程序必须通过拦截以下请求来工作:a) IRPs a.1)读取(完成例程)a.2)写入。b) FastIo b.1)FastIoRead b.2)FastIoWrite 拦截IRPs:a)读取IRP:在从磁盘读取时发生。在这里,我们在将缓冲区内容发送给应用程序之前对其进行解密。此操作在读取的完成例程中完成。b)写入IRP:在写入磁盘时发生。在这里,我们在将缓冲区内容发送到磁盘之前对其进行加密。此操作在写入分派例程中完成。拦截FastIos:a)FastIoRead:在从缓存读取时发生。我们在此解密缓冲区内容。b)FastIoWrite:在写入缓存时发生。在这里,我们在此加密缓冲区内容。除了这两个接口之外,操作系统可能会执行一些内存映射IO,其中数据的某些部分/映像文件被映射到OS内的内存空间。下次打开该文件时,打开请求不会到达文件系统筛选驱动程序,操作系统会将请求发送给VM管理器,要求其从内存中的映射部分提取所需数据。
筛选驱动程序的已知限制
1)在尝试卸载文件系统筛选驱动程序时,存在“未完成”IRP的问题。这阻止了驱动程序被干净地停止和卸载。 2)尽管已经处理了所有可能的路径,即IRPs、Fast IOs和内存映射IO,但仍然存在与.xls文件等某些文件的加密/解密相关的问题。
安装与运行
1)要安装USBController服务,请运行Installation.zip中的Install.bat文件。 2)要删除USBController服务,请运行Installation.zip中的Remove.bat文件。请注意,对于这两个步骤,USBController.exe应与Install.bat和Remove.bat位于同一目录中。
关于作者
该原型是在NEC HCL System Technologies Ltd,印度(NEC HCL ST)安全能力中心(SCC)负责人Alok Srivastava先生的指导下,由Rajesh Nath和Debabrata Chattopadhyay开发的。
您可以访问我们的网站 http://www.nechclst.in
历史
第一个版本。未来的版本将基于收到的评论/建议。