夏志堅,彭國軍,胡鴻富
武漢大學(xué) 計算機學(xué)院,武漢 430072
近年來,互聯(lián)網(wǎng)飛速發(fā)展,社交、購物、金融等不同行業(yè)都開始互聯(lián)網(wǎng)化。Web應(yīng)用不斷出現(xiàn),而這些應(yīng)用存儲了大量的用戶隱私數(shù)據(jù),為了保障隱私數(shù)據(jù)的安全性,必須采用嚴格的權(quán)限控制[1]。相比于傳統(tǒng)應(yīng)用的權(quán)限控制,由于http協(xié)議的無狀態(tài)特性,每次請求隱私數(shù)據(jù)都必須進行權(quán)限驗證,因此用戶的每次請求都需要驗證權(quán)限,因而需要更加完善的權(quán)限驗證機制[2]。受限于開發(fā)者的水平和程序邏輯的復(fù)雜性,權(quán)限驗證遺漏或不完全仍然普遍存在于Web應(yīng)用中,導(dǎo)致權(quán)限控制漏洞影響范圍十分廣泛。根據(jù)OWASP(Open Web Application Security)組織公布的數(shù)據(jù),權(quán)限控制漏洞已經(jīng)成為前10大Web應(yīng)用安全漏洞之一[3],權(quán)限控制漏洞已然成為Web應(yīng)用所面臨的主要安全威脅之一。權(quán)限控制漏洞依賴于應(yīng)用本身,不同的應(yīng)用的權(quán)限控制往往在邏輯上有很大不同,而權(quán)限控制漏洞主要分為以下3種情況:
(1)強制訪問:應(yīng)用中訪問某頁面前包含權(quán)限驗證,但未授權(quán)用戶可以通過直接訪問頁面URL繞過權(quán)限驗證。
(2)權(quán)限驗證不當(dāng)或缺失:頁面中包含具有特定權(quán)限的用戶才能訪問的資源,在資源訪問路徑上權(quán)限控制不當(dāng)或缺少權(quán)限控制。
(3)權(quán)限驗證處理邏輯不當(dāng):權(quán)限驗證失敗后,未正確終止當(dāng)前訪問,未授權(quán)用戶仍能訪問敏感資源。
學(xué)術(shù)界針對權(quán)限控制漏洞的檢測做了很多研究,目前主要的檢測方法包括靜態(tài)檢測、動態(tài)檢測以及動靜結(jié)合檢測[4-9],然而目前在效率和準確性上還并不能令人滿意。美國加利福尼亞大學(xué)的孫芳琪等人采用自動推斷隱式權(quán)限控制假設(shè)的技術(shù),構(gòu)建基于角色的站點圖,提取權(quán)限頁面,推測權(quán)限頁面是否能被強制訪問,能夠準確檢測權(quán)限控制漏洞[10],但只能檢測強制訪問類權(quán)限控制漏洞,檢測范圍較窄。在此基礎(chǔ)上,文獻[11]設(shè)計了一種基于應(yīng)用保護狀態(tài)的漏洞模型檢測機,通過識別權(quán)限頁面保護狀態(tài),快速地檢測權(quán)限控制漏洞,能夠檢測強制訪問和部分權(quán)限驗證不當(dāng)或缺失多種權(quán)限控制漏洞,而對權(quán)限驗證后處理邏輯不當(dāng)漏洞則無法檢測。文獻[12]靜態(tài)分析獲取權(quán)限驗證的關(guān)鍵邏輯,在權(quán)限驗證未通過的代碼中插入監(jiān)視代碼,然后在動態(tài)運行時檢測是否有權(quán)限控制漏洞攻擊行為發(fā)生,可以檢測多種類型權(quán)限控制漏洞,但檢測方法依賴于測試集,并且需要較高的系統(tǒng)開銷。
程序可以通過控制流圖抽象表示,選取控制流圖中的權(quán)限驗證節(jié)點和資源節(jié)點可以組成權(quán)限驗證圖,權(quán)限驗證圖中,每個資源對應(yīng)多條權(quán)限驗證路徑,比較每條權(quán)限驗證路徑的驗證權(quán)限與資源訪問權(quán)限,從而檢測資源是否具有權(quán)限控制漏洞。上述3種權(quán)限控制漏洞均可等價為“存在一條或多條權(quán)限驗證路徑的驗證權(quán)限低于相應(yīng)資源的訪問權(quán)限”,因此本文的算法可以覆蓋上述3種權(quán)限控制漏洞。本文提出了一種新的權(quán)限控制漏洞檢測算法,實現(xiàn)了檢測工具,并針對7個流行Web系統(tǒng)進行了安全檢測,發(fā)現(xiàn)了8個已知和未知漏洞。
權(quán)限驗證圖是由起始節(jié)點、終止節(jié)點、資源節(jié)點和權(quán)限驗證節(jié)點組成的無環(huán)有向圖,為了抽象定義權(quán)限驗證圖,有如下定義:
定義1(角色)一個角色擁有一種權(quán)限或者多種權(quán)限,R為權(quán)限集。在大多數(shù)系統(tǒng)中,權(quán)限的分配通過賦予某種角色來實現(xiàn),資源具備某種訪問權(quán)限即為資源能被具有某種權(quán)限的角色訪問。
定義2(資源節(jié)點)資源節(jié)點是對資源進行操作的代碼模塊,現(xiàn)代Web應(yīng)用數(shù)據(jù)主要存儲在數(shù)據(jù)庫中[13],因此資源節(jié)點主要為數(shù)據(jù)庫操作,但也能方便地擴展到文件等操作,資源節(jié)點集合為S。資源節(jié)點的權(quán)限通過權(quán)限表與角色相關(guān)聯(lián),例如從數(shù)據(jù)庫中刪除用戶user1,對應(yīng)的角色為“admin”。
定義3(起始節(jié)點和終止節(jié)點)起始節(jié)點為頁面起始節(jié)點,終止節(jié)點為頁面跳轉(zhuǎn)或終止執(zhí)行函數(shù),起始節(jié)點集合為ST,終止節(jié)點集合為TE。起始節(jié)點和終止節(jié)點驗證權(quán)限為NULL。
定義4(權(quán)限驗證節(jié)點)權(quán)限驗證節(jié)點是驗證訪問用戶是否具有某種權(quán)限或擁有某個角色的代碼模塊,權(quán)限驗證節(jié)點集合為A。權(quán)限驗證節(jié)點的權(quán)限與它所驗證的角色相關(guān),例如if($_COOKIE[“user”]==“admin”)的權(quán)限即為它檢查的角色“admin”的權(quán)限。
權(quán)限驗證圖表示為G=(V,E),其中V為節(jié)點集,V={v|v∈(ST?A?S?TE)}。假設(shè)節(jié)點a,b∈V,a權(quán)限驗證通過后可達b,則稱a有一條T邊到b,記作a→T=b,若a權(quán)限驗證未通過仍然可達b,則稱a有一條F邊到b,記作a→F=b,若a直接到b,則a→T=a→F=b。E={

任意資源節(jié)點存在一條或者多條權(quán)限驗證路徑,權(quán)限驗證路徑上的T邊的源節(jié)點稱為有效權(quán)限驗證節(jié)點,而所有有效權(quán)限驗證節(jié)點的權(quán)限并集則為權(quán)限驗證路徑的驗證權(quán)限。如果用U表示權(quán)限集,資源節(jié)點s∈S的權(quán)限驗證路徑r∈routes的驗證權(quán)限可表示為:

定義5(權(quán)限控制漏洞)如果資源節(jié)點s∈S存在一條驗證權(quán)限為ur?U的權(quán)限驗證路徑r且s對應(yīng)的訪問權(quán)限為us?U ,若us?ur,則資源s的訪問權(quán)限高于驗證權(quán)限,此時擁有權(quán)限低于資源訪問權(quán)限的角色可以通過路徑r訪問資源節(jié)點s,則此時存在針對資源節(jié)點s的權(quán)限控制漏洞。
控制流圖(CFG)為有向圖G=(N,E,entry,exit),N為節(jié)點集,每個節(jié)點代表一個基本塊。邊集E={
通過節(jié)點識別從CFG中分離出定義2~4中的節(jié)點,這些節(jié)點與程序的權(quán)限驗證邏輯相關(guān),依據(jù)節(jié)點間的驗證邏輯關(guān)系,生成通過T邊和F邊連接的權(quán)限驗證圖。因此,權(quán)限驗證圖可以表示頁面的權(quán)限驗證邏輯。由定義4、5可知,權(quán)限驗證圖中每個資源節(jié)點對應(yīng)至少一條權(quán)限路徑,比較資源節(jié)點對應(yīng)的權(quán)限路徑驗證權(quán)限與資源節(jié)點訪問權(quán)限,即可檢測權(quán)限控制漏洞。因此本文算法分為以下兩步:

表1 簡單權(quán)限控制實例
(1)解析php源碼,生成CFG,遞歸遍歷CFG,識別節(jié)點,并生成權(quán)限驗證圖。
(2)深度優(yōu)先搜索權(quán)限驗證圖,獲取每個資源節(jié)點對應(yīng)的所有權(quán)限路徑,計算權(quán)限路徑驗證權(quán)限,并與資源節(jié)點訪問權(quán)限比較,判定是否存在權(quán)限控制漏洞。
權(quán)限驗證節(jié)點分為頁面內(nèi)權(quán)限驗證節(jié)點和頁面間權(quán)限驗證節(jié)點,頁面內(nèi)權(quán)限驗證節(jié)點由分支語句(if-then-else或者switch)和包含權(quán)限變量的條件表達式組成,權(quán)限變量預(yù)先配置;頁面間權(quán)限驗證節(jié)點包括封裝權(quán)限驗證節(jié)點的函數(shù)和頁面。表1中“delete.php”包含3個權(quán)限驗證節(jié)點,行4的“else if(!checkAdmin($_COOKIE[‘username’])))”和行3的“if(!$logined)”為頁面權(quán)限驗證節(jié)點,行1的“include(‘a(chǎn)ccess.php’)”為頁面間權(quán)限驗證節(jié)點,在“access.php”中包含了頁面內(nèi)權(quán)限驗證模塊。
頁面間權(quán)限驗證節(jié)點均可等價為if(cond),其中cond=expr1 op1 expr2 op2 expr3…,而expri為不包含邏輯運算符&&和||的簡單條件表達式,權(quán)限變量格式為{變量名,參數(shù),驗證通過取值,權(quán)限}(變量不為函數(shù)時,參數(shù)取值為NULL),例如列表1中“{$_COOKIE[‘isLogined’],NULL,1,‘isLogined’}”,表示 cookie 中變量isLogined值為1時,權(quán)限高于“user的角色可通過驗證。頁面內(nèi)權(quán)限驗證節(jié)點算法:
算法1頁面內(nèi)權(quán)限驗證節(jié)點識別算法
輸入:條件表達式cond,權(quán)限變量集合authVar。
輸出:節(jié)點驗證權(quán)限w,條件表達式值val。
1.DisAuthNode(cond,authVar)
2. w=NULL,op=&&,val=True,op=&&,val=True
3. while cond
4.expr=GetFirstExpr(cond)//取第一個簡單表達式
5. for var in expr
6. if var in authVar or DataFlaw(var) in authVar
7.tmp=GetVar(authVar,var)
8. replace(expr,var,tmp)//用 tmp 值替換expr中的var
9. if expr
10. op=||,w=tmp&&w
11. val=val op expr,delete expr from cond
12. if cond==NULL
13. break
14. op=op1,delete op1 from cond
15.return[w,var]
算法1中,第3~14行遍歷條件表達式cond中的所有簡單條件表達式。首先取第一個簡單條件表達式expr,然后針對expr中的所有變量進行后向數(shù)據(jù)流分析,判斷變量是否為權(quán)限變量。如果是,則用權(quán)限變量值替換expr中變量,計算expr值。將expr值與條件表達式值val進行運算,然后刪除當(dāng)前expr,接著替換運算符op,并刪除op,重復(fù)直到cond為NULL。最終返回節(jié)點驗證權(quán)限和條件表達式值。
頁面間權(quán)限驗證節(jié)點是函數(shù)或頁面封裝了頁面間權(quán)限驗證節(jié)點,因此只需要對函數(shù)調(diào)用或include等包含的頁面,重復(fù)上述步驟即可。頁面間權(quán)限驗證節(jié)點驗證權(quán)限為其包含的頁面內(nèi)權(quán)限節(jié)點權(quán)限。
本文中的資源節(jié)點主要為數(shù)據(jù)庫操作,包括刪除、更新、插入、查詢某一張表,針對不同表的不同操作對應(yīng)的角色也不同,因此可以用三元組(操作,表,角色)表示一個資源節(jié)點。預(yù)先配置時,可以根據(jù)系統(tǒng)的權(quán)限表生成資源權(quán)限表,每一項包含一個三元組。識別資源節(jié)點時,首先識別數(shù)據(jù)庫操作函數(shù),然后從函數(shù)參數(shù)中匹配操作和表,如果匹配到,則將這個代碼模塊視為資源節(jié)點。
每個頁面均有唯一的起始節(jié)點,而終止節(jié)點則包括頁面結(jié)束,return語句,exit和die等終止執(zhí)行函數(shù),以及頁面跳轉(zhuǎn)語句。頁面跳轉(zhuǎn)語句包含多種形式,表2給出了頁面跳轉(zhuǎn)實例。文獻[10]提出了一個鏈接提取的綜合性方法,本文只需要識別跳轉(zhuǎn)語句,因此首先匹配API函數(shù),例如“Header、echo、print”,然后在函數(shù)參數(shù)中匹配是否包含本地或遠程地址。當(dāng)匹配到Header函數(shù)時,下一個節(jié)點必須為終止執(zhí)行函數(shù),否則不識別為終止節(jié)點。

表2 PHP頁面跳轉(zhuǎn)方法實例
生成權(quán)限驗證圖只需要遍歷CFG圖,識別節(jié)點類型,將節(jié)點加入權(quán)限驗證圖,然后遞歸得到節(jié)點的T邊和F邊指向的權(quán)限驗證節(jié)點,其中資源節(jié)點的T邊和F邊指向同一節(jié)點,終止節(jié)點的T邊和F邊指向NULL。算法如下:
算法2權(quán)限驗證圖生成算法
輸入:CFG,權(quán)限變量checkNodes,資源集s。
輸出:權(quán)限驗證圖Graph。
1.GraphBuilder(CFG,checkNodes,s)
2. node=curr=CFG->start
3. if curr==exit||!curr||curr為終止節(jié)點
4. node->T=node->F=NULL
5. else if curr是權(quán)限驗證節(jié)點
6. node->T=GraphBuilder(curr->True,checkNodes,s)
7.node->F=GraphBuilder(curr->False,checkNodes,s)
8. else if curr是資源節(jié)點
9. node->T=node->F=GraphBuilder(curr->child,checkNodes,s)
10. else
11. node=GraphBuilder(curr->child,checkNodes,s)
12.return(Graph=node)
算法2為遞歸算法,取CFG中首節(jié)點,判斷節(jié)點類型,如果節(jié)點為終止節(jié)點、exit或者NULL,則將節(jié)點node的T邊和F邊均指向NULL。curr→True、curr→False表示當(dāng)前節(jié)點跳轉(zhuǎn)條件為真或假的子節(jié)點,curr→child表示當(dāng)前節(jié)點的子節(jié)點(無跳轉(zhuǎn))。節(jié)點為權(quán)限驗證節(jié)點、資源節(jié)點時,分別將node的T邊和F邊指向不同的節(jié)點。節(jié)點如果為其他類型節(jié)點,則忽略當(dāng)前節(jié)點,直接遞歸當(dāng)前節(jié)點子節(jié)點。圖1是通過上述算法生成的一個權(quán)限驗證圖,從圖中可以清晰地獲取從起始節(jié)點到資源節(jié)點的所有路徑。

圖1 權(quán)限驗證圖
根據(jù)定義5,通過深度優(yōu)先遍歷權(quán)限驗證圖,獲取起始節(jié)點到目標資源節(jié)點的所有權(quán)限驗證路徑的權(quán)值,每獲取一條權(quán)限驗證路徑的權(quán)值后,比較權(quán)值與資源訪問節(jié)點權(quán)值,從而判斷漏洞是否存在,具體算法如下:
算法3漏洞檢測算法
輸入:權(quán)限驗證圖G,目標資源節(jié)點s。
輸出:漏洞vul。
1.DetectVul(G,s)
2. stack.push(G->start) //入棧
3. G->start->visited=1
4. do
5. node=GetChild(stack.top) //獲取節(jié)點的非空未被訪問子節(jié)點
6. if node==s
7. var=stack.traverse()//k為棧底節(jié)點,k+1為下一個節(jié)點,如果k->F!=k+1,tmp=tmp||k,重復(fù)直到k為NULL,返回tmp
8. if var 9. report vul,return 10. else if node!=NULL 11. stack.push(node) 12. node->visited=1 13. continue 14. stack.pop()//棧頂節(jié)點被訪問,出棧 15.while!stack.isEmpty() 在算法3中,建立了一個節(jié)點棧stack,首先將權(quán)限驗證圖G的首節(jié)點入棧,并設(shè)置為已訪問,然后第4~15行為對G的深度優(yōu)先搜索。當(dāng)搜索到目標資源節(jié)點s時,此時棧中所有節(jié)點即為s的一條權(quán)限路徑,從棧底遍歷整個棧,根據(jù)定義4,計算權(quán)限路徑驗證權(quán)限var,比較var與資源節(jié)點s.var,如果有漏洞則報告漏洞。如果節(jié)點不為s且不為NULL,則將節(jié)點入棧,然后直接跳轉(zhuǎn)到循環(huán)開始,否則當(dāng)前節(jié)點出棧,棧為NULL時,循環(huán)遍歷結(jié)束。通過該算法,圖1中start到s的權(quán)限驗證路徑總共有兩條,即{start,1,2,3,s}和{start,1,2,4,s}。因為3→T=3→F=s,所以計算權(quán)值時,節(jié)點3不是有效權(quán)限節(jié)點,因此,它們的有效權(quán)限驗證節(jié)點集合為{1,2}、{1,4},假設(shè)權(quán)限驗證節(jié)點1和4的權(quán)限均小于資源節(jié)點s的權(quán)限,則存在一條權(quán)限驗證路徑{start,1,2,4,s}的權(quán)值小于資源節(jié)點s的權(quán)限,因此資源節(jié)點s存在權(quán)限控制漏洞,報告漏洞信息。遍歷所有的資源節(jié)點后,就可以完成對頁面的漏洞檢測。通過構(gòu)建權(quán)限驗證圖的方法,可以簡化程序邏輯,將無規(guī)則的權(quán)限驗證邏輯轉(zhuǎn)換為清晰的權(quán)限驗證路徑,從而較大地提高權(quán)限控制漏洞分析效率和準確度。 為了驗證算法有效性,本文實現(xiàn)了權(quán)限控制漏洞檢測工具:AccVulHunter。PHP-Parser是由PHP編寫的一個語法分析器,直接生成抽象語法樹(AST),功能簡單,易于擴展,因此,將PHP-Parser作為語法分析器。整個工具包括全局信息收集、CFG生成部分、權(quán)限驗證圖構(gòu)建、權(quán)限控制漏洞檢測和漏洞報告等5個部分。整個工具的系統(tǒng)結(jié)構(gòu)如圖2。 AccVulHunter針對權(quán)限控制漏洞的檢測主要步驟為: 步驟1將頁面分為功能頁面和定義頁面,初始化程序主要參數(shù)。 步驟2對功能頁面進行分析,生成AST抽象語法樹,然后遍歷AST,收集全局信息,并構(gòu)建CFG控制流圖。 步驟3遍歷CFG圖,識別權(quán)限驗證節(jié)點和資源訪問節(jié)點,根據(jù)權(quán)限驗證圖構(gòu)建算法構(gòu)建頁面權(quán)限驗證圖。 步驟4判斷頁面所有資源訪問是否存在權(quán)限控制漏洞,如果存在通過xml報告漏洞位置信息和對應(yīng)資源信息。 圖2 AccVulHunter工具系統(tǒng)結(jié)構(gòu)圖 為了測試漏洞檢測算法的有效性,本文選取了4個Web開源應(yīng)用mantisbt-master、SlimCMS、redaxscript和DDCMS以及在文獻[6-7]中測試的3個Web應(yīng)用SCARF、PHP Calendars、PHPOLL。 實驗的結(jié)果如表3所示,總共報告漏洞12個,經(jīng)過人工確認漏洞數(shù)為8個,確認漏洞中未知漏洞2個,已知漏洞6個。AccVulHunter在SCARF、PHPCalendars中各檢測到了1個已知權(quán)限控制漏洞,分別為CVE-2006-5909和CVE-2010-0380。SCARF的“generaloptions.php”中缺少權(quán)限驗證節(jié)點“require_admin()”,導(dǎo)致任意角色可以編輯應(yīng)用配置,而PHPCalendars的instll.php中可以編輯系統(tǒng)配置,然而并未驗證用戶權(quán)限,因此存在權(quán)限控制漏洞。文獻[10]中的工具在PHPPOLL中檢測到了3個新的漏洞,在“modifica_configurazione.php”、“modifica_votanti.php”、“modifica_band.php”中檢測到了權(quán)限控制漏洞,而本文工具檢測出了“modifica_votanti.php”中缺乏權(quán)限驗證,導(dǎo)致用戶可以修改其他用戶信息,另外兩個漏洞由于版本更新已修補。這3個漏洞屬于均為強制訪問權(quán)限控制漏洞。 SlimCMS中的“redirect.php”中包含插入新管理員的資源節(jié)點,但在頁面中被未發(fā)現(xiàn)權(quán)限驗證節(jié)點,因此檢測出了一個權(quán)限驗證缺失的漏洞(CVE-2008-5708)。Redaxscript中檢測到了1個權(quán)限控制漏洞,在“admin_center.php”中,不同權(quán)限用戶屬于不同組,在生成新用戶中,雖然驗證了用戶是否有權(quán)注冊為“admin”,但是沒有驗證用戶注冊的組,因此可以通過將用戶組改為管理組,使得普通用戶具有管理員權(quán)限,這個漏洞屬于權(quán)限驗證不當(dāng)?shù)穆┒础?/p> AccVulHunter還在DDCMS和SlimCMS中檢測到了兩個未知漏洞,在DDCMS中,通過權(quán)限變量“$admin”驗證管理員,在頁面“wap_admin_cg.php”中,雖然通過權(quán)限節(jié)點“if($admin!=1)”進行了權(quán)限驗證,但是當(dāng)權(quán)限驗證失敗時,調(diào)用header函數(shù)跳轉(zhuǎn),AccVulHunter在header函數(shù)后未匹配到exit或die函數(shù),因此并未視為終止節(jié)點,因此仍能訪問到后續(xù)節(jié)點,因此存在一個權(quán)限驗證處理邏輯不當(dāng)?shù)穆┒础T赟limCMS中,系統(tǒng)通過查詢管理員用戶名和用戶提交用戶名是否一致,判斷用戶權(quán)限,而在“install.php”中可以重新設(shè)置管理員用戶名和密碼,但是在文件中并未對創(chuàng)建者身份進行驗證(數(shù)據(jù)庫用戶名密碼直接調(diào)用配置文件,未進行驗證)。如果攻擊者重新訪問該頁面,則可以創(chuàng)建新的管理員用戶名和密碼,從而提升權(quán)限,因此存在一個強制訪問權(quán)限控制漏洞。 本文工具采用了基于權(quán)限驗證圖的檢測算法。該算法定義了將權(quán)限控制漏洞的檢測轉(zhuǎn)為資源節(jié)點對應(yīng)的權(quán)限路徑驗證權(quán)限與資源節(jié)點訪問權(quán)限的比較的檢測模型,而前述4種權(quán)限控制漏洞中均存在一條權(quán)限低于資源節(jié)點權(quán)限的權(quán)限路徑,因此本文的檢測模型可以覆蓋這四種權(quán)限控制漏洞。文獻[10]中算法只判斷頁面是否包含防護,并使用強制訪問進行確認,因此只能覆蓋強制訪問權(quán)限控制漏洞。而文獻[11]中,忽略了權(quán)限驗證失敗后的處理邏輯檢查,導(dǎo)致無法檢測權(quán)限驗證處理邏輯不當(dāng)?shù)臋?quán)限控制漏洞。表4是本文工具與文獻[10-11]中工具的漏洞發(fā)現(xiàn)類型比較,從表中可以看出文獻[10]中工具只能檢測強制訪問權(quán)限控制漏洞,文獻[11]的ACMA可以檢測除權(quán)限驗證處理邏輯不當(dāng)以外的權(quán)限控制漏洞,而AccVulHunter可以檢測全部4種權(quán)限控制漏洞。因此通過實驗對比,可以證明本文算法具有更好的漏洞檢測廣度。 表3 AccVulHunter掃描結(jié)果 表4 漏洞發(fā)現(xiàn)類型比較 AccVulHunter掃描Web系統(tǒng)的時間與系統(tǒng)的文件數(shù)和資源節(jié)點數(shù)以及權(quán)限節(jié)點數(shù)正相關(guān),由于權(quán)限驗證節(jié)點識別涉及到更多的數(shù)據(jù)流分析和過程間分析,相對于另外兩者,掃描時間相對較長,未來通過優(yōu)化節(jié)點識別,仍然可以提高算法分析速度。 綜合實驗結(jié)果看,本文的權(quán)限控制漏洞檢測算法可以快速、有效地發(fā)現(xiàn)權(quán)限控制漏洞,相對于已有方法,能夠檢測更多的權(quán)限控制漏洞,具有更高的實用性。另外由于相對更大的代碼分析量,AccVulHunter在時間消耗上較大,但相對于人工審查,仍然能較大提高分析速率。 本文提出了一種基于權(quán)限驗證圖的訪問控制漏洞檢測算法,通過靜態(tài)識別權(quán)限驗證節(jié)點,建立權(quán)限驗證圖,生成權(quán)限驗證路徑,快速有效地檢測權(quán)限控制漏洞,相對于已有方法,擴大了權(quán)限控制漏洞檢測范圍并提升了檢測準確性。設(shè)計了漏洞檢測工具AccVulhunter,針對7個Web內(nèi)容管理系統(tǒng)進行了漏洞檢測實驗,證明了漏洞檢測算法的有效性,下一步將優(yōu)化數(shù)據(jù)流分析和節(jié)點識別算法,進一步加快工具掃描速度。 [1]劉金曉,馬素霞,齊林海.Web應(yīng)用系統(tǒng)中權(quán)限控制的研究與實現(xiàn)[J].計算機工程與設(shè)計,2008,29(10):2550-2553. [2]Kolovski V,Hendler J,Parsia B.Analyzing web access control policies[C]//International Conference on World Wide Web(WWW 2007),Banff,Alberta,Canada,May 2007:677-686. [3]OWASP.Owasp top 10-2013 the ten most critical Web application security risks.[EB/OL].[2013-06-12].https://www.owasp.org/index.php/Top10#OWASP_Top_10_for_2013. [4]Jovanovic N,Kruegel C,Kirda E.Precise alias analysis for static detection of web application vulnerabilities[C]//The Workshop on Programming Languages&Analysis for Security,2006:27-36. [5]Su Z,Wassermann G.The essence of command injection attacksin web applications[J].ACM Sigplan Notices,2006,41(1):372-382. [6]Dalton M,Kozyrakis C,Zeldovich N.Nemesis:Preventing authentication & accesscontrolvulnerabilitiesin Web applications[C]//Proceedings Usenix Security Symposium,Montreal,Canada,2009:267-282. [7]Stergiopoulos G,Katsaros P,Gritzalis D.Automated detection of logical errors in programs[C]//International Conference on Risks and Security of Internet and Systems,2014:35-51. [8]Gauthier F,Letarte D,Lavoie T,et al.Extraction and comprehension of moodle’s access control model:A case study[C]//Conference on Privacy,Security and Trust(PST 2011),Montreal,Québec,Canada,2011:44-51. [9]Letarte D,Merlo E.Extraction of inter-procedural simple role privilege models from PHP code[C]//Working Conference on Reverse Engineering,2009(Wcre’09),2009:187-191. [10]Sun F,Xu L,Su Z.Static detection of access control vulnerabilities in Web applications[J].Shanxi Architecture,2011,2:6392-6396. [11]Gauthier F,Merlo E.Fast detection of access control vulnerabilities in PHP Applications[J].Reverse Engineering,2012:247-256. [12]Zhu J,Chu B,Lipford H.Detecting privilege escalation attacks through instrumenting Web application source code[C]//Proceedings of the 21st ACM on Symposium on Access Control Models and Technologies,2016:73-80. [13]Liu T,Lin Y,Wen X,et al.BindingDB:A Web-accessible database of experimentally determined protein-ligand binding affinities[J].Nucleic Acids Research,2007,35(S1):198-201. [14]Hills M.Streamlining control flow graph construction with DCFlow[C]//International Conference on Software Language Engineering.[S.l.]:Springer International Publishing,2014:322-341. [15]Nandi A,Mandal A,Atreja S,et al.Anomaly detection using program control flow graph mining from execution logs[C]//Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining,2016:215-224.4 實驗與結(jié)果分析
4.1 漏洞檢測工具

4.2 實驗與結(jié)果分析


5 結(jié)束語