105 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Attacchi Homograph / Homoglyph nel Phishing
{{#include ../../banners/hacktricks-training.md}}
## Panoramica
Un attacco homograph (noto anche come homoglyph) sfrutta il fatto che molti **punti di codice Unicode di script non latini sono visivamente identici o estremamente simili ai caratteri ASCII**. Sostituendo uno o più caratteri latini con i loro omologhi visivamente simili, un attaccante può creare:
* Nomi di visualizzazione, soggetti o corpi di messaggi che sembrano legittimi all'occhio umano ma eludono le rilevazioni basate su parole chiave.
* Domini, sottodomini o percorsi URL che ingannano le vittime facendole credere di visitare un sito fidato.
Poiché ogni glifo è identificato internamente dal suo **punto di codice Unicode**, un singolo carattere sostituito è sufficiente per sconfiggere confronti di stringhe naïve (ad es., `"Παypal.com"` vs. `"Paypal.com"`).
## Flusso di Lavoro Tipico del Phishing
1. **Creare il contenuto del messaggio** Sostituire lettere latine specifiche nel marchio / parola chiave impersonata con caratteri visivamente indistinguibili di un altro script (greco, cirillico, armeno, cherokee, ecc.).
2. **Registrare l'infrastruttura di supporto** Registrare facoltativamente un dominio homoglyph e ottenere un certificato TLS (la maggior parte delle CA non esegue controlli di somiglianza visiva).
3. **Inviare email / SMS** Il messaggio contiene homoglyph in uno o più dei seguenti luoghi:
* Nome visualizzato del mittente (ad es., `Ηеlрdеѕk`)
* Oggetto (`Urgеnt Аctіon Rеquіrеd`)
* Testo del collegamento ipertestuale o nome di dominio completamente qualificato
4. **Catena di reindirizzamento** La vittima viene reindirizzata attraverso siti web apparentemente benigni o accorciatori di URL prima di atterrare sull'host malevolo che raccoglie credenziali / distribuisce malware.
## Intervalli Unicode Comunemente Sfruttati
| Script | Intervallo | Glifo di esempio | Sembra |
|--------|-------|---------------|------------|
| Greco | U+0370-03FF | `Η` (U+0397) | Latino `H` |
| Greco | U+0370-03FF | `ρ` (U+03C1) | Latino `p` |
| Cirillico | U+0400-04FF | `а` (U+0430) | Latino `a` |
| Cirillico | U+0400-04FF | `е` (U+0435) | Latino `e` |
| Armeno | U+0530-058F | `օ` (U+0585) | Latino `o` |
| Cherokee | U+13A0-13FF | `` (U+13A2) | Latino `T` |
> Suggerimento: Le tabelle Unicode complete sono disponibili su [unicode.org](https://home.unicode.org/).
## Tecniche di Rilevamento
### 1. Ispezione di Script Misti
Le email di phishing destinate a un'organizzazione di lingua inglese dovrebbero raramente mescolare caratteri di più script. Un'euristica semplice ma efficace è:
1. Iterare ogni carattere della stringa ispezionata.
2. Mappare il punto di codice al suo blocco Unicode.
3. Sollevare un avviso se è presente più di uno script **o** se appaiono script non latini dove non sono attesi (nome visualizzato, dominio, soggetto, URL, ecc.).
Prova di concetto in Python:
```python
import unicodedata as ud
from collections import defaultdict
SUSPECT_FIELDS = {
"display_name": "Ηоmоgraph Illusion", # example data
"subject": "Finаniа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. Normalizzazione Punycode (Domini)
I nomi di dominio internazionalizzati (IDN) sono codificati con **punycode** (`xn--`). Convertire ogni nome host in punycode e poi tornare a Unicode consente di confrontare con una lista bianca o eseguire controlli di somiglianza (ad es., distanza di Levenshtein) **dopo** che la stringa è stata normalizzata.
```python
import idna
hostname = "Ρаypal.com" # Greek Rho + Cyrillic a
puny = idna.encode(hostname).decode()
print(puny) # xn--yl8hpyal.com
```
### 3. Dizionari / Algoritmi di Omoglyph
Strumenti come **dnstwist** (`--homoglyph`) o **urlcrazy** possono enumerare permutazioni di dominio visivamente simili e sono utili per azioni proattive di rimozione / monitoraggio.
## Prevenzione e Mitigazione
* Applicare politiche DMARC/DKIM/SPF rigorose prevenire lo spoofing da domini non autorizzati.
* Implementare la logica di rilevamento sopra in **Secure Email Gateways** e **SIEM/XSOAR** playbook.
* Segnalare o mettere in quarantena i messaggi in cui il dominio del nome visualizzato ≠ dominio del mittente.
* Educare gli utenti: copiare e incollare testo sospetto in un ispezionatore Unicode, passare il mouse sui link, non fidarsi mai degli accorciatori di URL.
## Esempi del Mondo Reale
* Nome visualizzato: `Сonfidеntiаl ikеt` (Cirillico `С`, `е`, `а`; Cherokee ``; maiuscolo latino ``).
* Catena di dominio: `bestseoservices.com` ➜ directory municipale `/templates``kig.skyvaulyt.ru` ➜ falso login Microsoft su `mlcorsftpsswddprotcct.approaches.it.com` protetto da CAPTCHA OTP personalizzato.
* Impersonificazione di Spotify: mittente `Sρօtifւ` con link nascosto dietro `redirects.ca`.
Questi campioni provengono dalla ricerca di Unit 42 (luglio 2025) e illustrano come l'abuso di omografi sia combinato con la redirezione URL e l'evasione CAPTCHA per bypassare l'analisi automatizzata.
## Riferimenti
- [The Homograph Illusion: Not Everything Is As It Seems](https://unit42.paloaltonetworks.com/homograph-attacks/)
- [Unicode Character Database](https://home.unicode.org/)
- [dnstwist domain permutation engine](https://github.com/elceef/dnstwist)
{{#include ../../banners/hacktricks-training.md}}