13.6.2 检测疑似撞库攻击

撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的账号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网站,这就可以理解为撞库攻击。2014年12月25日,12306网站用户信息在互联网上疯传。对此,12306官方网站称,网上泄露的用户信息系经其他网站或渠道流出。据悉,此次泄露的用户数据不少于131653条。该批数据基本确认为黑客通过“撞库攻击”所获得。我们使用脱敏的测试数据来演示疑似撞库攻击的情况。测试样本记录了微软的邮件系统的网页版登录日志,其中既包含登录成功也包含登录失败的情况:


uid=mike,ip=ip1,login=yes,ua=ua1
uid=mike,ip=ip1,login=no,ua=ua1
uid=lily,ip=ip1,login=yes,ua=ua1
uid=willy,ip=ip1,login=no,ua=ua1
uid=tony,ip=ip1,login=yes,ua=ua1
uid=charly,ip=ip1,login=yes,ua=ua1
uid=steven,ip=ip1,login=no,ua=ua1
uid=mery,ip=ip1,login=no,ua=ua1
uid=john,ip=ip1,login=no,ua=ua1

字段含义分别为:

·uid,用户名;

·ip,登录IP地址;

·login,登录状态,yes表明登录成功,no表明登录失败;

·ua,浏览器的ua字段,通常结合ip和ua字段可以在一定程度标识一个用户或者设备。

疑似撞库攻击逻辑上对应的拓扑结构如图13-21所示。

图13-21 疑似撞库攻击示意图

从拓扑图可以看出来,大量账户从ip1登录,并且ua字段相同,登录失败和成功的情况均存在,疑似发生了撞库攻击行为。通常情况下,同一IP不会出现大量登录行为,即使办公网出口这种人员密集的地方,也应该主要是登录成功为主,不应该登录成功与失败数量均比较大。

逐行处理样本文件,获取对应的uid、ip、login、ua字段:


with open("../data/KnowledgeGraph/sample2.txt") as f:
    G = nx.Graph()
    for line in f:
        line=line.strip('\n')
        uid,ip,login,ua=line.split(',')

以uid为中心,添加对应的ip、login、ua节点:


G.add_edge(uid, ip)
G.add_edge(uid, login)
G.add_edge(uid, ua)

可视化知识图谱:


nx.draw(G, with_labels=True, node_size=600)
plt.show()

对应知识图谱见图13-22。

图13-22 疑似撞库攻击的知识图谱