网络攻防竞赛平台的设计与实现

2018-01-25 03:28黄君阳莫永华
现代计算机 2017年36期
关键词:靶机参赛选手管理员

黄君阳,莫永华

(桂林电子科技大学信息科技学院,桂林 541004)

0 引言

互联网飞速发展的同时,信息化安全与国家安全紧密相连,培养网络安全技术优秀人才,满足互联网发展需要。在网络安全人才培养方面,单靠理论学习不能满足实践应用的需要,一种夺旗赛的实践形式适应了专业培养网络安全人才发展。CTF(Capture The Flag)网络攻防竞赛在网络安全领域中是网络安全技术人员之间进行技术竞技的一种比赛形式。其比赛大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一串具有一定格式的字符串或其他内容,并将其提交给主办方,从而夺得分数。现在CTF比赛培养网络安全人才的方式渐渐在国内发展起来了,此类比赛能够发掘网络安全优秀人才,并帮助其迅速提高安全技能。

1网络攻防竞赛功能需求与技术介绍

1.1 系统功能需求

国外目前对于CTF竞赛平台的主流研究采取攻防(Attack-Defense)的赛制,这种赛制已经日渐成熟,很多国际比赛都采用这样的赛制,在比赛日程内让参赛选手相互进行漏洞挖掘及利用,采取攻击来夺取对方靶机的Flag并赢得相应的积分,同时还要采取不违反比赛规则的各种手段对自己的靶机进行防御,防止对方夺取到己方的Flag。国内许多CTF线下赛平台被各大安全服务产商用于商业意义及人才储备计划所开发,虽然已有较为稳定的技术,但他们仍有不足的方面:

(1)价格普遍过高;

(2)平台复杂程度不利于后期变动及维护;

(3)漏洞靶机不便于还原及维护。

针对以上这些问题,本文主要任务有:

(1)控制开发成本,基于网页来开发整个平台;

(2)简化平台复杂程度,提高平台运行能力且方便后期管理及维护;

(3)漏洞靶机采用Docker这类虚拟化技术,使得靶机在崩溃的情况下方便及时采取还原措施。根据需求设计网络攻防竞赛需求具体如下图:

功能需求说明如下:

登录模块:常规的登录功能;

参赛选手操作模块:用于参赛选手登陆之后的相关操作页面;

管理员操作模块:用于管理员登陆之后的相关操作页面;

Flag提交模块:用于参赛选手提交Flag获取积分;

团队管理模块:用于管理员对参赛团队进行相关操作;

公告板板模块:用于管理员在比赛中发表相关信息;

积分榜模块:用于参赛选手在比赛中查看当前积分榜;

展示模块:用于展示页面向大众展示信息。

图1 系统功能需求

1.2 系统技术介绍

(1)服务器端环境:能够运行VMware等虚拟化程序,且在上面安装能够运行PHP解析程序及支持平台系统的Web服务器软件的相应的服务器系统的计算机或服务器。

(2)靶机环境:对于靶机环境,能够使用Docker等虚拟化程序及支持其软件的计算机或服务器。

(3)参赛选手环境:对于参赛选手的环境没有限制,由选手自行选择。

在服务器端主要采用PHP语言及其中的Laravel框架来编写相应功能模块,结合前端HTML5+CSS3技术,引用了JavaScript和其中的jQuery框架,使本系统实现了一个良好美观的操作界面及展示界面。

2 竞赛系统设计

2.1 功能模块设计

功能模块的设计主要分为三个模块,1.参赛选手相关操作模块;2.管理员相关操作模块;3.无需登录即可使用的展示模块。

(1)在参赛选手相关操作模块中,包含以下功能:

a.查看当前轮次得失积分;

b.提交Flag获取积分;

c.查看己队靶机信息

(2)在管理员相关操作模块中,包含以下功能:

a.管理团队:添加新团队;删除一个团队;修改团队密码;团队加分减分

b.发布公告:发布扣除违规团队相应积分信息;发布Tips等公告信息

(3)在展示模块中,包含以下功能:

a.实时积分榜,实时更新参赛团队积分变化

b.显示当前时间及当前轮次

c.实时显示攻击信息

2.2 数据库设计

数据库设计遵循命名规范化和数据标准化的原则。

本课题中,一共有announce,users,points,check,dockers,flags六个数据库表。下面主要介绍核心4个表。

(1)公告表(Announce)

它主要存储id标识、公告的标题(title)、公告内容(body)、创建时间(created_at)。

表1 Announce表

(2)用户表(users)

它主要存储id标识、用户名(name)、参赛团队密码(password)、管理员标识(isAdmin)。

表2 Users表

(3)团队积分表(points)

它主要存储 id标识、团队 id(team_id)、分数(points)信息。

表3 Points表

(4)flags表

它主要存储 id标识,靶机 id(docker_id)、flag信息。

表4 Flags表

3 系统实现与测试

系统有两大部分组成:前台部分用户操作模块和后台部分管理模块。

3.1 前台部分

(1)登录模块

团队账号由管理员添加,在平台主界面右上角可以看到Login登录按钮。管理员与团队使用同一个登录模块,在用户登录之后,用户表(users)中有isAdmin标识,若isAdmin为1,此用户为管理员,可进入后台管理页面进行管理的相关操作;反之,参赛团队用户只能进行查看队伍信息、公告板、积分板及提交flag操作。

(2)参赛选手登陆后信息模块

参赛选手用户登陆后,页面将跳转到信息页面,此页面将输出己方团队的总分,包括加分及减分;还有在当前轮次中,己方团队的总分,包括加分及减分;还输出己方团队所拥有的靶机ip、用户名、密码信息;最后此页面还有提交flag的功能。

(3)公告板页面

竞赛进行过程中,若出现参赛团队进行了违规的相关操作,或是遇到需要比赛主办方发表相应提示或其他相关信息的情况,则管理员将会通过公告板,向参赛选手发布通知等信息。

管理员输入公告标题(title),内容(body),点击确认发送后,后端获取当前服务器时间信息与公告标题、公告内容一起写入数据库Announcement表中,最后在公告板页面按最新更新时间排序后输出。

(4)积分板模块

积分板模块是让参赛选手在比赛进行过程中方便在本机查看所有参赛团队积分的同时,还能够进行别的操作。

积分板将取出当前数据库中分数(points)表的数据,并在后端进行排序后输出给前端与用户交互。

图2 参赛选手登录页面

图3 选手登录后信息页面

图4 参赛团队积分展示

3.2 后台模块

由于整个PHP后端使用了Laravel框架,虽然使得开发效率大大提高,难度降低,但同时也使得一些模块的功能代码嵌入在框架中,较难去阅读或是修改。

后台模块包括:团队管理模块、提交Flag系统自动统计模块、公告发布模块。下面主要介绍团队管理模块。

管理员登录之后,可以在管理页面对参赛团队进行管理操作。管理页面首先将读取数据库分数表中参赛团队的分数,并定义了一个teamIndex()函数,用来显示所有参赛团队当前的总分。以及给每个参赛队设立了更改密码及删除团队的按钮。更改团队账号密码,定义了一个 teamChpw(Request$request)函数,并且由于基本的安全性考虑,限定方法只能为POST方法。同样,添加新团队,删除某个团队也是限定POST方法。点击某支团队的更改密码按钮,将会直接要求输入新密码,函数先将新密码Hash后对数据库用户表里的password字段进行update更新操作,最后将在管理页面输出修改成功的信息。添加一支新团队,管理页面将弹出输入界面,要求输入团队用户名及密码,输入之后,函数teamAdd(Request$request)将团队名及密码写入数据库users表中存储,最后在管理页面同样会显示添加成功的信息。以下给出添加团队功能核心代码:

4 结语

漏洞靶机采用Docker虚拟化技术,使得靶机在崩溃的情况下方便及时采取还原措施。网络攻防竞赛系统开发基于网页实现整个平台功能,简化平台复杂程度,提高平台运行能力且方便后期管理及维护,这样的轻型网络安全技术人才培养平台,满足网络安全技术训练与比赛。

[1]李秋香.国外网络靶场技术现状及启示[A].第29次全国计算机安全学术交流会论文集[C],2014.

[2]曾金龙等著.Docker开发实践[M].人民邮电出版社,2015-07-01.

[3]Bartosz Porebski等著.PHP框架高级编程[M].清华大学出版社,2012-2.

猜你喜欢
靶机参赛选手管理员
哈哈哈哈……你丑得真别致
我是图书管理员
我是图书管理员
可疑的管理员
靶机系统的发展趋势
“鸟人”
美国克雷托斯公司扩大靶机研发和制造
谁有“洪荒之力”里约奥运会收入最高的参赛选手
让管理员管不了的名字
靶机