蜜罐配置实验
蜜罐简介
原理
蜜罐的原理基于一个简单但强大的概念:诱饵。通过创建一个或多个似乎充满漏洞、容易被入侵的目标,安全研究人员和网络防御者吸引攻击者进入一个受控环境,而这个环境旨在记录攻击者的行为、手段、技术和其他关键信息。这些信息随后被用于分析攻击者的行动模式、提高现有安全措施的有效性,以及预防未来的攻击。
蜜罐的概念可以追溯到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地址设置位于同一网段
在宿主机环境中构建蜜罐虚拟机,实验过程中将验证测试机对蜜罐虚拟机的访问
依赖项准备
执行以下指令,安装依赖项
1 | sudo apt-get install g++ gcc |
这些依赖库的功能如下:
- g++ 和gcc用于编译C和C++程序。对于需要从源代码编译的软件,这两个编译器是基本要求,因为它们能将源代码转换成可执行的二进制程序。
- flex是一个快速词法分析器生成器。它是UNIX工具lex的一个更加灵活的版本。
- bison:Bison是一个兼容YACC(Yet Another Compiler Compiler)的解析器生成器,它提供了一种将语法规则转换成C或C++等编程语言的源代码的方法。
- libedit-dev是一个命令行编辑器库,提供类似于
readline
的功能。开发者可以使用它来实现命令行的自动补全和历史功能。 - make是一个非常重要的工具,用于控制编译过程,允许自动化编译和安装程序。
安装函数库
准备好和honeyd配套的函数库安装包,我已将其打包上传到了百度云
安装函数库的步骤如下:
- 执行
tar -xzvf 安装包名
将其解压 - 执行
cd 安装包目录
进入安装包目录 - 执行
sudo ./configure
创建Makefile
- 执行
sudo make
命令开始编译过程 - 执行
sudo make install
将编译好的程序和库文件安装到系统的标准位置
一个示例如下
一个推荐安装顺序如下
libdnet-1.11
libevent-1.4.14b-stable
- libpcap-1.9.0
- zlib-1.2.11
- ARPD
需要注意的是, zlib-1.2.11.tar.xz文件是使用xz
压缩算法的tar
归档文件,需要使用命令tar -xvf
当安装ARPD库时,直接执行sudo make
会出现如下报错
需要在 arpd.c 文件中添加如下代码:
1 |
安装Honeyd
安装honeyd的步骤与前面安装函数库一致,不过在安装过程中可能会遇到很多问题
在执行sudo ./configure
前,执行sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /usr/lib/libc.so
,成功生成makefile
执行sudo make
和sudo make install
执行sudo ./honeyd -V
测试是否安装成功
出现如下报错
执行sudo ln -s /usr/local/lib/libdnet.1 /usr/lib/libdnet.1
,重新测试
出现版本号,说明安装成功
配置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 |
用vim打开该文件,开始配置参数
我们要参考的模板主要是红框标出来的部分
本次实验配置两个ip,一个模拟Windows系统,另一个模拟linux系统
修改create
后的值,给配置模板起一个名字,windows系统的ip就叫做windows
set personality
后改为希望蜜罐虚拟出来的系统指纹
set windows default tcp action reset
用于关闭所有的TCP端口,仅开放后续服务的端口
在windows虚拟蜜罐上分别开启web和ssh服务,并额外开启一个端口用于在扫描时测试
在linux虚拟蜜罐上开启web、ssh和ftp服务
分别将它们绑定到192.168.58.161
和192.168.58.162
,这里需要选择与虚拟机同网段的IP
测试并分析Honeyd
运行蜜罐
执行arpd 192.168.58.161
和arpd 192.168.58.162
启动Arpd侦听工具,用于应答宿主机的MAC地址
开启两个终端,分别执行下面两条指令,开启Windows服务器虚拟蜜罐和linux虚拟蜜罐
1 | honeyd -d -f /usr/local/share/honeyd/honeyd.conf 192.168.58.161 |
信息收集
在测试机上使用SuperScan3.0软件
IP范围选择网段中的所有IP,端口选择列表中的所有端口,开始扫描
点击开始扫描,可以发现该软件会同步进行对IP和端口的扫描
最终一共扫描到四台主机,分别是测试机、宿主机和两台蜜罐
查看扫描出来的端口,与之前的配置一致
测试Web和FTP服务
找到web.sh
脚本
修改如下默认页面内容,模拟XSS漏洞
新的页面内容如下,页面中有一个留言板,提交的内容会被直接作为HTML插入到页面中
1 | HTTP/1.1 200 OK |
修改完脚本文件后,重新启动蜜罐
在测试机的浏览器中访问192.168.58.161
或者192.168.58.162
尝试存储型XSS攻击,在留言板输入框中提交如下代码
1 | <a href="javascript:alert('Hacked by R1ck')">hack</a> |
留言板中出现刚刚注入的链接,点击链接后出现弹窗,说明XSS攻击成功
再来尝试一下FTP服务
使用FileZilla软件连接到192.168.58.162
,此时在攻击者的视角是不知道用户名和密码的,这需要进一步的去爆破,所以模拟时用户名和密码留空,点击快速连接
这种模拟的FTP服务器可以吸引黑客去爆破用户名和密码,或者进行其他的漏洞攻击
分析日志
在tmp
目录下找到虚拟web服务的日志文件
该日志记录了虚拟web服务接收到的一些请求
从中可以分析出攻击者的一些特征,例如他的主机类型、浏览器信息以及请求内容
找到FTP的日志文件
日志文件中记录了攻击者与虚拟FTP服务器的交互时间以及交互的指令
部署Galah
galah基于go语言开发,需要在本地设备上安装并配置好Go v1.20+环境,这里就省略了
首先把galah项目克隆到本地
1 | git clone https://github.com/0x4D31/galah.git |
在项目文件夹下打开终端
执行go mod download
下载依赖包
执行go build
来生成可执行文件
执行galah -h
来查看galah的用法,同时验证是否安装成功
找到Galah的配置文件config
,填入自己的Openai APIKey,并选择模型
测试并分析Galah
运行蜜罐
执行galah -v -i env0 -o request.log
开启蜜罐,将请求日志保存在request.log
日志文件中
使用curl命令传http请求来测试该蜜罐
信息收集
首先模拟信息收集时黑客可能进行的操作,比如扫描网站的目录
1 | curl -X POST http://localhost:8080/login.php |
蜜罐根据请求的页面的名称,返回了一共简陋的html登录页面
接下来模拟黑客扫描漏洞的过程,尝试访问存放于服务器上的 AWS(亚马逊网络服务)凭证文件
1 | curl http://localhost:8080/.aws/credentials |
此时蜜罐返回404页面,说明它会有选择的响应带漏洞的页面
再模拟访问网站的robot.txt
,即网站的搜索引擎爬虫规则,通常黑客可以通过该文件获取网站的目录信息
1 | curl http://localhost:8080/robots.txt |
该蜜罐也像模像样地返回了一个robots文件,同时其中并未透露目录信息
测试鲁棒性
尝试在请求体或URL中输入一些奇怪的内容,使得该蜜罐返回一些异常或错误的响应,以测试其鲁棒性和应对未知请求的能力。
1 | curl -X GET http://localhost:8080/somethingweird |
发送上面这条请求,观察蜜罐对完全不符合预期的路由请求是如何反应
可以发现蜜罐返回了404页面,说明它不会为一些奇怪的路由请求生成响应页面
尝试使用对抗性提示词
1 | curl http://localhost:8888/are-you-a-honeypot |
如果该蜜罐的大模型不够成熟,可能会对该提示词作出反应
可以发现仍然返回的是404 Not Found
分析日志
检查request.log
日志文件
日志文件中记录了每一条发给蜜罐的请求信息和相应的响应信息
总结和收获
本次实验中,一共尝试部署了两种蜜罐,分别是honeyd和galah。通过对这两种蜜罐的实践和测试,对于蜜罐的原理和工作流程有了一定的初步了解。
当然,通过对低交互型的honeyd和高交互型的galah的效果分析和对比,可以得出一些结论:
低交互型的蜜罐如honeyd操作简便,资源消耗较少。它们通过模拟网络服务的基本响应来吸引黑客,适合于捕捉大规模扫描和初级攻击尝试。但低交互蜜罐的缺点在于其交互的有限性,很难提供深入的攻击行为分析,也较容易被有经验的攻击者识别出来。同时低交互蜜罐需要大量的先验知识,对于未知漏洞或协议缺陷等实施的未知攻击,将会存在大量的漏报、误报,蜜罐的作用将大打折扣。
高交互型的蜜罐更容易欺骗和吸引黑客来攻击,因为它们提供更真实的服务和系统环境,使得攻击者更难辨识出这是一个蜜罐。本次实验中的galah是web蜜罐,当然还存在类似终端shell的高交互蜜罐。这些高交互蜜罐能模拟复杂的系统行为和用户交互,包括详细的系统命令响应、应用程序逻辑,甚至可以与攻击者进行多步交互,从而有效地记录攻击者的行为和策略。
然而,高交互蜜罐也有其缺点。它们通常需要更多的资源来维持,包括更复杂的配置和更高的运维成本。此外,高交互蜜罐由于其复杂性,一旦被黑客识破,也可能被利用来攻击其他系统。因此,部署高交互蜜罐时需要更为严格的安全措施和恰当的隔离策略。
这就引入了大语言模型与蜜罐相结合的理念,我们可以利用大语言模型来增强蜜罐的功能,提高其自动化和智能化水平,而且在高交互蜜罐中的应用潜力非常大。像本次实验使用的高交互蜜罐Galah就还有很多优化空间,比如添加支持使用本地大语言模型,又或者是将web虚拟蜜罐和终端虚拟蜜罐结合在一起,让攻击者在攻击的全流程都深陷蜜罐中,误以为自己成功打掉一台主机还提权成功。
总的来说,大语言模型为蜜罐技术提供了一条强大的发展道路。通过合理配置和持续优化,结合大语言模型的蜜罐能够提供更有效的网络安全防护。随着技术的进步和成本的降低,未来这种蜜罐有希望在更广泛的应用场景中扮演关键角色。