如何写一个redis蜜罐

admin 2023年10月28日23:47:20评论8 views字数 1824阅读6分4秒阅读模式

写在前面

蜜罐就是一种通过模拟真实环境来诱导入侵者的一种技术。通过它可以拖延黑客入侵时间,递给黑客用于取证假数据,溯源黑客等。通过控制平台去操作部署的仿真环境实现高效的诱捕。

最近没新活了,想起来之前写过一个简单的仿真redis蜜罐,简单介绍一下。

RESP

搭建这种组件的仿真环境,要么用真实的程序,要么就自己实现一套虚假的程序。假如自己实现的话,最关键的就是协议,对于redis来说,它的通信协议相对简单,就是resp,协议格式如下:

数据类型
格式
示例
单行字符串 响应的首字节是 "+" 例如:"+OKrn"
错误信息 响应的首字节是 "-" 例如:"-ERROR messagern"
整型 响应的首字节是 ":" 例如:":0rn"
多行字符串 响应的首字节是"$",后面跟字符长度,然后跟字符  例如:"$6rnfoobarrn"
数组  响应的首字节是 "*",随后跟上上述数据类型就行  例如:"*2rn$3rnfoorn$3rnbarrn"

    这就是它的通信协议,相当简单,比如我们想实现一个简单的get key操作,那么协议对应的字符格式为

*2rn$3rngetrn$3rnkeyrn

然后传送给服务端就行。

Redis蜜罐

对于蜜罐,我们只需要实现服务端即可,客户端就用redis-cli这个工具就行。废话不多说,直接贴一下项目

https://github.com/SSRemex/silumation_redis_honeypot/tree/main

如何写一个redis蜜罐

很简单,server.py实现了一个socket服务,同时加了日志收集功能。

而resp.py则实现了命令解析、命令执行、结果格式处理等操作

命令解析和结果格式主要是协议的解析和封装,这里主要想说一下亮点,就是实现了一部分redis的命令

...class RespHandler:    def __init__(self):        # 用来临时存储数据的字典        self.k_v_dict = {            "admin": "12345"        }
self.executable_command = { "ping": (self.ping, True), "get": (self.get, True), "set": (self.set, True), "keys": (self.keys, True), "auth": (self.auth, True), "del": (self.delete, True), "exists": (self.exists, True), "dbsize": (self.dbsize, True), "config": (self.config, True)
} self.unexecutable_command = [ "hget", "hset", "hdel", "hlen", "hexists", "hkeys", "hvals", "hgetall", "hincrby", "hincrbyfloat", "hstrlen", "shutdown", "expire", "expireat", "pexpire", "pexpireat", "ttl", "type", "rename", "renamenx", "randomkey", "move", "dump", "restore", "migrate", "scan", "select", "flushdb", "flushall", "mset", "mget", "incr", "decr", "append", "strlen", "getset", "setrange", "getrange", "rpush", "lpush", "linsert", "lrange", "lindex", "llen", "rpop", "lpop", "lrem", "lset", "blpop",
]...

    这里我内定了一些命令,并实现了他们的功能,让它像真的redis一样,你甚至可以进行kv操作,同时为了真实性,设定了一堆不可执行的命令,调用时会返回redis的报错,就像在配置文件里面禁用了这些命令一样。

演示

服务端执行,默认运行在3998端口

如何写一个redis蜜罐

redis-cli连接

如何写一个redis蜜罐

可以发现成功连接

如何写一个redis蜜罐

此时服务端这边也接收到了,并且生成了日志

如何写一个redis蜜罐

接下来,我们在redis-cli执行一些命令

如何写一个redis蜜罐

很完美,甚至可以进行set get操作。

最后再次附上项目地址:

https://github.com/SSRemex/silumation_redis_honeypot


 

END

 



原文始发于微信公众号(飞羽技术工坊):如何写一个redis蜜罐

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月28日23:47:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何写一个redis蜜罐https://cn-sec.com/archives/2155050.html

发表评论

匿名网友 填写信息