基于数据科学的恶意软件分析
上QQ阅读APP看书,第一时间看更新

前言

如果你是在网络安全领域工作,你很可能比以往更多地使用了数据科学,即使你可能还没有意识到这一点。例如,你的反病毒产品使用数据科学算法来检测恶意软件。你的防火墙供应商可能利用数据科学算法来检测可疑的网络行为。你的安全信息和事件管理(SIEM)软件很可能使用数据科学来识别数据中的可疑趋势。不管是不是明显,整个安全产业正在越来越多地将数据科学应用于安全产品中。

高级IT安全专业人员正在将他们自己定制的机器学习算法集成到他们的工作流程中。例如,在最近的会议报告和新闻文章中,Target百货公司、万事达(Mastercard)和富国银行(Wells Fargo)的安全分析师都讲述了开发定制化的数据科学技术,并将其作为安全工作的一部分。Target百货公司(https://www.rsaconference.com/events/us17/agenda/sessions/6662-applied-machine-learning-defeating-modern-malicious)、万事达(https://blogs.wsj.com/cio/2017/11/15/artificial-intelligence-transforms-hacker-arsenal/)和富国银行(https://blogs.wsj.com/cio/2017/11/16/the-morning-download-first-ai-powered-cyberattacks-are-detected/)。——译者注如果你还没有赶上数据科学的潮流,那么现在就是将数据科学纳入你的安全实践来提升能力的最佳时机。

什么是数据科学

数据科学是一个不断增长的算法工具集合,它可以让我们通过使用统计学、数学和巧妙的统计数据可视化技术来理解和预测数据。虽然有更具体的定义,但一般来说,数据科学有三个组成部分:机器学习、数据挖掘和数据可视化。

在网络安全的场景下,机器学习算法通过学习训练数据来检测新的安全威胁。这些方法已经被证明可以检测出那些能被基于特征的传统检测技术检测出的恶意软件。数据挖掘算法通过搜索安全数据来找出一些有趣的模式(例如,有威胁的攻击者之间的关系),这些模式可能有助于我们辨别针对自身组织的攻击活动。最后,数据可视化技术将枯燥无味的表格数据转换成图像的形式,帮助人们轻松发现有趣和可疑的趋势。我将在本书中深入讨论这三方面的技术内容,并向你展示如何使用它们。

为什么数据科学对安全性至关重要

数据科学对网络安全的未来至关重要,原因有三个:首先,安全总是与数据相关。当我们试图检测网络威胁时,我们就是在对文件、日志、网络数据包和其他结构形式的数据进行分析。传统的网络安全专家不会针对这些数据源,使用数据科学技术来进行检测。相反,他们使用文件哈希值、自定义的检测规则(如特征)和自定义的启发式方法。尽管这些技术有其优点,但是针对每一种类型的攻击,都需要人为参与的技术,这就需要太多的人为工作来跟上不断变化的网络威胁形势。近年来,数据科学技术在提升我们检测网络威胁的能力方面变得至关重要。

其次,数据科学对网络安全很重要,因为互联网上的网络攻击数量急剧增长。我们以地下黑产中的恶意软件增长情况为例。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即可。

现在你已经可以访问本书的代码和数据了,让我们开始吧。