Pinvon's Blog

所见, 所闻, 所思, 所想

钓鱼网站+机器学习

特征

这边给出的关于钓鱼网站的重要特征, 已经被证明是合理有效的.

基于地址栏的特征

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是网站的缩略图(也称为收藏夹图标), 一般在地址栏会显示出来. 如图所示: 0.png

而这些图片, 一般会托管在域名中.

规则:

if favicon从域外加载
    钓鱼网站
else
    合法网站

使用非标准端口

有些钓鱼网站使用了非80端口, 因此, 从URL中获取的网站商品号是作为识别钓鱼网站的一个重要依据.

规则:

if 使用了非标准商品
    钓鱼网站
else
    合法网站

域名中含有HTTPS或HTTP

如: http://https-www-paypal-it-webapps-mpp-home.soft-hair.com/

规则:

if 域名中包含HTTP字符
    钓鱼网站
else
    合法网站

基于异常

检查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})\) .

Comments

使用 Disqus 评论
comments powered by Disqus