邮件登录异常检测
0x1 背景
近年来,随着我国各行业网络活动的日益增多,网络安全事件频发,基于邮件系统的攻击行为特点包括:传播快、受众广、变种多,钓鱼邮件是很多勒索软件、木马病毒传播的重要手段之一。
简单调研了2020年基于邮件系统的攻击:
- 2020年2月,印度黑客组织借疫情向国内医院、政府等部门发送钓鱼邮件;
-
2020年4月,APT32向中国官员发出钓鱼邮件,对电脑上植入恶意软件,窃取疫情数据;
-
2020年5月,某诈骗团伙仿冒英国公司邮件对厦门某外贸公司实施诈骗,涉案金额近百万;
-
2020年6月,境外间谍组织利用《武汉旅行信息收集申请表》等标题的邮件捆绑木马对重点部门发起攻击和渗透;
-
2020年8月,国内某高校遭遇集体钓鱼邮件攻击,攻击者冒充QQ官方群发邮件窃取登录凭证;
-
2020年12月,蔓灵花APT组织利用“海事政策分析和对南亚的港口安全影响”、“2020年自主研发项目立项论证报告”等标题对我国重要部门发起定向邮件攻击;
几乎每个月都会发生很多这样的基于邮件系统的安全案件,因此对用户邮件日志进行监测,在海量数据中筛选出异常日志是非常有必要的。
0x2 邮件相关异常类型
首先确定何为“异常”是对数据进行过滤的第一步,我们从邮箱、ip、时间三个方面对异常进行定义:
从邮箱行为:
- 同一邮箱短时间内多个不同ip登录
- 同一邮箱登录失败的日志太多或比例太高
- 某一个邮箱日志记录非常多
- 邮箱频繁更换密码
- 发送过垃圾邮件
从ip行为:
- ip有尝试爆破的行为
- 该ip发过垃圾邮件
从时序:
- 某一天或者某一时段邮件日志明显增多
最终我们采用的方法并没有使用到机器学习,而是简单的基于规则的黑名单策略。
黑名单总体分为两部分,一是垃圾邮件的黑名单,二是高威胁IP的黑名单,下面针对这两部分详细展开介绍。
0x3 垃圾邮箱登录识别
首先从sendmail_log.json
入手,重点关注发送过垃圾邮件的日志。
我们的策略是将发过垃圾邮件的ip和邮箱全部加入一个黑名单,在auth_log.json中通过黑名单匹配筛选出一些日志,得到244w条日志。
统计黑名单中的邮箱/IP发过的所有邮件和垃圾邮件的数量,可视化分析可以发现
绝大多数黑名单中的邮箱/IP发过的邮件几乎全部都是垃圾邮件,但是其中有一小部分邮箱/IP只发过一两封垃圾邮件,它们的总邮件数远大于垃圾邮件数
根据我们使用邮箱的经验,这部分可能属于偶尔存在一两封邮件被误判为了垃圾邮件
以下为筛出的部分只发过一封垃圾邮件的邮箱发过的总邮件数
为了剔除这部分误判,我们设置了一个经验阈值0.1,如果只有十分之一的邮件被判为垃圾邮件,有很大可能属于系统误判,则将该email从黑名单里剔除。
0.1这个经验阈值的设置在我们比赛的数据集里并不一定是最优解,也并不一定是客观上最合理的数值,但由于提交次数的限制难以对其进行更进一步的优化。我们相信对于经验阈值的优化会使得最后结果的准确率进一步上升。
0x4 高威胁异常登录识别
攻击者IP
遍历auth_log.json
,统计每一个邮箱账户存在多少个登录的IP地址
绝大多数的数据都是1,在图一中完全看不出比较异常的数据
后续1、10、60均为分布的中位数,可以看到存在60个以上IP登录的邮箱仍然有很多个,准确的说是有2971个邮箱
从经验上、直觉上看这部分邮箱肯定是异常的,而异常原因需要进一步分析。
以其中登录IP最多的邮箱为例,这个邮箱的日志中一共有6859个不同的IP地址
其中6857个IP均为登录成功的日志
另外2个IP地址尝试了63中不同的password_hash
,均为登录失败的日志
姑且不论这6857个IP,230.130.182.189
和154.219.168.240
这两个IP的行为显然是在尝试暴力破解邮箱的密码,显然属于异常登录
因此类似这样的IP地址被添加进黑名单中作为攻击者控制的高威胁IP地址
拥有6857个登录成功的IP,这也是一种异常,检验后发现这个邮箱在我们的垃圾邮箱黑名单中,这就解释得通了。
Replay Attack?
在分析数据的过程中我们一直觉得数据有一些奇怪
尤其是在尝试利用10s内异地登录进行匹配时,发现结果异常的多
到了最后一天下午的时候,我们尝试将原本的数据去除id
进行去重
发现去除ID和client_software_fingerprint
之后原本的3500w数据只剩下了500w
在此基础上增加了client_software_fingerprint
之后发现数据总量约1000w
我们怀疑可能在其中存在大量的replay attack
但是由于最后一天才有这一思路,最终也没有来得及将其实现
如果从时序上进行分析,识别出这种replay的攻击包,或许对于发现高威胁的登录成功有比较好的效果
0x5 总结
最终我们的策略比较简单,就是简单的将前面提到的两个黑名单进行合并
之后将所有登录失败的请求以及黑名单命中的请求判定为异常
Comments are closed