在活动目录中进行的诱捕与反诱捕的攻防较量

几年前,我介入了几个月的企业诱捕办理规划的开拓和测试项目。在此时代,我积攒了一些在活动目录中实施诱捕和钓鱼检测的履历,并意识到在活动目录中实施诱捕的关键点主要集中在honeyuser/honeytoken /honeycredentials上。像dcept等对象便是使用的这些进击点,戴尔开源的对象称为 DCEPT(Domain Controller Enticing Password Tripwire,域节制引诱加密绊网),是一种能够用来检测考试测验入侵本地Windows域和活动目录的进击者的蜜罐办事器安然技巧。假如我们想在进击的域名罗列阶段就使用相关对象来检测出进击,会碰到很多艰苦,不过这恰是我本文要办理的问题。

诱捕与反诱捕的攻防游戏

对付进击者来说,便是久有存心诈骗用户打开恶意附件或点击恶意链接。一旦进入进击情况,进击者就会试图截获用户的凭据,并经由过程其他设备来混入现有的日志和流量。

而对付安防职员来说,有一种检测进击的法子便是所谓的“钓鱼法律”:经由过程向进击者供给他们想要的办事、权限或正在探求的信息,来让他们中计。很多进击者在心里上,都邑天然的觉得被进击者是愚笨的、没有防御意识的且谋略机技巧对照差,发明不了他们的恶意意图。平日环境下,他们觉得自己也比安防职员更智慧、更有天分。在这些生理的感化下,他们每每以为只要自己一脱手,就可以迅速得到自己想要的器械,比如迅速得到Direct活动目录min权限。

以是,安防职员恰是基于此向进击者有意展示他们想看到的内容。例如,冒充成将密码设置为类似于“123…”的“弱智”用户,让他们进入到蜜罐中。

给进击者开释的诱饵最好因此下四个:

1.进击目标足够多,以便进击者罗列工具;

2.易于设置设置设备摆设摆设;

3.进击端不必要进行设置设置设备摆设摆设变动;

4.不应该触发正常的治理活动;

上面的第4点是最难实现的。假如安防职员的目标是罗列,则必须使进击者的活动或应用的对象凸显出来,以避免误报。

支配具有诱饵属性的进击情况

那么,我们若何经由过程活动目录中的内置对象实现上述进击者所需的进击属性呢?我们可以应用用户组策略设置ADAccess事故日志,设置设置设备摆设摆设进击者感兴趣的工具并过滤掉落误报信息。

活动目录造访所需的用户组策略设置历程是Windows Settings | Security Settings | Advanced Audit Policy Configuration | DS Access – Audit Directory Service Access。

以上设置在每次造访活动目录工具时都邑导致安然事故4662,日志记录必要在工具级别进行设置设置设备摆设摆设。对付这种设置设置设备摆设摆设,我们必要改动工具的SACL并添加相关的ACE。

你可以经由过程查看AddAuditAccessObjectAce函数,来完收拾解ACE。

我会在本文所讲的样本中,设置完全针对用户应用’ReadProperty”success’时的安然审计,这有助于检测针对该用户的任何罗列。

Deploy-Deception

虽然这些设置可以应用用户界面完成,然则多亏了PowerShell和ActiveDirectory模块,它才得以实现自动化。

为了自动化设置具有有趣属性和鲜为人知的属性的诱饵工具,以避免误报,我编写了Deploy-Deception。它是一个PowerShell模块,使用ActiveDirectory模块轻松高效地支配诱饵,你可以在Github上找到详细的支配历程。

下面,我会具体先容若何在进击的不合阶段设置不合类型的目标诱饵。

罗列:以用户工具为诱饵

用户工具是最有趣的工具,此中的一些用户属性是进击者最感兴趣的:

1.从来没有变动过的密码或对照“弱智”的密码;

2.相信的Delegation(委托)机制, Delegation是一种实现机制:一个工具转发或者委托一个哀求给另一个工具;

3.拥有SPN的用户,SPN(Service Principal name)办事器主体名称。SPN是办事在应用Kerberos身份验证的收集上的独一标识符,它由办事类、主机名和端口用户组成;

4.被明确标记出的密码;

5.属于高权限用户组的用户;

6.对其他用户、用户组或Container(容器)工具具有ACL权限的用户;

我可以应用Deplou-UserDeception函数来创建一个含有以上诱饵身分的假用户。本文中我创建了一个名为’usermanager’的假用户,其密码从来没有变动过,假如有进击者读取它的任何属性,就会记录在4662事故中。

PS C:\> Import-Module C:\Deploy-Deception\Deploy-Deception.psd1

PS C:\> Create-DecoyUser -UserFirstName user -UserLastName manager -Password Pass@123 | Deploy-UserDeception -UserFlag PasswordNeverExpires –Verbose

请留意,真实的用户工具都是在域中创建的。且在实践中,上面所述的身分的触发异常频繁,由于每当有人读取用户usermanager的任何属性时,都邑启用我设置的默认日志记录。这意味着纵然有人简单的列出域中的所有用户,也会记录在4662。这意味着,触发以上所述诱饵的所有操作(包括正常的操作) 都邑启用日志记录。比如以下操作:

1.net user /domain敕令,我们在添加域用户时,无意偶尔会有用户没有添加,或者已添加的用户名拼写差错。这时,我们想查一下今朝域中所有的用户,便是应用的这个敕令;

2.Get-WmiObject -Class Win32_UserAccount敕令,用此敕令查找帐户状态($User.Status);

3.Get-ADUser -Filter * (MS ActiveDirectory module) 敕令;

4.Get-NetUser (PowerView) 敕令;

5.查找用户,联系人和用户组的用户界面敕令;

不过,这种大年夜范围的诱捕行径,会让我无法区分进击者的罗列行径和正常活动行径。进击者所应用的罗列对象有一些分外之处,便是它们爱好尽可能多的提取进击工具的信息(这样做是由于他们不盼望重复连接到域节制器)。这意味着假如我现在要对一个不常见的属性进行触发并审计,只有经由过程一些罗列对象孕育发生的罗列行径才会触发日志记录,以免存在误报。在察看了所有属性列表后,我发明有很多这样的属性,我从中选择了一个具有代表性的属性-x500uniqueIdentifier(用户界面D为 d07da11f-8a3d-42b6-b0aa-76c962be719a)

[1] [2] [3] [4]下一页

这样,我现在就可以删除之前添加的ACE了,从新添加了一个仅在x500uniqueIdentifier属性被读取时才触发日志记录的新ACE。

PS C:\> Deploy-UserDeception -DecoySamAccountName usermanager -RemoveAuditing $true -Verbose

PS C:\> Deploy-UserDeception -DecoySamAccountName usermanager -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose

只有类似PowerView之类的对象(或者类似ADExplorer之类的对象)才会触发这种审计,这些对象会获取工具的所有属性。虽然这并不能把进击行径和正常行径完美的差别开来,但也是一个伟大年夜的进步了。

假如你对自己的诱捕技巧很有信心,确信你的监控或治理对象不会读取所触发工具的所有属性,那么你也可以设置类似SPN之类的属性,只有当读取SPN(或者所有属性)时才会触发日志记录。

PS C:\> Create-DecoyUser -UserFirstName user -UserLastName manager-spn -Password Pass@123 | Deploy-UserDeception -SPN ‘MSSQLSvc/dc’ -GUID f3a64788-5306-11d1-a9c5-0000f80367c1 -Verbose

假云云时天生的日志记录照样让你很迷惑,那可以应用如下敕令以下敕令仅在读取假用户里的DACL(自由造访节制列表)诱饵属性时,才会被记录在4662事故中。

PS C:\> Create-DecoyUser -UserFirstName user -UserLastName manager-control -Password Pass@123 | Deploy-UserDeception -UserFlag AllowReversiblePasswordEncryption -Right ReadControl -Verbose

罗列:以谋略机工具为诱饵

我们还可以以谋略机工具为诱饵,可以在域中创建假的用于诱捕的谋略机工具,而不必要将真实的谋略机映射到该工具中。即便如斯,我照样建议应用真实的谋略机或者虚拟机来支配谋略机工具诱饵,以避免露馅。

进击者感兴趣的一些谋略机工具属性包括:

1.旧的操作系统;

2.有趣的SPN;

3.Delegation(委托)机制的设置;

4.具有高权限的用户组成员;

先看看若何应用Deploy-Deception模块进行的一些诱饵支配,在此时代,我可以应用Deploy-DecoyComputer函数。

PS C:\> Create-DecoyComputer -ComputerName revert-web -Verbose | Deploy-ComputerDeception -PropertyFlag TrustedForDelegation -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a-Verbose

上面的敕令可以创建一个谋略机工具诱饵,该工具启用了Unconstrained Delegation属性,每当有进击者读取该工具诱饵的x500uniqueIdentifier属性或者所有相关属性时,就会被记录在4662事故中。

PS C:\> Deploy-ComputerDeception -DecoyComputerName comp1 -PropertyFlag TrustedForDelegation -Right ReadControl -Verbose

上面的敕令应用现有的谋略机工具并设置Unconstrained Delegation属性,每当有人读取DACL或谋略机的所有属性时,就会触发日志记录。

我还可以应用DCShadow来改动谋略机工具诱饵,使其看起来像是DC(域节制器)。

罗列:以用户组工具为诱饵

我还可以以用户组工具为诱饵,进击者感兴趣的用户组要具备以下属性:

1.有趣的名称(比如类似admins、administrators之类的名称);

2.这个用户组的成员也是高权限用户组的成员,或者具有进击者感兴趣的用户属性;

3.具有高权限的用户组成员;

以用户组工具为诱饵是个异常有趣的诱捕措施,我可以让诱饵用户成为诱饵用户组的成员,从而创建更细致化的诱饵元素。经由过程这种措施,进击者对诱饵组成员的罗列以及诱饵用户的罗列操作都邑被被记录在日志里,接下来我会先容若何应用登录限定来避免误用用户的权限,将正常的用户行径和进击行径分开。

是以,鄙人面的敕令中,我会创建了一个用户名为’dnsmanager’的诱饵用户组,且用户应用的密码永世有效,当进击者读取密码时,就会被记录在相关日志中。别的,我还创建了一个名为“Forest Admins”的诱饵用户组,并假定dnsmanager用户为该组成员,将“Forest Admins”用户组加入内置的dnsadmins用户组中。一旦有人读取dnsmanager的属性,就会触发日志记录,我应用的便是Deploy-GroupDeception来完成这个历程的。

PS C:\> Create-DecoyUser -UserFirstName dns -UserLastName manager -Password Pass@123 | Deploy-UserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose

PS C:\> Create-DecoyGroup -GroupName ‘Forest Admins’ -Verbose | Deploy-GroupDeception -AddMembers dnsmanager -AddToGroup dnsadmins -GUID bc0ac240-79a9-11d0-9020-00c04fc2d4cf -Verbose

罗列和内网渗透(lateral movement):以权限用户工具为诱饵

我还可以以权限用户工具为诱饵,以监测进击者的罗列和内网渗透)行径,详细历程便是创建具有高权限的诱饵用户,如成为域治理组的一员,具有履行DCSync的权限等。

但这种诱捕措施也存在着必然的风险,便是一旦被进击者发明高权限用户是诱饵,则进击者可以反过来捕获这些高权限,履行更深度的进击。为了避免这种环境的发生,我们可以应用一些保护步伐:

1.将Logon Workstation设置为一个并不是真实存在的谋略机上;

2.回绝诱饵用户的反登录;

有了上述两种保护,诱饵用户就不能应用任何类型的登岸凭据(如密码、哈希等)来登录,这意味着,进击者无法应用诱饵用户的任何权限。

做好这些诱捕筹备后,我就可以应用deploy-privilegeduserscam来创建具有高权限的用户诱饵。

PS C:\> Create-DecoyUser-UserFirstName dec -UserLastName da -Password Pass@123 | Deploy-PrivilegedUserDeception -Technique DomainAdminsMemebership -Protection DenyLogon -Right ReadControl –Verbose

我应用上面的敕令创建了一个名为“decda”的用户,并让该用户成为域治理组的一员,但该用户不能登录任何谋略机。任何列出用户的DACL或列出所有属性的考试测验都邑导致4662日志的天生。

上一页[1] [2] [3] [4]下一页

对付内网渗透来说,他们应用了DenyLogon保护。这意味着即应用户的密码、哈希或密钥被进击者获取,他们也弗成能重用这些凭据。为了在诱饵用户的凭据被应用时代,捕获到故意义的日志,我必要启用如下组策略:Configuration|Windows Settings|Security Settings|Advanced Audit Policy Configuration|Audit Policies|Account Logon | Audit Kerberos Authentication Service | Failure

登录掉败的界面如下图所示:

虽然登岸掉败,但照样会在域节制器上记录4768(故障)事故。对付像OverPass-The-Hash这样的进击,就不会天生如斯具体的差错。

另一个选项是将LogonWorkstation设置为现实中并不存在的谋略机,但我们可以应用和真实主机名类似的名称。

PS C:\> Create-DecoyUser-UserFirstName dec -UserLastName da -Password Pass@123 | Deploy-PrivilegedUserDeception-Technique DCSyncRights -Protection LogonWorkStation revert-webserver1 -Right ReadControl -Verbose

我可以应用上面的敕令创建一个名为“decda”的诱饵用户,该用户具有供给DCSync的权限,别的,我会将LogonWorkStation设置为真实不存在的设备。假如用户凭据被进击者窃取并被重用,就会呈现与DenyLogon类似的差错并天生4768事故。

这两种保护技巧也可以用于非活动目录帐户, 恕我直言,这比在内存中留下差错的密码或哈希值更好。当我在捕获内网渗透的进击时,这两种保护技巧可以与其他技巧相结合,让进击者以一种更简单的措施(应用Deploy-UserDeception的-PasswordInDescription选项)检索到诱饵用户的凭据。然后,我可以使该用户成为高权限用户,并应用上述保护步伐。

PS C:\> Create-DecoyUser-UserFirstName new -UserLastName da -Password Pass@123 | Deploy-UserDeception -PasswordInDescription ‘The new password is Pass@123’ -Verbose

PS C:\> Deploy-PrivilegedUserDeception -DecoySamAccountName newda -Technique DomainAdminsMemebership -Protection DenyLogon -Right

上面的第一个敕令认真创建一个名为“newda”的新用户,将其描述为The new password is Pass@123字符串。而第二个敕令则是让“newda”成为域治理组的一员,并设置为回绝用户登录的状态,一旦有人读取DACL或newda的所有属性,就会被记录在日志中。

因为无需应用特殊对象就可以从描述信息中得到密码,是以进击者很轻易触发这些诱饵。在评论争论具有权限的用户时,还必须评论争论关于ACL(造访节制列表)的问题,这个问题很紧张。假如某个用户含有操控其他用户的权限,那么进击者肯定会对这个用户感兴趣。(确保ACL的安然,包括域工具和其他安然性,都是安然监控的紧张一环)。

我们可以应用Deploy-SlaveDeception来设置一些诱饵用户,让此中一个用户对其他用户拥有完全节制或应用的权限。这恰是进击者感兴趣的目标,他们可以使用这些用户罗列和内网渗透。

我可以应用如下敕令,捕获罗列行径。

PS C:\> Create-DecoyUser -UserFirstName master -UserLastName user -Password Pass@123 | Deploy-UserDeception -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose

PS C:\> Create-DecoyUser -UserFirstName slave -UserLastName user -Password Pass@123 | Deploy-UserDeception -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose

PS C:\> Deploy-SlaveDeception -SlaveSamAccountName slaveuser -DecoySamAccountName masteruser -Verbose

上面的第一个敕令和第二个敕令分手认真创建名为masteruser和slaveuser的用户,并且只在进击者读取隐隐属性时进行安然审核并被记录到日志中。第三个敕令认真为slaveuser用户供给masteruser用户的GenericAll权限。在域中对这两个工具进行罗列或扫描感兴趣的acl的任何进击都将触发4662事故。

为了捕获进击者的内网渗透行径,我们可以应用masteruser的PasswordInDescription选项,或者应用其他能让进击者轻易获取诱饵用户凭据的简单措施。而我应用的是则是有点冒险的措施,便是让进击者能截获masteruser用户的权限(请在应用前仔细斟酌风险)。假如masteruser改动了slaveuser的DACL,除了在应用honeytoken/honeyuser时触发的任何其他警报外,我们还会获得一个4662日志。

PS C:\> Create-DecoyUser -UserFirstName master -UserLastName user -Password Pass@123

PS C:\> Create-DecoyUser -UserFirstName slave -UserLastName user -Password Pass@123

PS C:\> Deploy-SlaveDeception -SlaveSamAccountName slaveuser -DecoySamAccountName masteruser -Verbose

PS C:\> Deploy-UserDeception -DecoySamAccountName slaveuser -Principal masteruser -Right WriteDacl -Verbose

在上面的敕令中,一旦masteruser改动slaveuser的DACL,就会天生4662事故。

罗列:以域和域林之间的相信(ForestTrust)工具为诱饵

这个诱捕法子今朝还没有实现自动化,然则有很多有趣的可能性!例如,我可以设置一个具有诱捕属性的域林之间的相信(ForestTrust) (我在本文把它称为blue forest)。进击者可以在这个诱饵中,罗列用户、谋略机和用户组,但这些工具不具有造访任何其他资本的权限。这可以经由过程应用选择性身份验证建立域林之间的相信来实现,我只在DC上设置了Allowed to Authenticate选项,其他主机上未设置该选项。这将容许进击者罗列域和域林之间的相信工具,但他们不能造访其他谋略机上的资本。

进击者是否具有看透这些诱饵的能力?

那么,进击者若何识别哪些进击工具是真实的,哪些进击工具是陷阱或诱饵呢?正如我在文章开首提到的,我在以前几个月里测试了多种诱捕办理规划,在这些规划中,具有许多轻易被看透的诱捕工具:

上一页[1] [2] [3] [4]下一页

1.objectSID:该工具必须转化成DomainSID-RID款式,某些企业在诱捕时,并没有这样做,每每被进击者一眼看透。假如我们发明objectSID不包孕DomainSID-RID款式,那么请仔细查询造访该诱饵工具。

2.lastLogon, lastlogontimestamp:用户诱饵可以经由过程查看这些属性来识别。假如有一个高权限的用户从未进行过登录 (lastLogon的值为31/12/1600,这比LargeInteger日期的最早光阴还要早),那么它很有可能是一个诱饵。

3.logonCount:虽然不如lastLogon那么有效,但它也是一个很好的识别诱饵的措施。

4.whenCreated:它与lastLogon和logonCount工具相结合,就可以成为一个很好的识别指标。假如一个用户已经创建了很长光阴,但从未登录过,那很可能便是一个诱饵。是以在真实中,企业应只管即便避免应用这些僵尸或休眠用户,以防裸露自己的防御计划。

5.badPwdCount、badPasswordTime:只如果人类用户,都有大年夜意输错密码的时刻。假如某个用户从来没输错过密码(即Badpwdcount值为0,或者差错密码属性非常),那么很可能这是一个诱饵工具。

6.将很多诱饵工具的属性同时集中设置在一路:真正的进击目标是不会有这么多进击属性的,建议企业不要克意对一个诱饵工具设置太多诱捕属性,这也很轻易被发明。

最好的识别措施便是将狐疑是诱饵的工具与正常运行的工具进行对照,例如,假如进击者狐疑域中所有谋略机列表中的某个谋略机工具是一个诱饵,那么他们就会将其与域节制器的属性或当前所应用的设备属性进行对照。真实的dc老是在logonserver情况变量中列出。真实的DC始终位于logonserver情况变量中。对付用户工具,内置DA的RID始终为500,进击者可以将其与他们狐疑的某个用户工具进行对照。

假如某些诱捕办理规划不会在域中创建真实的工具,那么进击者可以应用WMIC来获取域信息,显斧精确的工具,扫除颠末捏造的工具。

进击者若何避过诱捕进行进击?

我开首就讲过,进击者老是觉得用户目标或安防职员都是“弱智”,只要他们一脱手就没有办不成的工作,除了这种良好心里外,他们还爱好坐享其成。殊不知,傲卒多降,是以,进击者必要改变他们的狂妄心态,在繁杂的企业收集中行动时,加着几分小心。

1.企业收集平日都异常繁杂,假如易如反掌的获取自己的进击目标,则要前进鉴戒;

2.避免应用自动化罗列对象,除非进击者异常懂得这些对象在后台的事情道理;

3.避免获取DA权限的诱惑,专注本身的进击目标,由于DA权限是进击者愿望获取的最高权限,对付此诱惑,一样平常人很难抗拒。

安防职员若何防止自己设置的诱饵被识别

假如应用真实的域工具,被识别出的概率就会削减。例如,没有映射到真实谋略机的谋略机工具,就很轻易被识别出来。

如前所述,对付诱饵用户工具,至少要让其常常进行登录会话操作,避免其成为僵尸用户。

让我们看一个简单的例子,有一个闻名的诱饵识别脚本叫做HoneypotBuster。现在让我会创建一个诱饵DA,并运行此脚本进行识别。

可以发明,我设置的诱饵DA被发清楚明了。Deploy-PrivilegedUserDeception有一个选项’CreateLogon’,此参数应用诱饵DA用户启动和竣事DC上的谋略器,添补用户的登录相关属性。而假如要应用此参数,必须将LogonWorkstation保护设置为履行模块的DC,这样你就可以随时变动用户的行径。

PS C:\> Create-DecoyUser -UserFirstName dec -UserLastName da -Password Pass@123 | Deploy-PrivilegedUserDeception -Technique DomainAdminsMemebership -Protection LogonWorkStation -LogonWorkStation revert-dc -CreateLogon –Verbose

我可以应用如上敕令会创建名为decda的用户,使其成为Domain Admins组的一员,不过我会限定其登录到DC,之后,我应用该用户创建一个登录会话,这样就会在DC上创建设置设置设备摆设摆设文件。现在,假如运行HoneypotBuster,看看此诱饵能否被发明。

可以看到,FakeRank诱饵工具的狐疑度被降到了50。HoneypotBuster应用了一个排名系统来评测诱饵工具的捏造度,假如一个用户的logonCount小于6,那么肯定是诱饵。假如我将decda的logonCount设置为6,用它的凭据启动这个进程6次,那么它就不会被狐疑了。

PS C:\> Create-DecoyUser -UserFirstName dec -UserLastName da -Password Pass@123 | Deploy-PrivilegedUserDeception -Technique DomainAdminsMemebership -Protection LogonWorkStation -LogonWorkStation revert-dc -CreateLogon -logonCount 6 -Verbose

很显着,现在假如我运行HoneypotBuster, 就会发明它并没有检测到decda!

不过这是针对HoneypotBuster对象的避免被看透的法子,未来我还将致力于应用虚拟化技巧来支配诱饵,比如借助OU工具。OU(Organizational Unit,组织单位)是可以将用户、组、谋略机和其它组织单位放入此中的AD容器,是可以指派组策略设置或委派治理权限的最小感化域或单元。普通一点说,假如把AD比作一个公司的话,那么每个OU便是一个相对自力的部门。

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包