精华内容
下载资源
问答
  • 根据雷达兵心理对抗的主要任务和基本特点,探究和提出了提高综合素质、增强信息监控、适时心理疏导、优化心理环境4个方面的心理防御措施及先发制人、强化宣传、组织反击、隐形干扰4个方面的心理反击措施。
  • 征文 _ 王振东:红蓝对抗中的心理博弈 区块链 安全建设 安全架构 漏洞分析 区块链
  • 性别和职别对抗疫医疗队员心理弹性及心身状态的影响.rar
  • 性别和职别对抗疫医疗队员心理弹性及心身状态的影响.pdf
  • 对抗样本领域的研究正热火朝天,本文提及的攻击和防御方案并不是最优的,希望感兴趣的师傅们看了本文后,能够不再对该领域抱有排斥心理,加入对抗样本的研究队伍中来,为AI安全贡献自己的力量。 02 模型搭建及评估 ...


    原创稿件征集

    邮箱:edu@antvsion.com

    QQ:3200599554

    黑客与极客相关,互联网安全领域里

    的热点话题

    漏洞、技术相关的调查或分析

    稿件通过并发布还能收获

    200-800元不等的稿酬

    01

    前言

    对抗样本大家都耳熟能详了,但是大家可能觉得离自己比较远,毕竟主要是学术界在做这方面的工作,可能还需要很多数学理论基础,所以没有尝试动手实践过。在本文中,不会提及高深的数学理论,唯一的公式也仅是用于形式化描述攻击方案,并不涉及任何数学概念,同时以代码为导向,将论文中提出的方案进行实践,成功实施对抗样本攻击,之后给出了典型的防御方案,即对抗训练,同样也是以实战为导向,证明防御方案的有效性。对抗样本领域的研究正热火朝天,本文提及的攻击和防御方案并不是最优的,希望感兴趣的师傅们看了本文后,能够不再对该领域抱有排斥心理,加入对抗样本的研究队伍中来,为AI安全贡献自己的力量。

    02

    模型搭建及评估

    本次我们使用的数据集是Fashion MNIST。Fashion-MNIST是一个替代MNIST手写数字集的图像数据集。它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供。其涵盖了来自10种类别的共7万个不同商品的正面图片。Fashion-MNIST的大小、格式和训练集/测试集划分与原始的MNIST完全一致。60000/10000的训练测试数据划分,28x28的灰度图片.

    数据集大致如下所示

    上图中每一类有3行,10个类别分别是T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot’

    首先加载数据集

    我们需要简单的对数据集预处理,给其添加一个channel维度,否则卷积层不能正常工作,还需要将像素值缩放到[0,1]范围

    接下来打印出实际加载的样本看看

    因为图片是灰度图像,所以输入的shape定义如下

    接下来搭建一个CNN模型,架构如下

    使用summary方法输出各层的参数状况

    设置优化器、损失函数、batch size等超参数

    我们再定义一个辅助函数,用于绘出训练过程相关度量指标的变化

    接下来开始训练模型

    使用前面定义的绘图函数画出模型训练过程的指标的变化情况

    评估模型在测试集上的性能

    上图打印出的classification report,这个怎么看呢

    列表左边的一列为分类的标签名

    右边的第一行中,precision recall f1-score三列分别为各个类别的精确度、召回率及F1 值.support是某类别在测试数据中的样本个数;

    accuracy表示准确率,也即正确预测样本量与总样本量的比值;macro avg表示宏平均,表示所有类别对应指标的平均值,而weighted avg带权重平均,表示类别样本占总样本的比重与对应指标的乘积的累加和。

    从上面的classification report可以看到模型在测试集上的表现还是不错的

    而打印出的混淆矩阵如下

    混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。

    我们以第一行为例,样本的真实类别为t-shirt,在分类结果里,有862个样本被正确分类,有16个样本被错误分类到pullover,有15个样本被错误分类到dress,有3个样本被错误分类到coat,有96个样本被错误分类到shirt,有8个样本被错误分类到bag

    如果只要看有每个类别分别由多少样本被正确分类,则只需要看对角线即可。每一类总共是1000个测试样本,而t-shirt有862个被正确分类,trouser有975个被正确分类,以此类推。从混淆矩阵可以更具体看出测试样本是被错误分到了哪一类。

    03

    对抗样本攻击

    对抗样本可能或多或少都有听说过,它是通过对数据集中的样本应用较小但蓄意的会导致最坏情况的扰动而形成的输入,因此,被扰动的输入导致模型以高置信度输出错误的答案。

    我们本次来实践最经典的对抗样本攻击方案--FGSM,下面这张图片大家应该都看过,它正是出自于提出FGSM的论文

    从熊猫图像开始,攻击者在原始图像上添加小扰动,结果模型将此图像预测为长臂猿。

    那么FGSM攻击是如何实现的呢?或者说攻击中添加的扰动是怎么来的呢?

    我们知道训练分类模型时,网络基于输入图像学习特征,然后经过softmax层得到分类概率,接着损失函数基于分类概率和真实标签计算损失值,回传损失值并计算梯度(也就是梯度反向传播),最后网络参数基于计算得到的梯度进行更新,网络参数的更新目的是使损失值越来越小,这样模型分类正确的概率也就越来越高。

    对抗样本攻击的目的是不修改分类网络的参数,而是通过修改输入图像的像素值使得修改后的图像能够扰乱分类网络的分类,那么根据前面提到的分类模型的训练过程,可以将损失值回传到输入图像并计算梯度,也就是下式

    其中, θ 是模型的参数,x 是模型的输入,y 是与 x 关联的类别,J (θ, x, y) 是用于训练神经网络的损失函数。

    接下来可以通过sign()函数计算梯度的方向,sign()函数是用来求数值符号的函数,比如对于大于0的输入,输出为1, 对于小于0的输入,输出为-1,对于等于0的输入,输出为0。之所以采用梯度方向而不是采用梯度值是为了控制扰动的距离.

    常规的分类模型训练在更新参数时都是将参数减去计算得到的梯度,这样就能使得损失值越来越小,从而模型预测对的概率越来越大。既然对抗攻击是希望模型将输入图像错分类成错误类别,那么要求损失值越来越大,也就是模型预测的概率中对应于真实标签的概率越小越好,这和原来的参数更新目的正好相反。因此只需要在输入图像中加上计算得到的梯度方向,这样修改后的图像经过分类网络时的损失值就比修改前的图像经过分类网络时的损失值要大,换句话说,模型预测对的概率变小了。此外我们还需要用来控制扰动的程度,确保扰动足够小。所以,扰动的式子如下

    将扰动加到原样本上就得到了对抗样本,如下所以

    我们将这称为生成对抗样本的fast gradient sign method(快速梯度符号方法)。

    对应的代码实现如下

    应用以上函数,我们来看看对coat样本的攻击前后的结果

    从可视化的结果可以看到,左边是原样本,以真实标签为coat,模型以较高的置信度将其预测为coat,中间是添加的对抗扰动,加上之后就得到了右边的对抗样本,其被模型错误预测为了pullover,说米我们攻击成功了。

    查看对sneaker的攻击前后结果

    同样攻击成功了,对于其他测试集样本生成的对抗样本同样可以攻击成功。

    接下来我们来进行对抗训练,提升模型的鲁棒性

    为了更全面的衡量模型在面对对抗样本攻击时有多么容易受到攻击,我们可以针对测试数据应用FGSM生成对应的对抗样本测试集

    通过打印classification report和混淆矩阵来评估模型在面对对抗样本攻击时的鲁棒性

    可以看到整体的指标都是较低的,说明模型面对对抗样本攻击的鲁棒性较弱

    接下来我们通过对抗训练的方法增强模型的鲁棒性

    04

    对抗训练

    在实践之前,先来介绍对抗训练的概念。

    对抗训练(Adversarial Training)最初由 Ian Goodfellow 等人提出,作为一种防御对抗攻击的方法,其思路非常简单直接,将生成的对抗样本加入到训练集中去,做一个数据增强,让模型在训练的时候就先学习一遍对抗样本。

    对抗训练实际上是一个min-max优化问题,寻找一个模型(以参数表示),使得其能够正确分类扰动在一定范围S内的对抗样本,即

    其中(x,y)表示原始数据和对应的标签,D表示数据的分布,L是损失函数

    内层(中括号内)是一个最大化,L则表示在样本x上叠加一个扰动,再经过神经网络函数,与标签y比较得到的损失。max L是优化目标,即寻找使损失函数最大的扰动,简单来讲就是添加的扰动要尽量让神经网络迷惑。外层就是对神经网络进行优化的最小化公式,即当扰动固定的情况下,我们训练神经网络模型使得在训练数据上的损失最小,也就是说,使模型具有一定的鲁棒性能够适应这种扰动。

    接下来我们来看实际中对抗训练是怎么做到提升模型鲁棒性的

    首先将同样的方法应用于训练集,生成原训练集的一批对抗样本,作为对抗样本训练集,并将对抗样本训练集和原来的训练集合在一起作为最终的训练集

    开始在最终的训练集上训练模型

    训练过程中的指标变化如下

    如此,就完成了对抗训练

    那么怎么对抗训练得到的模型的好坏呢?

    首先要看该模型在正常的测试集上的性能,毕竟大多数测试样本都是正常的,这才是训练模型最主要的任务,即需要在正常的测试样本面前表现好

    可以看到性能还是不错的

    另外还要看模型在接收对抗样本时的性能,毕竟这是对抗训练相比一般训练最主要的目的所在,就是为了在面对对抗样本时,不会被其欺骗

    从结果可以看到,模型在面对对抗样本时表现非常好

    直接看这些指标不具体的话,我们可以从10类样本中各打印一个样本的对抗样本,并查看模型对其分类结果

    从结果可以看到,10个对抗样本都被模型正确分类了,说明模型的鲁棒性较好,表明了对抗训练的有效性。

    05

    参考

    1.EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES

    2.ADVERSARIAL TRAINING METHODS FOR SEMI-SUPERVISED TEXT CLASSIFICATION

    3.Towards Deep Learning Models Resistant to Adversarial Attacks

    4.https://zhuanlan.zhihu.com/p/10404005

    5.https://zhuanlan.zhihu.com/p/166364358

    6.https://github.com/1Konny/FGSM

    7.https://github.com/ndb796/Pytorch-Adversarial-Training-CIFAR

    8.https://github.com/zjfheart/Friendly-Adversarial-Training

    06

    实操推荐

    基于机器学习的网络安全应用实践:http://mrw.so/5Q7rhG

    在本系列实验中,我们将会学习机器学习与网络安全结合起来,使用机器学习来辅助网络安全问题的解决。此外,我们还会关注机器学习自身的安全性问题,如投毒攻击、逃逸攻击等,这一部分目前也是学术界、工业界研究的热点。

    “阅读原文”

    体验免费靶场!
    展开全文
  • 技术人员与管理人员都有必要学习的心理
  • 对抗样本:知其然,知其所以然

    万次阅读 多人点赞 2018-07-15 13:36:08
    设想用GoogleAPI得到对飞机的分类结果是99.9%飞机,0.01%的船,那么攻击者就知道,这个飞机的图片比较容易被误分为船,相当于知道了梯度的方向,只需要在自己的模型上往船的方向生成对抗样本就行了。把分类结果改成...

    聪明汉斯的故事

     

    在二十世纪初的德国,有一匹名叫汉斯的马非常有名。在主人威廉•冯•奥斯滕的训练下,聪明的汉斯经过了一段时间的训练,掌握了简单的数学运算。当奥斯滕问汉斯“一加一等于几”的时候,它会用蹄子在地上“嗒,嗒,嗒”的敲出答案。围观的群众看到汉斯能够正确的回答各种数学题,都感到惊讶和神奇。

    同时,人们也疑惑,汉斯是否真的通过训练学会了过去人们认为动物做不到的事情。在一系列的调查中,人们发现,如果在提问汉斯时,提问者并不知道问题的答案,或者马看不到提问者,汉斯就无法正确回答。

     

    原来汉斯并不是根据主人的问题来决定要敲多少下蹄子,而是通过观察提问者和现场观众的细微线索,比如身体姿势,面部表情等,来决定什么时候停止敲蹄子。汉斯没有学会如何做数学运算,它只是善于观察。

     

    在感知认知心理学和社会心理学等领域,做实验的时候都是做双盲实验,以此控制这种“聪明汉斯效应”。而聪明汉斯的故事对机器学习领域也有启发作用。

     

    训练汉斯做数学题就像是机器学习中训练一个模型。奥斯滕不断的训练相当于提供了训练集,他真的以为自己在教汉斯数学。其实汉斯学会的是如何在观察到对应的细微反应和动作时停止敲蹄子。但是汉斯这种依赖提示而不是问题本身的能力缺少泛化性,于是在人们故意将提示藏起来的测试集上,汉斯失败了。虽然,在通常情况,汉斯对有观众的测试集有较好的泛化性。


    对于现在的机器学习算法,某种程度也是这种情况。模型能够学得训练集的特征,这些过为线性(之后解释)的特征甚至对与训练集同分布的测试集有很好的泛化性。但是如果测试样本的分布发生了偏移,一个有恶意的敌人故意生成这种样本尝试去欺骗模型,这些模型是很脆弱的。

     

    对抗样本

    什么是对抗样本

    从2013年开始,深度学习模型在多种应用上已经能达到甚至超过人类水平,比如人脸识别,物体识别,手写文字识别等等。 在之前,机器在这些项目的准确率很低,如果机器识别出错了,没人会觉得奇怪。但是现在,深度学习算法的效果好了起来,去研究算法犯的那些不寻常的错误变得有价值起来。其中一种错误叫对抗样本(adversarial examples)。

     

    对抗样本指的是一个经过微小调整就可以让机器学习算法输出错误结果的输入样本。在图像识别中,可以理解为原来被一个卷积神经网络(CNN)分类为一个类(比如“熊猫”)的图片,经过非常细微甚至人眼无法察觉的改动后,突然被误分成另一个类(比如“长臂猿”)。


    Figure2 图片来源

     

    多方研究者的工作表明,我们可以对任意图像,加上一点细微的,无法察觉的噪声,从而使其被分类为任意的标签。更甚者,不少的对抗样本对不同的卷积网络有泛化性,可以同时欺骗不同结构的模型。在现实生活中,经过相机拍照,在不同光照环境拍摄角度的情况下,经过打印,对抗样本人会被错误分类。

     

    这说明对抗样本出现,不是因为这些图片有着一些脆弱的特点,或者模型对某些属性的过拟合造成的。我们不应该把对抗样本想象成孤立的outliers,可能理解成它们来自对抗样本子空间更为准确。

     

    如何产生对抗样本

     

    在讨论为什么对抗样本攻击可行和为什么这些卷积网络容易被欺骗前,先来介绍一下对抗样本是如何产生的。

     

    先稍微扯开话题一下,谈谈如何理解深度学习能成,假设有个训练好的用于做物体识别的CNN,怎么去理解这个CNN的工作机制。IanGoodfellow提到在Google一位同事之前做的一个可视化实验。这位同事Christian当时在尝试理解CNN原理时,他想到或许可以用一张图片比如说一艘船,然后逐渐地将这张图片转化成一张能被CNN识别为飞机的图片。

     

    基于人脑的理解,我们可能会觉得这张图片的背景会变蓝,或者图片中的船长出了飞机的机翼。从而就能认为CNN利用蓝天或者机翼作为特征来辨认飞机的。但事实完全不是这么回事。

    Figure3 图片来源

    图中分别是船,小车,猫还有吉普按照从左到右从上到下通过梯度下降和反向传播逐渐向飞机转变的过程,最后一张图片已经被CNN以高概率认为是飞机了。但除了猫的脸颜色变得有点蓝,所有图片几乎发现不出任何变化。

     

    发现了吗,梯度下降和反向传播(见补充内容)没有把原图像变成一架飞机,而是找到能够欺骗CNN的图像,找到了对抗样本。

     

    原本在训练分类器CNN的时候,是保持输入图像不变,通过反向传播更新模型参数来提高对目标标签的分数。而现在要得到对抗样本,只需要保持模型的参数不变,对图片的每个像素值计算梯度并更新。

     

    那么问题来了,调整了图片的像素值后,模型输出的结果会发生什么变化?

     

    我们通过反向传播计算量梯度,更新了图像的像素值,最终结果一样是目标标签的分数提高了。也就是说,用一张船的图片,只要往以标签为飞机的梯度方向更新图像,这只会稍微改变图像,但CNN将其分类为飞机的概率显著提高了。

     

    为什么对抗样本会发生

    我先直接说现在业界共识吧。对抗样本不是过拟合的结果,而是因为输入特征维度过高和模型的线性性质导致的。

     

    首先,如果是过拟合。复杂的CNN过拟合了训练集,而测试集的分布是未知的,模型必然会出现一些随机性的错误。

     

    举个具体的例子方便理解过拟合,图中绿色的圈圈和蓝色的叉叉是训练集中两类。我们有一个过于分类器能非常容易的拟合训练集。绿色的块块就代表分类器认为类是圈圈的范围,蓝色的块块代表分类器认为类是叉叉的范围。可以看到分类器能正确将训练集分类。但是因为分类器过于复杂,用来表示训练集特征空间的参数过多,分类器对没有训练集的特征空间也进行分类,随机的赋予了绿色或蓝色的块块。而就在这些空间中存在着对抗样本,红色的本该是叉叉被误认为是圈圈,红色的本该是圈圈的被误认为是叉叉。

     

    如果真的是过拟合的话,每个对抗样本的出现应该算是运气不好,并且每个对抗样本某种程度上是独特的。如果我们用不同的模型重新拟合时,应该会看到模型在训练集之外犯不同的错误。但实际上,研究人员发现许多不同的模型对同一个对抗样本会犯同样的错误,如果将一个对抗样本和原图像相减得到在图像空间上的方向向量,用来加上其他任一个图像,几乎都会被误分类。所以不是过拟合。

     

    其实,合理的解释是欠拟合,由于输入空间维度过高,模型过于线性的结果。

    再举个例子理解欠拟合,对于一个类似的训练集,我们用一个简单的线性模型去拟合,得到的超平面也完美的分割了训练集,但是这个超平面没有掌握训练集真正的结果,圈圈的分布明显是一个弧形,沿着弧线继续采样圈圈,却发现越过了超平面被误分;类似的叉叉的分布也容易越过超平面被误分。

     

    线性模型的问题在于,对于距离决策层越远的地方,如上图的左下角和右上角部分,即使没有训练集数据出现,模型也会认为有相应的很高的概率。而线性模型在在没有训练集出现的地方做出的预测通常是有问题的,这一点也是由线性模型的特点导致的:不管这个特征或其他特征的值的大小,每个特征都有相同的偏斜率。那么当一个数据点沿着一个固定方向,在训练集中移动,当移出到训练集分布之外的地方时,模型输出的变化方向也是不变的。

     

    下图是在CIFAR-10数据集上做的一个实验,可以比较好的理解模型的线性和跨越决策层。使用的攻击方法是FGSM(Fast Gradient Sign Method),不以梯度直接作为扰动,而是对梯度去符号,并用一个epsilon控制大小。 扰动公式:。


    Figure 6 图片来源:DWarde-Farley, I Goodfellow - Perturbations, Optimization, and Statistics,2016

    图中右边10x10的网格,每一个块描述了CIFAR-10测试集数据被分类的决策层位置。左边的图示意了每个块内部的意思,块中心表示原图像,没经过修改,往左右移动相当于对图片在FGSM攻击方向修改,上下移动代表对图像进行垂直于FGSM方向的修改。块中白色的区域表示图像被正确分类,其他颜色表示分类错误。可以明显看到,几乎所有块的左半边都被正确分类,而右半边被错误分类,而且分割线是几乎线性的。也就是说FGSM确定的方向能有效的得到对抗样本,而且对抗样本应该是存在于线性的子空间中的。打个比方就是,对抗样本和正常样本之间的关系,不像实数和无理数之间的关系,好像每个正常样本边上都能找到对抗样本,而更像是存在与区间中,在这个区间中都是对抗样本。

     

    进一步来说,在高维空间,每个像素值只需要非常小的改变,这些改变会通过和线性模型的参数进行点乘累计造成很明显的变化。而图片通常都有极高的维度,所以不需要担心维度不够。也就是说,只要方向正确,图像只要迈一小步,而在特征空间上是一大步,就能大程度的跨越决策层。

     

    那么,很多人会有疑问,深度学习模型也是以为太线性了?深度学习的精髓不就是那些非线性激活函数吗,如果没有非线性的激活函数,再深再多层的网络和一个单层的线性模型也什么区别,也就不可能这么有效果而被广泛使用了。

    Figure7图片

    再看一眼这些激活函数或许能明白,它们都是非线性函数,但却都一定程度上是线性的,比如现在最流行的relu,有一半是线性的,再回想以前流行的sigmoid函数或者tanh函数,都是希望输入值落在中间接近线性的部分而不是两边斜率接近0的部分,防止梯度消失。这也是为什么relu能取代之前sigmoid的原因,更稳定快速的训练。

     

    其实仔细一想可以明白,深度模型本实确实是一个非常非线性的模型,但是模型能的组成部分都是线性的,全连接网络的矩阵乘法是线性的,卷积网络的卷积计算也是计算点乘,线性的,还有序列模型用到LSTM用的是最简单的加法,更是线性的。

     

    注意,我们可以说深度学习模型从输入到输出的映射是线性的,但是从模型的参数到输出的映射不是线性的,因为每层的参数,权重矩阵是相乘得到的,这也是深度学习模型不好训练的原因之一,参数和输出的非线性关系。所以针对优化输入的优化问题要比针对模型参数的优化问题要容易得多。


    对抗样本的可移植性

    对抗样本的发现给深度学习敲响了警钟,提醒人们要思考深度学习的安全性和可靠性。研究者已经尝试过多种利用对抗样本的攻击,并发现可行。比如通过相似模型训练出的对抗样本,可以让亚马逊或谷歌服务器提供的图像识别服务出错,一张对抗样本经过拍照,在由手机上的图像分类对照片进行分类也会出错,而且产生这个对抗样本的模型和手机上使用的模型是不同的。


    Figure8 图片来源

     

    除了主流的针对基于CNN分类器的对抗样本攻击,研究的方向还涉及了其他的深度学习领域。如在自编码器和生成模型上的攻击,在循环神经网络上的攻击,深度强化学习上的攻击,在语义切割和物体检测上的攻击等。(Threat of Adversarial Attacks on Deep Learning in Computer Vision: ASurvey)

     

    对抗样本防御

    正所谓道高一尺魔高一丈,目前找到对抗样本比设计一个能防御对抗样本的模型要容易得多。下面我们来看几种防御的尝试,并讨论一下为什么防御这么难。


    对抗训练

    对抗训练是防御对抗样本攻击的一种方法。将对抗样本和正常样本一起训练是一种有效的正则化,可以提高模型的准确度,同时也能有效降低对抗样本的攻击成功率。不过这种防御也只是针对同样用来产生训练集中的对抗样本的方法。

    确实在下图中可以看到,训练集是正常样本和对抗样本,测试集是正常样本的红线比训练集和测试集都是正常样本的错误率要降低,说明对抗训练是有正则化的功能。

    Figure 9 图片来源

     

    在训练的时候直接生成对抗样本是比较低效的,之前提到的FGSM是一个高效的对抗训练方法。只需要改变目标函数就能在训练每个正常样本的同时也考虑了对抗样本。模型训练去给对抗样本赋予和正常样本原分类同样的类别。

    用经过FGSM训练的网络,可以有效的防御用FGSM产生的对抗样本攻击,但是如果换其他对抗攻击方法,也会被攻破。


    defensive distillation

    蒸馏是最先由Hinton提出的,通过训练一个模型来预测另一个训练好的模型输出的概率的训练过程。防御性蒸馏只是想让最终模型输出结果更柔和一点。虽然这里的前后两个模型结构相同,第一个模型训练的是硬标签(比如狗的概率是1,猫的概率是0),而第二个模型训练的是软标签(狗0.85,猫0.15),这样后面的这个蒸馏模型对FGSM攻击更具鲁棒性。


    隐藏梯度

    构造对抗样本的方法一般都是用到模型的梯度,比如想要模型把飞机误认为是船,只需要将飞机的图片往提高分类为船的概率的方向推一把就行。那是不是只要把模型的梯度藏起来,攻击者就往哪个方向推这个飞机了?设想用GoogleAPI得到对飞机的分类结果是99.9%飞机,0.01%的船,那么攻击者就知道,这个飞机的图片比较容易被误分为船,相当于知道了梯度的方向,只需要在自己的模型上往船的方向生成对抗样本就行了。把分类结果改成“飞机”,不给其他可能的类别就能让模型更鲁棒了呢。很遗憾,只要攻击者自己训练一个能输出各类概率的模型,用这个模型生成的对抗样本通常能攻击成功,这也叫黑盒攻击。

     

    其他防御方法还有,对测试样本加入随机噪声,尝试通过autoencoder消除扰动,甚至集成学习,但总的来说,这些基于正则化的尝试最终都被证明没能完全防御。就有点像打地鼠游戏,填了一个坑,地鼠会从其他坑冒出来。

     

    对抗样本之所以难以防御是因为很难去对对抗样本的生成过程建立一个理论模型。生成对抗样本的优化问题是非线性而且非凸的,我们没有掌握一个好的工具去描述这种复杂的优化问题的解,也就很难去想出理论上能解决对抗样本的方法了。从另一个角度,现在的机器学习算法有效的范围只在一个相对小的样本空间中,对比于巨大的样本空间全局,很难要求机器学习算法对空间中每个样本都输出好的结果。

     

    展望与总结

    最后我们来展望一下,如果解决了对抗样本的问题未来有什么潜力。有很多问题其实深度学习有希望解决的,试想我们要设计一个高性能跑车,可以用一个神经网络来对一个跑车设计图打分,评价这个车能跑的多快。然后根据让设计图产生跑的最快的跑车的优化方向更新图纸,就可以找到跑的最快的跑车。当然,实际上我们找到的是对抗样本,只是模型以为这车跑得快而已。

    Figure 10图片来源

    如果解决了对抗样本,就可以定义一个描述一个我们想要但还不存在东西的函数,然后通过梯度下降和神经网络来帮我们实现它。可以用来设计新的基因,给药物设计新的分子结构,甚至设计性能更好的GPU芯片。

     

    本片文章介绍了对抗样本是什么,怎么产生对抗样本,详细讨论对抗样本发生的原因,并介绍了几种防御对抗样本的方法。

     

    补充内容


    梯度下降


    想要最小化一个目标函数/损失函数时,对求导,然后按照更新,知道收敛。对于高维特征,分别对每个维度的特征求偏导,这些偏导组成的向量就叫梯度。梯度下降得到的结果是局部最优解。

     

    想象自己身处于充满迷雾深山中,你想要走到山底。因为四周都是迷雾,唯一的办法就是往下坡坡度最陡的方向一步一步走。最终必然能走到最低点。

     

    反向传播

    针对深度神经网络,根据求导的链式法则从后向前更新模型参数。

     

     我还对Ian Goodfellow的一些演讲,分享视频做了笔记。链接


     

    参考文献 

    网络视频

    [1] IanGoodfellow PhD DefensePresentation.

    [2] On Deep Learning with IanGoodfellow, Andrew Trask, Kelvin Lwin, Siraj Raval and the Udacity Team.

    [3] Heroes of Deep Learning:Andrew Ng interviews Ian Goodfellow.

    [4] Lecture 16 |Adversarial Examples and Adversarial Training.

     

    技术博客

     

    [1] 一文详解深度神经网络中的对抗样本与学习.

    [2] Attacking MachineLearning with Adversarial Examples.

    [3] Breaking LinearClassifiers on ImageNet.

    [4] Adversarialexamples in deep learning.

    [5] cleverhans-blog.

    [6] KnowYour Adversary: Understanding Adversarial Examples (Part 1/2).

    [7] TheModeler Strikes Back: Defense Strategies Against Adversarial Attacks (Part2/2).

     

    期刊论文

    [1] Ian J Goodfellow, et al. Explaining andharnessing adversarial examples. In Proceedings of the International Conferenceon Learning Representations, 2015.

    [2]Alexey Kurakin, et al. Adversarial examples in the physical world. arXivpreprint arXiv:1607.02533, 2016.

    [3]Nicolas Papernot, et al. Distillation as a defense to adversarial perturbationsagainst deep neural networks. In Proceedings of the 37th IEEE Symposium onSecurity and Privacy.

    [4] D Warde-Farley,I Goodfellow 11 adversarial perturbations of deep neural networks Perturbations,Optimization, and Statistics, 311.

    [5] N. Papernot, P.McDaniel, I. Goodfellow, S. Jha, Z. B. Celik, and A. Swami. Practical black-boxattacks against deep learning systems using adversarial examples. arXivpreprint arXiv:1602.02697, 2016a.

    [6] Naveed Akhtar, Ajmal Mian Threat of AdversarialAttacks on Deep Learning in Computer Vision: A Survey arXiv:1801.00553.

    [7] Goodfellow, I., Bengio, Y., and Courville, A.Deep Learning. MIT Press, Cambridge, MA, 2016; http://www.deeplearningbook.org/.


    展开全文
  • 谈判过程中必须避免产生对抗情绪(首先自己不产生对抗情绪并用【“感知,感受,发现”】的方法化解对方的对抗情绪) 1. 你千万不要出现让对方产生对抗情绪的行为或言语(也不要使用会让对方产生对抗情绪的行为来...

    谈判过程中必须避免产生对抗情绪(首先自己不产生对抗情绪并用【“感知,感受,发现”】的方法化解对方的对抗情绪

    1. 你千万不要出现让对方产生对抗情绪的行为或言语(也不要使用会让对方产生对抗情绪的行为来实施不情愿的卖家/买家策略),如果导致对方情绪化(对抗情绪)对你的危害:如果你让对方产生对抗情绪,即使对方被迫成交了,那么对方心里也不会服气,且很有可能对你产生敌意。对未来的当前交易的后续执行有影响,且影响今后你与该人的关系,该人可能宣传你的负面形象,该人可能在其它地方为难你,重要的是违反了双赢的目的,违反了达成交易后应该让对方感觉到对方赢得了谈判的原则。99%的情况下都不要试图通过让对方产生对抗情绪的策略来让对方成交(即试图激怒对方),因为如此的话,绝大部分情况下你会提高了你说服对方成交的成本,因为你必须为对方的对抗情绪付出代价,从而抵消对方的对抗情绪,从而才能成交。99%的情况下都不要试图通过让对方产生对抗情绪(如刻意激怒对方,从而让对方意识到自己不重视这次交易,从而希望逼迫对方降低要求。一般情况下,这种做法,80%的情况对方会拒绝交易,即使你做出一些妥协,因为对方为了争一口气,也不会按你的方案来,如此你想成交,会需要付出更大成本妥协)来逼迫对方成交。优势谈判高手总会想办法将场面和谈判引导到一个双赢的结果,而不是单方面赢或者两败俱伤。

    2. 谈判过程中,首先你不要情绪化(对抗情绪),你首先情绪化(对抗情绪)的危害:如果开始你抱着谈判的目的与对方谈,最终因为某些原因或要素导致双方情绪化,最终以争吵结束且没有达成交易。这是双方都不想看到的。如果交易最终发展为你为了纯属出一口气,不在乎是否成交为目的,那么最终的结果可能是你赢了对方,或者对方吵架赢了你。或者持续争吵,不分高低。无论哪种情况,不是两败俱伤就是一方赢一方输。都不是我们谈判的目的。情绪化的风险还在于可能升级冲突,造成双方无法挽回的损失。因此必须在谈判的开始时,谈判中,谈判结束,整个谈判过程中绝对避免情绪化。始终贯彻我们的谈判的目的,达成交易,实现双赢,让对方感觉赢得了谈判。谈判过程中任何时刻,你都要检查你的谈判的目标,如果你忘记了检查你的目标,很可能你会失去当前这笔生意。你既然付出了时间精力,怎么能忍心为了一时的冲动,为了争一时之气,就放弃这单生意呢,况且你已经付出了时间精力成本进行了这次谈判。大量经验表明,任何因为情绪化而导致的生意谈判失败,以及情绪化造成的冲突,即使冲突后取得了冲突的占有优势的一方,无论是首先情绪化还是被迫情绪化的一方都会后悔当初的情绪化决定。

    因为即使你争得了一口气,一时的高兴,这种兴奋不会持久,在以后的日子里,你会常常后悔当初,为何无法控制自己的情绪。大量经验表明,情绪化99%的情况是一种愚蠢的行为,人们都会后悔当初的行为,即使当时取得了成功,因为情绪化的身后蕴藏了冲突升级导致两败俱伤的巨大危险,且会造成你的人际,人设,生意,谈判各个方面处于不利地位,因此你必须时刻保持理智,目标清晰。

    3.  如何  应对对方首先情绪化(对抗情绪),应对对方首先发出的挑衅或情绪化(对抗情绪)攻击:首先如果发现对方情绪化,或通过言语对你进行攻击,首先要判断对方的攻击是否是一种希望达成交易或达成某个目的的一种策略(如假装不情愿的卖家/买家)。如果是那么你要以《谈判优势》中讲道的各种策略回应。如果意识到对方不是在使用策略,而仅仅就是对方内心的真实的感受。即对方真的就是生气了,不高兴了。那么我们应该以 【“感知,感受,发现”】的方法来扭转对抗局面,对方说出某个观点或理由后,千万不要立刻反对对方的意见或说辞,这样的话很容易导致对方的对抗情绪,进而导致对抗升级。

    具体情况具体分析,如果你单纯是为了争一口气与对方坡口大骂进而很可能升级为打架斗殴,最终两败俱伤,这种是一种无知的表现,对生命的不负责,对家人的不负责。如果对方先出现这种对抗或攻击情绪,请你要想【办法化解】,而【不是】【被迫升级】【这种冲突】(即对方先发难,如破口大骂,如果你也骂对方,则是被迫升级冲突,优势谈判高手会根据具体场景化解,如告诉其“尊敬的xx先生,我现在很理解您现在的心情,如果是我遇到这种情况,相信也会像您一样十分气愤。可事情过后认真重新想想这个问题之后,大部分情况下发生这样的事情,真的是有可以理解的原因的。咱们现在关键是要拿出一个解决方案,相互争吵只是在浪费您的时间。就这个问题,我认为。。。”以 【“感知,感受,发现”】的方法来扭转对抗局面),如果【你选择】【升级】【对抗关系】,【通常】会【两败俱伤】。优势谈判专家会【引导对方】,【控制】【谈判方向和氛围】,而【不是】【被对方引导】。优势谈判高手【永远】【会有办法】和【策略】将场面和谈判引导到一个双赢的局面,而【不是】【两败俱伤或某个单方面胜利】。

      关于对抗情绪,谈判中容易犯的错误

         1.容易犯的错误:【故意】以一种让【对方】产生【对抗情绪】的【行为】来使用【不情愿的卖家/买家策略】,让对方意识到你的不真诚或者试探,从而体现自己不在乎(即表现为不情愿的卖家/买家策略),从而【逼迫】【对方让步】。这【会】【产生对抗情绪】,这是最后【不得不】【采用的策略】,即以友好的方式给对方施加压力的可选方案很多,如黑脸白脸策略,拖延策略等,这种让对方产生对抗情绪的策略,是最后前面的各种方法都无效的时候才会选择的,99%的情况都不应该选择这种容易让对方产生对抗情绪的策略。而如果对方产生对抗情绪,那么你需要付出更多去抵消这种对抗情绪,从而你会【立刻或在不久的将来】付出【更多】。你应该采用的方法是不让对方产生对抗情绪的方法给对方施加压力,如黑脸白脸策略,时间压力等,而不是产生对抗情绪。对抗情绪导致的危害前面已经说明,这里不再重述。让【对方意识到】你的每句话都是【真实】的,而【不是】【套路或者试探】,是特别重要的。

          千万不要用一种让对方产生对抗情绪的方式或表情来表现自己的强势或优势,或以此实行不情愿的卖家/买家策略,【即使】自己【真的占有优势】。因为这样,如果对方【产生对抗情绪】,那么你的【原来的优势】将【很可能】【被削弱】,因为【对方】产生【对抗情绪后】,内心很可能在想“即使我不要这单,也不会同意你的方案,我就是为了争这口气”,或者“这个人态度不好,不容易交流,即使成单,后续的合同的执行也会重重困难,况且利润已经被压得很低了”或者“对方显得一点也不在乎,成单的机会不大,还是放弃掉对方吧,估计再降价也不能成单,且其态度太不好了”或者“我不喜欢这个人,即使他给我2倍的利润,我也不会卖给他任何东西”。让对方产生对抗情绪,是【成交的大忌】。无论是【买家还是卖家】。然而总有人试图【激怒对方】来发泄自己的怨气得到快感,这种方法是【十分】【愚蠢】和【无知】的。你的这种反应99%的可能会让你失去这笔生意,并造成产生冲突升级的风险。

          比如a出现激怒b的行为的时候,可能a是为了激怒对方,寻找一种占上风的快感,而a此时已经不在乎是否可以达成交易了,从而你发现,既然a要激怒对方b,很可能是因为b做了一些首先让a产生对抗情绪的语言或行为,从而b也失去了这单生意,然而如果我们被对方的行为激怒,产生对抗情绪并反击,那么我们也会失去这笔生意。我们的做法应该是首先自己不产生对抗情绪并用【“感知,感受,发现”】的方法化解对方的对抗情绪。

            我们应该把避免对抗情绪,放在首位。即使你要给对方压力,也要注意态度,不要让对方产生对抗情绪,否则对方加入了对抗情绪,你想要达成交易的几率就大大降低了,因为对方的情绪是阻碍你成单的一个障碍,且【很可能】成为【最大的障碍】。因为对方对你有对抗情绪,那么你必然要付出成本去抵消这部分对抗,才能达成交易。因此【让对方产生对抗情绪】,【增加了】自己说服对方按照自己的意愿达成【交易的成本】。

           2.容易犯的错误:你首先情绪化,从而导致你的目的从希望成交转换为你想成功压制对方(此时你已经因为情绪原因,不再在乎是否成交了),从而获得成功的快感。你首先情绪化,你与对方谈判,你首先表现出一种情绪化,比如因为对方某个细节或行为而生气,从而你首先产生对抗情绪,从而你表现出蔑视,语言数落,表现的【故意】让对方意识到【你不真诚】,故意让对方意识到【你不在乎】,从而达到你【让对方生气的目的】。【千万不要这样】,因为你的【最初目的是成交】,不要忘记你的最初目的,如果你的【目的变成了让对方生气】,此时【很有可能】你觉得成交不成交都无所谓了,你【已经放弃了成交的幻想】,转而把目的转换为要成功在气场上压制对方。实际上此时你的情绪在你的判断中,占据了很大判断因素,【影响】了你的【理性思维】,你的对抗情绪让你激情澎湃,让你不再在乎是否成交,而【实际上】当前你【面对的】【真的很有可能】就是你的【最佳交易对象】。因此任何情况,如果你出现情绪化的动向,都必须要首先想一想,【情绪化会让这笔生意泡汤】。如果你真的认真分析后,当前这家成交的希望真的很渺小,那么也不建议你情绪化,因为【情绪化】会有【导致冲突】甚至【两败俱伤的风险】。优势谈判高手的做法如果发现对方出现【让自己不高兴】【的行为】,通常会以 【“感知,感受,发现”】的方法来扭转对抗局面。

          如果你开始的时候是为了【谈判】【达成交易】,后来演变为为了争一口气,从而开始故意让其生气,开始互相指责,形成了对抗,并且你有意加强升级这种对抗,其目的就是为了达到成功压制对方从而得到某种快感。或者为了以后让其尊重自己,给其警告,从而有利于自己。或者因为周围有很多人,包括很多熟人,朋友圈的人,或者陌生人,担心自己处于弱势,从而没有面子,脸上无光,无法再与周围熟人相处。从而有很强的目的取得对抗的胜利。这种【有意主动】【或被迫】(如对方先发起攻击,你被迫反击)【导致对抗(冲突)升级的思路】是【十分危险】的,因为可能两败俱伤,或者自己失败,或者发生难以挽回的重大冲突损失,即使你有把握能在气场上压制对方,那么也为今后自己的生意生活埋下了隐患(比如对方会采取报复行为),是得不偿失的。

          优势谈判专家通常会以 【“感知,感受,发现”】的方法来扭转对抗局面,先理解,然后认同其当前感受,然后告诉自己的意见,来化解,这种方法同样 可以取得前面所讲的所有目的,并且风险很低(如果真的有特殊情况,因为方法不可能100%有效,但是大多数情况都会有效,如果该方法不能解决,可以拨打110等寻求社会援助,暴利冲突是必须避免的)。 

     容易让对方产生对抗情绪的行为或语言

    容易让对方产生对抗情绪的行为或语言:对方意识到你在试探对方;对方认识到你不真诚;对方意识到你在编制谎言欺骗对方;对方意识到你在欺骗对方;对方意识到你看不起对方;对方意识到你在耍对方;对方意识到你不重视对方;对方意识到你的冷淡;对方意识到你不是真的想达成交易,而只是想试探对方的价格底线,套取某种信息(注意区别不情愿的卖家和买家),这里指的是对方意识到对方在谈价的过程中表现出一种轻视另一方的态度,或只是为了套取某些产品信息而不是真的想交易;对方让步了,而你却坚持不让步(此时你如果不让步,那么应该给出足够有说服力的理由,否则对方很容易产生对抗情绪,从而达不到以你提出的条件成交的目的,还可能让对方产生对抗情绪);以“为什么”,“你怎么”等开头,很可能被对方认为是指责,因此你要用下面的语法来替代“您提出这样的要求是不是有什么特殊原因”。

    当你可能需要使用假装情绪化的场合(以下案例,是最后的选择,如果有更好的选择请不要使用):

    1.你激怒对方是一种策略, 如试图激怒对方,让对方失去理智,从而让对方犯错,做出错误决策,从而有利于自己。

    2假意情绪化的应用,比如你假装生气(即因为对方提出的要求太高了,你假装生气了,或者假装失落),从而引起对方的同情心,让对方感觉不好意思,最终让对方妥协。但这种生气只是限于自己的情绪上的生气,不要产生对对方的任何攻击性言语,如破口大骂等。实施方法可以是如直接告诉对方“我现在很生气,很伤心,因为我们已经做出了这么大的让步和成本,然而您一点也不让步”。(不过这种办法,不太建议,因为可能造成对抗情绪,导致对方气愤,进而升级为仇视冲突,绝对要慎用)

    3.假意威胁警告对方,说出如果对方xxx,那么我将xxx(对对方造成损失),从而达到警告或者促使达成交易目的。如“如果您继续坚持该要求,那么我们就不得不撤出我们现在派往您公司的数十位援助工程师,这些工程师相信目前对您的项目进度十分重要”。(不过这种办法,不太建议,因为可能造成对抗情绪,导致对方气愤,进而升级为仇视冲突,绝对要慎用)

    4.假意以某种满不在乎,轻视的表情语气,表现出自己的满不在乎,即不愿意的卖者/买者,从而迫使对方妥协。这种方法会让对方产生对抗情绪,但是你表现为不愿意成交的态度也会十分强烈的传递到对方的大脑中。(不过这种办法,不太建议,因为可能造成对抗情绪,导致对方气愤,进而升级为仇视冲突,绝对要慎用)

    注意:谈判的结果可能是【成交或不能成交】,因为不可能所有的谈判都能成交,因此如果发现成交概率小,或不适合,那么就尽快选择结束谈判,撤出谈判,【不要浪费自己的时间】。

    展开全文
  • 首次系统性地提出以平行智能ACP理论为基础思想的平行安全系统框架,利用生成式对抗模型、平行情报、平行区块链等方法,融入社会学、心理学和行为学等因素,建立了集描述性安全、预测性安全和引导性安全于一体的防护...
  • 看名字就很厉害的样子,看描述更是功能强大 不禁内心一阵酸爽。 丰富了自己部分武器库之后很多白帽子喜悦之情溢于言表,身边很多小伙伴甚至都开始在本地开始测试了;几家欢喜几家愁,总一些人的快乐终究是建立在...

    0x0 背景


    由于参加最近特殊多人活动的原因,很多渗透攻击武器也进行了对应的更新。冰蝎出了3.0版本、甚至还有好几个beta版本;还朋友圈还出了一个据说比冰蝎3.0还厉害的神器”哥斯拉”全部类型的shell均过市面所有静态查杀、流量加密过市面全部流量waf、自带的插件是冰蝎、蚁剑不能比拟的;看名字就很厉害的样子,看描述更是功能强大 不禁内心一阵酸爽。

    丰富了自己部分武器库之后很多白帽子喜悦之情溢于言表,身边很多小伙伴甚至都开始在本地开始测试了;几家欢喜几家愁,总一些人的快乐终究是建立在一些人的痛苦之上的,生活真的是残酷了;这个节骨点更新大家品大家细品,很多安全公司的小伙伴可能又得彻夜分析,楼下小超市的方便面又得卖断货。

     

    0x1 技术背景

     

    webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后;Webshell的技术问题也是老生常谈了,各个论坛上面的安全技术分析还是比较丰富,大马小马一句话,菜刀冰蝎哥斯拉(还漏了蚁剑);从攻防角度来看在多数的攻击场景下按照killchain的思路与实际步骤来看,一次完成的webshell攻击基本上都绕不过以下4个阶段 主要可以分为:

    1. webshell制作(武器化WEAPONIZATION)   无论怎么样首先的生成一个webshell,很多webshell管理工具是配套使用的直接生成就好,或者自定义改改默认配置,常规的一句话notepad就可以搞定。生成出来只是具备了这个功能,不做一下免杀估计本地的随便一个杀毒软件直接就删除了,详细的免杀绕过后面再讨论。
    2. Weshell投递(交付DELIVERY)  webshell的投递方式普遍以文件上传为主、主流的方式还包括一些文件写入、主动下载、命令执行写入等方式,花里胡哨的姿势很多。投递过程应该是整个过程中的最关键的部分也是难度最大的一部分,因为过程中会面临很多的对抗机制,往往需要结合具体场景多次尝试测试。
    3. webshell访问(利用EXPLOITATION)  将脚本上传到对应的服务器上面之后就进入了关键的一步:如何正确快速的访问到指定的webshell文件。
    4. webshell执行(ACTIONS ON OBJECTIVES ) 使用工具或者直接通过访问访问到对应的webshell执行,就可以随心所欲的操作受害者主机。包括不局限于执行系统命令、探测内网、读取敏感文件、反弹shell、添加用户、清理痕迹、横向移动等操作。

     后续剖析讨论一下在每个阶段当中包含的一些攻击手法与常规的识别方法。

     

     

     

    0x2  制作免杀

     

    常规一句话直接用记事本就可以直接解决,简单的同时也非常容易被查杀,这一类木马的特征实在太明显了比如常见的eval()  assert()之类的函数肯定是一抓一个准。传统的检测方式基于对webshell内容的检测里面最简单的就是字符匹配、正则匹配或者词袋模型 ,这种木马肯定是检测出率100%的。

     

    此类检出场景最多出现在基于终端的文件检测比如大家熟知的D盾、安全狗等产品主要是从文件本身出发。还有另外一个场景就是目前出现最多的防火墙、UTM之类的产品虽然是网关类设备,大多数场景下也是根据内容进行识别检测的,所以本质上都没什么差异。

    为了应对此类检测当然就的想办法绕过了,基于文件内容的绕过方式就很多了,基于检测方法多数是基于敏感函数是吧,那么只要换一种方式处理这些函数就可以了。比较简单几种方法如:

    1. 大小写混淆   比如eval函数可以使用EVaL()当然这种方法基本上已经不起作用了
    2. 字符顺序混淆    assert()可以使用tressa然后用反序函数进行输出或者进行移位拼接 ass+e+rt颇有一种凯撒密码的感觉。
    3. 字符串编码混淆   典型的几个方法如Chr()  Base64()  rot13()  gzinflate()通过编码敏感的字符同样可以达到这种效果。当然现实情况上这几类函数同样被列入了敏感函数范畴,或者大量使用一些注释、\n\t\r之类的一起玩。
    4. 创建匿名函数  eval()函数总得跟一个参数吧,如果直接命中eval这四个字符势必会引起大量的误报。基于这种思路就衍生了call_user_func生成,最后这个函数也被列入了敏感函数
    5. 字符替换  生成一个字符串e123/v123/a123/l再使用函数把”123/”给替换掉空白即可常见的函数如preg_replace()与str_replace()

     

     

    还有很多其他的绕过方式,如回调函数、定义函数方法、字节填充等等方法还是很多这里不多给大家复制粘贴,一般多种绕过方式组合一般能绕过D盾就基本上可以正常使用,相信很多经验丰富的大佬都有不少免杀的webshell。

     

    针对webshell的检出相反手法就要难的多,理论上你知道的webshell种类越多设计的对应的检测手段就越全面,就和股票的涨跌原理是差不多的根本原因就是消息的不对称性,大家都知道还怎么割韭菜。除开自己构造一些webshell之外,很多管理工具都支持自己生成比如大家熟知的冰蝎、weevly之类的,之前自己偶然间抓到了黑产团伙挂马用的shell低版本的D盾还无法识别,后续在新版本却能识别并提示为已知后门。这一类的脚本检测起来还是比较容易,原理很简单大多数工具生成的木马(除开魔改的那种)格式内容都比较固定,通过针对内容里面的函数位置、调用顺序、语法特性等维度做一个特定的模型特征,简单的如yara规则的模式也可以称作指纹。

     

    当前针对文本类的webshell检测主要还是正则匹配、语法分析、绕过特征分析、文本特征指纹等手法为主,之前也注意到有一些针对脚本文件的虚拟执行,感兴趣的小伙伴大家可以了解一下。

     

    0x2  样本投递

     

    样本生成之后,就开始考虑如何把自己手上的webshell投递到制定服务器的文件目录,主要的手法还是以文件上传居多。常规操作攻击者首先需要对目标的应用做个详细的信息收集和踩点。在webshell上传下多数关注一些上传点,常见的上传点如个人资料当中的头像上传、注册需要上传验证资料、上传某些模板更新、常见的编辑器漏洞、留言板回复、商品页面展示;多数业务场景上传主要以图片(JPG、Png、bmp、ico一类)、文档类(doc、excel、pdf、wps)、压缩包(zip、rar)格式居多一些。

     

    根据具体的业务场景的不同,常规的防御手段一般应用在上传界面少说会做一些限制与检测。比如常见的文件大小、后缀名、文件类型的MIME 、文件头信息、简单的内容识别等等,成功上传之后全面统一修改命名与文件格式、设置一定的访问权限、定义特殊的文件存放路径等等。

    当然并不是所有的防御方案都无懈可击,相反多数场景下都会存在一定的配置风险;文件名的后缀检测可以通过修改成图片的格式上传,后续通过重命名或者文件包含的方式进行执行。如果是黑名单机制就可能存在一些遗漏项前几年比较热门的解析漏洞(基本上主流中间件都出过这个问题)最热门应该还是II6这个版本、0字节截断以及可能存在遗漏的场景。白名单机制的话,相对安全性要高一些。文件头检测本身是以二进制的数据流方式进行检查的,所有绕过方式也比较简单在脚本开头直接添加对应的十六进制字符进行伪造就好,之前发现有很多黑产的webshell文件开头都是GIF8想必也是深谙此道。

    在webshell上传的过程当中对于大多数的流量层的安全设备如FW、IDS、IPS、UTM一类来讲、本质上是和文本识别没有什么区别,都是讲上传的文件审计下来进识别或者直接在HTTP数据流当中简单匹配特征字符。

    高阶一点方案可以做行为识别其实也很简单。估计有很多萌新白帽子不知道的是,常规的业务流量和咱们webshell上传的流量在大量数据统计的层次上来讲本质上是不一样的甚至有点另类。举个简单的例子来说比如咱们现在有一个上传接口主要是用户用来修改自己主页logo的,通过对HTTP协议的解析可以简单的看到这个filename字段多数多数都是图片文件,分辨率、大小、格式都是基本上符合一个特定的基线水平,突然出现了一个jsp的文件上传或者一个超出预期大小的jpg文件这个就是异常,毕竟这种攻击流量是少数人才会做的事情普通用户并不会就”恰到好处”的传了一个这么一个特殊格式的文件上来。

    估计会有不少萌新觉得这样会不会数据量很大?如何定义这些基线?怎么才能认为是异常?其实类似于这样的场景检测技术都已经很成熟了,这些接口层面的数据量本质上很小,现在都是ES、Mongo、Kafaka、集群分析的时代了不是之前关系型数据库的风格,几十T的硬盘价格也很亲民加点存储与运算能力对甲方金主爸爸来说不过是洒洒水而已。数据统计的统计维度,无非也就是加一个索引设计一个检测场景的事情罢了,成熟的机器学习框架不需要太懂算法的具体原理,方法函数调用总会吧 调调参数就完事技术难度也不高。

    不少大佬利用自己发散思维的小脑袋最后传到了服务器的后台之后,依然面临着终端安全软件的检查。不少大佬肯定已经做过免杀了,内容识别不一样管用。但是这个世界有时候就是这么恶意,你传上来了一个脚本文件但是同文件的文档都是图片或者别人都是100K的大小,你就1Kb的大小(一句话木马就是这么短小精悍)突然就有点那种鹤立鸡群的感觉有没有,然后其他脚本大家都齐刷刷转头看着你,就有点类似大学”罗汉班”上计算机网络的时候大家都在后面,突然来了一个漂亮妹子走进教室坐在第一排认真听课的感觉是一样的场景;非我族类,其心必异。分分钟就把你上传到云查、或者交给身不由己却又站在你对立面的”同伙”鉴别。

     

    不少萌新又开始质疑,人能够一眼看出来异常代码能这么轻易的做到吗?怎么说了代码还真的能做到而且效率更高、无遗漏而且更加准确,因为人还是要吃饭睡觉打盹或者划水摸鱼,代码不会的(总不能故意在代码加个sleep()函数吧)。既然都写到了估计很多小伙伴也有了不少对策和其他思路在后续的渗透过程中,怎么说呢方式还真的有不少,这里就不多介绍了留个伏笔吧。

     

    0x3 访问

     

    在所谓的纵深防御的体系下,还能突破层层防御之后还能上传成功并且成功拿到访问路径的黑阔已经算是翘楚了;当然也有可能是另辟蹊径通过控制内网其他主机之后,成功的绕过了边界防御设备的检测成功上垒,到了最关键的一步。一般链接这些一句话木马需要有一个webshell的管理工具常见的就是菜刀、weevly、冰蝎、蚁剑之类的。而这个也是最难的一部分,因为这些工具攻击者知道那些苦逼的安全公司乙方的打杂员工也知道,早早的就对这些工具做了流量识别。

    针对于每一个管理工具流量层面的识别方法都不一样,都针对单一工具的方法当然也有通用工具的检测方法,是的你没有看错是有通用检测方法的。常见的菜刀的流量长什么样估计很多萌新也多知道,特征是十分明显的,如下图所示。关键是菜刀这个玩意可能有后门呀,你辛辛苦苦的拿的站,可能是给被人在打工。

    然后就衍生出了中国菜刀,后面发现这个工具也很容易被识别可玩性并不是很好。接下来就是蚁剑,支持了很多参数的自定义。很多萌新用的时候都是不改默认配置的,HTTP流量当中User-Agent硕大的字符Antisword V2.0 V3.0 也是勇气可嘉。之后还有冰蝎,再没有出3.0的beta版本的时候,链接的过程当中最典型的特征就是秘钥协商,如大家所知冰蝎的流量只要是以AES加密的(感兴趣的小伙伴可以了解一下密码学知识还是挺有用的无论是免杀还是流量分析都有大有裨益),对称加密就一定会有个秘钥用于加密解密传输的数据,所以在建立的链接的时候就存在这么一个交换秘钥的过程,建立行为模型来识别这个过程会是重要的一环。估计开发者也意识到了这一点,新版本已经换了一种方式实现。

     

    是不是加密的内容就无法识别了呢?其实并不是,只是比传统的正则匹配稍微复杂了一丢丢而已。传统的密文一般都不具备可读性,如果前期我识别出了你交换秘钥的过程过程中的流量我解密一下就好了,就和用Burpsuit添加个证书做HTTPS的代理的原理差不多,而且只是AES的标准加密反而更容易一些。

     

    不少萌新会觉得这种思路太荒谬,特征性不是很强就不怕误报。的确如此,特殊内容与格式的特征并不是很强但也不是唯一特征那么再结合一下行为呢?你在访问这个webshell的时候,首先他得是一个脚本文件(格式就那么多)。多数样本访问的路径往往也有不少蛛丝马迹典型的比如上传在一个uploadfile/image的目录下别人访问都是 beautifulme.jpg  uglgyou.png 之类的你一访问就是1.jsp  hackme.php 在结合你的特殊内容格式和你这个从来没有访问过的IP地址和账户,这不是攻击流量谁是攻击流量?

    既然都说到这里了就简单的一些机器学习的基础思路,在这里本质上是将攻击者与普通用户定义成了二个不同的对象,而且是对立面的角色。二种角色在平时的访问路径,页面元素、访问文件、甚至是访问时间、使用的IP方面都存在较大的差异性,简单点说就是需要从多个维度将二者区分清楚,模型上就是一个简单的二分类问题。常见的分类算法比较多、比如SVM(支持向量机)、K-Means、多种树或者森林模型等等,大概长这个样子。

     

    或者这样

     

    现在很多小伙伴都共享了一些蚁剑、冰蝎的魔改方法和思路,稍加专研绕过传统的规则检测场景问题应该不大可能还有点轻松。但是另外一个层面是正常访问用户还是占了绝大多数(定义了所谓的基线),所以少数异常的行为就显得格外明显。算法模型的好处就在于,之前你可能需要人为去调控一些阈值,容易出现很大的偏差而模型依靠大量的真实数据进行运算自动算出来而且还能实时更新,私人觉得这个是大数据+AI对安全检测的一个实用性体现,当然无论是谁也不能保证了100%的检出识别。

     

    0x4 执行

     

    到了最后的执行阶段,如果类似于菜刀是基本上明文流量(base64和明文没有什么差异)检测起来就容易的多,由于格式是比较固定的一个关键字匹配或者正则就可以识别。如果是类似于冰蝎的加密流量,就需要用到一些行为特征结合多维度的方式进行识别。加密流量的HTTP协议部分的request_body和response_body都的是密文吧,这里接触到一个信息熵(热力学中表征物质状态的参量之一其物理意义是体系混乱程度的度量)的概念,可以简单识别传输的内容是否具备可读性。

    试想一下如果一个正常的用户商品管理的界面,大家访问各种脚本文件都是明文登录,突然出现了一个信息熵很高的加密流量,会不会有点此地无银三百两的感觉。在利用webshell执行命令上传文件甚至是添加用户探测内网,对于终端的上来讲一般都是很有问题的。典型的场景如,攻击者通过weblogic上传了一个war后之后获取到权限,执行一个whoami返回的用户权限就是weblogic进程的启动用户的权限。如果是root或者system危害性就很大,如果只是一个www用户危害性会降低不少,这也是为什么要求降权运行数据库、中间件的愿意之一,这个时候比如拉起了一个cmd.exe或者powershell.exe进程添加个wooyun的用户这个行为会很有问题常规的业务怎么会有这种操作。与此同时利用一些工具或者cmd扫描内网做主机的存活探测,为了避免不发现慢速扫描、多协议之类同样风险也很高,关键问题在于:攻击者本身不熟悉内网业务的访问关系很容易导致被发现。举个简单例子,某web服务器与隔壁网段一台域控服务器从未有个通信行为,这次突然来了一个RDP的登录(不管失败或者成功)不是很突然么?未记录在案敏感资产的访问从来都很有有问题。

     

    0x5 攻防对抗

     

    安全攻防是一件很专业的事情,安全不是夸夸其谈也非纸上谈兵更不是未经实践的“想当然”;攻防的本质在于人与人之对抗,对抗的是知识技能储备、时间、精力等多个维度的全面竞赛;举个简单例子,攻击者绕过上传机制把脚本传到对应的服务器,现在链接担心动静太大发现,不然就凌晨12点等运维人员睡觉再搞事情;或者就多找几台VPS服务器用WVS进行各种漏洞尝试攻击,成不成功都没有关系被发现也没有关系主要就是分散对方的注意力,间隙时间里面再去访问这个webshell执行命令现实版的暗度陈仓的感觉有没有。

     

    攻防技术日新月异变化的很快从之前的手工注入、穿山甲、啊D到现在的sqlmap技术门槛看似乎是越来越低,伴随着的是很多甲方自己的技术能力和安全意识也提升了很多,现在很多应用框架本身也针对常见的web安全做了很多防护,再也不是那个一扫各种漏洞一大堆的时代了。同样的攻击技术的提升也一样很快,从之前的菜刀到现在的冰蝎、蚁剑的各种自定义魔改到一定程度之后基本上都做到无特征,依靠特征检测的路可能就越来越窄;如果真的做到和正常的业务流量上能保持到一致就是润物细无声了,对很多安全公司和甲方来说反而更加有紧迫感。

    个人觉得这也是攻防技术演进的一个方向,越来越多的正常流量会趋向于正常的业务流量。就拿隧道通信来说,DNS隧道、HTTP隧道特征还是很容易识别,如果RDP隧道、SSH呢?自己写一个后门很容易被杀毒软件查杀,那利用很多操作系统自带的定时任务、WMI、Powershell无文件留后门杀毒软件也敢查杀么?同样的对于很多安全公司和甲方来说,后续在应对此类攻击的时候需要更多创新性的思路去发现与识别。

     

    0x6 总结

    为了水篇文章赚点陪妹子(虽然还没有)吃饭的钱足足写了6000+字真的是太不难了,结合自己的一些打杂经验简单分享了一下一些做安全的思路,不足之处或错误之处欢迎各位大佬指出斧正;当然能带我飞就更好了,我可以给大佬端茶倒水。

     

    展开全文
  • 我们的心理模型根据他们的“相似性”概念将NLP对抗性攻击分为两类: Adversarial examples in NLP using two different ideas of textual similarity: visual similarity and semantic similarity. [Image by ...
  • 导读:简而言之,机器学习是一种实现人工智能的方法,深度学习是一种实现机器学习的技术,而本文的主角——生成对抗网络则是深度学习中的一种分类。作者:史丹青来源:大数据DT(ID:hzdashu...
  • 熵增定律,懂得对抗

    2020-09-01 14:22:41
    02对抗熵增的人生底层逻辑 什么是“耗散结构”? 1、开放性 1)用“成长型思维”替代“固定型思维” 2)用“流量思维”代替“存量思维” 3)用“终身学习”代替“临时学习”,用“终身探索”代替“不再探索” ...
  • 对抗生成网络(Generative Adversarial Net)

    万次阅读 多人点赞 2016-11-13 19:59:45
    心理上,我依然故我般的做那个简单的技术boy,生活态度偏理想化但可以直面现实…… 突然想到这是一片技术博客,还是不多说自己的事情了,说一说甚嚣尘上的对抗网络吧。 引入 Discriminative Model的繁荣发展 最近,...
  • 生成对抗网络

    2020-08-18 19:05:16
    文章目录1 生成对抗网络初识2 生成对抗网络算法2.1 判别网络2.2 生成网路2.3 训练欢迎关注微信公众号:`二进制人工智能` 1 生成对抗网络初识 让我们先用一个小例子来认识一下生成对抗网络。首先我们来认识一下生成...
  • 对抗样本

    2018-11-03 10:44:10
    设想用GoogleAPI得到对飞机的分类结果是99.9%飞机,0.01%的船,那么攻击者就知道,这个飞机的图片比较容易被误分为船,相当于知道了梯度的方向,只需要在自己的模型上往船的方向生成对抗样本就行了。把分类结果改成...
  • 人到中年,尤其是技术人,内心满是焦虑和孤独。对抗孤独的方法,不是无效社交,而是同侪交流。事实上,一个技术人,从专家到管理者,从管理者跨越到领导者,需要跨越的还包括:1、技...
  • 本篇文章是伍冬睿教授及其领导的研究团队成员在生理计算中的对抗攻击与防御方面的综述。本文系统性综述了生理计算主要研究领域、不同类型的对抗攻击、其在生理计算上的应用以及相应的防御措施,从而填补...
  • 自己的生活负责,意味着自己现在是在经营一个独立的小单位,这个单位的盈亏成败都由自己的言行来控制,由自己的意识来全权决定。自己不仅要经受住过往自我放逐带来的恶果,更要在这一团乱麻的生活中开辟出一个具有...
  • 可解释的对抗训练网络:Interpreting Adversarially Trained Convolutional Neural Networks-ICML 2019 前言 最近在考虑做对抗样本可解释性方面的研究,之前没有接触过。今天要分享的这篇文章发表在ICML 2019上,我...
  • 人工智能 5 对抗搜索

    2021-02-01 09:51:43
    经济学、政治学、心理学、逻辑、计算机科学、以及生物学 行为关系与决策科学,包括人类与非人类(如计算机等) 博弈是AI研究的好材料 机器(玩家)需要“类人”的智能,要求在有限的时间内进行决策 博弈的特征...
  • 如何对抗不良情绪

    2020-06-23 22:02:58
    同样也有想要保持承诺和一致、厌恶失去的心理 那么问题来了,如何克服这样的不良情绪呢? 如何对抗不良情绪 首先我们确定如何获得"快乐",人可以说是一台精密的仪器;一般能让人快乐的有两种多巴胺和内啡肽,下面我...
  • 像许多追随AI发展的人一样,我无法忽略生成建模的最新进展,尤其是图像生成中生成对抗网络(GAN)的巨大成功。看看下面这些样本:它们与真实照片几乎没有区别! 从2014年到2018年,面部生成的进展也非常显着。 这些...
  • 近日,杨强教授在[范式大学]内部课程中,与大家分享了他在 “生成式对抗网络模型“ 和迁移学习等领域的独特见解和最新思考。在此特别感谢杨教授的博士生张颖华同学的帮助。以下内容根据杨强教授演讲编写,略微有所...
  • 战略特征通过将他人的结果作为该情况的附加属性,使心理决策变得更加复杂; 它还拓宽了解决潜在协调与合作问题的领域。 从进化的角度来看,战略情境中的行为处于竞争优势。 这篇论文表明,即使在与自然的博弈中,...
  • 了解生成对抗网络

    2021-03-29 15:14:16
    目录是什么对抗第一阶段对抗第二阶段对抗第n阶段 深度学习使得机器学习有了人类的感知能力,但是具有感知能力是远远不够的,还有有创造力,使得机器能够谱曲,作画,创作艺术作品等。 Gan发明者:Ian GoodFellow Gan...
  • 阿里彭蕾:CEO如何对抗孤独感? 彭蕾 创业邦 昨天 邦哥推荐: 创业者常常坦言会面对孤独,公司的事情怕家里人担心,尽可能不跟家里去说。家里的事情不能带回公司,因为所有跟你一起往前走的伙伴都有生活和工作之间...
  • 这意味着攻击者可以训练自己的模型,产生对抗模型来对抗目标模型,然后将这些对抗样本部署到他们不能访问的模型中。 7. 神话:对抗样本可以很容易地用标准正则化技术解决。 事实:我们已经测试了几种传统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,918
精华内容 3,967
关键字:

对抗自己的内心