張 輝,李 鵬
(山西工程科技職業(yè)大學(xué)信息工程學(xué)院,晉中 030619)
隨著當(dāng)今互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)安全逐漸受到個(gè)人、政府、事業(yè)單位等重視,網(wǎng)絡(luò)安全已經(jīng)成為當(dāng)今互聯(lián)網(wǎng)的重中之重。蜜罐系統(tǒng)是網(wǎng)絡(luò)安全領(lǐng)域的重要技術(shù)之一,主要通過誘使攻擊者進(jìn)行攻擊,監(jiān)控和記錄攻擊者在蜜罐中所進(jìn)行的一系列操作,掌握攻擊者的入侵意圖,以及所使用的攻擊方法等重要信息,從而有助于被攻擊者快速準(zhǔn)確地采取最有效的防范措施[1]。
本文設(shè)計(jì)的蜜罐框架系統(tǒng)是基于Golang 開發(fā)的一個(gè)系統(tǒng),后端主要采用Gin框架,數(shù)據(jù)庫采用了SQLite 數(shù)據(jù)庫[2-3]。它通過模擬各種真實(shí)服務(wù)與極其逼真的網(wǎng)頁去引誘攻擊者對其進(jìn)行攻擊,蜜罐受攻擊的數(shù)據(jù)會存儲到數(shù)據(jù)庫中,包括攻擊IP、攻擊者使用的密碼字典等。根據(jù)所收集到的信息,就可以進(jìn)一步分析得到攻擊者所使用的最新技術(shù)、對比真實(shí)應(yīng)用系統(tǒng)存在的問題,進(jìn)行及時(shí)解決,使應(yīng)用系統(tǒng)更加安全。
整個(gè)系統(tǒng)采用前后端分離的架構(gòu)進(jìn)行開發(fā)。前端基于Bootstrap 框架,后端主要應(yīng)用Gin 框架,數(shù)據(jù)庫采用SQLite數(shù)據(jù)庫[4]。系統(tǒng)的功能結(jié)構(gòu)包括三大模塊:虛假服務(wù)模塊、郵件告警模塊與前端展示模塊。蜜罐框架系統(tǒng)架構(gòu)圖如圖1所示。
圖1 蜜罐框架系統(tǒng)架構(gòu)圖
1.2.1 虛假服務(wù)模塊
虛假服務(wù)模塊是由模擬的真實(shí)服務(wù)來欺騙攻擊者的模塊。該模塊中可包含多個(gè)蜜罐來承受所有真實(shí)攻擊,在本次系統(tǒng)中共設(shè)計(jì)了三個(gè)蜜罐,分別為SSH蜜罐、Telnet蜜罐與Web蜜罐。
(1)SSH蜜罐
SSH 蜜罐,初步定位為中交互型蜜罐。在開啟SSH 蜜罐后,被管理端就會向互聯(lián)網(wǎng)暴露出提前設(shè)置好的端口,然后即可承受互聯(lián)網(wǎng)上的攻擊,如用戶名密碼的暴力破解、上傳Web?shell 等攻擊手法。SSH 蜜罐具體的業(yè)務(wù)流程是:開啟SSH 蜜罐后,攻擊者可通過暴力破解的方法登錄到遠(yuǎn)程SSH 服務(wù)器,此時(shí)SSH 蜜罐會記錄攻擊者的IP、暴力破解的用戶名和密碼,并寫入到數(shù)據(jù)庫中。當(dāng)攻擊者在遠(yuǎn)程SSH 服務(wù)器中執(zhí)行任何命令,或嘗試上傳任何后門、病毒等惡意文件,SSH 遠(yuǎn)程服務(wù)器會將攻擊者在服務(wù)器中所有的操作寫入日志文件中,方便用戶的溯源反制工作。
(2)Telnet蜜罐
Telnet蜜罐,初步定位為低交互型蜜罐。在開啟Telnet蜜罐后,被管理端也會向互聯(lián)網(wǎng)暴露指定端口信息,然后承受攻擊,該蜜罐僅支持承受暴力破解攻擊。Telnet蜜罐具體的業(yè)務(wù)流程是:開啟Telnet 蜜罐后,攻擊者嘗試連接Telnet,此時(shí)創(chuàng)建連接會話,并提示攻擊者輸入用戶名與密碼,由于設(shè)計(jì)原因,攻擊者不可能找到正確的用戶名密碼,且Telnet 蜜罐會將攻擊者的IP、嘗試登錄的用戶名和密碼寫入到數(shù)據(jù)庫中。
(3)Web蜜罐
Web 蜜罐,初步定位為低交互型蜜罐。在開啟Web 蜜罐后,攻擊者可通過蜜罐IP 加上指定端口訪問Web 蜜罐的登錄界面。為了更好地引誘攻擊者,用戶可將登錄界面定制為較逼真的業(yè)務(wù)登錄界面,該蜜罐同樣僅支持承受暴力破解攻擊。Web 蜜罐具體的業(yè)務(wù)流程是:開啟Web 蜜罐后,攻擊者會正常訪問到登錄界面,并且嘗試通過暴力破解的方式登錄系統(tǒng),此時(shí)Web 蜜罐會將攻擊者所有嘗試過的用戶名與密碼寫入數(shù)據(jù)庫中[5]。
本模塊中設(shè)計(jì)兩個(gè)僅支持暴力破解攻擊的蜜罐,目的主要是收集攻擊者暴力破解所使用的密碼字典,通過分析密碼字典,確認(rèn)用戶目前所使用的密碼是否安全,從而更好地提高系統(tǒng)密碼強(qiáng)度。
1.2.2 郵件告警模塊
郵件告警模塊有自動(dòng)群發(fā)郵件告警和手動(dòng)郵件告警兩大功能。該模塊要正常使用,必須要配置正確、可用的SMTP服務(wù)器以及收發(fā)件人信息。
(1)自動(dòng)群發(fā)郵件告警功能
自動(dòng)群發(fā)郵件告警,在配置正確的前提下,如果有新的攻擊告警,會按照固定的告警模板,將郵件通知發(fā)送到配置中收件人的郵箱。自動(dòng)群發(fā)郵件告警功能的具體操作流程是:用戶進(jìn)入系統(tǒng)后臺管理登錄頁面,輸入指定的賬號、密碼,隨即點(diǎn)擊登陸進(jìn)入系統(tǒng)后臺管理頁面。進(jìn)入管理頁面后,轉(zhuǎn)到設(shè)置菜單,點(diǎn)擊配置,輸入相應(yīng)的發(fā)件人郵箱、SMTP 服務(wù)器以及對應(yīng)的端口與收件人郵箱,隨即點(diǎn)擊保存完成配置,配置成功后會提示用戶配置成功。最后即可等待新的攻擊告警產(chǎn)生,系統(tǒng)將會自動(dòng)發(fā)送郵件至指定郵箱。
(2)手動(dòng)郵件告警功能
手動(dòng)郵件告警,在配置正確的前提下,用戶可點(diǎn)擊郵件告警菜單,自定義告警內(nèi)容發(fā)至指定收件人郵箱。手動(dòng)郵件告警功能的操作流程是:用戶進(jìn)入系統(tǒng)后臺管理登錄頁面,通過賬戶信息認(rèn)證,即可進(jìn)入系統(tǒng)后臺管理頁面。進(jìn)入管理頁面后,轉(zhuǎn)到設(shè)置菜單,點(diǎn)擊配置,輸入相應(yīng)的發(fā)件人郵箱、SMTP 服務(wù)器以及對應(yīng)的端口,隨即點(diǎn)擊保存完成配置,配置成功后會提示用戶配置成功。最后,用戶可轉(zhuǎn)到郵件告警菜單,輸入相應(yīng)的發(fā)件人郵箱、收件人郵箱、郵件主題等郵件相關(guān)信息,點(diǎn)擊發(fā)送,即可發(fā)送至指定收件人郵箱[6-7]。
1.2.3 前端展示模塊
前端展示模塊包括儀表盤、獵物列表、被管理端列表、手動(dòng)郵件告警頁面與郵件告警配置頁面五大部分。
(1)儀表盤列表
儀表盤列表的具體流程是:用戶成功登錄到系統(tǒng)后臺管理頁面后,隨即展示的就是儀表盤展示頁面,用戶可直觀地看到目前系統(tǒng)所擁有的蜜罐、各個(gè)蜜罐的啟用狀態(tài)以及近期的攻擊告警數(shù)量。
(2)獵物列表
(3)被管理端列表
被管理端列表的流程是:用戶成功登錄到系統(tǒng)后臺管理頁面后,點(diǎn)擊“被管理端集群”,進(jìn)入被管理端列表,即可查看到目前所有被管理端的名稱、IP 以及各蜜罐的啟用狀態(tài)信息。同樣,點(diǎn)擊最右側(cè)的刪除按鈕,點(diǎn)擊確定,即可將對應(yīng)的蜜罐告警信息從數(shù)據(jù)庫中刪除,系統(tǒng)后臺管理頁面也不再展示該數(shù)據(jù)。
(4)手動(dòng)郵件告警頁面
由于自動(dòng)群發(fā)郵件告警功能是后臺自動(dòng)執(zhí)行,此處郵件告警頁面僅顯示手動(dòng)郵件告警功能。
(5)郵件告警配置頁面
用戶需要此頁面對自動(dòng)群發(fā)郵件告警與手動(dòng)郵件告警進(jìn)行相關(guān)的配置,例如發(fā)件人郵箱、SMTP 服務(wù)器地址、SMTP 端口等信息。故郵件告警配置頁面的流程是:用戶選擇需要啟用的功能進(jìn)行配置,填寫好相關(guān)配置信息后,點(diǎn)擊保存,此時(shí)系統(tǒng)會將配置信息寫入數(shù)據(jù)庫,方便系統(tǒng)讀取使用配置信息,然后用戶點(diǎn)擊已配置,此時(shí)該功能處于啟用狀態(tài),可以使用對應(yīng)的告警功能。
系統(tǒng)采用Golang作為系統(tǒng)開發(fā)語言,Goland作為開發(fā)工具,主要使用Bootstrap 框架進(jìn)行本系統(tǒng)的前端開發(fā),后端開發(fā)主要采用Golang 中的Gin框架,SQLite作為本系統(tǒng)的數(shù)據(jù)庫[8-9]。
根據(jù)上述需求并進(jìn)行具體分析后,可將系統(tǒng)分為兩大部分:前端(即前端展示模塊)與后端,由上述兩個(gè)部分組成整個(gè)跨平臺蜜罐框架系統(tǒng)。
原始AlexNet模型輸入為固定的224×224×3,GoogLeNet模型輸入為固定的299×299×3,該原始模型和本文提出的模型在相同的CompCars數(shù)據(jù)集中431類車型數(shù)據(jù)中訓(xùn)練。然后分別在不同輸入的尺寸數(shù)據(jù)下測試各個(gè)訓(xùn)練模型的效果,如圖7,圖8,圖9,圖10,圖11所示。
(1)前端部分(前端展示模塊)
前端部分由儀表盤、獵物列表、被管理端列表、手動(dòng)郵件告警與郵件告警配置五個(gè)部分構(gòu)成。包括獵物列表中的查看攻擊信息和刪除獵物,編輯郵件內(nèi)容并發(fā)送等功能。
(2)后端部分
后端部分主要由虛假服務(wù)、上報(bào)攻擊數(shù)據(jù)以及管理端與被管理端三個(gè)部分構(gòu)成。包括將管理端與被管理端中獲取到的攻擊數(shù)據(jù)寫入數(shù)據(jù)庫。
2.2.1 虛假服務(wù)模塊
虛假服務(wù)模塊包括了SSH 蜜罐、Telnet蜜罐與Web蜜罐。
(1)SSH蜜罐
SSH 蜜罐為蜜罐框架系統(tǒng)所擁有的蜜罐之一,是該系統(tǒng)中唯一一個(gè)中交互型蜜罐。SSH蜜罐的整體框架采用了Golang 官方提供的SSH服務(wù)器,然后進(jìn)行二次開發(fā)得到SSH 蜜罐。該蜜罐在被嘗試連接時(shí),會提示進(jìn)行身份驗(yàn)證,此處采用了Password 方式,即用戶名密碼的方式進(jìn)行認(rèn)證,若暴力破解成功,即認(rèn)證成功,則本地SSH 將自動(dòng)連接至遠(yuǎn)程SSH 服務(wù)器。此處遠(yuǎn)程SSH 服務(wù)器使用了Docker,在Docker 中拉取了SSH 服務(wù)器鏡像,此時(shí)攻擊者的所有操作都會在Docker 中的SSH 服務(wù)器中執(zhí)行,以免攻擊行為影響真實(shí)生產(chǎn)環(huán)鏡。同時(shí),Docker 中的SSH 服務(wù)器將會實(shí)時(shí)記錄登入用戶的所有操作,需要溯源時(shí)可登錄Docker 中的SSH 服務(wù)器或登錄Docker 服務(wù)器將日志文件從Docker 拷貝到宿主機(jī)中進(jìn)行查看。
(2)Telnet蜜罐
Telnet蜜罐為蜜罐框架系統(tǒng)所擁有的蜜罐之一,是該系統(tǒng)中的一個(gè)低交互型蜜罐。Telnet蜜罐使用了Go 語言內(nèi)置的net 包,用net.Listen()函數(shù)監(jiān)聽網(wǎng)絡(luò)中嘗試連接Telnet端口的主機(jī),同時(shí)并發(fā)運(yùn)行自定義方法Telnetlogin,Telnetlogin方法使用了net.Conn()函數(shù)以此獲取Telnet連接中的連接IP以及輸入的賬戶信息.
(3)Web蜜罐
Web 蜜罐為蜜罐框架系統(tǒng)所擁有的蜜罐之一,同樣是該系統(tǒng)中一個(gè)低交互型蜜罐。Web蜜罐設(shè)置了一個(gè)前端登錄頁面以獲取攻擊者輸入的賬戶信息。主要是采用Go 語言的一個(gè)微框架Gin,通過使用Gin 中的Context 的Param 方法來獲取攻擊者所提交的請求參數(shù),其中包括了嘗試登錄的用戶名與密碼,將獲取到的信息傳至管理端再寫入數(shù)據(jù)庫,或直接寫入數(shù)據(jù)庫并在管理頁面進(jìn)行展示。
2.2.2 郵件告警模塊
郵件告警模塊包括自動(dòng)群發(fā)郵件告警功能與手動(dòng)郵件告警功能兩個(gè)部分,且該兩個(gè)部分均使用自定義方法SendMail,SendMail方法使用了Go 語言的gomail 庫中的多個(gè)函數(shù)。同時(shí)本模塊中告警郵件的創(chuàng)建與發(fā)送需要用到SMTP服務(wù)器,此處使用了QQ 郵箱充當(dāng)郵件服務(wù)器,以此完成郵件的創(chuàng)建與發(fā)送。
(1)自動(dòng)群發(fā)郵件告警功能
自動(dòng)群發(fā)郵件告警功能是需先保證在管理頁面對E-mail群發(fā)進(jìn)行配置且狀態(tài)為啟用狀態(tài),在該頁面進(jìn)行的配置會全部寫入數(shù)據(jù)庫中的trap_setting 表。該功能是由自定義方法alert 實(shí)現(xiàn),該方法會先查詢trap_setting 表中E-mail 群發(fā)的相關(guān)配置并判斷該配置的狀態(tài)是否為啟用,若為啟用,則調(diào)用SendMail 發(fā)送郵件。alert 方法會在攻擊數(shù)據(jù)寫入數(shù)據(jù)庫時(shí)并發(fā)運(yùn)行。
(2)手動(dòng)郵件告警功能
手動(dòng)郵件通知功能同樣要保證在管理頁面對E-mail 通知進(jìn)行配置且狀態(tài)為啟用狀態(tài)。該功能是通過前端使用jQuery 中的Ajax 方法,將關(guān)鍵數(shù)據(jù)以POST 方式發(fā)送至后端POST 請求,從而調(diào)用自定義方法SendEmailToUsers,該方法通過使用Gin 中的Context 的Param 方法獲取數(shù)據(jù),與自動(dòng)群發(fā)郵件功能一樣同樣會判斷Email 通知是否為啟用狀態(tài),若為啟用,則將獲取到的數(shù)據(jù)傳參至SendMail方法,發(fā)送郵件。
2.2.3 前端展示模塊
前端展示模塊包括儀表盤頁面、獵物列表、被管理端列表、手動(dòng)郵件告警頁面與郵件告警配置頁面五大部分。
(1)儀表盤頁面
儀表盤頁面是用戶登入管理頁面后的第一個(gè)頁面。該頁面展示了管理端的API 與虛擬蜜罐開啟狀態(tài),目前SSH 蜜罐、Telnet 蜜罐與Web蜜罐的數(shù)量以折線圖形式展現(xiàn),最近24 小時(shí)三個(gè)蜜罐的數(shù)量統(tǒng)計(jì)。其中折線圖是通過使用ECharts 可視化庫[9]得以實(shí)現(xiàn),數(shù)據(jù)的統(tǒng)計(jì)是通過前端使用Ajax 方法以GET 方式發(fā)送至后端GET請求,從而調(diào)用GetTrapData()進(jìn)行統(tǒng)計(jì)。
(2)獵物列表
獵物列表是在前端中較為重要的一個(gè)頁面。該頁面展示了虛擬蜜罐捕獲到的數(shù)據(jù),包括時(shí)間、蜜罐類型、攻擊IP、攻擊IP歸屬地等信息,并且點(diǎn)擊該頁面中的“點(diǎn)擊查看”,攻擊數(shù)據(jù)將會以彈窗形式展示在該頁面中。同時(shí)也可以對指定蜜罐進(jìn)行刪除操作。
(3)被管理端列表
被管理端列表直觀地展示了被管理端的SSH 蜜罐、Telnet 蜜罐與Web 蜜罐是否為啟用狀態(tài),每60 秒獲取一次被管理端的狀態(tài),同時(shí)也提供了刪除指定被管理端的操作。若誤刪了被管理端,則等待60 秒左右刷新頁面,被管理端即可重新展示在該頁面。
(4)手動(dòng)郵件告警頁面
手動(dòng)郵件告警頁面與郵件告警模塊中的手動(dòng)郵件告警功能相對應(yīng)。用戶需在該頁面中填寫郵件標(biāo)題、發(fā)件人郵箱、收件人郵箱與郵件內(nèi)容,點(diǎn)擊“發(fā)送郵件”,彈出“success”提示字樣,即為發(fā)送成功。
(5)郵件告警配置頁面
郵件告警配置頁面是對自動(dòng)群發(fā)郵件告警功能與手動(dòng)郵件告警功能進(jìn)行相關(guān)配置。兩個(gè)配置中都需要填寫正確可用的SMTP 服務(wù)認(rèn)證,此處使用了QQ 郵箱作為SMTP 服務(wù)器。在此頁面中所有的配置都將寫入數(shù)據(jù)庫的trap_setting表中。其中E-mail 群發(fā)頁面可填寫多個(gè)收件人郵箱,當(dāng)有新的攻擊數(shù)據(jù)生成時(shí),會自動(dòng)發(fā)送至指定收件人郵箱。
(1)實(shí)現(xiàn)環(huán)境
整個(gè)系統(tǒng)代碼使用Go 語言1.17 版本,Go?land作為系統(tǒng)開發(fā)工具,SQLite作為數(shù)據(jù)庫。
(2)運(yùn)行環(huán)境
瀏覽器:火狐瀏覽器;Docker 服務(wù)器:Centos7 操作系統(tǒng);管理端:RedHat7 操作系統(tǒng);被管理端:Centos7 操作系統(tǒng);數(shù)據(jù)庫系統(tǒng):SQLite數(shù)據(jù)庫。
經(jīng)過多次測試,該系統(tǒng)的所有功能模塊均運(yùn)行正常,且最初需求分析所涉及到的功能模塊全部開發(fā)完成。三個(gè)虛擬蜜罐告警較為準(zhǔn)確,且上報(bào)結(jié)果及時(shí)。郵件告警的發(fā)送幾乎無延遲現(xiàn)象,可以及時(shí)地發(fā)送至收件人郵箱。前端展示頁面簡潔大方,在查看獵物列表時(shí)可以按照不同的蜜罐類型進(jìn)行篩選,亦可根據(jù)項(xiàng)目名稱或來源IP 進(jìn)行搜索,同時(shí)還支持分頁展示,大大提高了實(shí)用性與便捷性。