日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

基于应用日志的扫描器检测实践

發(fā)布時(shí)間:2023/12/4 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于应用日志的扫描器检测实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于應(yīng)用日志的掃描器檢測(cè)實(shí)踐

在網(wǎng)絡(luò)上搜索web掃描器時(shí),各類(lèi)掃描器工具、掃描攻略玲瑯滿目,但對(duì)掃描器檢測(cè)方法的內(nèi)容卻少之又少。因此,本文對(duì)各類(lèi)web掃描特特征進(jìn)行了梳理和總結(jié),并結(jié)合蘇寧應(yīng)用防火墻(SNWAF)日志數(shù)據(jù),分別展示了規(guī)則模型、統(tǒng)計(jì)特征模型和基于文本情感分析的深度學(xué)習(xí)模型在Web掃描器識(shí)別上的實(shí)踐效果,供大家參考。

1. 掃描器概覽

Web掃描器通過(guò)構(gòu)造特殊請(qǐng)求的方式,對(duì)Web系統(tǒng)可能存在的安全漏洞進(jìn)行掃描,是滲透工作的必備工具。相關(guān)的網(wǎng)絡(luò)資源有很多的漏掃工具研發(fā)和使用的工作,如Nessus、Nikto、SQLmap等,然而掃描器檢測(cè)的工作卻非常少。這里嘗試從掃描器檢測(cè)方向出發(fā),根據(jù)掃描器的功能和所產(chǎn)生的請(qǐng)求內(nèi)容對(duì)其進(jìn)行分類(lèi),并提出一種簡(jiǎn)單有效的檢測(cè)思路。

1.1 敏感內(nèi)容掃描

俗話說(shuō)知己知彼方能百戰(zhàn)不殆,當(dāng)黑客或滲透測(cè)試人員面對(duì)一個(gè)未知站點(diǎn)時(shí),這個(gè)站點(diǎn)對(duì)他們來(lái)說(shuō)就是一個(gè)黑盒。這時(shí)候不妨拿敏感內(nèi)容掃描器先給它來(lái)個(gè)一把嗦摸摸底,指不定就能掃到有價(jià)值信息,找到撬動(dòng)安全防護(hù)缺口的第一把鑰匙。

敏感內(nèi)容掃描器通常具備一些列敏感路徑及敏感文件的字典,掃描器利用這些敏感內(nèi)容字典對(duì)站點(diǎn)進(jìn)行盲掃來(lái)判斷是否存在這些敏感內(nèi)容;進(jìn)一步地,通過(guò)響應(yīng)數(shù)據(jù)包對(duì)站點(diǎn)目錄結(jié)構(gòu)及其他信息進(jìn)行判斷,為下一步針對(duì)性單點(diǎn)突破作準(zhǔn)備。

這里提到了一個(gè)字典的概念,字典這個(gè)玩意很重要,可以說(shuō)字典的質(zhì)量、廣度和深度決定了這個(gè)掃描器的上限。相對(duì)于IP代理、UA偽造、隨機(jī)放訪問(wèn)時(shí)間間隔這些偽裝手段來(lái)說(shuō),敏感內(nèi)容是固定的,翻來(lái)覆去就這么多東西,同時(shí)因?yàn)檎?qǐng)求資源不存在大多數(shù)會(huì)返回404狀態(tài)碼(有些會(huì)觸發(fā)WAF攔截策略返回403,還有些因?yàn)榉?wù)器設(shè)置了默認(rèn)跳轉(zhuǎn)狀態(tài)碼為301或302)。攻方選手通常不會(huì)構(gòu)造毫無(wú)意義的字典內(nèi)容來(lái)浪費(fèi)有限的資源和精力,這些字典通常包含如下內(nèi)容信息(忽略大小寫(xiě)):

  • 敏感目錄信息:如/admin/, /phpadmin/, /mysqladmin/, /usr/local/, /etc/passwd/, ...
  • 敏感配置文件:如.bashrc, .bash_history, conf.icn, config.inc, ...
  • 版本文件信息:如/.git/config, /.svn/entries, /.bzr/xxx, ...
  • 備份文件信息:如htpasswd.bak, index.php.bak, database.wsp, backup.zip, ...
  • 密鑰文件信息:如/.ssh/id_rsa, /.ssh/known_hosts, id_rsa.pub, authorized_keys, ...
  • 日志文件信息:如/logs/error.log, /logs/auth.log, /var/log/mysql/mysql.log, ...
  • 其他敏感文件:如config.php, system.inc, mysql.inc, shell.php, ...

1.2 Web漏洞掃描

漏洞掃描器通常會(huì)與爬蟲(chóng)相結(jié)合。首先利用爬蟲(chóng)獲取到頁(yè)面可能存在注入點(diǎn)的接口,然后針對(duì)該接口來(lái)一個(gè)SQl注入、XSS注入、命令注入一把嗦,對(duì)于一些安全防護(hù)意識(shí)低的站點(diǎn)往往能取到最直接的效果。針對(duì)這類(lèi)掃描請(qǐng)求,WAF都能夠做到單點(diǎn)正則過(guò)濾,理論上會(huì)攔截返回大量403狀態(tài)碼,但是掃描器常針對(duì)一些新域名或偏僻的域名進(jìn)行掃描,這些域名往往沒(méi)有啟用WAF攻擊防護(hù),因此實(shí)際上是有很多是未被攔截的非403狀態(tài)碼。同上述敏感內(nèi)容掃描,這類(lèi)請(qǐng)求往往也具備明顯的文本特征,下面分別以sql注入、文件包含和XSS跨站掃描舉例。

1.2.1 sql注入漏洞掃描

SQL注入攻擊是一種注入攻擊,它將SQL命令注入到數(shù)據(jù)層輸入,從而影響執(zhí)行預(yù)定義的SQL命令;通過(guò)控制部分SQL語(yǔ)句,攻擊者可以查詢(xún)數(shù)據(jù)庫(kù)中任何自己需要的數(shù)據(jù),利用數(shù)據(jù)庫(kù)的一些特性,可以直接獲取數(shù)據(jù)庫(kù)服務(wù)器的系統(tǒng)權(quán)限。

首先,判斷接口是否存在注入點(diǎn),如:

  • 若參數(shù)ID為數(shù)字,加減運(yùn)算判斷是否存在數(shù)字型注入
  • 參數(shù)后加單雙引號(hào),判斷返回結(jié)果是否報(bào)錯(cuò)
  • 添加注釋符判斷前后是否有報(bào)錯(cuò):如id=1' --+ 或 id=1" --+或id=1' #或id=1" --+
  • 有些參數(shù)可能在括號(hào)里面,所以也可以在參數(shù)后面加單雙引號(hào)和括號(hào),如id=1') --+或 id=1") --+或id=1') #或id=1") --+
  • 參數(shù)后面跟or 或者and,判斷返回結(jié)果是否有變化,如1' or 'a'='a或者and 'a'='a或者1' or 'a'='b或者1' or '1'='2
  • 也可以考慮時(shí)間延遲的方法判斷是否存在注入,如 1’ and sleep(5)

然后對(duì)存在注入漏洞的點(diǎn)利用聯(lián)合查詢(xún)一步步獲取信息,如:

  • 查詢(xún)數(shù)據(jù)庫(kù)名:id=0’ union select NULL,database(),NULL --+
  • 爆庫(kù)名:id=0’ union select null,group_concat(schema_name),null from information_schema.schemata --+
  • 爆表名:id=0’ union select null,group_concat(table_name),null from information_schema.tables where table_schema=‘security’ --+
  • 爆字段名:id=0’ union select null,group_concat(column_name),null from information_schema.columns where table_schema=‘security’ and table_name=‘users’ --+

或者通過(guò)報(bào)錯(cuò)回顯查詢(xún)結(jié)果,如:

  • 回顯數(shù)據(jù)庫(kù)名:and extractvalue(1,concat(0x7e,(select database())))
  • 回顯表名:
    and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’ )))
  • 回顯列名:
    and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’)))

?

1.2.2 文件包含漏洞掃描

服務(wù)器通過(guò)php的特性(函數(shù))去包含任意文件時(shí),由于要包含的這個(gè)文件來(lái)源過(guò)濾不嚴(yán),從而可以去包含一個(gè)惡意文件,非法用戶(hù)可以構(gòu)造這個(gè)惡意文件來(lái)達(dá)到惡意的目的,如讀取目標(biāo)主機(jī)上的其他文件,遠(yuǎn)程文件包含可運(yùn)行的PHP木馬,包含一個(gè)創(chuàng)建文件的PHP文件,本地文件包含等。

  • Include:包含并運(yùn)行指定文件,當(dāng)包含外部文件發(fā)生錯(cuò)誤時(shí),系統(tǒng)給出警告,但整個(gè)php文件繼續(xù)執(zhí)行;
  • Require:跟include唯一不同的是,當(dāng)產(chǎn)生錯(cuò)誤時(shí)候,include下面繼續(xù)運(yùn)行而require停止運(yùn)行了;
  • Include_once:這個(gè)函數(shù)跟include函數(shù)作用幾乎相同,只是他在導(dǎo)入函數(shù)之前先檢測(cè)下該文件是否被導(dǎo)入,如果已經(jīng)執(zhí)行一遍那么就不重復(fù)執(zhí)行了;
  • Require_once:這個(gè)函數(shù)跟require的區(qū)別 跟上面所講的include和include_once一樣。

1.2.3 XSS跨站漏洞

跨站腳本攻擊是指惡意攻擊者往Web頁(yè)面里插入惡意Script代碼,當(dāng)用戶(hù)瀏覽該頁(yè)之時(shí),嵌入其中Web里面的Script代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶(hù)的目的。與正常請(qǐng)求相比,XSS請(qǐng)求也具備明顯的文本特征,如<script>alert(0)</script>,<img src=0 onerror=alert(0)>等。

2. 規(guī)則模型

掃描器檢測(cè)與Web攻擊檢測(cè)不同之處在于,掃描是一種持續(xù)的行為,我們通過(guò)對(duì)掃描器持續(xù)一段時(shí)間的請(qǐng)求進(jìn)行聚合分析,而Web攻擊檢測(cè)則是把每條請(qǐng)求作為一次獨(dú)立的事件來(lái)判斷是否為Web攻擊。掃描器在請(qǐng)求不存在的資源時(shí)往往會(huì)返回狀態(tài)碼404,但實(shí)際生產(chǎn)環(huán)境中并非如此。尤其是作為電商企業(yè),希望被正面的搜索引擎抓取,返回404的這種方式會(huì)對(duì)SEO搜索引擎優(yōu)化產(chǎn)生不利影響,因此多數(shù)域名針對(duì)這種請(qǐng)求會(huì)做3XX的跳轉(zhuǎn)。總體來(lái)說(shuō),大量返回404的請(qǐng)求往往都是盲掃請(qǐng)求,但仍有大量盲掃請(qǐng)求返回狀態(tài)碼并非404。這里依賴(lài)Web請(qǐng)求日志,在一定時(shí)間被僅對(duì)請(qǐng)求url文本特征進(jìn)行分析,來(lái)識(shí)別掃描器。

2.1 正則提取

敏感內(nèi)容掃描器往往會(huì)請(qǐng)求敏感路徑、敏感文件等信息,因此首先收集這些信息,然后用正則匹配去你和這些內(nèi)容。這里分別按照敏感信息的類(lèi)型進(jìn)行分類(lèi):

class Sensitive(object):"""docstring for Sensitive"""def __init__(self):super(Sensitive, self).__init__()self.patterns = [# 0. 敏感文件re.compile("(((php)?info|php|[mc]oon|dns|payload|mytag_js|cmd|log|my|shell|data|te?mp|settings|default|root|robots?|htaccess|(my)?sql|data(base)?|db|conf(iguration|ig|igs)?|bac?k(up)?|te?mp|pack(age)?|test|web(site)?|old|site|src|code|suning|result|home|ftp|common|sys(tem)?|(htp)?passwd|shadow|ssh|httpd?)\d{,3}\.(php|zip|rar|tar|gz|tgz|bz2|7z))(\?|&|\s|$|\.)",re.I),# 1. 敏感后綴re.compile("(\.(sql|in(i|c)|conf(ig)?|pub|bac?k(up)?|mdb|swp|ssh|old|tag|git(ignore)?|svn|bzr)(\?|&|\s|$))",re.I),# 3. 敏感日志re.compile("(/logs?/(\w+/){0,}[\w_\.-]+log$)", re.I),# 2. adminre.compile("(/_*(sql|my(sql)?|php|db|sha)[+-._\d]*(my)?admins?[+-._]*(bak|old|[\d.]+)?/)|(\w*admin\w*\.\w+)",re.I),# 3. 連續(xù)重復(fù)字符文件re.compile("/(\w)\\1{1,4}\.(php|zip|rar|tar|gz|tgz|bz2|7z)(\?|&|\s|$)",re.I),# 4. 敏感路徑re.compile("((etc/(passwd|shadow|(sys)?(\w*\.)conf(ig)?|\.?ssh|httpd|apache|bashrc|issue|termcap|inputrc|group))|web-inf|usr/local|(var/(lib|logs?|cahces?|apache2?)))",re.I),# 5. 連續(xù)數(shù)字文件re.compile("(/\d{1,5}\.(php|zip|rar|tar|gz|tgz|bz2|7z))(\?|&|\s|$)")]

2.2 正則優(yōu)化

  • 正則順序優(yōu)化:按照Sensitive類(lèi)的定義,當(dāng)url匹配到關(guān)鍵內(nèi)容后即返回匹配內(nèi)容,跳出正則過(guò)濾的循環(huán)。因此,為了進(jìn)一步降低性能的消耗,將生產(chǎn)環(huán)境中命中頻率最高的正則放在最前面,命中率低的正則放在靠后位置。

  • 單條正則調(diào)優(yōu):由于正則匹配搜索的優(yōu)先級(jí)為由左向右,因此將生產(chǎn)環(huán)境中命中頻率最高的放在左邊,最低的放在最右邊。

  • 2.3 準(zhǔn)確率和召回率評(píng)估

    評(píng)估方式:模型部署在SSMP平臺(tái),按每分鐘進(jìn)行聚合,并將檢測(cè)到的掃描器數(shù)據(jù)作為L(zhǎng)og日志打印。根據(jù)Yarn日志輸出的掃描器IP和檢測(cè)到的請(qǐng)求時(shí)間在云跡進(jìn)行抽樣驗(yàn)證。

    3. 統(tǒng)計(jì)特征ML模型

    掃描器請(qǐng)求和正常請(qǐng)求之間除了文本特征以外,在狀態(tài)碼、url長(zhǎng)度、所攜帶ua的混亂度及訪問(wèn)域名的混亂度等也存在一定差異性。因此提取命中關(guān)鍵詞次數(shù)及上述特征,結(jié)合WAF正常日志和規(guī)則檢測(cè)到的掃描器日志形成黑白樣本,進(jìn)一步訓(xùn)練ML模型。

    3.1 特征提取

    • 關(guān)鍵詞提取
      結(jié)合網(wǎng)上常見(jiàn)的集中掃描器提取敏感內(nèi)容字典,并結(jié)合規(guī)則模型識(shí)別的掃描器日志加以補(bǔ)充,組成關(guān)鍵詞庫(kù)。進(jìn)一步隨機(jī)提取全網(wǎng)流量作為白樣本對(duì)掃描器關(guān)鍵詞庫(kù)進(jìn)行匹配,并將白樣本中大量存在的關(guān)鍵詞剔除,最終關(guān)鍵詞如下:

    3.2 特征工程

    除了關(guān)鍵詞系數(shù)特征,同時(shí)還分別提取了請(qǐng)求次數(shù)、敏感詞個(gè)數(shù)、敏感詞威脅系數(shù)、UA混亂度、域名換亂度、狀態(tài)碼占比等特征進(jìn)行示范。

    class ScannerFeatures(object):def __init__(self):super(ScannerFeatures, self).__init__()self.wspatt = re.compile("/(\w)\\1{,4}\.(php|zip|rar|tar|gz|tgz|bz2|7z)(\?|&|\s|$)")self.nbpatt = re.compile("(/\d{1,5}\.(php|zip|rar|tar|gz|tgz|bz2|7z))(\?|&|\s|$)")self.adminpatt = re.compile(r'(/_*(sql|my(sql)?|php|db|sha)[+-._\d]*(my)?admins?[+-._]*(bak|old|[\d.]+)?/)|(\w*admin\w*\.\w+)', re.I)self.wordindex = eval(open('wordindex.txt', 'r').read())def statusRate(self, arr, statu):"""計(jì)算狀態(tài)碼占比"""return arr.count(statu) / len(arr)def GiniArr(self, arr):"""計(jì)算元素Gini系數(shù)"""D = dict(zip(*np.unique(arr, return_counts=True)))arr = [_ for _ in D.values()]n = sum(arr)g = 0for i in arr:g += (i / n) ** 2return 1 - gdef feature(self, data):"""輸入Web日志Datafream數(shù)據(jù),輸出每個(gè)IP聚合后的特征向量"""X = np.zeros(len(self.wordindex))for url in list(data['url']):url = self.wspatt.subn(' wsfile ', url)[0].lower()url = self.nbpatt.subn(' nbfile ', url)[0]url = re.subn('\d+', '', url)[0]for kw in re.split('[^a-z]', url):try:X[self.wordindex[kw]] += 1except:passX = [np.log(x + 1) for x in X[X != 0]]nums = len(X)r = np.sum(X)cont = len(data)giniHost = self.GiniArr(list(data['host']))giniUa = self.GiniArr(list(data['ua']))sr200 = self.statusRate(list(data['status']), 200)sr403 = self.statusRate(list(data['status']), 403)sr404 = self.statusRate(list(data['status']), 404)srOts = 1 - sr200 - sr403 - sr404result = np.array([cont, nums, r, giniUa, giniHost, sr200, sr403, sr404, srOts])return result

    3.3 模型評(píng)估

    對(duì)規(guī)則模型采集的黑樣本及Web日志白樣本進(jìn)行逐個(gè)人為驗(yàn)證并打標(biāo),進(jìn)而訓(xùn)練隨機(jī)森林模型、和MLP模型分別用召回率、準(zhǔn)確率和F1得分進(jìn)行評(píng)估。模型在訓(xùn)練及表現(xiàn)良好,但測(cè)試集中可以看出模型過(guò)擬合驗(yàn)證,結(jié)構(gòu)風(fēng)險(xiǎn)太高。無(wú)法滿足生產(chǎn)環(huán)境真實(shí)業(yè)務(wù)場(chǎng)景需求。針對(duì)不同的模型通過(guò)降低樹(shù)深度、前后剪植,調(diào)整懲罰系數(shù)等方式降低模型結(jié)構(gòu)風(fēng)險(xiǎn)造成準(zhǔn)確率和召回率降低,左右權(quán)衡后效果均未能達(dá)到滿意效果。

    • 測(cè)試1

    • 測(cè)試2

    4. 基于n-gram特征提取的MLP模型

    4.1 模型訓(xùn)練和評(píng)估示范

    對(duì)傳統(tǒng)機(jī)器學(xué)習(xí)來(lái)說(shuō),特征提取是比較繁瑣的,需要對(duì)業(yè)務(wù)場(chǎng)景的深入理解。在掃描器識(shí)別任務(wù)中,我們可以將單個(gè)用戶(hù)連續(xù)發(fā)起的請(qǐng)求序列拼接到一起作為一個(gè)短文本,采取NLP中情感分析的思想,分別訓(xùn)練詞向量和分類(lèi)器模型對(duì)掃描器請(qǐng)求序列進(jìn)行識(shí)別。訓(xùn)練過(guò)程中需要注意參數(shù)n-gram和max_features的調(diào)整,這里分別代表取詞方式和特征維度。我們先取部分?jǐn)?shù)據(jù)實(shí)驗(yàn)不同的n-gram參數(shù)和max_features參數(shù)進(jìn)行模型訓(xùn)練,并對(duì)測(cè)試集數(shù)據(jù)進(jìn)行評(píng)估效果。在保證模型測(cè)試集評(píng)分的基礎(chǔ)上,max_features越小資源消耗越小。

    # 訓(xùn)練詞向量 max_features = 3000 seed = 123 countvectorizer = CountVectorizer(ngram_range=(2, 2), decode_error="ignore",min_df=1, analyzer="word",token_pattern='[\w-]+',max_features=max_features) X = countvectorizer.fit_transform(sequence).toarray() y = lables x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=seed)# 訓(xùn)練模型 mlp = MLPClassifier(solver="adam", alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=seed) mlp.fit(x_train, y_train) joblib.dump(mlp, "model/scan_mlp.pkl", compress=3)# 將模型參數(shù)和偏置保存為np格式 np.save("../model/weights",mlp.coefs_) np.save("../model/bias",mlp.intercepts_)

    在實(shí)際訓(xùn)練中,從蘇寧應(yīng)用防火墻(SNWAF)日志中抽取了275019條正常訪問(wèn)序列作為正樣本,同時(shí)通過(guò)SNWAF輸出的掃描器IP列表提取出361504條掃描器IP的訪問(wèn)序列作為黑樣本,對(duì)模型進(jìn)行訓(xùn)練,取得了比規(guī)則模型和統(tǒng)計(jì)特征ML模型更好的效果。該方法有更好的成長(zhǎng)性,可以隨著高質(zhì)量訓(xùn)練數(shù)據(jù)的增長(zhǎng)進(jìn)行優(yōu)化迭代,同時(shí)缺點(diǎn)是模型結(jié)構(gòu)更加復(fù)雜,資源消耗較大。

    4.2 模型工程化部署

    由于需要實(shí)時(shí)對(duì)海量訪問(wèn)日志進(jìn)行監(jiān)控,我們需要將模型部署到分布式大數(shù)據(jù)計(jì)算平臺(tái)。在實(shí)際的代碼工程化部署過(guò)程中,可能會(huì)出現(xiàn)訓(xùn)練模型的環(huán)境與分布式環(huán)境模塊版本不一致或缺少模塊導(dǎo)致的模型加載失敗問(wèn)題。針對(duì)上述問(wèn)題,我們采取了一些辦法:

  • 抽取countvectorizer模型的字典向量,手動(dòng)構(gòu)建詞向量轉(zhuǎn)換函數(shù)
  • 重寫(xiě)MLP模型預(yù)測(cè)代碼,將模型預(yù)測(cè)邏輯函數(shù)化
  • # 詞向量轉(zhuǎn)換 def urls2vec(self, url):N = len(self.max_features)X = np.zeros(N)for word in self.url_split(url):X[self.wordindex[word]] += 1return X# MLP模型預(yù)測(cè)邏輯函數(shù)化 class MLPPredict(object):"""輸入向量給出識(shí)別結(jié)果"""def __init__(self, weights, bias):super(MLPPredict, self).__init__()self.weights = weightsself.bias = biasself.layers = [5, 2]self.n_layers = len(self.layers) + 2self.n_outputs = 1@staticmethoddef relu(x):np.clip(x, 0, np.finfo(x.dtype).max, out=x)return xdef forward_pass(self, activations):for i in range(self.n_layers - 1):activations[i + 1] = np.dot(activations[i],self.weights[i])activations[i + 1] += self.bias[i]# For the hidden layersif (i + 1) != (self.n_layers - 1):activations[i + 1] = self.relu(activations[i + 1])activations[i + 1] = self.logistic(activations[i + 1])return activationsdef predict(self, x):layer_units = [x.shape[1]] + self.layers + \[self.n_outputs]activations = [x]for i in range(self.n_layers - 1):activations.append(np.empty((x.shape[0],layer_units[i + 1])))activations = self.forward_pass(activations)y_pred = activations[-1]return round(float(y_pred[0][0]))

    通過(guò)本地測(cè)試我們發(fā)現(xiàn),采取上述方式與加載模型的輸出結(jié)果一直,并且預(yù)測(cè)效率更高。

    我們通過(guò)創(chuàng)建pyspark-streaming任務(wù),實(shí)時(shí)消費(fèi)WAF訪問(wèn)日志對(duì)每批次用戶(hù)的訪問(wèn)日志進(jìn)行向量化轉(zhuǎn)化后輸入預(yù)測(cè)模型,從而實(shí)現(xiàn)掃描器的實(shí)時(shí)監(jiān)控,并將檢測(cè)到的掃描器IP進(jìn)行告警或根據(jù)配置實(shí)施訪問(wèn)限制。

    5. 總結(jié)

    本文對(duì)各類(lèi)web掃描特特征進(jìn)行了梳理和總結(jié),并展示了利用規(guī)則模型和統(tǒng)計(jì)特征ML模型對(duì)掃描器的識(shí)別效果。

    其中規(guī)則模型有天然的優(yōu)勢(shì),所見(jiàn)即所得,可信度高可解釋性強(qiáng),同時(shí)滿足奧朗姆剃刀簡(jiǎn)單高效原則,然而只對(duì)已知的掃描類(lèi)型有效,合理的閾值設(shè)計(jì)非常重要,需要結(jié)合實(shí)際業(yè)務(wù)流量來(lái)精準(zhǔn)分析;基于統(tǒng)計(jì)特征的機(jī)器學(xué)習(xí)識(shí)別模型的特征提取相對(duì)簡(jiǎn)單,只抽取了少量數(shù)據(jù)集進(jìn)行訓(xùn)練,表達(dá)能力有限,不能夠充分學(xué)習(xí)到正常請(qǐng)求行為和掃描器行為的區(qū)別,有興趣的同學(xué)可以在此基礎(chǔ)上進(jìn)行更加精細(xì)化的特征提取以達(dá)到識(shí)別率的提升;基于n-gram特征提取的MLP模型具備更好的成長(zhǎng)性,可以隨著高質(zhì)量訓(xùn)練樣本數(shù)據(jù)的增加進(jìn)行優(yōu)化迭代,同時(shí)缺點(diǎn)是相對(duì)前兩種方式資源消耗略大。

    在實(shí)際的生產(chǎn)應(yīng)用中,我們選擇AI模型的落地,需要根據(jù)企業(yè)的數(shù)據(jù)規(guī)模、資源情況和需求標(biāo)準(zhǔn)來(lái)選擇適合自己場(chǎng)景的模型和方式,最適合的才是最好的。

    總結(jié)

    以上是生活随笔為你收集整理的基于应用日志的扫描器检测实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。