盗号是互联网业务中常见的恶意行为。盗号的渠道也非常多,从暴力破解到撞库都可能导致账户被盗,单纯依赖用户名和密码认证已经无法保障账户的安全。我们使用脱敏的测试数据来演示疑似账户被盗的情况。测试样本记录了微软的邮件系统的手机客户端成功登录日志:
uid=mike,ip=ip1,tel=tel1,activesyncid=1 uid=mike,ip=ip2,tel=tel1,activesyncid=2 uid=mike,ip=ip3,tel=tel1,activesyncid=2 uid=john,ip=ip1,tel=tel2,activesyncid=2 uid=john,ip=ip4,tel=tel2,activesyncid=2 uid=john,ip=ip5,tel=tel2,activesyncid=2
字段含义分别为:
·uid,用户名;
·ip,登录IP地址;
·tel,安装微软邮件客户端的手机的手机号;
·activesyncid,安装微软邮件客户端的手机对应activesyncid,该id全局唯一,与硬件绑定,类似微软在PC上的guid。
疑似账户被盗逻辑上对应的拓扑结构如图13-19所示。
图13-19 疑似账户被盗示意图
从拓扑图可以看出来,activesyncid为2的硬件登录了mike和john两个账户,mike历史上曾经成功登录过activesyncid为1的硬件以及activesyncid为2的硬件,初步判定activesyncid为2的硬件盗取了mike的账户登录。
逐行处理样本文件,获取对应的uid、ip、tel、activesyncid:
with open("../data/KnowledgeGraph/sample1.txt") as f: G = nx.Graph() for line in f: line=line.strip('\n') uid,ip,tel,activesyncid=line.split(',')
以uid为中心,添加对应的ip、tel、activesyncid节点:
G.add_edge(uid, ip) G.add_edge(uid, tel) G.add_edge(uid, activesyncid)
可视化知识图谱:
nx.draw(G, with_labels=True, node_size=600) plt.show()
对应知识图谱见图13-20。
图13-20 疑似账户被盗的知识图谱