◆彭雷 曾崗 袁志軍 郭振勇 張?jiān)艌?jiān)
(重慶三峽醫(yī)藥高等??茖W(xué)校科技處重慶 404120)
重慶三峽醫(yī)藥高等??茖W(xué)校官方網(wǎng)站作為學(xué)校的門戶,承擔(dān)著信息發(fā)布、展示的任務(wù),一旦被黑客入侵,頁(yè)面被攻擊,將會(huì)產(chǎn)生不良的影響。目前我校在這一方面的數(shù)據(jù)監(jiān)測(cè)工作上,通常設(shè)置專人來(lái)對(duì)數(shù)據(jù)進(jìn)行監(jiān)控,發(fā)現(xiàn)問(wèn)題及時(shí)處理,然而每個(gè)子頁(yè)面都有內(nèi)部嵌套、跳轉(zhuǎn)的鏈接,隨著信息數(shù)量級(jí)的增加,人工分析難免有些吃力。通過(guò)網(wǎng)絡(luò)爬蟲獲取這些信息進(jìn)行有效自動(dòng)分析,可以有效減少監(jiān)控人員的工作量,因而是一個(gè)亟待解決的問(wèn)題。
胡尊玉等人[1]通過(guò)分析高校網(wǎng)站群的網(wǎng)絡(luò)安全問(wèn)題,提出一種在大數(shù)據(jù)時(shí)代背景下對(duì)網(wǎng)站群安全監(jiān)測(cè)設(shè)計(jì)方案,提高網(wǎng)站群工作模式的可靠性。郭劍鋒等人[2]通過(guò)嵌入式監(jiān)控模式解決監(jiān)控平臺(tái)使用特征碼比對(duì)方法的高誤報(bào)率問(wèn)題。Nafiseh Hosseini等人[3]利用機(jī)器學(xué)習(xí)技術(shù)提出了一個(gè)有效的基于傾向性行為的惡意爬蟲監(jiān)測(cè)模型,改模型與支持向量機(jī)、貝葉斯網(wǎng)絡(luò)、決策樹三種算法對(duì)比,表現(xiàn)出了較好的效果。Nguyen Duc Thai等人[4]提出了一個(gè)網(wǎng)絡(luò)安全評(píng)估框架,該框架將不同的掃描工具集成到一起。在實(shí)際使用中,該框架還可以添加工具并生成掃描報(bào)告。方芳等人[5]使用 Scrapy框架爬取了京東網(wǎng)上筆記本計(jì)算機(jī)的評(píng)論信息,通過(guò)模糊匹配方法提取數(shù)據(jù),并進(jìn)行去重、分詞和停用詞過(guò)濾等處理,繪制詞云圖并給出情感分析結(jié)果。周燕等人[6]根據(jù)醫(yī)院網(wǎng)站入侵威脅現(xiàn)狀,分析存在的信息安全問(wèn)題,并提出解決方案。崔穎等人[7]對(duì)政府網(wǎng)站網(wǎng)絡(luò)的安全性做了分析并提供了網(wǎng)絡(luò)安全的解決對(duì)策建議。黃家常等人[8]在分析高校網(wǎng)站群系統(tǒng)的安全風(fēng)險(xiǎn)后給出了應(yīng)對(duì)的具體策略。柳強(qiáng)等人[9]分析了高校二級(jí)網(wǎng)站存在的各種安全隱患,并在技術(shù)層面和管理層面提出了高校二級(jí)網(wǎng)站安全隱患的有效防御對(duì)策。
本系統(tǒng)針對(duì)的是重慶三峽醫(yī)藥高等專科學(xué)校站群數(shù)據(jù),目的是給站群數(shù)據(jù)監(jiān)測(cè)者提供輔助性幫助。本系統(tǒng)將用戶分為兩類角色:普通用戶角色和系統(tǒng)管理員角色。普通用戶可以進(jìn)行掃描與敏感詞過(guò)濾,管理員在普通用戶的基礎(chǔ)上添加了管理功能??偟膩?lái)說(shuō),整個(gè)系統(tǒng)的功能有以下模塊:登錄模塊、用戶信息管理模塊、掃描模塊、過(guò)濾模塊、字典模塊、管理員管理模塊。
圖1 系統(tǒng)功能模塊
(1)登錄模塊:登錄模塊可以將普通用戶與管理員分開,無(wú)須給管理員另外的登錄界面,管理員進(jìn)入系統(tǒng)后可以選擇普通用戶視角,也可以選擇管理視角對(duì)整個(gè)系統(tǒng)進(jìn)行管理。
(2)用戶信息管理模塊:包含用戶信息的注冊(cè),用戶信息的查看與修改。
(3)掃描模塊:對(duì)指定URL進(jìn)行掃描爬取,將爬取到的頁(yè)面進(jìn)行分析,如果頁(yè)面內(nèi)包含鏈接,則對(duì)鏈接繼續(xù)爬取,依次遞歸下去。對(duì)于URL要設(shè)定爬取的邊界,禁止爬蟲爬到外網(wǎng)。
(4)過(guò)濾模塊:將掃描模塊爬取到的內(nèi)容按照設(shè)定好的積極詞與消極詞敏感詞典進(jìn)行過(guò)濾,如果有網(wǎng)頁(yè)被過(guò)濾出敏感詞,那么就將該網(wǎng)頁(yè)的URL展示出來(lái),再將包含敏感詞的整個(gè)句子都展示出來(lái),并且標(biāo)記處敏感詞的位置。過(guò)濾的時(shí)候先替換積極詞,后過(guò)濾消極詞。
(5)字典模塊:對(duì)于某些積極詞匯,比如“反對(duì)臺(tái)獨(dú)”,會(huì)因?yàn)椤芭_(tái)獨(dú)”二字而被過(guò)濾出來(lái),將“反對(duì)臺(tái)獨(dú)”加入積極詞典,這樣先替換“反對(duì)臺(tái)獨(dú)”為特殊字符,再過(guò)濾“臺(tái)獨(dú)”時(shí)就不會(huì)出現(xiàn)敏感詞匹配的現(xiàn)象。因此,界面上要有加入積極詞典的功能按鈕??偟膩?lái)說(shuō),正是由于有了字典模塊,才使得整個(gè)系統(tǒng)具有學(xué)習(xí)與更新能力。
(6)管理員管理模塊:管理員進(jìn)入管理界面后,可以對(duì)新申請(qǐng)的用戶進(jìn)行審核,通過(guò)審核的用戶才可以登錄。如果有大量用戶注冊(cè),還可以進(jìn)行搜索。對(duì)于每一個(gè)用戶,管理員可以查看、修改用戶的基本信息,可以重置用戶的密碼,還可以刪除用戶。管理員還有查看最近30天掃描行為日志的功能。對(duì)于日志,可以按日期或用戶名搜索,還可以將日志輸出。
整個(gè)系統(tǒng)的界面與業(yè)務(wù)邏輯,全部使用Python編程語(yǔ)言實(shí)現(xiàn),版本為3.7。編程環(huán)境為Pycharm社區(qū)版,其中使用的編譯器以及各種類庫(kù)通過(guò) Anaconda來(lái)實(shí)現(xiàn)。數(shù)據(jù)庫(kù)使用 MySQL,網(wǎng)絡(luò)連接使用寬帶網(wǎng)絡(luò)或者4G通信網(wǎng)絡(luò)。計(jì)算機(jī)系統(tǒng)配置為:Windows10 64位,志強(qiáng)E-2697處理器,DDR3 32G內(nèi)存。
Python的界面編程庫(kù)有Tkinter,wxPython,OpenGL,PYQT5等,其中PYQT5可以作為工具加載到編程環(huán)境里,而且PYQT5的界面編程具有可拖拽控件的優(yōu)勢(shì),UI文件與Python文件也可以相互轉(zhuǎn)換,綜上所述本文選用PYQT5作為界面開發(fā)工具。
PYQT5在線程編程時(shí)無(wú)法使用Python原生的threading,而是必須繼承PYQT5專用的線程類QThread作為父類,也即class MyThread(QThread)。在設(shè)置線程間通信的時(shí)候,要使用PYQT5的信號(hào)與槽函數(shù)機(jī)制,先定義triger = pyqtSignal(),然后連接需要被激活的函數(shù)triger.connect(someClass.scan),在需要發(fā)射信號(hào)的時(shí)候triger.emit(),這個(gè)時(shí)候someClass.scan()函數(shù)就會(huì)接收到信號(hào)進(jìn)而執(zhí)行。如果是鼠標(biāo)點(diǎn)擊觸發(fā)本界面信號(hào),可以直接使用已定義好的函數(shù)來(lái)連接槽函數(shù),例如:self.closeWinBtn.clicked.connect(Form.close)來(lái)關(guān)閉本界面。在設(shè)置菜單欄的時(shí)候,需要先定義MenuBar,其中每個(gè)菜單是一個(gè)menu,例如:self.menubar = QtWidgets.QMenuBar(self.form)self.systemMenu = self.menubar.addMenu("選項(xiàng)"),在菜單下的二級(jí)菜單是Action,使用的時(shí)候也是先定義Action,再添加到上面的Menu,例如:self.startScanAction = QAction("開始掃描",self.form)self.systemMenu.addAction(self.startScanAction)。在管理員審核界面,用戶信息的展示用到的是QListWidget,本文對(duì)該模塊設(shè)置了右擊功能,也即對(duì)于每一個(gè)顯示的用戶,右擊之后可以出現(xiàn)相應(yīng)的選項(xiàng)。在設(shè)置右鍵功能的時(shí)候使用的語(yǔ)句如下:先增加右擊功能:setContextMenuPolicy(Qt.CustomContextMenu),再連接對(duì)應(yīng)的函數(shù):customContextMenuRequested[QtCore.QPoint].connect(self.rightMenuShow)。
圖2 程序架構(gòu)
整個(gè)程序的架構(gòu)如圖2所示,BusinessLogic里是與界面相關(guān)的業(yè)務(wù)邏輯,包括程序入口以及與數(shù)據(jù)庫(kù)的連接等。Scan里是與掃描過(guò)濾有關(guān)的業(yè)務(wù)邏輯,在實(shí)際中會(huì)被BusinessLogic調(diào)用執(zhí)行。UI里面是PYQT5生成的界面文件,與BusinessLogic是相互調(diào)用的關(guān)系。
本文使用了目前比較流行的爬蟲技術(shù)BeautifulSoup4,它是一個(gè)Python庫(kù),能分析已下載的HTML或XML文件,也可直接通過(guò)鏈接來(lái)分析遠(yuǎn)程網(wǎng)頁(yè)數(shù)據(jù)。
在爬取網(wǎng)頁(yè)的時(shí)候,還要安裝requests庫(kù)和lxml庫(kù)來(lái)配合使用,使用過(guò)程如下:html = requests.get(url) bsObj = BeautifulSoup(html.content, 'lxml'),通過(guò)上述語(yǔ)句得到BeautifulSoup對(duì)象,然后再通過(guò)對(duì)標(biāo)簽<a>的過(guò)濾,就能得到該url所有的內(nèi)含鏈接:allLinks= bsObj.findAll("a"),得到的allLinks是一個(gè)鏈接組成的列表。在爬取的時(shí)候?yàn)榱朔乐古赖酵饷娴木W(wǎng)絡(luò),要設(shè)置過(guò)濾條件,例如可以這樣設(shè)置:if ("sxyyc" in url) or ("school" in url)。抓取的頁(yè)面數(shù)據(jù),最終以字典{url:content}的形式存儲(chǔ)于本地文件中。
本文使用敏感詞直接匹配的方法來(lái)進(jìn)行過(guò)濾??紤]到下面的情況:“反對(duì)臺(tái)獨(dú)”會(huì)因?yàn)槊舾性~“臺(tái)獨(dú)”而被過(guò)濾出來(lái),本文設(shè)計(jì)了兩個(gè)詞庫(kù):一個(gè)積極詞庫(kù),一個(gè)消極詞庫(kù)。首先對(duì)積極詞庫(kù)進(jìn)行匹配與替換特殊符號(hào),這樣再通過(guò)消極詞庫(kù)過(guò)濾時(shí)就不會(huì)被過(guò)濾出來(lái)。本文替換的特殊符號(hào)設(shè)置為4個(gè)““過(guò)號(hào)。
本文使用MySQL數(shù)據(jù)庫(kù)來(lái)保存相關(guān)信息,一共設(shè)計(jì)了5個(gè)表,它們分別是管理員信息表 AdminLogin,管理員重置用戶密碼表AdminResetUserPW,普通用戶(已審核)信息表UserLogin,普通用戶(未審核)信息表UserNewReg,日志信息表UserScanLog。
圖3 數(shù)據(jù)庫(kù)內(nèi)的表
圖4UserScanLog表
對(duì)于 AdminLogin表設(shè)計(jì)了兩個(gè)字段:UserName(用戶名)、UserPassword(用戶密碼)。對(duì)于AdminResetUserPW表設(shè)計(jì)了兩個(gè)字段:UserToBeReset(需重置的用戶)、PasswordToBeReset(需被重置的密碼)。UserNewReg存放的是新注冊(cè)用戶的信息,設(shè)計(jì)的字段如下:UserName(用戶名)、UserPassword(用戶密碼)、RealName(真實(shí)姓名)、Email(郵箱)、TEL(電話)、ApplyTime(注冊(cè)時(shí)間)。UserLogin表里存放的是已通過(guò)審核的用戶信息,因此里面多設(shè)置了一個(gè)AgreeTime(審核通過(guò)時(shí)間)字段。UserScanLog存放的是掃描的日志信息,設(shè)計(jì)了兩個(gè)字段:ScanTime(執(zhí)行掃描的時(shí)間)、UserName(用戶名)。這里的時(shí)間都是采用數(shù)據(jù)庫(kù)服務(wù)器的時(shí)間,通過(guò)語(yǔ)句“用戶名)。這里的時(shí)間都是采用數(shù)據(jù)庫(kù)服務(wù)(),CURRENT_TIME()”來(lái)獲得。
普通用戶在使用本軟件時(shí)需要先注冊(cè),注冊(cè)時(shí)候“工號(hào)”、“密碼”、“真實(shí)姓名”三項(xiàng)是必填項(xiàng),注冊(cè)的界面如圖5所示。賬號(hào)注冊(cè)完后系統(tǒng)會(huì)將信息寫入數(shù)據(jù)庫(kù),成為“新申請(qǐng)用戶”,等待管理員審核。管理員審核通過(guò),該賬號(hào)就能使用,管理員審核的界面如圖6所示。用戶登錄后的界面如圖7所示,點(diǎn)擊“掃描”按鈕將會(huì)進(jìn)行掃描與過(guò)濾兩個(gè)步驟。由于一般站點(diǎn)包含頁(yè)面數(shù)量都是104數(shù)量級(jí),所以掃描耗時(shí)都會(huì)在數(shù)分鐘以上,如果想再次掃描過(guò)濾,此處可以使用“直接過(guò)濾”按鈕,系統(tǒng)將會(huì)直接使用上次掃描爬取的數(shù)據(jù)而不用重新再爬取過(guò)濾。如果想修改敏感詞典,可以直接在安裝目錄里對(duì)敏感詞典文件進(jìn)行增加或刪除操作。為了方便,系統(tǒng)在界面上也提供了對(duì)于積極詞詞典的添加操作。
圖5 注冊(cè)界面
管理員可以對(duì)用戶信息進(jìn)行查詢、修改、刪除操作,還可以對(duì)其密碼進(jìn)行重置。如果用戶較多,系統(tǒng)還提供了查詢功能,輸入賬號(hào)就可以定位到要查詢的用戶。系統(tǒng)還為管理員提供了日志查詢功能,當(dāng)點(diǎn)擊“查看日志”按鈕后管理員可以查看近三十天的掃描日志,了解都有哪些用戶在什么時(shí)間對(duì)目標(biāo)URL進(jìn)行了掃描,查看日志界面如圖所示。這里也提供搜索功能,可以按時(shí)間或用戶名來(lái)搜索。如果點(diǎn)擊“輸出日志”按鈕,就可以將上述的日志進(jìn)行輸出,輸出日志的界面如圖所示。
圖6 管理員審核界面
圖7 用戶掃描與過(guò)濾界面
圖8 管理員查看日志功能
圖9 日志輸出功能
表1 用戶登錄用例測(cè)試
下面對(duì)用戶登錄、網(wǎng)絡(luò)狀態(tài)變化、數(shù)據(jù)庫(kù)管理、敏感詞過(guò)濾功能進(jìn)行測(cè)試,測(cè)試過(guò)程以及結(jié)果如表1-4所示。
表2 網(wǎng)絡(luò)狀態(tài)變化用例測(cè)試
表3 數(shù)據(jù)庫(kù)用例測(cè)試
管理員審核通過(guò)用戶 正確,用戶可以登錄管理員重新審核用戶 正確,用戶無(wú)法可以登錄管理員刪除用戶 正確,返回“已刪除該用戶”信息,用戶無(wú)法登錄,管理員看不到該用戶管理員修改用戶信息 正確,返回“已修改用戶信息”信息,管理員看到該用戶更新的信息,該用戶看到自己更新的信息管理員重置用戶密碼 正確,返回“已重置用戶密碼”信息,該用戶需用新密碼才能登錄管理員查看用戶 正確,管理員可以看到該用戶信息用戶修改信息 正確,該用戶可以看到更新的信息用戶修改密碼 正確,該用戶需用新密碼才能登錄
表4 敏感詞過(guò)濾用例測(cè)試
經(jīng)測(cè)試,程序運(yùn)行過(guò)程與程序設(shè)定流程一致,測(cè)試結(jié)果與預(yù)測(cè)結(jié)果一致。分別在寬帶網(wǎng)絡(luò)與4G通信網(wǎng)絡(luò)環(huán)境下,響應(yīng)、緩沖、存儲(chǔ)耗費(fèi)的時(shí)間都在毫秒級(jí)別,能滿足用戶需求。系統(tǒng)中登錄模塊、用戶信息管理模塊、掃描模塊、過(guò)濾模塊、字典模塊、管理員管理模塊功能測(cè)試和性能測(cè)試都達(dá)到了需求中的規(guī)定和預(yù)期效果。
在網(wǎng)絡(luò)安全越來(lái)越凸顯重要的時(shí)代背景下,針對(duì)重慶三峽醫(yī)藥高等專科學(xué)校的網(wǎng)站群數(shù)據(jù)監(jiān)測(cè),提出一種基于敏感詞過(guò)濾的站群數(shù)據(jù)監(jiān)測(cè)系統(tǒng)。系統(tǒng)共設(shè)計(jì)五個(gè)模塊,提供普通用戶與管理員用戶兩種視角,數(shù)據(jù)監(jiān)測(cè)人員可以方便的使用該系統(tǒng)來(lái)減輕自己的工作量。
由于對(duì)敏感詞直接過(guò)濾,因此在實(shí)際應(yīng)用中會(huì)出現(xiàn)一個(gè)詞的結(jié)尾漢字與另一個(gè)詞的開頭恰好組成一個(gè)“敏感詞”的情況,這是系統(tǒng)在后續(xù)工作中需要改進(jìn)的地方。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2020年12期