廖 微
(軍事科學院系統(tǒng)工程研究院軍事新能源技術研究所 北京 102300) (nyyth2019@163.com)
5G的普及使得人類社會步入了新的發(fā)展階段,電子設備遍及國民生活的方方面面.伴隨著智能化出現(xiàn)的是迅速增長的電力需求.在這種趨勢下,現(xiàn)有的集中式發(fā)電系統(tǒng)結(jié)構(gòu)復雜、成本高,而且遠距離傳輸和高強度運行難以滿足更加多樣化和高質(zhì)量的供電需求[1-2].為了充分利用可再生能源發(fā)電的技術優(yōu)勢,分布式的微電網(wǎng)模式成為人們的關注熱點.智能微電網(wǎng)是與傳統(tǒng)的集中式電網(wǎng)系統(tǒng)相對的概念.它在傳統(tǒng)的輸配電基礎上,將可再生能源發(fā)電技術作為新型分布式電源,通過部署集成能源管理系統(tǒng)(EMS)和物聯(lián)網(wǎng)技術實現(xiàn)了一種新的環(huán)境友好型發(fā)電模式[3].按照一定的拓撲結(jié)構(gòu),多個分布式電源及負載等可以形成獨立、小型的網(wǎng)絡并關聯(lián)至傳統(tǒng)的主網(wǎng)中,由靜態(tài)開關作為中間樞紐.其中,微電網(wǎng)能量管理系統(tǒng)(MGEMS)需要借助互聯(lián)網(wǎng)技術收集和處理大量的實時數(shù)據(jù),進行調(diào)度決策和管理控制,是整個系統(tǒng)的控制中樞.一旦其中的Web應用存在漏洞,攻擊者就能夠攻擊系統(tǒng)服務器,竊取電力數(shù)據(jù)甚至擾亂電能的正常傳輸與配送.因此,針對MGEMS設計和實現(xiàn)完備的Web應用漏洞檢測工具進行測試并提前發(fā)現(xiàn)漏洞,必然能夠提高整個智能微電網(wǎng)系統(tǒng)的安全性.
2020年,國家信息安全漏洞共享平臺(CNVD)共收錄19 964個漏洞,其中,中高危漏洞共計17 542個,所占比重高達87.9%,相較于2019年同比增加24.39%.圖1是不同漏洞類型的分布圖.
圖1 2020年不同類型漏洞占比
可以看出,Web應用程序漏洞位居第2位,僅次于未詳細列出的其他所有漏洞類型總和.不僅如此,這些漏洞數(shù)量并不包括未被發(fā)現(xiàn)或者黑客團隊發(fā)現(xiàn)自行利用的,這種隱藏的漏洞可能才是最影響Web安全性的.比如2015年Hacking Team數(shù)據(jù)泄露事件就造成了很大的影響.Hacking Team是一家專門從事監(jiān)視技術的公司,主要協(xié)助政府監(jiān)控公民,被某組織攻擊后,包括多個0day漏洞的exp,公民信息文件在內(nèi)的400 G的數(shù)據(jù)在網(wǎng)絡上公開.其中的幾個flash漏洞可以影響幾乎所有的Web應用并無法在短時間內(nèi)修復,這使得許多用戶的信息被竊取.此外,由于Web應用的用戶群體龐大,信息傳播速度更快,造成的危害難以想象.
在智能微電網(wǎng)系統(tǒng)中,MGEMS包含大量的物聯(lián)網(wǎng)數(shù)據(jù)交互和操縱過程,不可避免地要大規(guī)模應用Web技術,這使其面臨更多的潛在漏洞[4].一旦被不法分子發(fā)現(xiàn)和利用,不僅用戶的用電數(shù)據(jù)和個人隱私信息被泄露和推斷,整個電力調(diào)配系統(tǒng)也很容易被惡意操縱,影響國民生產(chǎn)生活的整個過程.因此,本文針對智能微電網(wǎng)系統(tǒng)中涉及的Web安全,設計并實現(xiàn)了一個較為全面的漏洞檢測框架,以增強智能微電網(wǎng)系統(tǒng)的安全性和可靠性.
智能微電網(wǎng)是相對于傳統(tǒng)智能電網(wǎng)的一個概念,它將可再生能源技術、分布式電源、儲能裝置、能源管理系統(tǒng)和輸配電基礎設施高度集成[5].它既可以看作是電力系統(tǒng)中一個可控制的調(diào)度單元,能在數(shù)秒內(nèi)對中央控制系統(tǒng)的指令作出反應.同時也可以看作是針對用戶的可定制電源,以滿足多樣化的用電需求.其智能化主要體現(xiàn)在微電網(wǎng)中采用多樣化的傳感技術和物聯(lián)網(wǎng)設備來監(jiān)測底層運行數(shù)據(jù)并進行有效控制,通過模型仿真進行實時分析,挖掘電力特征并制定合理的輸配電策略.如圖2所示,這一切的控制中樞就是其內(nèi)部的微網(wǎng)能量管理系統(tǒng),是保證微網(wǎng)安全運行、有效調(diào)度決策的最重要組成部分.
微電網(wǎng)的概念最早由美國提出,因此美國在相關領域的研究和實踐起步更早,發(fā)展更快,成果更突出.歐洲自1998年逐步開始對微電網(wǎng)進行研發(fā),針對相關的能源集成、協(xié)調(diào)控制等管理方案形成了一套基本的理論體系.我國微電網(wǎng)雖然仍處于起步階段,但也吸引了大量的人力物力資源,通過在研究項目中不斷實踐和摸索,取得了一定成果并確定了基本的技術路線和發(fā)展目標.其中,促進微電網(wǎng)系統(tǒng)智能化、安全化是主要研究方向之一.
圖2 微電網(wǎng)控制結(jié)構(gòu)
Web應用中的漏洞主要可以分為2大類:
一類是Web應用所依托的服務器和數(shù)據(jù)庫軟件自身的漏洞[6].這些漏洞和桌面應用程序的漏洞比較類似,主要有緩沖區(qū)溢出、遠程代碼執(zhí)行、拒絕服務等.現(xiàn)在比較受歡迎的Apache,IIS,Nginx等服務器以及常用的數(shù)據(jù)庫管理系統(tǒng)MySQL,MS SQL Server,Oracle等都或多或少出現(xiàn)過一些比較嚴重的漏洞.由于幾乎每個Web應用中都會用到服務器和數(shù)據(jù)庫軟件,一旦這些軟件出現(xiàn)問題,就很可能被攻擊者批量利用,影響會非常大.
另一類是Web應用本身出現(xiàn)的漏洞,可以分為以下4類:
1) SQL注入漏洞.
SQL注入漏洞是Web應用中最常見的一種漏洞,通過該漏洞可以獲取數(shù)據(jù)庫中的信息,讀取本地文件,甚至執(zhí)行一些命令.SQL注入漏洞在1999年就已出現(xiàn),并在2003年前后危害到達頂峰[7].即使到現(xiàn)在它仍然是OWASP TOP10上的前幾位.
2) 跨腳本攻擊(XSS)漏洞.
跨站腳本攻擊(cross site script, CSS)漏洞主要在前端出現(xiàn),但同樣也是由于后臺程序過濾不嚴導致的.為了避免與層疊樣式表CSS命名沖突,將其簡稱為XSS[8].
3) 跨站請求偽造(CSRF)漏洞.
CSRF是一種欺騙用戶的瀏覽器跨站點去訪問一個需要認證的網(wǎng)站,并執(zhí)行非自愿操作的攻擊手段[9].在實際攻擊中,CSRF漏洞常常和XSS漏洞配合使用,特別是當網(wǎng)站存在同源策略的限制時.
4) 未授權(quán)訪問漏洞.
在Web應用中用戶需要登錄才能訪問頁面中的某些內(nèi)容.但當不同的用戶僅僅是通過URL中的ID參數(shù)來區(qū)分而不添加訪問控制時,他們彼此之間就可以相互查看或修改個人信息[10].
以上只是列舉的Web應用中常見的漏洞,并不局限于此.因此,能夠檢測和識別Web系統(tǒng)中潛在的漏洞威脅對維護整個網(wǎng)絡空間的安全是至關重要的.
為了減少Web應用漏洞的危害,國內(nèi)外已有許多面向企業(yè)的Web漏洞檢測工具出現(xiàn).這些工具主要是向網(wǎng)站服務器發(fā)送不同的HTTP數(shù)據(jù)包,通過分析響應結(jié)果,探測網(wǎng)站服務器版本和數(shù)據(jù)庫版本,然后根據(jù)探測的信息向網(wǎng)站服務器發(fā)送已知類型漏洞的payload,同樣,分析返回結(jié)果判斷是否存在漏洞,最后生成結(jié)果報表.
在國外相對比較成熟的如Acunetix[11], Web Vulnerability Scanner[12],由Java開發(fā),支持ajax解析、flash內(nèi)容檢索,有業(yè)內(nèi)較為先進的SQL注入和XSS漏洞測試引擎,穩(wěn)定性較好,有豐富的報告功能.
在國內(nèi),各大安全公司也推出了不少相關產(chǎn)品,如:360推出的網(wǎng)站安全檢測平臺;保護傘網(wǎng)絡開發(fā)的Safe3 Scanner;知道創(chuàng)宇公司推出的Websaber網(wǎng)站應用安全評估系統(tǒng).這些系統(tǒng)能夠發(fā)現(xiàn)常見類型的Web應用漏洞,提出解決方案,適合常規(guī)的自動化測試.
然而Web漏洞的成因和利用方式都是多種多樣的,用戶的需求也是不同的,這些工具仍存在以下局限性[13]:
1) 較為臃腫,多個功能集成在一起,用戶不易選擇;
2) 速度和掃描的深入度不足;
3) 靈活性較差,不易配合人工的測試使用.
針對以上問題,本文設計和實現(xiàn)了一個完備的漏洞檢測框架,可以由用戶自由選擇掃描引擎,用于輔助安全人員進行漏洞檢測或自動化地漏洞掃描.整個框架包含站點地圖繪制、HTTP代理、請求重放和入侵等多個程序模塊,以輔助智能微電網(wǎng)系統(tǒng)的人工測試,便于安全人員把握Web應用結(jié)構(gòu),完成HTTP流量分析和Fuzzing測試等;自動化掃描的程序模塊既包括單頁面掃描也包括整站掃描,其中單頁面掃描可以選擇調(diào)用Sqlmap,nmap等安全工具,支持輸入命令與安全工具交互,也可以用框架自帶的引擎進行掃描,并返回發(fā)現(xiàn)的漏洞詳情.最后,使用PyQt的樣式設計語言QSS設計了整個程序的界面,優(yōu)化用戶使用感,并將各模塊封裝在單獨的API文件中,便于后續(xù)的擴展和功能完善.
本文設計的漏洞檢測框架如圖3所示,該框架包括站點地圖、HTTP代理、請求重放、入侵、掃描5個功能模塊.各模塊之間既可以獨立使用,也可以相互調(diào)用輸出結(jié)果.
圖3 漏洞檢測框架總體設計
該模塊通過用戶輸入域名,選擇需要使用的協(xié)程數(shù)等參數(shù)后會掃描該域名下的所有頁面,并以目錄樹的形式展現(xiàn).當使用者點擊目錄樹中爬取到的URL時,可以在內(nèi)嵌的瀏覽器中預覽每個頁面以及爬取時的請求/響應包.
3.1.1 高效判重數(shù)據(jù)結(jié)構(gòu)Bloom Filter
URL爬取的難點是URL的去重[14].本文框架使用Python的一個擴展包BitVector實現(xiàn)了高效判重的Bloom Filter數(shù)據(jù)結(jié)構(gòu).該結(jié)構(gòu)在1970年由Bloom提出.Bloom Filter的核心思想是利用多個Hash函數(shù)將URL映射到某些集合里.因為單個Hash函數(shù)出現(xiàn)沖突的可能性比較高,遇到?jīng)_突時就用另外的Hash函數(shù)再次映射,從而減少了沖突[15].但它有一定的誤判率,在判斷某元素是否存在集合中時可能誤判,誤判率會隨著元素個數(shù)的增多而增大.如果應用在該模塊的爬蟲URL去重中,較低的誤判率是可以接受的,誤判1次只是多爬1個頁面而已.為了減少空間的占用,Bloom Filter使用位數(shù)組對元素的Hash進行存儲,占用的內(nèi)存比其他數(shù)據(jù)結(jié)構(gòu)要小得多.
3.1.2 并發(fā)
為了提高爬取的速度,本文框架使用協(xié)程進行并發(fā),將每個耗時的IO操作封裝成一個協(xié)程.協(xié)程類似于一個個函數(shù),一個函數(shù)執(zhí)行到一半時可以跳到另一個函數(shù)執(zhí)行,這種特性非常適合IO密集型程序的迸發(fā),實現(xiàn)非阻塞的異步IO[16].IO密集型的程序耗時主要發(fā)生在發(fā)出請求等待響應的那段時間,有了協(xié)程就可以在剛發(fā)送完請求后跳到另一個協(xié)程執(zhí)行,收到響應后再回來繼續(xù)執(zhí)行接下來的任務,也就是同時可以并發(fā)幾個鏈接.協(xié)程實際上只在1個線程中運行,主要利用線程內(nèi)任務的切換,一般不需要加鎖,并且占用資源較少.
3.1.3 模塊實現(xiàn)
算法1是針對站點地圖的并發(fā)式爬蟲算法,使用Bloom Filter數(shù)據(jù)結(jié)構(gòu)進行去重,并設計了一些正則表達式來匹配和抓取頁面中的鏈接.
算法1.站點地圖爬蟲算法.
輸入:域名dname、協(xié)程數(shù)目n.
① 初始化爬取成功的URL隊列q,Bloom Filter數(shù)據(jù)結(jié)構(gòu)seen_url;
② 將域名的首頁URL放入q和seen_url;
③ 創(chuàng)建協(xié)程;
④ WHILE 隊列q非空
⑤ 從q中取出爬取到的url,輸出并發(fā)送請求;
⑥ IF響應為重定向
⑦ THEN 添加其到q和seen_url中;
⑧ ELSE
⑨ 利用正則表達式從返回頁面中找到所有鏈接;
⑩ IF 域名協(xié)議符合要求且不在seen_url中
對于該模塊中的頁面預覽功能,通過PyQt的QWebView類實現(xiàn).使用者點擊URL后,通過QWebView的load方法將其加載出來,并根據(jù)程序界面大小調(diào)整頁面比例.請求/響應包分析則需要通過Python的requests包獲得請求頭和響應對象,并按HTTP包的規(guī)范重新組合請求頭部和主體部分,得到規(guī)范的HTTP請求包和響應包,將其顯示在對應文本框中.
首先瀏覽器需要設置好代理服務器地址,打開本文框架HTTP代理功能,可以攔截瀏覽器的HTTP請求包,支持修改和釋放.攔截的HTTP請求包可以選擇發(fā)送到請求重放或入侵模塊,進行后續(xù)處理.
3.2.1 Socket編程
Socket是網(wǎng)絡中主機間通信必不可少的部分,如果把網(wǎng)絡中的主機比喻為一部部電話機,那么Socket就是電話線插口.本文只涉及用戶客戶端和Web服務器之間的通信,所以下面只簡要說明1個客戶端和1個服務器間的通信過程[17].
假設A是服務器,B是客戶端,那么A會將Socket綁定到1個端口,然后監(jiān)聽這個端口,等待接受客戶端的連接.每當有1個客戶端發(fā)送請求就會新開1個Socket,用于和該客戶端通信.客戶端只要知道服務器的地址就可以新建1個Socket來請求連接服務器.兩者連接后,使用send,recv等函數(shù)進行通信,完畢后可以用close關閉連接.
3.2.2 模塊實現(xiàn)
該模塊的核心部分是HTTP請求的攔截和釋放,使用Python的套接字模塊Socket實現(xiàn)與瀏覽器及目標服務器的通信,并用Select模塊實現(xiàn)IO多路復用,防止線程一直等待1個Socket降低整個程序的效率.這里使用Select而不是poll或epoll主要是考慮到可移植性,因為Select既可用于Windows平臺也可用于Linux平臺.
首先,給定host和port為(“127.0.0.1”,6666),并將瀏覽器HTTP代理服務器地址也設置為(“127.0.0.1”,6666).服務器端會新建1個Socket綁定在這個地址并監(jiān)聽,等待接收請求.當用戶訪問網(wǎng)頁時,瀏覽器會將請求發(fā)送到本程序,服務器端接收請求后,新建1個Socket并新開啟1個線程Proxy用于和瀏覽器傳輸數(shù)據(jù),從而避免當1個線程有多個Socket在通信時,程序不知道將接收到的請求傳給哪一個Socket.新開啟的線程Proxy會接收瀏覽器發(fā)來的請求并解碼,然后提取出請求目標的主機號、端口、請求主體內(nèi)容等信息,和通信用的Socket一起用字典存儲起來,并放到隊列中,交給主進程處理.主進程會從隊列中取出該請求,并顯示到文本框中.
請求重放模塊可以接收由HTTP代理模塊發(fā)過來的請求,或由使用者自行輸入請求包,由此發(fā)送請求后可以得到響應包.
該模塊中主要用到Python的http.client模塊,首先和目標服務器建立連接,連接對象為conn,然后根據(jù)HTTP請求包的特點提取出請求的路徑、請求頭部、POST參數(shù)等,然后用http.client的request方法向目標服務器發(fā)送請求,并得到響應對象.響應對象中有狀態(tài)碼、響應HTTP協(xié)議版本、響應主體等信息,需要將其重新組合成標準形式的響應字符串,然后顯示在文本框內(nèi).程序執(zhí)行流程如圖4所示:
圖4 請求重放模塊程序執(zhí)行流程
可以用一系列測試字符串替換請求包中的某位置字符串并發(fā)送請求,用于密碼爆破或Fuzzing測試.因為載荷位置標記、載荷設置等都是比較基礎的字符串操作,故該模塊的核心在開始攻擊后的部分,如算法2所示:
算法2.站點入侵算法.
輸入:目標服務器地址target、目標服務器端口號port、請求包、相應隊列deque.
① 標記載荷位置、輸入或?qū)胼d荷集;
② IF 攻擊類型為“Sniper”
③ THEN 使用載荷集中的載荷逐一替換請求包中被標記的位置(即每次只替換1個位置);
④ ELSE IF 攻擊類型為“Battering ram”
⑤ THEN使用載荷集中的載荷同時替換被標記的所有位置(即每次替換多個位置);
⑥ END IF
⑦ 使用SocketHTTP函數(shù)發(fā)送修改后的請求;
⑧ 將得到的響應以及關鍵信息放入deque中;
⑨ 主進程從deque中取出響應信息,以表格形式顯示;
⑩ IF 結(jié)果存在異常
由于每個發(fā)送的請求相互獨立,沒有需要共享的變量,也不需要加鎖,所以可以將載荷集劃分成幾個部分,交給不同的線程處理,效率比較高.
前4個模塊屬于輔助人工測試的模塊,漏洞掃描模塊主要是自動化的漏洞掃描,分為單頁面的漏洞掃描和整站漏洞掃描,其中單頁面掃描可以選擇調(diào)用其他安全工具如Sqlmap.主要檢測的漏洞有SQL注入和XSS跨站腳本攻擊.
3.5.1 外部工具調(diào)用
在該模塊中,我們使用PyQt的QProcess新建1個子進程,這個子進程會執(zhí)行預設的或用戶自行輸入的命令,打開所選擇的工具,將該子進程輸出的信號綁定到1個槽中,一旦輸出緩沖區(qū)中有字符串就會將緩沖區(qū)內(nèi)的內(nèi)容添加到文本框中.另外,由于有時需要與工具進行交互,所以在界面中保留1個輸入框,用QProcess的write方法將命令通過管道寫入子進程,當子進程結(jié)束時輸入無效.
以Sqlmap的調(diào)用為例,預設的命令是“python2 sqlmap.py -u [url]”,這里[url]要用輸入框中的URL替換,Sqlmap會檢測該URL對應頁面的所有SQL漏洞.
3.5.2 單頁面漏洞掃描
和外部工具的調(diào)用類似,單頁面漏洞掃描同樣需要開啟1個子進程調(diào)用對應文件.單頁面掃描時間復雜度不大,所以無需使用并行的方法加速.子進程每檢測到1個漏洞就將輸出通過管道傳遞給主進程,主進程再將其顯示在文本框內(nèi).掃描的主要原理是將攻擊載荷加到請求的GET參數(shù)或POST參數(shù)中,通過分析響應結(jié)果判斷頁面是否存在漏洞.
針對不同類型的漏洞有不同的檢測方法,該模塊主要檢測SQL注入漏洞和XSS跨站腳本攻擊漏洞.SQL注入漏洞主要分為bool型盲注、報錯注入等[18],它們的檢測方式也各不相同.對于bool型盲注,主要是通過在GET和POST參數(shù)部分加上或者替換類似于and 1=1和and 1=2這樣的載荷,如果2次請求返回的頁面長度不同,可以認為2個載荷成功插入SQL查詢并且執(zhí)行,因此頁面存在bool型盲注漏洞.對于報錯注入,通過在GET和POST參數(shù)部分加上可使Web后臺報錯的載荷,例如單引號.返回的頁面中如果有相關錯誤信息則認為存在報錯注入.至于延時盲注,由于對程序效率影響比較大,這里不進行檢測.對于XSS漏洞的檢測與之類似,在GET和POST參數(shù)中加上XSS攻擊載荷,然后發(fā)送請求,如果返回的頁面載荷被成功植入,則說明頁面存在XSS漏洞.
所有掃描需要的載荷以及對應的測試方式都存放在1個XML文件里,框架已經(jīng)有一些基本的載荷,使用者也可以自行添加,攻擊載荷形式如下:
〈bool〉
〈p1〉 OR 1=1〈/p1〉
〈p2〉 OR 1=2〈/p2〉
〈type〉0〈/type〉
〈/bool〉
bool表示該攻擊載荷用于檢測bool型盲注,p1和p2內(nèi)是攻擊載荷,需要分別添加到請求參數(shù)中,并判斷響應長度是否一樣.type標簽表明載荷的使用規(guī)則,type為0時表明該載荷需要追加到參數(shù)后面,type為1時則表明需要用載荷替換參數(shù)內(nèi)容.
〈error〉
〈p〉′〈/p〉
〈grep〉語法錯誤〈/grep〉
〈type〉0〈/type〉
〈/error〉
error表示檢測報錯注入,與bool型盲注不同的是p內(nèi)是攻擊載荷,grep內(nèi)是需要從響應中尋找的錯誤信息.
〈xss〉
〈p〉lt;script>alert(1)</script>
〈/p〉
〈grep〉lt;script>alert(1)<
/script>〈/grep〉
〈type〉1〈/type〉
〈/xss〉
XSS表示檢測XSS漏洞,和報錯注入檢測方式比較類似.
3.5.3 整站漏洞掃描
實現(xiàn)整站掃描分為2部分:整站頁面的爬取和單頁面漏洞掃描.整站頁面的爬取用的是站點地圖模塊所使用的爬蟲算法,單頁面漏洞掃描已經(jīng)在前文中進行詳細敘述,只需將二者結(jié)合,即每爬取1個URL就使用漏洞掃描引擎進行檢測,實時返回結(jié)果.
Web應用漏洞的自動化掃描實際上就是模擬手工檢測的方式,向目標網(wǎng)站發(fā)送請求并分析響應情況.由于電網(wǎng)系統(tǒng)是國家的要害部門,進行真實環(huán)境的測試需要層層審批,因此通過自身可操縱的網(wǎng)站來模擬微電網(wǎng)中的能源管理系統(tǒng),進行漏洞檢測.
操作系統(tǒng):Windows 7 Ultimate;
CPU:Intel Core i5-5200u;
內(nèi)存:4.00 GB;
開發(fā)工具:Python3.5+PyQt5+SQLite;
開發(fā)環(huán)境:Sublime Text3.
4.2.1 站點地圖
用戶輸入域名,并選擇協(xié)程數(shù),點擊開始,左邊會即時顯示掃描到的該域名下的頁面,以目錄樹的形式顯示,如果點擊停止則會中止掃描.如果點擊1個掃描到的URL,在右側(cè)欄中,上邊的內(nèi)嵌瀏覽器會展示該頁面,下邊的標簽欄會顯示爬取該URL的請求包和響應包,如圖5所示:
圖5 站點地圖
4.2.2 HTTP代理
當打開代理功能時,設置瀏覽器的HTTP代理服務器為localhost:6666(該模塊的代理服務器會監(jiān)聽本地的6666端口),那么訪問HTTP網(wǎng)頁時,請求會被攔截,并在如圖6所示的框中顯示出來,此時所訪問的頁面不會被加載.
圖6 HTTP代理界面
當點擊釋放時請求會被發(fā)送,并將響應返回給瀏覽器,百度的首頁加載成功,如圖7所示.
圖7 點擊釋放后的HTTP代理界面
對于每個攔截到的HTTP請求,還可以選擇發(fā)送到請求重放模塊或入侵模塊,如圖8所示.
圖8 發(fā)送攔截到的HTTP請求
4.2.3 請求重放
請求重放模塊可以接收由HTTP代理模塊傳來的請求,或者是由使用者自行輸入請求包,由此發(fā)送請求后可以得到響應包,如圖9所示,右側(cè)顯示了相應的頭部和主體HTML代碼.
圖9 請求重放界面
如果請求包中不存在Host頭部,則需要輸入目標主機Host.
圖10 輸入目標服務器Host
4.2.4 入侵
圖11 入侵模塊流程
該模塊首先需要給定1個請求包以及請求的服務器地址,這個可以由HTTP代理模塊傳入,或者由使用者自己輸入,如圖10所示.然后需要在請求包中標記一些字符串,并選擇攻擊載荷,即1組字符串,該模塊會用這組字符串分別替換請求包中被標記的字符串,并發(fā)送新的請求,將每個請求的響應結(jié)果信息發(fā)送給主線程.該模塊可以用于密碼爆破、模糊測試等.完整流程如圖11所示.
4.2.5 掃描
在該模塊中,用戶在單頁面掃描選項卡中可以選擇調(diào)用其他安全工具,既可以通過自定義命令,也可以使用程序預設的命令.此處以Sqlmap為例,預設的命令是“python2 sqlmap.py -u [url]”,這里[url]要用輸入框中的URL替換,Sqlmap會檢測該URL對應頁面的所有SQL漏洞,如圖12所示,檢測出了該測試網(wǎng)站中存在的SQL注入漏洞.
如圖13所示,如果不選擇工具(即選擇No tool選項),則會使用該框架自身的掃描引擎,可以看出,同樣檢測出相關漏洞,每檢測出1個漏洞會標明它的類型、URL以及使用的攻擊載荷.
另外,該模塊還支持整站掃描功能,自動掃描某域名下的所有頁面,并檢測漏洞.由于整站掃描時頁面比較多,比較耗時,所以使用協(xié)程來提高效率,將漏洞的檢測和頁面的爬取放到1個消息循環(huán)中,并使用多任務并行處理.用戶可以選擇協(xié)程的數(shù)量,協(xié)程數(shù)越多速度越快,但也越不穩(wěn)定,框架中默認為50個協(xié)程.
圖12 使用Sqlmap進行單頁面掃描
圖13 使用自身掃描引擎進行單頁面掃描
為了更客觀地評測本文所提出的漏洞檢測框架,我們與文獻[19]進行了系統(tǒng)性對比,如表1所示:
表1 系統(tǒng)對比分析
可以看出,本文提出的框架功能更為全面,漏洞掃描引擎更強大,且可擴展性更強.對于掃描粒度而言,文獻[19]更適合于單臺主機的本地掃描,而本文提出的框架更適合Web服務的安全性檢測,服務范圍更廣.但該框架缺少檢測結(jié)果的可視化界面,對于非技術人員有一定的操作難度.
本文針對智能微電網(wǎng)能源管理系統(tǒng)中潛在的Web應用漏洞設計實現(xiàn)了一個較為全面的漏洞檢測框架,用于輔助安全人員進行漏洞檢測或自動化的漏洞掃描.相比其他漏洞掃描工具,本文實現(xiàn)的框架功能較為豐富,包含5個功能模塊:站點地圖、HTTP代理、請求重放、入侵、掃描,可獨立使用,也可相互調(diào)用輸出結(jié)果.將每個功能封裝為單獨的文件和API接口,便于后續(xù)功能的擴展.同時使用協(xié)程技術來提高檢測效率,占用資源較少.最后,通過實驗對實際網(wǎng)站進行測試,證明本文所提出的框架的有效性.
本文框架的穩(wěn)定性和易用性較好,但在功能上仍有許多待改進和完善的地方,如增加更多種類漏洞的檢測,增加更多用戶可以控制的選項.此外,增加一個生成漏洞結(jié)果報表的功能,更有助于微電網(wǎng)相關人員直觀地了解系統(tǒng)中的安全狀況,提升系統(tǒng)的可用性.