釣魚網站檢測【機器學習】

  • 2019 年 10 月 4 日
  • 筆記

本文介紹如何使用機器學習技術檢測一個URL是否是釣魚網站,內容包括數據抓取、特徵選擇和模型訓練等。

我有一個客戶的郵箱最近差點被釣魚網站騙掉。他的供應商的郵件被攻擊了,然後黑客使用這個供應商的郵箱給他發了一封催款郵件,要求他支付到另一個銀行帳號。幸運的是,我的客戶給那個供應商 打電話進行了確認因此發現了騙局。這使我意識到釣魚攻擊到處都在,我們不應當低估它的危害。

下面是一些釣魚網站的例子,基本上他們的目的就是騙到你的登錄帳號和密碼。這是一個仿冒Paypal的釣魚站:

這是一個仿冒的遊戲站:

1、初步分析

在Kaggle上有一些釣魚數據集,但是為此項目我希望生成自己的資料庫。我使用了兩種數據源來構建釣魚URL清單:

  • 合法URL:Ebubekir Büber (github.com/ebubekirbbr)
  • 釣魚URL:phishtank.com

利用一點領域知識對這些合法和釣魚URL進行分析,我將可以從URL中得到的資訊分為以下5個類別:

通過分析我還有以下的發現:

  • 釣魚攻擊者通常會黑進合法的網站來插入釣魚網頁,而不是搭建一個獨立域名進行 釣魚攻擊。雖然這會讓從域名來識別釣魚網站更困難,我理解註冊商和託管商一旦 發現釣魚網頁都會迅速通知站長移除以避免對其排名的影響。這意味著我們可能會 看到被攻擊的域名的註冊商為空。
  • 有些釣魚網站可能包含惡意程式碼而不是直接在瀏覽器中載入URL。我這樣操作:

2、數據獲取

我的數據抓取器的概念模型大致如下:

基本的思路是儘可能保持程式碼的模組化,這樣我就可以在需要的時候添加新的分類。我抓取的每個頁面都在本地文件存儲,以便這些頁面在將來不可用時有個參考依據。

我使用BeautifulSoup來提取頁面資訊,通過設置隨機的user-agent,可以減少請求被當作bot拒絕的可能。

為了保證一致性,我也對URL進行了基本的預處理,例如移除www和結尾的斜杠。

3、探索式數據分析

由於抓取數據非常耗時,我決定開始我的探索式數據分析來找點感覺。在分析了1817個URL(其中包括930個釣魚URL和887個合法URL)的特徵之後,我選擇使用以下15個特徵:

  URL            Domain          Network      Page       Whois   -------------- --------------- ------------ ---------- ---------    length         len_subdomain   len_cookie   length     w_score    special_char   is_https                     anchors    depth                                       form                                                email                                                password                                                signin                                                hidden                                                popup

4、特徵選擇

我是用LASSO正則化來識別重要的特徵。即使只用了一個小alpha值,我已經發現了5個重要的特徵:

[('len', 0.0006821926601753635),  ('count_s', 0.0),  ('depth', 0.0),  ('len_subdomain', 0.0),  ('is_https', 0.0),  ('len_cookie', -0.0002472539769316538),  ('page_length', -2.4074484401619206e-07),  ('page_num_anchor', -0.0006943876695101922),  ('page_num_form', -0.0),  ('page_num_email', -0.0),  ('page_num_password', 0.0),  ('page_num_signin', 0.0),  ('page_num_hidden', -0.00041105959874092535),  ('page_num_popup', -0.0),  ('w_score', -0.0)]

坦白說,對於w_score沒起作用我有點驚訝。最終我決定使用這5個特徵。

  URL      Domain   Network      Page      Whois   -------- -------- ------------ --------- -------    length            len_cookie   length                                   anchors                                   hidden

然後我使用KNN搭了一個簡單的分類器作為基準線。K選擇3並得到了還算可以的準確率0.793:

5、模型

通過抓取我得到6906 個url,3501合法, 3455 釣魚。不出意外的是許多釣魚頁面不可訪問了:

 Type    #URL processed   #Pages available  ------- ---------------- ------------------   Legit            4,000              3,501   Phish            6,000              3,455

利用這6906個樣本我再次進行特徵選擇,篩選出同樣的5個特徵。最優的K還是3,很好!

下面是模型的參數:

Model               Accuracy  ------------------- ----------  Naive Bayes            0.757  SVC                    0.760  KNN (K=3)              0.791  Log. Reg.              0.822  Decision Tree          0.836  KNN (K=3, scaled)      0.845  Random Forest          0.885

原文鏈接:用機器學習檢測釣魚網站 — 匯智網