高宏佳, 李世明,2
(1 哈爾濱師范大學 計算機科學與信息工程學院, 哈爾濱150025;2 上海市信息安全綜合管理技術研究重點實驗室, 上海200240)
開放的互聯網上,網絡安全事件頻發,各種網絡攻擊行為已經嚴重威脅著網絡服務的安全運行。 如何進行預防和在線檢測成為網絡安全防護的研究熱點。 為最小化安全風險、減少被入侵概率,有必要在系統正式運行前進行滲透測試,事先進行攻擊模擬。為降低在滲透測試過程中大量人工操作成本,有效提高測試效率,本文提出了基于自動化思想的滲透測試策略,來提高滲透測試效率。 國內外也有相關研究成果被提出,如基于Agent 智能模型思想的滲透測試系統[1]。 歷年各級各類網絡攻防賽、黑客大賽等也為滲透測試自動化做出了貢獻,促進了該研究熱點的研究和發展。
滲透測試攻擊,是通過模擬惡意黑客的攻擊手段,實現對被測系統的安全性測試與評估。 它主要包括前期信息采集、交互獲取操作系統、目標IP、開放端口、提供服務SQL 漏洞及注入點等等。 隨后對所獲取的信息進行審核處理,獲取外網IP 以及內網IP 并進行滲透測試、提權等操作。 最后,通過大量的分析,自動得出滲透測試報告,報告中對所有的漏洞,包括HTTP 請求頭泄露、文件泄露、XSS 泄露、點擊劫持、是否SQL 注入成功、是否設置X-contenttype-options 頭等情況,以及所有的端口開放情況、服務情況進行整理、對主機的漏洞進行評級。 最終給出的報告有利于對主機進行安全分析,盡量減少入侵風險。
本文自動化滲透攻擊核心總體為:(1)輸入目標主機域名及參數;(2)輸入參數執行自動化滲透;(3)生成滲透測試報告。 執行流程如圖1 所示。
通過分析部分滲透攻擊技術,結合并分析漏洞特點及復雜性,現闡述本系統重要模塊如下:
(1)信息收集。 滲透測試首先從搜集攻擊目標的基本信息開始,經過一系列分析、排除、進一步搜集的迭代過程。 本文創新性利用python 代碼編程進行自動搜集網站Title 和banners,通過對外網和內網的探測來獲取目標主機等有效信息,為后面的測試做好前期準備[2]。

圖1 滲透攻擊流程Fig.1 Penetration attack process
(2)漏洞掃描滲透。 為簡化實驗,本文利用已知漏洞對目標web 應用可能存在的利用點進行檢測與利用[3];通過檢測并成功利用漏洞,可以得出滲透測試的憑證,并依據HTTP 協議的通用性,改變HTTP 協議的內容以達到web 應用系統滲透檢測利用的目的,對其存在已知漏洞進行滲透攻擊[4]。
(3)滲透日志。 滲透日志是記錄在滲透過程中滲透過程所獲得的信息(如端口掃描、弱口令等)、對滲透過程以及攻擊過程中出現的其它問題加以整理并進行文檔化記錄。
本文自動滲透測試利用python 語言編程,來搜集網站Title 和banners,對內網設備探索,快速確定目標,Title 可由BeautifulSoup 直接獲取。 以利用python 語言進行SQL 盲注為例[5],采取二分查找算法實現信息檢索[6],偽代碼描述如下:
INPUT:I ={ipi|ipi∈IPset,i ∈Z+} / / IPset:被攻擊目標IP 集合
OUTPUT:O =? ∪{ <ui,pi>|ui∈U,pi∈P,i ∈Z+} / /輸出結果
/ /其中,U,P 分別為破解時用的用戶名字典和密碼字典
connecting ipi
Initialization / /初始化
define chardataU[U_MAX] / /
define chardataP[P_MAX] / /
dataU =U; / / 將用戶名字典拷貝到數組中
dataP =P; / / 將密碼字典拷貝到數組中
Asc_sort(dataU); / /對用戶名字典數據按升序排序
Asc_sort(dataP); / /對密碼字典數據按升序排序
int low, high, mid;
char ui,pi;
int low =0,high,mid;
high =MAX-1;
/?用戶名檢測?/
Low =0;
high =U_MAX -1;
while(low! =high)
{
mid =(low+high)/2;
if (dataU[mid]! =ui)
{
if(dataU[mid]>ui)
high =mid-1;
else if(dataU[mid]<ui)
low =mid+1;
}
else return ui;
} /?密碼檢測?/同上
通過模型得到盲注實例,部分關鍵代碼如下:
url_dump ='http:/ /%s/? id =-1\' union select{inc}if( ord(mid( (select group_concat({column_name}) from {table_name}), {pos}, 1)) {op}{ord}, sleep(2.5), 1) ;--+' % url_part
req_count =0
sleep_count =0
def binary_search(url, low, high):
gt ='>'
lt ='<'
eq ='='
while low <=high:
mid =(low +high) / / 2
if judge(url % (eq, mid)):
return mid
elif judge(url % (gt, mid)):
low =mid +1
else:
high =mid - 1
return -1
def dump_binsearch(column_count, table_name,column_name):
data =''
pos =1
inc =make_union(column_count)
while True:
url =url_dump.format(inc =inc, pos =pos,op ='%s', ord ='%d', table_name =table_name,column_name =column_name)
ord =binary_search(url, low, high)
if ord >-1:
data +=chr(ord)
pos +=1
continue
else:
return data
本仿真實驗測試硬件配置環境為CPU 酷睿I5,2.3GHz 主頻,系統內存8GB,自動滲透測試系統采用python3.7 開發,采用kali linux 虛擬機作為測試主機:
測試是基于python 的kali+linux 滲透測試需要而 搭 建 的 selenium + firefox + geckodriver +beautifulSoup 環境。
其中:
(1)Selenium 是一款Web 程序測試工具,不受瀏覽器、語言等限制,能夠完成自動化測試功能。
(2)geckodriver+firefox
Geckodriver 采 用 WebDriver 兼 容 模 式,WebDriver 協議描述以及HTTP API 編程接口,可實現Marionette 遠程協議通信。
(3)BeautifulSoup
將Beautiful Soup 添加到python 環境中,將獲得更多庫函數。 并具有分析搜素結果、數據抓取、unicode 編碼轉化、UTF-8 編碼輸出等功能,起到python 解釋器作用。
實驗過程中通過直接輸入目標主機的IP 地址和相應參數,自動進行信息收集、滲透攻擊和日志生成。
攻擊靶機過程中獲取了目標主機類型、端口、服務、網絡類型、網絡安全和漏洞等信息,實驗結果如表1 所示。
本項目通過對目標主機進行滲透實驗得出滲透測試中易受攻擊的滲透點、可利用代碼、開放端口、SQL 注入點、文件上傳漏洞、接觸漏洞等。 此外滲透測試可能帶來一些風險,如因頻繁掃描、違反安全策略等可能出現系統崩潰、運行出錯或賬號鎖定,造成滲透測試被迫中止。 此外,也可采用適當技術措施來降低風險[7]。 如對測試任務分解、約束掃描測試策略、規則測試危險時間段等。 本實驗的弊端在于滲透時間過長,滲透測試需要大量的前期信息搜集,對于防護較好的目標主機需要更長的滲透時間。

表1 滲透攻擊信息表Tab.1 Penetration attack information
本項目可以自動完成網絡下的安全掃描、探測、利用等工作,具備全面、低干擾的特點。 利用python進行信息采集搜集網站Title 和banners,對內網設備探索,快速確定目標。 具有查找注入點等應用漏洞、破解數據庫結構、爆破弱口令、遠程指令執行、外網注入、內網掃描等功能,能夠發現指定目標的漏洞點,對漏洞進行綜合利用,最終獲取帶有指定關鍵字的文件。 減輕安全測試給業務帶來的干擾。
由于本文的研究還處于探索自動滲透測試階段,有諸多研究沒有開展。 在后繼工作中,還將擴展對滲透測試自動化更多的研究,進一步優化信息收集、滲透測試工具利用優化等。