你眼前的兩段文字 binance.com 與 binаnce.com,能看出區別嗎?後一個的 а 是西裡爾字母,與拉丁字母 a 幾乎完全相同。這就是同形異碼(Homograph)攻擊——肉眼騙術中最難防的一種。本文教你識別 + 防禦。日常先固定從校驗過的入口進 幣安官網,移動端 幣安官方APP,iOS 沒裝 App 看 iOS 安裝教程。
一、同形異碼原理
國際化域名(IDN)允許域名包含非 ASCII 字元。本意是讓中文/日文/俄文使用者用本地語言註冊域名。問題是:很多字元在視覺上與英文字母完全一致,但在編碼上是不同字元。
域名層面,瀏覽器把這些字元轉成 Punycode:
binаnce.com(包含西里爾 а)實際是xn--binnce-b8a.comgoogĺe.com(帶重音 ĺ)實際是xn--googe-x9a.com
但預設情況下瀏覽器顯示 Unicode 形式,於是使用者看到的依然是 binаnce.com,與 binance.com 完全一樣。
二、最容易被替換的拉丁字母
下表是同形異碼攻擊中最常用的替換對照:
| 原字元 | 視覺相似的字元 | 編碼字符集 |
|---|---|---|
| a | а / α | 西里爾 / 希臘 |
| e | е / ё | 西里爾 |
| o | о / ο / 0 | 西里爾 / 希臘 / 數字 |
| i | і / ί / l / 1 | 西里爾 / 希臘 / 拉丁L / 數字1 |
| c | с / ϲ | 西里爾 / 希臘 |
| p | р / ρ | 西里爾 / 希臘 |
| n | η / n | 希臘 / 全形 |
| b | Ь / b | 西里爾 / 全形 |
幣安域名中的 b/i/n/a/n/c/e 每一個字母都有可能被替換。組合下來釣魚變種數量驚人。
三、識破同形異碼的兩種方法
方法 A:瀏覽器開啟 Punycode 顯示
Firefox 是最穩的。在位址列輸入 about:config,搜尋 network.IDN_show_punycode,把它改成 true。設定後所有非 ASCII 域名會以 xn-- 形式顯示,肉眼立刻能看出異常。
Chrome 沒有原生設定,但當域名同時包含拉丁與非拉丁字元時會自動以 Punycode 顯示。完全用非拉丁字元的"純西里爾域"則會原樣顯示,需要擴充套件輔助。
方法 B:複製貼上到文字編輯器
把位址列的 URL 複製貼上到記事本或程式碼編輯器(VS Code 推薦),換一種字型顯示。VS Code 的等寬字型會讓 а 與 a 出現微小差異。或者直接用十六進位制檢視外掛,每個字元的 Unicode 碼點一目瞭然。
方法 C:肉眼輔助工具
把滑鼠放在域名上仔細看每個字母:
- a 的圓形是否標準
- e 的橫線位置是否正常
- o 是否標準的圓
- i 上的點是否在中間
任何一個字母看起來略有偏差,就警惕。
四、瀏覽器層面的額外加固
Chrome 擴充套件
- EnGuard(PhishFort):自動檢測同形異碼並警告
- Punycode Alert:在位址列插入 Punycode 提示
系統層面
- 在 hosts 檔案裡把已知釣魚變種黑洞掉:
0.0.0.0 xn--binnce-b8a.com - 用 Pi-hole 這類家庭級 DNS 閘道器訂閱反釣魚黑名單
密碼管理器
1Password、Bitwarden 在域名嚴格匹配時才彈出自動填充。如果你開啟的是同形異碼域,密碼管理器不會響應——這是天然的"識別報警"。
五、移動端的特殊性
手機位址列短,字元顯示更小,同形異碼更難看出。建議:
- 完全用 APP,不在瀏覽器輸入域名
- 瀏覽器開啟"顯示完整 URL"
- 收到連結時長按預覽目標 URL,不要直接點
iOS Safari 長按連結彈出預覽,可以看完整 URL;安卓 Chrome 長按同樣可預覽。
六、當你已經訪問了同形異碼域
按以下順序處置:
- 立即截圖位址列,複製完整 URL 留底
- 關閉頁面,清瀏覽器該域 Cookie
- 檢查是否在該頁輸入過任何資訊——若是,按賬號被盜應急流程處置
- 在乾淨瀏覽器中開啟 binance.com 檢查賬號狀態
- 把這個 URL 透過幣安幫助中心舉報渠道提交
FAQ
Q1:為什麼瀏覽器要預設顯示 Unicode 不顯示 Punycode? 為了非英語國家使用者的便利。如果俄國使用者的域名總是顯示 xn--xxxx 形式,體驗非常差。所以預設顯示 Unicode,但混合字串會自動 Punycode。
Q2:開啟 Firefox 強制 Punycode 後非英語網站會受影響嗎? 正常英語網站完全不變。中文、俄文等域名會顯示成 xn-- 形式。如果你不訪問這些域名,完全無影響。
Q3:HTTPS 證書是不是能識別同形異碼? 能。證書的 Subject 欄位是真實編碼的字串,與肉眼看到的會有差異。仔細看證書細節就能識破。
Q4:APP 內會被同形異碼攻擊嗎? APP 不依賴域名輸入,所有連線走程式碼內建的 API endpoint。同形異碼對 APP 使用者基本無效。