方立剛,張 鵬
(蘇州市職業(yè)大學(xué) 計算機工程學(xué)院,江蘇 蘇州 215104)
網(wǎng)絡(luò)空間安全(cybersecurity)已引起了世界各國高度重視,決定了軍事行動的成敗,關(guān)系到國家的安全。美國多次提出了網(wǎng)絡(luò)空間安全符合性測試要求,美國國防部在《網(wǎng)絡(luò)空間安全實施指南》和《網(wǎng)絡(luò)空間安全測試和評估指南》中提出了詳細的信息系統(tǒng)測試和評估程序[1]。這些政策的落實都需要一個虛擬的環(huán)境來實施測試和評估工作。目前,我國在網(wǎng)絡(luò)空間安全測評上還缺少有效的定期考核機制,網(wǎng)絡(luò)空間安全過份依賴網(wǎng)絡(luò)安全產(chǎn)品,而對安全從業(yè)人員的技術(shù)重視不夠,不能定期檢驗從業(yè)人員掌握安全技術(shù)情況。為了能夠動態(tài)測評用戶的網(wǎng)絡(luò)空間安全水平,在現(xiàn)有網(wǎng)絡(luò)空間安全測評系統(tǒng)的基礎(chǔ)上,設(shè)計并開發(fā)了基于B/S架構(gòu)場景化的網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng)。
Flask Web框架是基于WerkzeugWSGI工具箱和Jinja2模板引擎,使用Python編寫的輕量級Web應(yīng)用框架[1]。Flask主要依賴路由、調(diào)試和Web服務(wù)器網(wǎng)關(guān)接口,子系統(tǒng)由Werkzeug提供,模板系統(tǒng)由Jinja2提供。
Werkzeug是一個全面的WSGI應(yīng)用程序庫。最初是WSGI應(yīng)用程序中各種實用程序的簡單集合,現(xiàn)已成為最高級的WSGI實用程序庫之一。Werkzeug支持Unicode,并且不強制執(zhí)行任何依賴項,且可以選擇模板引擎,數(shù)據(jù)庫適配器,甚至如何處理請求[2]。
Jinja2以Django的模板為模型,是一種現(xiàn)代且設(shè)計友好的Python模板語言。借助可選的沙盒模板執(zhí)行環(huán)境,可以快速、廣泛、安全地使用[3]。
JavaScript是一種非常松散的面向?qū)ο笳Z言,也是Web開發(fā)中極受歡迎的一門語言。JavaScript是一種全新的動態(tài)語言,它植根于全球數(shù)億網(wǎng)民都在使用的Web瀏覽器之中,致力于增強網(wǎng)站和Web應(yīng)用程序的交互性[4]。
CTFd使用Python語言編寫,并使用Flask Web框架。CTFd框架是奪旗框架,專注于易用性和可定制性。CTFd可自動生成一個記分牌,自動解決平局并支持凍結(jié)挑戰(zhàn)[5]。CTFd支持兩種改變用戶或團隊得分的模型。如果CTFd框架的功能集不足,則可以通過使用插件和主題控制其外觀和功能以及其他方面。
SQLite3是一個自包含的、無服務(wù)器、零配置、事務(wù)性的SQL數(shù)據(jù)庫引擎。SQLite3是一個C庫,它提供輕量級的基于磁盤的數(shù)據(jù)庫,不需要單獨的服務(wù)器進程,并且允許使用SQL查詢語言的非標準變體訪問數(shù)據(jù)庫。某些應(yīng)用程序可以使用SQLite3進行內(nèi)部數(shù)據(jù)存儲,也可以使用SQLite3對應(yīng)用程序進行原型設(shè)計,然后將代碼移植到更大的數(shù)據(jù)庫中,例如PostgreSQL或Oracle。SQLite3是世界上部署最廣泛的數(shù)據(jù)庫[6]。SQLite3的代碼在公共領(lǐng)域,無論是出于商業(yè)目的還是私人目的均可以免費使用。
Docker是一種運行于Linux和Windows上的軟件,用于創(chuàng)建、管理和編排容器[7],是一個用于開發(fā)、交付和運行應(yīng)用程序的開放平臺。Docker是一個能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付的軟件。借助Docker可以用與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過采用Docker的方法快速交付、測試和部署代碼,可極大減少編寫代碼以及在生產(chǎn)環(huán)境中運行代碼之間的延遲。Docker提供了在松散隔離的環(huán)境(容器)中打包以及運行應(yīng)用程序的功能。隔離和安全性可以在給定的主機上同時運行多個容器。容器是輕量級的,不需要虛擬機管理程序的額外負載,可直接在主機的內(nèi)核運行。Docker可以為部署網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng)提供良好的部署環(huán)境,減少開發(fā)前期環(huán)境搭建所花費的時間[8]。
網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng)是采用瀏覽器/服務(wù)器(B/S)模式,并使用Flask框架提供由Python編寫的輕量級Web應(yīng)用框架。使用JavaScript編程語言為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。用戶操作瀏覽器發(fā)送請求,服務(wù)器接收并處理請求后返回結(jié)果給用戶。網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng)分為個人用戶模式和團隊模式。用戶分為普通用戶和管理員兩類。在系統(tǒng)中,系統(tǒng)平臺用戶的功能模塊如圖1所示。
1) 用戶注冊功能模塊。該模塊在用戶注冊賬戶時啟用,檢查用戶注冊賬戶時,輸入的賬戶名稱、密碼、電子郵箱等相關(guān)注冊信息是否符合平臺要求,并給予用戶可視化的提示信息,為用戶提供良好的交互。
2) 個人生涯功能模塊。記錄著用戶在平臺動態(tài)測評的所有數(shù)據(jù),這些數(shù)據(jù)可視化顯示在該功能模塊中。
3) 用戶排行榜功能模塊。記錄所有用戶的動態(tài)測評記錄,根據(jù)用戶所獲得的積分進行排名。將所有用戶動態(tài)測評數(shù)據(jù)做成圖表形式可視化顯示在頁面。
4) 動態(tài)測評模塊。該模塊動態(tài)測評內(nèi)容由平臺管理員設(shè)計,是平臺的核心功能模塊。動態(tài)測評共有兩大不同場景設(shè)計,每個場景為各自動態(tài)測評題庫的主題,用戶可自由選擇場景進行動態(tài)測評。用戶的動態(tài)測評數(shù)據(jù)為其他功能模塊提供數(shù)據(jù)上的支持。
網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng)的兩個子場景分別為紅客密室之密室逃脫場景和紅客密室之古典圖書館。每個場景都有各自特有的主題,并且各個主題都有鮮明的特點,據(jù)此進行區(qū)分。當激活到該場景時,在輪播圖片上添加文字描述和聲音提示,如圖2所示。
5) 團隊注冊管理功能模塊。為用戶組隊或加入隊伍提供支持,用戶可以自行組建團隊,組建團隊需提供團隊名稱以及團隊密碼。用戶還可以設(shè)置團隊隊長等其他子功能。用戶加入團隊需提前向團隊成員索要團隊賬戶和密碼。
1) 平臺配置管理功能模塊共有7個子功能,分別為平臺資料、平臺賬號、平臺基本設(shè)置功能、平臺電子郵箱、平臺時間、平臺備份、平臺重置。平臺資料配置功能可以設(shè)置平臺的徽標、平臺的名稱、平臺模式的選擇、平臺頁面主題風格設(shè)置。平臺賬號配置功能可以設(shè)置用戶注冊時使用郵箱的白名單、用戶是否驗證電子郵件、用戶是否可以更改用戶名。平臺基本設(shè)置功能有用戶測評結(jié)果、其他人是否能夠查看用戶積分,以及賬戶、注冊可見性設(shè)置。
2) 用戶管理功能模塊。支持用戶名關(guān)鍵字匹配搜索,方便管理員快捷搜索某個用戶,可對某個用戶進行增加、刪除和修改操作。進入某個用戶參數(shù)頁面,可以查看用戶動態(tài)測評相關(guān)記錄并且能夠修改其測評的相關(guān)信息數(shù)據(jù);可以查看用戶登錄記錄信息、用戶最近登錄的時間和IP地址。
3) 測評資源管理功能模塊??梢栽黾觿h除動態(tài)測評時所需的相關(guān)文件。測評資源的加入,可以使動態(tài)測評更加多樣性。
4) 測評題庫管理功能模塊。管理員可以對動態(tài)測試題庫進行增加、刪除和修改操作,對動態(tài)測試題庫的某個測試關(guān)卡進行修改,如增加、刪除、修改關(guān)卡的Flag值、關(guān)卡的標簽、關(guān)卡的提示,設(shè)置進入該關(guān)卡的前提條件以及關(guān)卡的基本參數(shù)設(shè)置等操作。
5) 可視化管理功能模塊。平臺動態(tài)測評信息統(tǒng)計可視化,只允許管理員查看,可視化以多個圖表的形式在統(tǒng)計模塊中顯示,展示平臺用戶數(shù)目,關(guān)卡挑戰(zhàn)的次數(shù)最值、正誤提交次數(shù)等相關(guān)信息。
6) 團隊管理功能模塊。用于增加、刪除以及修改團隊信息等操作。該功能模塊記錄團隊所有成員動態(tài)測評的數(shù)據(jù),并用圖表的形式顯示在該頁面。管理員在團隊模式下所具有的功能模塊是在個人模式的基礎(chǔ)上增加許多功能模塊。
在Ubuntu系統(tǒng)上安裝Docker、Docker Compose,并使用命令克隆CTFd存儲庫,修改docker-compose.yml存儲庫中的文件SECRET_KEY。修改內(nèi)容如下所示,以CTFd服務(wù)為指定環(huán)境[9]。
平臺前端使用JavaScript為頁面增加動態(tài)效果,BootStrap4則可以構(gòu)建響應(yīng)式的頁面,并且移動設(shè)備也能為用戶提供友好的體驗[10]。
3.2.1 頁面主界面
本動態(tài)測評系統(tǒng)平臺的主界面分為上下兩塊區(qū)域,上方為導(dǎo)航欄,下方為內(nèi)容欄。其中導(dǎo)航欄含有平臺所有主要的操作按鈕,分別為用戶注冊模塊、個人生涯模塊、個人設(shè)置模塊、用戶退出模塊、平臺通知模塊、用戶信息模塊、團隊模塊、排行榜(記分牌)模塊、動態(tài)測評(挑戰(zhàn))模塊。
管理員用戶進入管理模式,功能模塊更改為平臺統(tǒng)計模塊、平臺通知管理模塊、平臺網(wǎng)頁管理模塊、用戶管理模塊、團隊管理模塊、動態(tài)測評可視化管理模塊、動態(tài)測評題庫及資源管理模塊、用戶提交測評記錄管理模塊、平臺配置參數(shù)管理模塊。
3.2.2 動態(tài)測評界面
動態(tài)測評界面由主場景輪播頁面和子場景頁面兩部分組成。主場景輪播頁面是為用戶選擇所想測評類別的題庫;子場景頁面是顯示動態(tài)測評的測試題目的頁面。
用戶進入所選題庫的實現(xiàn)方法如下:使用Bootstrap4框架,為頁面添加一個輪播。該輪播由頁面兩側(cè)按鈕、輪播圖片以及輪播的指示符組成。為輪播添加腳本,設(shè)置輪播次數(shù)為兩次,并使其手動切換場景,產(chǎn)生輪播圖片切換過渡動畫效果。在兩個子場景中,為場景圖片添加鏈接屬性,用戶點擊圖片,頁面將會跳轉(zhuǎn)到相應(yīng)場景的關(guān)卡。
3.3.1 測評過程
前端提交動態(tài)測評請求后,后端將接受到用戶提交的Flag值和題目的id。然后進入測評過程,整個過程為:①用戶選擇場景類別,前端向后端發(fā)送含有該類別的請求;②后端接受到該類別的請求,并對接受的請求信息中的URL進行解碼;③后端解碼得到類別,遍歷整個該類別的題庫,向前端動態(tài)返回相關(guān)數(shù)據(jù);④前端接受到該類別的相關(guān)題庫,在瀏覽器中顯示該類別的子場景頁面;⑤在某個子場景頁面中,用戶提交某個題目的Flag值,前端向后端發(fā)送提交請求;⑥后端進行Flag值判斷,判斷結(jié)束后,后端將用戶提交的Flag值和題目id記錄存儲在SQLite3數(shù)據(jù)庫中submissions表中;⑦后端返回判斷的結(jié)果,如果正確,則會提示“Congratulation!”的文字信息并在幾秒后進入下一題。若不正確,則在模態(tài)框下方滑出“不正確”文字信息的提示。
3.3.2 頁面?zhèn)鲄?,后端返回相關(guān)數(shù)據(jù)的實現(xiàn)方法
1) 主場景輪播變化。在主場景輪播中,實現(xiàn)點擊輪播圖片傳遞參數(shù),在主場景輪播頁面中,為輪播圖片添加超鏈接標簽。在該頁面腳本中為輪播圖片添加click()方法,使其動態(tài)的為輪播圖片標簽添加“href”屬性值。
為主場景輪播頁面添加getQueryString函數(shù),使用正則尋找以&+url參數(shù)名字=值+&,&可以不存在,忽略大小寫。找出“ ?”之后匹配正則的字符串,并對所選的字符串進行解碼。獲取到scene=后面值,該值賦值為categroy,并動態(tài)添加子場景頁面顯示的類別。
2) 子場景主題關(guān)卡的變化。由于每個關(guān)卡設(shè)置了前提條件,讀取數(shù)據(jù)庫內(nèi)容時,只返回未被設(shè)置前提條件的關(guān)卡。在子場景頁面腳本中,遍歷challenges字典中的category值是否與頁面?zhèn)鲄⒌南嗟?,若相等,則將該challenges索引下的賦值給chalinfo。為子場景添加按鈕,并在前端修改按鈕的CSS樣式。提取user_solves使用indexOf()方法查找chalinfo.id是否存在,不存在,則返回-1。判斷用戶是否已通過該關(guān)卡,若為-1,則正常顯示關(guān)卡按鈕;若非-1,則為按鈕添加“Congratulation!”的文字信息。
按鈕圖片讀取方式:首先,從數(shù)據(jù)庫讀取圖片存放的絕對路徑,該字符串存放于response.data并傳遞出來。其次,在子場景頁面腳本文件中,添加jQuery腳本,頁面預(yù)載時,為id、nosolve-chal標簽添加圖片。
1) 采用Flask技術(shù),實現(xiàn)了一個基于B/S架構(gòu)的場景化網(wǎng)絡(luò)空間安全動態(tài)測評系統(tǒng),并使用SQLite3數(shù)據(jù)庫作為數(shù)據(jù)的存儲方式,實現(xiàn)了資源共享、用戶互動、動態(tài)更新、數(shù)據(jù)備份的功能。
2) 為被測評者提供良好的測評環(huán)境。動態(tài)的題庫數(shù)據(jù),使測評更有靈活性,并可視化的顯示測評的結(jié)果,讓被測評者直觀了解自己的不足,使其在網(wǎng)絡(luò)空間安全理論和實踐方面更加完善。
3) 用戶測評結(jié)果可以為平臺后續(xù)題庫設(shè)計提供思路,使平臺的測評更加可靠。通過場景化網(wǎng)絡(luò)安全動態(tài)測評系統(tǒng)的建設(shè)和應(yīng)用,可以為行業(yè)培養(yǎng)所需專業(yè)安全人員,為國家輸送網(wǎng)絡(luò)安全建設(shè)專業(yè)人才。
蘇州市職業(yè)大學(xué)學(xué)報2020年2期