Homoglyph Detector: เครื่องมือจับอักขระลอกเลียนใน domain ก่อนโดน phishing
Homoglyph Detector ตรวจจับ Unicode confusable อักขระมองไม่เห็น และ bidi override ใน domain หรือข้อความใดก็ได้ เพื่อหยุดการโจมตีแบบ phishing และ typosquatting ก่อนที่คุณจะตกเป็นเหยื่อ
Table of Contents
อีเมลแจ้งใบแจ้งหนี้จากซัพพลายเออร์ ลิงก์รีเซ็ตรหัสผ่านจากธนาคาร หรือแจ้งเตือนความปลอดภัยจากแพลตฟอร์มที่คุณใช้งาน ทุกฉบับล้วนมาพร้อมลิงก์ที่ดูสมบูรณ์แบบ ชื่อแบรนด์ถูกต้อง สะกดถูกทุกตัวอักษร จุดอยู่ครบทุกตำแหน่ง แต่แล้วเงินกลับเข้าบัญชีผิด หรือรหัสผ่านหลุดไปอยู่ที่เซิร์ฟเวอร์ของคนอื่น เคล็ดลับของมิจฉาชีพมักไม่ใช่ typo แบบหยาบ ๆ ที่ตาเปล่าจับได้ แต่เป็นการแทนที่ด้วย Unicode ที่หน้าตาเหมือนจริงจนสายตามนุษย์แยกของจริงกับของปลอมออกจากกันไม่ได้เลย
นักวิจัยด้านความปลอดภัยเรียกอักขระพวกนี้ว่า homoglyph หรือ confusable คือ code point จากระบบการเขียนต่างกันที่แสดงผลหน้าตาเกือบเหมือนตัวอักษรที่คุณคาดหวังไว้ ตัวอย่างคลาสสิกคือซีริลลิก а (U+0430) เทียบกับละติน a (U+0061) ฝาแฝดระดับพิกเซลที่สร้าง domain ที่แตกต่างกันสนิท สายตาเปล่าจับไม่ได้ และเบราว์เซอร์ก็ไม่เตือนคุณ สิ่งที่คุณต้องการคือเครื่องมือที่ตรวจทุกตัวอักษรให้ และนั่นคือสิ่งที่ Homoglyph Detector ทำอยู่พอดี
เพียงวางสตริงหรือ domain ใดก็ได้ลงในเครื่องมือ มันจะสแกนหาการแทนที่ด้วย homoglyph อักขระมองไม่เห็นอย่าง zero-width joiner และเทคนิค bidi override ที่บิดเบือนลำดับสิ่งที่คุณเห็น ทุกตำแหน่งที่น่าสงสัยจะถูกไฮไลต์ให้เห็นชัด และ skeleton view จะย่อข้อความเหลือรูปแบบมาตรฐานไว้เปรียบเทียบได้ในแวบเดียว บทความนี้จะพาไล่ดูวิธีใช้งาน และกลไกเบื้องหลังของการโจมตีแบบนี้ว่าทำงานกันจริงอย่างไร
ทำไมต้องใช้ Homoglyph Detector?
- จับ domain ลอกเลียนก่อนกดเข้าไป. อักขระที่ถูกสลับเพียงตัวเดียวตาเปล่ามองไม่เห็น แต่เครื่องสแกนมองเห็นได้ชัดเจน
- เปิดโปงอักขระมองไม่เห็น. zero-width joiner และอักขระซ่อนอื่น ๆ หลุดรอดจากการตรวจด้วยการก๊อปวาง และแม้แต่บางระบบ validation ได้ง่าย ๆ
- เฉลยเทคนิค bidi override. เครื่องหมาย right-to-left สามารถกลับลำดับการแสดงผลของชื่อไฟล์หรือ URL ให้อ่านไม่เหมือนของจริง
- เห็นตำแหน่งปัญหาแบบเป๊ะ ๆ. per-character highlighting ระบุตำแหน่งที่ confusable เป็นรายอักขระ ไม่ใช่แค่เตือนทั้งข้อความหมึกหนาเดียว
- เปรียบเทียบด้วย skeleton view. เครื่องมือย่อทุกอักขระเป็นรูปแบบมาตรฐาน ทำให้ข้อความลอกเลียนโผล่ออกมาให้เห็นทันที
- ทำงานในเบราว์เซอร์ล้วน ๆ. ทุกอย่างที่คุณวางลงไปไม่ถูกอัปโหลดไปที่ใด การวิเคราะห์เกิดขึ้นบนเครื่องของคุณเอง
ฟีเจอร์หลักของ Homoglyph Detector
| ฟีเจอร์ | ทำอะไรได้ |
|---|---|
| ตรวจจับ homoglyph และ confusable | ระบุอักขระที่ถูกแทนด้วยตัวลอกเลียนจากภาษาอื่น เช่น ซีริลลิก а ยืนแทนละติน a |
| ตรวจจับอักขระมองไม่เห็น | เผย zero-width joiner, zero-width space และ code point อื่น ๆ ที่ไม่แสดงผลบนหน้าจอ |
| ตรวจจับ bidi override | จับอักขระ right-to-left override ที่กลับลำดับการแสดงผลของข้อความ |
| ไฮไลต์รายอักขระ | ระบุชัดเจนว่าตำแหน่งใดในสตริงที่ confusable |
| skeleton view | ย่อทุกอักขระเป็นรูปแบบมาตรฐาน เพื่อเปรียบเทียบสตริงที่หน้าตาใกล้เคียงกันได้โดยตรง |
| ทำงานในเบราว์เซอร์ | การสแกนและไฮไลต์ทั้งหมดเกิดขึ้นในเบราว์เซอร์ของคุณ ไม่มีอะไรถูกส่งขึ้นเซิร์ฟเวอร์ |
รายละเอียดที่น่ารู้เพิ่มเติม:
- เครื่องมือรับสตริงที่วางได้ทุกประเภท ไม่ว่าจะเป็น domain, ที่อยู่อีเมล, ชื่อผู้ใช้, ชื่อไฟล์ หรือข้อความจากเนื้อความอีเมล
- เนื่องจากวิเคราะห์ที่เครื่องคุณเอง จึงสแกนข้อความที่อ่อนไหว เช่น hostname ภายในองค์กรหรือตัวระบุลูกค้าได้อย่างปลอดภัย
- การไฮไลต์ร่วมกับ skeleton output ให้ทั้งตำแหน่งของปัญหาและรูปแบบมาตรฐานไว้เทียบเคียง
วิธีใช้งาน Homoglyph Detector
- วาง domain หรือข้อความ. คัดลอกข้อความตรงตามที่ได้รับมา — ลิงก์จากอีเมล, domain สำหรับชำระเงิน หรือชื่อผู้ใช้ที่น่าสงสัย — แล้ววางลงในช่องป้อนข้อความ อย่าพิมพ์ใหม่ด้วยมือ เพราะคุณอาจแก้ปัญหาไปโดยไม่เคยรู้ตัวเลยว่ามันมีอยู่
- ปล่อยให้สแกนทำงาน. ทุกอักขระจะถูกวิเคราะห์ทันทีที่คุณวาง ไม่ต้องตั้งค่าอะไรเพิ่มเติม
- อ่านผลแฟลกระดับอักขระ. ทุกตำแหน่งที่ confusable จะถูกไฮไลต์ พร้อมรายละเอียดว่าอักขระตัวนั้นแท้จริงคืออะไรและมาจากสคริปต์ใด
- ส่อง skeleton view. สตริงจะถูกย่อเป็น skeleton มาตรฐาน เพื่อให้เทียบกับชื่อที่ถูกต้องที่คุณคาดหวังไว้ได้โดยตรง
- ตัดสินใจเรื่องความน่าเชื่อถือ. ผลสแกนสะอาดและ skeleton ตรงกันแปลว่าดำเนินการต่อได้ แต่ถ้ามีอักขระใดถูกแฟลก ให้หยุดและยืนยันผ่านช่องทางอื่นก่อน
กลไกเบื้องหลังการโจมตีแบบ Homoglyph Attack
อักขระหน้าตาเหมือนกันจากต่างภาษา. Unicode ถูกออกแบบมาเพื่อรองรับทุกระบบการเขียนบนโลก และความทะเยอทะยานนั้นก็มีผลข้างเคียง คือหลายภาษามีอักขระที่แสดงผลหน้าตาเกือบเหมือนตัวอักษรละติน เช่น กรีก omicron (ο) เทียบเท่าละติน o, ซีริลลิก е เทียบเท่าละติน e และตัวอักษรซีริลลิกตัวเล็กเกือบทั้งชุดทับซ้อนกับรูปทรงภาษาอังกฤษอย่างหนัก ผู้โจมตีที่จดทะเบียนชื่อที่มีอักขระลอกเลียนตัวหนึ่ง ก็เท่ากับเป็นเจ้าของชื่อที่คนอ่านเข้าใจว่าเป็นชื่อของคุณ
ตัวอย่างคลาสสิก: ซีริลลิก а. กรณีตำราเรียนคือซีริลลิก а (U+0430) เทียบกับละติน a (U+0061) ทั้งคู่แยกกันไม่ออกในขนาดหน้าจอปกติ แต่เป็นอักขระคนละตัวที่มีค่าไบนารีต่างกันสนิท domain ที่ขึ้นต้นด้วยอักษรซีริลลิกเป็น domain ตัวจริงคนละตัวกับของแท้ ที่เบราว์เซอร์และเมลไคลเอนต์จำนวนมากแสดงผลเหมือนของจริงเป๊ะ ๆ และเนื่องจาก internationalized domain names เปิดรับสคริปต์เหล่านี้ การแทนที่จึงรอดพ้นจากการจดทะเบียน การออกใบรับรอง และการส่งอีเมล โดยไม่มีสัญญาณเตือนใด ๆ ให้เห็นเลย
อักขระมองไม่เห็น. กลุ่มเทคนิคที่สองใช้อักขระที่มองไม่เห็นมากกว่าจะลอกเลียนรูปทรง zero-width joiner (U+200D) และ zero-width space (U+200B) ไม่กินพื้นที่แสดงผลแม้แต่พิกเซลเดียว คำหนึ่งคำจึงมีอักขระซ่อนอยู่ข้างในได้ ในขณะที่ยังแสดงผลออกมาสมบูรณ์แบบ ผู้โจมตีใช้มันหลบ keyword filter สร้างชื่อผู้ใช้ที่หน้าตาซ้ำกับของคุณ และทำลายการเปรียบเทียบแบบ exact-match แบบง่าย ๆ ในโค้ด
Bidi override. เทคนิคที่สามทำให้งงงวยกว่ากัน Unicode ต้องรองรับภาษาที่เขียนจากขวาไปซ้าย เช่น อาหรับและฮีบรู จึงนิยาม override character ขึ้นมา รวมถึง right-to-left override (U+202E) ที่บังคับให้ทุกอย่างหลังจากนั้นแสดงผลกลับด้าน เมื่อซ่อนอักขระตัวนี้ไว้ในชื่อไฟล์หรือ URL ข้อความจะแสดงผลออกมาในลำดับที่ไม่ตรงกับเนื้อหาจริงอีกต่อไป
Skeleton algorithm จาก UTS #39. Unicode Consortium ระบุปัญหานี้ไว้ตรงจุดผ่านสเปก UTS #39 ซึ่งนิยาม confusable detection และ skeleton algorithm สำหรับย่อทุกอักขระ — ทั้ง confusable, อักขระมองไม่เห็น และเครื่องหมายจัดรูปแบบ — ลงเป็น skeleton มาตรฐาน ถ้าสองสตริงมี skeleton เดียวกัน คนอ่านจะแยกความต่างออกได้อย่างน่าเชื่อถือไม่ได้เลย Homoglyph Detector ใช้แนวคิดเดียวกันนี้ skeleton view ย่อข้อความเป็นรูปแบบมาตรฐาน และเมื่อเทียบแล้วไม่ตรงกับชื่อจริง แปลว่าสตริงนั้นไม่ใช่สิ่งที่มันปรากฏตัว
ตัวอย่างการใช้งานจริง
ตรวจสอบ domain ของสปอนเซอร์และคู่ค้าก่อนโอนเงิน
เมื่อสปอนเซอร์หรือซัพพลายเออร์ส่งอีเมลแจ้งเลขบัญชีใหม่หรือ URL ของ payment portal แห่งใหม่ ราคาของความผิดพลาดมักวัดกันเป็นหลักห้าถึงหกหลัก วาง domain จากข้อความนั้นลงเครื่องมือก่อนแตะปุ่มโอนทุกครั้ง ผลสแกนสะอาดไม่ใช่สิทธิ์อนุญาตในตัวเอง — ควรโทรยืนยันผ่านช่องทางอื่นควบคู่กันไป — แต่ถ้ามีอักขระใดถูกแฟลกแม้เพียงตัวเดียว ควรหยุดบทสนทนาไว้ทันที
ตรวจสอบชื่อผู้ใช้ (username) บนแพลตฟอร์มของคุณ
ถ้าคุณดูแลบริการที่ให้ผู้ใช้จดทะเบียนชื่อได้ การลอกชื่อด้วย homoglyph คือช่องทางโจมตีที่จริงจังมาก ผู้โจมตีจดชื่อที่หน้าตาเหมือน "admin" โดยใช้อักษรซีริลลิกเป็นตัวแรก แล้วแอบอ้างเป็นทีมงานของคุณได้ สุ่มตรวจรายชื่อใหม่เป็นระยะด้วยเครื่องมือนี้ และปฏิเสธ username ใด ๆ ที่ skeleton ตรงกับบัญชีสิทธิพิเศษที่มีอยู่แล้ว
ตรวจสอบ display name ในอีเมล
display name เป็นข้อความอิสระและมักไม่ผ่านการตรวจสอบ ชื่อหนึ่งชื่อจึงแฝง zero-width character หรือตัวอักษรที่ถูกสลับไว้ได้ ในขณะที่ยังดูสมบูรณ์แบบในกล่องจดหมาย เมื่ออีเมลอ้างว่ามาจากฝ่าย IT หรือกรรมการผู้จัดการ ลองวาง display name ลงเครื่องมือและดูว่าสิ่งที่คุณเห็นตรงกับอักขระที่ซ่อนอยู่เบื้องหลังจริงหรือไม่
เช็ก typosquatting ที่มุ่งเป้าแบรนด์ของคุณ
เมื่อคุณเฝ้าระวัง domain ที่มานั่งบนแบรนด์ของคุณ การแยก typo ธรรมดาออกจากสำเนา homoglyph เป็นเรื่องสำคัญ เพราะวิธีรับมือต่างกัน typo มักถูกจดไว้เพื่อขายโฆษณา แต่การจดทะเบียนแบบ homoglyph เกือบทุกครั้งบ่งชี้ถึงการล่าข้อมูลรับรอง (credential harvesting) สแกน domain ทุกตัวที่พบผ่านเครื่องมือนี้ก่อน เพื่อจัดหมวดหมู่ให้ถูกทาง
แนวปฏิบัติที่แนะนำ
- ยืนยัน domain สำหรับการเงินนอกช่องทางเดิมเสมอ. อย่าถือว่าลิงก์ที่ดูสะอาดคือการอนุมัติให้เดินเงิน ยืนยันการเปลี่ยนบัญชีทางโทรศัพท์ด้วยเบอร์ที่คุณมีอยู่แล้ว
- ไม่เชื่อ display name เพียงอย่างเดียว. ตัดสินอีเมลจากที่อยู่ผู้ส่งจริง และสแกนที่อยู่นั้นด้วยก่อนตอบกลับ
- จดทะเบียน domain ที่ confusable ไว้ป้องกันแบรนด์. ค่าจดทะเบียนเชิงป้องกันถูกกว่าค่าจัดการเหตุการณ์เพียงหนึ่งครั้งเสมอ
- ใช้คู่กับการเช็ก punycode. internationalized domains เดินทางในเครือข่ายในรูป punycode การแปลงกลับจะเผยสิ่งที่ซ่อนอยู่หลัง label น่าสงสัย
- สแกนก่อนเชื่อ identifier ที่วางลงไปทุกชนิด. ทั้ง username, webhook และ API hostname สมควรได้รับการเช็กสิบวินาทีเท่ากันหมด
- ทำให้เป็นกิจวัตร. การเช็ก homoglyph จะได้ผลก็ต่อเมื่อทำทุกครั้ง ไม่ใช่ทำเฉพาะหลังเจอเหตุการณ์
คราวหน้าที่ลิงก์, domain หรือชื่อผู้ใช้ไหนดูสมบูรณ์แบบเกินไปเล็กน้อย ให้ Homoglyph Detector ขยับตาแทนคุณ วางข้อความ อ่านไฮไลต์ เทียบ skeleton แล้วตัดสินใจจากหลักฐานแทนการเดาด้วยสายตา เครื่องมือนี้ฟรี ทำงานในเบราว์เซอร์ และใช้เวลาน้อยกว่าที่มิจฉาชีพใช้เขียนอีเมลหลอกลวงฉบับหนึ่งอีกด้วย
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- Punycode Converter — ถอดรหัส internationalized domain name เพื่อดู ASCII ดิบ ๆ ที่ซ่อนอยู่ข้างหลัง
- Password Strength Checker — ประเมินความแข็งแรงของรหัสผ่านที่หน้า phishing ต้องการล่า
- URL Encoder — เข้ารหัสและตรวจสอบ URL อย่างปลอดภัยก่อนแชร์หรือคลิก
ตรวจสอบก่อนคลิกทุกครั้ง ขอให้ทุกคนปลอดภัยจากภัยออนไลน์นะ!
คำถามที่พบบ่อย
ถ: homoglyph คืออะไรในภาษาง่าย ๆ? ตอบ: คืออักขระจากภาษาหนึ่งที่หน้าตาเกือบเหมือนอักขระจากอีกภาษาหนึ่ง เช่น ซีริลลิก а วางเคียงข้างละติน a เป็น code point คนละตัวแต่หน้าตาเหมือนกันเป๊ะ จึงเป็นช่องโหว่ที่สมบูรณ์แบบสำหรับการทำ phishing
ถ: domain ที่มี homoglyph ยังขอใบรับรอง HTTPS ที่ถูกต้องได้หรือไม่? ตอบ: ได้ เพราะ certificate authority ออกใบรับรองให้กับ domain ใดก็ตามที่ผู้สมัครเป็นเจ้าของ และ domain ลอกเลียนก็เป็น domain จริง สัญลักษณ์แม่กุญแจพิสูจน์แค่การเข้ารหัส ไม่ได้พิสูจน์ตัวตน
ถ: อักขระมองไม่เห็นเป็นอันตรายจริงหรือแค่เรื่องความสวยงาม? ตอบ: เป็นอันตรายจริง zero-width joiner ที่แทรกในชื่อผู้ใช้ทำให้ผู้โจมตีสร้างบัญชีที่หน้าตาซ้ำกับบัญชีของคุณได้ ส่วนอักขระซ่อนในใบแจ้งหนี้หรือ URL สามารถหลอก filter ที่จับคู่ข้อความที่มองเห็นได้อย่างเงียบ ๆ
ถ: Homoglyph Detector ส่งข้อความของฉันขึ้นเซิร์ฟเวอร์ไหนหรือเปล่า? ตอบ: ไม่ การวิเคราะห์ทำงานทั้งหมดในเบราว์เซอร์ของคุณ จึงสแกนข้อความที่อ่อนไหว เช่น hostname ภายในองค์กร ข้อมูลลูกค้า หรือชื่อผลิตภัณฑ์ที่ยังไม่เปิดเผยได้อย่างปลอดภัย