Heartbleed 漏洞是一种网络安全攻击示例,它利用了 OpenSSL 库中的漏洞。简单来说,OpenSSL 库中缺少一个验证步骤,可能允许黑客访问使用该漏洞库的服务器上的敏感信息。作为客户端和服务器之间建立 SSL 连接握手协议的一部分,客户端会发送一条 心跳 消息,然后服务器会将其回显。客户端还需要发送其心跳消息的长度,服务器据此确定需要从内存中返回的字节数。一个虚假的长度值(服务器未验证)可能导致其返回客户端心跳消息存储位置相邻的内存字节。
本仓库演示了如何利用 Heartbleed 漏洞从 Web 服务器中提取会话 Cookie,从而使黑客能够访问网站的安全、访问控制部分。
如果您是一名教授网络安全概念和安全编码的教师,您可以使用此示例让学生亲身体验 Heartbleed 漏洞,并演示获取特权信息是多么容易。
如果您是网络安全课程的学生,或者是一名初露头角的程序员,了解代码中的小错误如何导致严重安全漏洞是很有启发性的。如果您正在课堂上学习 Heartbleed 攻击,您可以通过本演示进一步获得有关这些攻击如何运作以及如何预防此类攻击的实际经验。
本演示使用三个 Docker 容器设计,分别用于服务器、黑客和受害者。服务器容器上托管了一个基于 Python Flask 的简单网站,登录成功后返回一条欢迎消息。服务器容器运行的是存在 Heartbleed 漏洞的未打补丁版本的 OpenSSL 库。黑客和受害者容器都提供到 Ubuntu 机器的 VNC 界面。黑客容器还包含一个 Python 脚本,该脚本利用 Heartbleed 漏洞为心跳消息发送不正确的消息长度,并解析服务器返回的数据以查找会话 Cookie。黑客容器桌面上有一个 HTML 文档,其中提供了操作说明。
运行这组容器的推荐方法是使用 CHEESEHub,这是一个用于网络安全演示的 Web 平台。CHEESEHub 提供了按需编排和运行容器所需的资源。为了将此应用程序配置为在 CHEESEHub 上运行,需要创建一个 应用规范,用于配置要使用的 Docker 镜像、内存和 CPU 需求以及三个容器各自要暴露的端口。此 Heartbleed 演示的 JSON 规范 可在 此处 找到。
CHEESEHub 使用 Kubernetes 来编排其应用程序容器。您也可以在自己的 Kubernetes 安装中运行此应用程序。有关在本地机器上设置最小 Kubernetes 集群的说明,请参阅 Minikube。
在能够在 CHEESEHub 或 Kubernetes 上运行之前,需要为三个应用程序容器构建 Docker 镜像。黑客、受害者和服务器的容器定义分别位于 heartbleed-hacker、heartbleed-victim 和 heartbleed-server 目录中。要构建这些容器,请运行:
cd heartbleed-hacker
docker build -t <您选择的黑客镜像标签> .
cd heartbleed-victim
docker build -t <您选择的受害者镜像标签> .
cd heartbleed-server
docker build -t <您选择的服务器镜像标签> .
构建完 Docker 镜像后,您可以使用 Docker 引擎直接运行这些容器。
docker run -d -p 80 <上述的黑客镜像标签>
docker run -d -p 80 <上述的受害者镜像标签>
docker run -d <上述的服务器镜像标签>
由于黑客和受害者容器的用户交互界面是 VNC 界面,我们将端口 80 暴露出来以便从宿主机访问。由于我们只会从黑客和受害者容器内部访问服务器网站,因此无需映射服务器容器的任何暴露端口。
在浏览器中导航到黑客容器的 URL 后,您将看到一个 Linux 桌面界面。双击桌面上的 Instructions.html 文件,查看此演示的逐步说明。可以通过点击左下角的程序菜单,在黑客和受害者容器上启动新的浏览器或终端窗口。黑客和受害者用于访问服务器托管网站的服务器 IP 地址,可以通过从 CHEESEHub 容器列表页面启动服务器容器上的控制台来获取。
要报告问题或为此应用程序贡献增强功能,请创建一个 GitHub issue。