对抗机器学习:Generating Adversarial Malware Examples for Black-box Attacks Based on GAN

论文url

https://arxiv.org/pdf/1702.05983.pdf

@article{hu2017generating,
title={Generating adversarial malware examples for black-box attacks based on GAN},
author={Hu, Weiwei and Tan, Ying},
journal={arXiv preprint arXiv:1702.05983},
year={2017}
}

论文核心的motivation

之前的模型都是基于梯度的,这个是实际情况中不好。如果能够基于黑盒,只需要知道用了什么特征,而不需要知道模型是什么就可以。而且如果能够把那些常规的机器学习模型,比如随机森林,决策树,攻击成功就好了。

怎么知道究竟使用了什么特征呢? 这里特征是很粗粒度的。作者提出可以设计一系列的待测特征去测试目标分类器。比如恶意程序检测,可能会使用API的特征,那么把程序的导入导出表修改一下,然后拿去分类器分类,如果分类结果前后有差异,说明使用了API特征。

作者的方法

作者提出所谓的MalGAN模型:
在这里插入图片描述
MalGAN由三部分组成,第一部分是一个生成器,生成器接收恶意样本 m m m 和噪声 z z z 作为输入,输出一个特征向量 o o o, o o o m m m是相同维度的。 m m m 是API的 o n e − h o t one-hot onehot 向量。考虑到实际应用中,为了保持程序的可运行,只能添加往导入、导出表添加新的API名称,而不能删除,因为删除后程序就很有可能因为找不到API而跑不动了。于是取最后的输出为 G θ g ( m , z ) = m a x ( o , m ) G_{\theta g}(m,z)=max(o,m) Gθg(m,z)=max(o,m) 。对于 m m m 中本来为1的量,不会受影响,而 m m m 中为0的量就去生成器的输出,在梯度反向传播的时候只有来自 o o o 的那些分量才能产生梯度,这种方法很巧妙加上了这种阅读!!

Black-box Detector是被攻击的目标分类器模型,该模型接收输入向量,然后给这个输入向量进行分量,
无需detector输出概率分布,只需要给出一个label即可。攻击者只能把它当做Oracle来使用,而不能取里面的模型参数啥的。Black-box可能是个随机森林,SVM或者神经网络。

Substistute Detector是一个代理分类模型 D θ d ( x ) D_{\theta_d} (x) Dθd(x),它是一个神经网络,它的作用是去拟合那个black-box detector,然后给generator提供梯度信息。既然black-box detector获取不到梯度,那么就只能自己整个代理模型去拟合整个black-box。从导师学习的角度来看,black-box就是一个导师,然后substitute是个学生模型,导师把自己的分类能力教给学生。

我们看到,substistute和generator是使用GAN的交替训练方法训练的。而不是先整体求一个代理模型。

训练方法

为了训练MalGAN,攻击者首先得收集恶意样本库和良性样本库。
代理模型的损失函数为:
在这里插入图片描述
B B B e n i g n BB_{Benign} BBBenign 集合是那些被Black-box detector识别为 B e n i g n Benign Benign的样本库。而 B B M a l w a r e BB_{Malware} BBMalware 是被目标模型识别为恶意的样本集。
生成器的损失函数为:
在这里插入图片描述
整个训练流程:
在这里插入图片描述

实验效果

数据集: 180,000个程序的API 特征向量,这些特征向量是160维的one-hot向量。某个维度的值为1,说明这个样本需要调用这个维度对应的AP.
然后作者还使用不同数据集的划分方法,第一种方法是Black box的训练和MalGAN的训练集一样。第二种方法是Black box和Mal GAN的训练不相交。

Black box detector:作者先用 RF,LR,DT,SVM,MLP,集成模型在上面提到的数据集的某个子集上训练得到一些black-box detector.

攻击结果

  • Black-box 和MalGan相同的训练集:

在这里插入图片描述
效果很好,居然可以把RF,DT攻击的那么好,让black box detector 对攻击样本的TPR直接下降到1%一下。

  • Black-box和MalGan的训练集不相同

在这里插入图片描述
效果一样很不错!DT和RF的 TPR依然可以降到3%一下!

  • retrain防御
    作者还实验了retrain对malGAN的防御。实验发现,retrain的确特别管用。当black-box的作者收集到足够多的对抗样本后,对black-box模型重新训练一下就能100%的把那些对抗样本识别出来。
    虽然如此,black-box的训练者是很难收集全足够的对抗样本,因为GAN可以生成很多很多的对抗样本。
    一旦black-box把训练后的模型公开出来以后,MalGan又可以基于这个retrained后的detector自己也重新训练一下。重新训练以后,MalGAN的攻击性能又上去了。而且,MalGan重新训练代价很低,而Black-box收集充足的对抗样本再重新训练却很难。两者的难度不一致,导致retrain在实际应用中作用很有限。

启发

MalGAN 可以视为一种良好的 decision based attack,因为它无需拿到模型参数,也无需拿到模型分类结果的logit或者probability。

不足:

  1. 作者没有测试这种方法需要产生多少次对black-box的query,才能达到一个良好的攻击效果。猜测这个应该会很大,也没有考虑如何去降低这个query的次数。
  2. 作者没有交代MalGAN的训练时长。
  3. 实际情况中,不一定能准确的知道black-box究竟使用了啥具体特征。虽然可以通过测试知道black-box会使用api信息,但是究竟使用什么api?如此测试得到?对于复杂的特征,这是一个很难的工作!
<think>好的,我现在需要帮助用户解决在运行update-initramfs时出现的依赖包错误。用户之前已经遇到了安装virt-manager的问题,现在又遇到了新的错误,显示在处理这些包时出错。这可能意味着用户在安装或更新某些软件时遇到了依赖关系问题。 首先,我需要理解update-initramfs的作用。这个命令用于生成初始内存磁盘映像,通常在更新内核或相关驱动后需要执行。如果生成过程中出现错误,可能会导致系统启动问题。错误信息中列出的包大部分是开发库和构建工具,比如g++、libglib2.0-dev等,这可能暗示用户正在尝试编译某些软件或安装需要这些依赖的应用程序。 接下来,用户列出的错误包包括libc6-dev:amd64、libpcre3-dev:amd64等,这些包可能属于某个软件包的依赖项。可能的错误原因包括软件源配置问题、包损坏、依赖关系冲突,或者下载过程中出现网络问题。 我需要考虑用户可能的操作背景。用户之前尝试安装virt-manager,现在可能在安装其他软件或更新系统时触发了这个问题。用户可能在使用Ubuntu或其他基于Debian的系统,因为使用的是apt命令。 接下来,我需要整理解决步骤。首先,建议用户更新软件源并修复损坏的包。运行sudo apt update和sudo apt upgrade可以确保软件列表是最新的,并修复可能的依赖问题。如果这些命令无法解决问题,可能需要使用sudo apt --fix-broken install来修复损坏的依赖关系。 如果错误依然存在,用户可能需要手动安装列出的包。例如,逐个安装或使用通配符安装所有列出的包。此外,检查软件源是否正确配置也很重要,确保启用了main、universe、multiverse和restricted仓库。 如果用户正在尝试编译软件,可能需要安装build-essential和其他相关开发工具。如果问题仍未解决,可能需要查看具体的错误日志,通常在/var/log/apt/term.log或/var/cache/apt/目录下的日志文件中,以获取更详细的信息。 最后,需要提醒用户注意,处理系统级包时要小心,避免因不当操作导致系统不稳定。如果用户不确定操作步骤,建议备份重要数据,并在必要时寻求更详细的帮助。</think>你在执行`update-initramfs`时遇到的依赖包错误,通常与系统软件包依赖关系损坏或安装不完整有关。以下是排查和解决方案: --- ### **错误原因分析** - **依赖链断裂**:列出的开发包(如`libc6-dev`、`g++-7`、`build-essential`等)可能是某个软件安装/编译的依赖项 - **软件源同步问题**:本地软件包列表过期或未包含这些包的版本 - **部分包安装失败**:网络中断或权限问题导致安装未完成 - **内核模块编译依赖**:生成initramfs时可能需要重新编译内核模块 --- ### **解决方案** #### 1. 更新软件源并修复依赖 ```bash sudo apt update --fix-missing sudo apt upgrade -f sudo apt --fix-broken install ``` #### 2. 手动安装缺失的开发包 ```bash sudo apt install \ libc6-dev:amd64 \ libpcre3-dev:amd64 \ libstdc++-7-dev:amd64 \ libxcb-xfixes0-dev:amd64 \ zlib1g-dev:amd64 \ build-essential \ g++-7 \ libglib2.0-dev:amd64 \ libibus-1.0-dev:amd64 \ libprotobuf-dev:amd64 \ libpulse-dev:amd64 \ libsdl2-dev:amd64 \ libxcb-present-dev:amd64 \ g++ \ libegl1-mesa-dev:amd64 \ libgl1-mesa-dev:amd64 \ libgles2-mesa-dev:amd64 \ libglu1-mesa-dev:amd64 \ libmirclient-dev:amd64 \ libmircommon-dev:amd64 ``` #### 3. 检查软件源配置 确保`/etc/apt/sources.list`包含正确的仓库(建议启用所有主流仓库): ```bash sudo sed -i 's/# deb/deb/g' /etc/apt/sources.list sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse" sudo apt update ``` #### 4. 清除旧内核相关文件(可选) 如果错误与特定内核版本相关(如`initrd.img-5.3.0-28-generic`),可尝试: ```bash sudo apt autoremove --purge linux-image-5.3.0-28-generic sudo update-initramfs -c -k all ``` --- ### **关键注意事项** 1. 如果正在**编译驱动或虚拟机组件**(如VirtualBox/KVM),建议直接安装完整开发环境: ```bash sudo apt install build-essential dkms linux-headers-$(uname -r) ``` 2. 对于`libstdc++-7-dev`等版本化包,需确保系统版本与包版本匹配(Ubuntu 18.04对应gcc-7,20.04对应gcc-9) 3. 如果问题持续,可查看详细错误日志: ```bash journalctl -xe | grep -i "apt\|dpkg" ``` --- ### **典型场景触发** 这种错误常见于以下操作后: - 强制中断`apt`安装进程 - 手动删除过软件包 - 升级系统时网络波动 - 安装第三方驱动(如NVIDIA驱动)需要重新生成initramfs时 建议操作完成后执行: ```bash sudo reboot ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值