我正在开发一个Java程序,允许教师和管理员控制学生的权限和访问权限。我有一个服务器和一个客户端,但我的问题是学生可以通过taskmanager简单地关闭限制程序。我已经阻止了cmd和powershell,因此无法访问它们。我可以阻止任务管理员,但我相信这种资源比非资源更有利。
我知道rootkit可以隐藏进程,但它具有侵入性。有谁知道我可能采取的方法来解决这个问题。也许创建一个"任务管理器"在隐藏基本流程的java中?
非常感谢任何帮助或指导。感谢。
答案 0 :(得分:5)
如果您可以让您的学生以有限的权限(非管理员帐户)运行并在系统(管理员)帐户下运行您的警卫,他们将无法杀死警卫。其余的很容易。正如Ravi Thapliyal正确提到的那样,这应该是你的第一道也是唯一的防线。如果出于某种原因不能选择......
如果您无法阻止任意软件的安装,那么您可以轻松做到的最好的事情就是创建两个进程来监视彼此的存在并终止产生它们的进程。当一个人死亡时,另一个人应该生成两者的新副本,然后自行终止。将它们命名为Tuck and Hood(或任何两个看似无关且不可靠的名称,按字母顺序彼此远离)。特别是当结合看起来专业的错误信息(“试图......已被发现”)时,这应该会阻止大多数学生。
如果您可以阻止安装任意软件,则可以阻止shift-clicks和ctrl-clicks以及其他好东西在已安装的任务管理器中执行多项选择。如果你可以使用其他更直接,更直接的篡改,你应该。或者只是阻止所有其他任务管理器并按照您的建议编写自己的任务。
你可以从story of Robin Hood and Friar Tuck中获取灵感,这一过程很难终止。
此病毒所做的恶作剧清单是非常有趣的阅读,但有趣的部分在这里:
......当Robin Hood被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环回来同步它们的终止,以避免它们被立即杀死。但是,当进程终止时,这不起作用,而不是告诉退出。
另一个潜在的问题是学生可能决定删除保护程序可执行文件,然后将其删除。这应该通过适当的文件锁定来处理。但是,如果您的操作系统允许这样做,您需要自己预防。但是,如果您的操作系统允许删除任意文件,即使它们当前正在运行可执行文件,所有投注都将关闭。