如何自己搭建钓鱼网站检测系统

news/2024/5/15 16:10:05/文章来源:https://blog.csdn.net/GarfieldEr007/article/details/51475937

Image

0×01基本系统架构

随着电子商务、互联网金融的快速发展,在利益的驱使下,从事“钓鱼攻击”的黑产呈逐渐上升趋势。“钓鱼攻击”不仅对企业的品牌形象造成严重损害,还对用户的账户安全、甚至资金安全构成了极大的威胁。

目前“钓鱼攻击”已经为了网络欺诈的重要一环,因此反钓鱼系统在电子商务、金融证券、电信运营商等企业的安全运营中起着越来越重要的地位。

反钓鱼系统一般有如下两种架构。

ac-1.jpg

对于这种架构主要适用于缺乏终端控制力的企业。企业可以从各个渠道收集待检测的url,检测引擎调用利用WebKit引擎获取页面渲染后的有效内容,然后调用检测算法对页面内容进行检测。检测后将检测结果存至数据库,之后将检测结果输出至第三方的拦截系统、关停服务提供商等,最终遏制“钓鱼攻击”的发生。

ac-2.jpg

对于第二种架构,适用于拥有大量终端的企业,利用终端的能力代替了WebKit。终端直接将疑似页面的特征发回后端的检测引擎,检测引擎生成检测结果、产出黑名单,同时将检测结果的返回至终端。

0×02检测引擎

检测引擎做为反钓鱼系统的核心承担着识别页面是否为钓鱼网站的任务。针对钓鱼网站的检测手段主要有IP黑名单,url分析,域名注册信息分析,页面内容分析,图像识别等方法。

其中页面内容分析一直是钓鱼页面识别的主要手段。页面识别的主要算法有贝叶斯算法、机器学习算法、Html文档特征等算法。

下面介绍下如何使用贝叶斯算法进行页面识别。

贝叶斯算法简介

贝叶斯分类是一类分类算法的总称,是关于随机事件A和B的条件概率和边缘概率的一则定理。

        by.png

  • P(A)是A的先验概率或边缘概率。之所以称为”先验”是因为它不考虑任何B方面的因素;
  • P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率;
  • P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率;
  • P(B)是B的先验概率或边缘概率,也作标准化常量。

分类原理

我们用W来代表一个待分类的网页,用h+钓鱼网页,用h-代表正常网页。利用贝叶斯公式,判定页面是否为钓鱼网页可描述为:

  • P(h+|W)=P(h+)*P(W|h+)/P(W)
  • P(h-|W)=P(h-)*P(W|h-)/P(W)

P(W)为常量,可以暂时忽略。P(h+)、P(h-)为先验概率,即一个真实的网页集合中,钓鱼网页的比例与正常网页的比例。

为了求得P(W|h),我们可以将W进行分词,W={w1,w2,w3…}。如果我们假设w1,w2等是条件无关的,则P(W|h+)=P(w1|h+)*P(w2|h+)*P(w3|h+)。

P(wi|h+)经过Laplacean平滑处理后,P(wi|h+)=(1 + 特征词wi在h+训练集中的词频)  /  (全部特征词去重个数  +  h+下所有词出现总数)。

这样我们便能计算出P(h+|W)与P(h-|W),比较大小可知页面属于哪一分类。

数据准备

为了获取待检测域名,我们可以从ICANN的Centralized Zone Data Service免费获取到全球的域名列表,做差量可得到全球的每日新增域名。之后将每日新增的域名导入到我们的待检测列表。

我们可以通过Python调用Phantomjs去获取页面中内容。

Phantomjs:

var webPage = require('webpage');
var system = require('system');
var page = webPage.create();if (system.args.length === 1) {console.log("error");phantom.exit();
} else {url = system.args[1];page.open(url, function (status) {if (status == 'success') {var content = page.content;console.log(content);} else {console.log("error");}phantom.exit();});
};

Python:

def get_page_content(url):cmd = 'phantomjs getPageContent.js %s' % (url)stdout, stderr = subprocess.Popen(cmd, shell = True,stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()return stdout

为了得到一个贝叶斯分类器,需要一个样本集对其进行训练。首先要对页面做打标分类,一类为钓鱼页面样本集,一类为正常页面样本集。样本集就是我们的原始训练素材。

建立模型

这里针对中文的钓鱼页面建立分类模型,我们先使用正则提取出原始页面中的中文字符。

def get_chinese_content(raw_page_content):content_list = re.findall(ur"[\u4e00-\u9fa5]+", raw_page_content)return "".join(content_list)

获取页面中文内容后,我们对其进行分词。

def get_seg_list(chinese_content):return jieba.cut(chinese_content)

有了基础数据后,就可以开始训练贝叶斯模型。我们需要一份停用词表,类似下面的无意义作为停用词,从样本集的分词结果中去掉。

一,一下,一个,一些,的,了,和,是,就,都,而,及,與,著,或,一何,一切......

我们需要统计出在两个样本集中总共出现了多少个不同的词 all_unique_word_count。之后我们需要分别求出钓鱼样本集与正常样本集各自出现了多少词汇,all_phish_word_count, all_normal_word_count。

def count_all_unique_word(word_list):return len(set(word_list))all_unique_word_count = count_all_unique_word(all_word_list)

接下来我们分别统计钓鱼网页样本集与正常网页样本集中各个词语的词频信息,phish_word_frenquency_dict, normal_word_frequency_dict。

def get_word_frequency(word_list):frequency_dict = dict()for w in word_list:if frequency_dict.has_key(w):frequency_dict[w] = frequency_dict[w] + 1else:frequency_dict[w] = 1return frequency_dictphish_word_frenquency_dict = get_word_frequency(phish_word_list)
normal_word_frequency_dict = get_word_frequency(normal_word_list)

根据贝叶斯分类器原理推导的公式,可以计算出P(wi|h+)概率列表phish_word_probability_table与P(wi|h-)的概率列表normal_word_probability_table,这两个table就是贝叶斯模型的核心,需要保存下来。

def get_word_probability_table(word_frequency_dict, category_word_count, all_unique_word_count):probability_dict = dict()for key, value in word_frequency_dict.items():probability_dict[key] = (1 + value) / (all_unique_word_count + category_word_count)return probability_dictphish_word_probability_table = get_word_probability_table(phish_word_frequency_dict, all_phish_word_count, all_unique_word_count)
normal_word_probability_table = get_word_probability_table(normal_word_frequency_dict, all_normal_word_count, all_unique_word_count)

P(h+)、P(h-)我们可以直接求出,即训练样本集中钓鱼网页数目与正常网页数目的比例probability_phish,probability_normal。

钓鱼检测

当有了训练好的模型后,只要获取了页面的内容,进行分词。查询phish_word_probability_table与P(wi|h-),计算出P(h+|W)与P(h-|W),比较大小,判定是否为钓鱼页面。

def analyse_page(raw_page_content, probability_phish, probability_normal, phish_word_probability_table, normal_word_probability_table):page_word_list = get_seg_list(get_chinese_content(raw_page_content))p_phish = probability_phishp_normal = probability_normalfor w in page_word_list:p_phish = p_phish * phish_word_probability_table[w]p_normal = p_phish * normal_word_probability_table[w]return True if p_phish > p_normal else False

0×03 策略、改进

“钓鱼攻击”者为了躲避反钓鱼系统的检测,常常采取屏蔽反钓鱼检测系统IP,屏蔽特定UA,页面使用js或flash进行动态渲染,全页面图片化等手段。

反钓鱼系统为了与之对抗,需要充分利用云端与终端的优势,突破钓鱼网站对检测系统的屏蔽,并采取动态渲染的方式加载js、flash获取页面内容。检测技术也从单一的文本分析进化到了大数据统计分析、机器学习分类算法、HTML特征、图像识别等手段,对可疑页面进行实时的分析。甚至是仅仅注册了钓鱼域名,钓鱼网站还未开通,就对高危域名做出了预判,对风险进行感知,以降低用户受到网络欺诈的风险。

*本文作者:阿里云誉反欺诈(企业帐号),转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)


from: http://www.freebuf.com/articles/web/104870.html?utm_source=tuicool&utm_medium=referral

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_704591.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给网站配置免费的HTTS证书

最近看到网上说 https 的网站 Google 会优先收录,所以就抽时间记录下配置博客的过程。 ACME 使用 LetEncrypt 证书作为博客的 https 实现方式。 acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. github https://github.com/Neilpang/acme.sh 主要步骤…

你写论文时发现了哪些神网站?

周不润,神经科学收录于 编辑推荐•18860 人赞同神网站算不上,都是一些为写作带来便利的网站。而且作为一些最常用网站的替代品,这些网站有的更精确,有的更便捷。(16.02.27 更新)以下内容包括:选…

网站设计师必备50教程

很必然,下面的50个教程都源自于国外,虽然是E文,但是我相信很多朋友都有能力读懂,实在不行的。。就拜托一些翻译工具吧,但是积少成多,希望别用太多,很多东西都是要靠自己来理解的,这5…

有哪些优秀的科学网站和科研软件推荐给研究生?

ljthyd ,食品科学博士,粮食加工2032 人赞同写几个常见的我觉得挺好的网站及软件,也不知道你什么学科,就写一些所有学科基本都用得到的吧。1、小木虫论坛(小木虫论坛 - 学术科研第一站)及其APP这个论坛应该相…

网站建设ASP中UTF-8与GB2312编码转换乱码问题的解决方法

现在blog程序一般都是utf-8编码的,要在网站里加入其它的程序的话,如果不是utf-8而是gb2312的话,在页面转换的时候很容易出现打开的页面时乱码,经过查找资料和测试,总结出现在最好的一个方法,先了解一下基础…

有哪些高质量的图片网站(社区)推荐?

知乎用户 ,十年饮冰,难凉热血。45 人赞同免费 可商用 不需要署名 Gratisography: Free, use as you please, high-resolution pictures.http://picjumbo.com/page/5/Life Of Pix - Free Stock Photos & ImagesIM Free - Free Images, Free Icons, Fr…

刚学编程的程序员必备这5大编程网站,你知道几个?

一个好的网站,就是程序员学编程的基地。虽说新手程序员也许知道一些在线编程网站,但是质量上乘的编程网站又知道几个呢?下面就来给大家推荐5个质量上乘的编程网站:0、LeetcodeLeetCode是大名鼎鼎的在线刷题网站,通过该网站的刷题…

如何注册域名-买服务器-备案-建设网站

谁可以提供如何注册域名-买服务器-备案-建设网站? 域名没问题、服务器也买了、备案啊?网站呢? 谁是大神请指点!

Web网站架构演变—高并发、大数据

转 Web网站架构演变—高并发、大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: 用户模块:用户注册和…

LNMP动态网站

LNMP基础知识 什么是LNMP 主流的企业网站平台之一L:Linux操作系统N:Nginx网站服务软件M:MySQL.MariaDB数据库P:网站开发语言(PHP.Perl.Python) 静态网站和动态网站区别 静态网页: (1)静态网页不能简单地理解成静止不动的网页,他…

项目:部署LNMP动态网站

部署LNMP动态网站 问题 部署LNMP动态网站,实现以下目标: 安装LNMP平台相关软件配置Nginx实现动静分离配置数据库,创建账户与密码上线Wordpress代码使用Wordpress后台管理界面,调整Wordpress版式 方案 实验拓扑如图所示&#…

项目:网站架构,集群

网站架构的演变 问题 单机版LNMP独立数据库服务器Web服务器集群与Session保持动静分离、数据库集群各种缓存服务器业务模型 单机版LNMP 单机版网站,拓扑如图所示。 用户量少时使用,简单、成本低、存在单点故障。 独立数据库服务器 独立数据库服务…

搭建WordPress个人网站

准备域名 搭建网站的第一步肯定拥有一个自己的域名(当然愿意用IP地址直接访问也没什么问题),域名购买途径很多,阿里云、腾讯云、百度云等服务器供应商都能购买域名,一般建议域名和服务器都在同一个平台购买&#xff0…

设计企业网站大纲_哈尔滨企业网站设计费用,网站开发公司_华阳网络

天津华阳在线科技有限公司为您详细解读哈尔滨企业网站设计费用,网站开发公司的相关知识与详情:中企动力一般会先确定客户的网站所属行业,仔细分析其市场前景,明确市场与网站的需求特点,评估网站未来的发展空间。确认网站的市场需求以上的这些就是影响网站运营的两大…

python制作动态网站_精析Python3实现动态web服务(附服务端源码)

实现一个简单的静态web网站,只需将写好的html页面上传到特定的web服务器软件即可,但静态网页其实和图片没什么区别,每次更新网站内容,都需要重新制作html页面,然后上传给提供web服务的软件,替换原来的html页面,也就完成了更新,以一个正常人的思维方式,每次更新内容都要重新生成…

博客网站源代码_网站建设技术--WORDPRESS

一、Wordpress是什么?Wordpress是世界上应用最广泛的开源CMS程序。用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。全球1/4的网站都是用wordpress制作,它起初只是一款个人博客系统,之后逐步演化成一款内容管理系统软件&#x…

无法更改域名 php网页,WordPress更改新域名后网站无法正常运行怎么办?

很多站长在吐槽WordPress站点更改域名后网站无法正常运行,其实这是一个比较简单的问题,一般新手站长会经常遇到这个问题,那么WordPress更改新域名后网站无法正常运行怎么办?方法一:修改wp-config.php1、在wp-config.ph…

Ubuntu系统下的云服务器网站搭建

Ubuntu系统下的云服务器网站搭建(一) 由于近来一直在学网页开发,所以对于WAMP环境下的网站搭建虽不能说多么精通,但是对于其中流程还是比较熟悉的。并且自己也在本机上写了一些有点规模的网站,通过把自己本地的web服务…

作为前端,你不得不知道的SEO

研发的同学,其实很多人并没有深入了解SEO这个概念。在技术博客里,提及这一块的也寥寥无几。我今天就拿自己的经验,简单给大家扫个盲,有什么遗漏的地方,欢迎大家补充。 文字内容有点多,但是干货满满&#xf…

Dfinity入门——配置环境并部署一个简易的网站

环境 我的环境是Mac,如果是win或者Linux可以看官网的部署文档。 1.安装SDK 打开shll终端 #安装SDK sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)" #安装指定版本 DFX_VERSION0.7.2 sh -ci "$(curl -sSL https://internetcompute…