江西外語外貿職業學院電子商務學院 江洋
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模式的網絡教學平臺,導入題庫之后,把這個平臺引入到了高職網絡安全的課程教學中,取得了很好的教學效果。