导语:最近CrowdStrike在Office 365中发现了一项功能,此功能可以对所有用户默认活动的邮箱活动记录系统进行访问,本文就详细介绍了CrowdStrike关于Office 365的日志功能。
在上一篇文章中,我介绍了Office 365 Activities API 检索过程中所用到的一些Web API功能、检索方法,今天我们接着讲其中的标准属性、活动类型。
标准属性
所有活动中都有一些标准属性,以下就是最常用的属性名称说明:
1.ActivityCreationTime-活动创建的时间;
2.ActivityIdType-活动的类型(在下面有详细描述);
3.ActivityItemId-活动对象的EWS ID(可用于查询Mail API以获取其他消息属性,包括消息正文内容);
4.AppIdType-客户端类型(在下面有详细描述);
5.ClientSessionId-客户端生成的会话标识符(识别实际用户会话方面的用处有限);
6.TimeStamp-活动发生的时间戳;
虽然其他对象标识符(如Id和ActivityObjectId)也包含在大多数活动中,但ActivityItemId属性在查询其他子集(例如Outlook Mail API)时是预期标识符(expected identifier)。出于这个原因,ActivityItemId被用作本文中的首选消息标识符。
ClientSessionId属性在识别实际用户会话方面的用处有限,尽管每个登录活动都具有关联的ClientSessionId,但并不是所有后续的邮箱活动都与该标识符关联。每个实际用户会话通常有许多不同的客户端会话标识符。该属性很可能是客户端生成的UUID,用于请求响应相关性。值得注意的是,当每个会话中发出新的请求时,SequenceNumber属性将递增。
自定义属性
大多数活动类型都包含自定义属性,每个自定义属性在CustomProperties数组中表示为一个JSON对象。这些对象由每个活动类型独有的属性组成,例如,用于ServerLogin活动的ClientIP属性和用于Move活动的TargetFolder属性,每个活动的大多数有趣的元数据都包含在这个数组中。一些更有用的自定义属性,将在下面的活动类型部分中详细讨论。
活动类型
如果把攻击活动按ActivityIdType属性分类,从消息操作、登录事件到日历更新,CrowdStrike已经确定了至少30种不同的活动类型。下面是一些有用的活动类型的介绍,活动类型说明如下:
1.Delete-由用户或Exchange删除的邮件;
2.Forward-消息已转发;
3.LinkClicked-单击消息中的链接(不适用于所有应用类型);
4.MarkAsRead-消息被标记为已读;
5.MarkAsUnread-消息被标记为未读;
6.MessageDelivered-邮件已发送到邮箱;
7.MessageSent-从邮箱发送了消息;
8.Move-由用户或Exchange移动的消息;
9.OpenedAnAttachment-附件已打开(不适用于所有应用类型);
10.ReadingPaneDisplayEnd-在阅读窗格中取消已选择的消息;
11.ReadingPaneDisplayStart-在阅读窗格中选择了一条消息进行查看;
12.Reply(ReplyAl)-消息已回复;
13.SearchResult-搜索结果已生成;
14.ServerLogon-发生登录事件(也可能是登录活动夹杂在其他活动中);
需要注意的是,虽然许多活动类型并不包含大量的消息元数据,但是,它们却包含ActivityItemId字段,这样就可以用多种方式检索所有活动的消息元数据。
其中,检索相关元数据的一种方法便是查询Mail API。如果需要,你也可以通过这种方法检索邮件正文内容。以下查询的是Mail API里的由ActivityItemId标识的具有WebLink,BodyPreview和Subject属性的消息。
注意:如果你使用Beta端点,那也可以请求InternetMessageHeaders属性的消息,这在事件响应中很有用。
GET https://outlook.office.com/api/v2.0/Users('[email protected]')/messages/< ActivityItemId>?$select=WebLink,BodyPreview,Subject
另一种检索对象元数据的方法是在相应的MessageDelivered活动中进行搜索,MessageDelivered活动(在某种程度也可以叫做MessageSent活动)会保留重要的属性,如发件人,收件人和主题。由于活动可以使用ActivityItemId属性链接在一起,所以通过这种方式,可以在不发出其他HTTP请求的情况下检索许多活动的消息元数据。例如,MarkAsRead活动虽然不包括收件人的属性或标记为已读的邮件,但是,通过搜索,你可能已经有了该消息的关联MessageDelivered活动(存储在内存中或磁盘上)。通过MarkAsRead活动的ActivityItemId属性搜索它,如果存在,则可以可靠地导入重要字段(如收件人和主题)的值。
某些活动类型仅在由受支持的应用类型发起时才生成,例如,只有在使用web上的Outlook (web应用类型)执行这些操作时,才会记录linkclick和OpenedAnAttachment活动。
有趣的活动类型
这些活动类型可为查找Outlook邮箱中攻击者活动的分析人员提供重要价值,因此,下面将更详细地讨论它们。
MessageDelivered-此活动表示邮件已发送到邮箱,此活动类型非常重要,因为它可用于识别网络钓鱼电子邮件,并且它包含可用于相关活动的消息元数据。此活动的AppIdType始终是Exchange。此活动类型的一些最有用的自定义属性如下所示:
1.SenderSmtpAddress-邮件发件人的SMTP地址;
2.From-消息的发送者;
3.Recipients-邮件的收件人(限于为128个条目);
4.Subject -消息的主题;
5. SentTime-消息发送的时间;
6.InternetMessageId -消息的 Internet Message ID;
7.ItemClass-消息的类;
8.AttachmentDetail -消息中附件类型的列表;
9.ReadingPaneDisplayStart -表示在阅读窗格中选择了一条消息,使其可查看。此活动类型可能包含或不包含CustomProperties数组,具体取决于启动该操作的应用类型。但是,在所有情况下,活动中都包含的元数据都是有限的,因此必须使用上述描述的方法之一查找所引用的消息。当消息被取消选择时,将发生ReadingPaneDisplayEnd活动。
10.SearchResult-这些活动包含在邮箱中执行的搜索查询中。每个活动都包含一个CustomProperties数组,其中包含一个查询XML对象。要检索查询结果,就要解析此XML对象以查找/Query/RawQuery,请参见以下查询值。
<Query><RawQuery>payment</RawQuery><RankingQuery>any [qlf$1995:0] [qlf$2002:2]</RankingQuery><All><Token>payment</Token></All></Query>
ServerLogon-此活动类型表示发生了一次Office 365 Outlook邮箱登录事件,该事件在CustomProperties数组中包含许多有用的属性,其中一些如下所示:
1.ClientIP-这是登录活动的源IP地址,如果此字段包含多个以逗号分隔的值,则表示登录提交中包含X-Forwarded-For标头。
2.UserName-这是登录活动使用的用户名;
3.Result-这是登录尝试的结果(无论是否成功);
4.ExceptionInfo -如果登录失败,可能会填充异常信息;
5.UserAgent -这是客户端报告的用户代理;
应用类型
每个活动都有一个关联的应用类型,它们存储在AppIdType属性中。此属性代表的是启动活动的应用类型,下面介绍了最常见的应用类型:
1.Exchange – Exchange Online;
2.IMAP4- IMAP4客户端;
3.Lync- 用户商业目的的Lync/Skype;
4.MacMail- 使用苹果系统的Mail;
5.MacOutlook- 使用苹果系统的Outlook;
6.Mobile-手机浏览器;
7.Outlook-Windows Outlook;
8.POP3- POP3客户端;
9.Web-Web Outlook;
请注意,一些应用类型会在首次登录时自动同步邮箱的内容,在执行分析时应该考虑到这一点,因为这意味着即使没有任何API返回的消息读取活动,邮箱的内容也可能已被泄漏。 CrowdStrike观察到在IMAP4中最常出现这种情况。目前,在Office 365中没有针对IMAP4或其他类似应用类型的协议日志记录,以查询用户对哪些消息进行了同步。
Python模块
目前,CrowdStrike已经发布一个包含Activities API基本功能的Python模块,它附带一个命令行工具,可用于检索用户的活动并将其写入CSV文件。该工具需要有效的用于测试目的的OAuth 2.0访问令牌,该令牌可以从Outlook开发人员中心-OAuth沙箱中获取。要获得用于运行的访问令牌,你应该实现受支持的OAuth流程并向微软注册你的应用。有关详细信息,请参阅v2.0协议-OAuth 2.0和OpenID Connect。https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols
使用命令行工具
此工具将持续获取活动并将其写入CSV文件,直到检索到符合指定条件的所有活动为止,可以通过设置OAUTH_TOKEN环境变量(首选方法)或将其包含为命令行参数来提供访问令牌。用法如下:
usage: retriever.py –user <username> –output <filename> [–token <token>] [–start <timestamp>] [–end <timestamp>] [–types <type> [<type> …]] –user <username> Target user (user principal name) –output <filename> CSV output filename –token <token> OAuth access token –start <timestamp> Start timestamp (ISO 8601) –end <timestamp> End timestamp (ISO 8601) –types <type> [<type> …] Space-delimited list of activity types
检索1月1日之后发生的MessageDelivered活动:
python retriever.py –user [email protected] –output activities.csv –types MessageDelivered –start 2018-01-01T00:00:00Z
检索5月发生的ServerLogon和SearchResult活动:
python retriever.py –user [email protected] –output activities.csv –types ServerLogon SearchResult –start 2018-05-01T00:00:00Z –end 2018-05-31T23:59:59Z
检索用户的整个活动历史记录,这可能需要很长时间:
python retriever.py –user [email protected] –output activities.csv
注意:要确保你已通过采用上述“检索活动”部分中描述的方法之一获得必要权限,这样才能检索其他用户的活动。
查找攻击者活动的技术
BEC攻击者很少改变他们的TTP (通信协议),并经常在钓鱼攻击活动中重复使用相同的基础架构。这些特征与正确的分析技术相结合,可以让事件响应者迅速识别其环境中的入侵者。以下讨论CrowdStrike Services团队使用的一些技巧。
查找攻击者的IP地理位置
从合法邮箱所有者操作中提取攻击者活动的最简单和最有效的方法之一是执行IP地理登录分析,如果查出的登录位置与用户的常用登陆地址不同,则需要值得注意。执法机构就是根据这些信息来进一步进行分析的,目前存在着许多免费的IP地理定位数据源,所有这些数据均可用于以编程方式将登录活动的源IP地址转换为特定的地理位置。
IP地理定位
搜索查询
搜索查询分析在涉及电信欺诈的BEC案件中特别有用(如那些通常由尼日利亚的犯罪嫌疑人进行的案件),因为邮箱搜索是这些类型攻击者最常用的技术之一。在获得对Office 365 Outlook邮箱的访问权后,这些攻击通常会开始针对诸如“电子汇款”,“发票”和“收付款”等主题发出查询命令,以便收集必要信息以定位特定人员和特定业务。针对可疑搜索词进行搜索结果分析是发现攻击者活动的最有效方法之一。
异常客户端类型
异常应用类型是可疑活动的常见指标,通常可以通过对应用类型进行stacking分析来对攻击者一段时间里所进行的攻击进行汇总。例如,如果一个给定的用户通常通过Outlook客户端登录到他的Office 365 Outlook邮箱,那么通过Web或IMAP4执行的活动就构成攻击者活动的潜在指标,在邮箱活动历史记录中识别这些类型的异常值对于成功进行BEC调查至关重要。
检测DKIM/DMARC/SPF验证失败的迹象
可以调用Office 365 Outlook邮件API来检索邮件标题和正文,通过利用这些附加属性,可以搜索其他恶意活动的迹象,尤其是那些涉及DKIM(DomainKeys Identified Mail),DMARC(Domain-based Message Authentication,Reporting & Conformance)和SPF(Sender Policy Framework )验证失败的迹象。未通过一项或多项检查的邮件可能与恶意活动相关联,例如欺骗发送方地址或使用未经授权的邮件传输代理(MTA)。
DKIM是一种防范电子邮件欺诈的验证技术,通过消息加密认证的方式对邮件发送域名进行验证。
邮件发送方发送邮件时,利用本域私钥加密邮件生成DKIM签名,将DKIM签名及其相关信息插入邮件头。邮件接收方接收邮件时,通过DNS查询获得公钥,验证邮件DKIM签名的有效性。从而确认在邮件发送的过程中,防止邮件被恶意篡改,保证邮件内容的完整性。
基于域的邮件验证、报告和一致性(DMARC) 这个规范旨在减少邮件滥用,例如通过伪造邮件的“From:”DMARC 帮助域拥有者使用“域名系统”(DNS)来向收件服务器告知其DMARC策略。
SPF是一种以IP地址认证电子邮件发件人身份的技术。接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件并进行退回。
恶意附件类型
接收到的消息的属性会存储在MessageDelivered活动中,这些属性基本上都可用于识别可疑电子邮件。其中包括AttachmentDetail属性,附件类型和方法的列表。通过扫描该字段查找与恶意软件相关的附件类型(例如HTA,EXE和PDF),这样就可以迅速发现可疑电子邮件,然后分析其他指标。
总结
Office 365 Outlook Activities API为强大的邮箱日志记录子系统提供了一个直接的分析途径,该子系统远远优于现有的Office 365审核功能。虽然Activities API的全部潜力目前尚不清楚,但CrowdStrike记录了许多可用于从API中获取最大操作价值的属性。任何组织和个人都可以利用这些知识来响应事件,搜索攻击者,或仅仅是为了更好地理解Office 365 Outlook邮箱操作。