草庐IT

如何阻止针对AI模型的对抗性攻击

aqniu 2023-07-21 原文

人工智能(AI)技术的进步已对人类社会产生了重大影响,但也引起了研究人员的担忧,因为随着AI技术的深入应用,与之相应的对抗性攻击也变得越来越普遍。这些攻击可能会对AI系统的安全性和可靠性造成威胁,甚至产生破坏性的后果。本文将对AI模型应用中的对抗性攻击及其威胁进行分析,并探讨一些有效的防御方法。

对抗性攻击的类型

对抗性攻击是指利用AI模型中的不足和漏洞,破坏AI模型用来学习的数据,并生成能够欺骗模型的对抗样本。这些样本看起来与正常数据非常相似,但是却能够导致模型产生错误的输出结果。目前,对抗性攻击已经成为了人工智能技术应用领域中一个非常重要的研究方向。

在对抗性攻击中,攻击者会用多种方法生成对抗样本,例如快速梯度符号方法(FGSM)、基于梯度的优化方法(BIM)、投影算法攻击(PGD)等。这些方法都是通过对原始数据进行扰动,从而欺骗AI模型。根据威胁分子了解AI模型的不同方式,我们可以将AI对抗性攻击分为以下两类:

1、白盒攻击

在白盒攻击中,威胁分子已经充分了解AI模型的内部工作原理,知道其规格、训练数据、处理技术和详细参数,能够设计专门针对该模型的对抗性攻击。

白盒攻击的第一步是改变原始训练数据,修改后的数据仍将与原始数据非常相似,但足以导致AI模型生成不准确的结果。在攻击之后,威胁分子还会通过为模型反馈对抗性示例(旨在导致模型出错的失真输入)来评估模型的有效性,并分析输出。结果越不准确,攻击就越成功。

2、黑盒攻击

如果攻击者只能获取AI模型的输入和输出,无法获取其内部结构和参数,就会使用黑盒攻击方法。在这种攻击场景下,攻击者需要使用一些基于元模型或迁移学习的技术来生成对抗性样本。黑盒攻击的第一步是选择AI模型的输入目标。然后,通过为数据添加精心设计的干扰信号来生成恶意输入,这些干扰信号是人眼看不见的,却能导致AI模型功能失灵。模型生成的结果可以帮助攻击者不断修改版本,直到模型会反馈他们希望实现的对抗性结果。

对抗性攻击的手段

恶意攻击者可以使用不同的技术来执行对抗性攻击,主要包括:

1、投毒

攻击者可以操纵(毒化)AI模型的一小部分输入数据,以破坏其训练数据集和准确性。最常见的投毒形式是后门投毒,即使极少一部分训练数据受到影响。在很长时间里,AI模型仍然可以继续给出高度准确的结果,直到它在接触特定的触发器时被“激活”而功能失灵。

2、逃避

这种技术的攻击危害较大,因为它可以通过规避AI的安全系统来避免被发现。大多数AI模型配备了异常检测系统。而逃避技术充分利用了针对这些系统的对抗性实例。对自动驾驶汽车或医疗诊断模型等应用领域,使用逃避攻击带来的不准确结果可能会酿成严重后果。

3、传递

使用这种技术的威胁分子不需要事先了解AI模型的参数。他们使用在过去成功攻陷的模型来发起对抗性攻击。如果一个AI系统被训练用于处理对抗性样本,那么它可能会将正常数据也误分类为对抗性样本。这种情况下,一个已经被攻破的模型可能会成为其他模型的威胁。

4、代理

攻击者也可以使用代理模式来规避AI模型的安全防护系统。通过使用这种技术,威胁分子可以创建与目标模型非常相似的版本,即代理模型。代理模型的结果、参数和行为与被复制的原始模型高度相似。这种攻击多被用于针对原始目标AI模型。

阻止对抗性攻击的方法

解决对抗性攻击问题是非常必要的。研究人员提出了一些技术性方法来提高模型的鲁棒性。同时,也需要加强安全意识和技术防范措施,在实际应用中保障AI系统的安全和可靠性。

1、对抗性训练

对抗性训练是指使用对抗性示例来训练AI模型,提高了模型的稳健性,让模型能够适应各种恶意输入。对抗训练是目前应用最广泛的一种防护方法。在对抗训练中,模型会被迫学习如何处理对抗性样本,从而提高其鲁棒性。但是,对抗训练也存在一些问题,例如需要大量的计算资源和时间,并且可能会导致模型过度拟合等。

2、定期安全审计

通过定期检查AI模型异常检测系统,可以有效识别和过滤对抗性样本。这需要有意为模型馈送对抗性示例,并密切关注模型面对恶意输入时的行为。此外,开展安全审计通常需要额外的检测工具和模块,可能会影响系统效率。

3、数据净化/干扰

这个方法指使用输入验证来识别模型中的恶意输入。当识别恶意软件后,必须立即清除。使用输入验证来识别。同时,也可以在输入数据中添加一些随机噪声或扰动,以增加攻击者生成对抗性样本的难度。

4、模型融合

可以将多个深度学习模型进行融合,以提高整体系统的鲁棒性和安全性。不过在多个AI模型的融合过程中,可能会增加系统的复杂度和计算成本。

5、安全更新

实施高效的安全更新管理和补丁更新也很重要,不是防火墙、反恶意软件程序、入侵检测防御系统,这类多层安全措施有助于阻止攻击者对AI模型应用造成外部干扰。

参考链接:

https://www.makeuseof.com/what-are-adversarial-attacks-ai-models-and-how-to-stop-them/。

有关如何阻止针对AI模型的对抗性攻击的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  4. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  5. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  6. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  7. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  8. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  9. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  10. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

随机推荐