文章作者:

Seven-机器学习算法工程师

李晴-Zilliz 数据工程师

背景介绍

在海量信息中,不乏非法分子利用网络骗取用户信任并从中获利,钓鱼网站就是其中之一。“钓鱼”网站的网址、网页内容、布局等与真实网站极其相似,没有安全意识的网民容易因此上当受骗,造成严重后果。

现有的比较典型的检测钓鱼网站的方法有:基于黑白名单机制的检测,基于文本特征或网页图像特征的匹配检测,和基于机器学习的分类检测。然而,基于黑白名单的检测方法时效性较差,名单范围也存在着不足;基于特征的算法的准确性和鲁棒性又不是很理想。近年来,机器学习应用于各领域并取得巨大成功,尤其是将深度学习应用于检测识别可以有效得提高检测效率。基于此,本文将介绍如何结合深度学习与 Milvus 向量搜索引擎,以提高对钓鱼网站的正确检测率和检测速度。

优化手段

机器学习用于识别图像中的物体、将语音转换为文字、匹配新闻条目以及推荐系统。这些应用越来越多地使用深度学习技术,并且显著提高了语音识别、目标识别和检测效果。

将深度学习应用于钓鱼网站的检测能取得良好的效果,目前深度学习的常用模型包括自动编码器(AutoEncoder)、卷积神经网络、深度信念网络。最广为人知的卷积网络训练出的模型有较强泛化能力,但是它的深度模型梯度易消散,主要用于二维数据尤其适用于图像方面。相比之下, 虽然自动编码器是全连接网络、训练时需要较多参数,但是其具有较强数据表征能力、大量数据场景适用的优点。

因此,为了减少对钓鱼网站的误报和漏报,本文利用 AutoEncoder 模型对钓鱼网站截图进行图片特征提取。我们对以往收集的各类钓鱼网站进行整理,并对该网址的首页图片进行特征提取。结合 Milvus 进行特征存储和特征搜索。最后根据匹配结果,再对经过阈值筛选的网站进行域名信息和 whois 信息对比,最终达到检测钓鱼网站的目的。

架构

整体流程

  1. 数据收集阶段:收集各类钓鱼网站首页截图。
  2. 模型训练阶段:利用收集的图片作为训练集进行 AutoEcoder 模型的训练。
  3. 特征提取模块:利用训练好的模型对钓鱼网站图片进行特征提取。通过在 Milvus 中插入特征向量获得 ID,将 ID 与其向量属性插入 PostgreSQL 数据库。
  4. 钓鱼检测模块:利用 Milvus 进行特征向量检索,根据获得的 ID 进一步在 PostgreSQL 查询。
  5. 调试匹配的阈值。
  6. 查询高于设定阈值的网站所对应的真实网站的 whois 信息和域名备案信息,比较它们与查询网站的此类信息。

Note:本项目从测试版 v1 升级到实验版 v2,运用 Milvus 对特征相似度计算部分进行了优化。在 1.0 版本中,本项目将特征存储为 numpy.array 格式,因此在相似特征匹配阶段是通过遍历 .npy 文件进行的相似度计算。在 2.0 版本中引入 Milvus 后,大大提升了此模块的搜索速度。

特征提取模型

此处选用了 AutoEncoder 用于特征提取。它是一种深度学习模型,是数据压缩降维和特征提取的一种有效方式。

AutoEncoder 框架包含两大模块:编码模块和解码模块。通过编码模块将输入样本映射到特征空间得到 compressed data,即编码过程;然后再通过解码模块将抽象特征映射回原始空间得到重构样本,即解码过程。模型的优化目标则是通过最小化重构误差来同时优化 encode 和 decode。

本项目利用收集到的网站图片训练 AutoEncoder 网络。测试图片经过训练好的网络的 encode 可以得到代表原网站图片数据的 compressed data。

Milvus 探索

Milvus 向量搜索引擎支持使用多种 AI 模型向量化非结构化数据,并为向量数据提供搜索服务。它可处理的业务包括图像处理、机器视觉、自然语言处理、语音识别、推荐系统以及新药发现等 AI 模型,为向量化后的非结构数据提供搜索分析服务。通过深度学习模型将非结构化数据转化为特征向量导入 Milvus 库,Milvus 对特征向量进行存储并建立索引,然后在 Milvus 中进行搜索,Milvus 将返回与搜索向量相似的结果。

在本项目存储阶段,特征向量存储至 Milvus 后可得到向量的唯一标识 ID。我们使用了传统关系型数据库:PostgreSQL ,用于存储 ID 和向量。查询阶段,将 Milvus 向量检索结果,在 PostgreSQL 中进一步查询,即可快速得出混合查询结果,具体解决方案如下:

特征向量存储(蓝色实线)

  • 将源特征向量数据存入 Milvus 特征向量数据库,Milvus 会给返回每个源向量数据对应的 ID。
  • 将每个特征向量的唯一标识 ID 与其标签属性存储至关系型数据库。

特征向量检索(橙色实线)

  • 向 Milvus 中传入需要查询的特征向量数据,Milvus 会得出与搜索向量相似度最高的查询结果 ID。
  • 利用该结果 ID 在 PostgreSQL 中进行查询,最终得出检索向量的混合查询结果,包含 ID、向量、标签属性和距离计算结果。

判断检测结果

得到的高于阈值要求的匹配结果后,因为存在钓鱼网站与真正的网站外观一模一样的情况,所以我们需要进一步查询这些钓鱼网站相对应的正常网站的 whois 信息和域名备案信息,比较它们与查询网站的此类信息。

例如,因为钓鱼网站上的域名备案号与钓鱼网站仿冒的正常网站是一样的,所以可以使用正常网站的备案号去查询域名。将正常网站的域名与查询网站进行对比,如果一致则为正常网站,反之为钓鱼网站。如果没有域名备案,则需要查询双方的 whois信息。例如,注册时间较短或者有效时间较短的域名更可能是钓鱼网站。

结语

本文介绍了 Milvus 在钓鱼网站检测方面的实践,采用混合查询的方式提升了对钓鱼网站的正确检测率和检测速度。目前,因为 Milvus 稳定且高效的向量检索性能,本项目极大地节省了开发成本并满足业务需求。本项目组将尝试在语音领域、自然语言处理领域,和计算机视觉等领域继续引入 Milvus 的服务。未来,我们也会持续关注 Milvus,期待更多新功能的出现!

参考文献

  1. 许珑于. 基于深度学习的钓鱼网站检测技术的研究[D].电子科技大学,2017.
  2. Image Compression Using AutoEncoder in Keras

欢迎加入 Milvus 社区

=======================

github.com/milvus-io/milvus 源码

milvus.io 官网

zhihu.com/org/zilliz-11/columns 知乎

zilliz.blog.csdn.net CSDN 博客

space.bilibili.com/478166626 Bilibili


Zilliz
154 声望829 粉丝

Vector database for Enterprise-grade AI