翻译作者:askme765cs(信安之路红蓝对抗小组成员) 成员招募:信安之路红蓝对抗小组招募志同道合的朋友
这个系列的文章翻译由信安之路红蓝对抗小组的所有成员共同完成,后续将陆续发布,敬请期待!
远程桌面是攻击者最喜欢的访问方式之一,因为它允许仅使用鼠标和键盘来发现系统以及相邻主机(更少的足迹,不需要特殊的命令与实用程序)。此外,很少有公司可以真正区分合法和可疑的 RDP 活动,特别是如果它们依赖事件日志 4624/4625(仅在目标主机上记录日志而非在 DC 上,因此可能没有从所有工作站和服务器收集日志 - >没有生成警报)。
鉴于上述事实,寻找可疑的 RDP 活动非常重要。它可以帮助您确定最终受损的凭据(许多公司都有可公开访问的 RDP 服务器,如果没有得到适当保护,可能会被暴力破解)。在这篇报告中,我们将尝试涵盖以下技术:更改默认 RDP tcp 端口以绕过以下两个网络访问控制:阻止到3389端口的入站连接(如果有)以及基于基于 Netflow 网络流量分析数据的检测(其中目标端口为3389且 SourceIP 不是 Authorized_RDP_Subnets )。更改上次登录的帐户名称,以避免系统管理员或帮助台操作员注意以前登录的帐户。
以下是两种技术的总结说明:
CarbonBlack: regmod:LastLoggedOn* or regmod:dontdisplaylastusername* or regmod:RDP-tcp\PortNumber* Sysmon: EventID=13 and EventMessage contains "LastLoggedOn" or "dontdisplaylastusername" or "RDP-tcp\PortNumber"
在未来的帖子里我们会涵盖其他技术以及一些检测思路。
注意:基于 Netflow 数据和授权/合法 RDP 子网的检测仍然相关如果您希望在不必从许多成员服务器和端点收集登录事件的情况下确定 RDP 活动的基线,那么这是正确的做法。
https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon https://gist.github.com/dbirks/ec4416c9064a323b14f435ee934efd71 https://winaero.com/blog/change-rdp-port-windows-10/
https://blog.menasec.net/2019/02/of-rdp-hijacking-part1-remote-desktop.html
PsLoggedOn 是一个小程序,显示本地登录的用户和通过本地计算机或远程计算机的资源登录的用户。如果指定用户名而非计算机,PsLoggedOn 将搜索网络邻居中的计算机,并告诉您该用户当前是否已登录。
PsLoggedOn 对本地登录用户的定义是将其配置文件加载到注册表中的用户,因此 PsLoggedOn 通过扫描 HKEY_USERS 键下的键来确定登录的用户。对于名称为用户SID(安全标识符)的每个密钥,PsLoggedOn 会查找相应的用户名并显示它。要确定谁通过资源共享登录到计算机,PsLoggedOn 使用 NetSessionEnum API。
请注意,PsLoggedOn 将显示您通过资源共享登录到您查询的远程计算机,因为 PsLoggedOn 需要登录才能访问远程系统的注册表。
PsLoggedOn 被黑客用来对用户会话执行正确且有针对性的内部侦察(相比其他内部AD侦察工具更加隐蔽),并且针对其中有趣的会话。
要检测 PsLoggedon ,我们将使用以下内容:
1、远程注册表访问的痕迹(通过 IPC $ SMB 共享暴露给 winreg 命名管道的连接)
2、NetSessionEnum API 的跟踪(通过 IPC $ SMB 共享暴露给 srvsvc 命名管道的连接)
3、所有源帐户,源IP和源端口号都在1分钟内完成
可以从 Windows 安全事件日志 5145 获取对 winreg 和 srvsvc 的远程访问:检查网络共享对象以查看是否可以授予客户端所需的访问权限[需要启用“对象访问”>“详细文件共享”]。
下面是该方法的图片展示:
我们建议在所有 Windows 网络文件共享以及所有域控制器上启用安全事件日志 5145,它将对我们检测其他侦察及横向移动技术有很大帮助[ 非常有用 ]。
在{winreg,srvsvc}
中使用 RelativeTargetName 查找事件 5145 的两次出现(查找 1 分钟内,相同的 [SourceP,Account Name,SourcePort]
不同的 RelativeTargetName。)
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=5145 https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
https://blog.menasec.net/2019/02/threat-hunting-detecting-psloggedon.html
PsExec 是一种轻量级的 telnet 替代品,允许您在其他系统上执行进程,完成控制台应用程序的完全交互,而无需手动安装客户端软件。
PsExec 最强大的用途包括在远程系统上启动交互式命令提示和 IpConfig 等远程启用工具(查看原本无法获取的有关远程系统的信息)。
现有的 PSEXEC 检测方式可以轻松绕过,PSEXEC 服务被创建 - 由 EventID 7045 记录“服务创建”[“ psexec -r spoolsvr ”选项允许绕过这种检测]
由于接受 Eula 而导致的远程注册表更改(对 Python 或 PowerShell 中的其他 PSEXEC 实现无效)
建议的检测方法依赖于事件 ID 5145“网络文件共享访问”,它记录远程访问 PSEXECSVC 命名管道的相对目标名称字段跟踪,格式如下:
<psexecsvc|chosen service name with the "-r" option>--<5-random-numbers>-<stdin|stderr|stdout>)
下面是 left traces 的示例:
(标准的 PsExec 命令(不带 -r 选项)将会安装名为 "PSEXECSVC" 的新服务)
如上所示,使用“ psexec -r spoolsrv \ target -s cmd ”(重命名)选项,可以轻松绕过基于服务名称的标准检测。
幸运的是,我们在 5145 事件中仍然有(现在)一个唯一的字符串,我们可以用它来检测
PSEXEC(“stdin”,“stdout”和“stderr”)
[EventID = 5145 且 TargetFileName 包含 * -stdin 或 * -stdout 或 * -stderr] [EventID = 5145 且非 TargetFileName 包含 * psexecsvc *)而 TargetFileName 包含 * -stdin 或 * -stdout 或 * -stderr] - > 这表示攻击者更改了默认的 psexec 服务名称。
IBM Qradar hunting AQL:
select username, "SharePath", "TargetName" from events where eventid=5145 and TargetName IMATCHES '(.*stderr.)|(.*stdin.)|(.\stdout.*)'
如果 PsExec 以某种方式被IT人员使用,那么请尝试以下 AQL 寻找被重命名的 PSEXEC 服务名称:
(i.e. psexec -r notPsExecSvc \host -u account$ -p Passw0rd!123 -s cmd.exe)。
select username, "SharePath", "TargetName" from events where eventid=5145 and TargetName IMATCHES '(.*stderr.)|(.*stdin.*)|(.*stdout.*)' and not (TargetName IMATCHES '(?i)(.*PSEXECSVC.*)')
https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=5145 https://docs.microsoft.com/en-us/sysinternals/downloads/psexec
https://blog.menasec.net/2019/02/threat-hunting-3-detecting-psexec.html