钓鱼网站识别【机器学习】

本文涉及的产品
.cn 域名,1个 12个月
简介: 本文介绍如何使用机器学习技术检测一个URL是否是钓鱼网站,内容包括数据抓取、特征选择和模型训练等。 我有一个客户的邮箱最近差点被钓鱼网站骗掉。他的供应商的邮件被攻击了,然后黑客使用这个供应商的邮箱给他发了一封催款邮件,要求他支付到另一个银行账号。

本文介绍如何使用机器学习技术检测一个URL是否是钓鱼网站,内容包括数据抓取、特征选择和模型训练等。

我有一个客户的邮箱最近差点被钓鱼网站骗掉。他的供应商的邮件被攻击了,然后黑客使用这个供应商的邮箱给他发了一封催款邮件,要求他支付到另一个银行账号。幸运的是,我的客户给那个供应商
打电话进行了确认因此发现了骗局。这使我意识到钓鱼攻击到处都在,我们不应当低估它的危害。

下面是一些钓鱼网站的例子,基本上他们的目的就是骗到你的登录账号和密码。这是一个仿冒Paypal的钓鱼站:

在这里插入图片描述

这是一个仿冒的游戏站:

在这里插入图片描述

1、初步分析

在Kaggle上有一些钓鱼数据集,但是为此项目我希望生成自己的数据库。我使用了两种数据源来构建钓鱼URL清单:

  • 合法URL:Ebubekir Büber (github.com/ebubekirbbr)
  • 钓鱼URL:phishtank.com

利用一点领域知识对这些合法和钓鱼URL进行分析,我将可以从URL中得到的信息分为以下5个类别:

通过分析我还有以下的发现:

  • 钓鱼攻击者通常会黑进合法的网站来插入钓鱼网页,而不是搭建一个独立域名进行 钓鱼攻击。虽然这会让从域名来识别钓鱼网站更困难,我理解注册商和托管商一旦 发现钓鱼网页都会迅速通知站长移除以避免对其排名的影响。这意味着我们可能会 看到被攻击的域名的注册商为空。
  • 有些钓鱼网站可能包含恶意代码而不是直接在浏览器中载入URL。我这样操作:

2、数据获取

我的数据抓取器的概念模型大致如下:

在这里插入图片描述

基本的思路是尽可能保持代码的模块化,这样我就可以在需要的时候添加新的分类。我抓取的每个页面都在本地文件存储,以便这些页面在将来不可用时有个参考依据。

我使用BeautifulSoup来提取页面信息,通过设置随机的user-agent,可以减少请求被当作bot拒绝的可能。

为了保证一致性,我也对URL进行了基本的预处理,例如移除www和结尾的斜杠。

3、探索式数据分析

学编程,上汇智网,在线编程环境,一对一助教指导。

由于抓取数据非常耗时,我决定开始我的探索式数据分析来找点感觉。在分析了1817个URL(其中包括930个钓鱼URL和887个合法URL)的特征之后,我选择使用以下15个特征:

  URL            Domain          Network      Page       Whois    
 -------------- --------------- ------------ ---------- --------- 
  length         len_subdomain   len_cookie   length     w_score  
  special_char   is_https                     anchors             
  depth                                       form                
                                              email               
                                              password            
                                              signin              
                                              hidden              
                                              popup

4、特征选择

我是用LASSO正则化来识别重要的特征。即使只用了一个小alpha值,我已经发现了5个重要的特征:

[('len', 0.0006821926601753635),
('count_s', 0.0),
('depth', 0.0),
('len_subdomain', 0.0),
('is_https', 0.0),
('len_cookie', -0.0002472539769316538),
('page_length', -2.4074484401619206e-07),
('page_num_anchor', -0.0006943876695101922),
('page_num_form', -0.0),
('page_num_email', -0.0),
('page_num_password', 0.0),
('page_num_signin', 0.0),
('page_num_hidden', -0.00041105959874092535),
('page_num_popup', -0.0),
('w_score', -0.0)]

坦白说,对于w_score没起作用我有点惊讶。最终我决定使用这5个特征。

  URL      Domain   Network      Page      Whois  
 -------- -------- ------------ --------- ------- 
  length            len_cookie   length           
                                 anchors          
                                 hidden

然后我使用KNN搭了一个简单的分类器作为基线。K选择3并得到了还算可以的准确率0.793:

在这里插入图片描述

5、模型

通过抓取我得到6906 个url,3501合法, 3455 钓鱼。不出意外的是许多钓鱼页面不可访问了:

 Type    #URL processed   #Pages available  
------- ---------------- ------------------ 
 Legit            4,000              3,501  
 Phish            6,000              3,455

利用这6906个样本我再次进行特征选择,筛选出同样的5个特征。最优的K还是3,很好!

下面是模型的参数:

Model               Accuracy  
------------------- ---------- 
Naive Bayes            0.757  
SVC                    0.760  
KNN (K=3)              0.791  
Log. Reg.              0.822  
Decision Tree          0.836  
KNN (K=3, scaled)      0.845  
Random Forest          0.885

原文链接:用机器学习检测钓鱼网站 — 汇智网

目录
相关文章
|
7月前
|
数据采集 机器学习/深度学习 存储
【机器学习】数据清洗之识别缺失点
【机器学习】数据清洗之识别缺失点
69 1
|
7月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
125 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
7月前
|
机器学习/深度学习 数据可视化 PyTorch
零基础入门语义分割-地表建筑物识别 Task5 模型训练与验证-学习笔记
零基础入门语义分割-地表建筑物识别 Task5 模型训练与验证-学习笔记
506 2
|
5月前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
6月前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
60 0
|
7月前
|
机器学习/深度学习 数据采集 PyTorch
机器学习 —— MNIST手写体识别(上)
机器学习 —— MNIST手写体识别
|
6月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】45. Pytorch迁移学习微调方法实战:使用微调技术进行2分类图片热狗识别模型训练【含源码与数据集】
【从零开始学习深度学习】45. Pytorch迁移学习微调方法实战:使用微调技术进行2分类图片热狗识别模型训练【含源码与数据集】
|
7月前
|
机器学习/深度学习 数据可视化 Python
机器学习 —— MNIST手写体识别(下)
机器学习 —— MNIST手写体识别(下)
|
机器学习/深度学习 数据采集 自然语言处理
基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树
基于机器学习的情绪识别算法matlab仿真,对比SVM,LDA以及决策树
|
7月前
|
机器学习/深度学习 数据可视化 数据处理
python 机器学习 sklearn——一起识别数字吧
python 机器学习 sklearn——一起识别数字吧