https://xz.aliyun.com/t/2190

Ya-Lin Zhang, Longfei Li, Jun Zhou, Xiaolong Li, Yujiang Liu, Yuanchao Zhang, Zhi-Hua Zhou
National Key Lab for Novel Software Technology, Nanjing University, China
Ant Financial Services Group, China
来源: CCS’17 https://dl.acm.org/citation.cfm?id=3138825

摘要

本文描述了一种基于PU-Learning(正例和无biao'zhu学习)的潜在恶意URL检测系统。以往的基于机器学习的解决方案是将它定义为有监督学习问题。然而在很多时候,我们所获得的数据总是包含少量已知的攻击URL以及大量的未标记样本,这使得有监督学习不可行。在这项工作中,我们将其定义为PU-Learning问题,并结合两种不同的策略(two-stage strategy and cost-sensitive strategy)。实验结果表明,我们所开发的系统能够有效地发现潜在的恶意URL攻击。该系统既可以作为现有系统的辅助部署,也可以用来帮助网络安全工程师有效地发现潜在的攻击模式,使他们能够快速更新现有的系统。

1 引言

随着互联网的迅速发展,出现了越来越多的恶意URL攻击,严重威胁着网络安全。传统的URL攻击检测系统主要通过使用黑名单或规则列表。而这些名单将变得越来越长,但是以这些方式防范所有的攻击是不现实的。更严重的是,这些方法难以检测潜在的威胁,这使得网络安全工程师很难有效地发现新出现的恶意URL攻击。

为了提高算法的泛化能力,很多研究人员采用基于机器学习的方法来完成这项任务。这些方法主要分为两类:大多数转化为有监督学习问题[6],则需要对数据进行标注,而其他的一些研究人员则试图以无监督的方式解决问题,例如通过异常检测技术[5],就不需要对数据进行标注。当可以得到标注数据时,有监督学习方法通常实现更强的泛化能力。然而在很多时候,我们很难获得精准的标注数据。在更多时候,我们可能只得到一小部分恶意URL和大量未标记的URL样本,缺乏足够可靠的负例样本,这也就意味着我们并不能直接使用上述的机器学习算法。另一方面,如果我们简单地以无监督的方式解决它,那么已知恶意URL的标注信息就难以充分利用,可能无法达到令人满意的性能。

在本文中,我们将上述问题抽象为PU-Learning(正例和未标记学习)问题[3],它可以更充分地利用所检测到的恶意URL以及未标记的URL,并实现了更强的性能。基于此,我们开发了一个基于PU-Learning的潜在恶意URL攻击检测系统。有许多策略可以用来处理PU学习问题,如two-stage strategy[4]、cost-sensitive strategy[2]等。在这项工作中,我们将two-stage strategy、cost-sensitive strategy结合起来构建我们的系统。最后,我们对所开发的系统进行了验证评估,结果表明该方法能有效地发现潜在的恶意URL攻击,大大降低了网络安全工程师的工作量,使其在实际的URL攻击检测中非常有用。

本文的其余部分组织如下。在第2节中,我们描述了所开发的系统。在第3节,我们基于蚂蚁金服的实际业务场景评估了我们所开发的系统。最后,在第4节中,我们总结了这项工作。

2 系统架构

在这一章中,我们介绍了所开发的系统架构。如图1所示,我们的系统主要包括3个模块:

  • (i)特征提取,将原始URL转换成特征向量;
  • (ii)模型训练,利用所提取的URL训练集的特征向量训练PU-Learning模型;
  • (iii)预测,预测输入的URL以及输出可能的恶意URL集。

2.1 特征提取

首先将原始URL转换为特征向量表示,以便于应用到后续的机器学习算法中。下面,我们将简要地解释我们所开发的系统,并介绍我们在系统中使用的特征提取过程的细节。

一般来说,URL可以分成几个部分,包括协议部分、认证部分、路径部分、query部分和fragment部分,如图2所示。攻击者可能修改任意一个部分以发起攻击。在我们的场景中,由于前几个部分受到限制,攻击主要来自fragment部分,所以我们主要关注的是基于恶意修改fragment部分的攻击的执行情况。具体而言,fragment通常是形如“key1 = value1&…&keyn = valuen”的形式,攻击者可以通过任意修改value部分以发起攻击。因此,我们的系统主要处理这个部分,而特征提取过程直接从fragment的Key-Value对中提取特征。

更具体地说,给定一组URL,我们首先将它们分别划分为上述部分,并从每个URL的fragment中提取Key-Value对。其次,由于我们的目标是发现恶意网址的特质,因此我们过滤了Key-Value对,只保留恶意网址出现的前N个Key,并将剩余的Key-Value对合并为一个Key-Value对,从而每个URL将最多提取(N + 1)个Key-Value对。最后,我们试探性地提取8种不同的统计信息从每个过滤值,包括value中出现所有的字符、字母、数字、标点符号的次数和value中出现的不同的字符、字母、数字、标点符号的数目。因此每个URL将被描述为一个(N + 1)∗8维特征向量。

2.2 模型训练

值得注意的是,传统的有监督学习算法并不能直接应用于我们的场景。在这项工作中,我们将其转化为PU-Learning问题。

PU-Learning[3]是半监督学习的一种特殊情况[1,7],它用于解决只提供正例和未标注样本而不提供负例的问题。研究人员已经提出了许多策略来解决这个问题。为了绕过缺乏负标注的问题,two-stage策略首先试图挖掘出一些可靠的负例,然后将问题转化为一个传统的监督和半监督学习问题。另一方面,用于二分类的cost-sensitive策略由于具有不对称的误分类成本,因此非常适合用于解决PU-Learning问题[2]。在我们开发的系统中,这两种策略都被采用并进一步结合形成最终的预测模型。

two-stage strategy:在第一阶段从未标记实例中选择可靠的负例,算法1显示了相关的细节。在第二阶段,利用正例和第一阶段选择的负例,训练传统的监督模型,并进一步用于预测新样本。
在这项工作中,考虑到效率,我们采用Logistic回归来训练分类模型。

cost-sensitive strategy:我们假设在未标注样本只有少量正例。将所有未标注样本设定为负例,最小化以下目标函数:

其中C+和C-分别是正例和负例误分类的惩罚因子;l(yi,f(xi))表示损失函数,例如log损失函数或hinge损失函数;λ是归一化系数,R(w)是归一化范数,例如L1-范数、L2-范数。本文中,我们将损失函数设置为log损失函数,将L2-范数作为归一化范数。因此具体的函数如下:

其中LL(z)=log(1+exp(-z))就是log损失函数,在实际中,C+和C-是基于验证集选取的,并且C+总是大于C-,这表明正例误分类的惩罚因子要大于负例误分类的惩罚因子。这也就使得模型将更关注于对恶意URL的正确分类。

2.3 预测

在预测阶段,一个新输入的URL首先将在特征提取模块被转换为(n + 1)∗8维特征向量,然后所提取的特征向量将送入一个双策略模型,每个模型都将输出一个分数表示恶意URL的概率。得分越高,这个URL就越有可能是恶意的。我们把两个分数平均作为URL的最终得分,选择具有较高分数的URL构造为候选恶意URL集。
在工程实践中,我们会基于候选恶意URL集过滤K个URL,这些过滤的URL将由网络安全工程师进行人工验证。

3 实验验证

3.1 数据集与准备工作

该数据集来自于发送至蚂蚁金服的URL请求的采样。数据主要分为两部分:一大组未标记的URL和少数已经通过现有的系统标注的恶意网址,并出现了不同的攻击类型,包括XXE、XSS和SQL注入等。我们并没有把这些不同类型的恶意网址进行进一步细分。由于总数据集太大,我们从每天的请求中抽取1亿个URL,其中由现有系统检测到的恶意URL的数量从几万到数十万不等。该模型使用连续7天收集的数据进行训练,并用于预测每天新出现的未标记URL的分数。

当提取Key-Value对时,N被设置为99,因此每个URL将由一个800维的特征向量来描述,使用min-max归一化方法来处理不同量纲下的特征。在模型训练部分,我们采用基于logistic回归的方法来训练PU-Learning模型,C+、C−和λ等参数由验证集进行选取。

3.2 实验结果

由于我们并没有未标注URL的具体情况,我们借助网络安全工程师来帮助检查结果并验证我们系统的有效性。
由于检查结果非常耗时,因此我们将候选恶意URL集的大小K设置为至多150,并由网络安全工程师将手动检查所选URL是否是恶意URL。表1展示了实验结果的细节。从表中可以看出,过滤后的候选集的精度可以达到90%,表明该系统能有效地发现潜在的恶意URL,而现有的系统无法捕获这些恶意URL。应该特别提到的是,我们基于候选恶意URL集发现了新的攻击模式,而蚂蚁金服的网络安全工程师已经通过这个发现改进了现有系统。同时,开发的系统还可以与现有系统协同使用,提高整体的网络安全水平。

4 总结

在这项工作中,我们开发了一个基于PU-Learning的潜在恶意URL检测系统。与基于监督学习的方法相比,我们的方法只需要少量恶意URL以及未标注URL,而这正好适合我们遇到的实际情况。

该系统主要包括三个部分:首先,特征提取将原始URL转化为特征向量;然后,利用two-stage strategy、cost-sensitive strategy来训练分类模型;最后,新输入的URL将被首先转化为特征向量,再进行机器学习,输出的分数表明了该URL为恶意网址的概率。

实证结果表明,我们开发的系统能够有效地发现潜在的恶意URL。该系统既可以作为现有系统的辅助部署,也可以用来帮助网络安全工程师有效地发现潜在的攻击模式。

参考文献

[1] Olivier Chapelle, Bernhard Scholkopf, and Alexander Zien. 2009. Semi-Supervised Learning. IEEE Transactions on Neural Networks 20, 3 (2009), 542–542.
[2] Marthinus C du Plessis, Gang Niu, and Masashi Sugiyama. 2014. Analysis of Learning from Positive and Unlabeled Data. In Advances in Neural Information Processing Systems 27. 703–711.
[3] Charles Elkan and Keith Noto. 2008. Learning Classifiers from Only Positive and Unlabeled Data. In Proceedings of the 14th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 213–220.
[4] Bing Liu, Yang Dai, Xiaoli Li, Wee Sun Lee, and Philip S Yu. 2003. Building Text Classifiers Using Positive and Unlabeled Examples. In Proceeding of the 3rd IEEE International Conference on Data Mining. 179–186.
[5] Fei Tony Liu, Kai Ming Ting, and Zhi-Hua Zhou. 2008. Isolation Forest. In Proceeding ot the 8th IEEE International Conference on Data Mining. 413–422.
[6] Justin Ma, Lawrence K Saul, Stefan Savage, and Geoffrey M Voelker. 2009. Beyond Blacklists: Learning to Detect Malicious Web Sites from Suspicious URLs. In Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 1245–1254.
[7] Zhi-Hua Zhou and Ming Li. 2010. Semi-Supervised Learning by Disagreement. Knowledge and Information Systems 24, 3 (2010), 415–439.

基于PU-Learning的恶意URL检测的更多相关文章

  1. 基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习

    PU learning问题描述 给定一个正例文档集合P和一个无标注文档集U(混合文档集),在无标注文档集中同时含有正例文档和反例文档.通过使用P和U建立一个分类器能够辨别U或测试集中的正例文档 [即想 ...

  2. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  3. 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类

    from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...

  4. 机器学习&恶意代码检测简介

    Malware detection 目录 可执行文件简介 检测方法概述 资源及参考文献 可执行文件简介 ELF(Executable Linkable Format) linux下的可执行文件格式,按 ...

  5. Android手机安全软件的恶意程序检测靠谱吗--LBE安全大师、腾讯手机管家、360手机卫士恶意软件检测方法研究

    转载请注明出处,谢谢. Android系统开放,各大论坛活跃,应用程序分发渠道广泛,这也就为恶意软件的传播提供了良好的环境.好在手机上安装了安全软件,是否能有效的检测出恶意软件呢?下边针对LBE安全大 ...

  6. 搭建基于SornaQube的自动化安全代码检测平台

    一.背景和目的 近年来,随着新业务.新技术的快速发展,应用软件安全缺陷层出不穷.虽然一般情况下,开发者基本都会有单元测试.每日构建.功能测试等环节来保证应用的可用性.但在安全缺陷方面,缺乏安全意识.技 ...

  7. 恶意代码检测工具 -- Mathematics Malware Detected Tools

    Mathematics Malware Detected Tools 重要:由于缺少测试数据,部分结论可能不正确.更多更准确的结论,还需要进行大量实验. 概述 mmdt(Mathematics Mal ...

  8. 【新人赛】阿里云恶意程序检测 -- 实践记录10.13 - Google Colab连接 / 数据简单查看 / 模型训练

    1. 比赛介绍 比赛地址:阿里云恶意程序检测新人赛 这个比赛和已结束的第三届阿里云安全算法挑战赛赛题类似,是一个开放的长期赛. 2. 前期准备 因为训练数据量比较大,本地CPU跑不起来,所以决定用Go ...

  9. Graylog2进阶 打造基于Nginx日志的Web入侵检测分析系统

    对于大多数互联网公司,基于日志分析的WEB入侵检测分析是不可或缺的. 那么今天我就给大家讲一讲如何用graylog的extractor来实现这一功能. 首先要找一些能够识别的带有攻击行为的关键字作为匹 ...

随机推荐

  1. AT91 USB Composite Driver Implementation

    AT91 USB Composite Driver Implementation 1. Introduction The USB Composite Device is a general way t ...

  2. Windows 2008 R2防火墙设置运行被ping通

    参考文献: http://huobumingbai.blog.51cto.com/1196746/323896/

  3. git 拉取和获取 pull 和 fetch 区别

    使用Git  直接提交的话   直接 push 获取最新版本  有两种  拉取 和 获取 pull 和 fetch git  pull     从远程拉取最新版本 到本地  自动合并 merge   ...

  4. [廖雪峰] Git 分支管理(2):Bug 分支

    软件开发中,bug 就像家常便饭一样.有了 bug 就需要修复,在 Git 中,由于分支是如此的强大,所以,每个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你 ...

  5. 连接查询简析 join 、 left join 、 right join

    join :取两个表的合集: left join:左表的数据全部保留,然后增加右表与左表条件匹配的记录.如下 select cc.* from cloud_groups as cg left join ...

  6. Oracle Apps DBA R12.2 Syllabus

    1. What is Oracle R12.2 R12.2 Definition Architecture Advantages of R12.2 Limitations of R12.2 What ...

  7. excel 批注

    Excel VBA之Name对象.Comment对象及字体设置等,点滴学习积累 存在的方式 百家号11-1518:46 ======================================== ...

  8. .NET:Attribute 入门(内训教程)

    背景 接触过的语言中,C#(.NET 平台的多数语言都支持).Java 和 Python 都支持这个特性,本文重点介绍 C# 中的应用,这里简单的对 C#.java 和 Python 中的 Attri ...

  9. Glibc 和 uClibc

    转自:https://blog.csdn.net/clirus/article/details/50145959?locationNum=4 最近在搞mips openwrt框架的东西,mipc的GC ...

  10. Spring Framework 4.1.3 还是一样给力

    Spring Framework 4.1.3 发布,此版本是 4.1.x 系列的第三个维护版本,包括超过50 个 bug 修复和改进.本来是计划月末发布,但是想早些发布,配合这周要发布的 Spring ...