场景化网络空间安全动态测评系统设计与实现

2020-06-16 00:44方立刚
苏州市职业大学学报 2020年2期
关键词:功能模块关卡网络空间

方立刚,张 鹏

(苏州市职业大学 计算机工程学院,江苏 苏州 215104)

网络空间安全(cybersecurity)已引起了世界各国高度重视,决定了军事行动的成败,关系到国家的安全。美国多次提出了网络空间安全符合性测试要求,美国国防部在《网络空间安全实施指南》和《网络空间安全测试和评估指南》中提出了详细的信息系统测试和评估程序[1]。这些政策的落实都需要一个虚拟的环境来实施测试和评估工作。目前,我国在网络空间安全测评上还缺少有效的定期考核机制,网络空间安全过份依赖网络安全产品,而对安全从业人员的技术重视不够,不能定期检验从业人员掌握安全技术情况。为了能够动态测评用户的网络空间安全水平,在现有网络空间安全测评系统的基础上,设计并开发了基于B/S架构场景化的网络空间安全动态测评系统。

1 关键技术

1.1 Flask Web框架

Flask Web框架是基于WerkzeugWSGI工具箱和Jinja2模板引擎,使用Python编写的轻量级Web应用框架[1]。Flask主要依赖路由、调试和Web服务器网关接口,子系统由Werkzeug提供,模板系统由Jinja2提供。

Werkzeug是一个全面的WSGI应用程序库。最初是WSGI应用程序中各种实用程序的简单集合,现已成为最高级的WSGI实用程序库之一。Werkzeug支持Unicode,并且不强制执行任何依赖项,且可以选择模板引擎,数据库适配器,甚至如何处理请求[2]。

Jinja2以Django的模板为模型,是一种现代且设计友好的Python模板语言。借助可选的沙盒模板执行环境,可以快速、广泛、安全地使用[3]。

1.2 JavaScript

JavaScript是一种非常松散的面向对象语言,也是Web开发中极受欢迎的一门语言。JavaScript是一种全新的动态语言,它植根于全球数亿网民都在使用的Web浏览器之中,致力于增强网站和Web应用程序的交互性[4]。

1.3 CTFd框架

CTFd使用Python语言编写,并使用Flask Web框架。CTFd框架是夺旗框架,专注于易用性和可定制性。CTFd可自动生成一个记分牌,自动解决平局并支持冻结挑战[5]。CTFd支持两种改变用户或团队得分的模型。如果CTFd框架的功能集不足,则可以通过使用插件和主题控制其外观和功能以及其他方面。

1.4 SQLite3

SQLite3是一个自包含的、无服务器、零配置、事务性的SQL数据库引擎。SQLite3是一个C库,它提供轻量级的基于磁盘的数据库,不需要单独的服务器进程,并且允许使用SQL查询语言的非标准变体访问数据库。某些应用程序可以使用SQLite3进行内部数据存储,也可以使用SQLite3对应用程序进行原型设计,然后将代码移植到更大的数据库中,例如PostgreSQL或Oracle。SQLite3是世界上部署最广泛的数据库[6]。SQLite3的代码在公共领域,无论是出于商业目的还是私人目的均可以免费使用。

1.5 Docker

Docker是一种运行于Linux和Windows上的软件,用于创建、管理和编排容器[7],是一个用于开发、交付和运行应用程序的开放平台。Docker是一个能够将应用程序与基础架构分开,从而可以快速交付的软件。借助Docker可以用与管理应用程序相同的方式来管理基础架构。通过采用Docker的方法快速交付、测试和部署代码,可极大减少编写代码以及在生产环境中运行代码之间的延迟。Docker提供了在松散隔离的环境(容器)中打包以及运行应用程序的功能。隔离和安全性可以在给定的主机上同时运行多个容器。容器是轻量级的,不需要虚拟机管理程序的额外负载,可直接在主机的内核运行。Docker可以为部署网络空间安全动态测评系统提供良好的部署环境,减少开发前期环境搭建所花费的时间[8]。

2 系统设计

网络空间安全动态测评系统是采用浏览器/服务器(B/S)模式,并使用Flask框架提供由Python编写的轻量级Web应用框架。使用JavaScript编程语言为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。用户操作浏览器发送请求,服务器接收并处理请求后返回结果给用户。网络空间安全动态测评系统分为个人用户模式和团队模式。用户分为普通用户和管理员两类。在系统中,系统平台用户的功能模块如图1所示。

2.1 普通用户的功能模块

1) 用户注册功能模块。该模块在用户注册账户时启用,检查用户注册账户时,输入的账户名称、密码、电子邮箱等相关注册信息是否符合平台要求,并给予用户可视化的提示信息,为用户提供良好的交互。

2) 个人生涯功能模块。记录着用户在平台动态测评的所有数据,这些数据可视化显示在该功能模块中。

3) 用户排行榜功能模块。记录所有用户的动态测评记录,根据用户所获得的积分进行排名。将所有用户动态测评数据做成图表形式可视化显示在页面。

4) 动态测评模块。该模块动态测评内容由平台管理员设计,是平台的核心功能模块。动态测评共有两大不同场景设计,每个场景为各自动态测评题库的主题,用户可自由选择场景进行动态测评。用户的动态测评数据为其他功能模块提供数据上的支持。

网络空间安全动态测评系统的两个子场景分别为红客密室之密室逃脱场景和红客密室之古典图书馆。每个场景都有各自特有的主题,并且各个主题都有鲜明的特点,据此进行区分。当激活到该场景时,在轮播图片上添加文字描述和声音提示,如图2所示。

5) 团队注册管理功能模块。为用户组队或加入队伍提供支持,用户可以自行组建团队,组建团队需提供团队名称以及团队密码。用户还可以设置团队队长等其他子功能。用户加入团队需提前向团队成员索要团队账户和密码。

2.2 管理员的功能模块

1) 平台配置管理功能模块共有7个子功能,分别为平台资料、平台账号、平台基本设置功能、平台电子邮箱、平台时间、平台备份、平台重置。平台资料配置功能可以设置平台的徽标、平台的名称、平台模式的选择、平台页面主题风格设置。平台账号配置功能可以设置用户注册时使用邮箱的白名单、用户是否验证电子邮件、用户是否可以更改用户名。平台基本设置功能有用户测评结果、其他人是否能够查看用户积分,以及账户、注册可见性设置。

2) 用户管理功能模块。支持用户名关键字匹配搜索,方便管理员快捷搜索某个用户,可对某个用户进行增加、删除和修改操作。进入某个用户参数页面,可以查看用户动态测评相关记录并且能够修改其测评的相关信息数据;可以查看用户登录记录信息、用户最近登录的时间和IP地址。

3) 测评资源管理功能模块。可以增加删除动态测评时所需的相关文件。测评资源的加入,可以使动态测评更加多样性。

4) 测评题库管理功能模块。管理员可以对动态测试题库进行增加、删除和修改操作,对动态测试题库的某个测试关卡进行修改,如增加、删除、修改关卡的Flag值、关卡的标签、关卡的提示,设置进入该关卡的前提条件以及关卡的基本参数设置等操作。

5) 可视化管理功能模块。平台动态测评信息统计可视化,只允许管理员查看,可视化以多个图表的形式在统计模块中显示,展示平台用户数目,关卡挑战的次数最值、正误提交次数等相关信息。

6) 团队管理功能模块。用于增加、删除以及修改团队信息等操作。该功能模块记录团队所有成员动态测评的数据,并用图表的形式显示在该页面。管理员在团队模式下所具有的功能模块是在个人模式的基础上增加许多功能模块。

3 系统实现

3.1 环境搭建

在Ubuntu系统上安装Docker、Docker Compose,并使用命令克隆CTFd存储库,修改docker-compose.yml存储库中的文件SECRET_KEY。修改内容如下所示,以CTFd服务为指定环境[9]。

3.2 平台前端

平台前端使用JavaScript为页面增加动态效果,BootStrap4则可以构建响应式的页面,并且移动设备也能为用户提供友好的体验[10]。

3.2.1 页面主界面

本动态测评系统平台的主界面分为上下两块区域,上方为导航栏,下方为内容栏。其中导航栏含有平台所有主要的操作按钮,分别为用户注册模块、个人生涯模块、个人设置模块、用户退出模块、平台通知模块、用户信息模块、团队模块、排行榜(记分牌)模块、动态测评(挑战)模块。

管理员用户进入管理模式,功能模块更改为平台统计模块、平台通知管理模块、平台网页管理模块、用户管理模块、团队管理模块、动态测评可视化管理模块、动态测评题库及资源管理模块、用户提交测评记录管理模块、平台配置参数管理模块。

3.2.2 动态测评界面

动态测评界面由主场景轮播页面和子场景页面两部分组成。主场景轮播页面是为用户选择所想测评类别的题库;子场景页面是显示动态测评的测试题目的页面。

用户进入所选题库的实现方法如下:使用Bootstrap4框架,为页面添加一个轮播。该轮播由页面两侧按钮、轮播图片以及轮播的指示符组成。为轮播添加脚本,设置轮播次数为两次,并使其手动切换场景,产生轮播图片切换过渡动画效果。在两个子场景中,为场景图片添加链接属性,用户点击图片,页面将会跳转到相应场景的关卡。

3.3 页面后端

3.3.1 测评过程

前端提交动态测评请求后,后端将接受到用户提交的Flag值和题目的id。然后进入测评过程,整个过程为:①用户选择场景类别,前端向后端发送含有该类别的请求;②后端接受到该类别的请求,并对接受的请求信息中的URL进行解码;③后端解码得到类别,遍历整个该类别的题库,向前端动态返回相关数据;④前端接受到该类别的相关题库,在浏览器中显示该类别的子场景页面;⑤在某个子场景页面中,用户提交某个题目的Flag值,前端向后端发送提交请求;⑥后端进行Flag值判断,判断结束后,后端将用户提交的Flag值和题目id记录存储在SQLite3数据库中submissions表中;⑦后端返回判断的结果,如果正确,则会提示“Congratulation!”的文字信息并在几秒后进入下一题。若不正确,则在模态框下方滑出“不正确”文字信息的提示。

3.3.2 页面传参,后端返回相关数据的实现方法

1) 主场景轮播变化。在主场景轮播中,实现点击轮播图片传递参数,在主场景轮播页面中,为轮播图片添加超链接标签。在该页面脚本中为轮播图片添加click()方法,使其动态的为轮播图片标签添加“href”属性值。

为主场景轮播页面添加getQueryString函数,使用正则寻找以&+url参数名字=值+&,&可以不存在,忽略大小写。找出“ ?”之后匹配正则的字符串,并对所选的字符串进行解码。获取到scene=后面值,该值赋值为categroy,并动态添加子场景页面显示的类别。

2) 子场景主题关卡的变化。由于每个关卡设置了前提条件,读取数据库内容时,只返回未被设置前提条件的关卡。在子场景页面脚本中,遍历challenges字典中的category值是否与页面传参的相等,若相等,则将该challenges索引下的赋值给chalinfo。为子场景添加按钮,并在前端修改按钮的CSS样式。提取user_solves使用indexOf()方法查找chalinfo.id是否存在,不存在,则返回-1。判断用户是否已通过该关卡,若为-1,则正常显示关卡按钮;若非-1,则为按钮添加“Congratulation!”的文字信息。

按钮图片读取方式:首先,从数据库读取图片存放的绝对路径,该字符串存放于response.data并传递出来。其次,在子场景页面脚本文件中,添加jQuery脚本,页面预载时,为id、nosolve-chal标签添加图片。

4 结论

1) 采用Flask技术,实现了一个基于B/S架构的场景化网络空间安全动态测评系统,并使用SQLite3数据库作为数据的存储方式,实现了资源共享、用户互动、动态更新、数据备份的功能。

2) 为被测评者提供良好的测评环境。动态的题库数据,使测评更有灵活性,并可视化的显示测评的结果,让被测评者直观了解自己的不足,使其在网络空间安全理论和实践方面更加完善。

3) 用户测评结果可以为平台后续题库设计提供思路,使平台的测评更加可靠。通过场景化网络安全动态测评系统的建设和应用,可以为行业培养所需专业安全人员,为国家输送网络安全建设专业人才。

猜你喜欢
功能模块关卡网络空间
本期主题
——五月,是诗的样子!
疯狂冒险岛
网络空间攻防对联合作战体系支援度评估指标体系构建
《网络空间安全》订阅单
《网络空间安全》订阅单
《网络空间安全》订阅单
商业模式是新媒体的核心
基于ASP.NET标准的采购管理系统研究
高校二手交易网络平台功能及技术框架分析与设计
时空穿梭