欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

对Avira VPN权限提升漏洞的分析及存疑

来源:本站整理 作者:佚名 时间:2020-02-06 TAG: 我要投稿

逻辑漏洞及分析方法
区别于常规的内存型漏洞,逻辑漏洞通常是指通过滥用系统机制,歪曲程序设计者意图,实现设计者意料之外目的的严重的软件缺陷。逻辑漏洞通常源于程序设计逻辑的不完备、验证的的不严格或者是由于系统测试的不充分而导致的。
关注逻辑漏洞一方面是这种类型的漏洞广泛存在,满足一定的条件时漏洞利用非常简单、稳定;另一方面也是因为由于软件安全性的增强、各种内存防护措施的加入使得内存性漏洞的发现、利用都很困难。因此,目前逻辑漏洞的挖掘和利用越来越引起人们的注意。
逻辑漏洞通常都与系统资源操作权限管理上的缺陷有关。常见的逻辑挖掘模型是通过研究目标与系统交互的接口与方法(也就是通常所说的攻击界面),筛查对这些接口的访问权限的分配及管理是否存在安全缺陷,结合存在问题的上下文环境研究漏洞的利用方法。形成了逻辑类漏洞挖掘的基本流程和挖掘模型。

目前,已经有一些成熟的工具可用于执行系统攻击界面的查找,如NtObjectManager、OleViewDotNet等。由于Powershell具有脚本编写方便灵活点,同时又能够充分利用.Net类型和COM对象特性,能简单地与各种系统交互,完成各种复杂的、自动化操作的特点,以上工具都使用PowerShell来实现。在理解windows系统内部对象管理方法的基础上,灵活应用这些挖掘工具和PoweShell提供的一些内置命令就能够方便地完成对目标系统攻击界面的查找,并且辅助研究者确定是否存在潜在的安全漏洞。
最近网上公布了Avira VPN服务存在权限提升漏洞,初略看了一些觉得文章对漏洞的成因说得很清楚,很符合逻辑漏洞的特点,研究者对漏洞的分析、利用方面也有自己的特点。但是细想来对文章部分内容也存有一定的疑惑,于是准备对这个漏洞进行一番验证。验证环境为
OS:Windows 7 6.1 Build 7601
Avira:Phant Vpn 2.28.3.20557
 
漏洞基本描述
漏洞存在的主要成因是,当Avira VPNService启动时,会检查是否要安装升级程序。服务更新程序位于C:\ProgramData\Avira\VPN\Update目录下,而该目录可以被低权限用户写。
同时,VPNServices实现的一些反利用措施能够被绕过,从而造成攻击者通过放置一个有效的Avira可执行程序及一个恶意的dll文件到“C:\ProgramData\Avira\VPN\Update”目录下。在VPN服务执行更新的过程中,借助dll劫持实现以System权限执行代码。
在Windows各对象的访问权限中,安全研究人员通常较为关心攻击者是否拥有目标对象的写权限。NtObjectManager模块提供了用于查证目标对象访问权限的Cmdlet—GetAccessibleFile,并且还特别提供了Pid参数用于查证进程的访问权限。通常情况下,该参数可以指定一个沙箱进程或者低权限进程。如,以下命令可以列举出对Windows\System32目录下具备写权限的所有目录及文件对象。
Get-AccessibleFile \??\c:\windows\system32 -AccessRights WriteData -DirectoryAccessRights AddFile -Recurse -ProcessIds 1234
在笔者的实验环境中,新安装的Avira默认情况下VPN下并不存在Update目录。而当Update目录出现时,只有Administer/system/Service才具有对该目录的控制权限,普通用户根本无法访问。


笔者估计是Avira版本较新,补丁已经被修补的原因。网上下载的其他Avira版本及单独的Avira.VpnService安装程序,在安装过程中都会先到官方网站上下载最新的Avira.VpnService,从而使得复现这个漏洞比较困难。
 
关于漏洞查证的基本步骤
逆向Avira.VpnService时,发现该程序是使用解释型语言编写的,使用Reflector或者IL 5.0可以得到很好的反编译效果。在IL中选择使用C#语言进行反编译,可以得到可读性非常好的源代码,稍微具备C#的知识都能完成该代码的阅读与分析。
当Phantom VPN Service启动的时候,首先会对检查当前是否存在更新文件,通常更新文件存放在C:\ProgramData 目录下。执行文件检查的函数是VPNUpdater.UpdateProduct(),该函数最终会调用“Updater.UpdateToNewPackageIfValid()”处理与升级相关的逻辑。

首先调用Updater.CheckForDownloadedUpdatePackage()对升级文件进行检查,检查是否在update目录下存在一个名为AviraVPNInstaller.exe的升级文件,然后再检查该文件是否已经完成安装。

如果更新程序的版本大于“Avira.VPNService.exe”的版本,那么说明文件没有被安装,要执行安装过程。否则说明无需安装,直接删除下载的安装程序包。

如果升级文件存在且还未被安装,那么服务将执行升级文件夹锁闭过程,使得低权限用户不具有对该目录的写权限(确保在升级前不被修改)。函数“Updater.IsUpdateFolderAccessRestricted()”首先检查目录的所有者是否为如下三个用户NT AUTHORITY\SYSTEM, NT  AUTHORITY\SERVICE或者 Administrators之一(以下称三个特定用户)。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载