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. NOI 2002 荒岛野人

    人生第一次做NOI的题祭!!! 大概是NOI最简单的一道题 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,… ...

  2. .babelrc文件的一些简单的配置

    首先现在根目录先生存.babelrc文件 这个文件是用来设置转码的规则和插件的 如果想使用es6语法,必须安装插件 npm install babel-preset-es2015 { "pr ...

  3. [原创]App性能测试指标篇

    [原创]App性能测试指标篇 目前由于苹果,三星等大厂对智能手机的研发及投入,使的智能手机发展非常迅速,每个人手中都有一些离不开生活的App,如:微信,微博,百度或是各游戏App等,但是到底App性能 ...

  4. LPC43xx SGPIO Camera interface design

    AN11196: Camera interface design using SGPIO

  5. android 控件: xml 设置 Button 按下背景

    本篇文章讲述了不使用java代码来改变 Button 按下和未按下时的背景. 首先准备两张图片, 分别是按钮按下和按钮未按下的. 在res/drawable 文件夹中创建一个button_select ...

  6. delphi CreateAnonymousThread 匿名线程

    引用  http://www.cnblogs.com/del/archive/2011/05/18/2049913.html 先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): { ...

  7. [Asp.net]web.config customErrors 如何设置?

    摘要 customErrors也经常在开发部署中看到<customErrors mode="Off" />,设置这样可以在页面上看到详细的错误信息.但也为黑客提供了攻击 ...

  8. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  9. DirectInfo.GetFiles返回数组的默认排序

    NTFS和CDFS下,是按照字母顺序,而FAT下,按照文件创建时间顺序 using System; using System.Collections; using System.IO; namespa ...

  10. Android控件之ImageSwticher

    Android控件之ImageSwticher 1. ImageSwticher介绍 ImageSwitcher是图片切换的控件,它能实现图片切换时的动画效果,包括图片导入效果.图片消失效果等等.An ...