思路分享:windows权限维持场景中如何隐藏服务信息
1. 译文声明
本文是翻译文章,原作者 Joshua Wright
原文地址:https://www.sans.org/blog/red-team-tactics-hiding-windows-services/
译文仅作参考,具体内容表达请见原文
2. 前言
在近期的一次红蓝对抗中遇到了一些蓝方大佬,我们使用了自行开发的后门程序来逃避目标主机上的EDR防护措施(终端检测响应平台)。但我们预估目标系统上的主机分析最终会检测到后门程序从而导致我们被扣分。
分析了一些EDR检测模型后,我们初步打算使用常规可信的服务名称来对抗检测,这些可信的服务名称可能会被优先忽略。在这里,SWCUEngine
是对应的后门程序,我们将其伪装成了AVAST软件清理引擎
。虽然这可能会逃避宽松的安全检查,但在真实的红蓝对抗中,这种方法还是不得劲。
# 使用Get-Service查看目标服务信息
PS C:\WINDOWS\system32> Get-Service -Name SWCUEngine
Status Name DisplayName
------ ---- -----------
Running SWCUEngine SWCUEngine
3. 正文
Windows服务支持使用安全描述符定义语言(SDDL)
来声明或控制服务权限。常规场景下管理员不会主动手动修改某一服务的SDDL语法,但是权限维持场景中攻击者可以通过修改目标服务的SDDL语法来实现隐藏服务的目的。在本栗子中,SWCUEngine
服务的隐藏效果不错。SDDL语法格式看起来有些臃肿,其主要使用了DACL和SACL组件中的ACE字符串
来声明或控制权限。关于ACE字符串
的文章请见此,ACE字符串
的格式如下:
ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)
成员 | 含义 |
---|---|
ace_type | 字符串格式,标识ACE_HEADER结构的AceType 成员的值 |
ace_flags | 字符串格式,标识ACE_HEADER结构的AceFlags 成员的值 |
rights | 字符串格式,标识由ACE控制的访问权限 |
object_guid | GUID格式,它指示特定于对象的ACE结构(例如ACCESS_ALLOWED_OBJECT_ACE)的ObjectType成员的值 |
inherit_object_guid | GUID格式,它指示特定于对象的ACE结构的InheritedObjectType 成员的值 |
account_sid | SID格式,用于指示ACE字符串所作用的目标用户/组 |
resource_attribute | 一个可选值,本文中未用到,故未做解释.. |
本文中出现的ace_type
主要为D(deny)
与A(allow)
,D条目始终排在最前面,其优先于A条目,A条目与默认权限相同。
点击收藏 | 2
关注 | 1