Is that domain pretending to be yours? How look-alike domains are generated, how IDN homographs get past the eye, and how to tell a threat from a parked registration

DedSec Security Research ·

A finance team receives a reply to an invoice thread from [email protected]. A customer gets a password reset link to examp1e.com. A browser shows a padlock and a name that reads exactly as your brand, because the name is written in Cyrillic letters. None of these involves your DNS, your mail servers or your certificates, so nothing in their configuration prevents it. They are registrations somebody else made, and the earliest point you can act is when you notice them.

The breach and brand monitoring post introduced look-alike domains as one of the attack paths that never touch your network, and the email authentication post explained why DMARC cannot help with them. This post goes further: how look-alike candidates are generated, how internationalised names fool the eye in mechanism, where newly registered look-alikes become visible and what each source misses, and how to separate the domain that is being used against you this week from the one that will sit parked for ten years.

Examples use the reserved name example.com (RFC 2606). Where a statement is about a standard, the RFC or Unicode document is named so it can be checked. The detection and triage methods are general practice, not a description of how Maphra implements its checks.

A look-alike is a set of states, not a yes or no

Before any technique, separate the states a candidate name can be in, because each is visible through a different source and calls for a different response:

  1. Candidate. A string someone could register. Not yet an object in the world.
  2. Registered. The registry holds a record for it. RDAP or WHOIS shows a registrar and a creation date.
  3. Delegated. The registry publishes nameservers for it in the TLD zone, so it can resolve. A registered domain is not necessarily delegated: one with no nameservers, or with an EPP hold status (RFC 5731 says delegation information must not be published for a domain on clientHold or serverHold), is absent from the zone and returns NXDOMAIN.
  4. Resolving. The name or something under it has address records.
  5. Mail-capable. It can receive mail.
  6. Certificated. A publicly trusted certificate has been issued for it.
  7. Serving content, which may be a parking page, a for-sale notice, a redirect, an unrelated business, or a copy of your site.

Most monitoring output collapses these into one row labelled "similar domain found". The rest of this post is about keeping them apart.

How candidates are generated

There is no index you can query for "domains that look like mine". The practical method, used by the open-source tool dnstwist among others, is to generate every plausible variant of your name, then ask DNS which variants exist. The classes worth generating, with example.com as the input:

The space is large because the classes multiply. Every string exactly one insertion, deletion, substitution or adjacent transposition away from the seven-character label example, over the 37 characters a hostname label can use, comes to 550 distinct labels once those starting or ending with a hyphen are removed. That is distance one only. Multiply by the TLDs you care about, add the dictionary of words an attacker might bolt on, add homoglyphs, and the arithmetic runs away quickly: the 550 distance-one labels alone, under 50 TLDs, are 27,500 names. Enumerating them and resolving each is cheap. Deciding which matter is not.

Two limits of the enumerate-then-resolve approach follow directly from the states above. A DNS lookup cannot see a domain that is registered but not delegated, which is often the state between purchase and campaign. And a generator only finds what its rules produce: example-payments-portal.com is obvious to a person and is not within edit distance one of anything.

IDN homographs, in mechanism

DNS labels are ASCII. A name containing other scripts is stored as an ASCII-compatible encoding: the prefix xn-- followed by the Punycode form of the Unicode label, defined in RFC 3492. The current rules for which Unicode characters may appear in a label, and how a label is converted, are IDNA2008 (specified in RFC 5890 to RFC 5893). The registry, resolver and certificate all deal with the xn-- form. Only the display layer shows Unicode.

That gap is the attack. In April 2017 Xudong Zheng published a demonstration domain, xn--80ak6aa92e.com. Decode the Punycode and the label is five Cyrillic characters: а (U+0430), р (U+0440) twice, ӏ (U+04CF, palochka) and е (U+0435). Rendered, it reads as apple, and at the time Chrome and Firefox displayed it that way in the address bar. Chrome changed its display rules in response; Firefox users were pointed at the network.IDN_show_punycode preference, which displays every internationalised name in its xn-- form.

The vocabulary for reasoning about this is in Unicode Technical Standard #39, Unicode Security Mechanisms:

Not every brand is exposed to whole-script spoofing. It needs every letter of the name to have a confusable in a single other script; many Latin letters have no close Cyrillic or Greek counterpart. Running your name through the skeleton algorithm with confusables.txt answers the question for your brand specifically.

Three more facts that change the practical picture:

Where new look-alikes become visible, and what each source misses

Certificate Transparency. Publicly trusted CAs log certificates to public append-only logs (RFC 6962, version 2 in RFC 9162), and major browsers require proof of logging. A CA usually logs a precertificate before issuing the final certificate, so the name is public at about the moment of issuance, often before any page is live. Searching the logs for your brand string, and for the xn-- forms of its confusable variants, is an early signal that costs nothing. The TLS posture post covers what CT publishes about your own names. The limits for look-alikes: a name only appears if someone obtained a publicly trusted certificate for it; plain-HTTP phishing does not need one; and a wildcard certificate for *.verify-account.example.net hides example-com.verify-account.example.net completely, because only the wildcard is logged (a wildcard covers a single label, so the attacker picks a brand-bearing name one label deep).

Zone files. ICANN's Centralized Zone Data Service (CZDS) gives approved applicants access to the zone files of generic TLDs, with access requested and granted per TLD. Comparing consecutive files shows newly delegated domains. The limits: zone files contain delegations, so a registered but undelegated name is absent; they contain no subdomains, so brand-as-subdomain names are invisible; and country-code TLDs are outside ICANN's contracts, so most ccTLD zones are not available at all.

Passive DNS. Sensors record the names resolvers actually look up and what they resolved to. This is the source that sees example.com.verify-account.example.net once someone visits it, and it shows a name's address history. The limits: coverage depends on where the sensors sit, a name nobody has resolved yet does not appear, and data arrives after use, not at registration.

Newly registered domain feeds. Commercial and community lists of new registrations, typically assembled from the sources above. Useful as a convenience; check which underlying sources a feed draws from, because it inherits their gaps.

No source covers everything. A scanner that stops receiving from a source and reports "no new look-alikes" is reporting an outage as a clean result, so a monitoring set-up should alert when a source goes quiet, not only when it finds something.

Triage: from similar to dangerous

Distance from your name is a poor ranking on its own. Short brands have dense neighbourhoods full of dictionary words and unrelated businesses, so distance-one matches are mostly legitimate. Meanwhile the names doing damage are often far away in edit distance: example-billing-support.com is many edits from example.com, and an IDN homograph compared in xn-- form shares almost no characters with it. Score on what a reader would perceive instead (the skeleton of the Unicode form, and whether your brand appears as a token after splitting on hyphens and dots), then rank by corroboration.

The corroborating signals, roughly in order of how much they change the picture:

And the reasons a similar domain is not a threat:

One caution about negative results. Phishing kits commonly cloak: they serve the kit only to visitors from certain countries, with certain user agents, via a specific path or token from the lure, and serve a blank page or a 404 to everything else, including scanners from data-centre addresses. "Nothing served at /" is weak evidence that nothing is being served.

Keep the evidence before you act

Look-alike infrastructure disappears and reappears. Whoever handles the report, whether an abuse desk, a dispute panel or your own legal team, needs to see what you saw, so capture it at detection time:

The post on why findings need evidence makes the general case; here it is concrete, because the domain may serve a parking page by the time anyone reviews the report.

Response options

These are general practice; which ones apply depends on the TLD, the hosting and what the domain is doing.

DMARC is not on this list for the reason the email authentication post gives: it protects domains you control, and a look-alike is not one of them.

Where Maphra fits

Maphra's breach and brand monitoring covers look-alike domains and impersonating applications, alongside credential exposure in breach corpora and dark-web mentions, and runs as continuous brand surveillance. Its discovery monitors certificate transparency, re-runs on a schedule and diffs the result against the last known surface, reporting what appeared, what changed and what disappeared. Every finding carries the evidence that produced it, and findings are deduplicated across scans and tracked through new, reopened and fixed states.

That is the whole claim. This post does not claim which permutation classes Maphra generates, that its certificate transparency monitoring searches for look-alike names rather than your own, that it computes UTS #39 skeletons, reads CZDS zone files, passive DNS or new-registration feeds, checks MX records or SMTP acceptance, renders screenshots or compares page hashes, applies the corroboration order above, or files abuse reports or disputes. The generation, discovery and triage methods are general practice, written so that you can apply them with dnstwist, a CT search, dig and RDAP.

A checklist you can run yourself

  1. List the names you protect: brand labels, product names, login, payment and support hostnames, and the domains you send mail from.
  2. Generate candidates across the permutation classes and the TLDs that matter to you, for example with dnstwist, including a dictionary of the words attackers bolt on (login, secure, support, billing, verify, account).
  3. Compute skeletons with confusables.txt for your brand and each candidate, and check whether your name has a whole-script confusable.
  4. Resolve candidates, and for the ones that matter most, check RDAP too, since DNS misses undelegated registrations.
  5. Search Certificate Transparency for your brand string and its skeleton forms, and remember wildcards hide subdomains.
  6. Watch your own web and CDN logs for Referer headers from domains you do not own.
  7. Rank by corroboration, not distance: mail capability, certificate, copied content, references to your assets, recent changes.
  8. Mark your own and known third-party domains so they stop resurfacing.
  9. Alert on change, not only on discovery: nameserver, MX, certificate and content changes on parked names.
  10. Alert when a source goes quiet.
  11. Capture evidence at detection, with UTC timestamps, before you report.
  12. Pick the response by goal: abuse reports and blocklists to stop a live page, UDRP to take ownership, URS for a fast suspension where it applies.
  13. Lock down defensive registrations with SPF -all, DMARC p=reject and a null MX.

A look-alike domain is someone else's asset aimed at your users. You cannot prevent its registration, but you can notice it at certificate issuance or delegation rather than at the first complaint, and arrive at the abuse desk with evidence instead of a screenshot taken the morning after.

More about Maphra · All posts