邮件登录异常检测

0x1 背景

近年来,随着我国各行业网络活动的日益增多,网络安全事件频发,基于邮件系统的攻击行为特点包括:传播快、受众广、变种多,钓鱼邮件是很多勒索软件、木马病毒传播的重要手段之一。

简单调研了2020年基于邮件系统的攻击:

  • 2020年2月,印度黑客组织借疫情向国内医院、政府等部门发送钓鱼邮件;

  • 2020年4月,APT32向中国官员发出钓鱼邮件,对电脑上植入恶意软件,窃取疫情数据;

  • 2020年5月,某诈骗团伙仿冒英国公司邮件对厦门某外贸公司实施诈骗,涉案金额近百万;

  • 2020年6月,境外间谍组织利用《武汉旅行信息收集申请表》等标题的邮件捆绑木马对重点部门发起攻击和渗透;

  • 2020年8月,国内某高校遭遇集体钓鱼邮件攻击,攻击者冒充QQ官方群发邮件窃取登录凭证;

  • 2020年12月,蔓灵花APT组织利用“海事政策分析和对南亚的港口安全影响”、“2020年自主研发项目立项论证报告”等标题对我国重要部门发起定向邮件攻击;

几乎每个月都会发生很多这样的基于邮件系统的安全案件,因此对用户邮件日志进行监测,在海量数据中筛选出异常日志是非常有必要的。

0x2 邮件相关异常类型

首先确定何为“异常”是对数据进行过滤的第一步,我们从邮箱、ip、时间三个方面对异常进行定义:

从邮箱行为

  1. 同一邮箱短时间内多个不同ip登录
  2. 同一邮箱登录失败的日志太多或比例太高
  3. 某一个邮箱日志记录非常多
  4. 邮箱频繁更换密码
  5. 发送过垃圾邮件

从ip行为

  1. ip有尝试爆破的行为
  2. 该ip发过垃圾邮件

从时序

  1. 某一天或者某一时段邮件日志明显增多

最终我们采用的方法并没有使用到机器学习,而是简单的基于规则的黑名单策略。

黑名单总体分为两部分,一是垃圾邮件的黑名单,二是高威胁IP的黑名单,下面针对这两部分详细展开介绍。

0x3 垃圾邮箱登录识别

首先从sendmail_log.json入手,重点关注发送过垃圾邮件的日志。

我们的策略是将发过垃圾邮件的ip和邮箱全部加入一个黑名单,在auth_log.json中通过黑名单匹配筛选出一些日志,得到244w条日志。

黑名单邮箱

统计黑名单中的邮箱/IP发过的所有邮件和垃圾邮件的数量,可视化分析可以发现

image-20211114141205321

绝大多数黑名单中的邮箱/IP发过的邮件几乎全部都是垃圾邮件,但是其中有一小部分邮箱/IP只发过一两封垃圾邮件,它们的总邮件数远大于垃圾邮件数

根据我们使用邮箱的经验,这部分可能属于偶尔存在一两封邮件被误判为了垃圾邮件

以下为筛出的部分只发过一封垃圾邮件的邮箱发过的总邮件数

image-20211027164026190

为了剔除这部分误判,我们设置了一个经验阈值0.1,如果只有十分之一的邮件被判为垃圾邮件,有很大可能属于系统误判,则将该email从黑名单里剔除。

0.1这个经验阈值的设置在我们比赛的数据集里并不一定是最优解,也并不一定是客观上最合理的数值,但由于提交次数的限制难以对其进行更进一步的优化。我们相信对于经验阈值的优化会使得最后结果的准确率进一步上升。

0x4 高威胁异常登录识别

攻击者IP

遍历auth_log.json,统计每一个邮箱账户存在多少个登录的IP地址

image-20211114141655507

绝大多数的数据都是1,在图一中完全看不出比较异常的数据

后续1、10、60均为分布的中位数,可以看到存在60个以上IP登录的邮箱仍然有很多个,准确的说是有2971个邮箱

从经验上、直觉上看这部分邮箱肯定是异常的,而异常原因需要进一步分析。

以其中登录IP最多的邮箱为例,这个邮箱的日志中一共有6859个不同的IP地址

其中6857个IP均为登录成功的日志

另外2个IP地址尝试了63中不同的password_hash,均为登录失败的日志

image-20211114142302680

姑且不论这6857个IP,230.130.182.189154.219.168.240这两个IP的行为显然是在尝试暴力破解邮箱的密码,显然属于异常登录

因此类似这样的IP地址被添加进黑名单中作为攻击者控制的高威胁IP地址

拥有6857个登录成功的IP,这也是一种异常,检验后发现这个邮箱在我们的垃圾邮箱黑名单中,这就解释得通了。

Replay Attack?

在分析数据的过程中我们一直觉得数据有一些奇怪

尤其是在尝试利用10s内异地登录进行匹配时,发现结果异常的多

到了最后一天下午的时候,我们尝试将原本的数据去除id进行去重

发现去除ID和client_software_fingerprint之后原本的3500w数据只剩下了500w

image-20211027164727563

在此基础上增加了client_software_fingerprint之后发现数据总量约1000w

image-20211114143122724

我们怀疑可能在其中存在大量的replay attack

但是由于最后一天才有这一思路,最终也没有来得及将其实现

如果从时序上进行分析,识别出这种replay的攻击包,或许对于发现高威胁的登录成功有比较好的效果

0x5 总结

最终我们的策略比较简单,就是简单的将前面提到的两个黑名单进行合并

之后将所有登录失败的请求以及黑名单命中的请求判定为异常

image-20211114143300703

Categories:

Comments are closed