我正在用 Java 开发一个程序,允许教师和管理员控制学生的权限和访问。我有一个服务器和一个客户端,但我的问题是学生可以通过任务管理器简单地关闭限制程序。我已经阻止了 cmd 和 powershell,所以它们无法访问。我可以阻止任务管理器,但我相信这个资源比没有更有益。
我知道 rootkit 可以隐藏一个进程,但它是侵入性的。有谁知道我可能采取的解决这个问题的方法。也许在java中创建一个隐藏基本进程的“任务管理器”?
非常感谢任何帮助或指导。谢谢。
我正在用 Java 开发一个程序,允许教师和管理员控制学生的权限和访问。我有一个服务器和一个客户端,但我的问题是学生可以通过任务管理器简单地关闭限制程序。我已经阻止了 cmd 和 powershell,所以它们无法访问。我可以阻止任务管理器,但我相信这个资源比没有更有益。
我知道 rootkit 可以隐藏一个进程,但它是侵入性的。有谁知道我可能采取的解决这个问题的方法。也许在java中创建一个隐藏基本进程的“任务管理器”?
非常感谢任何帮助或指导。谢谢。
如果您可以让您的学生以有限的权限(非管理员帐户)运行并在系统(管理员)帐户下运行您的守卫,他们将无法杀死守卫。剩下的就很容易了。正如Ravi Thapliyal正确提到的,这应该是您的第一道也是唯一一道防线。如果出于某种原因这不是一个选择...
如果您无法阻止任意软件的安装,那么您可以轻松做的最好的事情就是创建两个相互监视存在的进程并终止产生它们的进程。当一个死亡时,另一个应该生成两者的新副本,然后自行终止。将它们命名为 Tuck 和 Hood(或按字母顺序排列的任何两个看似无关且不可疑的名称)。尤其是与看起来很专业的错误消息(“检测到...的尝试”)相结合时,这应该会阻止大多数学生。
如果您可以阻止安装任意软件,则可以阻止 shift-clicks 和 ctrl-clicks 以及其他好东西,以在已安装的任务管理器中执行多项选择。如果您可以使用其他一些更直接和直接的篡改,您应该这样做。或者就像您建议的那样,阻止所有其他任务管理器并编写自己的任务管理器。
您可以从Robin Hood 和 Friar Tuck 的故事中获得灵感,这两个过程尤其难以终止。
这个病毒的恶作剧列表是一个非常有趣的阅读,但有趣的部分在这里:
...当罗宾汉被 X'ed 时,发生了以下一系列事件:
!X id1 id1: Friar Tuck... I am under attack! Pray save me! (Robin Hood) id1: Off (aborted) id2: Fear not, friend Robin! I shall rout the Sheriff of Nottingham's men! id3: Thank you, my good fellow! (Robin)
每个幽灵作业都会检测到另一个已被杀死的事实,并会在几毫秒内启动最近被杀死的程序的新副本。 杀死两个幽灵的唯一方法是同时杀死它们(非常困难)或故意使系统崩溃。
...
基本思想(让两个进程相互恢复)仍然可行,但是任务管理器的形式存在一个主要障碍,实际上可以同时杀死两个进程。但是,在这一点上,您已经为自己做了一个很好的防御,特别是如果这两个进程在进程列表中没有相邻出现。而且,当然,您不必停在两点。除非用户找到所有这些,否则它们都会存活下来。
然而,用户可以选择多个进程并立即终止它们的事实是不幸的。全局禁用 Shift-clicks 和 Ctrl-clicks 会导致过多的附带损害。此外,定制的任务管理器(或合适的基于控制台的)可以轻松绕过该任务管理器。将世界上的每个任务管理器都列入黑名单,以防止多次选择——好吧,你玩过打地鼠游戏吗?
但是,如果您可以阻止安装和执行任意软件(这几乎绝对是阻止所有攻击所必需的),您可以仅针对和篡改系统中已经存在的任务管理器。如果你对它们进行了足够的篡改,你甚至不需要两个进程来相互保护。但是,如果您有两个进程,则足以杀死任务管理器的多选功能。另外,请注意他们的“杀死进程树”功能。
在对退出信号做出反应之前,进程可以花费任意多的时间。您可以考虑在两个进程之间使用 TCP 环回来同步它们的终止,以避免它们被立即杀死。但是,当进程终止时,这不起作用,而不是被告知退出。
另一个潜在的问题是学生可能决定删除守卫程序可执行文件,然后将其杀死。这应该通过适当的文件锁定来处理。但是,如果您的操作系统允许这样做,您需要自己阻止它。但是,如果您的操作系统允许删除任意文件,即使它们当前正在运行可执行文件,那么所有的赌注都将失败。