
Gerar lista de domínios potenciais de typosquatting com mecanismo de permutação de nomes de domínio para alimentar o AIL e outros sistemas.
ail-typo-squatting é uma biblioteca Python para gerar listas de potenciais domínios de typo squatting com um motor de permutação de nomes de domínio para alimentar o AIL e outros sistemas.
A ferramenta pode ser usada como uma ferramenta autónoma ou para alimentar outros sistemas.
Se não quiser utilizar a biblioteca Python, https://typosquatting-finder.circl.lu/ é um serviço online que utiliza esta biblioteca.
Python 3.6+
biblioteca inflect
ail-typo-squatting pode ser instalado com poetry. Se não tiver poetry instalado, pode executar o seguinte curl -sSL https://install.python-poetry.org | python3 -.
$ poetry install
$ poetry shell
$ cd ail-typo-squatting
$ python typo.py -h
$ pip3 install ail-typo-squatting
dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py --help
usage: typo.py [-h] [-v] [-dn DOMAINNAME [DOMAINNAME ...]] [-fdn FILEDOMAINNAME] [-o OUTPUT] [-fo FORMATOUTPUT] [-br] [-dnsr] [-dnsl] [-l LIMIT] [-var] [-ko] [-a] [-om] [-repe] [-repl] [-drepl] [-cho]
[-add] [-md] [-sd] [-vs] [-ada] [-hg] [-ahg] [-cm] [-hp] [-wt] [-wsld] [-at] [-sub] [-sp] [-cdd] [-addns] [-uddns] [-ns] [-combo] [-ca]
optional arguments:
-h, --help show this help message and exit
-v verbose, more display
-dn DOMAINNAME [DOMAINNAME ...], --domainName DOMAINNAME [DOMAINNAME ...]
list of domain name
-fdn FILEDOMAINNAME, --filedomainName FILEDOMAINNAME
file containing list of domain name
-o OUTPUT, --output OUTPUT
path to ouput location
-fo FORMATOUTPUT, --formatoutput FORMATOUTPUT
format for the output file, yara - regex - yaml - text. Default: text
-br, --betterregex Use retrie for faster regex
-dnsr, --dnsresolving
resolve all variation of domain name to see if it's up or not
-dnsl, --dnslimited resolve all variation of domain name but keep only up domain in final result json
-l LIMIT, --limit LIMIT
limit of variations for a domain name
-var, --givevariations
give the algo that generate variations
-ko, --keeporiginal Keep in the result list the original domain name
-a, --all Use all algo
-om, --omission Leave out a letter of the domain name
-repe, --repetition Character Repeat
-repl, --replacement Character replacement
-drepl, --doublereplacement
Double Character Replacement
-cho, --changeorder Change the order of letters in word
-add, --addition Add a character in the domain name
-md, --missingdot Delete a dot from the domain name
-sd, --stripdash Delete of a dash from the domain name
-vs, --vowelswap Swap vowels within the domain name
-ada, --adddash Add a dash between the first and last character in a string
-hg, --homoglyph One or more characters that look similar to another character but are different are called homogylphs
-ahg, --all_homoglyph
generate all possible homoglyph permutations. Ex: circl.lu, e1rc1.lu
-cm, --commonmisspelling
Change a word by is misspellings
-hp, --homophones Change word by an other who sound the same when spoken
-wt, --wrongtld Change the original top level domain to another
-wsld, --wrongsld Change the original second level domain to another
-at, --addtld Adding a tld before the original tld
-sub, --subdomain Insert a dot at varying positions to create subdomain
-sp, --singularpluralize
Create by making a singular domain plural and vice versa
-cdd, --changedotdash
Change dot to dash
-addns, --adddynamicdns
Add dynamic dns at the end of the domain
-uddns, --updatedynamicdns
Update dynamic dns warning list
-ns, --numeralswap Change a numbers to words and vice versa. Ex: circlone.lu, circl1.lu
-combo Combine multiple algo on a domain name
-ca, --catchall Combine with -dnsr. Generate a random string in front of the domain.
ail-project.org e circl.lu, utilizando todos os algoritmos.dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org circl.lu -a -o .
dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -fdn domain.txt -co -sub -hyp -o . -fo yara
ail-project.org e circl.lu, utilizando todos os algoritmos e resolução de DNS.dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org circl.lu -a -dnsr -o .
ail-project.org e indicar o algoritmo que gera a variação (apenas para formato de texto).dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org -a -o - -var
from ail_typo_squatting import runAll
import math
resultList = list()
domainList = ["google.com"]
formatoutput = "yara"
pathOutput = "."
for domain in domainList:
resultList = runAll(
domain=domain,
limit=math.inf,
formatoutput=formatoutput,
pathOutput=pathOutput,
verbose=False,
givevariations=False,
keeporiginal=False
)
print(resultList)
resultList = list()
from ail_typo_squatting import formatOutput, omission, subdomain, addDash
import math
resultList = list()
domainList = ["google.com"]
limit = math.inf
formatoutput = "yara"
pathOutput = "."
for domain in domainList:
resultList = omission(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
resultList = subdomain(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
resultList = addDash(domain=domain, resultList=resultList, verbose=False, limit=limit, givevariations=False, keeporiginal=False)
print(resultList)
formatOutput(format=formatoutput, resultList=resultList, domain=domain, pathOutput=pathOutput, givevariations=False)
resultList = list()
Existem 4 formatos possíveis para o ficheiro de saída:
Para o ficheiro Text, cada linha é uma variação.
ail-project.org
il-project.org
al-project.org
ai-project.org
ailproject.org
ail-roject.org
ail-poject.org
ail-prject.org
ail-proect.org
ail-projct.org
ail-projet.org
ail-projec.org
aail-project.org
aiil-project.org
...
Para o ficheiro Yara, cada regra é uma variação.
rule ail-project_org {
meta:
domain = "ail-project.org"
strings:
$s0 = "ail-project.org"
$s1 = "il-project.org"
$s2 = "al-project.org"
$s3 = "ai-project.org"
$s4 = "ailproject.org"
$s5 = "ail-roject.org"
$s6 = "ail-poject.org"
$s7 = "ail-prject.org"
$s8 = "ail-proect.org"
$s9 = "ail-projct.org"
$s10 = "ail-projet.org"
$s11 = "ail-projec.org"
condition:
any of ($s*)
}
Para o ficheiro Regex, cada variação é transformada em regex e concatenada com as demais para formar apenas uma grande regex.
ail\-project\.org|il\-project\.org|al\-project\.org|ai\-project\.org|ailproject\.org|ail\-roject\.org|ail\-poject\.org|ail\-prject\.org|ail\-proect\.org|ail\-projct\.org|ail\-projet\.org|ail\-projec\.org
Para o ficheiro Sigma, cada variação é listada sob a chave variations.
title: ail-project.org
variations:
- ail-project.org
- il-project.org
- al-project.org
- ai-project.org
- ailproject.org
- ail-roject.org
- ail-poject.org
- ail-prject.org
- ail-proect.org
- ail-projct.org
- ail-projet.org
- ail-projec.org
Se a resolução de DNS for selecionada, será criado um ficheiro adicional em formato JSON
cada chave é uma variação e pode ter um campo "ip" se o nome de domínio tiver sido resolvido. O campo "NotExist" estará sempre presente com um valor booleano para determinar se o domínio existe ou não.
{
"circl.lu": {
"NotExist": false,
"ip": [
"185.194.93.14"
]
},
"ircl.lu": {
"NotExist": true
},
"crcl.lu": {
"NotExist": true
},
"cicl.lu": {
"NotExist": true
},
"cirl.lu": {
"NotExist": true
},
"circ.lu": {
"NotExist": true
},
"ccircl.lu": {
"NotExist": true
},
"ciircl.lu": {
"NotExist": true
},
...
}

O projeto foi cofinanciado pelo programa CEF-TC-2020-2 - 2020-EU-IA-0260 - JTAN - Joint Threat Analysis Network.
| Algoritmo | Descrição |
|---|
| AddDash | Estes erros de digitação são criados adicionando um hífen entre o primeiro e o último caractere de uma string. |
| Addition | Estes erros de digitação são criados ao adicionar caracteres ao nome de domínio. |
| AddDynamicDns | Estes erros de digitação são criados adicionando um DNS dinâmico no final do domínio original. |
| AddTld | Estes erros de digitação são criados adicionando um TLD antes do TLD correto. Exemplo: google.com torna-se google.com.it |
| ChangeDotDash | Estes erros de digitação são criados alterando um ponto para um hífen. |
| ChangeOrder | Estes erros de digitação são criados alterando a ordem das letras em cada parte do domínio. |
| Combo | Estes erros de digitação são criados combinando múltiplos algoritmos. Por exemplo, circl.lu torna-se cirl6.lu |
| CommonMisspelling | Estes erros de digitação são criados substituindo uma palavra pela sua ortografia incorreta. Mais de 8000 erros ortográficos comuns da Wikipédia. Por exemplo, www.youtube.com torna-se www.youtub.com e www.abseil.com torna-se www.absail.com. |
| Double Replacement | Estes erros de digitação são criados substituindo letras idênticas e consecutivas do nome de domínio. |
| Homoglyph | Estes erros de digitação são criados substituindo caracteres por outros que parecem semelhantes, mas são diferentes. Um exemplo é que o l minúsculo parece-se com o numeral um, ex: l vs 1. Por exemplo, google.com torna-se goog1e.com. |
| Homophones | Estes erros de digitação são criados substituindo uma palavra por outra que soa igual quando falada. Mais de 450 conjuntos de palavras que soam igual quando faladas. Por exemplo, www.base.com torna-se www.bass.com. |
| MissingDot | Estes erros de digitação são criados ao eliminar um ponto do nome de domínio. |
| NumeralSwap | Estes erros de digitação são criados alterando um número para palavras e vice-versa. Por exemplo, circlone.lu torna-se circl1.lu. |
| Omission | Estes erros de digitação são criados omitindo uma letra do nome de domínio, uma letra de cada vez. |
| Repetition | Estes erros de digitação são criados repetindo uma letra do nome de domínio. |
| Replacement | Estes erros de digitação são criados substituindo cada letra do nome de domínio. |
| StripDash | Estes erros de digitação são criados ao eliminar um hífen do nome de domínio. |
| SingularPluralize | Estes erros de digitação são criados tornando um domínio singular plural e vice-versa. |
| Subdomain | Estes erros de digitação são criados colocando um ponto no nome de domínio para criar um subdomínio. Exemplo: google.com torna-se goo.gle.com |
| VowelSwap | Estes erros de digitação são criados trocando as vogais dentro do nome de domínio, exceto a primeira letra. Por exemplo, www.google.com torna-se www.gaagle.com. |
| WrongTld | Estes erros de digitação são criados alterando o domínio de topo original para outro. Por exemplo, www.trademe.co.nz torna-se www.trademe.co.mz e www.google.com torna-se www.google.org. Utiliza os 19 domínios de topo mais comuns. |
| WrongSld | Estes erros de digitação são criados alterando o domínio de segundo nível original para outro. Por exemplo, www.trademe.co.uk torna-se www.trademe.ac.uk e www.google.com continuará a ser www.google.com . |