彭建山 張咪 曹宇
摘 要 針對軟件逆向分析課重點培養(yǎng)學生逆向思維能力的教學實際,結合該課程和奪旗競賽都存在正向逆向對抗的特點,在實踐教學中引入奪旗競賽形式,通過學習效果驗證了該教學方式的有效性。
關鍵詞 軟件逆向分析 奪旗競賽 逆向思維
中圖分類號:G424 文獻標識碼:A DOI:10.16400/j.cnki.kjdkz.2015.05.048
Introducing CTF in Software Reverse Analysis Course
PENG Jianshan[1], ZHANG Mi[2], CAO Yu[1]
([1]PLA Information Engineering University, Zhengzhou, He'nan 450002;
[2]He'nan Province Architecture Professional Technology Institute, Zhengzhou, He'nan 450002)
Abstract The course "Software Reverse Analysis" focuses on training students' reverse thinking ability. It has the characteristic of against competition between forward and reverse thinking, so does CTF competition. We introduced CTF competition form in teaching practice, and verified the validity of this method through learning effect.
Key words software reverse analysis; CTF; reverse thinking
軟件逆向分析課是我校計算機科學與技術、網絡工程專業(yè)的必修課程,旨在使學生掌握軟件逆向分析的原理方法和工具使用,既是對C語言、匯編語言等課程知識的綜合運用,也是后續(xù)專業(yè)課程學習的重要基礎。該課程重點培養(yǎng)學生的逆向思維能力,而逆向思維過程往往是與正向思維博弈對抗的過程。我們觀察到該特點,嘗試將具有典型對抗特點的奪旗競賽(CTF,Capture The Flag)形式引入該課程的實踐教學,做了一次有益的教學方式改進探索。
1 軟件逆向分析課特點
軟件逆向分析課安排在第五學期開設,前提課程有計算機原理、C語言與程序設計、x86匯編語言、操作系統(tǒng)結構等,教學內容包括反匯編原理和算法、數據流和控制流分析、逆向分析工具使用、函數工作過程、算法逆向分析實例等。該課程具有以下特點:
1.1 逆向思維與正向思維的對抗
軟件逆向分析被涵蓋在軟件逆向工程范疇內。①軟件逆向工程是軟件科學和計算機科學的一個分支,它綜合了加密和解密、編譯和反編譯、系統(tǒng)分析、程序理解等多種計算機技術,從可運行的程序系統(tǒng)出發(fā),生成對應的源程序、系統(tǒng)結構以及相關設計原理和算法思想的文檔等。②可見軟件逆向是對已構建程序的解構還原,從二進制代碼出發(fā),逆向猜測、推理、分析出程序原本的功能、邏輯甚至源代碼。由于軟件在編譯為二進制代碼時已消除了高級語言中的語義、數據類型、數據結構等方便人們理解的信息,極大增加了逆向分析的難度,所以逆向分析不可能針對軟件的所有部分,大多數時候都是在推理或猜測軟件作者的意圖,以作者的創(chuàng)作思路為線索,抓住逆向過程中的關鍵部分和關鍵點,有針對性地解決問題。這個過程與逆向思維過程十分吻合,所謂逆向思維是指從反面提出問題、分析問題、解決問題的一種思維方式,它是與正向思維相對應的一種思維。③因此軟件逆向分析的逆向思維是對軟件創(chuàng)作的正向思維的目標逆向、方向逆向和方式逆向,軟件逆向分析過程可視為與軟件作者的博弈對抗過程。
以逆向分析和破解軟件的試用時間為例,某些軟件會限制運行時間必須在某個時間范圍內,否則不能正常運行。破解該保護需要先從軟件作者的思考角度出發(fā),考慮有哪幾種保護方法,比如判斷當前系統(tǒng)時間是否在允許范圍內,或通過時間計數來計算已運行時間。逆向分析時應以此為線索跟蹤關鍵函數的調用,如獲取當前系統(tǒng)時間、獲取程序運行時間等函數,再逐步回溯到判斷條件處,定位關鍵代碼。而有些軟件作者會將這種破解的思路考慮進去,采用更難以猜測的方法或加入一些干擾技術手段以阻止逆向分析。這個博弈對抗過程往往會隨著軟件的不斷升級一直持續(xù)下去。
1.2 知識向技能的轉換需要大量實踐
該課程的目的是培養(yǎng)逆向分析的思維能力和動手能力,實踐是該課程學習的重要環(huán)節(jié),有利于對學生興趣的培養(yǎng)和技能的掌握。我們在實踐環(huán)節(jié)安排了逆向分析工具的使用、函數工作過程的跟蹤調試、注冊算法的逆向分析等內容,從工具使用到綜合運用,實踐內容環(huán)環(huán)相扣,注重能力培養(yǎng)的銜接和遞進。而這些實踐內容具有很強的專業(yè)性,表現在大部分實踐過程都是對程序的動態(tài)調試,和跟蹤匯編語句的執(zhí)行等操作。在實踐過程中,由于匯編語言缺乏高級編程語言良好的交互性和可理解性,如果沒有強烈的目的引導,學生很容易在枯燥的調試中失去興趣。因此實踐教學環(huán)節(jié)的內容和形式設計將直接影響教學效果。
2 實踐教學環(huán)節(jié)存在的問題
在以往的實踐教學環(huán)節(jié),我們采用了常見的目標導向方式,即為每個實驗設定一個具體目標,學生按照既定的技術路線去達到該目標。從學習效果來看,這種方式雖然能夠讓學生按部就班地解決某些問題,但參與感不強,缺乏舉一反三的思考和創(chuàng)新思維意識,在枯燥的實踐過程中容易失去學習興趣。實踐內容安排和結果如表1所示:
從完成度可以看出,對于較為簡單的驗證類實踐內容,學生都能按照實驗指導書要求的步驟,只要能夠較為熟練地使用工具就可以完成;對于綜合分析類內容,由于需要發(fā)揮學生的逆向思維能力,從看似繁雜無序的反匯編代碼中定位關鍵代碼,難度的提升導致部分學生無法完成;而對于難度最大的綜合應用類內容則完成度最低,只有少數專業(yè)基礎較好且興趣濃厚的學生能夠完成。通過調查和分析,主要原因在于:一是軟件的加殼脫殼涉及專業(yè)知識廣且深,門檻較高,學生在過程中容易產生挫敗感,無法持續(xù)深入;二是加殼和脫殼本質是攻與防的關系,而實踐過程中沒有體現這種對抗關系,學生沒有可參照對比和探討的對象,難有參與感和自主意識。
3 奪旗競賽規(guī)則及特點
奪旗競賽指的是軟件技術人員之間進行技術競技的一種比賽形式,起源于1996年的DEFCON全球黑客大會,以代替通過真實攻擊進行技術比拼,目前已在國內和國際上廣泛流行。主要分為以下兩類模式:④
(1)解題模式。又稱為線上模式。舉辦方在互聯網上設立競賽網站,參賽者可自由組隊,以團隊形式對競賽網站中的各類挑戰(zhàn)題進行解題并在線提交結果(通常是隱含在程序中的flag標識),網站自動計算每隊的得分和解題時間并實時公布。解題模式是一種開放式的競賽形式,一般用于吸引盡量多的參賽者,從中選拔優(yōu)秀隊伍。
(2)攻防模式。又稱為線下模式,一般由線上模式選拔出的少數隊伍參加。舉辦方為每支參數隊伍設定相同的對抗環(huán)境,參數隊伍分析程序存在的脆弱性,利用這些脆弱性攻擊對方服務器獲得flag標識,并提交給裁判服務器獲得分數,同時也要修補自身服務器的問題以進行防御。整個對抗過程一般會持續(xù)48小時以上,攻防狀態(tài)會以動態(tài)方式顯示出來,具有很強的觀賞性和高度透明性。
在參加各類奪旗競賽后,我們發(fā)現此類競賽具有以下特點:(1)團隊合作重要性突出。參數隊伍中的每位成員分工明確,需要具備某個方面深入的專業(yè)知識和技能,知識領域互補,需要良好的溝通合作能力,參與感和自主意識都非常強烈。(2)博弈對抗性突出。攻防模式著重考查參賽隊伍間的博弈對抗力,參賽者需要通過逆向思維方式尋找對手的防御弱點,同時也要根據對手的攻擊策略修補自身的弱點,這種對抗升級會一直貫穿整個比賽過程。
由上可知,奪旗競賽與軟件逆向分析課在正向思維和逆向思維的博弈對抗上具有相似點,并且十分切合課程實踐性強的需求,因此嘗試將該競賽形式引入教學中。
4 競賽形式的引入和實施
我們借鑒了奪旗競賽的攻防模式,首先對賽制做了修改以適應教學需求:
參賽隊伍:根據學生總人數,分為5~10組,一般每組不超過4人。
比賽環(huán)境:在校園網架設一臺公共服務器,為每支隊伍設定上傳賬號,且可以下載其他隊伍目錄。
上傳要求:每支隊伍編寫一個程序并將flag標識隱藏在程序中,隱藏的方式可以采用信息加密、信息隱藏、軟件加殼等技術,同時為防止惡意設置不可解flag,要求程序的運行效果為輸入密碼后顯示flag。將程序上傳至服務器,上傳后不可修改。
下載要求:參賽隊伍可下載其他隊伍上傳的程序。
得分規(guī)則:通過軟件逆向分析將其中的flag找出來并提交,每提交一個flag加10分,重復提交不得分。
刷分周期:每輪一般為4個課時,在刷分周期內盡可能多地分析出其他隊伍的flag。
防御規(guī)則:在一個刷分周期后,參賽隊伍可根據其他隊伍對本程序的分析情況,有針對性地修改flag的隱藏方式,并更新flag內容。上傳至服務器以開始下一輪比賽。
賽制的修改主要基于以下幾點考慮:(1)奪旗競賽是集中在一個時間段內完成,而課堂實踐時間是碎片式的分散分布,因此將每次實踐課時間設為一輪比賽周期,共有3到4輪。(2)奪旗競賽中每支隊伍的環(huán)境是相同的,由舉辦方事先設定。為避免學生陷入到相同的解題思路中,并充分發(fā)揮學生的創(chuàng)造能力和專業(yè)能力,只規(guī)定統(tǒng)一的出題方向,而將題目交給每支隊伍自主設定。(3)奪旗競賽的刷分周期很短,一般為5到20分鐘,這種快節(jié)奏高消耗的方式適用于經驗豐富的專業(yè)隊伍,而對處于學習摸索階段的學生來說,留出充分的分析思考時間更為重要,因此4個課時的刷分周期為解題時間,而將分析、消化和防御重建留到更為充裕的課后時間。
設定好賽制后,我們在軟件逆向分析課的教學中實施了該競賽,同時將課堂講授課時縮短,增加了實踐課時。共有8支隊伍,4輪比賽,表2是得分情況。
從得分情況可以看出,在第一輪比賽中由于參賽者還不熟悉規(guī)則,基礎最好的隊伍3輕易拿到了其他所有隊伍的flag獲得滿分(70分),很明顯此輪的防御都很弱;在第二輪比賽中,各隊伍的防御能力明顯增強,體現在得分都有下降;到了第三輪,隨著攻防經驗的豐富和逆向分析能力的提升,大部分隊伍得分有明顯增長;最后一輪各支隊伍尤其是隊伍5的得分都較第一輪有了較大增長,說明逆向分析和逆向(下轉第129頁)(上接第101頁)思維能力進步顯著。
表2 競賽得分情況
為進一步提升興趣和參與意識,我們在賽后交流還安排了經驗交流,由每支隊伍給出自己的攻防思路和方法,從中發(fā)現學生的創(chuàng)新能力超出預期。整個過程中學生都能積極參與,主動交流和查詢資料,能夠分析對手的技術水平并提升自我水平,能夠從每輪比賽的得分中獲得成就感,具有強烈的學習興趣、主動性和自主意識。最后我們還安排了表1的實踐內容,完成度基本達到100%,證明將奪旗競賽形式引入該課程效果明顯,達到預期目的。
5 結語
結合軟件逆向分析課的實踐性和對抗性特點,通過引入具有典型博弈對抗特點的奪旗競賽形式,提高了學生的參與感、自主意識和創(chuàng)新意識,在競賽過程中學生保持了濃厚的學習交流熱情,并完成了課程知識和能力的掌握。下一步將繼續(xù)研究其他課程的特點,進一步改進教學方法以更好的達到教學目標。
基金項目:863重大科研項目(2012AA012902)
注釋
① Ingle K A. Reverse engineering[M]. McGraw-Hill Professional Publishing,1994:115-120.
② 金濤,陳建良.逆向工程技術研究進展[J].中國機械工程,2002.13(16):1430-1436.
③ 劉漢民.論逆向思維[J].重慶工學院學報,2006.19(9):96-100.
④ 百度百科:CTF競賽. [EB/OL]. [2015-02-01]. http://baike.baidu.com/link?url=_HvWv-etKFfRUEYhnovPmABy1TLQ5wTuVZrTVujhCWj7t49VZijBZN ?0UqJEZV6pFD4s8f5se4NOWJAvwIu_.