2024-06-19 11:59:02
上海辰童科技有限公司
一、邮件攻击的主要套路
在现在的邮件安全对抗中,攻击者的攻击手法是不断升级,我们先来盘一盘钓鱼套路:
直接发、大量发,钓不到大鱼,邮件网关和沙箱基本直接滤掉;
批量注册一些邮箱地址,变换地址的发,由于具有明显的批量性特点,基本也会被滤掉;
自己搭建一台服务器,安装个开源的钓鱼邮件框架,然后仿冒域名大量发送,因为邮箱的信誉度低,加上有些邮件头中都会带上钓鱼框架的信息,现在也比较难成功了。
重点来了——
逐步渗透。通过以上各种办法,先拿下一些邮件安全基础比较薄弱的企业邮箱,一般是中小制造业、学校居多。拿下后,用他们的地址给目标公司的员工群发钓鱼邮件,但不会发太多,通常是先钓个人密码等信息,目标公司也不会是一家,邮件内容尽可能避开安全策略。
一个正常的、可信的邮箱地址,给公司员工发邮件,内容再做一些伪装,成功的概率会提高很多,哪怕有一份钓鱼成功、获取了个人密码,那么再用这个地址给内部所有员工群发,基本畅行无阻。是植入病毒,还是骗取钱财,亦或是拿下权限,只是时间问题了。
二、邮件安全建设
如何去构建防御体系,让狡猾的邮件攻击者没有可趁之机呢?以笔者从业经验来看,大致有四个环节:
安全设备 - 暴露面收缩和安全配置 - 数据驱动的安全运营 - 安全意识培训。
其中安全设备是第一道硬门,由于设备大多数是采购的,好坏依赖厂商的能力,而安全意识培训是长期的事情。真正可玩又可控、也决定企业安全防御能力高低的,一是暴露面收缩和安全配置,二是是安全运营环节,在基础措施比较薄弱、人员意识水平又不高的情况下,通过数据分析和运营机制,可以有效弥补。
下面分别说说,其中 重点是 数据驱动的安全运营。
安全设备
邮件安全的专用设备一般有网关和沙箱。
(1)邮件安全网关
邮件安全网关通过其反垃圾和反病毒引擎对邮件进行一道过滤,此外邮件网关还会根据发件方的IP和地址信誉进行分析,对SPF、DKIM、DMARC等配置进行监测。
SPF:发送方策略框架(Sender Policy Framework),主要是为了防止随意伪造发件人。SPF 是一个记录,它的内容写在DNS的txt类型里面。当接受了一份邮件,接收方会把 发送邮件的服务器 IP 与 SPF 记录内的 IP 地址 进行对比,如果不匹配,则认为是伪造邮件。
spf的记录格式是,CMD中的查询语句:
nslookup -q=txt 要查询的地址,比如查询163的SPF:
注意返回中的 v-spf1 include:xxxx -all,xxx 为记录中的发件服务器地址,-all 表示硬拒绝,邮件直接被丢弃或者隔离,~all表示软拒绝,它会标记IP非法,但不采取强硬措施。
DKIM:加密邮件验证系统(DomainKeys Identified Mail),它使用私钥将电子邮件加密,并在接受时用公钥进行解密,以验证电子邮件是否由授权服务器生成,且中间没有被篡改。DKIM的工作原理如下图所示:
(网图,来源:https://www.altn.com.cn/5730.html)
DMARC:基于域的消息认证,报告和一致性(Domain-based Message Authentication, Reporting and Conformance),是一种邮件认证协议。它是根据SPF或DKIM来做验证(所以开启DMARC必须要开启SPF或DKIM),验证策略为:SPF 的 Return-Path 或者 DKIM 的 DKIM-Signature: d= 二者至少需有其一与 From 头对应。DMARC还可以设置当有人仿造了发件地址的时候,将邮件的发送结果发送给指定的邮箱。
(2)沙箱
沙箱是对威胁更深入的分析,它基于机器学习、全文语义、威胁情报、杀毒引擎等对可疑邮件的附件、链接做更加深入的扫描和判断。
(3)流量和主机安全设备
前面两个设备一般是串联在邮件服务器前面的,需要实时对邮件的安全性进行风险决策,这绝对它不能做更丰富、耗时更长的分析。因此,有些公司会对邮件的流量旁路一份下来,结合EDR做多维度更丰富的分析和排查,比如可疑的出站外联捕获,加密通信的应用和主机排查,以及敏感数据的外发等。
2. 安全配置和暴露面收缩
安全设备怼上之后,下面就是完善安全配置,以及尽可能收缩邮件暴露面。
(1)安全配置
这包括前面所说的SPF、DKIM、DMARC设置(有些要依赖邮件系统是否支持),以及发、收行为做安全设置,包括:
关闭匿名发送功能;对登录和收发的频率做限制;网关上的安全规则,在不影响业务的情况下能开启尽量开启,等等。
(2)暴露面收缩
此外,邮件的服务尽可能减少对外暴露,比如web端登录服务、外部通过SMTP、POP3、IMAP直接登录服务。应将关闭这些服务对外的暴露,如果怕影响到业务,可以接入到 VPN 或 零信任 后面。这样,即使攻击者拿到了员工的邮件账号,也没有地方登录。
此外,邮件系统和客户端自身的漏洞也要特别关注。
3. 数据驱动的安全运营
碓完安全设备,开启了检测规则,做完安全配置,也收缩了暴露面,至此,能把大部分威胁邮件过滤掉,也可以避免大规模的沦陷,因为至少给我们这个环节的工作争取了时间——“安全运营”。
但回顾前面的攻击套路,攻击者会先拿下一个正常的企业邮件,通过文本变换、内容混淆、附件加密/加壳/远程加载宏等方式,还是有极可能绕过设备和规则检测。尽管网关和沙箱每天可以帮我们过滤大量的威胁邮件,但只要有一份漏过投递成功,那就超出了我们的控制。
所以安全运营工作的目的就是利用已知的信息,通过数据分析挖掘,找出漏过的威胁邮件,并及时进行处置。
(1)分析环境
安全运营的首先前提,各安全设备上的数据已经经过清洗,接入到了一个运营分析平台,这个平台上可以通过SQL、Python对数据做一些分析。
如果企业内有成熟的日志采集机制、日志分析中心,或者数据中台(至少包括 数据集市+数据分析平台),那么可以直接做分析。如果没有,其实搭建一个分析平台也挺简单。参考:
首先有一个ES,将相关日志发送到ES中(现在的安全设备应该都支持日志的发送),然后在内网找一台服务器搭建 Python 分析环境,与ES网络相通。
Python 的 Elasticsearch 库,支持读取ES中一定时间范围内某个索引的数据。在 Python 中可以对数据进行各种处理、清洗、分析、建模,以及可视化展示。
分析完了之后,也再通过 Elasticsearch 库送回 ES 中的专门的索引中,这个索引可以专门存放分析之后的数据,包括一些指标、趋势值、挖掘出来的高危告警等,Kibana 对这个索引可以做一些dashboard或者Canvas展示。
对以上 Python 程序做定时任务,每天处理。
一个简易的 ELK + Python 分析环境搭建的具体指南见 这里 。
(2)基本分析
包括,
投递量最大的发件地址Top10:快速扫一眼有没有大规模的恶意邮件;
投递量最大的邮件主题Top10,以及每一个主题涉及的发件地址数:看是否有利用大量地址聚集性的攻击;
过去7天威胁邮件趋势:判断近期的攻击趋势;
近期主要风险邮件来源地:判断主要攻击来源;
被投递威胁邮件最多的收件地址:审查被频繁攻击的内部邮件,进行特殊关注和审计;
特殊关注邮件地址的收、发情况:历史上发威胁邮件较多(但又不能封)的邮箱后缀的近期投递情况,以及历史上经常被攻击的或有中招的内部邮箱的近期收件情况;
......
这些基本分析可以直接在kibana里面通过ES SQL写成canvas的表,作为每日风险面板的一部分。
(3)一网打尽——聚类分析挖掘攻击团伙
在 从 AI 到 信息安全 里面说过,攻击者一个特点是 变,为了不被规则稽核,攻击者对邮件的内容、标题做各种变换,让网关和沙箱认为这不是同一份邮件。
推荐做的一个分析,是 T+1 或者 H+1,对投递成功的邮件进行聚类分析,找出一些批量性、聚集性的恶意邮件,分析流程参考:
分析维度应主要是标题,其他可以加上发件地址后缀
数据是文本格式,需要进行一些NLP处理,包括分词、合并、向量化
选择聚类分析算法,推荐密度聚类的算法(不要用K-means这种方法,需要指定类数),比如 DBSCAN,相似度可以用余弦相似度,然后开始聚类。
DBSCAN+余弦相似度,是简单靠谱的方法,结果也非常好,但问题是性能比较低,如果文本量大,耗时会非常久。此时可以考虑用simhash对文本进行降维量化,然后用 hamming distance 来做相似度,聚类还是用DBSCAN。
一个真实的聚类结果如下,因为相似性,这些主题的邮件被聚在了一起。
一个真实的邮件主题聚类结果
实战中,被聚出来的类会非常的多,而且绝大部分是正常的邮件,为了加快人工研判的效率,快速找出异常的类簇,可以结合一些统计指标。比如:
类簇中发件地址历史上被拦截的次数、历史上被判断为风险邮件的数量、涉及的发件地址数等。这些可以帮助判断这个类中邮件的威胁性。
(4)顺藤摸瓜——用黑标签传播出隐藏的坏人
另一个找出漏过的威胁邮件的思路,是充分利用已知的威胁邮件,给他们打上恶意的标签,然后用恶意邮件的发件地址、发件地址域名、发件IP、主题等作为介质,关联出这些介质的其他邮件,重点是已经投递成功的邮件。
一个方法是简单的关联分析,通过 SQL 不断的用去 join,但是简单关联容易把很多正常邮件关联进来,比如攻击者喜欢用的某邮箱后缀 @xxxx,可能正常人也经常用。
另外还可以考虑基于图的 标签传播算法 LPA(Label Propagation Algorithm),它从已知标签出发,通过一些介质和设定的权重,按照一定算法去不断传播、关联,直到形成一个比较合理的群组。
它的好处是不是简单粗暴的join,而是按照一定的策略去传播,所得到的群组更加自然合理。
在邮件安全这个场景,可以用的算法和模型很多,因为 ① 它有足够的训练样本,② 有丰富的多维变量(发件地址、域名、IP、时间行为、文本等),③ 也有上游的网关和沙箱给我们输送黑白标签。因此我们可以还可以用有监督的深度学习去,用基于图的最大连通图挖掘、Fast Unfolding等。
上面的聚类、最大连通图挖掘、标签传播算法,是笔者在邮件安全或相似场景使用过,效果不错的方法。
(5)专家运营和协同处置
以上分析结果,可以汇总在一个面板中,比如kibana 或者 grafana,安全运营人员根据每日面板的高危推送,来进行跟进处理。参照以上分析,一个丰富的运营面板大概是这样的:
对于研判为漏过的威胁邮件,需要及时与邮件管理员进行联动,对尚未读取的邮件进行撤回。如果员工已经读取威胁邮件,则要第一时间与其联系,询问是否打开链接、附件,是否有异常,对有进一步高危操作的员工,应该及时进行杀毒、隔离、改密。
按照以上流程,可以以较快时效、较广覆盖的发现漏过的风险邮件,大部分可以在第一时间,未读的状态下及时处理掉。
4. 安全管理:制度、意识培训和钓鱼邮件演练
在前面“暴露面收缩”中,其实漏了一个最大的暴露面,那就是——人。人始终是最大的不确定项,因此,除了设备、系统的安全管理、数据的安全运营外,还需要搭配安全管理手段。
(1)制度
安全的相关制度应该不断完善,这使得后续的安全管理手段“师出有名”。
(2)培训
应该组织定期的和专项的安全意识培训。定期的通过邮件、内部公众号进行持续宣贯;专项的可以在国家安全宣传周、保密周、重保前期等进行专题宣贯,并且要在新人培训、关键岗位人员的培训中,嵌入安全意识培训。
(3)钓鱼邮件演练
没有什么比真正中过一次招更能加深印象的了,因此企业应该定期组织钓鱼邮件演练。搭配不同的主题、套路。有预算的可以选用专门的厂商,做更加定制化、更加逼真的钓鱼模拟,预算紧张也可以直接用GoFish开源钓鱼框架。
对钓鱼的结果,应该做好分析,对中招的同事进行针对性的强化培训,而且进行多轮次的培训,对结果进行追踪。
搜狐邮件所示dkim