APP下载

基于Golang的跨平台蜜罐框架系统的设计与实现

2022-02-03辉,李

现代计算机 2022年21期
关键词:蜜罐攻击者邮件

张 辉,李 鹏

(山西工程科技职业大学信息工程学院,晋中 030619)

0 引言

随着当今互联网的快速发展,网络安全逐渐受到个人、政府、事业单位等重视,网络安全已经成为当今互联网的重中之重。蜜罐系统是网络安全领域的重要技术之一,主要通过诱使攻击者进行攻击,监控和记录攻击者在蜜罐中所进行的一系列操作,掌握攻击者的入侵意图,以及所使用的攻击方法等重要信息,从而有助于被攻击者快速准确地采取最有效的防范措施[1]。

本文设计的蜜罐框架系统是基于Golang 开发的一个系统,后端主要采用Gin框架,数据库采用了SQLite 数据库[2-3]。它通过模拟各种真实服务与极其逼真的网页去引诱攻击者对其进行攻击,蜜罐受攻击的数据会存储到数据库中,包括攻击IP、攻击者使用的密码字典等。根据所收集到的信息,就可以进一步分析得到攻击者所使用的最新技术、对比真实应用系统存在的问题,进行及时解决,使应用系统更加安全。

1 系统设计

1.1 系统架构设计

整个系统采用前后端分离的架构进行开发。前端基于Bootstrap 框架,后端主要应用Gin 框架,数据库采用SQLite数据库[4]。系统的功能结构包括三大模块:虚假服务模块、邮件告警模块与前端展示模块。蜜罐框架系统架构图如图1所示。

图1 蜜罐框架系统架构图

1.2 功能模块设计

1.2.1 虚假服务模块

虚假服务模块是由模拟的真实服务来欺骗攻击者的模块。该模块中可包含多个蜜罐来承受所有真实攻击,在本次系统中共设计了三个蜜罐,分别为SSH蜜罐、Telnet蜜罐与Web蜜罐。

(1)SSH蜜罐

SSH 蜜罐,初步定位为中交互型蜜罐。在开启SSH 蜜罐后,被管理端就会向互联网暴露出提前设置好的端口,然后即可承受互联网上的攻击,如用户名密码的暴力破解、上传Web⁃shell 等攻击手法。SSH 蜜罐具体的业务流程是:开启SSH 蜜罐后,攻击者可通过暴力破解的方法登录到远程SSH 服务器,此时SSH 蜜罐会记录攻击者的IP、暴力破解的用户名和密码,并写入到数据库中。当攻击者在远程SSH 服务器中执行任何命令,或尝试上传任何后门、病毒等恶意文件,SSH 远程服务器会将攻击者在服务器中所有的操作写入日志文件中,方便用户的溯源反制工作。

(2)Telnet蜜罐

Telnet蜜罐,初步定位为低交互型蜜罐。在开启Telnet蜜罐后,被管理端也会向互联网暴露指定端口信息,然后承受攻击,该蜜罐仅支持承受暴力破解攻击。Telnet蜜罐具体的业务流程是:开启Telnet 蜜罐后,攻击者尝试连接Telnet,此时创建连接会话,并提示攻击者输入用户名与密码,由于设计原因,攻击者不可能找到正确的用户名密码,且Telnet 蜜罐会将攻击者的IP、尝试登录的用户名和密码写入到数据库中。

(3)Web蜜罐

Web 蜜罐,初步定位为低交互型蜜罐。在开启Web 蜜罐后,攻击者可通过蜜罐IP 加上指定端口访问Web 蜜罐的登录界面。为了更好地引诱攻击者,用户可将登录界面定制为较逼真的业务登录界面,该蜜罐同样仅支持承受暴力破解攻击。Web 蜜罐具体的业务流程是:开启Web 蜜罐后,攻击者会正常访问到登录界面,并且尝试通过暴力破解的方式登录系统,此时Web 蜜罐会将攻击者所有尝试过的用户名与密码写入数据库中[5]。

本模块中设计两个仅支持暴力破解攻击的蜜罐,目的主要是收集攻击者暴力破解所使用的密码字典,通过分析密码字典,确认用户目前所使用的密码是否安全,从而更好地提高系统密码强度。

1.2.2 邮件告警模块

邮件告警模块有自动群发邮件告警和手动邮件告警两大功能。该模块要正常使用,必须要配置正确、可用的SMTP服务器以及收发件人信息。

(1)自动群发邮件告警功能

自动群发邮件告警,在配置正确的前提下,如果有新的攻击告警,会按照固定的告警模板,将邮件通知发送到配置中收件人的邮箱。自动群发邮件告警功能的具体操作流程是:用户进入系统后台管理登录页面,输入指定的账号、密码,随即点击登陆进入系统后台管理页面。进入管理页面后,转到设置菜单,点击配置,输入相应的发件人邮箱、SMTP 服务器以及对应的端口与收件人邮箱,随即点击保存完成配置,配置成功后会提示用户配置成功。最后即可等待新的攻击告警产生,系统将会自动发送邮件至指定邮箱。

(2)手动邮件告警功能

手动邮件告警,在配置正确的前提下,用户可点击邮件告警菜单,自定义告警内容发至指定收件人邮箱。手动邮件告警功能的操作流程是:用户进入系统后台管理登录页面,通过账户信息认证,即可进入系统后台管理页面。进入管理页面后,转到设置菜单,点击配置,输入相应的发件人邮箱、SMTP 服务器以及对应的端口,随即点击保存完成配置,配置成功后会提示用户配置成功。最后,用户可转到邮件告警菜单,输入相应的发件人邮箱、收件人邮箱、邮件主题等邮件相关信息,点击发送,即可发送至指定收件人邮箱[6-7]。

1.2.3 前端展示模块

前端展示模块包括仪表盘、猎物列表、被管理端列表、手动邮件告警页面与邮件告警配置页面五大部分。

(1)仪表盘列表

仪表盘列表的具体流程是:用户成功登录到系统后台管理页面后,随即展示的就是仪表盘展示页面,用户可直观地看到目前系统所拥有的蜜罐、各个蜜罐的启用状态以及近期的攻击告警数量。

(2)猎物列表

(3)被管理端列表

被管理端列表的流程是:用户成功登录到系统后台管理页面后,点击“被管理端集群”,进入被管理端列表,即可查看到目前所有被管理端的名称、IP 以及各蜜罐的启用状态信息。同样,点击最右侧的删除按钮,点击确定,即可将对应的蜜罐告警信息从数据库中删除,系统后台管理页面也不再展示该数据。

(4)手动邮件告警页面

由于自动群发邮件告警功能是后台自动执行,此处邮件告警页面仅显示手动邮件告警功能。

(5)邮件告警配置页面

用户需要此页面对自动群发邮件告警与手动邮件告警进行相关的配置,例如发件人邮箱、SMTP 服务器地址、SMTP 端口等信息。故邮件告警配置页面的流程是:用户选择需要启用的功能进行配置,填写好相关配置信息后,点击保存,此时系统会将配置信息写入数据库,方便系统读取使用配置信息,然后用户点击已配置,此时该功能处于启用状态,可以使用对应的告警功能。

2 系统实现

系统采用Golang作为系统开发语言,Goland作为开发工具,主要使用Bootstrap 框架进行本系统的前端开发,后端开发主要采用Golang 中的Gin框架,SQLite作为本系统的数据库[8-9]。

2.1 软件组件设计

根据上述需求并进行具体分析后,可将系统分为两大部分:前端(即前端展示模块)与后端,由上述两个部分组成整个跨平台蜜罐框架系统。

原始AlexNet模型输入为固定的224×224×3,GoogLeNet模型输入为固定的299×299×3,该原始模型和本文提出的模型在相同的CompCars数据集中431类车型数据中训练。然后分别在不同输入的尺寸数据下测试各个训练模型的效果,如图7,图8,图9,图10,图11所示。

(1)前端部分(前端展示模块)

前端部分由仪表盘、猎物列表、被管理端列表、手动邮件告警与邮件告警配置五个部分构成。包括猎物列表中的查看攻击信息和删除猎物,编辑邮件内容并发送等功能。

(2)后端部分

后端部分主要由虚假服务、上报攻击数据以及管理端与被管理端三个部分构成。包括将管理端与被管理端中获取到的攻击数据写入数据库。

2.2 功能模块实现

2.2.1 虚假服务模块

虚假服务模块包括了SSH 蜜罐、Telnet蜜罐与Web蜜罐。

(1)SSH蜜罐

SSH 蜜罐为蜜罐框架系统所拥有的蜜罐之一,是该系统中唯一一个中交互型蜜罐。SSH蜜罐的整体框架采用了Golang 官方提供的SSH服务器,然后进行二次开发得到SSH 蜜罐。该蜜罐在被尝试连接时,会提示进行身份验证,此处采用了Password 方式,即用户名密码的方式进行认证,若暴力破解成功,即认证成功,则本地SSH 将自动连接至远程SSH 服务器。此处远程SSH 服务器使用了Docker,在Docker 中拉取了SSH 服务器镜像,此时攻击者的所有操作都会在Docker 中的SSH 服务器中执行,以免攻击行为影响真实生产环镜。同时,Docker 中的SSH 服务器将会实时记录登入用户的所有操作,需要溯源时可登录Docker 中的SSH 服务器或登录Docker 服务器将日志文件从Docker 拷贝到宿主机中进行查看。

(2)Telnet蜜罐

Telnet蜜罐为蜜罐框架系统所拥有的蜜罐之一,是该系统中的一个低交互型蜜罐。Telnet蜜罐使用了Go 语言内置的net 包,用net.Listen()函数监听网络中尝试连接Telnet端口的主机,同时并发运行自定义方法Telnetlogin,Telnetlogin方法使用了net.Conn()函数以此获取Telnet连接中的连接IP以及输入的账户信息.

(3)Web蜜罐

Web 蜜罐为蜜罐框架系统所拥有的蜜罐之一,同样是该系统中一个低交互型蜜罐。Web蜜罐设置了一个前端登录页面以获取攻击者输入的账户信息。主要是采用Go 语言的一个微框架Gin,通过使用Gin 中的Context 的Param 方法来获取攻击者所提交的请求参数,其中包括了尝试登录的用户名与密码,将获取到的信息传至管理端再写入数据库,或直接写入数据库并在管理页面进行展示。

2.2.2 邮件告警模块

邮件告警模块包括自动群发邮件告警功能与手动邮件告警功能两个部分,且该两个部分均使用自定义方法SendMail,SendMail方法使用了Go 语言的gomail 库中的多个函数。同时本模块中告警邮件的创建与发送需要用到SMTP服务器,此处使用了QQ 邮箱充当邮件服务器,以此完成邮件的创建与发送。

(1)自动群发邮件告警功能

自动群发邮件告警功能是需先保证在管理页面对E-mail群发进行配置且状态为启用状态,在该页面进行的配置会全部写入数据库中的trap_setting 表。该功能是由自定义方法alert 实现,该方法会先查询trap_setting 表中E-mail 群发的相关配置并判断该配置的状态是否为启用,若为启用,则调用SendMail 发送邮件。alert 方法会在攻击数据写入数据库时并发运行。

(2)手动邮件告警功能

手动邮件通知功能同样要保证在管理页面对E-mail 通知进行配置且状态为启用状态。该功能是通过前端使用jQuery 中的Ajax 方法,将关键数据以POST 方式发送至后端POST 请求,从而调用自定义方法SendEmailToUsers,该方法通过使用Gin 中的Context 的Param 方法获取数据,与自动群发邮件功能一样同样会判断Email 通知是否为启用状态,若为启用,则将获取到的数据传参至SendMail方法,发送邮件。

2.2.3 前端展示模块

前端展示模块包括仪表盘页面、猎物列表、被管理端列表、手动邮件告警页面与邮件告警配置页面五大部分。

(1)仪表盘页面

仪表盘页面是用户登入管理页面后的第一个页面。该页面展示了管理端的API 与虚拟蜜罐开启状态,目前SSH 蜜罐、Telnet 蜜罐与Web蜜罐的数量以折线图形式展现,最近24 小时三个蜜罐的数量统计。其中折线图是通过使用ECharts 可视化库[9]得以实现,数据的统计是通过前端使用Ajax 方法以GET 方式发送至后端GET请求,从而调用GetTrapData()进行统计。

(2)猎物列表

猎物列表是在前端中较为重要的一个页面。该页面展示了虚拟蜜罐捕获到的数据,包括时间、蜜罐类型、攻击IP、攻击IP归属地等信息,并且点击该页面中的“点击查看”,攻击数据将会以弹窗形式展示在该页面中。同时也可以对指定蜜罐进行删除操作。

(3)被管理端列表

被管理端列表直观地展示了被管理端的SSH 蜜罐、Telnet 蜜罐与Web 蜜罐是否为启用状态,每60 秒获取一次被管理端的状态,同时也提供了删除指定被管理端的操作。若误删了被管理端,则等待60 秒左右刷新页面,被管理端即可重新展示在该页面。

(4)手动邮件告警页面

手动邮件告警页面与邮件告警模块中的手动邮件告警功能相对应。用户需在该页面中填写邮件标题、发件人邮箱、收件人邮箱与邮件内容,点击“发送邮件”,弹出“success”提示字样,即为发送成功。

(5)邮件告警配置页面

邮件告警配置页面是对自动群发邮件告警功能与手动邮件告警功能进行相关配置。两个配置中都需要填写正确可用的SMTP 服务认证,此处使用了QQ 邮箱作为SMTP 服务器。在此页面中所有的配置都将写入数据库的trap_setting表中。其中E-mail 群发页面可填写多个收件人邮箱,当有新的攻击数据生成时,会自动发送至指定收件人邮箱。

3 系统测试

3.1 实现与运行环境

(1)实现环境

整个系统代码使用Go 语言1.17 版本,Go⁃land作为系统开发工具,SQLite作为数据库。

(2)运行环境

浏览器:火狐浏览器;Docker 服务器:Centos7 操作系统;管理端:RedHat7 操作系统;被管理端:Centos7 操作系统;数据库系统:SQLite数据库。

3.2 测试结果

经过多次测试,该系统的所有功能模块均运行正常,且最初需求分析所涉及到的功能模块全部开发完成。三个虚拟蜜罐告警较为准确,且上报结果及时。邮件告警的发送几乎无延迟现象,可以及时地发送至收件人邮箱。前端展示页面简洁大方,在查看猎物列表时可以按照不同的蜜罐类型进行筛选,亦可根据项目名称或来源IP 进行搜索,同时还支持分页展示,大大提高了实用性与便捷性。

猜你喜欢

蜜罐攻击者邮件
基于James的院内邮件管理系统的实现
来自朋友的邮件
◆素材
蜜罐蚁
被自己撑死的蜜罐蚁
正面迎接批判
一封邮件引发的梅赛德斯反弹
正面迎接批判
哈密瓜:乡间蜜罐
有限次重复博弈下的网络攻击行为研究