渗透测试Skype业务:利用缺失的Lync

s4b

大约一年以前,Black Hills记录了从外部获取域凭据的多种方式。然后他们继续发布了MailSniper,这是一个用于自动化攻击的优秀工具。然后,这个想法进一步推动了MWRSensePost的朋友, 他们展示了恶意的Outlook规则如何被滥用以获得内部支撑。

我们都知道Skype for Business (S4B)或者Microsoft Communicator/Lyn是广泛部署的企业即时通讯平台。S4B部署通常采用两种方式:用于商务服务器的Skype for Business Server或Skype for Business在线,使用Azure托管的AD或用户提供自己的身份给提供商的Office 365。

在本博文中,我们将记录滥用Skype for Business的技术,以识别域名凭据,并讨论受损的S4B帐户的影响。我们还将发布一个名为LyncSniper的PowerShell工具,并向Black Hills的MailSniper致敬

确定目标是否使用S4B是相对不重要的,因为大多数组织将使用以下DNS条目来advertise其部署,如:

lyncdiscover.example.org

lyncdiscoverinternal.example.org

S4B客户端使用这些DNS条目来自动发现S4B服务器的位置。通过HTTPS对自动发现器的GET请求将返回类似于以下内容的响应:

<resource rel=”root” href=”https://lync.example.org/Autodiscover/AutodiscoverService.svc/
root?originalDomain=example.org”>
<link rel=”user”href=”https://lync.example.org/Autodiscover/AutodiscoverService.svc/
root/oauth/user?originalDomain=example.org”/>
<link rel=”xframe”href=”https://lync.example.org/Autodiscover/XFrame/XFrame.html”/></resource>

该资源将用户指向他们应该认证的位置,并且是进行密码猜测攻击的基本知识。响应头还将经常包含S4B服务器的内部主机名,这可能适用于其他攻击,如spraying需要内部域名的托管IDP:

X-MS-Server-Fqdn: SERV1.internal.example.org

如果DNS条目不存在,也可以通过在HTTPS上扫描目标的边界来查找S4B服务器; nmap将可靠地找到类似于以下内容的结果:

PORT STATE SERVICE REASON VERSION
443/tcp open ssl/sip syn-ack ttl 114 Microsoft Lync SIP 2013

lyncdiscover.domain.tld ”的粗略分析显示,Alexa前100万个域名有超过26%以某种形式使用S4B,约3.7%使用Office365。因此,这个潜在的攻击面是相当重要的。在我们可以对S4B进行Password Spraying攻击之前,我们需要对其进行身份验证。S4B支持许多认证方法,包括NTLMKerberosOAuth

使用WebTicketService进程实现使用NTLM和Kerberos的身份验证。简而言之,这需要从X-MS-WebTicketURL标题中检索WebTicketService URL,并使用NTLM或Kerberos进行SAML声明。如果身份验证成功,则会返回一个在S4B中模拟用户与X-MS-WebTicket头文件一起使用的安全令牌。

然而,使用OAuth可以实现更简单的身份验证方法,并且是ActiveBreach  LyncSniper工具中使用的首选技术如果启用OAuth,Microsoft会认为 “无法禁用或删除”。

请求此URL将在grant_type参数中返回包含支持的身份验证方法的WWW-Authenticate标头。以下示例支持Windows和密码认证:

WWW-Authenticate: Bearer trusted_issuers="", client_id="00000004-0000-0ff1-ce00-000000000000",
MsRtcOAuth href="https://lync.example.org/WebTicket/oauthtoken",grant_type="urn:microsoft.rtc:windows,
urn:microsoft.rtc:anonmeeting,password"

此时的身份验证相对简单,并且可以通过发送POST请求包含在使用以下参数的WWW-Authenticate头的URL来实现:

grant_type="password";username=user@example.org;password=Password1

如果身份验证成功,则该服务将返回一个可用于模拟用户的有效access_tokenJSON响应。

Office 365部署中对S4B的身份认证有所不同,我们的研究意味着不支持grant_type密码。但是,我们发现,对于Azure AD托管环境,它使用Windows Live Authentication进行身份验证。我们可以确定S4B部署是否正在使用Office365,因为自动发现服务将响应大量https://webdir*.online.lync.com。在这种情况下,鉴于使用WS-TrustRST对静态端点(https://login.microsoftonline.com/rst2.srf),执行身份验证是相对简单的。以下SOAP消息演示了一个示例:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:wsa="http://www.w3.org/2005/08/addressing" 
xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust">
<S:Header>
<wsa:Action S:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue
</wsa:Action>
<wsa:To S:mustUnderstand="1">https://login.microsoftonline.com/rst2.srf</wsa:To>
<ps:AuthInfo xmlns:ps="http://schemas.microsoft.com/LiveID/SoapServices/v1" Id="PPAuthInfo">
<ps:BinaryVersion>5</ps:BinaryVersion>
<ps:HostingApp>Managed IDCRL</ps:HostingApp>
</ps:AuthInfo>
<wsse:Security>
<wsse:UsernameToken wsu:Id="user">
<wsse:Username>user@example.org</wsse:Username>
<wsse:Password>Password1</wsse:Password>
</wsse:UsernameToken>
<wsu:Timestamp Id="Timestamp">
<wsu:Created>2017-03-10T21:46:53.7355085Z</wsu:Created>
<wsu:Expires>2017-03-10T21:46:53.7355085Z </wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</S:Header>
<S:Body>
<wst:RequestSecurityToken xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust" Id="RST0">
<wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType>
<wsp:AppliesTo>
<wsa:EndpointReference>
<wsa:Address>online.lync.com</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wsp:PolicyReference URI="MBI"></wsp:PolicyReference>
</wst:RequestSecurityToken>
</S:Body>
</S:Envelope>

如果身份验证成功,则服务将使用返回SOAP消息的BinarySecurityToken标记中的安全令牌进行响应。在这一点上,我们有足够的信息来验证S4B的内部部署S4B服务器和S4B在线部署。我们可以尝试强制使用密码,但这很可能导致锁定帐户。识别AD凭证的更有效的技术是进行password spraying攻击。这种攻击涉及在所有枚举的帐户中尝试使用通用密码(如Password1)进行登录。在这种情况下,仍应注意锁定用户帐户并限制在给定的时间范围内执行尝试。除了谨慎之外,我们通常每天会spraying 2个密码,在一天中的开始和结束,这不会锁定任何帐户。

要使用LyncSniper进行Password spraying攻击,可以使用下面类似的参数:

Invoke-LyncSpray –userlist users.txt –password Welcome1 –AutoDiscoverURL 
–verbose https://lyncdiscover.example.org

lyncspray1

如果不提供自动发现URLLyncSniper将尝试找到它。

但也有可能会密码强制,对于本地部署,限制由目标的活动目录帐户锁定策略设置。为了避免锁定帐户的风险,我们建议与联络点紧密联系。

暴力破解Office365账户也是可以的,Microsoft记录的帐户锁定策略为::

“ 10次登录尝试失败(密码错误)后,用户将被锁定一分钟。如果还是不正确的登录尝试将增加锁定用户的持续时间。“

LyncSniper尝试通过遵守此策略来避免锁定,尝试9次登录尝试后,然后休眠60秒。60秒后,LyncSniper会执行单次登录尝试,并继续将延迟再延长20秒,每次登录尝试之间最长可达5分钟。虽然这可能不是最佳的,但我们在避免锁定用户方面取得了很大的成功。

可以使用类似于以下内容的参数尝试Office365 S4B部署的强大功能:

Invoke-LyncBrute -username user@office365org.co.uk -passlist .\pass.lst -office365 –verbose

lyncspray2

Skype为企业账户提供了大量的机会,其中包括以下几个方面:

  • 获取全球通讯录
  • 通过喜爱的联系人了解员工关系
  • 使用户访问你的托管网站
  • 发送用户附件
  • 通过用户是否存在来监控目标(当他们在办公室,在线或离开时)

IM

如果目标离线,则S4B服务器可以通过电子邮件将消息发送到目标:

s4bemail

为了防止这种攻击,我们建议采取以下行动:

  • 限制Skype for Business使用内部网络和VPN访问
  • 在Skype for Business Online(Office365)部署上实施多因素身份验证
  • 确保域中强制执行适当复杂的密码和帐户锁定策略。

 

*作者:ActiveBreach,转载请注明来自MottoIN

原创文章,作者:Stbird,如若转载,请注明出处:http://www.mottoin.com/100473.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code