如何阻止USB以阻止笔式驱动器和外部硬盘驱动器

时间:2011-07-19 08:44:10

标签: c# security windows-services registry code-access-security

我想制作一个阻止USB的程序,以便没有人可以访问USB端口来传输媒体。

我不想阻止BIOS中的USB端口,因为我使用USB键盘和鼠标。

注意:我想为所有系统授予管理员权限,但是想要阻止USB。在我的办公室,人们需要管理员权限才能访问其他注册表和Windows服务,因为这些是程序员。很少像Norton这样的防病毒软件具有阻止USB的选项,无论系统是在管理员还是用户模式下运行。在此系统中,每个系统都运行Client Antivirus,Server Antivirus在Server中运行。我们在服务器中进行设置,在所有客户端中USB被阻止。现在请不要说有Norton Antivirus :)我想知道必须有像Nortu Antivirus这样的Fundu程序员。

到目前为止我为实现这一目标做了什么。

我创建了两个Windows服务。一项服务是使用定时器将USBSTOR的Start值连续变为4,以便始终禁用USB。第一项服务是连续检查第二项服务是否正在运行。如果没有,那么他们正在向我发送通知邮件,其中有人试图停止该服务。

第二项服务是连续检查第一项服务是否正在运行。如果没有,那么他们就会向我发送通知邮件。

我这样做是为了让人们无法停止服务以取消阻止USB。

现在问题是人们可以禁用我的服务,服务将无法正常工作。在此阶段,服务的状态正在运行但实际上已禁用。所以我只能从我的服务的注册表项(开始)检查STATE(已禁用/已启用/自动),该服务位于

位置
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/MyServiceName

如果Start的值是2(自动),3(手动),4(禁用),我们可以每2秒检查一次我们的服务(例如)是否将Start值更改为4,如果是,那么我们可以将其重置为2。

但问题是,从服务我能够访问USBSTOR的值而不是任何服务的注册(由于安全问题)

我使用此代码访问具有写入权限的USBSTOR注册表

Microsoft.Win32.RegistryKey key;
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.WriteKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\services\\USBSTOR", true);
key.SetAccessControl(rs);
key.SetValue("Start", "4",RegistryValueKind.DWord);

此代码工作正常。 (我将此代码保留在计时器功能中,每次启动值= 4,如果任何第三方工具试图通过注册表修复启用USB,则每次都阻止USB)

但问题是我希望在有人禁用服务时收到通知。我无法访问

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/MyServiceName

由于Windows创建的安全性而导致的注册表。

但是通过Windows应用程序,我们可以访问

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/MyServiceName

注册表。所以我创建了一个应用程序,它将在每次启动时运行,并检查是否有人禁用了阻止USB的服务。

但这里也有问题是用户可以去

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run

并删除我的密钥以阻止我的应用程序运行。

现在我的一个长篇故事后的实际问题是

  1. 如何阻止USB,以便任何人都无法访问它 [我们可以通过在硬件级别阻止它或通过在其驱动程序中进行一些更改来阻止它。如果是,那么如何?]

  2. 我们可以制作一个无法禁用的Windows服务吗? [如果是,那么如何?我们可以使它CanPauseAndContinue = False,CanShutDown = False,CanStop = False。但有没有办法避免禁用它?]

  3. 我们可以阻止访问注册表(特定密钥) [防病毒软件可以做到这一点,然后他们如何做到这一点?有没有人有这样的想法或知识?我想如果有人试图编辑USBSTOR值,那么它必须说Access被拒绝了]

  4. 请邀请每个极客,程序员,黑客回答这个问题。 通过回答这个问题,各种新手也会想到制作安全软件。请尝试解决我的问题。

    先谢谢。

    • 的Rahul

2 个答案:

答案 0 :(得分:0)

您可以检测并删除大容量存储设备的任何USB驱动程序。如果重新安装驱动程序,您可以自动删除它,甚至可以监视插入的新硬件。如果它是基于USB的,则通过API调用禁用它。

答案 1 :(得分:0)

您可能只是用垃圾覆盖USBSTOR.SYS,或者完全删除它(确保同时也核对SFP的副本)。

相关问题