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