13.6.1 检测疑似账号被盗

盗号是互联网业务中常见的恶意行为。盗号的渠道也非常多,从暴力破解到撞库都可能导致账户被盗,单纯依赖用户名和密码认证已经无法保障账户的安全。我们使用脱敏的测试数据来演示疑似账户被盗的情况。测试样本记录了微软的邮件系统的手机客户端成功登录日志:


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 疑似账户被盗的知识图谱