redis蜜罐部署系统的制作方法

文档序号:20039108发布日期:2020-02-28 11:41阅读:338来源:国知局
redis蜜罐部署系统的制作方法

本发明涉及计算机网络安全技术领域,特别是一种redis蜜罐部署系统。



背景技术:

redis是一款开源的、高性能的键-值存储数据库。redis的所有键-值都是存储在内存中,具有很高的单机读写功能。它支持的存储类型很多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。目前,redis被大量的公司应用,由于redis默认为无需认证即可使用,因此它十分容易受到攻击;此外,由于redis可高速进行访问,许多人使用弱密码也非常容易被爆破。被攻陷的redis可被黑客用来进行文件的修改,留下后门程序,在一定条件下,它甚至可以获得webshell、root权限。

蜜罐技术是一种对互联网攻击方进行欺骗的技术。通常可以认为,蜜罐是一台无人使用但受到严密监控的网络主机,它包含虚假的高价值资源和一些漏洞,以吸引入侵者攻击蜜罐主机,以起到保护真实主机的目的。同时,蜜罐可以记录下黑客进行攻击的所有指令,以此制定防御攻击的手段,供真实主机使用。采用蜜罐技术可以一定程度上的抵御未知攻击,增强实际系统的防护能力。

但是,现有的蜜罐研究中,很少有针对数据库蜜罐尤其是redis蜜罐的研究,尤其是一些蜜罐基于系统日志或第三方插件等监控操作指令,十分容易遗漏关键操作数据。此外,蜜罐的研究大多只包含对数据的采集,而没有对数据进行分析。



技术实现要素:

为解决现有技术中存在的问题,本发明的目的是提供一种redis蜜罐部署系统,用于监控和分析入侵redis的流量,以针对性的制定防御措施,保护正常主机上的redis服务。

为实现上述目的,本发明采用的技术方案是:一种redis蜜罐部署系统,包括:

流量监控模块,作为redis代理服务器,用于采集redis客户端与redis实际服务器交互的通讯数据;

流量解析模块,用于将流量监控模块采集的通讯数据转换为易于识别的明文数据,泛化威胁日志;

数据上报模块,用于通过hpfeeds协议将泛化的威胁日志实时转发到云端分析模块;

云端分析模块,用于分析上报的威胁日志的日志数据,并制定防御策略;

数据存储模块,用于对日志数据存储到数据库以供回溯。

作为一种优选的实施方式,修改redis实际服务器的默认端口为其他未被占用的端口,由python脚本的socket和select模块搭建redis代理服务器监听redis实际服务器的原始默认端口,实时监听默认端口中redis客户端信息,所述流量监控模块通过转发redis实际服务器和redis客户端之间的通讯数据对其进行采集。

作为另一种优选的实施方式,所述流量解析模块通过对redis底层通讯协议的解读,将所接收到的通讯数据转换为易于识别的明文数据,并结合套接字连接的参数、redis解析的原始指令,生成统一格式的威胁日志。

作为另一种优选的实施方式,所述威胁日志包括会话id、源ip、源端口、操作指令时间、操作详情和原始日志。

作为另一种优选的实施方式,当redis客户端连接redis之后,python脚本随机生成一个唯一的会话id,之后redis客户端进行的所有操作均属于此会话id。

作为另一种优选的实施方式,所述云端分析模块的基本分析单位为事件日志,所述事件日志包括hpfeeds协议所上传的威胁日志中所有会话id相同的日志,事件日志被分析为恶意ip、攻击指令和攻击目标。

作为另一种优选的实施方式,事件日志被分析为恶意ip、攻击指令和攻击目标具体包括:首先,判断用户是否短时间进行多次密码认证,或在认证之后是否进行了文件查询或文件修改的动作,若是,则本次事件为恶意事件,此用户的源ip为恶意ip,若不是,说明此用户仅做试探或学习性行为,不是恶意操作;其次,依据用户的操作指令判断,是否短时间进行多次密码认证,若是,则攻击指令为密码爆破类。

作为另一种优选的实施方式,在用户完成认证之后,提取用户的操作指令,若不是直接退出的指令,则所有的操作指令都是攻击指令,攻击指令包括文件查询类攻击指令和文件修改类攻击指令。

作为另一种优选的实施方式,所述攻击指令还包括未知类攻击指令,用于发现0day漏洞。

作为另一种优选的实施方式,所述数据存储模块分别存储恶意ip、攻击指令、攻击目标和原始日志,以会话id相关联,并在新指令到达时比对已存储的数据,如果是首次出现的攻击指令则添加存储,否则只存储原始日志,方便进行回溯。

本发明的有益效果是:本发明通过redis代理服务器能收集到外部攻击者操作的全部流量,不会遗漏重要攻击数据,并且对攻击的三个重要特征:攻击来源、攻击指令、攻击目标作出提取分析,使redis实际服务能对恶意攻击针对性的防御及过滤。

附图说明

图1为本发明实施例的系统框图。

具体实施方式

下面结合附图对本发明的实施例进行详细说明。

实施例

如图1所示,一种redis蜜罐部署系统,包括:

流量监控模块,为redis代理服务器,实时监听redis实际服务器默认端口中redis客户端信息,因此,redis客户端发送的数据会首先传送到redis代理服务器;redis代理服务器接收并转发该数据到redis实际服务器,并接收redis实际服务器返回的数据,然后将其发送到redis客户端;因此,redis代理服务器可接收全部的redis客户端、redis实际服务器之间的交互流量。

流量解析模块通过对redis底层通讯协议的解读,可将所接收到的数据转换为易于阅读的明文数据,并结合套接字连接的参数、redis解析的原始指令,生成包含会话id、源ip、源端口、操作指令时间、操作详情、原始日志等内容在内的统一格式的威胁日志,其中会话id为每一次一个远程主机连接redis之后,python脚本随机生成的一个唯一的会话id,之后该远程主机进行的所有操作都属于此会话id,操作详情则是对操作指令的进一步分解,包括执行的指令、用户、结果等,最后将redis一次指令中redis客户端、redis实际服务端交互的全部数据整合成一次威胁日志进行上报。

数据上报模块为hpfeeds协议,每生成一次威胁日志,都会将其上传到云端分析模块进行分析。

云端分析模块的基本分析单位为事件日志,将hpfeeds协议所上传的日志中,所有会话id相同的日志整合在一起则为事件日志,事件日志将被分析为恶意ip、攻击指令、攻击目标等不同内容;首先,判断用户是否短时间进行多次密码认证,或在认证之后是否进行了文件查询或修改的动作,若是,则本次事件为恶意事件,此用户的源ip为恶意ip,若不是,说明此用户仅做试探或学习性行为,不是恶意操作;其次,依据用户的操作指令判断,是否短时间进行多次密码认证,若是,则攻击指令为密码爆破类;在用户完成认证之后,提取用户的操作指令,若不是直接退出的指令,则所有的操作指令都是攻击指令,可分为文件查询类攻击指令和文件修改类攻击指令,查询文件可以进行数据库的窃密,进行拖库撞库攻击等,修改文件则可以安装后门、进而操控主机等,此外,还设定未知类攻击指令,以发现0day漏洞;最后,将前面攻击指令所对应的对象标记为攻击目标,其对象主要为文件查询或修改的路径、名称、内容等信息,可详细的识别文件攻击的手段。

云端存储模块存储恶意ip、攻击指令、攻击目标及原始日志到数据库以供回溯。判断此次恶意攻击是否为首次出现,若首次出现,则将恶意ip、攻击指令、攻击目标将会和原始日志一起存储到数据库,若非首次出现,则只将原始日志进行存储,以防止存储恶意指令的数据库过大,并且可以在需要时进行指令的回溯;数据存储模块将保存所分析的恶意指令结果,分别保存恶意ip、攻击指令、攻击目标等内容,这些内容以会话id关联在一起。

通过对恶意ip、攻击指令、攻击目标进行存储,然后在redis实际服务器中,有针对性的对目标文件、目标服务加强保护,或者对恶意请求进行针对性的过滤,可以有效的起到防护恶意攻击的作用。

下面以实际部署为例对本实施例的redis蜜罐部署系统作进一步的说明

1.搭建redis代理服务器:

首先,修改redis实际服务器的默认端口为其他未被占用的端口,而由python脚本socket和select模块搭建redis代理服务器监听redis的原始默认端口6379。

2.redis指令解析与泛化:

当一个已经完成密码认证的用户发出攻击时,例如,攻击者向redis代理服务器发送如下指令:

1)configsetdir/root/.ssh;

2)configsetdbfilenameauthorized_keys;

3)setxxx"\n\n\ssh-rsaaaaab3nzac1yc2eaaaadaqabaaabaqc81nvpk8qyy1roeo8lvhzjp-pkvkwy4vytzji0msfaxvbpkq0k2evwdl8gxcpiu5/tza47xttkkk2h9us0cipnkrhlijmx7x0t4haqj2lz15t186o4jbazhd4aehkjdl9g1kr5xvtjmeqrev7gncmfhfilyre1bwrrmrzbt4x1smimofbvhi2itsb9tremqykgpiq0rnv1ydgk83/+hrroot@test\n\n\n"

4)save.

首先有redis连接进来,第一条指令会先到达redis代理服务器处,redis代理服务器记录下此次连接的操作,同时根据套接字记录下连接的源ip、源端口以及此次连接发生的时间,并通过uuid模块随机生成一个会话id,作为这一个连接redis客户端的唯一标识。之后,redis代理服务器将连接请求转发到redis实际服务器,redis实际服务器返回的请求也先到达redis代理服务器,redis代理服务器记录下此时redis实际服务器返回的响应,作为前面操作的结果,然后将其传到redis客户端。之后,此连接的redis客户端会依次发来第2、3、4条指令,python的redis代理服务器会如同处理第一条指令的步骤对其进行依次处理得到会话id等数据,并与第一条指令具有相同的会话id。

由于redis客户端和redis实际服务器交互的数据经过通信协议进行编码,因此,需要对其以redis通讯协议进行解析,生成原始的redis操作指令。例如第一条攻击指令的原始通讯代码为:b'*4\r\n$6\r\nconfig\r\n$3\r\nset\r\n$3\r\ndir\r\n$10\r\n/root/.ssh\r\n',通过对*、$符号的解析可将其转换为原始输入指令configsetdir/root/.ssh。

将一次redis客户端和redis实际服务器端流量交互的会话id、源ip、源端口、会话时间、操作详情、原始指令结合在一起,生成如下结构的一份威胁日志(以第一条指令为例):

{session_id:‘d2903a92-3529-4d36-bf73-dd1f8279e54a’,date:‘2019-08-2116:35:41.845’,src_ip:‘127.0.0.1’,src_port:51704,type:‘文件修改’,"operate_info":{"operate":"configsetdir","result":"0",}originallog:configsetdir/root/.ssh}。

最后该威胁日志以hpfeeds协议发布出去。

3.分析事件日志:

云端程序以hpfeeds协议实时接收来自redis分析程序发布的威胁日志。攻击者在一次会话中发来的多条指令具有相同的会话id,被聚合成一次事件日志,其格式如下:

一个事件日志包含攻击者一次会话中的多次攻击操作,分析事件日志中攻击者的具体操作,因为该用户对文件进行修改,则此次行为归为一次恶意攻击,源ip被判定为恶意ip,其攻击指令configsetdir/root/.ssh等被判定为恶意指令,攻击目标为目标路径/root/.ssh和目标文件authorized_keys。

4.存储恶意指令:

最后通过mongo数据库存储所记录的恶意ip、攻击指令和攻击目标。首先判断新事件日志中的恶意ip、攻击指令、攻击目标等是否已存在于数据库中,以完全匹配为准。若已存在,则只存储原始事件日志以供回溯,防止数据库过大。而本次攻击为首次攻击,则将恶意ip、攻击指令、攻击目标和原始事件日志存储进数据库。

以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1