【发布时间】:2010-12-29 14:07:10
【问题描述】:
我为防御系统、防病毒、反恶意软件等编写程序。我在通过 tast manager->Kill Process 杀死防御进程时遇到问题。我测试了一些防病毒软件,但它们不允许我杀死他的进程。我只能在服务中阻止他们。我如何为我的程序创建这种防御。谢谢!
【问题讨论】:
标签: security defensive-programming
我为防御系统、防病毒、反恶意软件等编写程序。我在通过 tast manager->Kill Process 杀死防御进程时遇到问题。我测试了一些防病毒软件,但它们不允许我杀死他的进程。我只能在服务中阻止他们。我如何为我的程序创建这种防御。谢谢!
【问题讨论】:
标签: security defensive-programming
通过调用 TerminateProcess (Win32 API) 来停止进程。默认情况下,不可能杀死在与发出对 TerminateProcess 的调用的进程不同的安全上下文下运行的进程。
可以配置用户模式运行的服务(使用服务控制管理器),以便在有人终止服务时重新启动它。但是,如果您不希望从服务控制管理器界面或使用“net stop”命令停止服务,则可以在创建服务时适当设置SERVICE_STATUS结构的“dwControlsAccepted”字段。
还要考虑到通过预先启用调试权限可以结束任何进程,即使它是服务或系统进程。此权限分配给管理员并在访问令牌中禁用。虽然任务管理器不使用调试权限,但 KILL 实用程序(随 windows 资源工具包提供)可以。
【讨论】:
您观察到的情况对于服务应用程序来说很常见,即您需要为此提供服务。
防病毒软件通常使用几个内核模式驱动程序(网络过滤器、文件系统过滤器等),它们具有检查用户模式进程是否可用的附加功能,如果没有,它们会重新启动它(它们还控制执行服务的状态)。
服务还可以监视 UI 进程的存在并重新启动它。而 UI 进程又可以检查服务的状态。并行停止两个进程是相当棘手的(尽管可能),所以这个方案也可以工作。
我猜你会使用相同的架构。
但总的来说,rootkit 绕过了所有这些技巧,而 rootkit 是对现代计算机构成最大威胁的东西。
【讨论】: