在Windows Vista系统中,微软推出了一项新的内核安全功能,称作是Integrity Levels,我们暂且叫他完整性级别
在Windows系统中,每个进程都有一个完整性级别:低,中,高,或者system级,一个较低的完整性级别进程不能把操作对象写入到一个较高的完整性级别。
在进程中,这就意味着一个较低的完整性级别的进程对于完整性级别较高的进程,无法拥有完整的访问和处理权限。这就是我本文要讲述的内容,低完整性级别的进程不能将DLL插入到比自己高完整性级别的进程中。
正常情况下,非提权进程在默认下是属于中等完整性级别。在这里我用我写的一个简单程序bpmtk将DLL操作插入到记事本进程里面去:
我的系统中默认cmd为中等完整性级别(程序bpmtk.exe进程是由cmd进程创建的),所以bpmtk也是中等完整性级别。由于记事本进程同样也是中等完整性级别,所以DLL注入成功。
为了更好的确定自己计算机上进程的完整性级别,我们可以安装一个查看进程完整性级别的程序Process Explorer:
现在我们再做的一个low(低)完整性级别cmd.exe和bpmtk.exe,进行相同的DLL注入操作。
有一个叫做icacls.exe的工具可以查看和设置一个进程的完整性级别,但我并不像更改我系统原先的cmd的完整性级别。好吧,我做了一个cmd.exe的副本就叫cmd-low-il.exe吧。我设置它为没有定义的完整性级别:
当我们使用icacls.exe将cmd-low-il.exe设置成为一个明确完整性级别的进程(low低完整性级别),中完整性级别就被低级别完整性取而代之了。这时候,所有由这个低完整性级别cmd程序cmd-low-il.exe创建的进程都将是low低完整性级别。
当然,你首先是需要有admin权限来将cmd-low-il.exe这个进程的完整性级别降级。
在这里你可以看到低级别完整性级别设置:
当我们运行cmd-il-low.exe的时候,它的完整性级别为低级别。由cmd-il-low.exe创建的bpmtk.exe这个进程的完整性级别也“被”降级为低级别了,bpmtk.exe无法再次将DLL插入到记事本程序中了。
当bpmtk.exe想要再次读取和获得记事本的操控权限的时候,就遇到了所谓的OpenProcess调试失败,访问被系统拒绝。
因为这个时候记事本的完整性级别仍然为中级别,但是bpmtk.exe已经被降级为低完整性级别了。无权读取和修改处理notepad.exe这个进程。
Comments





