◆郭成華
(杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 浙江 310018)
基于KDDCUP99數(shù)據(jù)集的入侵檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
◆郭成華
(杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 浙江 310018)
KDDCUP99數(shù)據(jù)集中網(wǎng)絡(luò)連接特征屬性種類多,提取難度大,給研究人員將數(shù)據(jù)集應(yīng)用到真實(shí)網(wǎng)絡(luò)環(huán)境中造成很大困難。同時(shí)因?yàn)閿?shù)據(jù)集產(chǎn)生年代久遠(yuǎn),其中的攻擊手段和特征屬性對(duì)于當(dāng)下復(fù)雜的網(wǎng)絡(luò)環(huán)境已經(jīng)過(guò)時(shí),因此迫切需要提取新的網(wǎng)絡(luò)連接特征,應(yīng)用新型攻擊手段,制作出更符合真實(shí)網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)集。通過(guò)對(duì)數(shù)據(jù)集制作方法的深入研究,給出了提取網(wǎng)絡(luò)連接特征的具體方法,進(jìn)而設(shè)計(jì)出一套基于此數(shù)據(jù)集的入侵檢測(cè)系統(tǒng)。同時(shí)也為今后的研究中,制作新的入侵檢測(cè)數(shù)據(jù)集提供了參考。
KDDCUP99數(shù)據(jù)集;特征提取;入侵檢測(cè) IDS
近年來(lái),隨著網(wǎng)絡(luò)安全研究人員對(duì)入侵檢測(cè)技術(shù)的不斷探索,一批能夠在時(shí)間空間復(fù)雜度與漏檢誤檢率之間達(dá)到平衡的新型入侵檢測(cè)方法被提出。得益于人工智能的快速發(fā)展,基于新型機(jī)器學(xué)習(xí)算法的入侵檢測(cè)也逐漸成為人們研究的熱點(diǎn)。KDDCUP99數(shù)據(jù)集自從誕生以來(lái),就被當(dāng)做評(píng)估各種入侵檢測(cè)算法在性能和漏檢誤檢率方面優(yōu)劣的標(biāo)準(zhǔn)。
然而,目前對(duì)于 KDDCUP99數(shù)據(jù)集的應(yīng)用與研究,還僅限于對(duì)分類器效能的評(píng)估與離線入侵檢測(cè),并沒(méi)有給出基于此數(shù)據(jù)集在實(shí)際網(wǎng)絡(luò)環(huán)境中應(yīng)用的具體方法。KDDCUP99數(shù)據(jù)集針對(duì)每一條網(wǎng)絡(luò)連接都有41個(gè)特征屬性,而這些屬性中的一部分提取難度較大。官方描述文檔中并沒(méi)有提供相關(guān)的特征提取方法,給本數(shù)據(jù)集在實(shí)際網(wǎng)絡(luò)環(huán)境中的應(yīng)用造成了一定的困難。
本文的創(chuàng)新點(diǎn)在于給出了一整套基于 KDDCUP99數(shù)據(jù)集的入侵檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案,解決了在實(shí)際網(wǎng)絡(luò)環(huán)境中特征提取困難的問(wèn)題,為以后在真實(shí)網(wǎng)絡(luò)環(huán)境中運(yùn)用 KDDCUP99數(shù)據(jù)集實(shí)現(xiàn)在線入侵檢測(cè)奠定基礎(chǔ)。
KDDCUP99數(shù)據(jù)集的原始數(shù)據(jù)是從美國(guó)國(guó)防部高級(jí)規(guī)劃署(DARPA)進(jìn)行的一項(xiàng)入侵檢測(cè)評(píng)估項(xiàng)目中產(chǎn)生的,后經(jīng) Wenke Lee等人對(duì)原始數(shù)據(jù)進(jìn)行特征提取,最終形成了這套數(shù)據(jù)集。訓(xùn)練與測(cè)試數(shù)據(jù)集中每條記錄擁有41個(gè)特征屬性和一個(gè)攻擊類型標(biāo)簽。特征屬性可以分為四大類:網(wǎng)絡(luò)連接基本特征(1-9號(hào))、網(wǎng)絡(luò)連接內(nèi)容特征(10-22號(hào))、基于時(shí)間的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征(23-31)、基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征(32-41)。攻擊類型共計(jì)39種,可以分為四類:拒絕服務(wù)攻擊、來(lái)自遠(yuǎn)程主機(jī)的未授權(quán)訪問(wèn)、未授權(quán)的本地超級(jí)用戶特權(quán)訪問(wèn)、端口監(jiān)視或掃描。除攻擊類型外,還有一部分網(wǎng)絡(luò)連接是被標(biāo)識(shí)為’normal’的正常類型。
入侵檢測(cè)系統(tǒng)首先需要單獨(dú)開(kāi)啟一個(gè)進(jìn)程用來(lái)捕捉網(wǎng)絡(luò)數(shù)據(jù)包,為以后的分析檢測(cè)不斷提供源數(shù)據(jù)。捕捉數(shù)據(jù)包的方法與原數(shù)據(jù)集采集的方法保持一致,使用tcpdump。為了實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)入侵的實(shí)時(shí)檢測(cè),必須使用循環(huán)的方式捕捉網(wǎng)絡(luò)數(shù)據(jù)包,也就是提前設(shè)定單個(gè)文件最大容納數(shù)據(jù)包的數(shù)量,到達(dá)此數(shù)量后輸出該文件并開(kāi)始新一輪的數(shù)據(jù)包捕獲。只有通過(guò)這種方式才能為分析程序不斷提供最新截獲的數(shù)據(jù)包,達(dá)到實(shí)時(shí)檢測(cè)的目的。例如運(yùn)用tcpdump監(jiān)聽(tīng)編號(hào)為1的接口并且達(dá)到50個(gè)數(shù)據(jù)包就輸出到data.pcap,在linux平臺(tái)上可以使用命令:
特征屬性中有兩大類與統(tǒng)計(jì)特征相關(guān),而這類特征需要對(duì)時(shí)間連續(xù)且數(shù)量較多的數(shù)據(jù)包進(jìn)行分析才能得出有效結(jié)論。因此在單個(gè)文件所含數(shù)據(jù)包數(shù)量較小的情況下,要想得到基于統(tǒng)計(jì)特征的有效結(jié)論,需要將多個(gè)小的數(shù)據(jù)包文件拼接成為一個(gè)較大的數(shù)據(jù)包文件。拼接數(shù)據(jù)包文件可以使用 wireshark下的命令行工具mergecap,例如將data1.pcap與date2.pcap拼接為all.pcap,可以使用命令:
通過(guò)對(duì)拼接后數(shù)據(jù)包文件的特征提取與分析,更容易檢測(cè)出統(tǒng)計(jì)特征明顯的攻擊。
每當(dāng)一次循環(huán)抓包結(jié)束后,都需要對(duì)剛剛捕獲的文件進(jìn)行特征提取與分析,這是實(shí)現(xiàn)入侵檢測(cè)系統(tǒng)的第二個(gè)重要步驟,需要單獨(dú)開(kāi)啟一個(gè)進(jìn)程執(zhí)行。由于數(shù)據(jù)集的描述文檔中沒(méi)有對(duì)從原始數(shù)據(jù)中提取特征的方法進(jìn)行說(shuō)明,導(dǎo)致了提取特征困難。通過(guò)文獻(xiàn)[1-3]中與特征屬性相關(guān)的描述,本文提出了針對(duì)每一種特征的詳細(xì)提取方法。基于提取到的特征和事先訓(xùn)練好的入侵檢測(cè)判斷模型,最終實(shí)現(xiàn)實(shí)時(shí)檢測(cè)。
一種較為簡(jiǎn)單的方法是使用 Bro網(wǎng)絡(luò)安全監(jiān)控系統(tǒng)[4]對(duì)原始數(shù)據(jù)分析并提取出原數(shù)據(jù)集中前22項(xiàng)特征屬性。Bro是一個(gè)提供BSD授權(quán)的開(kāi)源軟件項(xiàng)目,它包含一種事件驅(qū)動(dòng)型的腳本語(yǔ)言,可以應(yīng)用這種語(yǔ)言重寫與特征屬性相關(guān)的事件處理函數(shù)。每當(dāng)事件被觸發(fā)時(shí),重寫后的事件處理函數(shù)都會(huì)對(duì)網(wǎng)絡(luò)連接的特征屬性做出相應(yīng)調(diào)整,從而實(shí)現(xiàn)對(duì)原始數(shù)據(jù)的特征提取。
(1)提取特征之前的準(zhǔn)備工作
在提取特征之前,首先要建立一個(gè)存儲(chǔ)特征屬性的數(shù)據(jù)結(jié)構(gòu)。Bro腳本語(yǔ)言中的record類型類似于c語(yǔ)言中的結(jié)構(gòu)體,可以用它存儲(chǔ)單條網(wǎng)絡(luò)連接的前22項(xiàng)特征屬性。然后需要再建立一個(gè)用來(lái)存儲(chǔ)所有網(wǎng)絡(luò)連接的容器table,便于最終的輸出。table類似于數(shù)組,這里把它設(shè)為擁有六個(gè)維度的用來(lái)存放record的容器。六個(gè)維度分別是:連接開(kāi)始時(shí)間、連接持續(xù)時(shí)間、連接發(fā)起方地址與端口、連接應(yīng)答方地址與端口,通過(guò)這六個(gè)維度能夠唯一確認(rèn)一條網(wǎng)絡(luò)連接,保證不會(huì)與其他連接重復(fù)。
為了以后更方便的提取基于時(shí)間與主機(jī)的流量統(tǒng)計(jì)特征,record中除了前 22項(xiàng)特征外還需再添加連接序號(hào)、連接開(kāi)始時(shí)間、連接發(fā)起方地址與端口、連接應(yīng)答方地址與端口這幾項(xiàng)屬性,位置應(yīng)該在22條特征屬性之前。其中連接序號(hào)是一個(gè)全局變量,每新增一條網(wǎng)絡(luò)連接,都會(huì)觸發(fā)bro中的”new_connection”事件。重寫該事件的處理函數(shù),使其每次觸發(fā)時(shí)連接序號(hào)加1。最終輸出效果如下:
1 1502357627.511197 49154 921 192.168.1.103 192.168.1.107 0.000000 udp 921 OTH 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(2)duration、src_bytes、dst_bytes、protocol_type、land 特征的提取
這五種屬性的共同點(diǎn)是可以直接的從任何一種包含c:connection參數(shù)的事件中獲得。例如,在 bro腳本語(yǔ)言的new_connection事件中,可以用 c$duration,c$orig$size,c$resp$size分別獲得前三種屬性的值。使用 bro的內(nèi)建函數(shù)get_port_transport_proto并將c$id$resp_p,也就是目標(biāo)主機(jī)端口號(hào)作為參數(shù)傳入就可以得到協(xié)議類型的值。land屬性是判斷連接發(fā)起方與應(yīng)答方的地址與端口是否完全相同的,使用c$id$orig_h、c$id$resp_h、c$id$orig_p、c$id$resp_p獲得四項(xiàng)特征并判斷雙方地址與端口是否相同即可。
(3)service特征提取
首先需要查閱數(shù)據(jù)集中所包含的70種服務(wù)類型所對(duì)應(yīng)的端口號(hào),然后建立一個(gè)將端口號(hào)作為輸入,服務(wù)類型名稱作為輸出的函數(shù)。最后在提取特征時(shí),可以在包含 c:connection參數(shù)的事件中使用 c$id$resp_p得到目標(biāo)主機(jī)的端口號(hào),傳入函數(shù)中得到服務(wù)類型。
(4)flag特征的提取
此特征代表了一條網(wǎng)絡(luò)連接中,正?;蝈e(cuò)誤的類型。共有13種類型,分別為S0、S1、S2、S3、REJ、RSTRH、RSTR、RSTOS0、RSTO、SF、SH、SHR、OTH。目前為止的資料中還缺乏對(duì)這些錯(cuò)誤類型具體含義的詳細(xì)描述,本文中將通過(guò)框圖的形式具體給出判斷所有錯(cuò)誤類型的方法。
如圖1,在任何一個(gè)包含c:connection參數(shù)的事件中,分別使用c$orig$state、c$resp$state、c$orig$size、c$resp$size再加上當(dāng)前連接的協(xié)議類型,即可獲得判斷錯(cuò)誤類型所需的信息。其中形如TCP_SYN_SENT為bro腳本語(yǔ)言內(nèi)置的常量,用來(lái)表示連接發(fā)起方或應(yīng)答方的狀態(tài)。Bro中TCP狀態(tài)共有7種,UDP狀態(tài)共2種,通過(guò)對(duì)連接發(fā)起方與應(yīng)答方的狀態(tài)進(jìn)行如圖所示的分析,就能得到一條網(wǎng)絡(luò)連接正確或錯(cuò)誤的類型。
圖1 網(wǎng)絡(luò)連接flag特征提取方法
(5)8-22號(hào)特征提取
8-22號(hào)特征的提取需要重寫與特征本身相關(guān)的事件處理函數(shù),每當(dāng)這些事件被觸發(fā)時(shí),就能通過(guò)對(duì)事件中相關(guān)參數(shù)的分析,對(duì)特征值做出調(diào)整。表1中給出與這些特征相關(guān)的事件及對(duì)事件參數(shù)的處理方法,其中一些方法在實(shí)際應(yīng)用中還需要靈活運(yùn)用正則表達(dá)式進(jìn)行匹配。
表1 8-22特征的提取方法
?
?
提取這兩類特征需要對(duì)一段較長(zhǎng)時(shí)間內(nèi)所有的網(wǎng)絡(luò)連接進(jìn)行整體分析,因此需要對(duì)3.1中提取出的特征進(jìn)行輸出和整理。
bro_done事件會(huì)在bro分析結(jié)束后觸發(fā),重寫這個(gè)事件的處理函數(shù),使其在結(jié)束時(shí)將所有 table中保存的結(jié)果輸出到指定文件中,再使用sort -n命令將此文件中各條網(wǎng)絡(luò)連接按連接序號(hào)排序后輸出到最終的文件中,就可以開(kāi)始對(duì) 23-41號(hào)特征進(jìn)行提取。
根據(jù)文獻(xiàn)[2-3]中對(duì)這兩類特征的描述,本文提出了以下的方法實(shí)現(xiàn)特征提?。?/p>
以3.2最后輸出文件中m條連接的一部分屬性作為輸入,通過(guò)算法1、2,即可提取到這兩類特征屬性的所有值。
算法 1:提取基于時(shí)間的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征算法
輸入: 網(wǎng)絡(luò)連接開(kāi)始時(shí)間集D={d1,d2,...,dm}
網(wǎng)絡(luò)連接應(yīng)答方地址集E={e1,e2,...,em}
網(wǎng)絡(luò)連接應(yīng)答方端口集F={f1,f2,...,fm}
網(wǎng)絡(luò)連接正確或錯(cuò)誤狀態(tài)集G={g1,g2,...,gm}
輸出:基于時(shí)間的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征集
K={(k23_1,k24_1,...,k31_1),(k23_2,k24_2,...,k31_2),...,(k23_m,k24_m,...,k31_m)}
步驟:
1: K’={(k’23_1,k’24_1,...,k’31_1),(k’23_2,k’24_2,...,k’31_2),...,(k’23_m,k’24_m,...,k’31_m);
//最終輸出特征是百分比的形式,K’集合用于事先統(tǒng)計(jì)數(shù)量
2: 將K,K’集合中每一個(gè)元組的所有變量值初始化為0;
3: for i=1,2,...,m do
4: for j=1,2,...i-1 do
5: if (di-2≤dj≤di) //當(dāng)前連接開(kāi)始時(shí)間的前 2s內(nèi)
6: if (ei==ej) //與當(dāng)前連接具有相同目標(biāo)主機(jī)
7: k’23_i=k’23_i+1;
8: if (gj==S0 or gj==S1 or gj==S2 or gj==S3)k’25_i=k’25_i+1;
9: if (gj==REJ) k’27_i=k’27_i+1;
10: if (fi==fj) then k’29_i=k’29_i+1;
11: else k’30_i=k’30_i+1;
12: if (fi==fj) //與當(dāng)前連接具有相同服務(wù)
13: k’24_i=k’24_i+1;
14: if (gj==S0 or gj==S1 or gj==S2 or gj==S3)k’26_i=k’26_i+1;
15: if (gj==REJ) k’28_i=k’28_i+1;
16: if (ej≠ei) k’31_i=k’31_i+1;
17: end for
18: if (k’23_i≠0)
19:
k23_i=k’23_i;k25_i=k’25_i/k23_i;k27_i=k’27_i/k23_i;k29_i=k’29_i/k23_i;k30_i=k’30_i/k23_i;
20: if (k’24_i≠0)
21:
k24_i=k’24_i;k26_i=k’26_i/k24_i;k28_i=k’28_i/k24_i;k31_i=k’31_i/k24_i;
22:end for
算法 2:提取基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征算法
輸入: 網(wǎng)絡(luò)連接發(fā)起方地址集C={c1,c2,...,cm}
網(wǎng)絡(luò)連接發(fā)起方端口D={d1,d2,...,dm}
網(wǎng)絡(luò)連接應(yīng)答方地址集E={e1,e2,...,em}
網(wǎng)絡(luò)連接應(yīng)答方端口集F={f1,f2,...,fm}
網(wǎng)絡(luò)連接正確或錯(cuò)誤狀態(tài)集G={g1,g2,...,gm}
輸出: 基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計(jì)特征集
K={(k32_1,k33_1,...,k41_1),(k32_2,k33_2,...,k41_2),...,(k32_m,k33_m,...,k41_m)}
步驟:
1: K’={(k’32_1,k’33_1,...,k’41_1),(k’32_2,k’33_2,...,k’41_2),...,(k’32_m,k’33_m,...,k’41_m)};
//最終輸出特征是百分比的形式,K’集合用于事先統(tǒng)計(jì)數(shù)量
2: 將K,K’集合中每一個(gè)元組的所有變量值初始化為0;
3: for i=1,2,...,m do
4: if (i<=100) then j=1;
5: else j=i-100;
6: for h=j,j+1,...,i-1 do
7: if (eh==ei)
8: k’32_i=k’32_i+1;
9: if (dh==di) k’36_i=k’36_i+1;
10: if (gh==S0 or gh==S1 or gh==S2 or gh==S3)k’38_i=k’38_i+1;
11: if (gh==REJ) k’40_i=k’40_i+1;
12: if (fh==fi) then
13: k’33_i=k’33_i+1;
14: if (ch≠ci) k’37_i=k’37_i+1;
15: if (gh==S0 or gh==S1 or gh==S2 or gh==S3) k’39_i=k’39_i+1;
16: if (gh==REJ) k’41_i=k’41_i+1;
17: else k’35_i=k’35_i+1;
18: end for
19: k32_i=k’32_i;k33_i=k’33_i;
20: if (k32_i≠0)
21:
k34_i=k33_i/k32_i;k35_i=k’35_i/k32_i;k36_i=k’36_i/k32_i;k38_i=k’38_i/k32_i;k40_i=k’40_i/k32_i;
22: if (k33_i≠0)
23:
k37_i=k’37_i/k33_i;k39_i=k’39_i/k33_i;k41_i=k’41_i/k33_i;
24:end for
提取特征完畢后,需要先對(duì)提取后的數(shù)據(jù)進(jìn)行數(shù)字化和歸一化處理[6],其中處理的方法必須與訓(xùn)練模型時(shí)預(yù)處理數(shù)據(jù)的方法保持一致。最后將處理后的數(shù)據(jù)輸入事先訓(xùn)練好的模型中,從輸出中得到入侵類型判斷結(jié)果,實(shí)現(xiàn)在線實(shí)時(shí)入侵檢測(cè)。
實(shí)驗(yàn)用虛擬機(jī)操作系統(tǒng)為 Ubuntu16.04(內(nèi)核版本4.4.0-93-generic),使用 bro2.5.1進(jìn)行 1-22號(hào)提取,python3.5.2進(jìn)行23-41號(hào)特征提取和入侵檢測(cè)系統(tǒng)的整體構(gòu)建,攻擊測(cè)試平臺(tái)為Kali和blackarch。實(shí)驗(yàn)中對(duì)數(shù)據(jù)集預(yù)處理后采用KNN算法[5][7-8],對(duì)一部分常見(jiàn)攻擊手段進(jìn)行測(cè)試,具體結(jié)果見(jiàn)表 2,證實(shí)了本文中所描述的特征提取方法能夠獲得與原數(shù)據(jù)集中記錄匹配的網(wǎng)絡(luò)連接特征,從而可以在實(shí)驗(yàn)中將入侵檢測(cè)算法應(yīng)用到實(shí)際網(wǎng)絡(luò)中。
表2 虛擬機(jī)實(shí)驗(yàn)結(jié)果
通過(guò)對(duì)基于 KDDCUP99數(shù)據(jù)集構(gòu)建入侵檢測(cè)系統(tǒng)的研究,實(shí)驗(yàn)結(jié)果表明文中所述的方法可以將數(shù)據(jù)集和入侵檢測(cè)算法應(yīng)用到實(shí)際網(wǎng)絡(luò)環(huán)境中。
KDDCUP99數(shù)據(jù)集從誕生到現(xiàn)在已經(jīng)有18年了,雖然一直作為入侵檢測(cè)領(lǐng)域的一個(gè)公認(rèn)測(cè)試標(biāo)準(zhǔn),但是其中的攻擊手段對(duì)于當(dāng)下的網(wǎng)絡(luò)環(huán)境顯然已經(jīng)有些過(guò)時(shí)。本文中介紹的網(wǎng)絡(luò)連接特征提取的方法,可以幫助研究人員將新的入侵檢測(cè)算法運(yùn)用到實(shí)際網(wǎng)絡(luò)環(huán)境中。更進(jìn)一步,可以參考文中的思路搭建攻擊測(cè)試環(huán)境,制作新的入侵檢測(cè)數(shù)據(jù)集,為研究和防御新型網(wǎng)絡(luò)攻擊做準(zhǔn)備。
[1]Lee W,Stolfo S J.A framework for constructing features and models for intrusion detection systems[J].ACM transactions on Information and system security (TiSSEC),2000.
[2]Tavallaee M,Bagheri E,Lu W,et al.A detailed analysis of the KDD CUP 99 data set[C]//IEEE Computational Intelligence Society.2009 IEEE Symposium on Computational Intelligence for Security and Defense Applications.July 8-10,2009.Crowne Plaza Ottawa Ottawa,ON,Canada.New York.IEEE,2009.
[3]Lee W,Stolfo S J,Mok K W. Mining in a data-flow environment:Experience in network intrusion detection[C]//ACM.The fifth ACM SIGKDD international conference on Knowledge discovery and data mining. August 15-18,1999.New York,NY,USA.ACM,1999.
[4]Mehra P.A brief study and comparison of snort and bro open source network intrusion detection systems[J]. International Journal of Advanced Research in Computer and Communication Engineering,2012.
[5]解男男.機(jī)器學(xué)習(xí)方法在入侵檢測(cè)中的應(yīng)用研究[D].吉林:吉林大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,2015.
[6]吳建勝,張文鵬,馬垣. KDDCUP99 數(shù)據(jù)集的數(shù)據(jù)分析研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014.
[7]郭春.基于數(shù)據(jù)挖掘的網(wǎng)絡(luò)入侵檢測(cè)關(guān)鍵技術(shù)研究[D].北京: 北京郵電大學(xué)計(jì)算機(jī)學(xué)院,2014.
[8]劉棣華,余斌,王小芬.基于 RBF 神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)模型的研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2008.
杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院“紅客”大學(xué)生科研創(chuàng)新訓(xùn)練計(jì)劃項(xiàng)目[WAHK0011]。