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