基于进程树的用户帐户保护
基于进程树的用户帐户保护
地狱门神
Vista的UAC功能虽然从技术上讲,对恶意程序有一定的防护作用,但是使用过于麻烦。
我最近试了一下Vista,感觉应该可以建立一个白名单,像Windows自带的防火墙一样。Windows XP自带的防火墙虽然没有什么用,但是似乎也没有人会主动把它关掉。
网上也有人和我观点一样,但是有人提出一个问题:如果把Microsoft的format命令加入白名单,病毒调用这个程序怎么办。
下面我提出一种设计,可以解决这个问题。
Windows的进程结构是树状的,每个进程有一个母进程(系统内核ntdll.dll除外)。所以我们可以对一个进程链进行信任(和禁止)。进程链最后可以是操作系统调用。
比如,我们可以信任这些进程链:
内核——Explorer——系统管理
内核——任务管理器
内核——cmd——format
内核——Microsoft更新程序——修改exe, dll等文件
内核——Microsoft更新程序——在系统文件夹中创建exe, dll等文件
内核——受信任的驱动安装程序——在系统文件夹中创建exe, dll等文件
我们可以禁止这些进程链:
内核——任意程序——format
内核——任意程序——修改exe, dll等文件(注意,修改不是删除、创建,这样可以防止编译器被阻止)
内核——任意程序——在系统文件夹中创建exe, dll等文件
内核——任意程序——在注册表非CURRENT_USER部分进行修改
这里遵守“特别的规则覆盖通用的规则”的和IP规则一样的规则。
这些进程链可以基于exe文件的Hash列来实现(Windows XP的组策略中软件限制策略就可基于Hash列),文件Hash一旦变化,就自动失去信任。也可以基于强名称和证书,对某些软件商(如Microsoft)进行信任。
这样,就可以防止恶意软件调用受信任软件和系统API进行恶意操作。
为了防止误操作,我们可以让一个软件至少三次需要提升权限时才允许将其加入白名单。
黑名单可以用于直接杀灭恶意软件。
有人想到反例请告诉我。