(说明:本文搬运自Git-Hub:https://github.com/aau-network-security/riotpot,仅作为自己学习材料,本人是网络安全菜鸟,欢迎交流!)
RloTPot是一个混合交互蜜罐,主要关注模拟loT和OT协议,不过,它也能够模拟其他服务。本质上,RloTPot充当了系统中其他蜜罐的代理服务。因此,您可以在RloTPot的同时运行任何蜜罐和其他服务。此外,还有一个Ul web应用程序,您可以使用它来管理路由。
这个蜜罐提供了多种低交互的服务。由于这些服务是以插件的形式编写的,它们只在Linux上受支持;但是,你可以在没有它们的情况下启动RloTPot。列表如下表所示默认情况下包含在RloTPot中的服务,它们的内部端口和代理端口。
Service | Internal | Proxy Port |
Echo | 20007 | 7 |
SSH | 20022 | 55 |
Telnet | 20023 | 23 |
HTTP | 28080 | 80 |
Modbus | 20502 | 502 |
MQTT | 21886 | 1883 |
CoAP | 25683 | 5683 |
RloTPot架构基于到内部和周围(或外部)服务(例如,蜜罐、全服务、容器、远程主机等)的代理连接。为此,蜜罐管理许多用户定义的代理,这些代理在服务和RloTPot之间中继连接。这样,RloTPot可以决定如何以及在哪里路由来袭的攻击。用于确定如何处理传入攻击的逻辑以中间件的形式实现。为了管理服务、中间件和代理,RloTPot附带了一个REST API 和一个即时可用的webapp UI。Ul可以通过浏览器访问。localhost:2022,你可以在localhost:2022/ API /swagger中修改API端点,显示一个swagger接口。
localhost:2022,你可以在
localhost:2022/ API /swagger中修改API端点,显示一个swagger接口。
图1显示了RloTPot体系结构,包括构成RloTPot的两个主要应用程序(RloTPot本身和RloTPot UI)及其组件,以及包含外部(或相邻)服务的部分。
图1 RloTPot体系结构,主要包括应用程序、外部服务和web应用程序的Ul来管理RIoTPot实例
RloTPot是用Golang编写的。每个RloTPot实例根据需要公开已注册的代理(基于它们的端口)。要为代理服务,它必须有一个绑定的服务,并且代理端口必须可用(目前RloTPot不接受在同一个端口上运行多个服务)。当一个代理被绑定并被服务时,攻击者将能够在该端口上向RloTPot发送消息,依靠消息发送到绑定的服务并返回攻击者[6]。为了方便访问,可以从RloTPot Ul web应用程序管理多个RloTPot实例。
除了管理在每个实例中注册的代理外,Ul还允许您创建、使用和编辑配置文件。每个配置文件包含许多以协议或其他服务命名的代理,使RloTPot实例类似于现实生活中的设备(例如家庭助手)。简而言之,概要文件加快了设置和提供具有特定配置的RloTPot实例的过程。Ul是使用React前端JavaScript库(我们在这个项目中使用Typescript)和Recoil状态管理库编写的。由于RloTPot相当小,目前它不使用数据库。
运行RloTPot相对简单。总的来说,您有三个选择。第一种是下载RloTPot发行版;您可以选择下载最新版本或以前的版本。第二个选择是自己构建项目。最后一个选项是使用源代码创建一个带有RloTPot和一些附加应用程序的Docker容器来增强蜜罐。
riotpot
┕ riotpot
┕ plugins
(1) 首先,从版本页面下载您选择的版本。选一个你需要的操作系统(OS)。
(2)提取 riotpot文件夹
(3)运行 riotpot程序。这将启动RloTPot的API,所有准备使用的插件,以及UI服务器。
o API和Ul可通过地址localhost:2022访问
需要:
操作:
1. 从GitHub下载RloTPot源代码。打开一个控制台并引入以下行。
git clone [email protected]:aau-network-security/riotpot.git
2. 打开已下载RloTPot源文件的文件夹,并安装所需的节点包。
npm install
3.如果您已经安装了Make,我们还提供了多个命令帮助程序来帮助您构建项目。简单来说,您可以运行两个简单的命令来构建RloTPot二进制文件和插件(并将它们放在正确的文件夹中)。
# Build the server
make build-ui
# Builds RIoTPot and the plugins
make riotpot-build
注意:Ul使用 Vite 来构建项目。如果您更喜欢使用其他构建器,您可能需要先自己做一些更改。
Docker(虚拟化)
- Docker - 被用来创建RIoPot映像和UI服务
- Docker-compose - 被用来创建含有RIoTPot实例、UI、其他应用和服务的单个容器,
使用这种设置的主要优点是附加的安全特性,对容器配置和容器本身的更改很小。例如,我们可以定义分离的虚拟专用网络和覆盖网络来隐藏、沙箱和封装RloTPot和其他相邻的服务。此外,容器允许我们使用它们的docker地址名称来绑定服务,而不是它们的IP,这非常方便。最后,我们可以根据需要生成和停止分离的容器,而不会影响其他服务。
另一方面,虚拟化可以说比在裸机上使用应用程序要求更高。虽然单个RloTPot实例是相对轻量级的,但重要的是要考虑虚拟化和硬件仿真带来的缺点(例如,响应延迟)。
警告:从技术上讲,专门的攻击者可能会通过分析意识到RloTPot实际上是一个蜜罐并且比较虚拟化和真实服务器带来的响应时间延迟(!!)虽然以前已经研究过这种蜜罐指纹,但对于普通互联网服务的结果仍然不确定(例如,HTTP, Telnet和SSH),这是由于使用虚拟机和详细的服务器配置的云托管服务的商品化。
docker-compose文件包括用于增强RloTPot体验的附加服务。下表总结了此容器中打包的服务和应用程序列表。
Service | Image | Port | Details |
MQTT | eclipse-mosquitto | 1883 | Mosquito MQTT Server |
HTTP | httpd | 80 | Regular HTTP Server |
Modbus | oitc/modbus-server | 502 | Modbus Server |
OCPP | ocpp1.6-central-system | 443 | OCPP v1.6(用于骑车充电站) |
Application | Image | Details |
TCPDump | kaazing/tcpdump | 网络流量存储以.pcap格式存储 |
容器可以通过三个简单的步骤来设置:
1. 从GitHub下载RloTPot源代码,打开控制台并输入以下命令
git clone [email protected]:aau-network-security/riotpot.git
2. 打开已下载RloTPot源代码的文件夹
3.在Docker运行时:如果安装了Make,则运行以下命令
否则运行docker-compose命令,build/docker文件夹中包含docker-compose文件
# With make
make up
# With docker-compose
docker-compose -p riotpot -f build/docker/docker-compose.yaml up -d --build
RloTPot支持命令的使用。例如:
# Run RIoTPot without the ui
./riotpot --ui false
Flag(标志) | Type(类型) | Default(默认) | Description(描述) |
debug | Boolean | false | 将日志级别设置为调试 |
api | Boolean | true | 是否启动API |
plugins | Boolean | true | 是否加载低交互蜜插件 |
whitelist | String | http://localhost http://localhost:3000 |
允许主机连接API |
ui | Boolean | true | 是否启动UI |