如何自己搭建釣魚網(wǎng)站檢測(cè)系統(tǒng)
0×01基本系統(tǒng)架構(gòu)隨著電子商務(wù)、互聯(lián)網(wǎng)金融的快速發(fā)展,在利益的驅(qū)使下,從事“釣魚攻擊”的黑產(chǎn)呈逐漸上升趨勢(shì)?!搬烎~攻擊”不僅對(duì)企業(yè)的品牌形象造成嚴(yán)重?fù)p害,還對(duì)用戶的賬戶安全、甚至資金安全構(gòu)成了極大的威脅。目前“釣魚攻擊”已經(jīng)為了網(wǎng)絡(luò)欺詐的重要一環(huán),因此反釣魚系統(tǒng)在電子商務(wù)、金融證券、電信運(yùn)營商等企業(yè)的安全運(yùn)營中起著越來越重要的地位。反釣魚系統(tǒng)一般有如下兩種架構(gòu)。對(duì)于這種架構(gòu)主要適用于缺乏終端控制力的企業(yè)。企業(yè)可以從各個(gè)渠道收集待檢測(cè)的url,檢測(cè)引擎調(diào)用利用WebKit引擎獲取頁面渲染后的有效內(nèi)容,然后調(diào)用檢測(cè)算法對(duì)頁面內(nèi)容進(jìn)行檢測(cè)。檢測(cè)后將檢測(cè)結(jié)果存至數(shù)據(jù)庫,之后將檢測(cè)結(jié)果輸出至第三方的攔截系統(tǒng)、關(guān)停服務(wù)提供商等,最終遏制“釣魚攻擊”的發(fā)生。對(duì)于第二種架構(gòu),適用于擁有大量終端的企業(yè),利用終端的能力代替了WebKit。終端直接將疑似頁面的特征發(fā)回后端的檢測(cè)引擎,檢測(cè)引擎生成檢測(cè)結(jié)果、產(chǎn)出黑名單,同時(shí)將檢測(cè)結(jié)果的返回至終端。0×02檢測(cè)引擎檢測(cè)引擎做為反釣魚系統(tǒng)的核心承擔(dān)著識(shí)別頁面是否為釣魚網(wǎng)站的任務(wù)。針對(duì)釣魚網(wǎng)站的檢測(cè)手段主要有IP黑名單,url分析,域名注冊(cè)信息分析,頁面內(nèi)容分析,圖像識(shí)別等方法。其中頁面內(nèi)容分析一直是釣魚頁面識(shí)別的主要手段。頁面識(shí)別的主要算法有貝葉斯算法、機(jī)器學(xué)習(xí)算法、Html文檔特征等算法。下面介紹下如何使用貝葉斯算法進(jìn)行頁面識(shí)別。貝葉斯算法簡(jiǎn)介貝葉斯分類是一類分類算法的總稱,是關(guān)于隨機(jī)事件A和B的條件概率和邊緣概率的一則定理。 P(A)是A的先驗(yàn)概率或邊緣概率。之所以稱為”先驗(yàn)”是因?yàn)樗豢紤]任何B方面的因素;P(A|B)是已知B發(fā)生后A的條件概率,也由于得自B的取值而被稱作A的后驗(yàn)概率;P(B|A)是已知A發(fā)生后B的條件概率,也由于得自A的取值而被稱作B的后驗(yàn)概率;P(B)是B的先驗(yàn)概率或邊緣概率,也作標(biāo)準(zhǔn)化常量。分類原理我們用W來代表一個(gè)待分類的網(wǎng)頁,用h+釣魚網(wǎng)頁,用h-代表正常網(wǎng)頁。利用貝葉斯公式,判定頁面是否為釣魚網(wǎng)頁可描述為:P(h+|W)=P(h+)*P(W|h+)/P(W)P(h-|W)=P(h-)*P(W|h-)/P(W)P(W)為常量,可以暫時(shí)忽略。P(h+)、P(h-)為先驗(yàn)概率,即一個(gè)真實(shí)的網(wǎng)頁集合中,釣魚網(wǎng)頁的比例與正常網(wǎng)頁的比例。為了求得P(W|h),我們可以將W進(jìn)行分詞,W={w1,w2,w3…}。如果我們假設(shè)w1,w2等是條件無關(guān)的,則P(W|h+)=P(w1|h+)*P(w2|h+)*P(w3|h+)。P(wi|h+)經(jīng)過Laplacean平滑處理后,P(wi|h+)=(1 + 特征詞wi在h+訓(xùn)練集中的詞頻) / (全部特征詞去重個(gè)數(shù) + h+下所有詞出現(xiàn)總數(shù))。這樣我們便能計(jì)算出P(h+|W)與P(h-|W),比較大小可知頁面屬于哪一分類。數(shù)據(jù)準(zhǔn)備為了獲取待檢測(cè)域名,我們可以從ICANN的Centralized Zone Data Service免費(fèi)獲取到全球的域名列表,做差量可得到全球的每日新增域名。之后將每日新增的域名導(dǎo)入到我們的待檢測(cè)列表。我們可以通過Python調(diào)用Phantomjs去獲取頁面中內(nèi)容。Phantomjs:var webPage = require('webpage');var system = require('system');var page = webPage.create();if (system.args.length === 1) { console.log(error); phantom.exit();} else { url = system.args[1]; page.open(url, function (status) { if (status == 'success') { var content = page.content; console.log(content); } else { console.log(error); } phantom.exit(); });};Python:def get_page_content(url): cmd = 'phantomjs getPageContent.js %s' % (url) stdout, stderr = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate() return stdout為了得到一個(gè)貝葉斯分類器,需要一個(gè)樣本集對(duì)其進(jìn)行訓(xùn)練。首先要對(duì)頁面做打標(biāo)分類,一類為釣魚頁面樣本集,一類為正常頁面樣本集。樣本集就是我們的原始訓(xùn)練素材。建立模型這里針對(duì)中文的釣魚頁面建立分類模型,我們先使用正則提取出原始頁面中的中文字符。def get_chinese_content(raw_page_content): content_list = re.findall(ur[\u4e00-\u9fa5]+, raw_page_content) return .join(content_list)獲取頁面中文內(nèi)容后,我們對(duì)其進(jìn)行分詞。def get_seg_list(chinese_content): return jieba.cut(chinese_content)有了基礎(chǔ)數(shù)據(jù)后,就可以開始訓(xùn)練貝葉斯模型。我們需要一份停用詞表,類似下面的無意義作為停用詞,從樣本集的分詞結(jié)果中去掉。一,一下,一個(gè),一些,的,了,和,是,就,都,而,及,與,著,或,一何,一切......我們需要統(tǒng)計(jì)出在兩個(gè)樣本集中總共出現(xiàn)了多少個(gè)不同的詞 all_unique_word_count。之后我們需要分別求出釣魚樣本集與正常樣本集各自出現(xiàn)了多少詞匯,all_phish_word_count, all_normal_word_count。def count_all_unique_word(word_list): return len(set(word_list))all_unique_word_count = count_all_unique_word(all_word_list)接下來我們分別統(tǒng)計(jì)釣魚網(wǎng)頁樣本集與正常網(wǎng)頁樣本集中各個(gè)詞語的詞頻信息,phish_word_frenquency_dict, normal_word_frequency_dict。def get_word_frequency(word_list): frequency_dict = dict() for w in word_list: if frequency_dict.has_key(w): frequency_dict[w] = frequency_dict[w] + 1 else: frequency_dict[w] = 1 return frequency_dictphish_word_frenquency_dict = get_word_frequency(phish_word_list)normal_word_frequency_dict = get_word_frequency(normal_word_list)根據(jù)貝葉斯分類器原理推導(dǎo)的公式,可以計(jì)算出P(wi|h+)概率列表phish_word_probability_table與P(wi|h-)的概率列表normal_word_probability_table,這兩個(gè)table就是貝葉斯模型的核心,需要保存下來。def get_word_probability_table(word_frequency_dict, category_word_count, all_unique_word_count): probability_dict = dict() for key, value in word_frequency_dict.items(): probability_dict[key] = (1 + value) / (all_unique_word_count + category_word_count) return probability_dictphish_word_probability_table = get_word_probability_table(phish_word_frequency_dict, all_phish_word_count, all_unique_word_count)normal_word_probability_table = get_word_probability_table(normal_word_frequency_dict, all_normal_word_count, all_unique_word_count)P(h+)、P(h-)我們可以直接求出,即訓(xùn)練樣本集中釣魚網(wǎng)頁數(shù)目與正常網(wǎng)頁數(shù)目的比例probability_phish,probability_normal。釣魚檢測(cè)當(dāng)有了訓(xùn)練好的模型后,只要獲取了頁面的內(nèi)容,進(jìn)行分詞。查詢phish_word_probability_table與P(wi|h-),計(jì)算出P(h+|W)與P(h-|W),比較大小,判定是否為釣魚頁面。def analyse_page(raw_page_content, probability_phish, probability_normal, phish_word_probability_table, normal_word_probability_table): page_word_list = get_seg_list(get_chinese_content(raw_page_content)) p_phish = probability_phish p_normal = probability_normal for w in page_word_list: p_phish = p_phish * phish_word_probability_table[w] p_normal = p_phish * normal_word_probability_table[w] return True if p_phish > p_normal else False0×03 策略、改進(jìn)“釣魚攻擊”者為了躲避反釣魚系統(tǒng)的檢測(cè),常常采取屏蔽反釣魚檢測(cè)系統(tǒng)IP,屏蔽特定UA,頁面使用js或flash進(jìn)行動(dòng)態(tài)渲染,全頁面圖片化等手段。反釣魚系統(tǒng)為了與之對(duì)抗,需要充分利用云端與終端的優(yōu)勢(shì),突破釣魚網(wǎng)站對(duì)檢測(cè)系統(tǒng)的屏蔽,并采取動(dòng)態(tài)渲染的方式加載js、flash獲取頁面內(nèi)容。檢測(cè)技術(shù)也從單一的文本分析進(jìn)化到了大數(shù)據(jù)統(tǒng)計(jì)分析、機(jī)器學(xué)習(xí)分類算法、HTML特征、圖像識(shí)別等手段,對(duì)可疑頁面進(jìn)行實(shí)時(shí)的分析。甚至是僅僅注冊(cè)了釣魚域名,釣魚網(wǎng)站還未開通,就對(duì)高危域名做出了預(yù)判,對(duì)風(fēng)險(xiǎn)進(jìn)行感知,以降低用戶受到網(wǎng)絡(luò)欺詐的風(fēng)險(xiǎn)。
買軟件是最好的途徑
- 成都搜索引擎SEO優(yōu)化排名哪家公司好
- edu和.com是什么意思,有什么區(qū)別?
- nginx可以轉(zhuǎn)發(fā)內(nèi)網(wǎng) url東西嗎?
- 在耐思尼克買了域名,該怎么建站啊
- 如何確定某個(gè)域名服務(wù)器是否工作正常?
- 一級(jí)域名可以打開網(wǎng)站,空間主贈(zèng)送的三級(jí)域名不能打開,域名解析都解析好的,那是什么
- 那里有免費(fèi)的二級(jí)或者三級(jí)域名,可以設(shè)置解析IP的,提供一個(gè),謝謝了
- 域名在什么情形下不需要備案
- host表是什么表?
- www.jf25.com一般域名解析要多久?
- 域名怎么解析到用路由器的服務(wù)器
- 反向綁定域名的方法步驟詳解
- 二級(jí)域名怎么解析
- 電腦不能解析域名?
- 域名怎么樣解析到阿里云服務(wù)器
- 用域名訪問網(wǎng)站到頁面打開過程所用到的協(xié)議?具體過程是怎么樣的
- 將ip地址轉(zhuǎn)換成域名的協(xié)議?
- 如何給主機(jī)分配二級(jí)域名?
- 二級(jí)域名做站有優(yōu)勢(shì)嗎?
- 誰能給個(gè)免費(fèi)二級(jí)域名申請(qǐng)網(wǎng)站?現(xiàn)在有效能申請(qǐng)的
-
把網(wǎng)址復(fù)制粘貼到瀏覽器打開并下載 網(wǎng)址在微信上 怎么操作
-
怎樣查詢二級(jí)域名的ip地址?
-
網(wǎng)站一級(jí)域名和二級(jí)域名區(qū)別
-
子域名ip地址查詢?
-
地址發(fā)布頁是什么意思?
-
電腦網(wǎng)頁找不到,出現(xiàn)404,這個(gè)404代表什么意思?
-
有哪個(gè)網(wǎng)站可以免費(fèi)看NBA直播?
-
電腦網(wǎng)頁打開時(shí)出現(xiàn)HTTP404未找到,如何解決?
-
如何建立個(gè)人網(wǎng)站?我想建一個(gè)自己的網(wǎng)站,永久免費(fèi)的?
-
網(wǎng)頁版qq登錄入口
-
http://www.windows.com/stopcode
-
如何給VPS搭建的網(wǎng)站做國內(nèi)CDN加速?
-
shadowrocket怎么架設(shè)服務(wù)器
-
網(wǎng)站域名后面的cn是什么意思?
-
網(wǎng)站推廣關(guān)鍵詞排名優(yōu)化要用那些方法?