- 主題:情資運用與惡意程式分析
- [GitHub](https://github.com/Bemipu/NOSINT)
- 感謝我的組員 這份是我從那邊幹過來備份的。
## 簡介
一個反情資插件,能在使用者在輸入重要資料時提醒該網站遭受情資外洩的機率。
因近年來詐騙與釣魚網站非常之盛行,即使網路上有許多網站可以幫忙檢測也有許多人懶得上網查詢,因此
我們的創新插件旨在在使用者輸入敏感資料時提供關鍵信息。如果某個特定網站曾經發生過數據泄露,它將迅速警告使用者,確保他們對潛在風險保持知情。此外,該插件還將提供全面的危險指數,使使用者能夠評估每個網站所帶來的威脅程度。
- 在使用者輸入敏感資料時提醒
- 評估網站之潛在風險
- 計算網站之危險指數
## 功能
1. 擷取當前網址,並判斷輸入欄位
2. 若輸入欄位為個人資訊,則需要提示情資洩漏機率
3. 需要收集該網站情資,以分析情資洩漏機率
4. 偵測密碼被使用的功能
:::info
- [功能建議 By ChatGPT](https://chat.openai.com/share/da093e94-7d6e-473b-88ec-cf52633f8434)
設計一個瀏覽器插件來實現上述功能是可行的。以下是你可以補充的功能:
1. 敏感資訊辨識
插件需要具備敏感資訊辨識的能力,可以辨識輸入欄位中可能包含的個人資訊,如電子郵件地址、電話號碼、身份證號碼等。這可以使用正則表達式或機器學習模型來進行辨識。
2. 洩漏機率提示
當插件擷取到可能包含個人資訊的輸入欄位後,需要分析該輸入欄位中的資訊,並評估情資洩漏的機率。你可以使用一些機器學習模型或統計方法來估計洩漏機率,並將結果提示給使用者。
3. 網站情資收集
為了分析情資洩漏機率,插件需要能夠收集該網站的情資。這可能包括對網頁上的元素進行解析,例如擷取使用者名稱、聯絡資訊等敏感資訊。插件需要保證收集敏感資訊的合法性和隱私保護。
4. 洩漏機率統計與報告
插件需要統計使用者在瀏覽不同網站時的洩漏機率,並且可以生成相關的報告。報告可以呈現使用者洩漏風險的趨勢和可能的風險來源,幫助使用者更好地保護個人資訊。
5. 使用者選項與隱私設定
考慮到使用者可能對於敏感資訊的保護有不同的需求,插件應該提供相應的選項和隱私設定,讓使用者能夠根據自己的喜好和需求調整插件的行為。
6. 安全更新與維護
插件應該具備安全更新和維護的機制,以確保插件本身不會成為潛在的風險來源,並及時修復可能的漏洞。
7. 使用者教育與提示
插件可以提供使用者教育和提示,增強使用者對於個人資訊保護的意識,並提供使用瀏覽器的最佳實踐建議。
請注意,設計和實現一個瀏覽器插件需要相當程度的軟體開發和資訊安全知識,並且需要確保插件的功能和行為符合當地的法規與隱私標準。在開發過程中,務必注重用戶隱私和資料保護。
:::
## 實作
### 流程圖

> By ChatGPT
### 前端
:::success
- 0726 13:40 by [name=Bemipu]
前端接口:應該是沒什麼大問題了
- 可以透過 GET Method 送參數
- 可以接收 Response.text
> 目前測試的後端 API 會回傳 Hello + 前端傳送的 URL

:::
:::success
- 0725 00:00 by [name=Bemipu]
Extension 會監聽 submit 事件:
1. 先將預設 submit 按下後送出的動作去掉
2. 觸發 submit 事件後
- 抓取該網頁上的所有 input 的數值,並顯示出來
- 透過 confirm 跳出視窗讓使用者確認「是否要繼續送出資料」
- yes -> submit
- no -> 甚麼都不做
> 之後可以串接後端,只在我們資料庫尚有疑慮的網站才跳 confirm,而不用每次送表單都需要 confirm
:::
#### More info 要呈現的東西
- 危險指數 Risk:
- 註冊商 Registrar:
- 憑證是否過期 Certificate Validity
- Not after:
- Not before:
- 檢測結果 Analysis Stats
- 無害 harmless
- 有害 malicious
- 可疑 suspicious
- 未檢測 undetected
- timeout
- 聲譽 reputation:
- 使用者投票
- 無害 harmless
- 有害 malicious
- 是否在釣魚網站資料庫裡
- 總洩漏次數:
-
### 後端
#### 評估呈現方式
- [ ] 洩漏機率
- 如何計算「機率」是個問題
- [x] 危險指數(類似評分)
- 需要給定各項目的分數權重
- 權重的依據?
- 部分可能可參考 OWASP
- 但其餘 API 抓的東西標準也需盡量一致(不然可能會被問爛)
- [ ] 檢測到的不安全項目數量
- 告訴使用者我們檢查到有多少項目是不安全的
- 不須考慮權重
- 使用者投票部分可能就要分開顯示
#### 權重參數
方案一(危險指數:57.64 分)
- data['last_analysis_stats']--> [100-|[(m+s)*1.15-h]|* 30%]%*35(d1總分)
- "harmless":
- "malicious":
- "suspicious":
- 個資數量*(d2總分)*15
- 身分證字號 *20
- 出生年月日 *10
- 手機 *10
- email*15
- 姓名*10%
- 地址 *20%
- 帳密 *15%
- data['reputation']%*10(d3總分)
- 100-[聲譽 *20%]
- data['last_https_certificate']["validity"]*30%*10(d4總分)
- 時間越久,數值越高
- 負數:0 分
- 10已經過期天數/365
- 若已經過期天數 >= 365,此項目滿分
- data["total_votes"] *10(d5總分)
- "harmless":
- "malicious":
- 壞的多就給分
- phishtank * (d6總分)*5
- 有沒有在釣魚網站資料庫
- true:
- false:
- hibp *(d7總分)*5
- 總洩漏次數/10000
- 上限:10000
- 有沒有在曾洩漏資料的網站的資料庫
- 'DataClasses':(10d)%*10(d9總分)
- 洩露資料種類 越多越危險
- 上限:10
((100-(abs((m+s)*1.35-harmless))*0.30))*0.35
((100-abs(((malicious+suspicious)*1.15)-harmless))*0.3)*0.01*35
[100-(|[(m+s)*1.35-h]|* 30%)]%*35
###
$$
PhishTank_1=\begin{cases}
0\ \ \ \text{if is not in PhishTank DB}\\
5\ \ \ \text{if is in PhishTank DB}
\end{cases}
$$
$$
\mathscr m=malicious
$$
$$
\mathscr s=suspicious
$$
$$
\mathscr h=harmless
$$
$$
\text{las1} = \begin{cases}
\left(100 - \left| (m + s) \cdot 1.35 - h \right| \cdot 0.3 \right) \cdot 0.35
\\ \text{if }\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (m + s) > 5,
\\\left(100 - \left| (m + s) \cdot 1.35 - h \right| \cdot 0.3 \right) \cdot 0.35
\end{cases}
$$
$$
rp1 = (100 - \text{reputation} \cdot 0.2) \cdot 0.1
$$
$$
time1 = \text{current_time_past(ssl)} \cdot 0.1
$$
$$
\text{vote1} = \left(1 \text{ if } ['total\_votes']['harmless'] < ['total\_votes']['malicious'] \text{ else } 0\right) \cdot 10
$$
$$
ph1 = \text{phish} \cdot 0.05
$$
$$
pd1 = \left(ID \cdot 20 + Bday \cdot 10 + TEL \cdot 15 + Email \cdot 15 + \cdot 10 + add \cdot 20 +Psw \cdot 15 \right) \cdot 0.15
$$
$$
\text{cal_one} = (\text{las1} + \text{rp1} + \text{time1} + \text{vote1} + \text{ph1} + \text{pc1} + \text{pd1} + \text{dc1})
$$
$$
pc1 = \frac{\text{PwnCount}}{10000} \cdot 0.05 \quad (\text{upperbound } 10000)
$$
$$
dc1 = (10 \cdot \text{dataclasses}) \cdot 0.1 \quad (\text{upperbound } 10)
$$
$$
Time_1 = \begin{cases}
0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \ expired\ days\leq0\\
\frac{expired\ days}{365} \cdot10\ \ \ \ if\ \ 0<expired\ days\leq365\\
10\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if\ \ expired\ days>365
\end{cases}
$$
---
方案二:
- data['last_analysis_stats']
- "malicious": m * 7 * 40%
- "suspicious": s * 3 * 20%
$$
LastAnalysisStats_2 = malicious \cdot 7 \cdot 0.4 + suspicious \cdot 3 \cdot 0.2
$$
- data['registrar']
- skip
- data['reputation']: (100-n * 5%)
- 聲譽最高 100, 超過就 0 分
$$
Reputation_2 = \begin{cases}
(100-reputation)\cdot 0.05\ \ \text{if}\ \ reputation<100\\
0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if}\ \ reputation\geq100\\
\end{cases}
$$
- data['last_https_certificate']["validity"]
- 今天 - 到期日
- 負數:0 分
- (已經過期天數/365) * 10
- 若已經過期天數 >= 365,此項目滿分
$$
expired\ days = today's\ date - expiry\ date\\
Time_2 = \begin{cases}
0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if}\ \ expired\ days\leq0\\
\frac{expired\ days}{365} \cdot10\ \ \ \ \text{if}\ \ 0<expired\ days\leq365\\
10\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if}\ \ expired\ days>365
\end{cases}
$$
- data["total_votes"]
- "malicious": (m/(h+m) * 50) * 5%
$$
TotalVote_2=\frac{malicious}{harmless+malicious}\cdot50\cdot0.05
$$
- phishtank
- 有沒有在釣魚網站資料庫
- true:5%
- false:0
$$
PhishTank_2=\begin{cases}
0\ \ \ \text{if is not in PhishTank DB}\\
5\ \ \ \text{if is in PhishTank DB}
\end{cases}
$$
- hibp
- (P + D 的分數) * 5%
- PwnCount 50%
- (洩露數量/10000) * 50%
- 上限:10000
- 若達上限,此項目滿分:50
- DataClasses 50%
- 洩露資料種類的數量 * 10
- 若種類的數量超過 5 種,此項目滿分:50
$$
PwnCount_2 = \begin{cases}
\frac{PwnCount}{10000} \cdot50\ \ \ \ \text{if}\ \ PwnCount\leq10000\\
50\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if}\ \ PwnCount>10000
\end{cases}\\
DataClasses_2 = \begin{cases}
Data\ Classes\cdot10\ \ \ \ \text{if}\ \ Data\ Classes\leq5\\
50\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \text{if}\ \ Data\ Classes>5
\end{cases}
\\HIBP_2=(PwnCount_2+DataClasses_2)\cdot0.05
$$
- 個資數量 10%
- 有就 + 該項分數,總分 * 10%
- 姓名:5
- 身分證字號:30
- 出生年月日:5
- 手機:10
- email:10
- 地址:25
- 帳號密碼: 15
$$
PersonalData_2=(Name\cdot5+ID\cdot30+Birth\cdot5+Phone\cdot10+Email\cdot10+Address\cdot25+AccPwd\cdot15)
$$
$$
RiskIndex_2=LastAnalysisStats_2+Reputation_2+Time_2+TotalVote_2+PhishTank_2+HIBP_2+PersonalData_2
$$
範例計算:
```
{
"last_analysis_stats":{
"harmless":56,
"malicious":10,
"suspicious":0,
"undetected":22,
"timeout":0
},
"registrar":"Tucows Domains Inc.",
"reputation":40,
"last_https_certificate":{
"not_after":"2023-06-25 11:26:39",
"not_before":"2023-03-27 11:26:40"
},
"total_votes": {
"harmless": 0
"malicious":0
}
}
// 假設有在釣魚網站資料庫
// 洩漏次數為 100 次
```
>
## 參考 / 相關資料
- Chrome Extension 相關資源
- [技術手冊](https://developer.chrome.com/docs/extensions/mv3/getstarted/)
- [範本](https://github.com/GoogleChrome/chrome-extensions-samples/tree/main)
- [Have I Been Pwned: Pwned websites](https://haveibeenpwned.com/PwnedWebsites)
- 有 API
- 只能檢查該網站是否有密碼外洩
- [VirusTotal](https://www.virustotal.com/gui/home/url)
- 有 API([免費使用有限制](https://developers.virustotal.com/reference/public-vs-premium-api))
- [Google 資訊公開報告](https://transparencyreport.google.com/safe-browsing/search)
- 只能查詢網址的安全狀態,會寫出可能有什麼問題
- 但這種通常在使用者點進去前 Google 就會擋了(?
- [12 款免費網站安全檢測器:掃描漏洞,避免受騙](https://www.webhostingsecretrevealed.net/zh-TW/blog/web-tools/safety/)
- [OWASP ASVS 4.0.3](https://github.com/OWASP/ASVS/tree/v4.0.3/4.0/en)
- [可能可以參考的標準](https://hackmd.io/@kiri487/SJEELN1ih)
## 詐騙網站們
- https://satoshidisk.com/pay/CJ1ql4
- VT: Malware
- http://nanocreddavipl.webcindario.com/
- Google
- VT: Phishing
- https://do.not.click.on.this.link.instantrevert.net/XUVdneldrVTBTMkpqZEROb1VXbFdjbGRTVWxrNGFHMWxVVWRWT1haWFRuaE9SR1l4U1VwUU5uaEVRM05MZEhRMmVrMDVVbFJ1VjA0NUszUkJUMUU1VnpZemQyd3ZXbXN4VW14WlpqTkVNMVJKUldwd2JVSm5jRGhzUjNSdU5rbGxSMVpTV2xkbWMwaFlWMDFMVDNOVGFXdHFSekp5ZEdsS2VFWTVkbmd5VmxsT2JtUjFZVVpFVERkNVQwaGpVbmhsZW1RelNHVTRiMnROTURCTGRGSnhObFU0UjNaSVdWbEVUSHBZU0N0WmQwazVlVFpaYURZdlRWVklWR056U2tWVExTMU5OV2hzTDNCaFVYcDBlWGgzYldaemVscHJWM1JSUFQwPS0tZGI3MDEzYzc5NDFhNjJjYzcyNzUyMGFjM2Y5ZGIzMjQyNjQxYzA1MA==?cid=1658321260
- 釣魚網站
- VT: Phishing
- https://pcsx4.com/
- VT: Malicious
- http://www.rcscuola.it/ufficio/adredir.asp?url=https://goo.su/jTBQqzM?10021626YVRTU4W97KHN31123755
- VT: Phishing
- https://it-support.care/render-template/?csu=gYatHnEn&status_id=n%E2%80%8B
- VT: Phishing, Malware
- https://gmail.net-login.com/XVjJVNFUyUmtOSGh1WmtGNmVFcG9kMXBCT1N0WlpXaE5SbVI0UTJKMFQzZERMMUpSTVZCQlJVNUNjbVJXZEhacFQwcGlhbFJSY0c0ek1VRjJjRzF3T1ZCM2NTdGFZVmRWY3lzeU9XVjBWR2xOTUZORmFXRjZkbEo2VFdGMVpIUlJOekZyZVhwRE0zRktjVFJ2VGxKcmJrTXhOemM1ZURaMVpTdDZhVEJQWkdsTVVuWTBWbFpDYUdWaFdWUmtPV1pYVW5SRFRGRnBlWElyVVZaWVJFNUZaWFZxT1VkbE4xaFliRTlUWkRGWGFFbFdUbWRrVEhrellrVktMMEZvVFhSeWVHWkVlbVFyV1ZCMFIwNVFkRlJ5Vms1bWJrRndRVDA5TFMxb1pXcEJiMjV6VlRad2NIZEtObEpNTkRsUlpsRlJQVDA9LS0xMmQ5N2EwNzkyZmY4ZmM2ZDEzOTYwYjZmNGU3ZTcxMGQyYzliOWQ0?cid=1657841516
- 模擬釣魚
- https://kn0wbe4.compromisedblog.com/XVkU1SFUzWnNTRXBPVUVoRE1WSlphMXBPYzBOd2VFVlFZMmhSVGs1TFpEWlRRM052ZVZFM2IyeGtka0ZXTUVkV1EzaG9jbVUzTUVoVVFqRk1UMVZoZEVRNEt5OUpRVWhHY0cxSU1VbFVVM1JFVnpaS2NHWjJhWEZNT0dnMGRXMXlaVEUxYmtWaVoxSkdjbE51VHpSNEx6SXhkVFl5TWpSaE5uWmFZekpMVkZWb1YzSkllVlpqVFZOWGJtMVRXWFIzVkVWeFF6bFZaM2xNTkdNNE1ETkRWbFpTUTFVM1NFbEpWa3huY2twa1IzZGtWRGRSVGpWeGF6QllkRzA1U1VKaUxTMVZaREJIYldKUFFqSnZZeXN3ZEdkNVpUZFRXRmhSUFQwPS0tZDM2MzA4ZjkyZjEwZTljMTgzMDAwNWE5NmQ5Y2MyMzVmNGFiYzNiMA==?cid=1656965967
- 模擬釣魚
- https://33.xn--711-ng0f271c5h4cvcb.co/
- 詐騙
- 假 7-11 客服
- https://77.xn--shopee-gp7i3773a94xazsb.online/
- 詐騙
- 假蝦皮客服
- https://cmebit.cc/
- VT: Malicious
- http://pilosaleltd.com/
- VT: Malicious, Phishing
- https://omitages.com/
- VT: Malicious, Malware
- https://mbekgac.xyz/m
- VT: Phishing
---
## 其他想法
### 需自行收集情資的釣魚網站之檢查方式
- 檢查網站憑證
- 聯絡方式、資訊不明
- 沒有可靠的聯繫方式
- 不知道該網站是哪個單位的
- 模仿知名網站的詐騙網站
- 用網站內的資訊去找原版網站,比對域名
- 與知名網站域名相似的釣魚網站
- 分析網址相似性?
- 網址多為亂碼,很醜
- 網頁設計不完全,充斥著客戶的五星好評 數字浮誇
- 大量折扣等
- 文句不通順
- 內容可能是機翻
- 用字錯誤
- Domain 註冊日期很新
- 催促使用者行為
- 跟你講你中毒/中獎了,要你趕快點連結/按鈕
- 跟你要一些不必要的權限
- 攝影機/麥克風
- 奇怪的彈出視窗,誘使使用者點擊
- 至少會有一個欄位要你填資料
- 網站重定向(Redirects)
- 檢查是否有不正常的重定向行為,尤其是針對敏感頁面的重定向。
- 常見釣魚詞彙
- 掃描網站內容是否包含常見的釣魚詞彙,例如"緊急"、"驗證"、"限時優惠" 等。
:::info
- [檢查免洗網站 By ChatGPT](https://chat.openai.com/share/530cc1d4-7832-433e-8353-ca7f11d73e25)
即使不使用機器學習,還是有一些可行的方法來初步判斷網站是否可能是詐騙網站。這些方法主要依賴於人工的判斷和網路安全知識。以下是一些可行的方法:
- 域名分析
檢查網站的域名是否與已知的知名品牌或公司相關。詐騙網站可能會使用類似的域名來混淆使用者。要特別注意拼寫錯誤或使用特殊字符的情況。
- 查證公司資訊
試著尋找關於該網站的公司資訊,包括公司名稱、地址、聯絡電話等。如果找不到明確的公司信息,這可能是個警示信號。
- 搜尋網站評價
在網路上搜尋該網站的評價和評論。如果其他用戶曾經遇到過問題或報告過詐騙行為,這也是個警示信號。
- 網站安全憑證
檢查網站是否有正確的 SSL/TLS 安全憑證。這可以在瀏覽器的網址欄位中查看,合法的網站應該有 "https://" 的前綴,並顯示綠色的鎖形圖示。
- 網站設計和內容
觀察網站的設計和內容是否專業,是否有語法或拼寫錯誤。詐騙網站通常會使用低品質的內容和圖片。
- 支付方式
檢查網站提供的支付方式是否可靠。若只接受虛擬貨幣或匿名轉帳,而不提供信用卡等可以追蹤的方式,這是個潛在的風險。
- 連結的真實性
如果網站上提供了其他網站的連結,試著點擊這些連結,看看它們是否真的連到相關的網站。
- 內容翻譯
對於使用其他語言的網站,特別是亞洲語言的網站,留意其英文翻譯品質。詐騙網站有時會使用機器翻譯,而造成語意混亂。
請記住,這些方法只是用來作為初步判斷網站可信度的手段。如果你對網站仍有懷疑,最好避免進行任何敏感操作,並儘快聯繫相關當局或網站的官方來查證網站的真實性。避免成為詐騙的受害者是最重要的事情。
:::