验证驱动的调用者
有很多驱动程序加载后,会在驱动程序入口函数DriverEntry中创建驱动设备,并创建符号链接,同时还会指定派遣例程。这样一来,所有用户态程序都可以通过DeviceIoControl函数,调用该驱动的派遣例程。即存在Ring3恶意调用Ring0驱动派遣例程的问题,对于这种调用Ring0程序应进行验证和过滤。
作为不够健壮的第三方驱动程序,更容易因为这种恶意调用被干扰,发生逻辑错误,甚至触发可能存在的内核漏洞。因此需要考虑驱动程序的通信对象和调用来源,在派遣例程中对此进行必要的安全验证和过滤。
验证和过滤的方法有很多,例如检查调用者进程的PEPROCESS,进程文件的MD5,等等。除此之外,还可以考虑用户态程序和驱动程序的通信加密,对于解密失败或非法通信数据的情况可以不予处理。
本文节选自《0day安全:软件漏洞分析技术(第2版)》一书。
图书详细信息:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-701890
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-701892/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13164110/viewspace-701892/