基于域名的恶意网站检测

2023-11-11

0x00. 数据来源

根据老师给的 300w 域名列表爬到的相应 DNS 响应数据。

0x01. 基于网页内容的判别方法

  1. 数据获取
    考虑到爬取执行的时间,首先对300w个域名进行数据清洗。
    去掉重复的请求以及一些不指向具体网页的域名, 这类域名在请求中频繁出现, 包括网易的DNS检测域名xx.netease.com, 艾瑞数据在视频等网站中记录用户行为使用的域名xx.irs01.com, 即时通讯软件向服务器拉取数据使用的域名xx.imtmp.net, 反向PTR查询使用的域名xx.in-addr.arpa等;
    去掉一些知名域的子域名, 如xx.qq.com, xx.gov.cn等.
    然后通过爬虫爬取剩余网站列表的内容,在爬取时,对http和https都无法访问的网站(包括浏览器不能建立连接/404error/无文本内容等情况),尝试访问该请求的CNAME记录,也就是别名; 若仍无法访问再请求该域名的上层次级域, 尽量爬取到内容。
    获取网页源代码后遍历其标签树, 得到其中所有 <a> 和 </a> 标签之间的文本信息, 使用结巴分词模块把文本切分成词语, 同时去除空格/换行符/数字/标点符号和停用词.

  2. 根据之前项目得到一个赌博/色情网站的常用关键词列表。
    关键词列表

  3. 用脚本和人工的方法筛选出部分赌博/色情网站页面, 作为训练数据
    训练样本

  4. 特征提取
    常见的提取文本特征的方法有one-hot和TF-IDF两种, 与将词频计算在内的TF-IDF方法相比, one-hot只考虑了词语的出现与否(本项目采用one-hot编码)
    在我们的项目中已经生成关键词列表(设长度为n), 对于每一个网页生成一个长度为n的数组, 遍历其词语列表, 若与关键词列表中的项匹配, 则将该关键词对应的位置1

  5. 模型建立
    使用基于tensorflow的keras建立全连接神经网络, 其结构如下:

  6. 模型训练
    采用k折训练方法, 因为训练样本太少, k折验证可以提升小训练集在神经网络中的表达能力

  7. 计算模型结果
    根据上一步的模型训练结果对爬取到的网页数据进行判断, 并将分类结果写入结果文件。

0x02. 基于域名数据的判别方法

参考两篇论文中对域名数据特征的选择, 可以分为两个方面, 一方面是词法特征, 另一个方面是网络属性, 以下先对所有的属性进行汇总:
在这里插入图片描述
以下是对两篇论文中域名数据的汇总和筛选:
在这里插入图片描述
提取基于网页内容的判别结果中的数据作为黑名单, 以及在判别结果中出现的部分alextop域名作为白名单, 进行以上特征的统计分析:
第一个是域名长度的统计, 可以看出与正常域名相比, 赌博色情域名的长度曲线更尖锐, 往往集中于10到15的长度
长度统计

第二个是对分隔符’.'的出现次数统计, 可以看出赌博色情网站比正常网站的分隔符略多
分隔符统计

第三个是对特殊字符的出现频率检测, 在这一项上两者没有表现出特别大的区别
特殊字符

第四个是数字占域名总长度比例的统计, 对正常域名来说, 数字的比例几乎都小于0.1, 而赌博色情网站的比例则分布的比较平均
数字占比长度统计

第五个是分隔符内数字个数的最大值, 它与上一项的主要差别在于与总长度无关, 同样的, 对正常域名来说, 很少出现大于2个的数字, 而赌博色情域名则较长出现多个数字
分隔符内数字最大值

第六个是分隔符间的最大长度, 结果与域名总长度类似
分隔符间最大长度

第七个是数字字母的转换频率, 如a11b的转换频率就是2, 这一项正常域名和赌博色情域名的差别也比较大, 正常域名的切换频率普遍都比较小,而赌博色情域名则大多有1-3次的转换频率
数字字母转换频率统计

从以上结果可以看出, 在长度、字母/数字数量和出现频率等方面, 正常域名和赌博色情域名均表现出了差别。

再从网络特征方面来看, 对白名单和黑名单中的域名进行进一步的请求探测(使用dnspython库, 最新stable版本1.15.0 更新于sep 2016):
dnspython的resolver模块提供了dns查询的借口—query方法, 可以指定查询类型, 如A, CNAME, AAAA等, 查询结果可能为NoAnswer(无响应), NXDOMAIN(域名不存在), TimeOut(请求超时)等。我们对黑名单和白名单中的所有域名进行了请求, 得到了它们特征之间的对比图像:
首先是TTL值, 前一张图片是重新请求的黑名单与白名单的TTL值, 可以看出黑名单的值明显较为分散
TTL值统计

但是对于五个月前的请求值, 又发现白名单的请求值较为分散(因此这个特征有待商榷):
TTL值统计2

而对于请求类型来说, 明显可以看出白名单中域名的类型分布更加分散, 这是因为公司和机构有更多的资金去进行优化, 而赌博色情网站大多为了盈利, 而且域名时常有变动, 不会进行较全面的映射。
请求类型统计

0x03. 参考文献

1. Identifying Gambling and Porn Websites with Image Recognition
这篇文章里中用截图的方式对整个网页的内容进行抓取(截图的代码可以参考:https://blog.csdn.net/qiqiyingse/article/details/62896264)
然后使用SURF算法提取特征点(SURF算法:https://blog.csdn.net/tengfei461807914/article/details/79177897)
特征点聚类后建立BoW词袋模型(这是一个通过BoW搜索同类图像的代码:http://yongyuan.name/blog/CBIR-BoW-for-image-retrieval-and-practice.html)
最后用SVM(支持向量机)做监督学习

2. An efficient scheme for automatic web pages categorization using the support vector machine(New Review of Hypermedia & Multimedia,2016)
首先对先前的分类方法进行了评估,提出在小训练集上svm的表现比贝叶斯好
然后提出在html5出现之后,之前的基于网页标签的特征提取需要进行改进,并提出了新的方法
最后用svm对网页进行分类,并做出评估

3. LWCS: a large-scale web page classification system based on anchor graph hashing
文章介绍了LWCS这个大规模网页分类系统的组成和工作原理
第一步是网页爬虫,使用heritrix这个基于Java的开源爬虫,改为数据库初始化,增加了筛选重复网页的过滤器,重写了工作队列
第二步是对爬下来的原始数据去噪, 然后使用NLPIR将文本内容分割为短语
第三步是特征选择,采用tf-idf方法(https://blog.csdn.net/allenshi_szl/article/details/6283375) 选择每个类别的前500个词语
第四步是锚点图哈希, 用K均值聚类方法生成锚点, 以及最后的哈希码
第五步是使用KNN分类器计算每个需要判别的网页与训练集中网页的相似度, 并把它归为相似度最大的一类

4. Building a Dynamic Reputation System for DNS
基于被动DNS信息搜集的DNS信誉评判系统, 可以生成一个动态的域名黑名单, 可检测出最新生成的恶意域名
其数据来自美国两个州的骨干网DNS…


以上整理并转自我的个人 GitHub 账号,如需转载请注明出处,谢谢 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于域名的恶意网站检测 的相关文章

  • JS特性

    JS是解释型语言 不需要提前预编译 JS是弱类型语言 在定义变量的时候不需要定义变量的类型 变量是松散类型 即可以用来保存任何类型的数据 JS没有块作用域 if for都是块 但有函数作用域 JS重复定义变量并不会报错 定义的新变量的值会覆
  • 2021-07-25

    神经网络 M P神经元 感知机 感知机 神经网络 M P神经元 1 M P神经元 模拟生物行为的数学模型 接手n个输入 来自其他的神经元 并给各个输入赋予权重计算加权和 再跟自己特有的阀值 比较 通常用减法 最后经过激活函数 模拟 抑制 和
  • tensorflow导入错误“ImportError: DLL load failed”(已解决)

    毕业论文需要用到tensorflow 然鹅我却卡在了安装 由于各种问题还自身的拖延症与它 斗争 了一周 终于安装成功了 我一定要记录下来这血泪史 这篇笔记也拖了好几天 如果你也遇到下面的问题 就继续往下看吧 直接 pip install t
  • 【学习笔记】模糊控制算法

    本文目录 0 前言 1 概述 2 模糊集合 2 1 集合和论域 2 2 模糊集合的概念 2 3 模糊集合的表示方式 2 4 模糊集合的运算 3 模糊关系与模糊关系合成 3 1 笛卡尔积 3 2 关系与模糊关系 3 3 模糊关系的运算 3 4
  • Latex学习笔记二——Overleaf在线练习

    锵锵 本文是基于Overleaf的Latex学习的第二部分 目录 1 结构化文档 2 添加图表 让论文更生动可读 2 1 Graphics 2 2 Floats 2 3 Tables 3 Bibliographies 1 结构化文档 这一部
  • Hadoop的伪分布式运行模式

    Hadoop运行模式包括 本地模式 伪分布式模式 以及完全分布式模式 1 本地模式 安装简单 在一台机器上运行服务 几乎不用做任何配置 但仅限于调试用途 没有分布式文件系统 直接读写本地操作系统的文件系统 2 伪分布式模式 在单节点上同时启
  • 解决SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]的方案!!!!!

    目录 前提 一 安装maven helper插件 1 安装 2 安装成功 3 使用 二 去掉冲突的依赖包 1 前面已找到目标依赖 去pom文件内操作 2 去除 3 最后就可以了 前提 今天单元测试遇到了jar包冲突 SLF4J Class
  • 第一次 openwrt源码下载编译

    openwrt 学习记录 第一次 openwrt源码下载编译 MT7620开发板 安装虚拟机VMware 安装Ubnutu 先进入root账户 topeet ubuntu su 输入密码 1 搭建编译环境 参考 https blog csd
  • 【模拟CMOS集成电路设计】带隙基准(Bandgap)设计与仿真

    模拟CMOS集成电路设计 带隙基准 Bandgap 设计与仿真 前言 一 设计指标 二 电路分析 三 仿真测试 3 1测试电路图 3 2测试结果 1 基准温度系数仿真 2 瞬态启动仿真 3 静态电流仿真 4 线性调整率仿真 5 电源抑制PS
  • Object.setPrototypeOf()

    Object setPrototypeOf 子对象 父对象 运行结束后 子对象 proto 指向 父对象 setPrototypeOf就是更换对象的 原型对象
  • 编译器报:lambda表达式中使用的变量应为final或有效final 解决方案

    目录 问题描述 原因分析 解决方案 1 声明为final 2 使用有效final 4 使用数组或集合 错误问题的最终解决示例 总结 问题描述 今天在写代码的过程中想要在stream map 方法内部对外部变量进行赋值 结果发现编译器报错 提
  • CentOS 7 挂载本地光盘作为镜像源

    1 上传iso文件到 usr local src 一定要确保这个ISO文件上传完毕后再进行下面的操作 2 创建挂载目录 mkdir media CentOS7 3 挂载iso文件 mount t iso9660 o loop usr loc
  • 《Web应用安全权威指南》学习笔记

    第1章 什么是Web应用的安全隐患 第2章 搭建试验环境 邮件发送服务器Postfix POP3服务器Dovecot SSH服务器OpenSSH Web应用调试工具Fiddler 第3章 Web安全基础 HTTP回话管理 同源策略 Cook
  • 懒人式迁移服务器深度学习环境(完全不需要重新下载)

    换服务器了 想迁移原来服务器上的深度学习环境 但又觉得麻烦懒得重新安装一遍anaconda pytorch 有没有办法能不费吹灰之力直接迁移 接下来跟着我一起 懒汉式迁移 本方法适用于在同一内网下的两台服务器之间互相迁移 不在同一局域网下的
  • Kerberos

    kerberos身份认证过程 第一步 账号和KDC互相认证 账号A向KDC证明自己的身份 1 账号A首先会把自己的密码hash 得到一把秘钥Kclt 2 Kclt会把当前的时间戳加密 生成一个字符串 使用 时间戳 Kclt来表示 3 将生成
  • 图像识别小车(电机部分)——电赛学习笔记(2)

    图片来源 B站唐老师讲电赛 目录 一 电机部分结构 二 步进电机示例 三 伺服电机示例 四 我们的方案 一 电机部分结构 二 步进电机示例 1 驱动器 L298N CSDN搜索使用方法 控制器 stm32 电源暂时用12V直流源 2 控制
  • 学习笔记(三):Java中的List集合——ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayList

    目录 引言 一 List简介 二 常用List实现类 一 ArrayList 二 LinkedList 三 LinkedList和ArrayList的比较 三 其他List实现类 一 Vector 二 Stack 三 CopyOnWrite
  • LeetCode题目笔记——17.19消失的两个数字

    文章目录 题目描述 题目难度 困难 方法一 暴力 代码 代码优化 方法二 数学方法 代码 总结 题目描述 题目直达 题目难度 困难 方法一 暴力 虽然题目说你能在 O N 时间内只用 O 1 的空间找到它们吗 但是也没有限制我们不能用暴力
  • 【9.19】正则表达式——sed、awk

    9 19 正则表达式 sed awk 9 4 9 5 sed 1 sed 匹配 2 sed打印具体行数 3 sed 替换功能 9 6 9 7 awk 1 awk 匹配 2 awk 数学运算表达式 3 两个字段比较大小 4 内置变量 OFS
  • 不在傻傻for循环!完美解决JPA批量插入问题

    前言 jpa在简单的增删改查方面确实帮助我们节省了大部分时间 但是面对复杂的情况就显得心有余而力不足了 最近遇到一个批量插入的情况 jpa虽然提供了saveAll方法 但是底层还是for循环save 如果遇到大量数据插入频繁与数据库交互必然

随机推荐

  • 牛客网:坐标计算工具

    题目描述 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 从 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 合法坐标为A 或者D或者W或者S 数字 两位以内
  • Maven 应用总结(持续更新)

    继承 模块化 模块化 在开发一个项目时 通常会进行模块化拆包 如下 blog parent blog controller blog service blog entity blog util 根据模块的名称可以看出 业务是比较单一的 若是
  • HTML 知识扫盲

    写在前面 HTML 是一门超文本标记语言 不管你听没听说过 HTML 但在网上冲浪的途中你无时不刻都在与它接触 他遍布在每个你看得到的互联网的角落 其实对于笔者而言 我已经断断续续地学习过这门语言 经过时间的磋磨 所剩知识也是寥寥无几 这次
  • autotools automake autoconf libtool 笔记

    autotools automake autoconf libtool 笔记 默认安装路径为 prefix usr local 可以通过 configure prefix
  • c语言 变量 section,#pragma DATA_SECTION的解释

    DSP CMD文件的编写EETOP专业博客 电子工程师自己的家园L gZnWr 1 COFF格式 1 gt 通用目标文件格式 Common Object File Format 是一种流行的二进制可执行文件格式 二进制可执行文件包括库文件
  • Python真的能杀死Excel吗?它能实现哪些Excel功能?

    在大家的印象里 想进入金融行业或者数据岗位 首先需要精通Excel 而且现在招聘条件也是明确表示 要精通Excel等办公软件 后面还会加一句 有Python经验的优先 野村证券副首席数字官马修 汉普森在上周五的伦敦Quant Confere
  • dnspod每步nat123及3322动态域名同类端口映射域名解析软件对比

    首先说明下这三个名词 端口映射 域名解析 动态域名解析 端口映射 80端口映射或自定义端口映射 可以解决80端口被屏蔽 可以在内网使用直接发布网站应用 可以在内网使用实现外网访问内网应用 域名解析 也叫域名解析管理 常用的操作就是登录域名管
  • 【论文复现】—— A New Outlier Removal Strategy Based on Reliability of Correspondence Graph for Fast ....

    目录 一 算法原理 1 论文概述 2 实现流程 3 参考文献 二 代码实现 三 GitHub链接 一 算法原理 1 论文概述 三维激光扫描技术能够为实景测量与重建提供高精度 大范围的点云数据 然而单一来源的点云不够完整 不够精细 因此使用点
  • Spring IOC(四)doCreateBean方法源码分析——创建Bean的过程

    目录 第1步 createBeanInstance 得到实例BeanWrapper 第1 1步 通过工厂方法实例化 先略过 第1 2步 通过默认构造函数实例化 第1 3步 通过有参构造函数实例化 第2步 applyMergedBeanDef
  • 类的私域变量访问方法

    类的私域变量只能在类的内部使用 类的实例对象不能访问 class JustCounter 类声明 secrectCount 0 私有变量 publicCount 0 公开变量 def count self 类方法 self secrectC
  • 关于String的hashcode,以及判断字符串是否相等的解析

    跟着老师的方法验证equals方法的重写 由于误写发现运行结果和预想的不一样 先上代码 package com wuyw oo import java util Objects author wuyw2020 date 2019 10 28
  • 关于Linux下操作(写)excel文件

    网上有很多第三方库可以非常方便的读写excel文件在此不再列举 如果应用场景只是将数据记录成excel格式 只写不读 一种不利用第三方库的做法是 1 正常创建一个文件 后缀为excel格式之一即可 2 sprintf格式化字符串生成列头 比
  • 40张最全计算机网络基础思维导图

    hi 大家好 今天的网络基础思维导图主要是二 三层网络协议 再配合之前的文章 四层以上互联网核心协议 TCP IP协议精华指南pdf发布 非常适合对网络感兴趣的同学 同时也让大家对整个网络架构有一个整体的认识 希望大家喜欢 传输介质简介 以
  • 几种网络通信协议

    应用层 HTTP Hypertext Transfer Protocol 超文本传输协议 显示网页 DNS Domain Name System 域名系统 FTP File Transfer Protocol 文件传出协议 SFTP SSH
  • BAPI_GOODSMVT_CREATE物料凭证创建…

    BAPI GOODSMVT CREATE可以实现物料凭证创建和部分冲销 全部冲销可以使用BAPI GOODSMVT CANCEL CALL FUNCTION BAPI GOODSMVT CREATE EXPORTING GOODSMVT H
  • Caffe中Solver解析

    1 Solver的初始化 shared ptr
  • QT中默认不选中Shadow build设置方法

    在使用qt开发的时候 每次创建工程 都会默认选中shadow build影子构建 作用是把编译生成的文件与源文件放在不同的目录 这样源码目录就相对整洁 但是这也会带来个问题 感觉超级鸡肋 就是经常修改了代码之后点运行 跑的还是修改之前的程序
  • 使用VMware Workstation Player虚拟机安装Linux系统

    下载安装 VMware Workstation Player 首先下载并安装 VMware Workstation Player VMware Workstation是一款非常强大的虚拟机软件 有pro专业版和player免费版 我们个人使
  • Java线程协作的两种方式

    介绍 Java中线程协作的最常见的两种方式 利用Object wait Object notify 和使用Condition 方法一 Object中的wait notify notifyAll方法定义如下 public final nati
  • 基于域名的恶意网站检测

    基于域名的恶意网站检测 0x00 数据来源 0x01 基于网页内容的判别方法 0x02 基于域名数据的判别方法 0x03 参考文献 0x00 数据来源 根据老师给的 300w 域名列表爬到的相应 DNS 响应数据 0x01 基于网页内容的判