蜜罐简介

原理

蜜罐的原理基于一个简单但强大的概念:诱饵。通过创建一个或多个似乎充满漏洞、容易被入侵的目标,安全研究人员和网络防御者吸引攻击者进入一个受控环境,而这个环境旨在记录攻击者的行为、手段、技术和其他关键信息。这些信息随后被用于分析攻击者的行动模式、提高现有安全措施的有效性,以及预防未来的攻击。

蜜罐的概念可以追溯到1990年代初期,当时互联网安全还处于其发展的早期阶段。最初的蜜罐主要用于研究目的,旨在理解攻击者的行为和攻击模式。随着时间的推移,蜜罐技术得到了发展和完善,其应用范围也从研究扩展到了企业和生产环境中。

蜜罐的应用场景广泛,不仅可以帮助安全研究人员收集关于恶意软件和黑客技术的情报,还能为企业提供额外的安全层。通过部署蜜罐,企业能够更加主动地发现和应对安全威胁,增强整体的安全防御能力。

Honeyd

Honeyd是一款开源的蜜罐软件,由Niels Provos于2003年开发,专门设计用来模拟数千个网络主机上的各种网络服务和操作系统。通过Honeyd,安全研究员和网络管理员可以创建复杂的网络拓扑结构,包括各种虚拟设备(如服务器、路由器、交换机等),以便捕获、分析并理解攻击者的行为和攻击策略。Honeyd的灵活性和可配置性使其成为网络安全领域中一个强大的工具,尤其是在研究和教育环境中。

Galah

Galah 以以模仿而闻名的聪明的澳大利亚鹦鹉命名,在其功能上反映了这一特征。与传统的 Web 蜜罐不同,传统的 Web 蜜罐依赖于手动和限制方法来模拟大量 Web 应用程序或漏洞,Galah 采用了一种新颖的方法。这个由 LLM 提供支持的蜜罐通过动态制作与任意 HTTP 请求相关的(有时是愚蠢的)响应(包括 HTTP 标头和正文内容)来模仿各种 Web 应用程序。

部署Honeyd

物理环境

宿主机(Linux)使用虚拟机,测试机(Win10)使用个人电脑

需要注意,Linux的系统最好使用Ubuntu 18.04.6

最新的版本无法编译honeyd

宿主机和测试机的IP地址设置位于同一网段

在宿主机环境中构建蜜罐虚拟机,实验过程中将验证测试机对蜜罐虚拟机的访问

image-20240412130638476

依赖项准备

执行以下指令,安装依赖项

1
2
3
4
5
sudo apt-get install g++ gcc
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libedit-dev
sudo apt-get install make

这些依赖库的功能如下:

  1. g++ gcc用于编译C和C++程序。对于需要从源代码编译的软件,这两个编译器是基本要求,因为它们能将源代码转换成可执行的二进制程序。
  2. flex是一个快速词法分析器生成器。它是UNIX工具lex的一个更加灵活的版本。
  3. bison:Bison是一个兼容YACC(Yet Another Compiler Compiler)的解析器生成器,它提供了一种将语法规则转换成C或C++等编程语言的源代码的方法。
  4. libedit-dev是一个命令行编辑器库,提供类似于readline的功能。开发者可以使用它来实现命令行的自动补全和历史功能。
  5. make是一个非常重要的工具,用于控制编译过程,允许自动化编译和安装程序。

安装函数库

准备好和honeyd配套的函数库安装包,我已将其打包上传到了百度云

安装函数库的步骤如下:

  1. 执行tar -xzvf 安装包名将其解压
  2. 执行cd 安装包目录进入安装包目录
  3. 执行sudo ./configure创建Makefile
  4. 执行sudo make命令开始编译过程
  5. 执行sudo make install将编译好的程序和库文件安装到系统的标准位置

一个示例如下

image-20240408143815604

一个推荐安装顺序如下

  1. libdnet-1.11

  2. libevent-1.4.14b-stable

  3. libpcap-1.9.0
  4. zlib-1.2.11
  5. ARPD

需要注意的是, zlib-1.2.11.tar.xz文件是使用xz压缩算法的tar归档文件,需要使用命令tar -xvf

当安装ARPD库时,直接执行sudo make会出现如下报错

image-20240408150041706

需要在 arpd.c 文件中添加如下代码:

1
#define __FUNCTION__ ""

image-20240408150332488

安装Honeyd

安装honeyd的步骤与前面安装函数库一致,不过在安装过程中可能会遇到很多问题

在执行sudo ./configure前,执行sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/libc.so,成功生成makefile

image-20240408153439690

执行sudo makesudo make install

image-20240408164114077

执行sudo ./honeyd -V测试是否安装成功

出现如下报错

image-20240408164653670

执行sudo ln -s /usr/local/lib/libdnet.1 /usr/lib/libdnet.1,重新测试

image-20240408164758766

出现版本号,说明安装成功

配置Honeyd

在安装Honeyd后,会创建一个/usr/local/share/Honeyd目录

将该目录下的配置样例文件config.sample拷贝一份放在同目录下,并重命名为honeyd.conf,作为配置文件

1
sudo cp /usr/local/share/honeyd/config.sample /usr/local/share/honeyd/honeyd.conf

image-20240408171028570

用vim打开该文件,开始配置参数

我们要参考的模板主要是红框标出来的部分

image-20240411150306992

本次实验配置两个ip,一个模拟Windows系统,另一个模拟linux系统

修改create后的值,给配置模板起一个名字,windows系统的ip就叫做windows

set personality后改为希望蜜罐虚拟出来的系统指纹

set windows default tcp action reset用于关闭所有的TCP端口,仅开放后续服务的端口

image-20240412111547177

在windows虚拟蜜罐上分别开启web和ssh服务,并额外开启一个端口用于在扫描时测试

在linux虚拟蜜罐上开启web、ssh和ftp服务

分别将它们绑定到192.168.58.161192.168.58.162,这里需要选择与虚拟机同网段的IP

测试并分析Honeyd

运行蜜罐

执行arpd 192.168.58.161arpd 192.168.58.162启动Arpd侦听工具,用于应答宿主机的MAC地址

开启两个终端,分别执行下面两条指令,开启Windows服务器虚拟蜜罐和linux虚拟蜜罐

1
2
honeyd -d -f /usr/local/share/honeyd/honeyd.conf 192.168.58.161
honeyd -d -f /usr/local/share/honeyd/honeyd.conf 192.168.58.162

image-20240412131147652

信息收集

在测试机上使用SuperScan3.0软件

IP范围选择网段中的所有IP,端口选择列表中的所有端口,开始扫描

image-20240412131440238

点击开始扫描,可以发现该软件会同步进行对IP和端口的扫描

image-20240412131809385

最终一共扫描到四台主机,分别是测试机、宿主机和两台蜜罐

image-20240412134247831

查看扫描出来的端口,与之前的配置一致

image-20240412134322742

测试Web和FTP服务

找到web.sh脚本

修改如下默认页面内容,模拟XSS漏洞

image-20240412110049509

新的页面内容如下,页面中有一个留言板,提交的内容会被直接作为HTML插入到页面中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
P3P: CP='ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI'
Content-Location: http://cpmsftwbw27/default.htm
Date: Thu, 04 Apr 2002 06:42:18 GMT
Content-Type: text/html
Accept-Ranges: bytes
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>简单留言板</title>
</head>
<body>
<h1>留言板</h1>
<form method="POST" action="">
<label for="message">留言:</label>
<input type="text" id="message" name="message">
<button type="submit">提交</button>
</form>
<h2>留言列表:</h2>
<ul id="messages">
<!-- 服务器端渲染的留言将显示在这里 -->
</ul>

<script>
// 简化的客户端JavaScript代码,用于处理表单提交和显示留言
document.querySelector('form').onsubmit = function(event) {
event.preventDefault();
const message = document.getElementById('message').value;
const li = document.createElement('li');
// 这里直接将输入内容作为 HTML 插入到页面中
li.innerHTML = message;
document.getElementById('messages').appendChild(li);
document.getElementById('message').value = '';
};
</script>
</body>
</html>

修改完脚本文件后,重新启动蜜罐

在测试机的浏览器中访问192.168.58.161或者192.168.58.162

image-20240412151546500

尝试存储型XSS攻击,在留言板输入框中提交如下代码

1
<a href="javascript:alert('Hacked by R1ck')">hack</a>

image-20240412151636083

留言板中出现刚刚注入的链接,点击链接后出现弹窗,说明XSS攻击成功

image-20240412151712208

再来尝试一下FTP服务

使用FileZilla软件连接到192.168.58.162,此时在攻击者的视角是不知道用户名和密码的,这需要进一步的去爆破,所以模拟时用户名和密码留空,点击快速连接

image-20240412161442792

这种模拟的FTP服务器可以吸引黑客去爆破用户名和密码,或者进行其他的漏洞攻击

分析日志

tmp目录下找到虚拟web服务的日志文件

该日志记录了虚拟web服务接收到的一些请求

从中可以分析出攻击者的一些特征,例如他的主机类型、浏览器信息以及请求内容

image-20240412161916399

找到FTP的日志文件

日志文件中记录了攻击者与虚拟FTP服务器的交互时间以及交互的指令

image-20240412162242860

部署Galah

galah基于go语言开发,需要在本地设备上安装并配置好Go v1.20+环境,这里就省略了

首先把galah项目克隆到本地

1
git clone https://github.com/0x4D31/galah.git

在项目文件夹下打开终端

执行go mod download下载依赖包

执行go build来生成可执行文件

执行galah -h来查看galah的用法,同时验证是否安装成功

image-20240411164055589

找到Galah的配置文件config,填入自己的Openai APIKey,并选择模型

image-20240411211141540

测试并分析Galah

运行蜜罐

执行galah -v -i env0 -o request.log开启蜜罐,将请求日志保存在request.log日志文件中

image-20240412160127067

使用curl命令传http请求来测试该蜜罐

信息收集

首先模拟信息收集时黑客可能进行的操作,比如扫描网站的目录

1
curl -X POST http://localhost:8080/login.php

image-20240412165215928

蜜罐根据请求的页面的名称,返回了一共简陋的html登录页面

接下来模拟黑客扫描漏洞的过程,尝试访问存放于服务器上的 AWS(亚马逊网络服务)凭证文件

1
curl http://localhost:8080/.aws/credentials

此时蜜罐返回404页面,说明它会有选择的响应带漏洞的页面

image-20240412165857206

再模拟访问网站的robot.txt,即网站的搜索引擎爬虫规则,通常黑客可以通过该文件获取网站的目录信息

1
curl http://localhost:8080/robots.txt

image-20240412165921883

该蜜罐也像模像样地返回了一个robots文件,同时其中并未透露目录信息

测试鲁棒性

尝试在请求体或URL中输入一些奇怪的内容,使得该蜜罐返回一些异常或错误的响应,以测试其鲁棒性和应对未知请求的能力。

1
curl -X GET http://localhost:8080/somethingweird

发送上面这条请求,观察蜜罐对完全不符合预期的路由请求是如何反应

image-20240412170506827

可以发现蜜罐返回了404页面,说明它不会为一些奇怪的路由请求生成响应页面

尝试使用对抗性提示词

1
curl http://localhost:8888/are-you-a-honeypot

如果该蜜罐的大模型不够成熟,可能会对该提示词作出反应

image-20240412171502993

可以发现仍然返回的是404 Not Found

分析日志

检查request.log日志文件

image-20240412171827646

image-20240412171823433

日志文件中记录了每一条发给蜜罐的请求信息和相应的响应信息

总结和收获

本次实验中,一共尝试部署了两种蜜罐,分别是honeyd和galah。通过对这两种蜜罐的实践和测试,对于蜜罐的原理和工作流程有了一定的初步了解。

当然,通过对低交互型的honeyd和高交互型的galah的效果分析和对比,可以得出一些结论:

低交互型的蜜罐如honeyd操作简便,资源消耗较少。它们通过模拟网络服务的基本响应来吸引黑客,适合于捕捉大规模扫描和初级攻击尝试。但低交互蜜罐的缺点在于其交互的有限性,很难提供深入的攻击行为分析,也较容易被有经验的攻击者识别出来。同时低交互蜜罐需要大量的先验知识,对于未知漏洞或协议缺陷等实施的未知攻击,将会存在大量的漏报、误报,蜜罐的作用将大打折扣。

高交互型的蜜罐更容易欺骗和吸引黑客来攻击,因为它们提供更真实的服务和系统环境,使得攻击者更难辨识出这是一个蜜罐。本次实验中的galah是web蜜罐,当然还存在类似终端shell的高交互蜜罐。这些高交互蜜罐能模拟复杂的系统行为和用户交互,包括详细的系统命令响应、应用程序逻辑,甚至可以与攻击者进行多步交互,从而有效地记录攻击者的行为和策略。

然而,高交互蜜罐也有其缺点。它们通常需要更多的资源来维持,包括更复杂的配置和更高的运维成本。此外,高交互蜜罐由于其复杂性,一旦被黑客识破,也可能被利用来攻击其他系统。因此,部署高交互蜜罐时需要更为严格的安全措施和恰当的隔离策略。

这就引入了大语言模型与蜜罐相结合的理念,我们可以利用大语言模型来增强蜜罐的功能,提高其自动化和智能化水平,而且在高交互蜜罐中的应用潜力非常大。像本次实验使用的高交互蜜罐Galah就还有很多优化空间,比如添加支持使用本地大语言模型,又或者是将web虚拟蜜罐和终端虚拟蜜罐结合在一起,让攻击者在攻击的全流程都深陷蜜罐中,误以为自己成功打掉一台主机还提权成功。

总的来说,大语言模型为蜜罐技术提供了一条强大的发展道路。通过合理配置和持续优化,结合大语言模型的蜜罐能够提供更有效的网络安全防护。随着技术的进步和成本的降低,未来这种蜜罐有希望在更广泛的应用场景中扮演关键角色。