书籍作者:[美] 约书亚·萨克斯 | ISBN:9787111646525 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:2263 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
每年都有数百万个恶意软件文件被创建,每天都会产生大量与安全相关的数据,安全已经成为一个“大数据”问题。所以,当防范恶意软件时,为什么不像数据科学家那样思考呢?
在本书中,安全数据科学家约书亚·萨克斯和希拉里·桑德斯展示了在构建自己的检测和情报系统时,如何应用机器学习、统计和数据可视化等技术。在概述了静态和动态分析等基础逆向工程概念之后,你将学习如何度量恶意软件样本中的代码相似性,并使用scikit-learn和Keras等机器学习框架构建和训练你自己的检测器。
通过阅读本书,你将学习如何:
通过共享代码分析,识别由相同攻击组织编写的新恶意软件
通过建立自己的机器学习检测系统来捕获0day恶意软件
使用ROC曲线来度量恶意软件检测器的准确性,以帮助你选择解决安全问题的途径
使用数据可视化技术来识别和探讨恶意软件攻击活动、演变趋势和相互关系
使用Python实现基于深度神经网络的检测系统
无论你是一位想要为现有武器库丰富能力的恶意软件分析师,还是一位对攻击检测和威胁情报感兴趣的数据科学家,本书都将帮助你保持领先地位。
约书亚·萨克斯(Joshua Saxe)是专业安全企业Sophos的首席数据科学家,他在Sophos公司负责领导一个安全数据科学研究团队。他还是Sophos公司基于神经网络的恶意软件检测器的主要发明者,它可以保护数以千万计的Sophos客户防范恶意软件。在加入Sophos之前,他花了5年时间来管理美国国防高级研究计划局资助的美国政府安全数据研究项目。
希拉里?桑德斯(Hillary Sanders)是Sophos公司的高级软件工程师和数据科学家,她在为Sophos公司发明和产品化神经网络、机器学习和恶意软件相似性分析安全技术方面发挥了关键作用。在加入Sophos之前,希拉里是Premise数据公司的数据科学家。她经常在Black Hat USA和BSides Las Vegas等安全会议上发表演讲。
本书侧重在将数据科学应用于恶意软件,旨在更全面地展示如何将数据科学技术应用于解决重大的网络安全问题。通过了解恶意软件的数据科学,您将能够更好地将数据科学应用到其他网络安全领域,比如网络攻击、钓鱼邮件或可疑用户行为等检测工作。本书的第1~3章涵盖了理解本书后面讨论恶意软件数据科学技术所必需的基本逆向工程概念。第4章和第5章重点关注恶意软件的关系分析,其中包括查看恶意软件集合之间的相似性和差异性,以识别针对组织的恶意软件攻击活动。第6~9章涵盖了需要了解的关于理解、应用和实现基于机器学习恶意软件检测系统的所有内容。这些章节的内容还为将机器学习应用于其他网络安全场景提供了基础。第10~12章介绍深度学习的内容。本书的目标读者是那些有兴趣学习更多关于如何使用数据科学技术解决计算机安全问题的安全专业人士。
前 言
如果你是在网络安全领域工作,你很可能比以往更多地使用了数据科学,即使你可能还没有意识到这一点。例如,你的反病毒产品使用数据科学算法来检测恶意软件。你的防火墙供应商可能利用数据科学算法来检测可疑的网络行为。你的安全信息和事件管理(SIEM)软件很可能使用数据科学来识别数据中的可疑趋势。不管是不是明显,整个安全产业正在越来越多地将数据科学应用于安全产品中。
高级IT安全专业人员正在将他们自己定制的机器学习算法集成到他们的工作流程中。例如,在最近的会议报告和新闻文章中,Target百货公司、万事达(Mastercard)和富国银行(Wells Fargo)的安全分析师都讲述了开发定制化的数据科学技术,并将其作为安全工作的一部分。如果你还没有赶上数据科学的潮流,那么现在就是将数据科学纳入你的安全实践来提升能力的最佳时机。
什么是数据科学
数据科学是一个不断增长的算法工具集合,它可以让我们通过使用统计学、数学和巧妙的统计数据可视化技术来理解和预测数据。虽然有更具体的定义,但一般来说,数据科学有三个组成部分:机器学习、数据挖掘和数据可视化。
在网络安全的场景下,机器学习算法通过学习训练数据来检测新的安全威胁。这些方法已经被证明可以检测出那些能被基于特征的传统检测技术检测出的恶意软件。数据挖掘算法通过搜索安全数据来找出一些有趣的模式(例如,有威胁的攻击者之间的关系),这些模式可能有助于我们辨别针对自身组织的攻击活动。最后,数据可视化技术将枯燥无味的表格数据转换成图像的形式,帮助人们轻松发现有趣和可疑的趋势。我将在本书中深入讨论这三方面的技术内容,并向你展示如何使用它们。
为什么数据科学对安全性至关重要
数据科学对网络安全的未来至关重要,原因有三个:首先,安全总是与数据相关。当我们试图检测网络威胁时,我们就是在对文件、日志、网络数据包和其他结构形式的数据进行分析。传统的网络安全专家不会针对这些数据源,使用数据科学技术来进行检测。相反,他们使用文件哈希值、自定义的检测规则(如特征)和自定义的启发式方法。尽管这些技术有其优点,但是针对每一种类型的攻击,都需要人为参与的技术,这就需要太多的人为工作来跟上不断变化的网络威胁形势。近年来,数据科学技术在提升我们检测网络威胁的能力方面变得至关重要。
其次,数据科学对网络安全很重要,因为互联网上的网络攻击数量急剧增长。我们以地下黑产中的恶意软件增长情况为例。2008年,在安全社区中所知道的恶意可执行软件大约有100万种。2012年,这个数字达到了1亿。2018年,安全社区已知的恶意可执行软件数量已经超过7亿(https://www.av-test.org/en/statistics/malware/),而且这个数字可能还会继续增长。
由于恶意软件的数量庞大,基于特征的手动检测技术已不再是能检测出所有网络攻击的合理方法。由于数据科学技术使得检测网络攻击的大部分工作自动化,并大大减少了检测这些攻击所需使用的内存,因此随着网络威胁的增长,它们在保护网络和用户方面有着巨大的潜力。
最后,无论是在安全行业的内部还是外部,数据科学是这十年的技术趋势,而且很可能在未来十年仍是如此,因此数据科学对网络安全至关重要。事实上,在任何地方都可能看到数据科学的应用,如个人语音助手(亚马逊Echo、苹果Siri和谷歌Home)、自动驾驶汽车、广告推荐系统、网页搜索引擎、医学图像分析系统和健身跟踪应用程序等。
我们可以预期数据科学驱动的系统会对法律服务、教育和其他领域产生重大影响。由于数据科学已成为整个技术领域的关键推动因素,大学、大公司(谷歌、Facebook、微软和IBM)和政府正在投资数十亿美元来改进数据科学工具。感谢这些投资,使得数据科学工具将更适用于解决攻击检测的难题。
将数据科学应用于恶意软件
本书侧重于将数据科学应用于恶意软件,我们将恶意软件定义成为达成恶意目的而编写的可执行程序,因为恶意软件仍然是威胁发动者在网络中获得攻击立足点的主要手段,并以此实现他们的后续目的。例如,在近年来出现的勒索软件灾难中,攻击者通常向用户发送带有恶意附件的电子邮件,使得勒索软件的可执行文件(恶意软件)被下载到用户的计算机上,然后就对用户的数据进行加密,并要求用户支付赎金来解密数据。尽管一些老练的攻击者有时为逃避恶意软件检测系统的监视而不使用恶意软件,但是在目前的网络攻击中,恶意软件仍然是攻击者主要应用的技术。
本书着眼于网络安全领域中数据科学的特定应用,而不是试图广泛地涵盖整个网络安全的数据科学,旨在更全面地展示如何将数据科学技术应用于解决重大的网络安全问题。通过了解基于数据科学的恶意软件分析,我们能够更好地将数据科学应用到其他网络安全领域,比如检测网络攻击、钓鱼邮件或可疑用户行为等。实际上,你在本书中学到的几乎所有技术都不仅适用于恶意软件检测工作,而且适用于构建一般的数据科学检测和智能系统。
本书的目标读者
本书的目标读者是那些有兴趣学习更多关于如何使用数据科学技术解决计算机安全问题的安全专业人士。如果你不了解计算机安全和数据科学,你可能会意识到自己不得不通过查找专业术语来给自己提供一些相关知识,但是你仍然可以顺利地阅读本书。如果你只对数据科学感兴趣,而对计算机安全不感兴趣,那么这本书可能不适合你。
本书的主要内容
本书的第一部分由三章组成,涵盖了理解本书后面讨论恶意软件数据科学技术所必需的基本逆向工程概念。如果你刚接触恶意软件,请先阅读前三章。如果你是恶意软件逆向工程的老手,那么你可以跳过这些章节。
第1章 包括用于分析恶意软件文件,并发现它们如何在我们的计算机上实现恶意目的的静态分析技术。
第2章 向你简要介绍了x86汇编语言和如何反汇编,以及恶意软件的逆向工程。
第3章 通过讨论动态分析,对本书关于逆向工程的内容部分进行总结,其中包括在可控环境中运行恶意软件来了解其恶意行为。
第4章和第5章重点关注恶意软件的关系分析,其中包括查看恶意软件集合之间的相似性和差异性,以识别针对你组织的恶意软件攻击活动,例如由一个网络犯罪团伙控制的勒索软件活动,或针对你的组织进行的有组织有针对性的攻击活动。这些独立章节非常适合那些不仅对恶意软件检测感兴趣,而且还对提取有价值的威胁情报以追踪谁在攻击其网络感兴趣的读者。如果你对威胁情报不太感兴趣而对数据科学驱动的恶意软件检测技术更感兴趣的话,那么你可以安心地跳过这些章节。
第4章 展示了如何基于共享的属性来分析和可视化恶意软件,例如恶意软件程序都会请求的主机名。
第5章 说明如何识别和可视化恶意软件样本之间的共享代码关系,这可以帮助你识别恶意软件样本集合是否来自一个或者多个犯罪团伙。
接下来的四章涵盖了你需要了解的关于理解、应用和实现基于机器学习的恶意软件检测系统。这些章节的内容还为将机器学习应用于其他网络安全场景提供了基础。
第6章 涵盖对基本机器学习概念的容易理解的、直观的且非数学化的介绍。如果你曾学习过机器学习的相关知识,本章将便于你重温这些内容。
第7章 展示如何使用基本的统计方法来评价机器学习系统的准确性,以便选择最佳方法。
第8章 介绍了可以用来构建自身机器学习系统的开源机器学习工具,并对如何使用这些工具进行了说明。
第9章 介绍如何使用Python来对恶意软件威胁数据进行可视化,从而揭示攻击活动和趋势,以及如何在分析安全数据时将数据可视化集成到你的日常工作流程中。
最后三章介绍了深度学习的内容,涉及更多的数学知识,是机器学习的一个高阶领域。深度学习是网络安全数据科学中的一个热门增长领域,这些章节为你提供了充分的入门知识。
第10章 涵盖了深度学习的基本概念。
第11章 说明了如何使用开源工具在Python中实现基于深度学习的恶意软件检测系统。
第12章 通过分享成为一名数据科学家的不同途径以及可以帮助你在这个领域取得成功的应有素质来对全书进行总结。
附录 描述了本书附带的数据和示例工具实现。
如何使用示例代码和数据
如果一本编程书没有供你使用和扩展的示例代码,那么它就是不完整的。本书每一章都附有示例代码和数据,并在附录中进行了详尽的描述。所有代码都是针对Linux环境中的Python 2.7版本编写的。要访问这些代码和数据,你可以下载一个VirtualBox下的Linux虚拟机,里面已经把程序代码、数据和所需开源工具都设置好并准备就绪,然后你就可以在自己的VirtualBox环境中运行。你可以从http://www.malwaredatascience.com/或华章公司网站(www.hzbook.com)下载本书附带的数据,也可以从https://www.virtualbox.org/wiki/Downloads免费下载VirtualBox软件。这些代码已经在Linux系统中进行了测试,但是如果你希望在Linux VirtualBox虚拟机以外运行的话,同样的代码在MacOS上应该可以正常工作,在Windows机器上应该也可以正常运行。
如果你希望在自己的Linux环境中安装代码和数据,可以从http://www.malwaredata-
science.com/或华章公司网站(www.hzbook.com)下载。你将在可下载的归档文件中找到每个章节的目录,在每章的目录中都包含相应代码和数据的code/与data/目录。这些代码文件对应于每一章的代码清单或代码段,对于手头上需要处理的应用程序来说更有意义。一些代码文件与代码清单里的内容完全相同,而另一些代码文件则进行了轻微的修改,以便你可以更容易地使用参数和其他选项。代码目录附带了pip requirements.txt文件,其中提供了每章代码运行所依赖的开源库。要在你的机器上安装这些库,只需在每一章的code/目录路径中输入pip -r requirements.txt即可。
现在你已经可以访问本书的代码和数据了,让我们开始吧。
目 录
译者序
序
前言
致谢
作者简介
评审专家简介
第1章 恶意软件静态分析基础 1
1.1 微软Windows可移植可执行文件格式 2
1.1.1 PE头 3
1.1.2 可选头 3
1.1.3 节头 3
1.2 使用pef?ile解析PE文件格式 5
1.3 检查恶意软件的图片 7
1.4 检查恶意软件的字符串 8
1.4.1 使用字符串程序 8
1.4.2 分析镜像字符串 8
1.5 小结 10
第2章 基础静态分析进阶:x86反汇编 11
2.1 反汇编方法 11
2.2 x86汇编语言基础 12
2.2.1 CPU寄存器 13
2.2.2 算术指令 14
2.2.3 数据传送指令 15
2.3 使用peffile和capstone反汇编ircbot.exe 19
2.4 限制静态分析的因素 21
2.4.1 加壳 21
2.4.2 资源混淆 22
2.4.3 反汇编技术 22
2.4.4 动态下载数据 22
2.5 小结 23
第3章 动态分析简介 24
3.1 为什么使用动态分析 24
3.2 恶意软件数据科学的动态分析 25
3.3 动态分析的基本工具 25
3.3.1 典型的恶意软件行为 26
3.3.2 在malwr.com上加载文件 26
3.3.3 在malwr.com上分析结果 27
3.4 基本动态分析的局限 32
3.5 小结 32
第4章 利用恶意软件网络识别攻击活动 33
4.1 节点和边 34
4.2 二分网络 35
4.3 恶意软件网络可视化 37
4.3.1 失真问题 37
4.3.2 力导向算法 38
4.4 使用NetworkX构建网络 38
4.5 添加节点和边 39
4.5.1 添加属性 40
4.5.2 将网络保存到磁盘 41
4.6 使用GraphViz实现网络可视化 41
4.6.1 使用参数调整网络 42
4.6.2 GraphViz命令行工具 43
4.6.3 向节点和边添加可视属性 47
4.7 构建恶意软件网络 50
4.8 构建共享图像关系网络 53
4.9 小结 57
第5章 共享代码分析 58
5.1 通过特征提取对样本进行比较 61
5.1.1 特征袋模型如何工作 61
5.1.2 N-gram 62
5.2 使用Jaccard系数量化相似性 63
5.3 使用相似性矩阵评价恶意软件共享代码估计方法 65
5.3.1 基于指令序列的相似性 66
5.3.2 基于字符串的相似性 68
5.3.3 基于导入地址表的相似性 69
5.3.4 基于API动态调用的相似性 70
5.4 构建相似图 71
5.5 扩展相似性比较 76
5.5.1 minhash概述 77
5.5.2 minhash详述 77
5.6 构建持续的恶意软件相似性搜索系统 79
5.7 运行相似性搜索系统 84
5.8 小结 86
第6章 理解基于机器学习的恶意软件检测方法 87
6.1 基于机器学习的检测引擎构建步骤 88
6.1.1 收集训练样本 88
6.1.2 提取特征 89
6.1.3 设计好的特征 90
6.1.4 训练机器学习系统 90
6.1.5 测试机器学习系统 91
6.2 理解特征空间和决策边界 91
6.3 是什么决定了模型的好和坏:过拟合与欠拟合 96
6.4 机器学习算法的主要类型 99
6.4.1 逻辑回归 100
6.4.2 k近邻算法 103
6.4.3 决策树 106
6.4.4 随机森林 112
6.5 小结 114
第7章 评价恶意软件检测系统 115
7.1 四种可能的检测结果 115
7.1.1 检出率和误报率 116
7.1.2 检出率和误报率之间的关系 117
7.1.3 ROC曲线 118
7.2 在评价中考虑基准率 119
7.2.1 基准率如何影响精确度 120
7.2.2 在部署环境中评价精确度 120
7.3 小结 122
第8章 构建基于机器学习的检测器 123
8.1 术语和概念 124
8.2 构建一个基于决策树的检测器雏形 125
8.2.1 训练你的决策树分类器 126
8.2.2 可视化决策树 127
8.2.3 完整的示例代码 129
8.3 使用sklearn构建实际的机器学习检测器 130
8.3.1 实际的特征提取 130
8.3.2 为什么不能使用所有可能的特征 134
8.3.3 使用哈希技巧压缩特征 134
8.4 构建工业级的检测器 138
8.4.1 特征提取 138
8.4.2 训练检测器 139
8.4.3 运行检测器检测新的二进制文件 141
8.4.4 至此我们实现了什么 142
8.5 评价检测器的性能 144
8.5.1 使用ROC曲线评价检测器的功效 144
8.5.2 计算ROC曲线 144
8.5.3 将数据拆分为训练集和测试集 146
8.5.4 计算ROC曲线 147
8.5.5 交叉验证 148
8.6 下一步工作 151
8.7 小结 152
第9章 可视化恶意软件趋势 153
9.1 为什么可视化恶意软件数据很重要 153
9.2 理解我们的恶意软件数据集 155
9.2.1 将数据加载到pandas中 156
9.2.2 使用pandas DataFrame 157
9.2.3 使用条件过滤数据 159
9.3 使用matplotlib可视化数据 160
9.3.1 绘制恶意软件大小和反病毒引擎检测之间的关系 161
9.3.2 绘制勒索软件检出率 162
9.3.3 绘制勒索软件和蠕虫检测率 163
9.4 使用seaborn可视化数据 166
9.4.1 绘制反病毒引擎检出的分布图 167
9.4.2 创建小提琴图 170
9.5 小结 172
第10章 深度学习基础 173
10.1 深度学习的定义 174
10.2 神经网络是如何工作的 175
10.2.1 神经元剖析 175
10.2.2 神经元网络 178
10.2.3 通用近似定理 178
10.2.4 构建自己的神经网络 179
10.2.5 向网络中添加一个新的神经元 182
10.2.6 自动生成特征 184
10.3 训练神经网络 185
10.3.1 利用后向传播优化神经网络 186
10.3.2 路径爆炸 188
10.3.3 梯度消失 189
10.4 神经网络的类型 189
10.4.1 前馈神经网络 189
10.4.2 卷积神经网络 190
10.4.3 自编码神经网络 191
10.4.4 生成式对抗网络 192
10.4.5 循环神经网络 192
10.4.6 残差网络 193
10.5 小结 193
第11章 使用Keras构建神经网络恶意软件检测器 194
11.1 定义模型的架构 195
11.2 编译模型 197
11.3 训练模型 198
11.3.1 提取特征 198
11.3.2 创建数据生成器 199
11.3.3 与验证数据协作 203
11.3.4 保存和加载模型 204
11.4 模型评价 205
11.5 使用回调强化模型训练过程 206
11.5.1 使用内置回调 207
11.5.2 使用自定义回调函数 208
11.6 小结 210
第12章 成为数据科学家 211
12.1 成为安全数据科学家之路 211
12.2 安全数据科学家的一天 212
12.3 高效安全数据科学家的特征 214
12.3.1 开放的心态 214
12.3.2 无穷的好奇心 214
12.3.3 对结果的痴迷 215
12.3.4 对结果的怀疑 215
12.4 未来的工作 215
附录 数据集和工具概述 217