ATLAS——对抗性机器学习威胁矩阵<案例研究一>

前言

接续上篇:
Adversarial ML Threat Matrix——对抗性机器学习威胁矩阵<简介>
本篇<案例研究>将一起学习探讨至发布时间更新的技术案例研究。
并且,原名称Adversarial ML Threat Matrix的对抗性机器学习威胁矩阵现已经在官网更新上线啦,ATLAS全称Adversarial Threat Landscape for Artificial-Intelligence Systems。故以后文章标题都不再采用Adversarial ML Threat Matrix会简写为ATLAS。

Evasion of Deep Learning detector for malware C&C traffic

  
针对恶意软件 C&C 流量的深度学习检测器规避1

案例摘要

  Palo Alto Networks Security AI 研究团队测试了一个深度学习模型,用于检测 HTTP 流量中的恶意C&C流量。该模型基于论文《URLNet: Learning a URL Representation with Deep Learning for
Malicious URL Detection》,在生产模型相似的数据集上进行了训练,可以达到与之相似的性能,并构造对抗样本、通过查询模型结果相应地调整对抗样本,直到模型被绕过。

矩阵映射

侦察(Reconnaissance)

  1. 从开源论文中确定一种基于机器学习的恶意 URL 检测方法作为代表性方法和潜在攻击目标。
  2. 获取与目标生产系统相似并具有代表性的数据集。

在线绕过(Online Evasion)

  1. 生成样本:
  • 该团队使用了约 3300 万个良性和 2700 万个恶意 HTTP 包头数据对模型进行了训练。
  • 评估显示,平均真阳性率约为 99%,假阳性率约为 0.01%。
  • 使用来自标签为(已知)恶意C&C流量样本的 HTTP 包头测试模型被检测为具有高置信度 (> 99%) 的恶意性。
  • 攻击者通过从数据包头中删除通常不用于 C&C 通信(例如缓存控制、连接等)的字段来制作绕过样本。
  • 利用精心制作的样本,攻击者对基于 ML 的间谍软件检测模型进行了在线绕过。精心制作的数据包以 >80% 的置信度被确定为良性。
  1. 在线绕过:
  • 该评估表明,对手能够通过制作被 ML 模型错误分类的样本来绕过先进的 ML 检测技术。
    矩阵映射
图一 案例一矩阵映射

论文通读与细节

URLNet: Learning a URL Representation with Deep Learning for
Malicious URL Detection

  
URLNet:使用深度学习URL表征,用于恶意URL检测

摘要

  传统方法会使用黑名单,但弊端是难以覆盖全面,也不能及时检测出新生成的恶意url。当前比较流行的机器学习类检测方法有:使用词袋提取URL字符串的字段特征属性,再上诸如支持向量机(SVM)这类模型,专家再设计有针对的特征来优化模型。以上方法的局限性有:
  (1)简单词袋分词模型无法捕捉语义以及语序模式。
  (2)需要大量人工工作进行特征工程。
  (3)不能处理不可见的特征,难以泛化测试集数据。
  URLNet则是一个基于DL使用非线性编码方式的检测模型,使用了CNN联合优化框架来学习URLEmbedding。该模型的优势在于可以捕获到URL中的几种语义信息,并且可以解决出现较多罕见词问题。

一、介绍

  传统方法通过爬取专门记录钓鱼url的网站数据来构建黑名单,这类网站如PhishTank(2022-02-17现已暂时停止开放注册新用户)。传统方法优势有:速度快,误报低,数据库查询技术简单,但劣势明显:严重依赖于情报与数据的实时性,对于每天都会新产生的url,这种侦察永远处于被动状态。故使用机器学习的方法,来尝试解决上述问题。
  模型提取的特征有:词汇(lexical)、主机(hostbased)、内容(content)、上下文(context)、流行度(popularity),其中词汇特征是常用、且最易获得,表现最好的,该特征包含了诸如url长度、标点数量、字符字母数字分布、出现单词类型等统计特性。基于主机名的特征,包含了IP、地理位置、WHOIS等信息。内容特征主要指需要进行访问或下载的动作后获得的内容,如HTML、JS的特征。上下文与流行度特征主要考察该url在社交媒体上共享的排名或人气分数。再使用词袋模型,用支持向量机等算法(作为基线模型),完成训练。虽然简单基于机器学习可以达到检出新url的效果,但仍有局限性:无法捕获语义及语序;需要大量专家经验特征工程(如:n-gram的n值);不能捕获“不可见”的特征;词量大时引发内存问题。
  而该论文使用字母与单词级别联合优化的方法,很好的解决了以上的问题,作者们有大量的实验分析与消融实验佐证,拥有良好的泛化能力。

二、恶意URL监测

1.问题提出

  解决问题:二分类
  输入对象:URL字符串—— u i , i = 1 , … , t u_i,i=1,\ldots, t ui,i=1,,t
  输出类别:恶意/非恶意—— y i ∈ { − 1 , + 1 } y_i \in \{-1,+1\} yi{1,+1}
  步骤框架:
  (1)样本提取特征,转换为n维特征空间表示:
     u i → x i , x i ∈ R n u_i \to x_i,x_i\in R^n uixi,xiRn
  (2)学习函数映射:(本文即CNN框架)
     f : R n → R f: R^n \to R fRnR
  (3)定义并最小化损失函数:
     ∑ i = 0 T I y ^ t ≠ y t ( y ^ t = s i g n ( f ( x t ) ) ) \sum_{i=0}^T I_{\hat y_t \neq y_t}(\hat y_t =sign(f(x_t))) i=0TIy^t=yt(y^t=sign(f(xt)))

2.词汇特征

  为何需要语序特征及其解释?
  例如:检测出“com”是出现在特定位置(顶级域名),还是路径中。
  除了之前提出的诸多问题,传统模型(e.g.SVM)还存在训练集中稀有词难以被利用到;重新训练对于新词实现特征化会不断增加模型和特征维度的大小。

三、DL模型:URLNet

1.基于深度学习的恶意URL检测

  接续上述问题,进行建模,对于初始化可以选择随机(当然也可以使用其他词集进行预训练)。
  定义符号:样本数量为t,初始输入n维特征,给定url长度L,矩阵 R t × n R^{t× n} Rt×n,卷积滤波器filter: W h × n W^{h×n} Wh×n(注意kernel和filter的区别),偏置bias: b i b_i bi,非线性激活函数 f f f,卷积输出 c c c
  数据预处理:短于L进行填充(padded),长于L进行剪裁(truncated)
   T = x 1 ⊕ x 2 ⊕ … ⊕ x t T=x_1 \oplus x_2 \oplus … \oplus x_t T=x1x2xt
   c i = f ( W ⊗ x i : i + h − 1 + b i ) c_i=f(W \otimes x_{i:i+h-1}+b_i) ci=f(Wxi:i+h1+bi)
   c = [ c 1 , c 2 , … , c t − h + 1 ] c=[c_1,c_2,…,c_{t-h+1}] c=[c1,c2,,cth+1]
  卷积后输入池化层(可选最大池化/平均池化法),用于识别重要特征并降维。多个filters的不同长度h作为超参数,可以自己设置,池化后的输出将接入全连接层进行分类,并使用随机梯度下降开始反向传播训练网络。
  URLNet使用了两个CNN网络,一个是字母级(character-level)CNN,一个是单词级(word-level)CNN。
在这里插入图片描述

图二 URLNet架构
2.字母级(character-level)CNN

  目标:学习字母出现顺序
  步骤:
  (1)在数据集中定义特殊字符
  (2)在语料库中出现频率小于某一阈值k的字符,将用“<UNK>”替换。
  (3)不够长度的url样本将用“<PAD>”填充。
  参数设置:阈值长度设置为了200,特征维度n=32,则样本空间为; u i → x i , x i ∈ R k × n u_i \to x_i,x_i\in R^{k×n} uixi,xiRk×n,filter-h:h=3,4,5,6,filter通道数:256。
  模型特点:
  (1)由于字符数量一定,模型大小不会像基于单词的模型那样随数据量一同增长。
  (2)自然地字母级模型忽略单词边界,无法获取到单词维度的信息(e.g:恶意url有可能通过微调几个单词,来模仿正常url,而filters很可能对相似的拼写产生相似的输出)。

3.单词级(word-level)CNN
单词级(word-level)CNN

  步骤:
  (1)从训练数据中定义生成语料库。
  (2)使用了特殊字符作为单词的分隔符。在语料库中出现频率小于某一阈值k的词,或不可读的单词,将用“<UNK>”替换。
  (3)不够长度的url样本将用“<PAD>”填充。
  (4)最后经过池化、全连接层,作为一个分支输出。
  参数设置相同:阈值长度设置为了200,特征维度n=32,则样本空间为; u i → x i , x i ∈ R k × n u_i \to x_i,x_i\in R^{k×n} uixi,xiRk×n,filter-h:h=3,4,5,6,filter通道数:256。
  模型特点:
  大小会随数据量增加,对内存造成压力,使用<UNK>替换缓解。

特殊符号视作单词处理

  提出原因:在恶意URL检测的场景中,比起其他NLP使用的场景,特殊字符在上下文中出现的更频繁、有关联性,且URL不是自然语言的语义语法,文章认为这部分的信息增益显著,不能过滤掉。
  使用该方法可减缓丢失的信息:
  (1)特殊符号的分布、类别
  (2)特殊符号附近词语的时序关系

基于 字符嵌入 优化 词级嵌入

  提出原因:上述未经优化的纯词嵌入模型无法有效嵌入新词、因内存问题无法使用稀有词。
  字符嵌入矩阵: E M c ∈ R L 1 × k EM_c \in R^{L_1×k} EMcRL1×k
  字符->填充/剪裁-> L 2 = 20 L_2=20 L2=20
  词级嵌入矩阵: E M w ∈ R L 2 × k EM_w \in R^{L_2×k} EMwRL2×k
  URL嵌入矩阵: U R L w ∈ R L 2 × k URL_w \in R^{L_2×k} URLwRL2×k U R L c w ∈ R L 2 × k URL_{cw} \in R^{L_2×k} URLcwRL2×k
  详情实现见图二、图三及源码解析部分

4.CNN结构

  如图三所示,原始输入数据将被两个分支(字母级、单词级)处理,并分别卷积、池化,进入全连接层(dropout+正则化)通过激活函数后,输出到分类器,最后用反向传播对模型进行优化。
在这里插入图片描述

图三 URLNet参数配置

四、实验

1.大规模数据集
数据收集

  数据集来源:VirusTotal
  VirusTotal提供服务:包含64份黑名单(如网络犯罪、诈骗、BitDefender、谷歌安全浏览器等),输入URL后,会返回该URL在多少份黑名单中有记录。
  数据集构建:如果在VirusTotal的64份黑名单中没有记录,则标记该URL为良性(Benign)。若URL被黑名单记录的数量越多,则认为该URL为恶意的置信度越高。超过于五份黑名单出现的URL被标记为恶意(Malicious);小于五份的URL会被丢弃,不纳入数据集中。文章爬取了2017.5~2017.6的所有URL记录,并进行了去重操作。最终数据集,恶意URL占比6%,良性URL占比94%。为减少偏差,各域名的占比率被控制在5%以下。数据集项根据爬虫查询的时间戳排列,以此来训练时避免前窥偏差(look-ahead bias),排序后从前60%的URL随机选取500万条进行训练,从后40%中选取1000万条进行测试。
在这里插入图片描述

图四 数据集情况
特征提取

  两个模型中,仅单词级CNN需要构建字典,以词袋模型的方式提取特征,文章还根据专家经验选取了以下特征:

特征描述
UCT(URL Component Tokenization)URL组成部分:包含主域名、路径、令牌、顶级域名,可以获取到语序特征。
PSB(Position Sensitive & Bi-grams)词位敏感度与二元组 :对主域名、路径使用二元组模型提取,{X}用于标识token位置,如:domain{1}、path{2}。
Character Tri-grams字母三元组 :使用长度为三个字母的滑动窗口生成,解决恶意URL的伪装问题,并根据参考文献,只提取参数名称,将参数值丢弃。
其他URL长度、主机名长度、URL的‘.’数量
基线字母熵、字符连贯率、数字占比

  由图五,我们可以看见特征总量非常大,并且随着数据集变大而不断增加。其中advanced BoW代表使用n-grams提取的特征,Basic BoW代表传统分词方法提取的特征。
在这里插入图片描述

图五 特征数量与大小随数据集大小变化
词频分布

  由图六,我们可以发现,有近90%的单词在训练集语料库中只出现了一次,证明90%的词都可以定义为“罕见词”,在大规模数据集中不舍弃会引起内存问题,比如词嵌入时,k=32,嵌入矩阵参数将超过1.5亿。所以字母级就可以将这些无法存储的单词嵌入进行表示,并可以获得每个单词更细粒度的信息。
在这里插入图片描述

图六 词频分布
2.URLNet评测指标
实验条件与基线设置

  基线模型:LibLinear L1-regularized L2-loss SVM,分别对上述图五的五类特征数据集(1.Whole URL BoW  2.UCT  3.PSB  4.Character Tri-grams  5.Combined)做训练,也对比了单一字母级、传统单词级CNN模型。比较指标有:ROC-AUC、TPR、FPR。
  文章使用tensorflow、kerasu框架实现,参数设置为:
  (1)优化器:Adam
  (2)卷积层 Dropout rate:0.5

结论

  基线模型显示了UCT特征比Whole URL BoW方式更有效,并且所有特征结合的Combined数据训练效果最好,也显示了URLNet可以比基线模型更好捕捉语义和结构信息。
在这里插入图片描述

图七 ROC曲线
  由图八所示,总体可以观察到当训练数据量上升,最终的效果也整体得到提升。

在这里插入图片描述

图八 URLNet与基线对照的实验数据
3.消融实验

  我们可以看到在单词级CNN“特殊符号视作单词处理”、“基于字符嵌入优化词级嵌入”部分,总体提高了AUC值。在FPR值更小时存在一些偏差,最原始的单词级CNN模型可以达到更高的TPR,当数据集量更大时,问题暴露得更明显。文章认为这两项处理使得单词级CNN的表现向字符级靠近,从而导致了该问题,并在两者结合URLNet(FULL)模型也体现了。
  总体来说,URLNet(FULL)模型还是优于单一级别的CNN。
在这里插入图片描述

图九 消融实验结论——各组件的信息增益
4.可视化

  此处使用随机采样了恶意、良性URL样本各1000条。URLNet模型采用了中间分支连接层【Concatenated Char and Word
feature vector layer】的输出(维度:1024),基线模型提取特征向量(维度:14604),绘图采用了t-SNE方法进行降维可视化。
  对比图十、图十一可见,URLNet模型类间离散的效果较好,决策面清晰,而基线模型类间重叠部分较多。
在这里插入图片描述

图十 URLNet方法分支连接层可视化

在这里插入图片描述

图十一 基线三元组方法可视化

  为观察类内聚集簇物理解释,作者对数据进行词汇特征模式标注(黑色符号)。
在这里插入图片描述

图十二 URL词汇模式与样本示例

五、相关工作

1.用于恶意URL检测的表征

  作者罗列了参考文献中,有价值的几类特征(上文也叙述过了):黑名单、词汇、基于主机、内容、基于上下文、流行度。传统方法有其劣势,比如内容特征的获取需完成下载或访问动作,虽然能近乎无误进行人工分类,但速度慢、并且风险大,开销大。
  关于词汇特征,除了上述说的简单统计特性,还有其他高级表征Kolmogorv复杂度、抗混淆特征、url内部自关联特征等,但这些特征需要大量专家经验和特征工程,无法应用于大规模数据集。

2.深度学习

  使用DL的优势就在于模型可以自动地从非结构化的原始数据中学习特征,故URLNet可以免去繁复的特征工程直接学习原始URL的表征。对比其他模型框架,如LSTM无法解决梯度消失、梯度爆炸的问题,所以满足恶意URL检测场景的模型较少,作者对比另一只用字母级CNN模型进行检测的工作,得出URLNet这种联合优化框架更具优势。

六、结论

  文章提出了字母级、单词级CNN联合优化的网络框架,以及专门针对恶意URL检测场景的词嵌入技术,使得不需要任何人工特征提取以及专家经验,就可以实现非常好的检出效果。

笔者总结:在通读介绍中,保留了原文的行文结构,摘取了重要的信息以及逻辑推导思路(原文很多翻来覆去在那讲的东西,像极了凑字数的我(大误))、演算及实验过程。模型使用了文本熵的方法,并且“缝合”了两种细粒度的CNN以达到最好的效果,其实我们看到实验数据,训练好其中一种CNN的使得工程化落地也可以有非常不错的效果。但我们也不能全然忽略传统简单的机器学习方法,适当平衡人工特征工程可以让模型的物理可解释性更强。当然文章本身也在可视化板块作出了可靠的解释,文章可以“自圆其说”。

绕过实验复现

靶环境项目指路:https://github.com/Antimalweb/URLNet

笔者由于工作原因,投入时间较少,复现简单粗糙,不严谨之处欢迎指正。

部署使用

在这里插入图片描述

  首先这个项目没有提供他们采集的数据集,大家可以使用自己的数据集进行训练。笔者用了kaggle的(45w+),网上已有非常多的开源url打标数据集,各位可自由选取。论文中写了此模型解决了大规模数据集训练的内存问题,我在这使用 1 0 5 10^5 105级别数据量来训练,希望达到一个较好的指标,则认为模型demo已实现,找出模型自身逻辑漏洞,而不是单纯数据量层面的博弈。
  该项目tensorflow使用1.14版本,tf2+的各位请注意切换环境。

源码解析

  经过论文通读后,我们大概知道了整个模型干了什么,最终效果怎样。最后通读源码,带着问题看作者们的思路。

文件名梗概
utils.py数据预处理、文本向量化
train.py执行、训练、日志记录、断点参数设置
TextCNN.pyCNN实现
auc.py衡量模型性能各指标参数计算
test.py训练参数设置、测试模型训练效果
demo.sh

  我们可以先将源码中提供的五种方法,大概跑出结果,先看看各方法的表现,再去深究原因。笔者此处使用默认参数,试用了8w+数据训练train.nb_epochs=25,测试3000余条样本,初步查看各模型准确率情况。

model.emb_modeAccuracy
1: charCNN0.7630617603409566
2: wordCNN0.9246570455496784
3: char + wordCNN0.7486728947068001
4: char-level wordCNN0.8005727006354885
5: char + char-level wordCNN0.625858575288253

  方法五在此数据量下的准确率只有0.62挺出乎我意料的,决定在方法五上跑完45w+数据train.nb_epochs=128,再在更大的测试集(未作去重)进行验证。结果发现准确率也没有得到很大提升。

攻击思路

  ATLAS使用URLNet架构训练http的包头数据构建出检测恶意C&C通信流量模型,最后构造样本绕过。由此也可见,该模型具有一定的泛化迁移优势。我不希望使用重型的模型去攻击对抗,此处还是针对相比之下简单一些的URL进行实验。
  正所谓自己造矛又自己造盾,自己训练的URLNet确实比较好绕过的,未来有时间会把http的包头数据构建出检测恶意C&C通信流量模型的坑填一下。

攻击结果

  由于识别准确率不高,构造出可绕过样例并不困难,大家可以自己简单尝试。若像原文一样,使用大规模的数据集训练,则需构造出训练集规则之外的,这时候,还是需要借助一些模型提取规则的方法,进行绕过。总的来说,这种识别方法个人感觉参考价值不是很高,所以就不再深入,对文本处理方法感兴趣的可以训练http的包头数据构建出检测恶意C&C通信流量模型,再来研究其中的机制。
  从物理原因处分析,url自身不代表“恶意”/“非恶意”的用途,不像恶意指令/流量,往往有其实际的作用与含义。如:一个人叫张三,现在工作是产品经理,很难单从从大规模的犯罪前科的人名+职业的信息中来学习和预测出这个人是好人还是坏人。但是如果是一个工具,比如“餐刀”,“菜刀”,“锯子”,“军刀”,“手术刀”,确实可以和某些动作实体产生联系,进而评估可造成的伤害等级。所以更推荐直接对检测恶意C&C通信流量/其他领域进行深入研究。当然,如果像DGA技术,用程序大规模生成的恶意url和域名,是可以使用ML/AI方法检出的,所以此处应用场景应该更细化,该模型的价值更高。

上述材料仅供学习,请不要攻击实际生产的AI系统!
练习请自行搭建AI靶场。

最后给大家安利一个租卡平台:
autoDL:https://www.autodl.com
一个非常好上手的平台,易用性高,帮助文档也非常详细,小白也可以快速搭建起环境,然后开始快乐炼丹。
各位老板也可以填一下我的邀请码:https://www.autodl.com/register?code=4bacd9d2-d4bf-4baf-82c9-7b935986a34d,可以获得十元代金卷试用。(也可以让我薅薅AutoDL羊毛,btw:诚心非广,本菜狗还不配)


  1. Case Studies ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值