0x01基础信息
具体信息 | 详情 |
---|---|
ATT&CK编号 | T1078-001 |
所属战术阶段 | 初始访问 |
操作系统 | windows 7 旗舰版 SP1 |
创建时间 | 2022年11月10日 |
监测平台 | 火绒安全、火绒剑、sysmon |
0x02技术原理
攻击者可能会获取和滥用默认帐户的凭据,以作为获得初始访问、持久性、特权升级或防御规避的手段。默认帐户是操作系统内置的帐户,例如 Windows 系统上的访客或管理员帐户。默认帐户还包括其他类型的系统、软件或设备上的默认工厂/供应商设置帐户,包括 AWS 中的根用户帐户和 Kubernetes 中的默认服务帐户。(引用:Microsoft 本地帐户 2019 年 2 月)(引用:AWS 根用户)(引用:Kubernetes 的威胁矩阵)
默认账户不限于客户端机器,还包括为网络设备和计算机应用程序等设备预设的账户,无论它们是内部的、开源的还是商业的。预设用户名和密码组合的设备对安装后不更改的组织构成严重威胁,因为它们很容易成为攻击者的目标。同样,攻击者也可能利用公开披露或窃取的私钥或凭证材料通过远程服务合法地连接到远程环境。(引用:Metasploit SSH 模块)
0x03复现环境
工具列表 | 相关链接 |
---|---|
sysmon日志记录工具 | https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon |
sysmon默认规则文件 | https://github.com/SwiftOnSecurity/sysmon-config/blob/master/sysmonconfig-export.xml |
sysmon安装命令 | sysmon64.exe -accepteula -i sysmonconfig-export.xml |
攻击条件 | 已经获取管理员权限的shell |
0x04前置知识Windows用户和用户组
1.用户管理
1.1用户概述
-
每一个用户登录系统之后,拥有不同的操作权限
-
每个账户拥有自己唯一的SID(安全标识符),就和身份证号一样
-
用户的SID:500【S-1-5-21-1789165401-4187849794-3313424159-500】
-
系统的SID:【S-1-5-21-1789165401-4187849794-3313424159】
-
Windows系统管理员Administrator的UID为500
-
普通用户的UID是从1000开始的
查看当前用户的sid值:whoami /user
查看所有用户的sid值:wmic useraccount get name,sid
账户和密码默认存储位置:c:\windows\system32\config\SAM
Windows系统中,默认密码最长有效期42天
由此可见,用户的SID=系统的SID+用户的UID,不同的用户拥有不同的权限,为不同的账户赋权限,其实就是为不同账户的SID赋权限!
1.2内置用户
- 给人使用的账户
- administrator #管理员账户
- Guest #来宾用户
- 计算机服务组件相关的系统账号
- system #系统账号==权限至高无上
- local services #本地服务账号==权限等于普通用户
- network services #网络服务账户==权限等于普通用户
1.3配置文件
每个用户都有自己的配置文件【家目录】,在用户第一次登录时自动产生,路径是
- win7/2008 -------------------------------> c:\用户\
- win xp/2003-----------------------------> c:\Documents and Settings\
1.4用户管理命令
命令 | 作用 |
---|---|
net user | 查看用户列表 |
net user 用户名 | 查看用户详细信息 |
net user 用户名 新密码 | 修改密码 |
net user 用户名 密码 /add | 创建一个新用户 |
net user 用户名 /del | 删除一个用户 |
net user 用户名 /active:yes/no | 激活或者禁用账户 |
2.组管理
2.1组的概述
一组用户的集合,组中所有的用户,具备所属组的权限,作用就是简化权限的赋予。
赋权限方式:
- 【1】用户—组—赋权限
- 【2】用户—赋权限
2.2内置组
内置组的权限默认已经被系统赋予,以下列举的仅为Windows常见组名和作用,通常情况下不仅限于此
组名 | 作用 |
---|---|
【1】Administrators | 管理员组,管理员对计算机/域有不受限制的完全访问权 |
【2】Guests | 来宾组,跟用户组拥有同等访问权限,但来宾账户限制更多 |
【3】Users | 普通用户组,默认新建的用户都属于该组 ,防止用户进行有意或无意的更改,可以运行大部分应用程序 |
【4】Network Configuration Operators | 网络配置组,此组中的成员有部分管理权限来管理网络功能的配置 |
【5】Print Operators | 打印机组,权限低于管理员组 |
【6】Remote Desktop Users | 远程桌面组,此组中的成员被授予远程登录的权限 |
2.3组管理命令
命令 | 作用 |
---|---|
net localgroup | 查看组列表 |
net localgroup 组名 | 查看该组的成员 |
net localgroup 组名 /add | 创建新的组 |
net localgroup 组名 用户名 /add | 添加用户到该组 |
net localgroup 组名 用户名 /del | 从组中移除该用户 |
net localgroup 组名 /del | 删除组 |
0x05复现过程
【启用具有 RDP 功能和管理员权限的访客帐户】
- 了解远程桌面注册表项对应的功能
- 远程桌面注册表路径:“HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server”
- fDenyTSConnections:控制远程桌面开启/关闭对应的选项,0x0为远程桌面为开启状态,0x1为远程桌面为关闭状态
- fSingleSessionPerUser:允许单用户登录限制
- fEnableWinStation:远程桌面会话主机配置中RDP-TCP启用/禁用连接选项【只在server端才有用】
- PortNumber:子路径\WinStations\RDP-Tcp是远程桌面运行的端口,值为16进制
- AllowTSConnections:设置以允许RDP会话
- 了解远程桌面所使用的方法
- SetAllowTSConnections方法:这是远程桌面**Win32_TerminalServiceSetting **类的一个方法,允许或拒绝新的远程桌面连接。 此方法将相应地修改类的 AllowTSConnections 属性。
- AllowTSConnections指定是否允许新的远程桌面连接,1为允许连接,0为不允许连接,所以这个值要设置为1
执行以下命令后,默认访客账户将启用【活跃】并添加到管理员和远程桌面用户组,并且桌面将允许多个RDP连接
命令 | 作用 |
---|---|
net user Guest /active:yes | 激活来宾用户 |
net user Guest password | 修改来宾用户的密码,有时候系统会限制空密码的远程访问 |
net localgroup Administrators Guest /add | 把来宾用户加入到管理员组 |
net localgroup Remote Desktop Users Guest /add | 把来宾用户加入到远程桌面组 |
reg add “HKLM\system\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f | 注册表开启远程桌面功能 |
reg add “HKLM\system\CurrentControlSet\Control\Terminal Server” /v “AllowTSConnections” /t REG_DWORD /d 0x1 /f | 注册表允许RDP会话访问 |
激活来宾用户
修改密码为password
把来宾用户加入到管理员组,此时的权限也很高了,可以不必再加入到远程桌面组中去
Guest用户权限也是在管理员组里面
开启远程桌面有以下两种通用姿势
- 第一种姿势通过注册表修改
通过注册表项查询当前fDenyTSConnections的值为0x1,这个值代表远程桌面功能是关闭的
通过注册表启用远程桌面功能就是把fDenyTSConnections的值设置为0x0
设置完成之后,再次查看远程桌面的启用状态,这个时候发现fDenyTSConnections的值已经从0x1改成了0x0说明远程桌面功能已经启用
通过mstsc连接出现凭证验证的页面,即可证明能够远程桌面访问了
-
第二种姿势通过wmi进行修改,其本质上还是把fDenyTSConnections的值置为0x0,指令如下
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 开启远程登录 wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0 关闭远程登录
目前远程桌面是禁用的状态
Win32_TerminalServiceSetting WMI 类表示远程桌面会话主机 (RD 会话主机) 服务器的配置
SetAllowTSConnections 方法允许或拒绝新的远程桌面连接, 此方法将相应地修改类的 AllowTSConnections 属性;来允许或拒绝远程桌面的连接。
执行完命令后,重新查询下fDenyTSConnections的值重置为0,也是可以启用远程桌面功能的
如果遇到连接不上的情况,可尝试添加防火墙例外策略
netsh advfirewall firewall add rule name="remote Desktop" protocol=TCP dir=in localport=3389 action=allow
0x06 检测方法
1.日志特征
Process Create:
RuleName: -
UtcTime: 2022-11-11 09:57:28.999
ProcessGuid: {366efb63-0000-0000-2898-bf0000000000}
ProcessId: 3656
Image: C:\Windows\System32\wbem\WMIC.exe
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
Description: WMI Commandline Utility
Product: Microsoft® Windows® Operating System
Company: Microsoft Corporation
OriginalFileName: wmic.exe
CommandLine: wmic RDTOGGLE WHERE ServerName='SWORDHEART' call SetAllowTSConnections 1
CurrentDirectory: C:\Users\Administrator\
User: SWORDHEART\Administrator
LogonGuid: {366efb63-0000-0000-0272-080000000000}
LogonId: 0x87202
TerminalSessionId: 1
IntegrityLevel: High
Hashes: MD5=FD902835DEAEF4091799287736F3A028,SHA256=DA3AD32583644BD20116F0479C178F7C7C0B730728F4C02A438C0D19378C83D9,IMPHASH=15585CB74052B4739A900FCB332F06EA
ParentProcessGuid: {366efb63-0000-0000-5bf1-bd0000000000}
ParentProcessId: 2316
ParentImage: C:\Windows\System32\cmd.exe
ParentCommandLine: "C:\Windows\system32\cmd.exe"
ParentUser: SWORDHEART\Administrator
Process Create:
RuleName: -
UtcTime: 2022-11-11 10:01:54.074
ProcessGuid: {366efb63-0000-0000-4852-c00000000000}
ProcessId: 660
Image: C:\Windows\System32\reg.exe
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
Description: Registry Console Tool
Product: Microsoft® Windows® Operating System
Company: Microsoft Corporation
OriginalFileName: reg.exe
CommandLine: REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
CurrentDirectory: C:\Users\Administrator\
User: SWORDHEART\Administrator
LogonGuid: {366efb63-0000-0000-0272-080000000000}
LogonId: 0x87202
TerminalSessionId: 1
IntegrityLevel: High
Hashes: MD5=9D0B3066FE3D1FD345E86BC7BCCED9E4,SHA256=4E66B857B7010DB8D4E4E28D73EB81A99BD6915350BB9A63CD86671051B22F0E,IMPHASH=85C854CD51885B4B1E99BD14B33472B9
ParentProcessGuid: {366efb63-0000-0000-5bf1-bd0000000000}
ParentProcessId: 2316
ParentImage: C:\Windows\System32\cmd.exe
ParentCommandLine: "C:\Windows\system32\cmd.exe"
ParentUser: SWORDHEART\Administrator
2.攻击特征
本次实验火绒在激活guest用户的时候不会产生拦截的告警,只有当使用cmd设置guest密码的时候会进行告警拦截,在操作注册表的时候,火绒没有任何告警
0x07处置方法与规则编写
1.处置方法:
限制通过cmd对用户进行命令操作,限制通过cmd对注册表进行命令操作,来拦截此类攻击。
2.火绒监测规则编写
{
"ver":"5.0",
"tag":"hipsuser",
"data":[
{
"id":1,
"power":1,
"name":"T1078-001-默认帐户",
"procname":"C:\\Windows\\System32\\cmd.exe",
"treatment":1,
"policies":[
{
"montype":0,
"action_type":16,
"res_path":"C:\\Windows\\system32\\net.exe"
},
{
"montype":0,
"action_type":16,
"res_path":"C:\\Windows\\system32\\net1.exe"
},
{
"montype":1,
"action_type":15,
"res_path":"C:\\Windows\\system32\\net.exe"
},
{
"montype":1,
"action_type":15,
"res_path":"C:\\Windows\\system32\\net1.exe"
},
{
"montype":0,
"action_type":16,
"res_path":"C:\\Windows\\system32\\reg.exe"
},
{
"montype":1,
"action_type":15,
"res_path":"C:\\Windows\\system32\\reg.exe"
},
{
"montype":2,
"action_type":15,
"res_path":"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\*"
},
{
"montype":1,
"action_type":15,
"res_path":"C:\\Windows\\system32\\wbem\\WMIC.exe"
},
{
"montype":0,
"action_type":16,
"res_path":"C:\\Windows\\system32\\wbem\\WMIC.exe"
}
]
}
]
}
可以看到定义的规则可以严格的对激活用户,对远程桌面注册表进行限制,起到了拦截的作用
0x08 总结
通过本次实验得出如下结论,获取shell的前提下,可以通过默认激活默认用户,添加到管理员组,手动启用远程桌面的形式,获取远程桌面的权限,火绒基本上不会触发告警机制,基本上都需要添加自定义规则才能进行防护,所以可以通过这种方式绕过火绒获取远程桌面的权限。