> For the complete documentation index, see [llms.txt](https://elwood.gitbook.io/ai-for-cybersecurity/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elwood.gitbook.io/ai-for-cybersecurity/1.-yin-yan.md).

# 1. 引言

\
\#  1.1 为什么写“AI用于网络安全”用例手册？
---------------------------

关于我们为什么有动力编写“AI用于网络安全”用例手册，我们有三个主要原因。首先，深度学习（DL）和强化学习（RL）在解决网络安全挑战方面的应用逐渐增多。这一趋势在以下四个观察中得到了很好的体现。

观察1：一些关键的网络安全问题解决过程（例如逆向工程）仍然需要专业人员/工程师大量的手动工作。为了逆向工程恶意软件代码，工程师经常会使用许多工具，其中一些最重要的工具如下。行业有很大的动力使用AI来减少涉及的手动工作。

* 反汇编器（例如IDA Pro）：反汇编器将二进制代码作为输入并生成汇编代码。
* 反编译器也可用于将二进制代码转换为本机代码，尽管并非适用于所有架构。
* 调试器（例如GDB）：逆向工程师使用调试器跟踪程序的执行，以深入了解程序正在做什么。调试器还允许在程序运行时控制程序的某些方面（例如内存中的值）。
* PE查看器（例如PE Explorer）：PE（Windows可执行文件格式）查看器从可执行文件中提取重要信息（例如依赖项）。

观察2：相当多的重要的安全驱动的分类任务（例如恶意软件分类，（会话级）流量分类）仍然无法准确进行。行业有很大的动力使用AI来进一步提高准确性。

观察3：AI可用于执行网络安全操作。在给定各种数据源的情况下（例如威胁的迹象，入侵检测系统警报，网络流量，事件日志，威胁情报），网络安全操作旨在回答四个问题：发生了什么？影响是什么？为什么会发生？我应该怎么办？网络安全操作的目标是让企业系统在已知和未知的网络攻击存在的情况下实现可接受的业务连续性。网络安全操作本质上是数据驱动的。

企业系统（例如网络、平台、应用程序、文件和数据库）依赖于安全团队，从少数安全分析师到大规模网络安全操作中心不等，来防御和应对严重的网络威胁。尽管安全团队一直在努力应对此类威胁，但许多企业仍然遭受由攻击和入侵引起的重大数据泄露和损失（例如业务连续性损失）。SolarWinds APT（高级持续性威胁）活动和Colonial Pipeline Ransomware Attack只是最近的两个例子，说明了企业网络安全操作的非常有限的能力。今天的网络安全操作存在一些限制，包括以下方面：（a）速度慢：人类认知在处理大量网络数据时存在瓶颈；（b）看不到全局图景：独立的组织网络操作流程是有害的；（c）心态：对“什么是可信的”（例如在防御SolarWinds APT中使用的心态）的不切实际看法是有害的；（d）人力资源：初级分析员的表现通常远远不如专家。

随着深度学习的兴起，人工智能技术为安全团队解决面临的挑战提供了令人兴奋的新机会（例如准确检测和预测网络威胁，提高灵活性，降低成本，提高人工分析师的工作绩效，并提高自动化水平）。例如，（a）黑莓的端点检测与响应解决方案框架由Cylance AI提供支持，这是网络安全的首批机器学习（ML）模型之一。 （b）Splunk安全分析师每天都在训练各种深度神经网络（DNN）以服务各种目的。

观察4。即使一些已经非常成功的工具也可能会从深度学习和强化学习中获益颇丰。例如，虽然模糊测试工具如今是行业中的标准安全测试工具，但它们的效率仍然是一个问题，行业有很大的动力使用人工智能来进一步提高模糊测试的效率。

我们编写手册的第二个原因是，现有的调研论文对工程师、安全分析师和学习“网络安全的人工智能”课程的学生的实用性有限。部分原因是由于上述观察，越来越多的调研论文（例如\[3, 14]）被发表，总结了应用深度学习和强化学习解决网络安全挑战的新研究进展。尽管这些调研论文系统地总结了关于为什么深度学习和强化学习可以有效解决特定网络安全挑战的新理解（和知识），但它们没有提供如何将深度学习和强化学习应用于解决特定网络安全问题的实际介绍。因此，这些调研论文没有提供实际的学习机会，研究人员编写的调研论文与工程师、分析师和学生的实际学习/培训需求之间仍然存在巨大差距。

第三个原因是，对于工程师、分析师和学生来说，一本更有用的书应该包括以下信息：

* 这本书应该为初学者提供“快速入门”式的学习体验。所谓的“快速入门”是指初学者不需要有任何将深度学习（DL）和强化学习（RL）应用于解决安全问题的经验。
* 这本书应该为有经验的工程师和安全分析师提供一个用例的参考书。与从头到尾阅读书籍不同，这本书旨在供查阅有关特定事项的信息（例如用例、代码片段）。
* 与提供对一般原则的冗长讨论不同，每一章仅描述特定的安全问题是如何解决的，即每一章只关注一个用例。每个用例都应以直观的方式呈现，以便读者可以轻松找到他们最感兴趣的内容，例如代码片段和对训练数据样本逐字段的呈现。
* 技术细节应该是自包含的：无需到其他地方获取额外的技术细节。
* 用例应该涵盖整个机器学习流程，以便工程师、分析师或学生的学习体验能够最贴近实际情况。通过实践学习：应向读者提供数据集和源代码片段，以便学习体验能够像读者期望的那样具有实际操作性。

## 1.2 这些用例旨在通过一个统一的深度学习（DL）流程解决各种网络安全挑战

<figure><img src="https://1548008957-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUReZwKMJ7M2HlIY5SWA5%2Fuploads%2FXCVJOVswfUdLJ7KjNIWC%2Fimage.png?alt=media&amp;token=6aabbd72-4245-4ba2-9458-d3171b016831" alt=""><figcaption><p>图1.1 一个统一的深度学习流程可以用来解决各种网络安全挑战</p></figcaption></figure>

尽管针对不同网络安全问题的基于机器学习的问题解决程序在某些方面通常是不同的，我们提倡“以系统化的方式应用深度学习”，并认为在网络安全行业中“机器学习流程标准化”是一件好事。我们观察到，在将深度学习和强化学习应用于解决网络安全挑战时，通过机器学习流程的标准化，行业可以受益良多。

由于本书中几乎所有的用例都是应用深度学习来解决网络安全问题，因此我们在这里综合了一个统一的深度学习流程，如图1.1所示。DL流程的主要步骤和特征如下：

* DL流程由两组循环或非循环的工作流组成。A组工作流生成DL模型：它们以原始数据为输入，生成可部署在生产系统中的模型。相反，B组工作流消耗DL模型：它们以（新到达的）原始数据为输入，并输出分类或预测结果。模型部署（例如，如何部署新生成的模型）位于A组和B组的交叉点。根据一些技术因素（例如数据注释成本是否高）或业务因素（例如是否需要增量训练），不同的工作流实例通常在不同的用例中观察到。
* 给定原始数据库，A组工作流的第一步是使用标签注释每个原始数据单元。如果注释成本高（例如需要大量手动工作），将进行主动学习\[54]以正确抽样数据单元的子集。如\[54]所述，主动学习的主要问题包括不确定性抽样、多样性抽样、将不确定性抽样与多样性抽样结合以及主动迁移学习。数据注释步骤将生成训练集，这是一组带标签的原始数据单元。请注意，训练集应尽可能平衡。
* 由于原始数据通常不能直接用于训练DL模型，A组工作流的数据处理步骤将每个训练集成员转换为训练数据样本。特征提取和数据结构设计是这一步骤中的两个主要挑战。当预训练模型适用于解决相应的网络安全问题时，模型训练步骤将成为转移学习步骤，在该步骤中，用于解决网络安全问题的学习任务将被视为下游任务。
* 当没有预训练模型适用于解决网络安全问题时，模型训练步骤将首先使用初始集合的训练数据样本从头开始训练模型。这个子步骤称为批量训练。当新的数据样本到达时，通常会进行增量训练，使用新的数据样本增强现有模型（例如，使其更准确），但不再从头开始。
* 在模型训练步骤中，超参数调整和模型架构设计是要解决的两个主要挑战。
* 由于模型训练的计算环境通常与部署模型的环境非常不同，模型部署本身涉及几个挑战和问题，包括如何进行在线测试、如何压缩DNN模型、如何使用适当的硬件加速、如何管理模型执行期间调用的库之间的依赖关系、如何审计DNN站点以及如何可靠地升级DNN站点。
* B组工作流非常直观。例如，当需要对新到达的原始数据单元进行分类时，该单元首先将被发送到数据处理组件，该组件进行与上述相同类型的数据处理。然后将相应的数据样本作为输入馈入已部署的模型。
* 循环工作流，虽然不总是必需的，但在某些情况下可能是有帮助的。例如，当审查已审核的（已部署模型的）分类/预测结果时，可能会识别出假阳性和假阴性，并且不奇怪这些数据样本可能使增量学习更为有效。因此，行业有动力将相应的原始数据单元添加到训练集中。结果形成了一个循环工作流。
* 由于DL流程专门用于解决网络安全问题，它具有一些领域特定的特征。例如，在A组工作流的数据处理步骤中解决的数据结构设计挑战通常与深度领域知识相关，只有网络安全专家才会具备。关于“哪种数据结构最适合表示原始数据”的见解通常很难自动获取或学习。

## 1.3 如何正确使用本手册？

工程师、安全分析师和学生可以使用本手册来获得如何将深度学习（DL）和强化学习（RL）应用于解决特定网络安全问题的实际介绍。通过手册提供的代码片段和数据集链接，读者可以在用例级别实现“学以致用”。

特别是，工程师、安全分析师和学生可以以多种不同方式使用本手册来满足各种需求：

1. 读者可以将本书视为展示人工智能如何解决特定网络安全问题的用例集。当读者打算解决新的网络安全问题时，他或她可以从本书中解决类似问题的用例开始。
2. 由于它是一本手册，读者可以直接导航到书中的特定用例，而不必担心其前面的内容。读者无需按照书中内容的呈现顺序进行阅读。每个用例都为读者提供独立的实际学习体验。
3. 在阅读本书的某一章节后，很明智的做法通常是下载相应的数据集和源代码，并快速训练一个人工智能模型。本书旨在为读者更轻松地实现“学以致用”。
4. 读者可以直接搜索特定类型的代码片段。通过这种方式，读者可以将本书视为一个代码片段的索引库。
5. 读者可以直接搜索特定类型网络安全数据中的某个字段。通过这种方式，读者可以将本书视为网络安全数据字段的“字典”。

需要注意的是，本书不是教科书，因此可能不应该被视为教科书。本书假定读者已经了解为什么可以将深度学习和强化学习应用于有效解决特定网络安全挑战的基本概念和原则。

读者可以使用本书来获得网络安全领域实际应用人工智能的大局观。本书中的每个用例都说明了解决特定网络安全问题涉及的整个机器学习流程。

## 1.4 本书余下部分的组织

本书的其余部分组织如下：在第2章中，介绍了两个用例，其中人工智能执行了两个特定的逆向工程任务。在第3章中，介绍了一个用例，其中人工智能检测Android恶意软件。在第4章中，介绍了一个用例，其中人工智能检测两组不同顺序数据中的异常事件。在第5章中，介绍了一个用例，其中人工智能检测企业网络中的DNS缓存中毒攻击。在第6章中，介绍了一个用例，其中人工智能进行了PC恶意软件检测。在第7章中，介绍了一个用例，其中人工智能检测二进制代码相似性。在第8章中，介绍了一个用例，其中人工智能进行了恶意软件聚类。
