基于CTF模式的网络教学平台探索*
2021-11-12江西外语外贸职业学院电子商务学院江洋
江西外语外贸职业学院电子商务学院 江洋
CTF是Capture The Flag(夺旗赛)的简称,已经成为全球范围网络安全圈流行的竞赛形式,可以很好地锻炼网络安全人员的技术水平。如果能够在网络安全类课程中引入CTF的教学和练习模式,可以达到更好的教学效果。故而我们决定设计和搭建这样一个平台。首先来看看这个网络教学平台需要达到的功能要求,首先,需要先在系统建立一个题库,包含CTF常见的几大类题型(WEB,CRYPTO,REVERSE,PWN,MISC),要对题库按照题型进行分类,每一类题型中分出不同的难度等级,超级管理员应该具有题库的管理功能。其次,这个系统需要最基本的学生注册和登录功能,教师账号需要有班级设置和作业布置、批改的功能。超级管理员可以对教师账号和学生账号进行管理。为了增加学生的学习兴趣和学习积极性,增加组队PK的竞赛功能。参见图1。
图1 网络安全平台功能分析
技术架构选择方面,使用Python的WEB框架Flask,存储数据库使用mysql,缓存数据库使用redis。选好了技术架构之后,进行关系型数据库的设计,首先,需要一个题库类型的数据表,字段需要包含主键、类型名称。其次,需要一个题库表,需要包含的字段有主键、习题名称、习题类型ID、习题详情。针对账号系统,需要一个教师账号表、一个学生账号表、一个班级表、一个班级成员表。针对作业布置系统,需要设计作业表。针对组队PK系统,我们需要设计队伍表、竞赛试题表。
基于设计好的数据库系统,进行WEB层面的设计和开发。首先设计用户登录系统,这里,使用内存数据库redis来进行会话管理,首先用户输入用户名和密码,服务器验证通过之后,在redis生成一个键值对,键为一个随机值,通过http返回给浏览器存储于cookie中;对应的值记录了用户的身份信息。浏览器访问服务器的请求中携带cookie信息,服务器接收到请求,根据cookie信息在redis中查找用户对应的身份信息,如果查到了就可以识别为某个具体的用户,如果没有查询到redis中的记录情况,有可能是登录信息过期,需要引导用户重新登录。
其次,需要对题库系统进行设计与开发。整个系统的超级管理员应该能够对习题库进行增删改查操作。教师用户可以从题库中进行特定条件的筛选和查看,同时还可以选择一部分题目发布作业。因为题目需要进行分类,所有这里系统中会有一个题库类型表,在习题表中添加一个类型字段,在这个字段填写习题类型编号来标记每一道题目的具体类型,参见图2。
图2 关系型数据库设计图
再次,搭建组队PK竞赛系统,这里编写WEB逻辑,让普通用户可以组队,超级管理员可以进行竞赛题目的挑选和组织,同时,在组队竞赛的过程中,以计分板的形式来显示各个队伍的得分排行榜。为了完成这个功能,需要一个队伍得分记录表,队伍字段填写队伍的主键ID,题目记录解决的CTF题目ID,得分字段用来记录对应的得分。为了做出排行版的功能,需要不断地查询某个队伍的所有得分记录,并且相加算出总分。这样的操作,需要对每个队伍都计算一遍。最后还要把所有队伍的分数从高到低排序进行显示。为了降低mysql数据库的连接和查询负载,在系统中使用Linux的crontab定时任务,每分钟执行一次以上操作,把查询结果存储到内存型数据库redis中,在WEB服务中,每次访问排行榜功能页面的时候,系统都会从redis中读取排行榜数据,从而降低了mysql关系型数据库的工作负担。
最后,开始整个系统的搭建工作,操作系统选择了Centos7 64位版本的Linux,容器技术方面选择了Docker技术,接着使用Docker运行Flask(负责系统Web逻辑)、mariadb(存储关系型数据)和redis(负责会话管理和数据缓存)。
在CTF题型选择方面,WEB、CRYPTO、REVERSE、PWN、MISC这 五个方向都有所涉及,在WEB方面,将SQL注入和代码审计作为重点题型。SQL注入是Web系统存在最广泛的漏洞,原理相对简单,主要是由于系统开发人员在开发客户和关系型数据库交互的逻辑代码时,没有对客户输入的字符串进行转义和过滤,处理和限制不够严谨,导致客户可以通过输入他精心构置拼接的字符串,从而非法获取得到信息系统数据库当中的数据。SQL注入有很多种类,按照数据类型进行分类有字符型、数字型和搜索型,按照Web应用程序提交方式可以分类为HTTP请求头注入、POST型、GET型、Cookie型;按照执行的具体效果可以分类为堆查询注入、盲注、报错注入和联合查询注入。
代码审计具体指的是对源代码进行检查,寻找代码中的安全缺陷、漏洞和bug,这需要操作者有多方面的技能和技术,其中包括编程技术、漏洞原理、中间件和操作系统的系统服务,前端技术涉及html、javascript、dom等,相关可以挖掘的漏洞有xss漏洞、CSRF漏洞和JSON劫持等。后端编程语言涉及php、python和java,目前基本上所有的WEB应用程序都是基于MVC模式编写的,理解MVC的工作模式和原理,才能很好地进行后端漏洞的挖掘和利用。MVC即是model、view和controller。model就是模型层,用来和持久层对接,能够对关系型数据库进行增删改查的具体操作。view是视图层,负责html模板的数据渲染,controller是控制器,可以和相应的url进行绑定,从而进行相应业务的处理,接受HTTP请求,进行HTTP响应。MVC是一种业务逻辑,显示界面和数据分离的方式来组织代码,将具体的业务逻辑组织到一个组件里面,在用户交互、改进和个性化制定用户界面的同时,不用重新改动业务逻辑。
在CRYPTO方面,主要涉及古典密码学和现代密码学,古典密码学是一种实用性存在,它的编码和破译常常依赖于设计者和破解者的技巧和创造力,主要包含三种类型,单表替换加密、多表替换加密和特殊的加密方式。而现代密码学来源于20世纪中期的大量理论研究,1949年香农发表题为《保密系统的通信理论》的论文,标志着现代密码学的开端。现代密码学主要包含四个方面:对称加密(典型应用有DES,AES,RC4),非对称加密(典型应用有椭圆曲线加密,RSA,EIGamal),哈希函数(典型应用有SHA-1,SHA-512,MD5),数字签名(典型应用有DSA签名,RSA签名,EIGamal签名)。
在REVERSE方面,主要涉及反汇编和调试等技术手段,分析计算机应用程序的二进制代码,研究程序的具体算法实现细节和原理。主要应用范围有应用软件漏洞挖掘,移动安全,软件的破解和反破解,恶意代码地分析和判断。具体题目考察形式是通过对一个二进制应用程序(windows平台的exe文件和dll文件或者是Linux平台的elf文件)进行逆向分析,分析和掌握应用程序内部的运行机制,考察形式主要看最终是否能够得到一个预先设置好的密码,或者编写一个注册器,用来在给定一个用户名的情况下,计算出对应的验证码。
在PWN方面,主要涉及缓冲区溢出漏洞的挖掘和防护,计算机应用程序的运行依赖栈中的函数调用栈。缓冲区溢出具体是指在栈内写入超出长度限制的数据,从而干扰程序运行的流程和方向,进而获得系统控制权的攻击手段。为了实现缓冲区溢出,需要满足两个基本条件:应用程序要有向栈内写入数据的行为,应用程序没有限制写入数据的长度。题目按照技术手段分为三个大类:修改应用程序返回地址,使它指向溢出数据中的一段shellcode;修改应用程序返回地址,让它指向计算机内存中已经存在的某个函数;修改应用程序返回地址,让它指向内存中已经存在的一段二进制指令。
在MISC方面,题目涉及电子取证、人肉搜索、数据分析、流量分析和数据隐写。主要考察做题人的快速理解能力、学习能力、日常知识积累,反应速度和联想能力。
所有习题,都会通过Docker封装上传到系统,Docker是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。使用Docker可以轻松部署开发好的应用程序。使用Docker部署应用程序有很多优点:可以垂直的堆叠服务;可以增加和分发容器副本;可以共享服务器CPU内核;可以封装复杂的应用程序。
通过以上的设计和技术选择,设计并搭建了一个基于CTF模式的网络教学平台,导入题库之后,把这个平台引入到了高职网络安全的课程教学中,取得了很好的教学效果。