
Genera un elenco di potenziali domini typosquatting con un motore di permutazione dei nomi di dominio per alimentare AIL e altri sistemi.
ail-typo-squatting è una libreria Python per generare un elenco di potenziali domini typosquatting con un motore di permutazione dei nomi di dominio, per alimentare AIL e altri sistemi.
Lo strumento può essere utilizzato come strumento autonomo o per alimentare altri sistemi.
Se non vuoi utilizzare la libreria Python, https://typosquatting-finder.circl.lu/ è un servizio online che utilizza questa libreria.
ail-typo-squatting può essere installato con poetry. Se non hai poetry installato, puoi eseguire il seguente comando 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, utilizzando tutti gli algoritmi.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, utilizzando tutti gli algoritmi e la risoluzione DNS.dacru@dacru:~/git/ail-typo-squatting/bin$ python3 typo.py -dn ail-project.org circl.lu -a -dnsr -o .
ail-project.org e indicazione dell'algoritmo che genera la variazione (solo per il formato text).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()
Ci sono 4 formati possibili per il file di output:
Per il file Text, ogni riga è una variazione.
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
...
Per il file Yara, ogni regola è una variazione.
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*)
}
Per il file Regex, ogni variazione viene trasformata in regex e concatenata con le altre per ottenere un'unica 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
Per il file Sigma, ogni variazione è elencata sotto la chiave 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 la risoluzione DNS è selezionata, verrà creato un file aggiuntivo in formato JSON.
Ogni chiave è una variazione e può avere un campo "ip" se il nome di dominio è stato risolto. Il campo "NotExist" sarà presente ogni volta con un valore booleano per determinare se il dominio esiste o meno.
{
"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
},
...
}

Il progetto è stato cofinanziato da CEF-TC-2020-2 - 2020-EU-IA-0260 - JTAN - Joint Threat Analysis Network.
| Algo | Description |
|---|
| AddDash | Questi typo sono creati aggiungendo un trattino tra il primo e l'ultimo carattere di una stringa. |
| Addition | Questi typo sono creati aggiungendo un carattere al nome di dominio. |
| AddDynamicDns | Questi typo sono creati aggiungendo un DNS dinamico alla fine del dominio originale. |
| AddTld | Questi typo sono creati aggiungendo un TLD prima del TLD corretto. Esempio: google.com diventa google.com.it |
| ChangeDotDash | Questi typo sono creati cambiando un punto in un trattino. |
| ChangeOrder | Questi typo sono creati cambiando l'ordine delle lettere in ogni parte del dominio. |
| Combo | Questi typo sono creati combinando più algoritmi. Ad esempio, circl.lu diventa cirl6.lu |
| CommonMisspelling | Questi typo sono creati sostituendo una parola con una sua forma errata. Oltre 8000 errori di ortografia comuni da Wikipedia. Ad esempio, www.youtube.com diventa www.youtub.com e www.abseil.com diventa www.absail.com. |
| Double Replacement | Questi typo sono creati sostituendo lettere identiche e consecutive del nome di dominio. |
| Homoglyph | Questi typo sono creati sostituendo caratteri con altri che sembrano simili ma sono diversi. Un esempio è che la l minuscola somiglia al numero uno, ad esempio l vs 1. Ad esempio, google.com diventa goog1e.com. |
| Homophones | Questi typo sono creati sostituendo una parola con un'altra che suona uguale quando viene pronunciata. Oltre 450 gruppi di parole che suonano allo stesso modo quando pronunciate. Ad esempio, www.base.com diventa www.bass.com. |
| MissingDot | Questi typo sono creati eliminando un punto dal nome di dominio. |
| NumeralSwap | Questi typo sono creati cambiando un numero in parole e viceversa. Ad esempio, circlone.lu diventa circl1.lu. |
| Omission | Questi typo sono creati omettendo una lettera del nome di dominio, una lettera alla volta. |
| Repetition | Questi typo sono creati ripetendo una lettera del nome di dominio. |
| Replacement | Questi typo sono creati sostituendo ogni lettera del nome di dominio. |
| StripDash | Questi typo sono creati eliminando un trattino dal nome di dominio. |
| SingularPluralize | Questi typo sono creati trasformando un dominio singolare in plurale e viceversa. |
| Subdomain | Questi typo sono creati inserendo un punto nel nome di dominio per creare un sottodominio. Esempio: google.com diventa goo.gle.com |
| VowelSwap | Questi typo sono creati scambiando le vocali all'interno del nome di dominio, tranne la prima lettera. Ad esempio, www.google.com diventa www.gaagle.com. |
| WrongTld | Questi typo sono creati cambiando il dominio di primo livello originale con un altro. Ad esempio, www.trademe.co.nz diventa www.trademe.co.mz e www.google.com diventa www.google.org. Utilizza i 19 domini di primo livello più comuni. |
| WrongSld | Questi typo sono creati cambiando il dominio di secondo livello originale con un altro. Ad esempio, www.trademe.co.uk diventa www.trademe.ac.uk e www.google.com rimarrà www.google.com. |