和许多人一样,我已经知道机器学习模型本身可能会带来安全风险。最近大量的博文和论文概述了这一内容广泛的主题,列举出了攻击方法和一些漏洞,开始提出了防御的解决方案,并为本文提供了必要的框架。本文的目标是在流行的、传统的预测建模系统(如基于静态数据集训练的线性和树型模型)的上下文中,对潜在的安全漏洞和防御方法进行头脑风暴。虽然我不是安全专家,但我一直在密切关注机器学习的调试、解释、公平性、可解释性和隐私等领域。我认为这些领域中的许多技术可以应用于攻击和防御预测性模型系统。
为了进一步推动安全专家和应用机器学习社区里的实践者(比如我)之间的讨论,这篇文章对通常机构运用的典型机器学习系统提出几个可能的攻击方向,给出可能的防御解决方案,并讨论一些常见的关注点和潜在的最佳实践。
1. 数据投毒攻击
数据投毒是指有人系统地更改训练数据以操纵模型的预测。数据投毒攻击也被称为“诱发性”攻击。为了在数据里投毒,攻击者必须能够访问到部分或全部训练数据。在许多公司,很多不同的员工、顾问和外包人员是能访问到数据的,而且很少有监管。怀有恶意的外部人员也可能通过未授权途径访问部分或全部训练数据并投毒。非常直接的数据投毒攻击可能是更改训练数据集的标签。因此,无论你的模型用于什么商业应用,攻击者都可以从模型的预测中获益 。例如,通过更改标签,以便让模型学会给像攻击者这样的人奖励大额贷款、大额折扣或低保险费。强迫你的模型对攻击者的利益做出错误预测有时被称为模型“完整性”的破坏。攻击者也可能使用数据投毒来让训练出来的模型故意歧视一群人,剥夺他们应得的大额贷款、更大的折扣或更低的保费。这就类似于对模型本身的拒绝服务(DOS)攻击。强制模型进行错误预测以伤害他人有时会被称为破坏模型的“可用性”。虽将看起来通过更改数据集行里面的值来进行数据投毒可能更简单,但数据投毒也可以通过在数据集上添加看似无害或多余的列来进行。然后,更改这些列中的值可以触发模型预测的变化。
现在,让我们讨论对于数据投毒的一些潜在防御和取证的解决方案:
- 差异影响分析:许多银行已经出于公平借贷目的进行了差异影响分析,以确定他们的模型是否以歧视的方式对待不同类型的人。 然而许多其他机构还没有这么做。差异影响分析可能会发现模型预测中的故意歧视。有几种很好的开源工具可用于检测歧视和差异影响分析,例如Aequitas、Themis和AIF360。
- 公平或隐私模型:学习公平表示(LFR)和教师模型全体的隐私聚合(PATE)等模型试图更少关注个人人口统计特征以进行预测。这些模型也不太容易受到歧视性数据投毒攻击。
- 拒绝负面影响(RONI):RONI是一种从训练数据集中删除会降低预测精度的数据行的技术。有关RONI的更多信息,请参见第8节中的第一篇论文”机器学习安全性“。
- 残差分析:在模型预测的残差中寻找奇怪的、明显的模式,特别是对于员工、顾问或外包人员。
- 自我检查:用模型对员工、顾问和外包人员打分,并寻找异常好的预测。
差异影响分析、残差分析和自我检查可以在训练时间进行,也可以作为实时模型监测活动的一部分。
2. 水印攻击
水印是从深度学习安全文献中借用的术语,通常是指将特殊像素放入图像中以触发期望的模型预测结果。完全有可能对客户或交易数据做同样的事情。考虑到这种情况,即员工、顾问、外包人员或恶意外部人员可以接触到进行实时预测的模型的生产代码。这些人可以改变该代码以识别输入变量值的奇怪或不可能的组合从而触发期望的预测结果。与数据投毒一样,水印攻击可用于攻击模型的完整性或可用性。例如,为了攻击模型的完整性,有恶意的内部人员可以将一些代码插入到模型的生产评分代码中,从而让代码可以识别0岁至99岁年龄的组合,以触发对他们自己或其同谋的某种有益的预测结果。为了破坏模型的可用性,攻击者可以在模型的评分代码中插入一个人为的、歧视性的规则,从而不让模型为某一类人产生正面的结果。
对水印攻击的防御和取证方法可能包括:
- 异常检测:自动编码器是一种欺诈检测模型,可以识别奇怪或异于其他输入数据的输入数据,但用的是更复杂的方式。自动编码器有可能捕获用于触发恶意机制的任何水印。
- 数据完整性约束:许多数据库不允许输入变量的奇怪或不切实际的组合,这可能会阻止水印攻击。对实时传入数据流使用数据完整性约束可以有相同的好处。
- 差异影响分析:见第1节。
- 版本控制:就像任何其他任务关键型软件资产一样,生产模型的评分代码应该受到管理和版本控制。
异常检测、数据完整性约束和差异影响分析可以在训练时使用,也可以作为实时模型监控活动的一部分。
3. 由代理模型反推
反推通常是指将未经授权的信息从模型中取出,而不是正常的将信息输入模型中。反推也可以被认为是“探索性逆向工程”攻击的一个例子。如果攻击者可以从模型API或其他端点(网站、应用程序等)获取许多预测,他们就可以训练自己的代理模型。简而言之,就是对你的预测模型进行模拟!攻击者可以预谋利用它们用于生成接收到的预测的输入和接收到的预测本身来训练这个代理模型。根据他们可以接收的预测数量,代理模型可以成为实际模型的精确模拟。一旦代理模型被训练出来,那么攻击者就有一个沙箱,可以利用它假冒(即“模仿”)或对抗样本攻击你的模型的完整性。或者他们就具备了重建敏感的训练数据方面的潜在能力。如ProPublica对COMPAS再犯模型所做的那样,也可以使用一些和你的模型相似的外部数据源来训练代理模型。
想要避免你的模型受到代理模型反推的攻击,请考虑以下方法:
- 授权访问:需要其他身份验证(例如2FA)才能接收预测。
- 节流预测:限制单个用户的大量的快速预测; 同时考虑人为增加预测延迟。
- 白帽代理模型:作为一种白帽黑入练习,试试这个方法:对输入和生产模型的预测之间训练自己的替代模型,并仔细观察:
- 不同类型的白帽代理模型的准确性界限; 试图去发现代理模型能真正被用于学习到模型里不想被发现的知识的程度有多大。
- 可以通过白帽代理模型学习得到的数据趋势,如由线性模型系数所代表的线性趋势。
- 通过分析分配给某些白帽代理决策树节点的个体数量可以学习得到的分段类型或人口统计的分布。
- 可以从白帽代理决策树中学习到的规则。例如,如何可靠地冒充一个能获得有益预测的人。
4. 对抗样本攻击
一个有想法的攻击者理论上可以通过反复试错(即“探索”或“敏感性分析”)、代理模型反推或社会工程来学习如何攻击模型以获得他们期望的预测结果或避免不想要的结果。专门为此目的设计一行数据来进行攻击被称为对抗性样本攻击(有时也被称为“探索完整性”攻击)。攻击者可以使用对抗样本攻击来为自己获得大额的贷款或更低的保险费,甚至避免由于高犯罪风险评分而被拒绝假释。有些人可能把使用对抗样本来避免模型预测的不良后果叫做“遁逃”。
尝试下面列出的技术来防御或确认是否受到对抗样本攻击:
- 激活分析:激活分析需要对预测模型的内部机制进行基准测试,例如神经网络中神经元的平均激活或随机森林中每个叶节点分配样本的比例。 然后将该信息与模型行为在传入的真实数据流上进行比较。正如我的一位同事所说,“这就像看到随机森林中的一个叶子节点对应于0.1%的训练数据,但是在一小时内就达到了75%的生产得分”。这样的模式可能就是对抗性样本攻击的证明。
- 异常检测:见第2节。
- 授权访问:见第3节。
- 基准模型:除了更复杂的模型,可以在对新数据打分时使用高度透明的基准模型。可解释的模型被认为更难以入侵,因为它们的机制是直接透明的。在对新数据进行评分时,将新的时髦的机器学习模型与受信任的透明模型或在受信任数据源和管道上训练的模型进行比较。如果更复杂和不透明的机器学习模型与可解释或可信模型之间的差异太大,则应该回退到保守模型的预测或对数据进行手动处理。同时还应该记录这个事件,因为它可能是一次对抗样本攻击。
- 节流预测:见第3节。
- 白帽敏感性分析:自己使用敏感性分析进行探索性攻击,以了解哪些变量值(或其组合)可能导致预测中出现大幅波动。在对新数据评分时屏蔽这些值或值的组合。你可能会发现开源软件包cleverhans对进行白帽探索性分析很有帮助。
- 白帽代理模型:见第3节。
激活分析和基准模型可以在训练时使用,也可以作为实时模型监控活动的一部分。
5. 模拟
有想法的攻击者可以再次通过反复试验、代理模型反推或社会工程来学习到输入的类型或个人可获得期望的预测结果。然后攻击者可以模拟这种输入或个体以从模型得到他们期望的预测结果。模仿攻击有时也被称为“仿真”攻击。从模型的角度来看类似身份盗窃。就像对抗样本攻击一样,模仿攻击涉及人为地更改给模型的输入值。与对抗样本攻击不同,模仿攻击可以使用可能的随机组合的输入数据值来欺骗模型。模仿意味着使用与另一个建模实体相关的信息(例如定罪、客户、员工、金融交易、患者、产品等)来获取模型与该类型实体关联的预测。例如,攻击者可以了解到模型与大幅折扣相关联的特征(例如住在赌场为大客户准备的房间),然后伪造信息以获得相同的折扣。他们还可以与他人分享他们的策略,这可能会给相关公司带来巨大的损失。
如果你使用的是两阶段模型,请注意“过敏”攻击。 攻击者可能冒充模型第一阶段的正常输入数据行以攻击模型的第二阶段部分。
模仿攻击的防御和取证方法可能包括:
- 激活分析:见第4节。
- 授权访问:见第3节。
- 筛选重复项:降维空间里使用自动编码器、多维缩放(MDS)或类似的降维技术里,在评分时跟踪模型所处理的相似的记录的数量。 如果在某段时间内遇到太多类似的行,请采取纠正措施。
- 安全感知功能:在管道中保留一个功能,例如num_similar_queries。当首次训练或部署模型时它可能并没有用,但可以在评分时(或在未来的模型再训练期间)来使获得模型或管道的安全感知。例如,如果在评分时间内,num_similar_queries的值大于零,则可以发送评分请求给人工监督。将来在重新训练模型时,就可以教它为输入数据行提供高num_similar_queries值的负向预测结果。
激活分析、筛选重复项和安全感知功能可以在训练时使用,也可以作为实时模型监控活动的一部分。
6.普遍性的问题
几种常见的机器学习使用模式也带来了更普遍的安全问题。
黑箱和不必要的复杂性:尽管可解释模型和模型可解释性的最新发展给准确且透明的非线性分类器和回归器提供了使用机会,但许多机器学习工作流仍然是以黑箱模型为核心。在典型的商业机器学习工作流程中,这种黑盒模型通常只是一种不必要的复杂性。其他可能有害的复杂性例子有过于奇特的特征或大量的包依赖。由于至少两个原因,这种复杂性可能会带来下述问题:
1.随着时间的推移,一个专注的、有想法的攻击者可以比你或你的团队更了解你们过于复杂的黑盒模型系统,特别是在今天火爆且流动性大的数据“科学”市场中。为达到这个目的,他们可以使用许多新的模型无关的解释技术和老派的敏感性分析,以及许多其他更常见的黑客工具。 这种知识不平衡可能被用来进行第1到5节中描述的攻击或其他未知类型的攻击。
2.研究和开发环境中的机器学习高度依赖于开源软件的多样化生态系统。其中一些软件包有非常多的贡献者和用户。 有些包针对得非常具体,只对少数研究人员或从业者有用。众所周知,很多软件包都是由杰出的统计学家和机器学习研究人员维护的,他们主要关注的是数学或算法,而不是软件工程,当然也不是安全性。机器学习管道依赖于数十个甚至数百个外部程序包的情况并不罕见,其中任何一个外部程序包都可能被黑客入侵并隐藏攻击代码。
分布式系统和模型:无论好坏,我们都生活在大数据时代。许多机构现在使用分布式数据处理和机器学习系统。在机器学习的场景下,分布式计算为恶意的内部或外部人员提供了大量的攻击机会。数据可能仅在大型分布式数据存储或处理系统的一个或几个工作节点上被投毒。用于加水印的后门可以被编码成大型集成模型的一个模型。 现在从业者必须检查分布在大型计算集群中的数据或模型,而不是只是调试一个简单的数据集或模型。
分布式拒绝服务(DDOS)攻击:如果预测模型服务对机构的任务至关重要,请确保至少考虑过更常规的分布式拒绝服务攻击,即攻击者以惊人的大规模请求来延迟或停止合法用户的预测,从而攻击公开的预测服务。
7.一般性问题的解决办法
一些传统的和较新颖的通用最佳实践可以被用来降低安全风险,并能提高机器学习系统的公平性、可靠性、透明度和可信度。
授权访问和预测限流:标准安全措施(如额外的身份验证和限流)就能非常有效地阻止第1到5节中描述的许多攻击方法。
基准模型:较传统的或可信的可解释建模管道或其他高度透明的预测器可被用作基准模型,可被用来测量新的模型的预测是否被某种方式操控了,比如数据投毒、水印攻击或对抗样本攻击。如果你信任的模型的预测结果与更复杂和不透明模型的预测之间的差异太大,请记下这些案例,并让人类分析师参与分析,或采取其他适当的取证或补救措施。当然,必须采取严格的预防措施以确保基准模型和管道安全,并保持其原始可信状态不变。
可解释,公平或隐私模型:可以同时保证准确性和可解释性的技术已经存在,例如,单调GBM(M-GBM),可缩放贝叶斯规则列表(SBRL),可解释性神经网络(XNN)。这些准确且可解释的模型比传统的机器学习黑盒更容易做记录和调试。较新型的公平和隐私模型(例如,LFR和PATE)也可以基本上不用担心对外可见、可被发现的人口统计特征、通过社交工程设计对抗样本攻击,或被模仿。你是否正在考虑在未来创建新的机器学习工作流程?那么需要考虑把它基于低风险、可解释、隐私或公平的模型。这样的模型更容易调试,并且可能对单个实体特征的变化具有鲁棒性。
对模型安全性做调试:模型调试的新领域专注于发现机器学习模型的机理和预测中的错误,并修复这些错误。调试工具(如代理模型、残差分析和敏感性分析)可用于白帽练习以了解自己的漏洞,或进行取证练习以发现可能已发生或正在发生的任何潜在攻击。
模型文档化和解释技术:模型文档化是一种风险缓解策略,已在银行业被使用了数十年。随着模型所有者团队随时间的变化,它可以保留和传承有关复杂建模系统的知识。 传统上模型文档化被应用于高度透明的线性模型。 但随着强大、准确的解释工具(例如树SHAP和基于派生的神经网络局部特征属性)的出现,已有的黑盒模型工作流至少可以在某种程度上被解释、调试和记录。显然,现在文档应当包括所有的安全目标,包括任何已知、已修复或预期的安全漏洞。
明确的面向安全的模型监控和管理:严肃的从业者都知道,大多数模型都是在训练数据所代表的现实的静态快照上进行训练,并且当实际情况偏离了训练数据代表的过去信息时,他们的预测准确性会实时降低。今天,大多数模型监测旨在发现输入变量分布的这种导致最终精度衰减的漂移。现在的模型监控更应该监控第1到5节中所描述的攻击以及白帽模型调试练习发现的任何其他的潜在威胁。虽然并不总是与安全直接相关,但我认为模型也应该针对不同的影响被实时评估。除了模型文档化,所有建模工件、源代码和相关元数据都需要进行管理、版本化,并像所有的宝贵的商业资产一样被安全审计。
安全感知特征:特征、规则以及预处理或后处理步骤可以被包含在具有安全意识的模型或管道中。例如模型见到的相似的行数,当前行是否代表员工、外包人员或顾问,或者当前行中的值是否与白帽对抗样本攻击中的值相似。在首次训练模型时,这些特征可能有用,也可能没用。但是在对新数据评分时,或者在重新训练模型的未来迭代时,为他们保留出位置可能会在某一天非常有益处。
系统性的异常检测:在整个预测建模系统的运行统计数据(某个时间段内的预测数量,延迟,CPU,内存和磁盘负载,并发用户数量以及其他所有可以获得的内容)上训练基于自动编码器的异常检测元模型,然后密切监视这个元模型的异常情况。异常可能会让你发现预测建模系统里有些事情可能不对,需要进行后续调查或用特定的方法来追查确切问题。
8.参考资料和延伸阅读
许多现在的机器学习学术安全文献侧重于自适应学习、深度学习和加密。但是我不知道从业者会实际是否会做这些事情。 因此,除了最近发表的文章和博客之外,我还找到了20世纪90年代和21世纪初的关于网络入侵、病毒检测、垃圾邮件过滤和相关主题的论文,它们也是有用的资源。 如果想了解更多有关确保机器学习模型安全这一迷人主题的信息,下面是主要的参考资料,包括过去和现在的。我也推荐它们作为延伸阅读。
- Barreno, Marco, et al. “The Security of Machine Learning.” Machine Learning 81.2 (2010): 121-148. URL: https://people.eecs.berkeley.edu/~adj/publications/paper-files/SecML-MLJ2010.pdf
- Kumar, Ajitesh. “Security Attacks: Analysis of Machine Learning Models.” DZone (2018). URL: https://dzone.com/articles/security-attacks-analysis-of-machine-learning-mode
- Lorica, Ben and Loukides, Mike. “You created a machine learning application. Now make sure it’s secure”. O’Reilly Ideas (2019). URL: https://www.oreilly.com/ideas/you-created-a-machine-learning-application-now-make-sure-its-secure
- Papernot, Nicolas. “A Marauder’s Map of Security and Privacy in Machine Learning: An overview of current and future research directions for making machine learning secure and private. ” Proceedings of the 11th ACM Workshop on Artificial Intelligence and Security. ACM (2018). URL: https://arxiv.org/pdf/1811.01134.pdf
结论
我非常关心机器学习的科学和实践。我现在担心机器学习黑客的威胁以及日益增加的对侵犯隐私和算法歧视的担忧可能会带来对机器学习和AI日渐增多的公众和政治怀疑。在不久的将来,我们都应该留意人工智能的冬天。安全漏洞、隐私侵犯和算法歧视一起可能导致机器学习研究的资金减少或对该领域的严格过度监管。让我们继续讨论和解决这些重要问题,以预先进行危机预防,而不是被动低进行反应性回应。
致谢
感谢Doug Deloy、Dmitry Larko、Tom Kraljevic和Prashant Shuklabaidya的深刻见解和建议。