一、今日目標
建立一套可重現且合乎倫理的「釣魚/社交詐騙」樣本蒐集流程,並設計標註(labeling)規範,使樣本能支援後續的 rule-based 檢測、特徵工程與機器學習訓練。
具體產出:
樣本來源清單與取得方式(含 API、公開資料、模擬樣本)。
標註欄位規範(CSV schema)。
初步自動擷取腳本(示例:從公開網頁擷取文案與 URL)。
至少 30 則去識別化(anonymized)釣魚樣本(模擬或公開來源),並存成 CSV。
二、可用樣本來源(與倫理說明)
公開通報與新聞案例:使用公開媒體報導或資安通報,並在資料中去識別化(移除個人資料、替換真實帳號)。
公開論壇/留言板(僅抓公開可見內容):例如公開討論串、留言(遵守該網站 robots.txt 與使用條款)。
開源倉庫或研究資料集:查找現有公開釣魚資料集(使用前請確認授權與用途)。
模擬樣本(建議首選):自行設計多種釣魚樣本(不同誘因、不同短網址、不同語言風格),完全在測試環境下產出,避免對真實使用者造成影響。
測試平台(Gophish)產出:僅在你擁有權限或受試者同意的情況下執行,所有測試須取得書面同意與倫理審查(如適用)。
倫理與合規要點:
嚴禁對未經同意的真實使用者發送釣魚訊息。
使用公開案例時進行去識別化(anonymization)。
若需實測,提前取得被試者同意並告知風險與回饋機制。
三、標註欄位(CSV schema 建議)
建議欄位(每欄說明):
id:樣本唯一識別碼(自訂)。
source:資料來源(news/forum/simulated/gophish等)。
date:擷取或創建日期(YYYY-MM-DD)。
raw_text:原始訊息內容(去識別化後)。
extracted_urls:擷取出的 URL(以分號分隔)。
domains:URL 對應之主域名(以分號分隔)。
has_shorturl:是否包含短網址(true/false)。
urgent_flag:是否含緊迫性關鍵字(true/false)。
social_engineering_type:主要誘因類型(authority/urgency/reciprocity/social_proof/familiarity/other)。
phishing_target:攻擊目標類型(credentials/financial/info/other)。
label:是否為釣魚(phishing/benign/unknown/simulated)。
notes:備註(例如去識別處理說明)。
四、自動擷取示例(Python + BeautifulSoup)
下列示例為從公開網頁擷取文字並萃取 URL 的基礎腳本。請確認目標網站允許擷取(robots.txt)且遵守使用條款;此範例僅供學術/測試用途。
import requests
from bs4 import BeautifulSoup
import re
import tldextract
import pandas as pd
from datetime import datetime
import uuid
URL_PATTERN = re.compile(r'(https?://[^\s"'>]+)', re.IGNORECASE)
def extract_urls(text):
return URL_PATTERN.findall(text)
def get_domains(urls):
domains = []
for u in urls:
te = tldextract.extract(u)
domain = ".".join(part for part in [te.domain, te.suffix] if part)
domains.append(domain)
return list(set(domains))
def fetch_public_page(url):
headers = {"User-Agent": "Mozilla/5.0 (compatible; sample-bot/1.0)"}
r = requests.get(url, headers=headers, timeout=10)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
# 取正文(視網站而定,此處簡化取所有段落文字)
paragraphs = [p.get_text(separator=" ", strip=True) for p in soup.find_all("p")]
return "\n".join(paragraphs)
def create_sample_record(raw_text, source="public", date=None):
if date is None:
date = datetime.utcnow().strftime("%Y-%m-%d")
urls = extract_urls(raw_text)
domains = get_domains(urls)
rec = {
"id": str(uuid.uuid4()),
"source": source,
"date": date,
"raw_text": raw_text,
"extracted_urls": ";".join(urls),
"domains": ";".join(domains),
"has_shorturl": any("bit.ly" in d or "tinyurl" in d for d in domains),
"urgent_flag": any(k in raw_text.lower() for k in ["urgent","immediately","verify","limited","expire","24 hour","24小時","立即","限時","驗證"]),
"social_engineering_type": "",
"phishing_target": "",
"label": "",
"notes": ""
}
return rec
if name == "main":
seed_pages = [
"https://example.com/sample-article-1", # 請替換為允許擷取的頁面
]
records = []
for page in seed_pages:
try:
text = fetch_public_page(page)
rec = create_sample_record(text, source="news")
records.append(rec)
except Exception as e:
print("fetch error:", page, e)
df = pd.DataFrame(records)
df.to_csv("phishing_samples_initial.csv", index=False)
print("Saved", len(df), "records.")
說明:
extract_urls 與 tldextract 協助萃取與標準化域名,便於後續比對黑名單或白名單。
urgent_flag 同時支援英文與中文關鍵詞(可依需要擴充)。
對於社群貼文或 API(例如 Reddit、Twitter/X),請使用官方 API(並遵守速率限制與授權)。
五、標註作業流程(手動 + 半自動)
初步自動化擷取:使用上述腳本或 API 抓取文字、URL、Metadata(發文者、時間、回覆數等)。
去識別化:移除或替換個資(email、手機、真實姓名、帳號 ID)。
人工標註:依照 CSV schema 填寫 social_engineering_type、phishing_target、label 與 notes。建議至少兩位標註者交叉標註以提升一致性(inter-annotator agreement)。
匯出檢視:將標註結果匯成 CSV,並生成簡易統計(例如各類型樣本數、短網址比例、緊迫性比例)。
版本控管:將樣本與標註檔上傳至私人或團隊的 GitHub(private repo)或壓縮檔備份,紀錄版本與變更說明。
六、今日實作任務(步驟化)
決定三個公開可抓取的資料來源(或三個模擬樣本範例)。
執行腳本抓取至少 30 則文本(模擬或公開),並產出初始 CSV。
用表格工具(Excel/Google Sheets)開啟 CSV,對前 10 則進行人工標註(social_engineering_type 與 label)。
上傳 CSV 至你的專案資料夾(或 GitHub private repo),並在 iT 邦幫忙發文附上樣本摘要(不貼原始敏感內容)。
七、範例輸出(CSV 範例列)
id,source,date,raw_text,extracted_urls,domains,has_shorturl,urgent_flag,social_engineering_type,phishing_target,label,notes
uuid1,simulated,2025-10-03,"您的帳號將在24小時內被停用,請點擊 https://bit.ly/xyz 重新驗證","https://bit.ly/xyz","bit.ly",true,true,"authority;urgency","credentials","phishing","模擬樣本"
八、風險控管與備註
若使用第三方 API(例如 Twitter/X API、Reddit API),請確認 API 使用授權與速率限制。
不要在未經許可的情況下使用爬蟲對大量私人資料進行擷取。
標註過程中若發現可疑真實詐騙案例,僅紀錄摘要與去識別化資訊,不要主動揭露或轉發該詐騙連結給未經同意的人。