• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    LSTM-Exploit:基于LSTM 的智能滲透工具

    2021-07-16 06:13:24王璽民朱俊瀾黃路一秦朝鵬賀文博
    網絡安全技術與應用 2021年7期
    關鍵詞:漏洞端口神經網絡

    ◆王璽民 朱俊瀾 黃路一 秦朝鵬 賀文博

    (江蘇警官學院 江蘇 210031)

    1 背景概述

    根據2020 年《網絡攻擊趨勢:2020 年上半年報告》顯示,2020年上半年網絡釣魚和惡意軟件攻擊急劇增加,從2 月份的每周不足5,000 次激增至4 月下旬的每周超過20 萬次。此外,在5 月和6 月,隨著各國開始解除防疫封禁措施,攻擊者隨之加大了與新冠肺炎疫情相關的攻擊。與3 月和4 月相比,6 月底全球所有類型的網絡攻擊增加了34%。

    頻繁的網絡攻擊暴露出了更多的安全問題:一方面,攻擊者的攻擊目標正從傳統(tǒng)的系統(tǒng)漏洞轉向各種移動感染媒介,另一方面,傳統(tǒng)DDoS 分布式拒絕服務攻擊趨緩,APT 高級持續(xù)滲透攻擊興起,攻擊者往往先通過一系列有組織,有計劃的信息搜集活動獲得目標可能的攻擊點,而后進行大規(guī)模,多手段的網絡攻擊,很容易突破目標防御,直接導致敏感信息泄露或系統(tǒng)癱瘓。

    面對日趨復雜的網絡環(huán)境,滲透測試作為產品安全檢測的一個重要環(huán)節(jié)備受關注。

    當前主流滲透測試需要大量手工工作。手動挖掘系統(tǒng)或應用漏洞,有利于發(fā)掘0day 漏洞,但是如果目標開放了多個端口,就需要對每個端口進行多個測試,基于端口的測試工具是nmap 和metasploit 框架,在開放多個端口的環(huán)境下,利用nmap 掃描后,就需要手動在metasploit中進行測試,在metasploit終端中利用search 命令根據nmap掃描到的服務名搜索exploit 測試模塊,在選定exploit 后,通過set target 命令定義測試目標系統(tǒng),show payloads 命令產生針對不同協(xié)議和系統(tǒng)的payloads 測試載荷,set 命令選擇payload,再根據已選對象設置對應的option,完成后需要從exploit,target,payload 形成的集合中遍歷數據進行測試。但是由于目標系統(tǒng)和端口服務版本限制,往往會產生很多無效測試過程,針對這種情況可以引入現(xiàn)流行的人工智能算法進行預測。

    現(xiàn)存的智能工具有GyoiThon 和Deep Exploit 兩大類。

    GyoiThon:用來實現(xiàn)對存在漏洞的Web 網站實現(xiàn)攻擊,機器學習體現(xiàn)在利用樸素貝葉斯算法實現(xiàn)對Web 指紋和服務器的預測,在獲得信息后直接傳送給metasploit 執(zhí)行,缺少對metasploit 中exploit,target,payload 數據的學習,預測只體現(xiàn)在信息搜集過程中,在執(zhí)行Metasploit 命令時,還是根據if來判斷使用的exploit,target 和payload,無法滿足exploit->target->payloads 大量數據的學習預測,效率依然低下,只不過能夠更為廣泛地搜集信息。

    Deep Exploit:在2018 DEFCON 黑客大會上發(fā)布的工具,LSTM-Exploit 學習了它的執(zhí)行過程,優(yōu)化了它的以下問題:Deep Exploit 無法針對Windows 的445 端口進行測試,原因是靜態(tài)文件配置問題。LSTM-Exploit 優(yōu)化了靜態(tài)config.ini 文件。Deep Exploit 利用的是A3C 強化學習算法,利用多線程模型提高了預測速度,但是沒有將公共訓練模型保存下來,只是保存了測試成功的數據,使得每次重新測試一個IP 時都需要重新訓練模型,并且鑒于A3C 的結果往往是局部最優(yōu)解,無法完全將payload 中指定的隧道協(xié)議和操作系統(tǒng)值影響到整個payload 預測中。所以LSTM-Exploit 利用LSTM 考慮全局預測結果,并將LSTM 訓練好的模型保存下來,方便下一次直接預測,減少因為訓練帶來的時間損耗。

    2 智能滲透

    2.1 智能滲透工具簡介

    滲透測試本質上是開發(fā)者和測試者之間的對抗,為了讓安全測試人員更加高效地進行滲透測試,主流滲透工具開發(fā)大多指向漏洞掃描器或惡意代碼檢測工具,缺少發(fā)現(xiàn)漏洞后精準定位目標環(huán)境執(zhí)行惡意代碼的全自動工具,LSTM-Exploit 基于長短期記憶神經網絡LSTM,實現(xiàn)從漏洞發(fā)掘到惡意代碼執(zhí)行這一全自動過程。

    鑒于 nmap 和 metasploit 在滲透測試中的普遍搭配使用,LSTM-Exploit 選擇將兩者通過LSTM 神經網絡整合,完成端口服務到漏洞,再到測試載荷執(zhí)行的滲透過程。

    LSTM-Exploit 將metasploit 中內置的漏洞利用模塊作為漏洞集,對于不同的metasploit 版本通過開啟msfrpcd,開放metasploit 的rpc服務的55552 或55553 端口,作為LSTM-Exploit 和metasploit 連接通信的api。

    工具將連接的rpc 端口和地址,可攻擊的服務和系統(tǒng)等信息保存在config.ini 文件中,方便直接引用。

    前期信息搜集利用nmap 端口掃描工具,方便探測目標主機信息和開放端口等信息,通過保存nmap 掃描結果為xml 更詳細簡便的讀取掃描信息。之后讀取xml 文件信息,探測Web 端口,并對網站進行指紋驗證,得到網站所用模板或者中間件信息,將以上所有信息整合并和metasploit 交互選擇exploit。

    LSTM 模型進行預測需要的訓練數據在learning 模式,同時得到exploit 映射到的 target 和 payload,利用遍歷的手段攻擊metasploitable2 和metasploitable3 兩個靶機得到。在得到成功攻擊的數據后保存為train.csv,并利用訓練數據對LSTM 模型進行訓練,將訓練完成的模型保存下來,為test 模式下進行真實滲透環(huán)境提供訓練好的LSTM 模型。

    當工具在test 模式下,不需要和metasploit 交互得到payload,只需要利用搜集到的數據通過現(xiàn)存模型預測就可以得到payload,完成一次滲透測試后,會將測試成功的數據更新到train.csv 文件中。

    2.2 LSTM 神經網絡和滲透測試

    LSTM 神經網絡存在門限機制,能夠較好地記憶和遺忘數據,對于關聯(lián)性較大的數據可以充分考慮之前數據對之后數據的影響,可以利用這種特點實現(xiàn)對metasploit 中不同payload 進行記憶。

    遺忘門:

    在遺忘門中,上一層輸出狀態(tài) payload,例 如Windows/meterpreter/reverse_http 會和本層的輸入向量進行處理遺忘掉一些特征,比如http 協(xié)議,保留下reverse 這個建立通信隧道的方式,原理如下:

    將輸入向量xt和上一層的輸入狀態(tài)ht-1合并經過激活函數sigmoid(xt,ht-1)后得到門限向量ft,將ft和共享狀態(tài)Ct-1進行點積操作,實現(xiàn)令Ct-1遺忘掉需要被舍棄的部分上一層狀態(tài)和本層輸入。

    傳入門:

    在傳入層,本層的輸入會和上一層的輸入狀態(tài)payload 進行處理,記憶上一層需要記憶的內容,例如Windows/meterpreter/reverse_http就可以記住http 協(xié)議和reverse 反彈方式兩種對payload 的標注,原理如下:

    將輸入向量xt和上一層的輸入狀態(tài)ht-1合并經過激活函數sigmoid(xt,ht-1)后得到新的門限向量it。輸入向量xt和上一層的輸入狀態(tài)ht-1合并經過激活函數tanh(ht-1,xt)后得到新的門限向量lt,表示需要傳入的部分上一層狀態(tài)和本層輸入。再將lt和it進行點積操作it*lt,并將結果和共享狀態(tài)Ct-1相加,表示需要傳入的信息被共享cell 狀態(tài)記憶,此時的Ct-1已經完成了本層的更新,并成為Ct,等待輸出門的輸出操作。

    輸出門:

    在輸出門,確認本次預測需要輸出的payload 信息,例如輸出經過記憶和遺忘操作的新payload:Windows/meterpreter/ reverse_tcp,表示遺忘了上一層的http 協(xié)議,但是記住了reverse 反彈,原理如下:

    將輸入向量xt和上一層的輸入狀態(tài)ht-1合并經過激活函數sigmoid(xt,ht-1)后得到新的門限向量Ot,將更新后的Ct經過激活函數tanh(Ct)后和Ot進行點積操作tanh(Ct)*Ot,用于確認哪些信息可以被輸出,更新ht-1為ht,傳遞ht和Ct到下一層重復三個選擇層操作。

    總的來說,LSTM 門限機制會記憶住payload 中必要的信息,并且在下一預測中更加偏向于這種類型的payload,成功率也就更高。因為測試的是單個目標IP,如果該測試對象可以利用某種協(xié)議和某種方式建立單個連接,那么其他類型的漏洞測試也可能適用于這種連接建立方式。

    2.3 LSTM 長短期神經網絡實現(xiàn)

    更新完訓練集文件train.csv 后,即可對神經網絡進行訓練。通過分割train.csv 文件不同列,得到訓練集數據,LSTM 層設置激活函數為relu,利用adam 算法反向傳播調整weight 和bias 值以降低損失值。LSTM-Exploit 利用tensorflow.keras 中封裝的LSTM 模型實現(xiàn)LSTM 長短期記憶神經網絡搭建。

    利用keras 搭建單層單向LSTM 神經網絡:

    3 工具的設計和實現(xiàn)

    3.1 總體架構

    工具架構如圖1 所示。工具由信息搜集,獲取模塊,執(zhí)行測試三個功能組成。

    圖1 工具架構圖

    (1)Learning 模式下

    第一步,利用nmap 掃描目標IP,并將結果導入到XML 文件中。獲取打開的Web 端口并利用爬蟲爬取網頁內容,正則匹配得到網站啟用的CMS 和服務器信息。并和XML 文件內容整合。

    第二步,根據字典類型數據,向metasploit 中發(fā)送搜索exploit命令得到exploit->target->payload 信息,并根據exploit,payload的名稱和必要參數篩選匹配的exploit 和payload 數據。

    第三步,向Metasploit 發(fā)送測試指令,并將測試結果返回,本地將成功的測試結果整理成訓練集并進行訓練得到LSTM 的模型。

    (2)Test 模式下

    前兩步和Learning 模式相同,第三步,通過Learning 模式訓練得到的LSTM 模型訓練搜集到的信息,直接得到payload,而不需要再和metasploit 通信得到所有payload,第四步,直接利用預測得到的exploit->payload 進行測試,將成功結果保存到訓練集csv 文件中,并重新訓練并保存模型,將測試成功的exploit->target->payload 映射保存到csv 文件中方便查看。

    Learning 模式用于前期的模型訓練,Test 模式適用于真實滲透測試環(huán)境,并且能夠在每次訓練后更新訓練數據,提高下一次模型的預測精度。

    3.2 信息搜集

    產品在不同環(huán)境下需要開啟不同的端口,實現(xiàn)各種相互配合或者彼此獨立的功能。開放的端口可以是WEB 服務器和中間件端口,也可以是數據庫端口和隧道協(xié)議端口。針對使用相同端口的不同版本服務,可能存在未被補丁修復的已知漏洞。所以,為了發(fā)現(xiàn)現(xiàn)存漏洞,不僅需要大規(guī)模掃描端口,還需要獲取端口表示服務的banner信息,以及目標服務運行環(huán)境的主機信息。所以可以啟用metasploit 中內置的nmap 功能對目標進行信息搜集,并對搜集到的WEB 端口獲取網站信息,用來實現(xiàn)可能的WEB 網站測試。

    信息搜集代碼為:

    #獲取nmap_data

    filename=nmap_front_scan(self.client,self.command,

    self.timeout,self.target_ip,self.front_filename)

    nmap_data=nmap_data_process(filename)

    #得到nmap 中的Web 端口

    Web_ports=get_Web_ports(self.target_ip,nmap_data)

    #利用爬蟲爬取網站頁面

    Web_target_info=run_spider(self.target_ip,Web_ports,

    self.spider_concurrent_reqs,self.spider_depth_limit,

    self.spider_delay_time,self.spider_item_count,

    self.spider_time_out,self.spider_page_count,

    self.spider_error_count,self.spider_path,

    self.output_base_path,self.output_filename)

    #利用指紋獲取Web 網頁信息

    signature_data=Web_signature(target_port,self.target_ip,

    nmap_data,self.signature_path,

    self.signature_file,target_path)

    #利用content 獲得Web 網頁信息

    content_data=Web_content(Web_port,self.target_ip,nmap_data,

    self.dirsearch_path,self.dirsearch_file)

    3.3 獲取模塊

    根據搜集到的信息,以product 和ostype 為參數,與metasploit進行通信執(zhí)行search product 和show targets 命令,得到每個服務可以執(zhí)行的exploit 集合,以及exploit 集合中每個exploit 對應的target 集合,并根據ostype 刪除不符合操作系統(tǒng)類型的exploit 選項,在Learning 模式和Test 模式下選擇不同方法獲取payload。

    Learning 模式和metasploit 通信,根據選擇不同的exploit,獲取每個exploit 對應的payload 集合代碼如下:

    #得到metasploit 中所有的exploit 和payload

    exploit_list=get_exploit_list(self.client)

    payload_list=get_payload_list(self.client)

    #根據信息搜集結果得到exploit

    nmap_to_exploit=nmap_get_exploit(self.client,self.nmap_data,

    exploit_list,self.allow_os_types,self.allow_services)

    #根據exploit 得到target,payload

    exploits_to_payloads=exploit_to_payloads(self.client,

    nmap_to_exploit,exploit_list)

    #合并以上信息得到完整單項匹配數據

    execute_nmap_data,new_path_index=nmap_exploit_to_payloads(

    self.nmap_data,exploits_to_payloads,payload_list,

    self.path_index)

    Test 模式下,利用現(xiàn)存模型預測得到payload,代碼如下:

    #信息搜集和模塊獲取

    exploit_list=get_exploit_list(self.client)

    payload_list=get_payload_list(self.client)

    nmap_to_exploit=nmap_get_exploit(client,self.nmap_data,

    exploit_list,self.allow_os_types,

    self.allow_services)

    exploit_to_targets=get_exploit_to_targets(self.client,

    nmap_to_exploit,exploit_list)

    nmap_exploit_targets,tmp_path_index=get_nmap_exploit_targets(

    nmap_to_exploit,exploit_to_targets,

    self.tunnel,self.path_index)

    #預測payload

    lstm_result=lstm_predict(nmap_exploit_targets,

    self.model_path,self.model_name)

    3.4 執(zhí)行測試

    根據已經探測好的exploit,target,payload 信息和metasploit通信得到測試模塊需要設置的options,將本地靜態(tài)文件中的配置寫入對應的options 中后和metasploit 通信測試對應端口服務,并將測試成功的結果保存到訓練集文件中。通過導入訓練集文件訓練LSTM神經網絡,更新LSTM 模型,實現(xiàn)每次測試后預測精度的提高。

    代碼如下:

    # Get the options that need to be set for each exploit and payload

    exploit_options=get_options_from_etp(self.client,

    self.execute_nmap_data,self.exploit_list,

    self.allow_options)

    # Set the obtained option to the dictionary obtained by collecting information

    tmp_execute_nmap_data,tmp_path_index=set_option_to_data(self.client,self.execute_nmap_data,exploit_options,

    self.path_index,self.allow_payloads,

    self.payload_list)

    # Perform the test and save the successful result to a csv file

    success_data=start_attack(client,target_ip,

    tmp_execute_nmap_data,self.path_index,

    self.exploit_list,self.payload_list,self.local_ip)

    success_data=success_to_train(success_data,exploit_list,

    payload_list)

    train_csv=save_to_csv(success_data,self.train_csv_path,

    self.train_csv_filename,payload_list)

    # Train module

    model_file=train_new_model(train_csv,self.epochs,

    self.model_path,self.model_name)

    4 結束語

    metasploit 企業(yè)版中存在一鍵滲透腳本 auto-pwn.rb,LSTM-Exploit 和auto-pwn.rb 腳本有著相同的功能,即能夠自動化滲透,但是auto-pwn.rb 等傳統(tǒng)腳本采用的是if 判斷手段來進行滲透測試,而LSTM-Exploit 采用的是LSTM 模型進行測試,能夠明顯的提升效率,并且隨著測試的增多,也會使預測的準確率得到提升。在面對不同的metasploit 版本時,只需要添加靜態(tài)端口信息就能夠實現(xiàn)信息加載,而不需要大量修改代碼來兼容metasploit 的漏洞集。為了和metasploit 框架通信,利用pymetasploit3 庫,能夠直接訪問metasploit內置所有數據,簡化了編寫網絡連接的過程。

    但是LSTM-Exploit 也存在一些不足,此工具只能測試提前設定好的靜態(tài)服務端口,只能識別設置好的網站指紋和目錄信息,利用固定參數的漏洞載荷進行測試。在Learning 模式下,由于對metapsploit的rpc 服務訪問過多,不同漏洞利用模塊執(zhí)行速度不同,容易產生并發(fā)錯誤導致服務崩潰。在實踐過程中還存在一些不便,未來還需要不斷完善。

    猜你喜歡
    漏洞端口神經網絡
    漏洞
    一種端口故障的解決方案
    科學家(2021年24期)2021-04-25 13:25:34
    神經網絡抑制無線通信干擾探究
    電子制作(2019年19期)2019-11-23 08:42:00
    端口阻塞與優(yōu)先級
    三明:“兩票制”堵住加價漏洞
    漏洞在哪兒
    兒童時代(2016年6期)2016-09-14 04:54:43
    基于神經網絡的拉矯機控制模型建立
    重型機械(2016年1期)2016-03-01 03:42:04
    復數神經網絡在基于WiFi的室內LBS應用
    高鐵急救應補齊三漏洞
    初識電腦端口
    電腦迷(2015年6期)2015-05-30 08:52:42
    富裕县| 宁波市| 凉城县| 寿宁县| 普宁市| 望谟县| 万州区| 桐梓县| 马关县| 巫溪县| 辛集市| 武穴市| 潞西市| 剑阁县| 西林县| 纳雍县| 鲁山县| 衡阳县| 都匀市| 来宾市| 唐海县| 西贡区| 大余县| 镇江市| 桃园县| 丰都县| 镇平县| 大埔县| 珠海市| 连城县| 昌吉市| 利辛县| 科技| 永康市| 永善县| 扶余县| 若羌县| 镇赉县| 平阳县| 平顶山市| 根河市|