钓鱼网站+机器学习
特征
这边给出的关于钓鱼网站的重要特征, 已经被证明是合理有效的.
基于地址栏的特征
IP地址
如果一个网址, 在URL中使用IP地址来替代域名, 如: "http://125.98.3.123/fake.html", 那么该网址有很大的概率是一个钓鱼网站, 试图窃取用户的个人信息. 这边的IP地址除了 IPv4 的, 也可能有 IPv6 的, 如: "http://0x58.0xCC.0xCA.0x62/2/paypal.ca/index.html".
规则:
if 域名被IP代替 钓鱼网站 else 合法网站
长网址
钓鱼网站可能会使用较长的URL, 以达到隐藏其中可疑部分的目的. 如: http://federmacedoadv.com.br/3f/aze/ab51e2e319e51502f416dbe46b773a5e/?cmd=_home&dispatch=11004d58f5b74f8dc1e7c2e8dd4105e811004d58f5b74f8dc1e7c2e8dd4105e8@phishing.website.html
为了提高准确度, 通过计算数据集中URL的平均长度, 得出如下结论: 如果URL的长度超过54个字符, 则有很大概率为钓鱼网站.
规则:
if URL长度 < 54 合法网站 else if 54 <= URL长度 <= 75 可疑网站 else 钓鱼网站
使用缩略网址服务
缩址, 指的是一种互联网上的技术与服务, 此服务可以提供一个非常短小的URL来代替原来的可能较长的URL, 将长的URL地址缩短. 当用户访问缩短后的URL时, 会被重定向到原来的URL.
大多数的URL缩短服务都有提供API.
由于缩短网址具有隐藏原始网址的特性, 用户无法通过短网址的"外观"得知真实网址, 因此短网址便成为有心人士利用来散播电脑病毒及有害内容的渠道. 目前已经有部分短网址服务集成信息安全厂商提供的网址检查机制, 提供用户在点击短网址时预览真实网址以进行安全性检查.
如: "http://portal.hud.ac.uk/" 可以被缩短为 "bit.ly/19DXSk4".
规则:
if 缩略网址 钓鱼网站 else 合法网站
@字符
在URL中使用@字符, 会导致浏览器忽略@字符前的所有内容, 而实际地址通常跟在@字符后面.
规则:
if URL中含有@ 钓鱼网站 else 合法网站
使用//重定向
如果在URL中存在"/", 则用户将被重定向到其他网站. 如: "http://www.legitimate.com//http://www.phishing.com". 可以检查"/"出现的位置, 如果URL以"HTTP"开头, 则"/"应该出现在第6位, 如果URL以"HTTPS"开头, 则"/"应该出现在第7位.
规则:
if "//"最后出现的位置 > 7 钓鱼网站 else 合法网站
域名中带"-"
"-"字符很少用在合法的URL中. 钓鱼者通常会添加以"-"来分隔域名, 使用户感觉他们正在处理合法的网页. 如: "http://www.Confirme-paypal.com".
规则:
if 域名部分包含"-" 钓鱼网站 else 合法网站
子域名或多子域名
如果有链接: "http://www.hud.ac.uk/students/". 一个域名可能包含国家代码顶级域名(在这个链接中是英国:uk). "ac"是"学术"的缩写, 组合的"ac.uk"被称为二级域, "hud"是域的实际名称.
删除"www."和".国家代码顶级域名(如果存在)"后, 计算"."的数量, 如果数量大于1, 则很有可能是钓鱼网址.
规则:
if 域名中"."的数量 == 1 合法网站 else if 域名中"."的数量 == 2 可疑网站 else 钓鱼网站
HTTPS
检查HTTPS证书的颁发机构及证书的年龄. 值得信赖的证书颁发机构包括:"GeoTrust, GoDaddy, Network Solutions, Thawte, Comodo, Doster, VeriSign". 另外, 通过测试数据集, 可以发现, 有信誉证书的最低年龄为2年.
规则:
if 机构值得信赖 and 证书年龄 >= 1 合法网站 else if 机构不值得信赖 可疑网站 else 钓鱼网站
域名注册时间
钓鱼网站的域名一般不会注册太长时间, 而可信域名一般会提前支付几年的费用. 在数据集中, 可以发现钓鱼网站的域名最长使用时间仅1年.
规则:
if 域名期限 <= 1年 钓鱼网站 else 合法网站
favicon图标
favicon是网站的缩略图(也称为收藏夹图标), 一般在地址栏会显示出来. 如图所示:
而这些图片, 一般会托管在域名中.
规则:
if favicon从域外加载 钓鱼网站 else 合法网站
使用非标准端口
有些钓鱼网站使用了非80端口, 因此, 从URL中获取的网站商品号是作为识别钓鱼网站的一个重要依据.
规则:
if 使用了非标准商品 钓鱼网站 else 合法网站
域名中含有HTTPS或HTTP
基于异常
检查Request请求
合法的网页中, 网页地址和网页中嵌入的大部分对象共用相同的域. 通过检查Request请求占所有请求的频率, 来判断是否为钓鱼网站.
规则:
if 频率 < 22% 合法网站 else 22% <= 频率 <= 61% 可疑网站 else 钓鱼网站
URL的锚点
锚点是指<a>标记的元素. <a>元素一般就是Request请求.
如果<a>标签中的网站有不同的域名, 则处理方法与 检查Request请求
一样. <a>标签也有可能不链接到任何网页.
规则:
if URL的锚点链到域外的频率 < 22% 合法网站 else if 22% <= URL的锚点链到域外的频率 <= 61% 可疑网站 else 钓鱼网站
<Meta>, <Script>和<Link>标记中的链接
正常网页中, <Meta>标签提供与HTML文档相关的元数据; <Script>标签用于创建客户端脚本; <Link>标签用于获取其他网络资源.
规则:
if 这三种标签中包含的是链接 < 17% 合法网站 else if 17 <= 这三种标签中包含的是链接 <= 81% 可疑网站 else 钓鱼网站
服务器表单处理程序(SFH)
如果SFH中包含空字符或"about: blank", 则被认为是可疑的, 因为一般来说, 需要对提交的信息进行处理.
如果SFH中的域名与网页的域名不同, 则被认为是可疑的, 因为一般来说, 提交的信息很少由外部域处理.
规则:
if SFH is "about: blank" or SFH is Empty 钓鱼网站 else if SFH指向引用外部域 可疑网站 else 合法网站
提交信息到电子邮件
一般提交的信息直接在域内处理, 如果要将用户提交的信息重定向到个人电子邮件, 则很可能是钓鱼网站. 这种情况在脚本中, 会用到类似于mail()或mailto()这样的函数.
规则:
if 使用 mail() 或 mailto() 提交用户信息 钓鱼网站 else 合法网站
异常URL
可以通过whois来获取信息. 对于合法网站, 身份通常是URL的一部分.
规则:
if 主机名不在URL中 钓鱼网站 else 合法网站
基于HTML和JavaScript
网站转发
通过网站被重定向的次数, 可以判断是否为钓鱼网站.
规则:
if 重定向次数 <=1 合法网站 else if 2<= 重定向次数 < 4 可疑网站 else 钓鱼网站
自定义状态栏
钓鱼者可以使用JavaScript在状态栏中向用户显示一个伪造的URL. 要提取此功能, 必须挖掘网页源代码, 尤其是"onMouseOver"事件, 并检查它是否在状态栏上进行任何更改.
规则:
if 通过onMouseover事件更改状态栏 钓鱼网站 else 合法网站
禁止右键单击
钓鱼者使用JavaScript来禁用右键单击功能, 使用户无法查看和保存网页源代码. 通过在网页源代码中搜索事件"event.button == 2", 并检查是否禁用了右键单击.
规则:
if 禁用右键 钓鱼网站 else 合法网站
使用弹窗
通过弹窗来让用户提交个人信息是不寻常的. 当然, 也有一些合法网址有弹窗, 但一般用作提醒, 而不是让用户输入信息.
规则:
if 弹窗输入信息 钓鱼网站 else 合法网站
IFrame重定向
IFrame是一个HTML标签, 可以将其他网页的内容在当前页面中显示. 钓鱼者可以将IFrame的边框隐藏, 使用户辨认不出这边显示的内容是其他网页的内容, 然后将其他域内的网页内容嵌入进来.
规则:
if 有IFrame 钓鱼网站 else 合法网站
基于域名
域名年龄
可以从WHOIS数据库中提取该信息. 大多数钓鱼网站不会存在太久. 通过查看数据集, 可以得知合法域的最短年龄为6个月.
规则:
if 域名年龄 >= 6个月 合法网站 else 钓鱼网站
DNS记录
对于钓鱼网站, WHOIS数据库无法识别其身份, 也没有该主机名的记录.
规则:
if 该域名没有DNS记录 钓鱼网站 else 合法网站
网站流量
通过确定访问者的数量和访问的页面数量来衡量网站的受欢迎程度. 由于钓鱼网站的存在时间较短, 因此它们可能无法被Alexa数据库识别. 通过测试数据集, 发现在最糟糕的情况下, 合法网站能排进前10万.
另外, 如果该域没有流量或者没有被Alexa数据库识别, 则将其归类为"钓鱼网站".
规则:
if 网站排名 < 10,0000 合法网站 else if 网站排名 > 10,0000 可疑网站 else 钓鱼网站
PageRank
PageRank用于衡量一个网页在互联网上的重要程度. PageRank值(在0到1之间)越大, 网页越重要. 通过测试数据集, 发现大约95%的钓鱼网页没有PageRank, 剩下的5%的PageRank可能会达到0.2.
规则:
if PageRank < 0.2 钓鱼网站 else 合法网站
谷歌索引
由于钓鱼网站只能在短时间内访问, 所以很多钓鱼网页无法在Google索引中找到.
规则:
if 存在于Google Index 合法网站 else 钓鱼网站
指向页面的链接数量
由于钓鱼网页存在时间短, 所以基本上没有其他网页会指向钓鱼网页(98%). 另外, 如果一个网站是合法网站, 至少有2个指向它们的外部链接.
规则:
if 指向该页面的链接数 == 0 钓鱼网站 else if 0 < 指向该页面的链接数 <= 2 可疑网站 else 合法网站
基于统计报告的特征
有些机构(如PhishTank和StopBadware)会在每个给定的时间段内, 为钓鱼网站制定大量统计报告. 根据PshishTank, 我们认为前10个域名和前10个IP都是钓鱼网站, 根据StopBadware, 我们认为前50个IP都是钓鱼网站.
规则:
if IP排名 前10(PshishTank) 前50(StopBadware) or 域名排名前10 钓鱼网站 else 合法网站
python模块
pip3 install tldextract pip3 install python-whois
朴素贝叶斯
$$ p(c_{i} | \vec w) = \frac{p(\vec w | c_{i}) p(c_i)}{p(\vec w)}$$
其中, \(p(c_{i})\) 表示该网站为"钓鱼网站"的概率, 或该网站为"合法网站"的概率. \(\vec w\) 表示收集的一系列特征.
朴素贝叶斯假设向量 \(\vec w\) 展开后的一系列特征互相独立. 因此, \(p(\vec w | c_{i}) = p(\vec w_{0} | c_{i}) p(\vec w_{1} | c_{i}) \ldots p(\vec w_{n} | c_{i})\) .
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - pinvon - Powered by EGO