第2章 发球前——红队侦察

0200

在本书上一版中,这一章重点介绍如何使用不同的工具,如Recon-NG、Discover、Spiderfoot、Gitrob、Masscan、Sparta、HTTP屏幕截图、漏洞扫描和Burp Suite等工具。我们使用这些工具从外网或者内网,对被攻击者的基础网络实施侦察或扫描操作。我们将继续这一传统,从红队的角度进入侦察阶段。

红队通常需要开展攻击。您不仅需要时刻准备好攻击基础架构,还需要不断地寻找漏洞。您可以使用各种工具扫描网络环境、查找服务和云配置错误等,完成操作。通过这些操作,您可以收集有关被攻击者基础网络的大量信息,并找到直接的攻击途径。

对于所有的客户,我们要做的第一件事就是设置不同的监控脚本。这些通常只是快速执行的bash脚本,脚本的功能是每天通过电子邮件向我们发送客户网络的变化。当然,在扫描之前,请确保您具有执行扫描的合法授权。

对于通常不是很大的客户端网络,我们设置简单的定时任务来执行外部端口差异化的比较。例如,我们可以在Linux系统中创建一个快速bash脚本,完成这项烦琐的工作(记得替换IP地址范围)。

这是一个非常简单的脚本,功能是每天运行Nmap工具,扫描默认端口,然后使用ndiff工具比较结果,如图2.1所示。获得脚本输出的结果后,通知我们的团队每天发现的新端口。

在本书上一版中,我们讨论了Masscan工具的优点以及它的扫描速度。Masscan的开发人员表示,如果拥有足够的网络带宽,您可以在6 min内完成整个互联网扫描。Masscan工具存在的一个问题是,大范围扫描时可靠性无法保证。Masscan工具对于我们前期的侦察很有帮助,但通常不用于端口差异的比较。

实验

本书中的实验是完全可选的。一些章节中已经介绍了用于执行测试的附加实验或者是您可以拓展的领域。由于这完全是为了学习和发现自己的兴趣点,强烈建议您花些时间更好地使用我们的工具,并在社区中分享工具的使用方法。

0201

图2.1

搭建更详细的网络差异扫描器。

除定期扫描开放端口/服务外,红队还需要监控不同的网站应用程序。我们可以使用两个工具监控网站应用程序的变化。

第一个常用的网页截图工具是HTTPScreenshot。HTTPScreenshot的功能非常强大,它使用Masscan工具快速扫描大型网络,并使用PhantomJS工具记录检测到的任何网站的屏幕截图,如图2.2所示。这是快速获取大型内部或外部网络架构的好方法。

请记住,本书中提到的所有工具都运行在定制的Kali虚拟机中。

0202

图2.2

我推荐的另一个网页截图工具是Eyewitness。Eyewitness是很好的工具,它能够识别Nmap工具输出的XML文件,输出的结果包括截屏网页、RDP服务器和VNC服务器等信息,如图2.3所示。

实验

0203

图2.3

随着越来越多的公司开始使用各种云基础架构,网络中出现了许多新的攻击方式。这通常是由于配置错误以及不了解他们的云基础架构到底面临什么困境造成的。无论是亚马逊EC2、Azure、谷歌云还是其他一些云服务商,都存在此类问题,这个问题已成为全球性的问题。

对于红队来说,面临的难题是如何在不同的云环境中进行搜索。由于许多用户使用动态IP,因此他们的服务器IP地址不仅快速变化,而且也没有在云服务商的固定地址范围列表中。例如,如果您使用AWS云服务(AWS云服务在全球范围内拥有巨大的IP地址范围),那么根据选择的区域,您的服务器可能被设置在/13掩码地址范围内。对于局外人来说,查找和监控这些服务器并不容易。

首先,确定不同云服务商拥有的IP范围,如Amazon、Azure和Google Cloud。

你可以看出这些地址范围很大,手动扫描非常困难。在本章中,我们将介绍如何获取有关这些云系统的信息。

如何找到云服务器?互联网上有大量免费的资源,我们可以基于这些资源对目标进行侦察。我们可以使用Google以及第三方扫描服务等方式。利用这些资源,我们无须主动探测,便能够深入地了解公司,查找服务器、开放服务、旗标和其他详细的信息。目标公司永远不会知道您查询过这类信息。作为红队,下面我们来了解如何利用这些资源。

1.Shodan

Shodan是一项非常棒的服务,它定期扫描互联网,抓取旗标、端口和网络等多种信息。Shodan甚至还搜索漏洞信息,例如“心脏滴血”漏洞。Shodan的一个危险的用途就是查找未设置口令的网络摄像头,查看摄像头的内容。从红队的角度来看,我们希望找到有关被攻击者的信息。

一些基本的搜索查询如下。

我们可以在Shodan上搜索cyberspacekittens。

我注意到Shodan的扫描速度有点慢。它需要一个多月的时间才能扫描完我的服务器信息并放入Shodan数据库。

2.Censys.io

Censys会持续监控互联网上每个可访问的服务器和设备,因此您可以实时搜索和分析它们。您将能够了解自身网络的攻击面,发现新威胁并评估其全面的影响。Censys 极具特色的功能之一是它能从SSL证书中获取信息。通常,红队的主要困难之一是找到被攻击者的服务器在云服务器上的位置。幸运的是,我们可以使用Censys.io来查找这些信息,因为Censys已经解析了这些数据。

Censys.io扫描存在的一个问题是扫描可能需要几天或几周的时间。在这种情况下,需要一天的时间来扫描标题信息。此外,在我的网站上创建SSL证书后,信息显示在Censys.io网站上需要4天的时间。在数据准确性方面,Censys.io非常可靠。

下面,我们扫描目标cyberspacekittens.com,查找有关信息。通过解析服务器的SSL证书,我们能够确定目标服务器是在AWS上托管的,如图2.4所示。

0204

图2.4

还有一个Censys脚本工具,可以通过脚本化过程查询子域名。

我们发现大多数公司几乎不会意识到自己在互联网上暴露了什么内容。特别是随着云服务应用的增加,许多公司并没有正确采取访问权限控制措施。这些公司认为自己的服务器已经受到保护,但是我们发现很多服务是对外开放的。这些服务包括Redis数据库、Jenkin服务器、Tomcat管理和NoSQL数据库等。其中许多服务导致远程代码执行或个人身份信息失窃。

查找这些云服务器时,一种方法是在互联网上以自动方式人工获取SSL证书。我们根据云服务商提供的IP地址范围列表,定期扫描所有这些地址范围并下载SSL证书。通过查看SSL证书,我们可以了解关于一个组织的大量信息。针对网络安全猫公司IP地址的范围开展扫描,我们可以看到证书中的主机名,.int是内部服务器,.dev是研发主机,vpn是VPN服务器等,如图2.5所示。很多时候,您可以获得内部主机名,这些主机可能没有公共IP或内网允许访问的白名单IP地址。

0205

图2.5

为了实现通过扫描获取证书中的主机名,为本书开发了sslScrape工具。该工具利用Masscan快速扫描大型网络。它能够识别端口443上的服务,并提取证书中的主机名,如图2.6所示。

0206

图2.6

开始运行sslScrape。

本书提供了示例和工具框架。但是,这些代码是否需要进一步开发取决于您。我强烈建议您将此代码作为基础,将所有主机名保存到数据库,开发网站前端交互界面,连接可能具有证书的其他端口,例如8443等,甚至可能会挖掘一些漏洞,例如.git/.svn类型漏洞。

在识别IP范围方面,我们通常可以从公共资源中查找公司的信息,例如美洲互联网号码注册管理机构(ARIN)。我们可以查询IP地址空间的注册人员,搜索公司拥有的网络,按组织查找自治系统编号等。如果我们在北美以外的地区寻找,那么可以通过AFRINIC(非洲)、APNIC(亚洲)、LACNIC(拉丁美洲)和RIPE NCC(欧洲)查询。这些机构都是可供公开查询的,在它们的服务器上可以进行检索。

您可以通过许多可用的公共资源,查询任何主机名或正式域名,获取该域的所有者。您在这些地方查询不到子域名的信息。子域名信息存储在目标的DNS服务器上,而不是在某些集中的公共注册系统上。您必须知道如何搜索才能找到有效的子域名。

为什么找到目标服务器子域名如此重要?有以下几个原因。

在本书上一版中我们已经做了一些介绍,下面让我们回顾一下当前使用和新出现的工具,从而能够更好地开展子域名发现。欢迎加入并扫描cyberspacekittens.com域名。

1.发现脚本

发现脚本工具是我很喜欢的一个侦察/发现工具,在本书上一版中已经讨论过。我喜欢使用它的原因是它集成了Kali Linux中的多个侦察工具,并且定期维护。被动域名侦察将使用以下工具:ARIN、dnsrecon、goofile、goog-mail、goohost、theHarvester、Metasploit、URLCrazy、Whois、多个网站和recon-ng等。

Discover脚本的最大优点是它能够搜集所需的信息,并根据这些信息继续搜索。例如,脚本搜索公共PGP存储库,在识别出电子邮件后,通过邮件地址在“Have I Been Pwned”网站继续搜索(使用Recon-NG脚本)。这样我们就可以第一时间知道这些邮件口令是否已经被公开泄露(您也要查询一下自己的邮件口令是否已经泄露)。

2.Knock

接下来,我们希望了解公司使用的所有服务器和域名。虽然子域名不是集中存储,但是我们可以使用工具(如Knock)暴力破解不同类型的子域名,从而可以识别哪些服务器或主机可能遭受攻击。

Knockpy是一个Python工具,通过字典枚举目标域名的子域名。

Knock 是一个很棒的子域名扫描工具,通过字典枚举子域名,并判断是否可以解析。因此,如果您想了解cyberspacekittens.com子域名,那么利用Knock工具获取下面网址的字典,并查看是否存在[subdomain] .cyberspacekittens.com子域名。这里需要注意的是,Knock 的扫描效果取决于您的字典。因此,拥有更好的字典将大大增加发现子域名的可能性。

我最喜欢的子域名字典是由jhaddix生成的。您需要持续搜集子域名来生成字典。您可以在本书虚拟机镜像中找到其他字典,位置是/opt/SecLists。

实验

找到cyberspacekittens.com的所有子域名。

您是否从Discover脚本中发现了各种类型域名的差异?哪些类型的域名将是您“攻击”的首选目标或者可用于鱼叉式网络钓鱼攻击?到实际的网络环境中进行尝试吧。您可以参加一个漏洞悬赏项目,开始搜索有趣的子域名。

3.Sublist3r

前面已经说过,Knock存在的问题是子域名搜索效果与字典直接相关。有些公司设置了非常独特的子域名,这些子域名无法在常用的字典中找到。我们还可以利用搜索引擎。随着网站的信息被抓取,通过分析带有链接的文件,我们就可以获取很多网站的公共资源,这意味着我们可以使用搜索引擎完成这些烦琐的工作。

这就是我们使用Sublist3r之类的工具的原因。请注意,使用Sublist3r这样的工具对应不同的“google dork”搜索查询,这种操作方式看起来像机器人操作。这可能会使您暂时被列入黑名单,并需要在每次请求时填写验证码,从而影响扫描结果。下面运行Sublister。

您是否注意到暴力破解子域名可能不会有任何结果?在漏洞悬赏项目中进行实验,查看暴力破解和使用搜索引擎之间的巨大差异。

4.SubBrute

最后介绍的一个子域名搜索工具是SubBrute。SubBrute是一个社区项目,其目标是创建最快、最准确的子域名枚举工具。SubBrute工具的神奇之处在于它使用开放式解析器作为代理,从而规避DNS查询速率限制。

工具设计采用了一个匿名层,因为 SubBrute 不会将流量直接发送到目标名称服务器。

SubBrute不仅速度极快,而且还具有DNS爬虫特性,能够抓取DNS记录。下面运行SubBrute。

我们还可以拓展SubBrute功能,将其与MassDNS结合使用,从而实现非常高效的DNS解析。

GitHub是一个不可思议的数据宝库。我们进行了大量的渗透测试和红队评估,从而获得了密码、API密钥、旧的源代码和内部主机名/IP地址等。这些信息可用于直接控制目标或者为下一次攻击提供帮助。我们看到的是,许多开发人员要么将代码推送到错误的仓库(将其发送到公共存储库而不是公司的私有存储库),要么不小心推送了敏感材料(如密码),然后尝试将其删除。GitHub 的一个特点是它可以在每次修改或删除代码时进行跟踪。这意味着即使仅一次将敏感代码推送到存储库并且删除了敏感文件,仍可以在代码更改记录中找到敏感代码。只要存储库是公共的,您就可以查看所有这些更改。

我们可以使用GitHub搜索,甚至只使用简单的Google Dork搜索识别特定的主机名/组织名称。

与其搜索以下示例中的cyberspacekittens,不如尝试使用不同的搜索引擎搜索漏洞悬赏项目。

如前所述,当您在GitHub中编辑或删除文件时,所有的操作都被记录下来。幸运的是,在红队中,很多人都忘记了这个功能。因此,我们经常看到有人将敏感信息放入GitHub,删除它,并没有意识到它仍然存在!让我们看看是否能找到一些这样的信息。

Truffle Hog

Truffle Hog工具能够扫描不同的提交历史记录,查找高熵值的密钥,并打印这些内容。它非常适合用来查找密码、口令和密钥等。我们来看一看能否在cyberspacekittens的GitHub 存储库中找到一些“秘密”。

实验

正如我们在图2.7所示的提交历史记录中看到的那样,AWS密钥和SSH密钥已从server/controller/ csk.config中删除。

0207

图2.7

更好的工具是git-all-secrets(但设置起来有点复杂)。git-all-secrets适合用于查找大型组织。您可以指定一个组织,在本地复制代码,然后使用Truffle-hog和repo-supervisor工具进行扫描。您首先需要创建一个GitHub访问令牌,操作过程是创建GitHub并在设置中选择Generate New Token。

运行git-all-secrets。

前面提到过,许多公司云服务的配置不正确,导致出现安全漏洞。常见问题如下。

在开始测试不同AWS容器上的错误配置之前,我们需要先识别它们。下面我们尝试使用几种不同的工具,发现目标AWS基础架构的内容。

1.S3容器枚举

有许多工具可以枚举AWS的S3容器。这些工具通常采用关键字或列表,应用多个排列,然后尝试识别不同的容器。例如,我们可以使用一个名为Slurp的工具来查找有关目标CyberSpaceKittens的信息,如图2.8所示。

0208

图2.8

2.Bucket Finder

另一个工具Bucket Finder不仅会尝试查找不同的容器,而且会从这些容器中下载所有内容进行分析,如图2.9所示。

0209

图2.9

现在我们查明了Cyber Space Kittens的基础架构,并确定了其中一个S3容器。在获取S3容器内容(有的能看到,有的看不到)时,您的第一步是做什么?您可以先在浏览器中输入网址,查看一些信息,如图2.10所示。

0210

图2.10

在开始之前,我们需要创建一个AWS账户,获取访问密钥ID。您可以从亚马逊网站免费获取您的账户。创建账户后,登录AWS,获取您的安全凭证和访问密钥。一旦您获得AWS Access ID和密钥,就可以查询申请的S3容器了。

查询S3容器并下载所有内容。

在查询S3容器之后,接下来要测试的是该容器的写入权限。如果我们具有写访问权限,则可以完全控制容器中的应用程序。我们经常看到,当存储在S3容器中的文件在所有页面上使用时(如果我们可以修改这些文件),我们可以将恶意代码复制到Web应用程序服务器。

写入S3,如图2.11所示。

注意,写权限已从Everyone组中删除。这只是为了演示。

0211

图2.11

3.修改AWS容器中的访问控制权限

在分析AWS安全性时,我们需要检查对象和容器的权限控制。对象是单个文件,容器是逻辑存储单元。如果配置不正确,这两个权限可能会被用户任意修改。

首先,我们查看每个对象,检查是否正确配置了这些权限。

我们看到该文件只能由名为“secure”的用户写入,并未对所有人开放。如果我们具有写访问权限,则可以使用s3api中的put-object函数来修改该文件。

接下来,我们来查看是否可以修改容器。这可以通过以下方式实现,如图2.12所示。

0212

图2.12

同样,在这两种情况下,READ是全局许可的,但只有名为“secure”的账户才具有完全控制或任意写的权限。如果我们访问容器,那么可以使用--grant-full-control来完全控制容器和对象。

4.子域名劫持

子域名劫持是常见的漏洞,近期我们发现很多公司有这个漏洞。如果一家公司使用第三方CMS/内容/云服务商,将子域名指向这些服务商的平台,会发生什么情况?如果该公司忘记配置第三方服务或者忘记注销服务,攻击者可以从第三方服务商接管该子域名。

例如,您注册名为testlab.s3.amazonaws.com的S3 Amazon容器。然后,您的公司的子域名testlab.company.com指向testlab.s3.amazonaws.com。一年后,您不再使用S3容器,并取消了testlab.s3.amazonaws.com注册,但忘记了testlab.company.com的别名记录的重定向配置。现在有人可以访问AWS并重新申请testlab.s3.amazon.com,并在被攻击者的域上拥有有效的S3容器。

tko-subs工具可以检测子域名劫持漏洞。我们可以使用这个工具,检查任何指向CMS服务商(Heroku、GitHub、Shopify、Amazon S3、Amazon CloudFront等)的子域名是否可以被劫持。

运行tko-subs。

如果找到一个未注册的别名记录,那么可以使用tko-subs来接管GitHub页面和Heroku应用程序。否则,我们需要手动完成。以下两个工具也具有域名劫持功能。

社会工程攻击的很大一部分工作是搜索电子邮件地址和员工姓名。在前面的章节中,我们提到了Discover Script,这个工具非常适合搜集电子邮件和员工姓名等数据。我通常首先使用Discover脚本,然后再使用其他工具挖掘数据。每个工具的工作方式略有不同,尽可能多地使用这些工具是非常有帮助的。

获得一些电子邮件后,最好了解目标的电子邮件命名格式。目标是采用姓.名@ cyberspacekitten.com还是初始.姓@ cyberspacekittens.com的命名方式?一旦找出邮件的命名格式,我们就可以使用像LinkedIn这样的工具,找到更多的员工姓名,并尝试识别他们的电子邮件地址。

1.SimplyEmail

我们都知道,鱼叉式网络钓鱼仍然是非常有效的攻击方式。如果我们未发现公司网络的任何漏洞,那么只能“攻击”公司的员工。要构建一个有效的电子邮件地址列表,我们可以使用SimplyEmail工具。这个工具能够输出公司的电子邮件地址格式和有效用户列表。

实验

查找cnn.com的所有电子邮件账户。

这可能需要运行很长时间,因为SimplyEmail工具会检索Bing、Yahoo、Google、Ask Search、PGP Repos和文件等,如图2.13所示。这也可能使您的网络看起来像搜索引擎的机器人,由于SimplyEmail工具会发起非常多的搜索请求,因此可能需要验证码。

0213

图2.13

对您的公司进行这种检测。您是否看到了熟悉的电子邮件地址?这些邮件地址将是后续行动中的攻击目标。

2.过去的泄露事件

获取电子邮件地址的一种方法是持续监控和关注之前的泄露事件。我不想直接提供泄露文件的链接,但我会提供这些事件的名称。

我不知道在哪里放置这些资源,但是我想提供一些其他红队攻击活动的资源。这有助于识别人员、位置、域名信息、社交媒体和图像分析等。

在本章中,我们简要介绍了各种不同的侦察策略和使用的工具。这只是一个开始,因为有太多工作需要手动完成,而且执行要花费大量时时间。您可以进阶到下一阶段,优化这些工具的自动化过程,使侦察变得快速而且高效。