【内网渗透】— 权限提升分析及防御(6)
前言
在Windwos中,权限大概分为四种,分别是Users、Administrator、System、TrustedInstaller。在这四种权限中,我们经常接收到的是前三种,下面我们对这几种权限进行分析:
- Users:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
- Administrator:管理员权限,可以利用Windows的机制将自己提升为System权限,以便操作SAM文件等。
- System:系统权限,可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
- TrustedInstaller:Windows中的最高权限,对系统文件,即使拥有System权限也无法修改,只有拥有TrustedInstaller权限才可以修改系统文件。
低级别权限将使得渗透测试受到很多限制,因此,在渗透测试中,熟悉提权操作对渗透测试工作有很大的帮助,提升权限的方式分为以下两类:
- 纵向提权:低权限角色获得高权限角色的权限。例如,一个Webshell权限通过提权,拥有了管理员权限,这种权限就是纵向提权,也称为权限升级。
- 横向提权:获得同级别角色的权限。例如,在系统A中获得了系统B的权限,就称为横向提权。
常见的权限提升方法有系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、Web中间件漏洞提权、DLL劫持提权、滥用高权限令牌提权、第三方软件/服务提权等,下文我们将对一些常见的提权方法及防范进行分析。
系统内核溢出漏洞提权分析及防范
系统内核溢出漏洞提权分析
系统内核溢出漏洞提权是一种通用的提权方法,攻击者可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁——即使微软已经针对某个漏洞发布了补丁,但如果系统没有立即安装补丁,就会让攻击者有机可乘。然而,这种提权方法也存在一定的局限性——如果目标系统的更新工作较为迅速和完善,那么攻击者想要通过这种方法提权,就必须找到该系统存在的0day漏洞。
知识点
“WMIC”是”Windows Management Instrumentation Command-line”的缩写,WMIC是Windows平台上最有用的命令行工具,使用WMIC,不仅可以管理本地计算机,还可以管理同一域内的计算机(需要一定的权限),而且在被管理的计算机上不必事先安全WMIC。
WMIC在信息收集和后渗透测试阶段是非常实用的,可以调取和查看目标机器的进程、服务、用户、用户组、网络连接、硬盘信息、网络共享资源、已安装的补丁、启动项、已安装的软件、操作系统的相关信息和时区等。
系统内核溢出漏洞提权防范
在关于此提权方式的分析中已经提到过了,防范的最好方法就是按时打官方发布的最新补丁O(∩_∩)O
Windows操作系统配置错误利用分析及防范
在Windows操作系统中,攻击者通常会对系统内核溢出漏洞来提权,但是如果无法通过系统内核溢出漏洞提取所在服务器权限的情况,就会利用系统中的配置错误来提权,Windows操作系统中常见的配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等…
系统权限配置错误
Windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务是以System权限运行对的,因此,其文件夹、文件和注册表键值都是受强访问控制机制保护的。但是,在某些情况下,操作系统中仍然存在一些没有得到有效保护的服务。
系统服务权限配置错误(可写目录漏洞)有如下两种可能:
- 服务未运行:攻击者会使用任意服务替换原来的服务,然后重启服务。
- 服务正在运行且无法终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用DLL劫持技术并尝试重启服务来提权。
注册表键AlwaysInstallElevated
注册表键AlwaysInstallElevated是一个策略设置项。Windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限对的用户都能以NT AUTHORITY/SYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件。
PathAlwaysInstallElevated漏洞产生的原因
该漏洞产生的原因是用户开启了Windows Installer特权安装功能。
Windows Installer知识点介绍
Windows Installer 是Windows操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer除了是一个安装程序,还用于管理软件的安装、管理软件的安装、管理软件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等。
Windows Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分,它们是一起工作的。Windows Installer 通过 Msiexec.exe安装 MSI文件包含的程序。MSI文件是 Windows Installer的数据包。它实际上是一个数据库,包含安装和卸载软件时需要使用的大量指令和数据。Msiexec.exe用于安装MSI文件,一般运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单的说,双击MSI文件就会运行Msiexec.exe。
防范PathAlwaysInstallElevated漏洞的方法
禁用注册表键AlwaysInstallElevated。
可信任服务路径漏洞
可信任服务路径漏洞分析
可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows 文件路径解析的特性,并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行性文件没有正确的处理所引用的完整路径名,这个漏洞就会被攻击者利用上传任意可执行文件,也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务是有漏洞的。
该漏洞存在如下两种可能性:
- 如果路径与服务有关,就创建任意一个服务或者编译Service模板
- 如果路径与可执行文件有关,就任意创建一个可执行文件
可信任服务路径漏洞防范
可信任服务路径漏洞是由开发者没有将文件路径用引号引起来导致的。将文件路径用引号引起来,就不会出现这种问题了。
自动安装配置文件
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会会用脚本批量部署的方法。这一过程中,会使用安装配置文件。这些文件包含所有的安装配置信息,其中的一些还可能包括本地管理员的账号和密码等消息。在进行渗透测试中,可以找到此类相关的文件进行分析。
计划任务
可以使用命令 :schtasks /query /fo LIST /v ,查看计算机的计划任务,如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序性覆盖原来的程序,这样,在计划任务下次执行时,就会以高权限来运行恶意程序。
组策略首选项提权分析及防范
组策略首选项提权简介
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。
在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但是所有机器的本地管理员密码都是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中的所有机器的本地管理员密码。
针对组策略首选项提权的防御措施
在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。
此外,需要对访问权限进行设置,具体建议如下:
- 设置共享文件夹SYSVOL的访问权限
- 将包含组策略密码的xml文件从SYSVOL目录中删除
- 不要把密码放在所有域用户都有权访问的文件中
- 如果需要更改域中机器的本地管理员密码,建议使用LAPS
绕过UAC提权分析及防范
UAC简介
UAC(User Account Control,用户账户控制)是微软为提高系统安全性在Windows Vista中引入的技术。UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作系统启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行修改。
在Windows Vista及更高的版本的操作系统中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在收到安全威胁时造成的损害最小。
UAC有如下四种设置要求:
- 始终通知:这是最严格的要求,每当有程序使用高级别的权限时都会提示本地用户。
- 仅在程序试图更改我的计算机时通知我:这是UAC的默设置。当本地的Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别权限时,会提示本地用户。
- 仅在程序试图更改我的计算机时通知我(不降低桌面亮度):与上一条设置的要求相同,但是在提示时用户不简单桌面的亮度。
- 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行。
绕过针对UAC提权的防御措施
在企业环境中,防止绕过UAC的最好办法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。
在家庭网络环境中,建议使用非管理员权限进行日常办公与娱乐活动。使用本地管理员权限登录的用户,要将UAC设置为”始终通知”或者删除该用户的本地管理员权限。
此外,可以使用微软的EMET或者MalwareBytes来更好地防范0day漏洞。
令牌窃取分析与防范
令牌窃取提权简介
令牌(TOKEN)是指系统中的临时秘钥,相当于用户和密码,用于决定是否允许那个钱请求及判断当前请求是属于那个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源,这些令牌将持续存在域于系统中(除非系统重新启动)。
令牌最大的特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备。会话令牌(Session Token)是交会话中唯一的身份标识符。
伪造令牌攻击的核心是Kerberos协议。Kerberos协议是一种网络认证协议,其设计的目的是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。
客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。
令牌窃取提权的防御措施
针对令牌窃取提权的防御措施如下:
- 及时安装微软推送的补丁
- 对于来路不明的或者危险的软件,既不要在系统中使用,也不要在虚拟机中使用
- 对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息
- 对于令牌,应采取加密存储及多长验证保护
- 使用加密链路SSL/TLS传输令牌,以防止被中间人窃听
无凭证条件下的权限获取分析及防范
LLMNR和NetBIOS欺骗攻击的基本概念
LLMNR
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到DNS服务器恢复为止。从Windows Vista 版本开始支持LLMNR,LLMNR支持IPv6.。
NetBIOS
NetBIOS是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT以后版本的所有操作系统中均可使用NetBIOS。NetBIOS不支持IPv6。
Net-NTLM Hash
NTLM Hash是指Windows 操作系统的Secutiry Account Manager 中保存的用户密码的散列值。NTLM Hash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTLM Hash是指在网络环境中经过NTML认证的散列值。使用Responder抓取的通常就是Net-NTLM Hash。
LLMNR和NetBIOS欺骗攻击分析
假设目标网络的DNS服务器发生故障而无法提供服务时,会退回LLMNR和NBT-NS进行计算机名称解析。
Responder是监听LLMNR和NBT-NS协议的工具之一,能抓取网络中所有的LLMNR和NBT-NS请求并进行响应,获取最初的账户凭证。
在渗透测试中,使用Responder并启动回应请求功能,Responder会自动回应客户端的请求并声明自己就是被输入了错误计算机名的那台机器,然后尝试建立SMB连接。客户端会发送自己的Net-NTLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash。