Homograph / Homoglyph Attacks in Phishing

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๊ฐœ์š”

ํ•˜๋ชจ๊ทธ๋ž˜ํ”„(๋˜๋Š” ํ˜ธ๋ชจ๊ธ€๋ฆฌํ”„) ๊ณต๊ฒฉ์€ ๋งŽ์€ ๋น„๋ผํ‹ด ์Šคํฌ๋ฆฝํŠธ์˜ ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ๊ฐ€ ASCII ๋ฌธ์ž์™€ ์‹œ๊ฐ์ ์œผ๋กœ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•…์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ผํ‹ด ๋ฌธ์ž๋ฅผ ๊ทธ๋“ค์˜ ์œ ์‚ฌํ•œ ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ธ๊ฐ„์˜ ๋ˆˆ์—๋Š” ํ•ฉ๋ฒ•์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ํƒ์ง€๋ฅผ ์šฐํšŒํ•˜๋Š” ํ‘œ์‹œ ์ด๋ฆ„, ์ฃผ์ œ ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ.
  • ํ”ผํ•ด์ž๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ฒŒ ๋งŒ๋“œ๋Š” ๋„๋ฉ”์ธ, ์„œ๋ธŒ ๋„๋ฉ”์ธ ๋˜๋Š” URL ๊ฒฝ๋กœ.

๋ชจ๋“  ๊ธ€๋ฆฌํ”„๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ์ฝ”๋“œ ํฌ์ธํŠธ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹๋ณ„๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ผ ๋Œ€์ฒด ๋ฌธ์ž๊ฐ€ ์ˆœ์ง„ํ•œ ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ๋ฌด๋„ˆ๋œจ๋ฆฌ๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: "ฮ ฮฑypal.com" vs. "Paypal.com").

์ „ํ˜•์ ์ธ ํ”ผ์‹ฑ ์›Œํฌํ”Œ๋กœ์šฐ

  1. ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ ์ž‘์„ฑ โ€“ impersonated ๋ธŒ๋žœ๋“œ / ํ‚ค์›Œ๋“œ์˜ ํŠน์ • ๋ผํ‹ด ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ(๊ทธ๋ฆฌ์Šค์–ด, ํ‚ค๋ฆด ๋ฌธ์ž, ์•„๋ฅด๋ฉ”๋‹ˆ์•„์–ด, ์ฒด๋กœํ‚ค์–ด ๋“ฑ)์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  2. ์ง€์› ์ธํ”„๋ผ ๋“ฑ๋ก โ€“ ์„ ํƒ์ ์œผ๋กœ ํ˜ธ๋ชจ๊ธ€๋ฆฌํ”„ ๋„๋ฉ”์ธ์„ ๋“ฑ๋กํ•˜๊ณ  TLS ์ธ์ฆ์„œ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ CA๋Š” ์‹œ๊ฐ์  ์œ ์‚ฌ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
  3. ์ด๋ฉ”์ผ / SMS ์ „์†ก โ€“ ๋ฉ”์‹œ์ง€์—๋Š” ๋‹ค์Œ ์œ„์น˜ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์— ํ˜ธ๋ชจ๊ธ€๋ฆฌํ”„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:
  • ๋ฐœ์‹ ์ž ํ‘œ์‹œ ์ด๋ฆ„ (์˜ˆ: ฮ—ะตlั€dะตั•k)
  • ์ œ๋ชฉ ์ค„ (Urgะตnt ะctั–on Rะตquั–rะตd)
  • ํ•˜์ดํผ๋งํฌ ํ…์ŠคํŠธ ๋˜๋Š” ์™„์ „ํ•œ ๋„๋ฉ”์ธ ์ด๋ฆ„
  1. ๋ฆฌ๋””๋ ‰์…˜ ์ฒด์ธ โ€“ ํ”ผํ•ด์ž๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์ˆ˜์ง‘ํ•˜๊ฑฐ๋‚˜ ์•…์„ฑ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์•…์„ฑ ํ˜ธ์ŠคํŠธ์— ๋„์ฐฉํ•˜๊ธฐ ์ „์— ๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋ฌดํ•ดํ•œ ์›น์‚ฌ์ดํŠธ๋‚˜ URL ๋‹จ์ถ•๊ธฐ๋ฅผ ํ†ตํ•ด ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์•…์šฉ๋˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ”์œ„

์Šคํฌ๋ฆฝํŠธ๋ฒ”์œ„์˜ˆ์‹œ ๊ธ€๋ฆฌํ”„์œ ์‚ฌ ๋ฌธ์ž
๊ทธ๋ฆฌ์Šค์–ดU+0370-03FFฮ— (U+0397)๋ผํ‹ด H
๊ทธ๋ฆฌ์Šค์–ดU+0370-03FFฯ (U+03C1)๋ผํ‹ด p
ํ‚ค๋ฆด ๋ฌธ์žU+0400-04FFะฐ (U+0430)๋ผํ‹ด a
ํ‚ค๋ฆด ๋ฌธ์žU+0400-04FFะต (U+0435)๋ผํ‹ด e
์•„๋ฅด๋ฉ”๋‹ˆ์•„์–ดU+0530-058Fึ… (U+0585)๋ผํ‹ด o
์ฒด๋กœํ‚ค์–ดU+13A0-13FFแŽข (U+13A2)๋ผํ‹ด T

ํŒ: ์ „์ฒด ์œ ๋‹ˆ์ฝ”๋“œ ์ฐจํŠธ๋Š” unicode.org์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ์ง€ ๊ธฐ์ˆ 

1. ํ˜ผํ•ฉ ์Šคํฌ๋ฆฝํŠธ ๊ฒ€์‚ฌ

์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ง์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ”ผ์‹ฑ ์ด๋ฉ”์ผ์€ ์—ฌ๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌธ์ž๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ํœด๋ฆฌ์Šคํ‹ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ๊ฒ€์‚ฌํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฝ”๋“œ ํฌ์ธํŠธ๋ฅผ ํ•ด๋‹น ์œ ๋‹ˆ์ฝ”๋“œ ๋ธ”๋ก์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•˜๋‚˜ ์ด์ƒ์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๋น„๋ผํ‹ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ณณ(ํ‘œ์‹œ ์ด๋ฆ„, ๋„๋ฉ”์ธ, ์ฃผ์ œ, URL ๋“ฑ)์— ๋‚˜ํƒ€๋‚˜๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Python ๊ฐœ๋… ์ฆ๋ช…:

import unicodedata as ud
from collections import defaultdict

SUSPECT_FIELDS = {
"display_name": "ฮ—ะพmะพgraph Illusion",     # example data
"subject": "Finะฐn๊ฎฏiะฐl ีtatะตmะตnt",
"url": "https://xn--messageconnecton-2kb.blob.core.windows.net"  # punycode
}

for field, value in SUSPECT_FIELDS.items():
blocks = defaultdict(int)
for ch in value:
if ch.isascii():
blocks['Latin'] += 1
else:
name = ud.name(ch, 'UNKNOWN')
block = name.split(' ')[0]     # e.g., 'CYRILLIC'
blocks[block] += 1
if len(blocks) > 1:
print(f"[!] Mixed scripts in {field}: {dict(blocks)} -> {value}")

2. Punycode ์ •๊ทœํ™” (๋„๋ฉ”์ธ)

๊ตญ์ œํ™” ๋„๋ฉ”์ธ ์ด๋ฆ„ (IDN)์€ punycode (xn--)๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ punycode๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์™€ ์ผ์น˜์‹œํ‚ค๊ฑฐ๋‚˜ ์œ ์‚ฌ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ: Levenshtein ๊ฑฐ๋ฆฌ) ๋ฌธ์ž์—ด์ด ์ •๊ทœํ™”๋œ ํ›„.

import idna
hostname = "ฮกะฐypal.com"   # Greek Rho + Cyrillic a
puny = idna.encode(hostname).decode()
print(puny)  # xn--yl8hpyal.com

3. ๋™ํ˜• ๋ฌธ์ž ์‚ฌ์ „ / ์•Œ๊ณ ๋ฆฌ์ฆ˜

dnstwist (--homoglyph) ๋˜๋Š” urlcrazy์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ์œ ์‚ฌํ•œ ๋„๋ฉ”์ธ ๋ณ€ํ˜•์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์ „์  ์ฐจ๋‹จ / ๋ชจ๋‹ˆํ„ฐ๋ง์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฐฉ ๋ฐ ์™„ํ™”

  • ์—„๊ฒฉํ•œ DMARC/DKIM/SPF ์ •์ฑ…์„ ์‹œํ–‰ํ•˜์—ฌ ๋ฌด๋‹จ ๋„๋ฉ”์ธ์—์„œ์˜ ์Šคํ‘ธํ•‘์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • Secure Email Gateways ๋ฐ SIEM/XSOAR ํ”Œ๋ ˆ์ด๋ถ์— ์œ„์˜ ํƒ์ง€ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ‘œ์‹œ ์ด๋ฆ„ ๋„๋ฉ”์ธ โ‰  ๋ฐœ์‹ ์ž ๋„๋ฉ”์ธ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ํ”Œ๋ž˜๊ทธํ•˜๊ฑฐ๋‚˜ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ต์œก: ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ…์ŠคํŠธ๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฒ€์‚ฌ๊ธฐ์— ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๊ณ , ๋งํฌ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉฐ, URL ๋‹จ์ถ•๊ธฐ๋ฅผ ์ ˆ๋Œ€ ์‹ ๋ขฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์‹ค์ œ ์‚ฌ๋ก€

  • ํ‘œ์‹œ ์ด๋ฆ„: ะกonfidะตntiะฐl แŽขi๊ฎฏkะตt (ํ‚ค๋ฆด ๋ฌธ์ž ะก, ะต, ะฐ; ์ฒด๋กœํ‚ค แŽข; ๋ผํ‹ด ์†Œ๋ฌธ์ž ๋Œ€๋ฌธ์ž ๊ฎฏ).
  • ๋„๋ฉ”์ธ ์ฒด์ธ: bestseoservices.com โžœ municipal /templates ๋””๋ ‰ํ† ๋ฆฌ โžœ kig.skyvaulyt.ru โžœ ์ปค์Šคํ…€ OTP CAPTCHA๋กœ ๋ณดํ˜ธ๋œ ๊ฐ€์งœ Microsoft ๋กœ๊ทธ์ธ mlcorsftpsswddprotcct.approaches.it.com.
  • Spotify ์‚ฌ์นญ: ๋งํฌ๊ฐ€ redirects.ca ๋’ค์— ์ˆจ๊ฒจ์ง„ Sฯึ…tifลญ ๋ฐœ์‹ ์ž.

์ด ์ƒ˜ํ”Œ์€ Unit 42 ์—ฐ๊ตฌ(2025๋…„ 7์›”)์—์„œ ์œ ๋ž˜๋˜์—ˆ์œผ๋ฉฐ, ๋™ํ˜• ๋ฌธ์ž ๋‚จ์šฉ์ด URL ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ CAPTCHA ํšŒํ”ผ์™€ ๊ฒฐํ•ฉ๋˜์–ด ์ž๋™ ๋ถ„์„์„ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฌธํ—Œ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ