在 Python 中使用機(jī)器學(xué)習(xí)來檢測釣魚鏈接
在網(wǎng)絡(luò)釣魚攻擊中,用戶會收到一封帶有誤導(dǎo)性鏈接的郵件或信息,攻擊者可以利用它來收集重要數(shù)據(jù),比如你的銀行卡密碼。本文將會給出一個簡短的教程,旨在介紹如何檢測這種網(wǎng)絡(luò)釣魚的企圖。
通過網(wǎng)絡(luò)釣魚攻擊,攻擊者能夠獲得一些重要憑證,這些憑證可以用來進(jìn)入你的銀行或其他金融賬戶。攻擊者發(fā)送的 URL 看起來與我們?nèi)粘J褂玫脑紤?yīng)用程序完全相同。這也是人們經(jīng)常相信它,并在其中輸入個人信息的原因。釣魚網(wǎng)址可以打開一個網(wǎng)頁,它看起來與你的銀行的原始登錄頁面相似。最近,這樣的網(wǎng)絡(luò)釣魚攻擊正變得相當(dāng)普遍,所以,檢測釣魚鏈接變得非常重要。因此,我將介紹如何在 Python 中使用機(jī)器學(xué)習(xí)來檢查一個鏈接是誤導(dǎo)性的還是真實的,因為它可以幫助我們看到網(wǎng)頁代碼及其輸出。注意,本文將使用 Jupyter Notebook。當(dāng)然,你也可以使用 Google Colab 或 Amazon Sagemaker,如果你對這些更熟悉的話。
下載數(shù)據(jù)集
第一步,我們需要用于訓(xùn)練數(shù)據(jù)集。你可以從下面的鏈接中下載數(shù)據(jù)集。
真實的鏈接:https://github.com/jishnusaurav/Phishing-attack-PCAP-analysis-using-scapy/blob/master/Phishing-Website-Detection/datasets/legitimate-urls.csv
釣魚鏈接:https://github.com/jishnusaurav/Phishing-attack-PCAP-analysis-using-scapy/blob/master/Phishing-Website-Detection/datasets/phishing-urls.csv
訓(xùn)練機(jī)器進(jìn)行預(yù)測
當(dāng)數(shù)據(jù)集下載完成,我們需要使用以下幾行代碼來導(dǎo)入所需的庫:
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
如果你沒有這些庫,你可以使用 pip 工具來安裝這些庫,如下圖所示:
使用 pip 工具安裝依賴庫
當(dāng)依賴安裝完成,你就可以導(dǎo)入數(shù)據(jù)集,并將其轉(zhuǎn)換為 pandas 數(shù)據(jù)框架,使用以下幾行代碼進(jìn)一步處理:
legitimate_urls = pd.read_csv(“/home/jishnusaurav/jupyter/Phishing-Website-Detection/datasets/legitimate-urls.csv”)
phishing_urls = pd.read_csv(“/home/jishnusaurav/jupyter/Phishing-Website-Detection/datasets/phishing-urls.csv”)
在成功導(dǎo)入后,我們需要把這兩個數(shù)據(jù)集合并,以便形成一個數(shù)據(jù)集。合并后的數(shù)據(jù)集的前幾行如下圖所示:
合并后的數(shù)據(jù)集的前幾行
然后去掉那些我們不需要的列,如路徑(path)、協(xié)議(protocol)等,以達(dá)到預(yù)測的目的:
urls = urls.drop(urls.columns[[0,3,5]],axis=1)
在這之后,我們需要使用以下代碼將數(shù)據(jù)集分成測試和訓(xùn)練兩部分:
data_train, data_test, labels_train, labels_test =
train_test_split(urls_without_labels, labels, test_size=0.30,
random_state=110)
接著,我們使用 sklearn 的隨機(jī)森林分類器建立一個模型,然后使用 fit 函數(shù)來訓(xùn)練這個模型。
random_forest_classifier = RandomForestClassifier()
random_forest_classifier.fit(data_train,labels_train)
完成這些后,我們就可以使用 predict 函數(shù)來最終預(yù)測哪些鏈接是釣魚鏈接。下面這行可用于預(yù)測:
prediction_label = random_forest_classifier.predict(test_data)
就是這樣啦!你已經(jīng)建立了一個機(jī)器學(xué)習(xí)模型,它可以預(yù)測一個鏈接是否是釣魚鏈接。試一下吧,我相信你會滿意的!